Started to completely rewrite the xml structure...

This commit is contained in:
Pascal Koenig
2011-09-06 01:26:34 +02:00
parent b325e0f2dd
commit aa82666069
8 changed files with 266 additions and 269 deletions

View File

@@ -3,10 +3,14 @@
*/ */
package de.sockenklaus.XmlStats.Datasource; package de.sockenklaus.XmlStats.Datasource;
import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import com.nidefawl.Achievements.AchievementListData; import com.nidefawl.Achievements.AchievementListData;
import com.nidefawl.Achievements.Achievements; 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.XmlStats;
import de.sockenklaus.XmlStats.XmlStatsRegistry; import de.sockenklaus.XmlStats.XmlStatsRegistry;
@@ -26,4 +30,30 @@ public class AchievementsDS extends Datasource {
} }
else return new HashMap<String, AchievementListData>(); else return new HashMap<String, AchievementListData>();
} }
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;
}
} }

View File

@@ -75,40 +75,38 @@ public class Webserver {
this.server = HttpServer.create(this.address, 0); 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(); this.server.start();
} }
protected void startiConomy(){ protected void startiConomy(){
if (this.isRunning() && XmlStats.checkiConomy()){ if (this.isRunning() && XmlStats.checkiConomy()){
server.createContext("/money.xml", new XmlWorkerMoney()); server.createContext("/users_balances.xml", new XmlWorkerMoney());
XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /money.xml."); XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /users_balances.xml");
} }
else { 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(){ protected void startAchievements(){
if(this.isRunning() && XmlStats.checkAchievements()){ if(this.isRunning() && XmlStats.checkAchievements()){
server.createContext("/achievements.xml", new XmlWorkerAchievements()); server.createContext("/user_achievements.xml", new XmlWorkerAchievements());
XmlStats.LogInfo("Achievements seems to be loaded correctly. Enabling /achievements.xml"); XmlStats.LogInfo("Achievements seems to be loaded correctly. Enabling /user_achievements.xml");
} }
else { 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(){ protected void startStats(){
if(this.isRunning() && XmlStats.checkStats()){ if(this.isRunning() && XmlStats.checkStats()){
server.createContext("/userstats.xml", new XmlWorkerUserstats()); server.createContext("/user_stats.xml", new XmlWorkerUserstats());
XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /userstats.xml"); XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /user_stats.xml");
} }
else { else {
XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /userstats.xml"); XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /user_stats.xml");
} }
} }
} }

View File

@@ -0,0 +1,17 @@
/**
*
*/
package de.sockenklaus.XmlStats;
/**
* @author socrates
*
*/
public class XmlStatsException extends Throwable {
/**
*
*/
private static final long serialVersionUID = 1L;
}

View File

@@ -28,12 +28,16 @@ import java.util.zip.GZIPOutputStream;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer; import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource; import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpContext; import com.sun.net.httpserver.HttpContext;
@@ -69,48 +73,90 @@ public abstract class XmlWorker implements HttpHandler {
String xmlResponse = ""; String xmlResponse = "";
byte[] byteResponse = null; byte[] byteResponse = null;
/*
* Parse the parameters
*/
try { try {
parameters = parseParameters(queryString); parameters = parseParameters(queryString);
} catch(UnsupportedEncodingException ex){
XmlStats.LogWarn("Fehler beim Parsen des HTTP-Query-Strings."); /*
XmlStats.LogWarn(ex.getMessage()); * Create the XML doc stuff....
} */
this.factory = DocumentBuilderFactory.newInstance();
xmlResponse = getXML(parameters); this.builder = this.factory.newDocumentBuilder();
this.doc = this.builder.newDocument();
this.source = new DOMSource(this.doc);
/* this.writer = new StringWriter();
* Check if the clients sends the header "Accept-encoding", the option "gzip-enabled" is true and the clients supports gzip. this.result = new StreamResult(this.writer);
*/ this.tf = TransformerFactory.newInstance();
this.transformer = this.tf.newTransformer();
if(parameters.containsKey("gzip") && parameters.get("gzip").contains("true")){
XmlStats.LogDebug("Raw gzip requested.");
HttpContext context = exchange.getHttpContext(); Element root = this.doc.createElement("xmlstats");
String filename = context.getPath().substring(1); 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)) { catch(ParserConfigurationException e){
byteResponse = compressData(xmlResponse.getBytes());
exchange.getResponseHeaders().set("Content-encoding", "gzip");
}
else {
byteResponse = xmlResponse.getBytes();
} }
catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try { 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.sendResponseHeaders(HttpURLConnection.HTTP_OK, byteResponse.length);
exchange.getResponseBody().write(byteResponse); exchange.getResponseBody().write(byteResponse);
}
catch(UnsupportedEncodingException e){
} }
catch(IOException ex){ catch(IOException ex){
XmlStats.LogError("Fehler beim Senden der HTTP-Antwort."); XmlStats.LogError("Fehler beim Senden der HTTP-Antwort.");
XmlStats.LogError(ex.getMessage()); XmlStats.LogError(ex.getMessage());
} }
catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
exchange.close(); exchange.close();
} }
@@ -165,7 +211,7 @@ public abstract class XmlWorker implements HttpHandler {
* @param parameters the parameters * @param parameters the parameters
* @return the xML * @return the xML
*/ */
abstract String getXML(Map<String, List<String>> parameters); abstract Element getXML(Map<String, List<String>> parameters);
private byte[] compressData(byte[] input){ private byte[] compressData(byte[] input){
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -202,4 +248,17 @@ public abstract class XmlWorker implements HttpHandler {
return false; 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;
}
} }

View File

@@ -3,21 +3,13 @@
*/ */
package de.sockenklaus.XmlStats.XmlWorkers; package de.sockenklaus.XmlStats.XmlWorkers;
import java.io.StringWriter;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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 org.w3c.dom.Element;
import com.nidefawl.Achievements.AchievementListData; import com.nidefawl.Achievements.AchievementListData;
import com.nidefawl.Stats.Stats;
import de.sockenklaus.XmlStats.Datasource.AchievementsDS; 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) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
*/ */
@Override @Override
String getXML(Map<String, List<String>> parameters) { Element getXML(Map<String, List<String>> 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<String, AchievementListData> achList = achDS.getAchievementsList();
HashMap<String, AchievementListData> achList = achDS.getAchievementsList();
Element root = this.doc.createElement("xmlstats"); Element elem_achs = this.doc.createElement("achievements");
Element elem_achs = this.doc.createElement("achievements");
this.doc.appendChild(root);
root.appendChild(elem_achs);
/* /*
* 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()){ for(String achName : achList.keySet()){
elem_achs.appendChild(getAchievement(achList.get(achName))); elem_achs.appendChild(getAchievement(achList.get(achName)));
} }
}
/* /*
* Hier endet der XML-Aufbau * Hier endet der XML-Aufbau
*/ */
return elem_achs;
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 "";
}
} }
@@ -105,5 +83,12 @@ public class XmlWorkerAchievements extends XmlWorker {
return elem_ach; return elem_ach;
} }
private Element getPlayerAchievement(String playerName){
Element elem_player = this.doc.createElement("user");
elem_player.appendChild(getTextElem("name", playerName));
return null;
}
} }

View File

@@ -14,21 +14,12 @@
*/ */
package de.sockenklaus.XmlStats.XmlWorkers; package de.sockenklaus.XmlStats.XmlWorkers;
import java.io.StringWriter;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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 org.w3c.dom.Element;
import com.nidefawl.Stats.Stats;
import de.sockenklaus.XmlStats.Datasource.MoneyDS; import de.sockenklaus.XmlStats.Datasource.MoneyDS;
// TODO: Auto-generated Javadoc // TODO: Auto-generated Javadoc
@@ -47,49 +38,27 @@ public class XmlWorkerMoney extends XmlWorker {
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
*/ */
@Override @Override
public String getXML(Map<String, List<String>> parameters) { public Element getXML(Map<String, List<String>> parameters) {
try { HashMap<String, Double> balances = moneyDS.getBalances();
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<String, Double> 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();
}
catch (Exception e){ Element elem_users = this.doc.createElement("users");
Stats.log.log(Level.SEVERE, "Something went terribly wrong!");
Stats.log.log(Level.SEVERE, e.getMessage()); /*
return ""; * 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;
} }
} }

View File

@@ -14,22 +14,13 @@
*/ */
package de.sockenklaus.XmlStats.XmlWorkers; package de.sockenklaus.XmlStats.XmlWorkers;
import java.io.StringWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map; import java.util.Map;
import java.util.logging.Level;
import java.util.List; 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.bukkit.entity.Player;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import com.nidefawl.Stats.Stats;
import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.XmlStats;
import de.sockenklaus.XmlStats.XmlStatsRegistry; import de.sockenklaus.XmlStats.XmlStatsRegistry;
import de.sockenklaus.XmlStats.Datasource.UsersDS; 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) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
*/ */
@Override @Override
public String getXML(Map<String, List<String>> parameters) { public Element getXML(Map<String, List<String>> parameters) {
UsersDS users = new UsersDS(); 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(); * Get list online player names
this.builder = this.factory.newDocumentBuilder(); */
this.doc = this.builder.newDocument(); XmlStats pluginTemp= (XmlStats)XmlStatsRegistry.get("xmlstats");
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);
/* Player[] onlinePlayers = pluginTemp.getServer().getOnlinePlayers();
* Get list online player names List<String> onlinePlayerNames = new ArrayList<String>();
*/
XmlStats pluginTemp= (XmlStats)XmlStatsRegistry.get("xmlstats");
Player[] onlinePlayers = pluginTemp.getServer().getOnlinePlayers(); if (onlinePlayers != null){
List<String> onlinePlayerNames = new ArrayList<String>(); 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"); Element elem_player = this.doc.createElement("user");
elem_player.setTextContent(playerName); 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); elem_users.appendChild(elem_player);
} }
/* /*
* Hier endet der XML-Aufbau * Hier endet der XML-Aufbau
*/ */
transformer.transform(source, result); return elem_users;
return writer.toString();
}
catch (Exception e)
{
Stats.log.log(Level.SEVERE, "Something went terribly wrong!");
Stats.log.log(Level.SEVERE, e.getMessage());
return "";
}
} }
} }

View File

@@ -14,20 +14,12 @@
*/ */
package de.sockenklaus.XmlStats.XmlWorkers; package de.sockenklaus.XmlStats.XmlWorkers;
import java.io.StringWriter;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.logging.Level;
import java.util.List; 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 org.w3c.dom.Element;
import com.nidefawl.Stats.Stats;
import com.nidefawl.Stats.datasource.Category; import com.nidefawl.Stats.datasource.Category;
import com.nidefawl.Stats.datasource.PlayerStat; import com.nidefawl.Stats.datasource.PlayerStat;
@@ -52,65 +44,43 @@ public class XmlWorkerUserstats extends XmlWorker {
/* (non-Javadoc) /* (non-Javadoc)
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
*/ */
public String getXML(Map<String, List<String>> parameters) { public Element getXML(Map<String, List<String>> 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());
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 { else {
// Generate the XML for the given user(s) // Generate the XML for the given user(s)
for(String playerName : statsDS.fetchAllPlayers()){ for(String playerName : statsDS.fetchAllPlayers()){
if (parameters.containsKey("player") && parameters.get("player").contains(playerName.toLowerCase())){ if (parameters.containsKey("user") && parameters.get("user").contains(playerName.toLowerCase())){
elem_userstats.appendChild(getPlayerElement(playerName)); 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. * Build a XML subtree for the given player.
* *
* @param playerName the player name * @param playerName the player name
* @paramthis.doc thethis.doc
* @return Returns a XML subtree for the given playerName. * @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); 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"); Element elem_cats = this.doc.createElement("categories");
elem_player.appendChild(getTextElem("name", playerName)); elem_player.appendChild(getTextElem("name", playerName));
@@ -125,22 +95,21 @@ public class XmlWorkerUserstats extends XmlWorker {
elem_cat.appendChild(elem_items); elem_cat.appendChild(elem_items);
elem_cats.appendChild(elem_cat); elem_cats.appendChild(elem_cat);
for(String valName : cat.stats.keySet()){ for(String valName : cat.stats.keySet()){
int value = cat.get(valName); elem_items.appendChild(getItemElem(valName, 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);
} }
} }
return elem_player; return elem_player;
} }
/**
* Gets the added up stats element.
*
* @return the added up stats element
*/
private Element getAddedUpStatsElement(){ private Element getAddedUpStatsElement(){
HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats(); HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats();
Element elem_player = this.doc.createElement("player"); Element elem_player = this.doc.createElement("user");
Element elem_cats = this.doc.createElement("categories"); Element elem_cats = this.doc.createElement("categories");
elem_player.appendChild(elem_cats); elem_player.appendChild(elem_cats);
@@ -154,26 +123,27 @@ public class XmlWorkerUserstats extends XmlWorker {
elem_cats.appendChild(elem_cat); elem_cats.appendChild(elem_cat);
for(String entryName : addedStats.get(catName).keySet()){ for(String entryName : addedStats.get(catName).keySet()){
Element elem_item = this.doc.createElement("item"); elem_items.appendChild(getItemElem(entryName, addedStats.get(catName).get(entryName)));
elem_item.appendChild(getTextElem("name", entryName));
elem_item.appendChild(getTextElem("value", String.valueOf(addedStats.get(catName).get(entryName))));
elem_items.appendChild(elem_item);
} }
elem_cat.appendChild(elem_items); elem_cat.appendChild(elem_items);
} }
return elem_player; return elem_player;
} }
private Element getTextElem(String elemName, String text){ /**
Element result = this.doc.createElement(elemName); * Gets the item elem.
result.setTextContent(text); *
return result; * @param key the key
} * @param value the value
* @return the item elem
private Element getItemElem(String key, String value){ */
return null; 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;
} }
} }