From: MadMetzger <mad...@us...> - 2010-07-30 18:44:38
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/server/core/events/achievements In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv12976/src/games/stendhal/server/core/events/achievements Modified Files: AchievementNotifier.java Log Message: * let achievement notifier update existing achievements * comment sources a bit Index: AchievementNotifier.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/core/events/achievements/AchievementNotifier.java,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** AchievementNotifier.java 30 Jul 2010 17:22:41 -0000 1.33 --- AchievementNotifier.java 30 Jul 2010 18:44:30 -0000 1.34 *************** *** 18,25 **** import java.util.List; import java.util.Map; - import java.util.Set; import marauroa.server.db.command.DBCommandQueue; - import marauroa.server.db.command.ResultHandle; import marauroa.server.game.db.DAORegister; --- 18,23 ---- *************** *** 40,45 **** private Map<String, Integer> identifiersToIds; - private ResultHandle handle = new ResultHandle(); - private AchievementNotifier() { achievements = new HashMap<Category, List<Achievement>>(); --- 38,41 ---- *************** *** 64,67 **** --- 60,64 ---- */ public void initialize() { + //read all configured achievements and put them into the categorized map Map<String, Achievement> allAchievements = createAchievements(); for(Achievement a : allAchievements.values()) { *************** *** 71,82 **** achievements.get(a.getCategory()).add(a); } ! Set<String> allIdentifiersInDatabase = collectAllIdentifiersFromDatabase(); ! for(String identifier : allIdentifiersInDatabase) { allAchievements.remove(identifier); } for (Achievement a : allAchievements.values()) { Integer id; try { ! id = DAORegister.get().get(AchievementDAO.class).saveAchievement(a.getIdentifier(), a.getTitle(), a.getCategory(), a.getBaseScore()); identifiersToIds.put(a.getIdentifier(), id); } catch (SQLException e) { --- 68,96 ---- achievements.get(a.getCategory()).add(a); } ! //collect all identifiers from database ! Map<String, Integer> allIdentifiersInDatabase = collectAllIdentifiersFromDatabase(); ! //update stored data with configured achievements ! identifiersToIds.putAll(allIdentifiersInDatabase); ! for(String identifier : allIdentifiersInDatabase.keySet()) { ! Achievement achievement = allAchievements.get(identifier); ! try { ! if(achievement != null) { ! DAORegister.get().get(AchievementDAO.class).updateAchievement(allIdentifiersInDatabase.get(identifier), achievement); ! } else { ! //TODO delete achievement id from database and reached achievements? ! } ! } catch (SQLException e) { ! logger.error("Error while updating exisiting achievement "+achievement.getTitle(), e); ! } ! } ! // remove already stored achievements before saving them ! for(String identifier : allIdentifiersInDatabase.keySet()) { allAchievements.remove(identifier); } + //save new achievements and add their identifier and id to the identifierToId map for (Achievement a : allAchievements.values()) { Integer id; try { ! id = DAORegister.get().get(AchievementDAO.class).saveAchievement(a); identifiersToIds.put(a.getIdentifier(), id); } catch (SQLException e) { *************** *** 84,87 **** --- 98,102 ---- } } + // register the login notifier that checks for each player the reached achievements on login SingletonRepository.getLoginNotifier().addListener(new ReadAchievementsOnLogin()); } *************** *** 92,96 **** * @return a set of all identifier strings */ ! private Set<String> collectAllIdentifiersFromDatabase() { Map<String, Integer> mapFromDB = new HashMap<String, Integer>(); try { --- 107,111 ---- * @return a set of all identifier strings */ ! private Map<String, Integer> collectAllIdentifiersFromDatabase() { Map<String, Integer> mapFromDB = new HashMap<String, Integer>(); try { *************** *** 99,104 **** logger.error("Error while loading Identifier to id map for achievements.", e); } ! identifiersToIds.putAll(mapFromDB); ! return mapFromDB.keySet(); } --- 114,118 ---- logger.error("Error while loading Identifier to id map for achievements.", e); } ! return mapFromDB; } |