From aa8266606994f9aed7b378222dfeb2dbb371d0cb Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Tue, 6 Sep 2011 01:26:34 +0200 Subject: [PATCH] Started to completely rewrite the xml structure... --- .../XmlStats/Datasource/AchievementsDS.java | 30 +++++ src/de/sockenklaus/XmlStats/Webserver.java | 22 ++-- .../XmlStats/XmlStatsException.java | 17 +++ .../XmlStats/XmlWorkers/XmlWorker.java | 119 ++++++++++++----- .../XmlWorkers/XmlWorkerAchievements.java | 65 ++++------ .../XmlStats/XmlWorkers/XmlWorkerMoney.java | 69 +++------- .../XmlStats/XmlWorkers/XmlWorkerUsers.java | 91 +++++-------- .../XmlWorkers/XmlWorkerUserstats.java | 122 +++++++----------- 8 files changed, 266 insertions(+), 269 deletions(-) create mode 100644 src/de/sockenklaus/XmlStats/XmlStatsException.java diff --git a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java index 73eefa9..412a98f 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java @@ -3,10 +3,14 @@ */ package de.sockenklaus.XmlStats.Datasource; +import java.io.File; import java.util.HashMap; import com.nidefawl.Achievements.AchievementListData; import com.nidefawl.Achievements.Achievements; +import com.nidefawl.Achievements.PlayerAchievement; +import com.nidefawl.Achievements.PlayerAchievementFile; +import com.nidefawl.Achievements.PlayerAchievementSQL; import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.XmlStatsRegistry; @@ -26,4 +30,30 @@ public class AchievementsDS extends Datasource { } else return new HashMap(); } + + public PlayerAchievement getPlayerAchievement(String playerName){ + + PlayerAchievement pa; + Achievements ach = (Achievements)XmlStatsRegistry.get("achievements"); + + if(ach.useSQL){ + String location = ach.getDataFolder().getPath() + File.separator + playerName + ".txt"; + File fold = new File(location); + + pa = new PlayerAchievementSQL(playerName); + if(fold.exists()){ + PlayerAchievement paold = new PlayerAchievementFile(ach.getDataFolder().getPath(), playerName); + paold.load(); + File fnew = new File(location + ".old"); + fold.renameTo(fnew); + pa.copy(paold); + pa.save(); + } + } + else pa = new PlayerAchievementFile(ach.getDataFolder().getPath(), playerName); + + pa.load(); + + return pa; + } } diff --git a/src/de/sockenklaus/XmlStats/Webserver.java b/src/de/sockenklaus/XmlStats/Webserver.java index 825692c..4929faf 100644 --- a/src/de/sockenklaus/XmlStats/Webserver.java +++ b/src/de/sockenklaus/XmlStats/Webserver.java @@ -75,40 +75,38 @@ public class Webserver { this.server = HttpServer.create(this.address, 0); - this.server.createContext("/users.xml", new XmlWorkerUsers()); - - + this.server.createContext("/users_list.xml", new XmlWorkerUsers()); this.server.start(); } protected void startiConomy(){ if (this.isRunning() && XmlStats.checkiConomy()){ - server.createContext("/money.xml", new XmlWorkerMoney()); - XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /money.xml."); + server.createContext("/users_balances.xml", new XmlWorkerMoney()); + XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /users_balances.xml"); } else { - XmlStats.LogWarn("iConomy or webserver not loaded correctly. Disabling /money.xml"); + XmlStats.LogWarn("iConomy or webserver not loaded correctly. Disabling /users_balances.xml"); } } protected void startAchievements(){ if(this.isRunning() && XmlStats.checkAchievements()){ - server.createContext("/achievements.xml", new XmlWorkerAchievements()); - XmlStats.LogInfo("Achievements seems to be loaded correctly. Enabling /achievements.xml"); + server.createContext("/user_achievements.xml", new XmlWorkerAchievements()); + XmlStats.LogInfo("Achievements seems to be loaded correctly. Enabling /user_achievements.xml"); } else { - XmlStats.LogWarn("Achievements or webserver not loaded correctly. Disabling /achievements.xml"); + XmlStats.LogWarn("Achievements or webserver not loaded correctly. Disabling /user_achievements.xml"); } } protected void startStats(){ if(this.isRunning() && XmlStats.checkStats()){ - server.createContext("/userstats.xml", new XmlWorkerUserstats()); - XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /userstats.xml"); + server.createContext("/user_stats.xml", new XmlWorkerUserstats()); + XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /user_stats.xml"); } else { - XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /userstats.xml"); + XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /user_stats.xml"); } } } diff --git a/src/de/sockenklaus/XmlStats/XmlStatsException.java b/src/de/sockenklaus/XmlStats/XmlStatsException.java new file mode 100644 index 0000000..74202f5 --- /dev/null +++ b/src/de/sockenklaus/XmlStats/XmlStatsException.java @@ -0,0 +1,17 @@ +/** + * + */ +package de.sockenklaus.XmlStats; + +/** + * @author socrates + * + */ +public class XmlStatsException extends Throwable { + + /** + * + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java index b9de8f8..c975cd1 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java @@ -28,12 +28,16 @@ import java.util.zip.GZIPOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; +import org.w3c.dom.Element; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpContext; @@ -69,48 +73,90 @@ public abstract class XmlWorker implements HttpHandler { String xmlResponse = ""; byte[] byteResponse = null; + /* + * Parse the parameters + */ try { parameters = parseParameters(queryString); - } catch(UnsupportedEncodingException ex){ - XmlStats.LogWarn("Fehler beim Parsen des HTTP-Query-Strings."); - XmlStats.LogWarn(ex.getMessage()); - } - - xmlResponse = getXML(parameters); - - - /* - * Check if the clients sends the header "Accept-encoding", the option "gzip-enabled" is true and the clients supports gzip. - */ - - - - if(parameters.containsKey("gzip") && parameters.get("gzip").contains("true")){ - XmlStats.LogDebug("Raw gzip requested."); + + /* + * Create the XML doc stuff.... + */ + this.factory = DocumentBuilderFactory.newInstance(); + this.builder = this.factory.newDocumentBuilder(); + this.doc = this.builder.newDocument(); + this.source = new DOMSource(this.doc); + this.writer = new StringWriter(); + this.result = new StreamResult(this.writer); + this.tf = TransformerFactory.newInstance(); + this.transformer = this.tf.newTransformer(); - HttpContext context = exchange.getHttpContext(); - String filename = context.getPath().substring(1); + Element root = this.doc.createElement("xmlstats"); + this.doc.appendChild(root); + /* + * Actually create the XML + */ + root.appendChild(getXML(parameters)); + + /* + * Build string from XML + */ + } + catch(TransformerConfigurationException e){ - byteResponse = compressData(xmlResponse.getBytes()); - exchange.getResponseHeaders().set("Content-type", "application/gzip"); - exchange.getResponseHeaders().set("Content-disposition", "attachment; filename="+filename+".gzip"); } - else if(clientAcceptsGzip(headers)) { - byteResponse = compressData(xmlResponse.getBytes()); - exchange.getResponseHeaders().set("Content-encoding", "gzip"); - } - else { - byteResponse = xmlResponse.getBytes(); + catch(ParserConfigurationException e){ + } - + catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + this.transformer.transform(this.source, this.result); + + xmlResponse = this.writer.toString(); + + + /* + * Check if the clients sends the header "Accept-encoding", the option "gzip-enabled" is true and the clients supports gzip. + */ + + if(parameters.containsKey("gzip") && parameters.get("gzip").contains("true")){ + XmlStats.LogDebug("Raw gzip requested."); + + HttpContext context = exchange.getHttpContext(); + String filename = context.getPath().substring(1); + + byteResponse = compressData(xmlResponse.getBytes()); + exchange.getResponseHeaders().set("Content-type", "application/gzip"); + exchange.getResponseHeaders().set("Content-disposition", "attachment; filename="+filename+".gzip"); + } + else if(clientAcceptsGzip(headers)) { + byteResponse = compressData(xmlResponse.getBytes()); + exchange.getResponseHeaders().set("Content-encoding", "gzip"); + } + else { + byteResponse = xmlResponse.getBytes(); + } + + exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, byteResponse.length); - exchange.getResponseBody().write(byteResponse); + exchange.getResponseBody().write(byteResponse); + } + + catch(UnsupportedEncodingException e){ } catch(IOException ex){ XmlStats.LogError("Fehler beim Senden der HTTP-Antwort."); XmlStats.LogError(ex.getMessage()); } + catch (TransformerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } exchange.close(); } @@ -165,7 +211,7 @@ public abstract class XmlWorker implements HttpHandler { * @param parameters the parameters * @return the xML */ - abstract String getXML(Map> parameters); + abstract Element getXML(Map> parameters); private byte[] compressData(byte[] input){ ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -202,4 +248,17 @@ public abstract class XmlWorker implements HttpHandler { return false; } + + /** + * Gets the text elem. + * + * @param elemName the elem name + * @param text the text + * @return the text elem + */ + protected Element getTextElem(String elemName, String text){ + Element result = this.doc.createElement(elemName); + result.setTextContent(text); + return result; + } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java index a941571..734bce6 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java @@ -3,21 +3,13 @@ */ package de.sockenklaus.XmlStats.XmlWorkers; -import java.io.StringWriter; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.logging.Level; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Element; import com.nidefawl.Achievements.AchievementListData; -import com.nidefawl.Stats.Stats; import de.sockenklaus.XmlStats.Datasource.AchievementsDS; @@ -37,45 +29,31 @@ public class XmlWorkerAchievements extends XmlWorker { * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ @Override - String getXML(Map> parameters) { - - try { - this.factory = DocumentBuilderFactory.newInstance(); - this.builder = this.factory.newDocumentBuilder(); - this.doc = this.builder.newDocument(); - this.source = new DOMSource(this.doc); - this.writer = new StringWriter(); - this.result = new StreamResult(this.writer); - this.tf = TransformerFactory.newInstance(); - this.transformer = this.tf.newTransformer(); + Element getXML(Map> parameters) { - HashMap achList = achDS.getAchievementsList(); + + HashMap achList = achDS.getAchievementsList(); - Element root = this.doc.createElement("xmlstats"); - Element elem_achs = this.doc.createElement("achievements"); - this.doc.appendChild(root); - root.appendChild(elem_achs); + Element elem_achs = this.doc.createElement("achievements"); - /* - * Hier wird das XML aufgebaut - */ + /* + * Hier wird das XML aufgebaut + */ + if(parameters.containsKey("user")){ + for (String playerName : parameters.get("user")){ + elem_achs.appendChild(getPlayerAchievement(playerName)); + } + } + else { for(String achName : achList.keySet()){ elem_achs.appendChild(getAchievement(achList.get(achName))); } + } - /* - * Hier endet der XML-Aufbau - */ - - this.transformer.transform(this.source, result); - return this.writer.toString(); - } - catch (Exception e){ - Stats.log.log(Level.SEVERE, "Something went terribly wrong!"); - Stats.log.log(Level.SEVERE, e.getMessage()); - return ""; - } - + /* + * Hier endet der XML-Aufbau + */ + return elem_achs; } @@ -105,5 +83,12 @@ public class XmlWorkerAchievements extends XmlWorker { return elem_ach; } + + private Element getPlayerAchievement(String playerName){ + Element elem_player = this.doc.createElement("user"); + elem_player.appendChild(getTextElem("name", playerName)); + + return null; + } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java index 2d7bffd..e0569d0 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java @@ -14,21 +14,12 @@ */ package de.sockenklaus.XmlStats.XmlWorkers; -import java.io.StringWriter; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.logging.Level; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Element; -import com.nidefawl.Stats.Stats; - import de.sockenklaus.XmlStats.Datasource.MoneyDS; // TODO: Auto-generated Javadoc @@ -47,49 +38,27 @@ public class XmlWorkerMoney extends XmlWorker { * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ @Override - public String getXML(Map> parameters) { + public Element getXML(Map> parameters) { - try { - this.factory = DocumentBuilderFactory.newInstance(); - this.builder = this.factory.newDocumentBuilder(); - this.doc = this.builder.newDocument(); - this.source = new DOMSource(this.doc); - this.writer = new StringWriter(); - this.result = new StreamResult(this.writer); - this.tf = TransformerFactory.newInstance(); - this.transformer = this.tf.newTransformer(); - - HashMap balances = moneyDS.getBalances(); - - Element root = this.doc.createElement("xmlstats"); - Element elem_money = this.doc.createElement("money"); - this.doc.appendChild(root); - root.appendChild(elem_money); - - - /* - * Hier wird das XML aufgebaut - */ - - for (String playerName : balances.keySet()){ - Element elem_player = this.doc.createElement("player"); - elem_player.setAttribute("name", playerName); - elem_player.setAttribute("balance", String.valueOf(balances.get(playerName))); - - elem_money.appendChild(elem_player); - } - - /* - * Hier endet der XML-Aufbau - */ - transformer.transform(this.source, result); - return this.writer.toString(); - } + HashMap balances = moneyDS.getBalances(); - catch (Exception e){ - Stats.log.log(Level.SEVERE, "Something went terribly wrong!"); - Stats.log.log(Level.SEVERE, e.getMessage()); - return ""; + Element elem_users = this.doc.createElement("users"); + + /* + * Hier wird das XML aufgebaut + */ + + for (String playerName : balances.keySet()){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", playerName)); + elem_user.appendChild(getTextElem("balance", String.valueOf(balances.get(playerName)))); + + elem_users.appendChild(elem_user); } + + /* + * Hier endet der XML-Aufbau + */ + return elem_users; } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java index c3d67c0..91d527b 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java @@ -14,22 +14,13 @@ */ package de.sockenklaus.XmlStats.XmlWorkers; -import java.io.StringWriter; import java.util.ArrayList; import java.util.Map; -import java.util.logging.Level; import java.util.List; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - import org.bukkit.entity.Player; import org.w3c.dom.Element; -import com.nidefawl.Stats.Stats; - import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.XmlStatsRegistry; import de.sockenklaus.XmlStats.Datasource.UsersDS; @@ -44,68 +35,46 @@ public class XmlWorkerUsers extends XmlWorker { * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ @Override - public String getXML(Map> parameters) { + public Element getXML(Map> parameters) { UsersDS users = new UsersDS(); + + Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("count", String.valueOf(users.getAllPlayers().size())); - try { - this.factory = DocumentBuilderFactory.newInstance(); - this.builder = this.factory.newDocumentBuilder(); - this.doc = this.builder.newDocument(); - this.source = new DOMSource(this.doc); - this.writer = new StringWriter(); - this.result = new StreamResult(writer); - this.tf = TransformerFactory.newInstance(); - this.transformer = tf.newTransformer(); - - Element root = this.doc.createElement("xmlstats"); - Element elem_users = this.doc.createElement("users"); - elem_users.setAttribute("count", String.valueOf(users.getAllPlayers().size())); - this.doc.appendChild(root); - root.appendChild(elem_users); + /* + * Get list online player names + */ + XmlStats pluginTemp= (XmlStats)XmlStatsRegistry.get("xmlstats"); - /* - * Get list online player names - */ - XmlStats pluginTemp= (XmlStats)XmlStatsRegistry.get("xmlstats"); + Player[] onlinePlayers = pluginTemp.getServer().getOnlinePlayers(); + List onlinePlayerNames = new ArrayList(); - Player[] onlinePlayers = pluginTemp.getServer().getOnlinePlayers(); - List onlinePlayerNames = new ArrayList(); - - if (onlinePlayers != null){ - for (int i = 0; i < onlinePlayers.length; i++){ - onlinePlayerNames.add(onlinePlayers[i].getName()); - } + if (onlinePlayers != null){ + for (int i = 0; i < onlinePlayers.length; i++){ + onlinePlayerNames.add(onlinePlayers[i].getName()); } - /* - * Got list of online player names - */ + } + /* + * Got list of online player names + */ - /* - * Hier wird das XML aufgebaut - */ + /* + * Hier wird das XML aufgebaut + */ - for(String playerName : users.getAllPlayers()){ + for(String playerName : users.getAllPlayers()){ - Element elem_player = this.doc.createElement("player"); - elem_player.setTextContent(playerName); + Element elem_player = this.doc.createElement("user"); + elem_player.appendChild(getTextElem("name", playerName)); - elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline"); + elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline"); - elem_users.appendChild(elem_player); - } - /* - * Hier endet der XML-Aufbau - */ - transformer.transform(source, result); - return writer.toString(); - } - - catch (Exception e) - { - Stats.log.log(Level.SEVERE, "Something went terribly wrong!"); - Stats.log.log(Level.SEVERE, e.getMessage()); - return ""; - } + elem_users.appendChild(elem_player); + } + /* + * Hier endet der XML-Aufbau + */ + return elem_users; } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java index 6316f8f..4d5d4b3 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java @@ -14,20 +14,12 @@ */ package de.sockenklaus.XmlStats.XmlWorkers; -import java.io.StringWriter; import java.util.HashMap; import java.util.Map; -import java.util.logging.Level; import java.util.List; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - import org.w3c.dom.Element; -import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.datasource.Category; import com.nidefawl.Stats.datasource.PlayerStat; @@ -52,65 +44,43 @@ public class XmlWorkerUserstats extends XmlWorker { /* (non-Javadoc) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ - public String getXML(Map> parameters) { - try { - this.factory = DocumentBuilderFactory.newInstance(); - this.builder = this.factory.newDocumentBuilder(); - this.doc = this.builder.newDocument(); - this.source = new DOMSource(this.doc); - this.writer = new StringWriter(); - this.result = new StreamResult(writer); - this.tf = TransformerFactory.newInstance(); - this.transformer = this.tf.newTransformer(); - - Element root = this.doc.createElement("xmlstats"); - Element elem_userstats = this.doc.createElement("userstats"); - this.doc.appendChild(root); - root.appendChild(elem_userstats); - - /* - * Hier wird das XML aufgebaut - */ - if (!parameters.containsKey("player")){ - // Generate a summarized XML - elem_userstats.setAttribute("type", "sum"); - elem_userstats.appendChild(getAddedUpStatsElement()); + public Element getXML(Map> parameters) { + Element elem_userstats = this.doc.createElement("userstats"); + + /* + * Hier wird das XML aufgebaut + */ + if (!parameters.containsKey("player")){ + // Generate a summarized XML + elem_userstats.setAttribute("type", "sum"); + elem_userstats.appendChild(getAddedUpStatsElement()); } - else { - // Generate the XML for the given user(s) - for(String playerName : statsDS.fetchAllPlayers()){ - if (parameters.containsKey("player") && parameters.get("player").contains(playerName.toLowerCase())){ - elem_userstats.appendChild(getPlayerElement(playerName)); - } + else { + // Generate the XML for the given user(s) + for(String playerName : statsDS.fetchAllPlayers()){ + if (parameters.containsKey("user") && parameters.get("user").contains(playerName.toLowerCase())){ + elem_userstats.appendChild(getUserElement(playerName)); } } - - /* - * Hier endet der XML-Aufbau - */ - - transformer.transform(source, result); - return writer.toString(); - } - catch (Exception e){ - Stats.log.log(Level.SEVERE, "Something went terribly wrong!"); - Stats.log.log(Level.SEVERE, e.getMessage()); - return ""; } + /* + * Hier endet der XML-Aufbau + */ + return elem_userstats; } /** * Build a XML subtree for the given player. * * @param playerName the player name - * @paramthis.doc thethis.doc * @return Returns a XML subtree for the given playerName. + * @paramthis.doc thethis.doc */ - private Element getPlayerElement(String playerName){ + private Element getUserElement(String playerName){ PlayerStat player_stats = statsDS.getPlayerStat(playerName); - Element elem_player = this.doc.createElement("player"); + Element elem_player = this.doc.createElement("user"); Element elem_cats = this.doc.createElement("categories"); elem_player.appendChild(getTextElem("name", playerName)); @@ -125,22 +95,21 @@ public class XmlWorkerUserstats extends XmlWorker { elem_cat.appendChild(elem_items); elem_cats.appendChild(elem_cat); - for(String valName : cat.stats.keySet()){ - int value = cat.get(valName); - Element elem_item = this.doc.createElement("item"); - - elem_item.appendChild(getTextElem("name", valName)); - elem_item.appendChild(getTextElem("value", String.valueOf(value))); - - elem_items.appendChild(elem_item); + for(String valName : cat.stats.keySet()){ + elem_items.appendChild(getItemElem(valName, cat.get(valName))); } } return elem_player; } + /** + * Gets the added up stats element. + * + * @return the added up stats element + */ private Element getAddedUpStatsElement(){ HashMap> addedStats = statsDS.getAddedStats(); - Element elem_player = this.doc.createElement("player"); + Element elem_player = this.doc.createElement("user"); Element elem_cats = this.doc.createElement("categories"); elem_player.appendChild(elem_cats); @@ -154,26 +123,27 @@ public class XmlWorkerUserstats extends XmlWorker { elem_cats.appendChild(elem_cat); for(String entryName : addedStats.get(catName).keySet()){ - Element elem_item = this.doc.createElement("item"); - - elem_item.appendChild(getTextElem("name", entryName)); - elem_item.appendChild(getTextElem("value", String.valueOf(addedStats.get(catName).get(entryName)))); - - elem_items.appendChild(elem_item); + elem_items.appendChild(getItemElem(entryName, addedStats.get(catName).get(entryName))); } elem_cat.appendChild(elem_items); } return elem_player; } - - private Element getTextElem(String elemName, String text){ - Element result = this.doc.createElement(elemName); - result.setTextContent(text); - return result; - } - - private Element getItemElem(String key, String value){ - return null; + + /** + * Gets the item elem. + * + * @param key the key + * @param value the value + * @return the item elem + */ + private Element getItemElem(String key, int value){ + Element elem_item = this.doc.createElement("item"); + + elem_item.appendChild(getTextElem("name", key)); + elem_item.appendChild(getTextElem("value", String.valueOf(value))); + + return elem_item; } }