From 729d539c90632de0c47f4e342c7c6be7975329b2 Mon Sep 17 00:00:00 2001 From: Gabriel Copat <copatg@cardiff.ac.uk> Date: Tue, 5 Dec 2023 11:47:17 +0000 Subject: [PATCH] Rewards like Badges and Stickers now extend an abstract class Rewards Restructured rewards package for organization --- .../java/team5/smartTowns/rewards/Badge.java | 38 +++------------- .../java/team5/smartTowns/rewards/Reward.java | 39 +++++++++++++++++ .../smartTowns/rewards/RewardsController.java | 7 --- .../team5/smartTowns/rewards/Sticker.java | 43 +++++-------------- .../rewards/{ => data}/BadgesRepository.java | 4 +- .../{ => data}/BadgesRepositoryJDBC.java | 3 +- .../{ => data}/StickersRepository.java | 4 +- .../{ => data}/StickersRepositoryJDBC.java | 6 ++- 8 files changed, 68 insertions(+), 76 deletions(-) create mode 100644 src/main/java/team5/smartTowns/rewards/Reward.java delete mode 100644 src/main/java/team5/smartTowns/rewards/RewardsController.java rename src/main/java/team5/smartTowns/rewards/{ => data}/BadgesRepository.java (62%) rename src/main/java/team5/smartTowns/rewards/{ => data}/BadgesRepositoryJDBC.java (91%) rename src/main/java/team5/smartTowns/rewards/{ => data}/StickersRepository.java (62%) rename src/main/java/team5/smartTowns/rewards/{ => data}/StickersRepositoryJDBC.java (85%) diff --git a/src/main/java/team5/smartTowns/rewards/Badge.java b/src/main/java/team5/smartTowns/rewards/Badge.java index d1ecc486..871cfbf3 100644 --- a/src/main/java/team5/smartTowns/rewards/Badge.java +++ b/src/main/java/team5/smartTowns/rewards/Badge.java @@ -1,51 +1,27 @@ /*AUTHOR: Gabriel Copat*/ package team5.smartTowns.rewards; -import lombok.Data; +import lombok.Getter; import java.io.File; -import java.util.Objects; -@Data -public class Badge { +@Getter +public class Badge extends Reward { /* Badges can be earned by completing certain goals. * They are displayed in the user profile page * * For example, one might earn a badge after visiting 20 locations */ + static final String DEFAULT_IMAGE = "0.png"; - int id; - String name; - String description; - String imgPath; int difficulty; //1-5 public Badge(int id, String name, String description, int difficulty) { - this.id = id; - this.name = name; - this.description = description; + super(id, name, description); this.difficulty = difficulty; - imgPath = findImagePath(); - } - - private String findImagePath(){ - /* Finds the image in the Path folder, if image is not found assigns default image */ - String imgPath = "images/rewards/badges/" + id + ".jpg"; - String notFoundPath = "/images/rewards/badges/0.png"; - - File imgFile = new File("src/main/resources/static/" + imgPath); - return imgFile.exists() ? imgPath : notFoundPath; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Badge badge = (Badge) o; - return id == badge.id && Objects.equals(name, badge.name); } @Override - public int hashCode() { - return Objects.hash(id, name); + public String getImgFolder() { + return "badges"; } } diff --git a/src/main/java/team5/smartTowns/rewards/Reward.java b/src/main/java/team5/smartTowns/rewards/Reward.java new file mode 100644 index 00000000..215c1e42 --- /dev/null +++ b/src/main/java/team5/smartTowns/rewards/Reward.java @@ -0,0 +1,39 @@ +package team5.smartTowns.rewards; + +import lombok.Getter; + +import java.io.File; + +@Getter +public abstract class Reward { + /* Abstract class for all rewards */ + + int id; + String displayImg; //Path to the image file + String name; + String description; + + public Reward(int id, String name, String description) { + //Default constructor + this.id = id; + this.name = name; + this.description = description; + displayImg = findImagePath(); + } + + public abstract String getImgFolder(); + /*Returns folder in which images are located*/ + + public String getDefaultImg(){ + /*Returns the name of the default image to be used in case no image is found*/ + return "0.png"; + }; + public String findImagePath(){ + /* Finds the image in the Path folder, if image is not found assigns default image */ + String imgPath = "images/rewards/" + getImgFolder() + "/" + id + ".jpg"; + String notFoundPath = "images/rewards/" + getImgFolder() + "/" + getDefaultImg(); + + File imgFile = new File("src/main/resources/static/" + imgPath); + return imgFile.exists() ? imgPath : notFoundPath; + } +} diff --git a/src/main/java/team5/smartTowns/rewards/RewardsController.java b/src/main/java/team5/smartTowns/rewards/RewardsController.java deleted file mode 100644 index b8e81b56..00000000 --- a/src/main/java/team5/smartTowns/rewards/RewardsController.java +++ /dev/null @@ -1,7 +0,0 @@ -package team5.smartTowns.rewards; - -import org.springframework.stereotype.Controller; - -@Controller -public class RewardsController { -} diff --git a/src/main/java/team5/smartTowns/rewards/Sticker.java b/src/main/java/team5/smartTowns/rewards/Sticker.java index fe067dbf..a80a02de 100644 --- a/src/main/java/team5/smartTowns/rewards/Sticker.java +++ b/src/main/java/team5/smartTowns/rewards/Sticker.java @@ -2,36 +2,27 @@ package team5.smartTowns.rewards; import lombok.Data; +import lombok.Getter; import java.io.File; import java.util.Objects; -@Data -public class Sticker { - /* Stickers are trade-able rewards, they vary in rarity and are earned at random */ +@Getter +public class Sticker extends Reward{ + /* Stickers are randomly earned rewards from a specific pack */ - int id; - String name; - String description; - String imgPath; int rarity; //1-5 boolean hasSticker; + String pack; - public Sticker(int id, String name, String description, int rarity) { - this.id = id; - this.name = name; - this.description = description; + public Sticker(int id, String name, String description, int rarity, String pack) { + super(id, name, description); this.rarity = rarity; - imgPath = findImagePath(); } - private String findImagePath(){ - /* Finds the image in the Path folder, if image is not found assigns default image */ - String imgPath = "images/rewards/stickers/" + id + ".jpg"; - String notFoundPath = "images/rewards/stickers/0.png"; - - File imgFile = new File("src/main/resources/static/" + imgPath); - return imgFile.exists() ? imgPath : notFoundPath; + @Override + public String getImgFolder() { + return "stickers"; } public boolean hasSticker(){ @@ -43,19 +34,5 @@ public class Sticker { public String getVisibility(){ return hasSticker? "" : "grayedOut"; } - - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Sticker sticker = (Sticker) o; - return id == sticker.id && Objects.equals(name, sticker.name); - } - - @Override - public int hashCode() { - return Objects.hash(id, name); - } } diff --git a/src/main/java/team5/smartTowns/rewards/BadgesRepository.java b/src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java similarity index 62% rename from src/main/java/team5/smartTowns/rewards/BadgesRepository.java rename to src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java index f3dcccde..5b83f8ca 100644 --- a/src/main/java/team5/smartTowns/rewards/BadgesRepository.java +++ b/src/main/java/team5/smartTowns/rewards/data/BadgesRepository.java @@ -1,5 +1,7 @@ //Holds locations data repository -package team5.smartTowns.rewards; +package Team5.SmartTowns.rewards.data; + +import Team5.SmartTowns.rewards.Badge; import java.util.List; diff --git a/src/main/java/team5/smartTowns/rewards/BadgesRepositoryJDBC.java b/src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java similarity index 91% rename from src/main/java/team5/smartTowns/rewards/BadgesRepositoryJDBC.java rename to src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java index a0f62669..107e6b70 100644 --- a/src/main/java/team5/smartTowns/rewards/BadgesRepositoryJDBC.java +++ b/src/main/java/team5/smartTowns/rewards/data/BadgesRepositoryJDBC.java @@ -1,6 +1,7 @@ //Implements the locations repository using JDBC -package team5.smartTowns.rewards; +package Team5.SmartTowns.rewards.data; +import Team5.SmartTowns.rewards.Badge; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; diff --git a/src/main/java/team5/smartTowns/rewards/StickersRepository.java b/src/main/java/team5/smartTowns/rewards/data/StickersRepository.java similarity index 62% rename from src/main/java/team5/smartTowns/rewards/StickersRepository.java rename to src/main/java/team5/smartTowns/rewards/data/StickersRepository.java index 41e12aef..5aeda42b 100644 --- a/src/main/java/team5/smartTowns/rewards/StickersRepository.java +++ b/src/main/java/team5/smartTowns/rewards/data/StickersRepository.java @@ -1,5 +1,7 @@ //Holds locations data repository -package team5.smartTowns.rewards; +package Team5.SmartTowns.rewards.data; + +import Team5.SmartTowns.rewards.Sticker; import java.util.List; diff --git a/src/main/java/team5/smartTowns/rewards/StickersRepositoryJDBC.java b/src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java similarity index 85% rename from src/main/java/team5/smartTowns/rewards/StickersRepositoryJDBC.java rename to src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java index 8789c6db..9e014ec2 100644 --- a/src/main/java/team5/smartTowns/rewards/StickersRepositoryJDBC.java +++ b/src/main/java/team5/smartTowns/rewards/data/StickersRepositoryJDBC.java @@ -1,6 +1,7 @@ //Implements the locations repository using JDBC -package team5.smartTowns.rewards; +package Team5.SmartTowns.rewards.data; +import Team5.SmartTowns.rewards.Sticker; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; @@ -21,7 +22,8 @@ public class StickersRepositoryJDBC implements StickersRepository { rs.getInt("stickerID"), rs.getString("name"), rs.getString("description"), - rs.getInt("rarity") + rs.getInt("rarity"), + rs.getString("pack") ); } -- GitLab