package de.tud.kom.socom.web.client.sharedmodels; import java.util.List; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.user.client.rpc.IsSerializable; import de.tud.kom.socom.web.client.achievements.HorizontalAchievementsPanel; public class Achievement implements IsSerializable { private long achievementID, gameID; private int currentRewardPoints; private String name, description, image, categoryname; private AchievementProgress progress; private List<AchievementLevel> levels; public Achievement() { } public Achievement(long achievementID, long gameID, long counterMax, String name, String description, String image, String categoryname, int currentRewardPoints, List<AchievementLevel> levels, AchievementProgress progress) { this.achievementID = achievementID; this.gameID = gameID; this.name = name; this.description = description; this.image = image; this.categoryname = categoryname; this.currentRewardPoints = currentRewardPoints; this.levels = levels; this.progress = progress; } public int getCurrentRewardPoints() { return currentRewardPoints; } public AchievementProgress getProgress() { return progress; } public long getAchievementID() { return achievementID; } public long getGameID() { return gameID; } public String getName() { return name; } public String getCategoryName() { return categoryname; } public String getDescription() { return description; } public String getImage() { return image; } public List<AchievementLevel> getLevels() { return levels; } public void addLevel(AchievementLevel level) { levels.add(level); } public boolean hasRewards() { for(AchievementLevel level : levels) { if(level.getRewards() != null && level.getRewards().size() > 0) { return true; } } return false; } public int getCurrentPoints() { int maxPoints = 0; for(int level = 0; level < (progress.getCurrentLevel() - 1); level++) { maxPoints += levels.get(level).getRewardPoints(); } if(progress.isCompleted()) { maxPoints += levels.get(levels.size() - 1).getRewardPoints(); } return maxPoints; } public int getMaxPoints() { int maxPoints = 0; for(AchievementLevel level : levels) { maxPoints += level.getRewardPoints(); } return maxPoints; } public SafeHtml toSafeHtml() { final Achievement achievement = this; final int currentLevel = (getProgress().isCompleted()) ? getProgress().getCurrentLevel() : (getProgress().getCurrentLevel() - 1); final String timeCompleted = ("" + achievement.getProgress().getTimeCompleted()).split("\\.")[0]; final String achievementImagePath = HorizontalAchievementsPanel.getImagePath(achievement.getImage()); @SuppressWarnings("serial") SafeHtml safeHtml = new SafeHtml() { @Override public String asString() { String html = "<table style='border:1px solid black'>" + "<tr>" + "<td style='vertical-align:top'>" + "<img src=" + achievementImagePath + " width='64px'>" + "</td>" + "<td style='border:1px inset black'>" + "<table style='width:500px;overflow:auto'>" + "<tr>" + "<td>" + achievement.getName() + "<hr style='color:#fff'>" + "</td>" + "</tr>" + "<tr>" + "<td>" + achievement.getDescription() + "</td>" + "</tr>"; if(achievement.hasRewards()) { for(AchievementLevel level : achievement.getLevels()) { html += "<tr>" + "<td>" + "<table>"; for(AchievementReward reward : level.getRewards()) { html += "<tr>" + "<td colspan='2'>" + "<hr style='color:#fff'>"; if(achievement.getLevels().size() == 1) { html += "Rewards"; } else { html += "Reward for Level " + level.getLevel(); } html += "</td>" + "</tr>" + "<tr>" + "<td style='padding:5px'>" + reward.getName() + "</td>" + "<td style='padding:5px'>" + reward.getDescription() + "</td>" + "</tr>"; } html += "</table>" + "</td>" + "</tr>"; } } html += "</table>" + "</td>" + "<td style='vertical-align:top'>" + "<table style='width:150px;overflow:auto'>" + "<tr>" + "<td>Points</td>" + "<td>" + achievement.getCurrentPoints() + "/" + achievement.getMaxPoints() + "</td>" + "</tr>" + "<tr>" + "<td>Level</td>" + "<td>" + currentLevel + "/" + achievement.getProgress().getMaxLevel() + "</td>" + "</tr>" + "<tr>" + "<td>Progress</td>" + "<td>" + achievement.getProgress().getCounter() + "/" + achievement.getProgress().getCounterMax() + "</td>" + "</tr>"; if(achievement.getProgress().isCompleted()) { html += "<tr>" + "<td>Completed</td>" + "<td>" + timeCompleted + "</td>" + "</tr>"; } html += "</table>" + "</td>" + "</tr>" + "</table>"; return html; } }; return safeHtml; } }