From 7982841dfd149bc9d4d3a9000559ead6dfffeaea Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Sun, 28 Aug 2011 02:12:46 +0200 Subject: [PATCH] Changed the behavior of userstats.xml. See at README.md. --- README.md | 8 +-- .../XmlStats/Datasource/StatsDS.java | 51 +++++++++++++++---- .../XmlWorkers/XmlWorkerUserstats.java | 48 ++++++++++++++--- 3 files changed, 83 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index d52b5bd..0f313de 100644 --- a/README.md +++ b/README.md @@ -16,20 +16,16 @@ For a list of all known players on your server: http://server:port/users.xml -For the stats of all known players: +For the added up stats of all known players: http://server:port/userstats.xml To fetch the stats of the given user: http://server:port/userstats.xml?player=username - -This will eventually be changed to a summarized view of all users stats as soon as the selection of users is implemented The following commands are planned but not implemented yet: - - - + to get data provided by the iConomy plugin: http://server:port/money.xml diff --git a/src/de/sockenklaus/XmlStats/Datasource/StatsDS.java b/src/de/sockenklaus/XmlStats/Datasource/StatsDS.java index 2aec2fa..1fb74c7 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/StatsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/StatsDS.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.HashMap; import com.nidefawl.Stats.Stats; +import com.nidefawl.Stats.datasource.Category; import com.nidefawl.Stats.datasource.PlayerStat; import com.nidefawl.Stats.datasource.PlayerStatSQL; @@ -30,13 +31,8 @@ import de.sockenklaus.XmlStats.XmlStats; */ public class StatsDS extends Datasource { - /** The stats plugin. */ private Stats statsPlugin; - //private Server serverRef; - /** The all player names. */ private ArrayList allPlayerNames; - - /** The stats. */ private HashMap stats = new HashMap(); /** @@ -44,9 +40,8 @@ public class StatsDS extends Datasource { */ public StatsDS() { this.statsPlugin = XmlStats.getStatsPlugin(); - //this.serverRef = XmlStats.getServerRef(); this.allPlayerNames = fetchAllPlayers(); - this.stats = fetchAllPlayerStats(allPlayerNames); + this.stats = fetchPlayerStats(allPlayerNames); } /** @@ -54,9 +49,9 @@ public class StatsDS extends Datasource { * * @return the plugin */ - public Stats getPlugin() { - return this.statsPlugin; - } +// public Stats getPlugin() { + // return this.statsPlugin; + //} /** * Gets the data folder. @@ -73,7 +68,7 @@ public class StatsDS extends Datasource { * @param pPlayerNames the player names * @return the hash map */ - private HashMap fetchAllPlayerStats(ArrayList pPlayerNames){ + private HashMap fetchPlayerStats(ArrayList pPlayerNames){ HashMap result = new HashMap(); for (String playerName : pPlayerNames){ @@ -94,4 +89,38 @@ public class StatsDS extends Datasource { public HashMap getStats(){ return this.stats; } + + public HashMap> getAddedStats(){ + HashMap > result = new HashMap>(); + + for(String playerName : this.stats.keySet()){ + PlayerStat player = this.stats.get(playerName); + + for(String catName : player.getCats()){ + Category cat = player.get(catName); + + for(String entryName : cat.getEntries()){ + Integer entry = cat.get(entryName); + + if(result.containsKey(catName)){ + if(result.get(catName).containsKey(entryName)){ + Integer tempInt = result.get(catName).get(entryName) + entry; + + result.get(catName).put(entryName, tempInt); + } + else { + result.get(catName).put(entryName, entry); + } + } + else { + HashMap tempMap = new HashMap(); + tempMap.put(entryName, entry); + result.put(catName, tempMap); + } + } + } + } + + return result; + } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java index 4f8a3d8..1463c50 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java @@ -17,6 +17,7 @@ package de.sockenklaus.XmlStats.XmlWorkers; import java.io.File; import java.io.StringWriter; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.List; @@ -45,13 +46,17 @@ import de.sockenklaus.XmlStats.Datasource.StatsDS; public class XmlWorkerUserstats extends XmlWorker { /** The stats ds. */ - StatsDS statsDS = new StatsDS(); + private StatsDS statsDS; + private hModItemResolver itemResolver; + private String[] resolveCats; /** * Instantiates a new xml worker userstats. */ public XmlWorkerUserstats(){ this.statsDS = new StatsDS(); + itemResolver = new hModItemResolver(new File(statsDS.getDataFolder(),"items.txt")); + resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"}; } @@ -76,12 +81,44 @@ public class XmlWorkerUserstats extends XmlWorker { /* * Hier wird das XML aufgebaut */ + if (!parameters.containsKey("player")){ + // Generate a summarized XML + HashMap> addedStats = statsDS.getAddedStats(); - for(String playerName : statsDS.getStats().keySet()){ - if (!parameters.containsKey("player") || (parameters.containsKey("player") && parameters.get("player").contains(playerName))){ - root.appendChild(getPlayerElement(playerName, doc)); + Element elem_player = doc.createElement("player"); + elem_player.setAttribute("name", "*"); + + for (String catName : addedStats.keySet()){ + if (!catName.equals("stats")){ + Element elem_cat = doc.createElement("category"); + elem_cat.setAttribute("name", catName); + + for(String entryName : addedStats.get(catName).keySet()){ + Element elem_stat = doc.createElement("stat"); + elem_stat.setAttribute("name", entryName); + + if(Arrays.asList(resolveCats).contains(catName)){ + elem_stat.setAttribute("id", String.valueOf(itemResolver.getItem(entryName))); + } + elem_stat.setAttribute("value", String.valueOf(addedStats.get(catName).get(entryName))); + + elem_cat.appendChild(elem_stat); + } + elem_player.appendChild(elem_cat); + } + } + root.appendChild(elem_player); + + } + else { + // Generate the XML for the given user(s) + for(String playerName : statsDS.getStats().keySet()){ + if (parameters.containsKey("player") && parameters.get("player").contains(playerName)){ + root.appendChild(getPlayerElement(playerName, doc)); + } } } + /* * Hier endet der XML-Aufbau */ @@ -106,9 +143,6 @@ public class XmlWorkerUserstats extends XmlWorker { * @return Returns a XML subtree for the given playerName. */ private Element getPlayerElement(String playerName, Document doc){ - hModItemResolver itemResolver = new hModItemResolver(new File(statsDS.getDataFolder(),"items.txt")); - String[] resolveCats = {"blockdestroy", "blockcreate", "itemdrop", "itempickup"}; - PlayerStat player_stats = statsDS.getStats().get(playerName); Element elem_player = doc.createElement("player");