From 5f8f96dcb6ce650ba76c042394a7baa9e37a0cd7 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Sat, 3 Sep 2011 03:51:33 +0200 Subject: [PATCH 1/7] Basicly implemented Achievements support. --- build.xml | 5 +- .../XmlStats/Datasource/AchievementsDS.java | 27 +++++ .../XmlStats/Datasource/MoneyDS.java | 2 +- src/de/sockenklaus/XmlStats/Webserver.java | 6 +- src/de/sockenklaus/XmlStats/XmlStats.java | 8 +- .../XmlWorkers/XmlWorkerAchievements.java | 98 ++++++++++++++++++- 6 files changed, 135 insertions(+), 11 deletions(-) diff --git a/build.xml b/build.xml index 0fc50c1..5326928 100644 --- a/build.xml +++ b/build.xml @@ -11,7 +11,10 @@ - + + + + diff --git a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java index 180cd31..03dc44f 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java @@ -3,10 +3,37 @@ */ package de.sockenklaus.XmlStats.Datasource; +import java.io.File; +import java.util.HashMap; + +import com.nidefawl.Achievements.AchPropertiesFile; +import com.nidefawl.Achievements.AchievementListData; +import com.nidefawl.Achievements.Achievements; +import com.nidefawl.Achievements.AchievementsLoader; + +import de.sockenklaus.XmlStats.XmlStats; +import de.sockenklaus.XmlStats.XmlStatsRegistry; + /** * @author socrates * */ public class AchievementsDS extends Datasource { + + public HashMap getAchievementsList(){ + Achievements ach = (Achievements)XmlStatsRegistry.get("achievements"); + + if(XmlStats.checkAchievements()){ + return ach.achievementList; + } + else return new HashMap(); + //return AchievementsLoader.LoadAchievementsList(ach, ach.getDataFolder().getPath(), getListLocation(ach)); + } + + /*private String getListLocation(Achievements ach){ + AchPropertiesFile props = new AchPropertiesFile(new File(ach.getDataFolder(), "achievements.properties")); + + return props.getString("achievements-list", "achievements.txt", ""); + }*/ } diff --git a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java index bd0be8e..4f211c3 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java @@ -51,7 +51,7 @@ public class MoneyDS extends Datasource { private Double getBalance(String playerName){ Double result = 0.0; - if (XmlStats.isiConomyHooked()){ + if (XmlStats.checkiConomy()){ if(this.iConomy.hasAccount(playerName)){ Account account = this.iConomy.getAccount(playerName); diff --git a/src/de/sockenklaus/XmlStats/Webserver.java b/src/de/sockenklaus/XmlStats/Webserver.java index bde6c17..37e4a4f 100644 --- a/src/de/sockenklaus/XmlStats/Webserver.java +++ b/src/de/sockenklaus/XmlStats/Webserver.java @@ -77,7 +77,7 @@ public class Webserver { this.server.createContext("/users.xml", new XmlWorkerUsers()); - if(XmlStats.isStatsHooked()){ + if(XmlStats.checkStats()){ server.createContext("/userstats.xml", new XmlWorkerUserstats()); XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /userstats.xml"); } @@ -85,7 +85,7 @@ public class Webserver { XmlStats.LogWarn("Stats not loaded correctly. Disabling /userstats.xml"); } - if (XmlStats.isiConomyHooked()){ + if (XmlStats.checkiConomy()){ server.createContext("/money.xml", new XmlWorkerMoney()); XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /money.xml."); } @@ -93,7 +93,7 @@ public class Webserver { XmlStats.LogWarn("iConomy not loaded correctly. Disabling /money.xml"); } - if(XmlStats.isAchievementsHooked()){ + if(XmlStats.checkAchievements()){ server.createContext("/achievements.xml", new XmlWorkerAchievements()); } else { diff --git a/src/de/sockenklaus/XmlStats/XmlStats.java b/src/de/sockenklaus/XmlStats/XmlStats.java index d59ebee..8ddc91a 100644 --- a/src/de/sockenklaus/XmlStats/XmlStats.java +++ b/src/de/sockenklaus/XmlStats/XmlStats.java @@ -181,7 +181,7 @@ public class XmlStats extends JavaPlugin { * * @return true, if is stats hooked */ - public static boolean isStatsHooked(){ + public static boolean checkStats(){ Stats StatsTemp = (Stats)XmlStatsRegistry.get("stats"); if (StatsTemp != null){ @@ -195,7 +195,7 @@ public class XmlStats extends JavaPlugin { * * @return true, if is i conomy hooked */ - public static boolean isiConomyHooked(){ + public static boolean checkiConomy(){ iConomy iConomyTemp = (iConomy)XmlStatsRegistry.get("iconomy"); if (iConomyTemp != null){ @@ -209,8 +209,8 @@ public class XmlStats extends JavaPlugin { * * @return true, if is Achievements hooked */ - public static boolean isAchievementsHooked(){ - Achievements AchievementsTemp = (Achievements)XmlStatsRegistry.get("achievments"); + public static boolean checkAchievements(){ + Achievements AchievementsTemp = (Achievements)XmlStatsRegistry.get("achievements"); if (AchievementsTemp != null){ if(AchievementsTemp.getClass().getName().equals("com.nidefawl.Achievements.Achievements") && AchievementsTemp.isEnabled()) return true; diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java index 20956dd..0df3df6 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java @@ -3,8 +3,26 @@ */ 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.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +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.nidefawl.Achievements.AchievementListData; +import com.nidefawl.Stats.Stats; + +import de.sockenklaus.XmlStats.Datasource.AchievementsDS; /** * @author socrates @@ -12,13 +30,89 @@ import java.util.Map; */ public class XmlWorkerAchievements extends XmlWorker { + AchievementsDS achDS; + + public XmlWorkerAchievements(){ + this.achDS = new AchievementsDS(); + } + /* (non-Javadoc) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ @Override String getXML(Map> parameters) { - // TODO Auto-generated method stub - return null; + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = builder.newDocument(); + DOMSource source = new DOMSource(doc); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + + HashMap achList = achDS.getAchievementsList(); + + Element root = doc.createElement("achievements"); + doc.appendChild(root); + + /* + * Hier wird das XML aufgebaut + */ + for(String achName : achList.keySet()){ + root.appendChild(getAchievement(doc, achList.get(achName))); + } + + /* + * 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 ""; + } + + private Element getAchievement(Document doc, AchievementListData data){ + Element elem_ach = doc.createElement("achievement"); + elem_ach.setAttribute("enabled", String.valueOf(data.isEnabled())); + + Element elem_name = doc.createElement("name"); + elem_name.setTextContent(data.getName()); + elem_ach.appendChild(elem_name); + + Element elem_description = doc.createElement("description"); + elem_description.setTextContent(data.getDescription()); + elem_ach.appendChild(elem_description); + + Element elem_category = doc.createElement("category"); + elem_category.setTextContent(data.getCategory()); + elem_ach.appendChild(elem_category); + + Element elem_stat = doc.createElement("stat"); + elem_stat.setTextContent(data.getKey()); + elem_ach.appendChild(elem_stat); + + Element elem_value = doc.createElement("value"); + elem_value.setTextContent(String.valueOf(data.getValue())); + elem_ach.appendChild(elem_value); + + Element elem_maxawards = doc.createElement("maxawards"); + elem_maxawards.setTextContent(String.valueOf(data.getMaxawards())); + elem_ach.appendChild(elem_maxawards); + + Element elem_commands = doc.createElement("commands"); + elem_commands.setTextContent(data.commands.toString()); + elem_ach.appendChild(elem_commands); + + return elem_ach; + } } From de2276bdcdea78097348f2f30841b0ff45a72404 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Sat, 3 Sep 2011 14:00:26 +0200 Subject: [PATCH 2/7] Re-enabled the ServerListener to catch plugins that are starting after XmlStats. Solved issue #13. --- build.xml | 2 +- src/de/sockenklaus/XmlStats/Webserver.java | 37 ++++--- src/de/sockenklaus/XmlStats/XmlStats.java | 96 +++++++++++-------- .../XmlStats/XmlStatsServerListener.java | 62 ++++++++++++ 4 files changed, 142 insertions(+), 55 deletions(-) create mode 100644 src/de/sockenklaus/XmlStats/XmlStatsServerListener.java diff --git a/build.xml b/build.xml index 5326928..b5b06e9 100644 --- a/build.xml +++ b/build.xml @@ -14,7 +14,7 @@ - + diff --git a/src/de/sockenklaus/XmlStats/Webserver.java b/src/de/sockenklaus/XmlStats/Webserver.java index 37e4a4f..825692c 100644 --- a/src/de/sockenklaus/XmlStats/Webserver.java +++ b/src/de/sockenklaus/XmlStats/Webserver.java @@ -77,29 +77,38 @@ public class Webserver { this.server.createContext("/users.xml", new XmlWorkerUsers()); - if(XmlStats.checkStats()){ - server.createContext("/userstats.xml", new XmlWorkerUserstats()); - XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /userstats.xml"); - } - else { - XmlStats.LogWarn("Stats not loaded correctly. Disabling /userstats.xml"); - } - if (XmlStats.checkiConomy()){ + + 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."); } else { - XmlStats.LogWarn("iConomy not loaded correctly. Disabling /money.xml"); + XmlStats.LogWarn("iConomy or webserver not loaded correctly. Disabling /money.xml"); } - - if(XmlStats.checkAchievements()){ + } + + 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"); } else { - XmlStats.LogWarn("Achievements not loaded correctly. Disabling /achievements.xml"); + XmlStats.LogWarn("Achievements or webserver not loaded correctly. Disabling /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"); + } + else { + XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /userstats.xml"); } - - this.server.start(); } } diff --git a/src/de/sockenklaus/XmlStats/XmlStats.java b/src/de/sockenklaus/XmlStats/XmlStats.java index 8ddc91a..09837c6 100644 --- a/src/de/sockenklaus/XmlStats/XmlStats.java +++ b/src/de/sockenklaus/XmlStats/XmlStats.java @@ -19,6 +19,8 @@ import java.util.logging.Logger; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.event.Event.Priority; +import org.bukkit.event.Event.Type; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; @@ -76,14 +78,15 @@ public class XmlStats extends JavaPlugin { LogDebug("options.webserver-port: "+settingsTemp.getInt("options.webserver-port")); LogDebug("options.verbose-enabled: "+settingsTemp.getBoolean("options.verbose-enabled")); - this.hookPlugins(); - if (settingsTemp.getBoolean("options.webserver-enabled")){ try { XmlStatsRegistry.put("webserver", new Webserver()); this.enabled = true; LogInfo("XmStats "+this.version+" enabled"); + this.hookPlugins(); + + this.registerEvents(); } catch (Exception ex){ LogError("Fehler beim Erstellen des Webservers:"); @@ -141,40 +144,53 @@ public class XmlStats extends JavaPlugin { * Hook plugins. */ protected void hookPlugins(){ - Plugin StatsTemp = getServer().getPluginManager().getPlugin("Stats"); - Plugin iConomyTemp = getServer().getPluginManager().getPlugin("iConomy"); - Plugin AchievementsTemp = getServer().getPluginManager().getPlugin("Achievements"); + this.hookAchievements(); + this.hookiConomy(); + this.hookStats(); - if(StatsTemp != null){ - if(StatsTemp.isEnabled() && StatsTemp.getClass().getName().equals("com.nidefawl.Stats.Stats")){ - XmlStatsRegistry.put("stats", (Stats)StatsTemp); - LogInfo("Hooked into Stats!"); - } - } - else { - LogWarn("Stats not found! Can't hook into it."); - } - - if(AchievementsTemp != null){ - if(AchievementsTemp.isEnabled() && AchievementsTemp.getClass().getName().equals("com.nidefawl.Achievements.Achievements")){ - XmlStatsRegistry.put("achievements", (Achievements)AchievementsTemp); - LogInfo("Hooked into Achievements!"); - } - } - else { - LogWarn("Achievements not found! Can't hook into it."); - } - - if (iConomyTemp != null) { - if (iConomyTemp.isEnabled() && iConomyTemp.getClass().getName().equals("com.iConomy.iConomy")) { - XmlStatsRegistry.put("iconomy", (iConomy)iConomyTemp); - LogInfo("Hooked into iConomy"); - } + } + + protected void hookiConomy(){ + Plugin iConomyTemp = getServer().getPluginManager().getPlugin("iConomy"); + Webserver webserver = (Webserver)XmlStatsRegistry.get("webserver"); + + if (iConomyTemp != null && iConomyTemp.isEnabled() && iConomyTemp.getClass().getName().equals("com.iConomy.iConomy")) { + XmlStatsRegistry.put("iconomy", (iConomy)iConomyTemp); + LogInfo("Hooked into iConomy"); + webserver.startiConomy(); } else { LogWarn("iConomy not found! Can't hook into it."); } - } + } + + protected void hookAchievements(){ + Plugin AchievementsTemp = getServer().getPluginManager().getPlugin("Achievements"); + Webserver webserver = (Webserver)XmlStatsRegistry.get("webserver"); + + if(AchievementsTemp != null && AchievementsTemp.isEnabled() && AchievementsTemp.getClass().getName().equals("com.nidefawl.Achievements.Achievements")){ + XmlStatsRegistry.put("achievements", (Achievements)AchievementsTemp); + LogInfo("Hooked into Achievements!"); + webserver.startAchievements(); + } + else { + LogWarn("Achievements not found! Can't hook into it."); + } + } + + protected void hookStats(){ + Plugin StatsTemp = getServer().getPluginManager().getPlugin("Stats"); + Webserver webserver = (Webserver)XmlStatsRegistry.get("webserver"); + + if(StatsTemp != null && StatsTemp.isEnabled() && StatsTemp.getClass().getName().equals("com.nidefawl.Stats.Stats")){ + XmlStatsRegistry.put("stats", (Stats)StatsTemp); + LogInfo("Hooked into Stats!"); + webserver.startStats(); + } + else { + LogWarn("Stats not found! Can't hook into it."); + } + } /** * Checks if is stats hooked. @@ -184,9 +200,7 @@ public class XmlStats extends JavaPlugin { public static boolean checkStats(){ Stats StatsTemp = (Stats)XmlStatsRegistry.get("stats"); - if (StatsTemp != null){ - if(StatsTemp.getClass().getName().equals("com.nidefawl.Stats.Stats") && StatsTemp.isEnabled()) return true; - } + if(StatsTemp != null && StatsTemp.getClass().getName().equals("com.nidefawl.Stats.Stats") && StatsTemp.isEnabled()) return true; return false; } @@ -198,9 +212,7 @@ public class XmlStats extends JavaPlugin { public static boolean checkiConomy(){ iConomy iConomyTemp = (iConomy)XmlStatsRegistry.get("iconomy"); - if (iConomyTemp != null){ - if (iConomyTemp.getClass().getName().equals("com.iConomy.iConomy") && iConomyTemp.isEnabled()) return true; - } + if (iConomyTemp != null && iConomyTemp.getClass().getName().equals("com.iConomy.iConomy") && iConomyTemp.isEnabled()) return true; return false; } @@ -212,9 +224,7 @@ public class XmlStats extends JavaPlugin { public static boolean checkAchievements(){ Achievements AchievementsTemp = (Achievements)XmlStatsRegistry.get("achievements"); - if (AchievementsTemp != null){ - if(AchievementsTemp.getClass().getName().equals("com.nidefawl.Achievements.Achievements") && AchievementsTemp.isEnabled()) return true; - } + if(AchievementsTemp != null && AchievementsTemp.getClass().getName().equals("com.nidefawl.Achievements.Achievements") && AchievementsTemp.isEnabled()) return true; return false; } @@ -248,4 +258,10 @@ public class XmlStats extends JavaPlugin { this.onEnable(); } + private void registerEvents(){ + XmlStatsServerListener listener = new XmlStatsServerListener(this); + + getServer().getPluginManager().registerEvent(Type.PLUGIN_ENABLE, listener, Priority.Monitor, this); + //getServer().getPluginManager().registerEvent(Type.PLUGIN_DISABLE, listener, Priority.Monitor, this); + } } diff --git a/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java new file mode 100644 index 0000000..b552ff0 --- /dev/null +++ b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java @@ -0,0 +1,62 @@ +/** + * + */ +package de.sockenklaus.XmlStats; + +import org.bukkit.event.server.PluginDisableEvent; +import org.bukkit.event.server.PluginEnableEvent; +import org.bukkit.event.server.ServerListener; +import org.bukkit.plugin.Plugin; + +import com.iConomy.iConomy; +import com.nidefawl.Stats.Stats; + +/** + * @author socrates + * + */ +public class XmlStatsServerListener extends ServerListener { + private XmlStats plugin; + + public XmlStatsServerListener(XmlStats plugin){ + this.plugin = plugin; + } + + public void onPluginDisable(PluginDisableEvent event){ + /* + * TODO + * Not implemented yet! + */ + + /*Plugin iConomy = (Plugin)XmlStatsRegistry.get("iconomy"); + Plugin Stats = (Plugin)XmlStatsRegistry.get("stats"); + Plugin Achievements = (Plugin)XmlStatsRegistry.get("achievements"); + + if (!XmlStats.checkAchievements()){ + + } + if(!XmlStats.checkiConomy()){ + + } + if(!XmlStats.checkStats()){ + + }*/ + + } + + public void onPluginEnable(PluginEnableEvent event){ + if(this.identifyPlugin(event, "stats")){ + this.plugin.hookStats(); + } + if(this.identifyPlugin(event, "achievements")){ + this.plugin.hookAchievements(); + } + if(this.identifyPlugin(event, "iconomy")){ + this.plugin.hookiConomy(); + } + } + + private boolean identifyPlugin(PluginEnableEvent event, String name){ + return event.getPlugin().getDescription().getName().equalsIgnoreCase(name); + } +} From b325e0f2ddc477cf89da1d928f1c1f1d627f6372 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Mon, 5 Sep 2011 01:35:21 +0200 Subject: [PATCH 3/7] Started to unify the xml structure to match the common xml semantics and tried to simplify the xml worker classes. --- .../XmlStats/Datasource/AchievementsDS.java | 10 -- src/de/sockenklaus/XmlStats/XmlStats.java | 3 +- .../XmlStats/XmlStatsServerListener.java | 4 - .../XmlStats/XmlWorkers/XmlWorker.java | 24 +++- .../XmlWorkers/XmlWorkerAchievements.java | 71 +++++----- .../XmlStats/XmlWorkers/XmlWorkerMoney.java | 51 ++++--- .../XmlStats/XmlWorkers/XmlWorkerUsers.java | 57 ++++---- .../XmlWorkers/XmlWorkerUserstats.java | 130 +++++++++--------- 8 files changed, 171 insertions(+), 179 deletions(-) diff --git a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java index 03dc44f..73eefa9 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java @@ -3,13 +3,10 @@ */ package de.sockenklaus.XmlStats.Datasource; -import java.io.File; import java.util.HashMap; -import com.nidefawl.Achievements.AchPropertiesFile; import com.nidefawl.Achievements.AchievementListData; import com.nidefawl.Achievements.Achievements; -import com.nidefawl.Achievements.AchievementsLoader; import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.XmlStatsRegistry; @@ -28,12 +25,5 @@ public class AchievementsDS extends Datasource { return ach.achievementList; } else return new HashMap(); - //return AchievementsLoader.LoadAchievementsList(ach, ach.getDataFolder().getPath(), getListLocation(ach)); } - - /*private String getListLocation(Achievements ach){ - AchPropertiesFile props = new AchPropertiesFile(new File(ach.getDataFolder(), "achievements.properties")); - - return props.getString("achievements-list", "achievements.txt", ""); - }*/ } diff --git a/src/de/sockenklaus/XmlStats/XmlStats.java b/src/de/sockenklaus/XmlStats/XmlStats.java index 09837c6..a2af82b 100644 --- a/src/de/sockenklaus/XmlStats/XmlStats.java +++ b/src/de/sockenklaus/XmlStats/XmlStats.java @@ -77,7 +77,7 @@ public class XmlStats extends JavaPlugin { LogDebug("options.webserver-enabled: "+settingsTemp.getBoolean("options.webserver-enabled")); LogDebug("options.webserver-port: "+settingsTemp.getInt("options.webserver-port")); LogDebug("options.verbose-enabled: "+settingsTemp.getBoolean("options.verbose-enabled")); - + if (settingsTemp.getBoolean("options.webserver-enabled")){ try { XmlStatsRegistry.put("webserver", new Webserver()); @@ -85,7 +85,6 @@ public class XmlStats extends JavaPlugin { this.enabled = true; LogInfo("XmStats "+this.version+" enabled"); this.hookPlugins(); - this.registerEvents(); } catch (Exception ex){ diff --git a/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java index b552ff0..504a8b3 100644 --- a/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java +++ b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java @@ -6,10 +6,6 @@ package de.sockenklaus.XmlStats; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.ServerListener; -import org.bukkit.plugin.Plugin; - -import com.iConomy.iConomy; -import com.nidefawl.Stats.Stats; /** * @author socrates diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java index f532fed..b9de8f8 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java @@ -16,6 +16,7 @@ package de.sockenklaus.XmlStats.XmlWorkers; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URLDecoder; @@ -25,6 +26,15 @@ import java.util.List; import java.util.Map; import java.util.zip.GZIPOutputStream; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; + import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpContext; import com.sun.net.httpserver.HttpHandler; @@ -37,7 +47,15 @@ import de.sockenklaus.XmlStats.XmlStats; * The Class XmlWorker. */ public abstract class XmlWorker implements HttpHandler { - + protected DocumentBuilderFactory factory; + protected DocumentBuilder builder; + protected Document doc; + protected DOMSource source; + protected StringWriter writer; + protected StreamResult result; + protected TransformerFactory tf; + protected Transformer transformer; + /* (non-Javadoc) * @see com.sun.net.httpserver.HttpHandler#handle(com.sun.net.httpserver.HttpExchange) */ @@ -155,12 +173,12 @@ public abstract class XmlWorker implements HttpHandler { try { XmlStats.LogDebug("OK... let's try gzip compression..."); - XmlStats.LogDebug("Actual size of the xml file: "+input.length+"Bytes"); + XmlStats.LogDebug("Actual size of the xml file: "+input.length+" B"); GZIPOutputStream gzip = new GZIPOutputStream(out); gzip.write(input); gzip.close(); output = out.toByteArray(); - XmlStats.LogDebug("Compressed size of the xml file: "+output.length+"Bytes"); + XmlStats.LogDebug("Compressed size of the xml file: "+output.length+" B"); } catch(IOException e){ XmlStats.LogError("GZIP-Compression failed! Returning empty byte[]"); diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java index 0df3df6..a941571 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java @@ -9,14 +9,11 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; 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.nidefawl.Achievements.AchievementListData; @@ -41,73 +38,67 @@ public class XmlWorkerAchievements extends XmlWorker { */ @Override String getXML(Map> parameters) { + try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - + 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 achList = achDS.getAchievementsList(); - - Element root = doc.createElement("achievements"); - doc.appendChild(root); - + + Element root = this.doc.createElement("xmlstats"); + Element elem_achs = this.doc.createElement("achievements"); + this.doc.appendChild(root); + root.appendChild(elem_achs); + /* * Hier wird das XML aufgebaut */ for(String achName : achList.keySet()){ - root.appendChild(getAchievement(doc, achList.get(achName))); + elem_achs.appendChild(getAchievement(achList.get(achName))); } - + /* * Hier endet der XML-Aufbau */ - - transformer.transform(source, result); - return writer.toString(); - } + 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 ""; } - return ""; + } - private Element getAchievement(Document doc, AchievementListData data){ - Element elem_ach = doc.createElement("achievement"); - elem_ach.setAttribute("enabled", String.valueOf(data.isEnabled())); - - Element elem_name = doc.createElement("name"); - elem_name.setTextContent(data.getName()); - elem_ach.appendChild(elem_name); - - Element elem_description = doc.createElement("description"); - elem_description.setTextContent(data.getDescription()); - elem_ach.appendChild(elem_description); - - Element elem_category = doc.createElement("category"); + private Element getAchievement(AchievementListData data){ + Element elem_ach = this.doc.createElement("achievement"); + + Element elem_category = this.doc.createElement("category"); elem_category.setTextContent(data.getCategory()); elem_ach.appendChild(elem_category); - Element elem_stat = doc.createElement("stat"); + Element elem_stat = this.doc.createElement("stat"); elem_stat.setTextContent(data.getKey()); elem_ach.appendChild(elem_stat); - Element elem_value = doc.createElement("value"); + Element elem_value = this.doc.createElement("value"); elem_value.setTextContent(String.valueOf(data.getValue())); elem_ach.appendChild(elem_value); - Element elem_maxawards = doc.createElement("maxawards"); + Element elem_maxawards = this.doc.createElement("maxawards"); elem_maxawards.setTextContent(String.valueOf(data.getMaxawards())); elem_ach.appendChild(elem_maxawards); - Element elem_commands = doc.createElement("commands"); + Element elem_commands = this.doc.createElement("commands"); elem_commands.setTextContent(data.commands.toString()); elem_ach.appendChild(elem_commands); diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java index 3a03c51..2d7bffd 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java @@ -20,14 +20,11 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; 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.nidefawl.Stats.Stats; @@ -51,46 +48,48 @@ public class XmlWorkerMoney extends XmlWorker { */ @Override public String getXML(Map> parameters) { + try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - + 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 = doc.createElement("money"); - doc.appendChild(root); - + + 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 = doc.createElement("player"); + Element elem_player = this.doc.createElement("player"); elem_player.setAttribute("name", playerName); elem_player.setAttribute("balance", String.valueOf(balances.get(playerName))); - - root.appendChild(elem_player); + + elem_money.appendChild(elem_player); } - + /* * Hier endet der XML-Aufbau */ - - transformer.transform(source, result); - return writer.toString(); + 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 ""; } - - return ""; } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java index 0853cc0..c3d67c0 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java @@ -20,15 +20,12 @@ import java.util.Map; import java.util.logging.Level; import java.util.List; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; 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.Document; import org.w3c.dom.Element; import com.nidefawl.Stats.Stats; @@ -51,27 +48,29 @@ public class XmlWorkerUsers extends XmlWorker { UsersDS users = new UsersDS(); try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - - Element root = doc.createElement("players"); - root.setAttribute("count", String.valueOf(users.getAllPlayers().size())); - doc.appendChild(root); - + 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"); - + 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()); @@ -80,24 +79,23 @@ public class XmlWorkerUsers extends XmlWorker { /* * Got list of online player names */ - + /* * Hier wird das XML aufgebaut */ - + for(String playerName : users.getAllPlayers()){ - - Element elem_player = doc.createElement("player"); - elem_player.setAttribute("name", playerName); - + + Element elem_player = this.doc.createElement("player"); + elem_player.setTextContent(playerName); + elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline"); - - root.appendChild(elem_player); + + elem_users.appendChild(elem_player); } /* * Hier endet der XML-Aufbau */ - transformer.transform(source, result); return writer.toString(); } @@ -106,9 +104,8 @@ public class XmlWorkerUsers extends XmlWorker { { Stats.log.log(Level.SEVERE, "Something went terribly wrong!"); Stats.log.log(Level.SEVERE, e.getMessage()); - } - - return ""; + return ""; + } } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java index 0d8015d..6316f8f 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java @@ -14,26 +14,20 @@ */ 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; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; 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.nidefawl.Stats.Stats; -import com.nidefawl.Stats.ItemResolver.hModItemResolver; import com.nidefawl.Stats.datasource.Category; import com.nidefawl.Stats.datasource.PlayerStat; @@ -47,16 +41,12 @@ public class XmlWorkerUserstats extends XmlWorker { /** The stats ds. */ private UserstatsDS statsDS; - private hModItemResolver itemResolver; - private String[] resolveCats; /** * Instantiates a new xml worker userstats. */ public XmlWorkerUserstats(){ this.statsDS = new UserstatsDS(); - itemResolver = new hModItemResolver(new File(statsDS.getDataFolder(),"items.txt")); - resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"}; } /* (non-Javadoc) @@ -64,36 +54,38 @@ public class XmlWorkerUserstats extends XmlWorker { */ public String getXML(Map> parameters) { try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - - Element root = doc.createElement("stats"); - doc.appendChild(root); - + 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 - - root.appendChild(getAddedUpStatsElement(doc)); - + 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())){ - root.appendChild(getPlayerElement(playerName, doc)); + elem_userstats.appendChild(getPlayerElement(playerName)); } } } - + /* * Hier endet der XML-Aufbau */ @@ -101,77 +93,87 @@ public class XmlWorkerUserstats extends XmlWorker { 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 ""; } - - return ""; } /** * Build a XML subtree for the given player. * * @param playerName the player name - * @param doc the doc + * @paramthis.doc thethis.doc * @return Returns a XML subtree for the given playerName. */ - private Element getPlayerElement(String playerName, Document doc){ + private Element getPlayerElement(String playerName){ PlayerStat player_stats = statsDS.getPlayerStat(playerName); - Element elem_player = doc.createElement("player"); - elem_player.setAttribute("name", playerName); + Element elem_player = this.doc.createElement("player"); + Element elem_cats = this.doc.createElement("categories"); + + elem_player.appendChild(getTextElem("name", playerName)); + elem_player.appendChild(elem_cats); for(String catName : player_stats.getCats()){ Category cat = player_stats.get(catName); - Element elem_cat = doc.createElement("category"); - elem_cat.setAttribute("name", catName); - + Element elem_cat = this.doc.createElement("category"); + Element elem_items = this.doc.createElement("items"); + + elem_cat.appendChild(getTextElem("name", catName)); + elem_cat.appendChild(elem_items); + elem_cats.appendChild(elem_cat); + for(String valName : cat.stats.keySet()){ int value = cat.get(valName); - Element elem_value = doc.createElement("stat"); - - elem_value.setAttribute("name", valName); - - if (Arrays.asList(resolveCats).contains(catName)){ - elem_value.setAttribute("id", String.valueOf(itemResolver.getItem(valName))); - } - elem_value.setAttribute("value", String.valueOf(value)); - - elem_cat.appendChild(elem_value); + 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); } - - - elem_player.appendChild(elem_cat); } return elem_player; } - private Element getAddedUpStatsElement(Document doc){ + private Element getAddedUpStatsElement(){ HashMap> addedStats = statsDS.getAddedStats(); + Element elem_player = this.doc.createElement("player"); + Element elem_cats = this.doc.createElement("categories"); - Element elem_player = doc.createElement("player"); - elem_player.setAttribute("name", "*"); + elem_player.appendChild(elem_cats); for (String catName : addedStats.keySet()){ - Element elem_cat = doc.createElement("category"); - elem_cat.setAttribute("name", catName); + Element elem_cat = this.doc.createElement("category"); + Element elem_items = this.doc.createElement("items"); + + elem_cat.appendChild(getTextElem("name", catName)); + elem_cat.appendChild(elem_items); + elem_cats.appendChild(elem_cat); 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))); + Element elem_item = this.doc.createElement("item"); - elem_cat.appendChild(elem_stat); + elem_item.appendChild(getTextElem("name", entryName)); + elem_item.appendChild(getTextElem("value", String.valueOf(addedStats.get(catName).get(entryName)))); + + elem_items.appendChild(elem_item); } - elem_player.appendChild(elem_cat); + 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; + } } From aa8266606994f9aed7b378222dfeb2dbb371d0cb Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Tue, 6 Sep 2011 01:26:34 +0200 Subject: [PATCH 4/7] 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; } } From 0fbfc27d3c26c873a5ba9628a85378dc665692f3 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Wed, 7 Sep 2011 00:15:59 +0200 Subject: [PATCH 5/7] Increased version number to 0.3 and continued unifying the xml schemes. --- build.xml | 2 +- .../XmlStats/Datasource/MoneyDS.java | 16 ++++ src/de/sockenklaus/XmlStats/Webserver.java | 6 +- .../XmlStats/XmlWorkers/XmlWorker.java | 21 +++-- .../XmlStats/XmlWorkers/XmlWorkerMoney.java | 82 +++++++++++++++---- 5 files changed, 96 insertions(+), 31 deletions(-) diff --git a/build.xml b/build.xml index b5b06e9..c0a1822 100644 --- a/build.xml +++ b/build.xml @@ -5,7 +5,7 @@ - + diff --git a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java index 4f211c3..042167f 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java @@ -16,6 +16,8 @@ package de.sockenklaus.XmlStats.Datasource; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Set; import com.iConomy.iConomy; import com.iConomy.system.Account; @@ -69,4 +71,18 @@ public class MoneyDS extends Datasource { return result; } + + /** + * @param list + * @return + */ + public int getSum(List list) { + int result = 0; + + for(String playerName : list){ + result+=this.getBalance(playerName); + } + + return result; + } } diff --git a/src/de/sockenklaus/XmlStats/Webserver.java b/src/de/sockenklaus/XmlStats/Webserver.java index 4929faf..e364526 100644 --- a/src/de/sockenklaus/XmlStats/Webserver.java +++ b/src/de/sockenklaus/XmlStats/Webserver.java @@ -75,15 +75,15 @@ public class Webserver { this.server = HttpServer.create(this.address, 0); - this.server.createContext("/users_list.xml", new XmlWorkerUsers()); + this.server.createContext("/user_list.xml", new XmlWorkerUsers()); this.server.start(); } protected void startiConomy(){ if (this.isRunning() && XmlStats.checkiConomy()){ - server.createContext("/users_balances.xml", new XmlWorkerMoney()); - XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /users_balances.xml"); + server.createContext("/user_balances.xml", new XmlWorkerMoney()); + XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /user_balances.xml"); } else { XmlStats.LogWarn("iConomy or webserver not loaded correctly. Disabling /users_balances.xml"); diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java index c975cd1..da1ad57 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java @@ -179,27 +179,26 @@ public abstract class XmlWorker implements HttpHandler { String param[] = pair.split("[=]"); String key = null; - String value = null; + String[] valueArr = null; if(param.length > 0){ key = URLDecoder.decode(param[0].toLowerCase(), System.getProperty("file.encoding")); + valueArr = new String[1]; + valueArr[0] = ""; } if(param.length > 1){ - value = URLDecoder.decode(param[1].toLowerCase(), System.getProperty("file.encoding")); + valueArr = URLDecoder.decode(param[1].toLowerCase(), System.getProperty("file.encoding")).split(","); } - if (result.containsKey(key)){ - List values = result.get(key); - - values.add(value); + List values = new ArrayList(); + for (String value : valueArr){ + if (!values.contains(value)){ + values.add(value); + } } - else { - List values = new ArrayList(); - values.add(value); - result.put(key, values); - } + result.put(key, values); } } return result; diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java index e0569d0..9442a82 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java @@ -14,12 +14,15 @@ */ package de.sockenklaus.XmlStats.XmlWorkers; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.w3c.dom.Element; +import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.Datasource.MoneyDS; // TODO: Auto-generated Javadoc @@ -42,23 +45,70 @@ public class XmlWorkerMoney extends XmlWorker { HashMap balances = moneyDS.getBalances(); - Element elem_users = this.doc.createElement("users"); + if (parameters.containsKey("user")){ + Element elem_users = this.doc.createElement("users"); + if(parameters.get("user").contains("*")){ + + 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)))); - /* - * 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); + elem_users.appendChild(elem_user); + } + + } + else { + for(String playerName : parameters.get("user")){ + 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); + } + } + return elem_users; } - - /* - * Hier endet der XML-Aufbau - */ - return elem_users; + + else if (parameters.containsKey("sum")){ + XmlStats.LogDebug("Entering the sum part"); + Element elem_sum = this.doc.createElement("sum"); + Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("type", "name"); + elem_sum.appendChild(elem_users); + + + if(parameters.get("sum").contains("*")){ + List userList = new ArrayList(); + for(String userName : balances.keySet()){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", userName)); + elem_users.appendChild(elem_user); + XmlStats.LogDebug("Got "+userName); + userList.add(userName); + } + + int sum = moneyDS.getSum(userList); + + elem_sum.appendChild(getTextElem("balance", String.valueOf(sum))); + } + + else { + + for(String userName : parameters.get("sum")){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", userName)); + elem_users.appendChild(elem_user); + } + + int sum = moneyDS.getSum(parameters.get("sum")); + + elem_sum.appendChild(getTextElem("balance", String.valueOf(sum))); + } + + + return elem_sum; + } + return this.doc.createElement("users"); } } From 7f0f0f5027d5bcfdf4789043f070d7d0c74eb9e2 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Thu, 15 Sep 2011 21:19:36 +0200 Subject: [PATCH 6/7] Solved issues #12 and #6. Unified Xml layout and added some basic error handling. So technically issue #14 is solved. --- .../XmlStats/Datasource/AchievementsDS.java | 12 +- .../XmlStats/Datasource/MoneyDS.java | 3 +- .../XmlStats/Datasource/UserstatsDS.java | 5 +- src/de/sockenklaus/XmlStats/Webserver.java | 9 +- ...chievements.java => AchievementsList.java} | 62 ++++------ .../XmlStats/XmlWorkers/UserAchievements.java | 91 ++++++++++++++ .../XmlStats/XmlWorkers/UserBalances.java | 90 ++++++++++++++ .../{XmlWorkerUsers.java => UserList.java} | 20 ++- ...XmlWorkerUserstats.java => UserStats.java} | 79 +++++++----- .../XmlStats/XmlWorkers/XmlWorker.java | 67 ++++++++-- .../XmlStats/XmlWorkers/XmlWorkerMoney.java | 114 ------------------ 11 files changed, 349 insertions(+), 203 deletions(-) rename src/de/sockenklaus/XmlStats/XmlWorkers/{XmlWorkerAchievements.java => AchievementsList.java} (56%) create mode 100644 src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java create mode 100644 src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java rename src/de/sockenklaus/XmlStats/XmlWorkers/{XmlWorkerUsers.java => UserList.java} (75%) rename src/de/sockenklaus/XmlStats/XmlWorkers/{XmlWorkerUserstats.java => UserStats.java} (66%) delete mode 100644 src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java diff --git a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java index 412a98f..d5de98e 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java @@ -21,6 +21,7 @@ import de.sockenklaus.XmlStats.XmlStatsRegistry; */ public class AchievementsDS extends Datasource { + //HashMap playerAchievementsList; public HashMap getAchievementsList(){ Achievements ach = (Achievements)XmlStatsRegistry.get("achievements"); @@ -31,7 +32,16 @@ public class AchievementsDS extends Datasource { else return new HashMap(); } - public PlayerAchievement getPlayerAchievement(String playerName){ + /*public void refreshPlayerAchievements(){ + PlayerAchievement pa; + Achievements ach = (Achievements)XmlStatsRegistry.get("achievements"); + + if(ach.useSQL){ + + } + }*/ + + public PlayerAchievement getUserAchievement(String playerName){ PlayerAchievement pa; Achievements ach = (Achievements)XmlStatsRegistry.get("achievements"); diff --git a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java index 042167f..eabfdb5 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java @@ -17,7 +17,6 @@ package de.sockenklaus.XmlStats.Datasource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Set; import com.iConomy.iConomy; import com.iConomy.system.Account; @@ -50,7 +49,7 @@ public class MoneyDS extends Datasource { } @SuppressWarnings("static-access") - private Double getBalance(String playerName){ + public Double getBalance(String playerName){ Double result = 0.0; if (XmlStats.checkiConomy()){ diff --git a/src/de/sockenklaus/XmlStats/Datasource/UserstatsDS.java b/src/de/sockenklaus/XmlStats/Datasource/UserstatsDS.java index 0da6ba6..67ec6a9 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/UserstatsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/UserstatsDS.java @@ -16,6 +16,7 @@ package de.sockenklaus.XmlStats.Datasource; import java.io.File; import java.util.HashMap; +import java.util.List; import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.datasource.Category; @@ -57,10 +58,10 @@ public class UserstatsDS extends Datasource { return this.statsPlugin.getDataFolder(); } - public HashMap> getAddedStats(){ + public HashMap> getAddedStats(List playerList){ HashMap > result = new HashMap>(); - for(String playerName : this.fetchAllPlayers()){ + for(String playerName : playerList){ PlayerStat player = this.getPlayerStat(playerName); for(String catName : player.getCats()){ diff --git a/src/de/sockenklaus/XmlStats/Webserver.java b/src/de/sockenklaus/XmlStats/Webserver.java index e364526..ee10ca1 100644 --- a/src/de/sockenklaus/XmlStats/Webserver.java +++ b/src/de/sockenklaus/XmlStats/Webserver.java @@ -75,14 +75,14 @@ public class Webserver { this.server = HttpServer.create(this.address, 0); - this.server.createContext("/user_list.xml", new XmlWorkerUsers()); + this.server.createContext("/user_list.xml", new UserList()); this.server.start(); } protected void startiConomy(){ if (this.isRunning() && XmlStats.checkiConomy()){ - server.createContext("/user_balances.xml", new XmlWorkerMoney()); + server.createContext("/user_balances.xml", new UserBalances()); XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /user_balances.xml"); } else { @@ -92,7 +92,8 @@ public class Webserver { protected void startAchievements(){ if(this.isRunning() && XmlStats.checkAchievements()){ - server.createContext("/user_achievements.xml", new XmlWorkerAchievements()); + server.createContext("/user_achievements.xml", new UserAchievements()); + server.createContext("/achievements_list.xml", new AchievementsList()); XmlStats.LogInfo("Achievements seems to be loaded correctly. Enabling /user_achievements.xml"); } else { @@ -102,7 +103,7 @@ public class Webserver { protected void startStats(){ if(this.isRunning() && XmlStats.checkStats()){ - server.createContext("/user_stats.xml", new XmlWorkerUserstats()); + server.createContext("/user_stats.xml", new UserStats()); XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /user_stats.xml"); } else { diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java similarity index 56% rename from src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java rename to src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java index 734bce6..940e8f7 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java @@ -17,48 +17,43 @@ import de.sockenklaus.XmlStats.Datasource.AchievementsDS; * @author socrates * */ -public class XmlWorkerAchievements extends XmlWorker { +public class AchievementsList extends XmlWorker { - AchievementsDS achDS; - - public XmlWorkerAchievements(){ - this.achDS = new AchievementsDS(); - } - /* (non-Javadoc) - * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXml(java.util.Map) */ @Override - Element getXML(Map> parameters) { - - - HashMap achList = achDS.getAchievementsList(); + protected Element getXml(Map> parameters) { + HashMap achList = new AchievementsDS().getAchievementsList(); Element elem_achs = this.doc.createElement("achievements"); - - /* - * Hier wird das XML aufgebaut - */ - if(parameters.containsKey("user")){ - for (String playerName : parameters.get("user")){ - elem_achs.appendChild(getPlayerAchievement(playerName)); - } + + for(String achName : achList.keySet()){ + elem_achs.appendChild(getAchievement(achList.get(achName))); } - else { - for(String achName : achList.keySet()){ - elem_achs.appendChild(getAchievement(achList.get(achName))); - } - } - - /* - * Hier endet der XML-Aufbau - */ - return elem_achs; + return elem_achs; + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map) + */ + @Override + protected Element getSumXml(List playerList, Map> parameters) { + return this.getXml(parameters); + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getUserXml(java.util.List, java.util.Map) + */ + @Override + protected Element getUserXml(List playerList, Map> parameters) { + return this.getXml(parameters); } private Element getAchievement(AchievementListData data){ Element elem_ach = this.doc.createElement("achievement"); + elem_ach.setAttribute("enabled", data.isEnabled()?"true":"false"); Element elem_category = this.doc.createElement("category"); elem_category.setTextContent(data.getCategory()); @@ -83,12 +78,5 @@ 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/UserAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java new file mode 100644 index 0000000..605fcfd --- /dev/null +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java @@ -0,0 +1,91 @@ +/** + * + */ +package de.sockenklaus.XmlStats.XmlWorkers; + +import java.util.List; +import java.util.Map; + +import org.w3c.dom.Element; + +import com.nidefawl.Achievements.PlayerAchievement; + +import de.sockenklaus.XmlStats.Datasource.AchievementsDS; + +/** + * @author socrates + * + */ +public class UserAchievements extends XmlWorker { + + AchievementsDS achDS; + + public UserAchievements(){ + this.achDS = new AchievementsDS(); + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) + */ + @Override + protected Element getXml(Map> parameters) { + Element elem_error = this.doc.createElement("error"); + elem_error.setAttribute("code", "1"); + elem_error.setTextContent("No data provided with this query!"); + + return elem_error; + } + + private Element getUserAchievement(String userName){ + Element elem_player = this.doc.createElement("user"); + elem_player.appendChild(getTextElem("name", userName)); + + PlayerAchievement pa = achDS.getUserAchievement(userName); + + Element elem_achs = this.doc.createElement("achievements"); + + for(String achName : pa.achievements.keySet()){ + Element elem_ach = this.doc.createElement("achievement"); + elem_ach.appendChild(getTextElem("name", achName)); + elem_ach.appendChild(getTextElem("count", pa.achievements.get(achName).getCount())); + + elem_achs.appendChild(elem_ach); + } + elem_player.appendChild(elem_achs); + + return elem_player; + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map) + */ + @Override + protected Element getSumXml(List playerList, Map> parameters) { + if(parameters.containsKey("user")){ + return null; + } + else { + Element elem_error = this.doc.createElement("error"); + elem_error.setAttribute("code", "1"); + elem_error.setTextContent("No data provided with this query!"); + + return elem_error; + } + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getUserXml(java.util.List, java.util.Map) + */ + @Override + protected Element getUserXml(List userList, Map> parameters) { + Element elem_users = this.doc.createElement("users"); + + for(String userName : userList){ + + elem_users.appendChild(this.getUserAchievement(userName)); + } + + return elem_users; + } + +} diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java new file mode 100644 index 0000000..f8a0377 --- /dev/null +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) [2011] [Pascal König] +* +* This program is free software; you can redistribute it and/or modify it under the terms of +* the GNU General Public License as published by the Free Software Foundation; either version +* 3 of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License along with this program; +* if not, see . +*/ +package de.sockenklaus.XmlStats.XmlWorkers; + +import java.util.List; +import java.util.Map; + +import org.w3c.dom.Element; + +import de.sockenklaus.XmlStats.XmlStats; +import de.sockenklaus.XmlStats.Datasource.MoneyDS; + +// TODO: Auto-generated Javadoc +/** + * The Class XmlWorkerMoney. + */ +public class UserBalances extends XmlWorker { + + private MoneyDS moneyDS; + + public UserBalances(){ + this.moneyDS = new MoneyDS(); + } + + + protected Element getUserXml(List playerList, Map> parameters){ + + Element elem_users = this.doc.createElement("users"); + + for(String userName : playerList){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", userName)); + elem_user.appendChild(getTextElem("balance", String.valueOf(moneyDS.getBalance(userName)))); + + elem_users.appendChild(elem_user); + } + + return elem_users; + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) + */ + @Override + public Element getXml(Map> parameters) { + Element elem_error = this.doc.createElement("error"); + elem_error.setAttribute("code", "1"); + elem_error.setTextContent("No data provided with this query!"); + + return elem_error; + } + + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map) + */ + @Override + protected Element getSumXml(List userList, Map> parameters) { + + Element elem_sum = this.doc.createElement("sum"); + Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("type", "name"); + elem_sum.appendChild(elem_users); + + for(String userName : userList){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", userName)); + elem_users.appendChild(elem_user); + XmlStats.LogDebug("Got "+userName); + } + + int sum = moneyDS.getSum(userList); + + elem_sum.appendChild(getTextElem("balance", String.valueOf(sum))); + + return elem_sum; + } +} diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserList.java similarity index 75% rename from src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java rename to src/de/sockenklaus/XmlStats/XmlWorkers/UserList.java index 91d527b..e58a1d5 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserList.java @@ -29,13 +29,13 @@ import de.sockenklaus.XmlStats.Datasource.UsersDS; /** * The Class XmlWorkerUsers. */ -public class XmlWorkerUsers extends XmlWorker { +public class UserList extends XmlWorker { /* (non-Javadoc) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ @Override - public Element getXML(Map> parameters) { + public Element getXml(Map> parameters) { UsersDS users = new UsersDS(); Element elem_users = this.doc.createElement("users"); @@ -76,5 +76,21 @@ public class XmlWorkerUsers extends XmlWorker { */ return elem_users; } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map) + */ + @Override + protected Element getSumXml(List playerList, Map> parameters) { + return this.getXml(parameters); + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getUserXml(java.util.List, java.util.Map) + */ + @Override + protected Element getUserXml(List playerList, Map> parameters) { + return this.getXml(parameters); + } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java similarity index 66% rename from src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java rename to src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java index 4d5d4b3..635f972 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java @@ -29,7 +29,7 @@ import de.sockenklaus.XmlStats.Datasource.UserstatsDS; /** * The Class XmlWorkerUserstats. */ -public class XmlWorkerUserstats extends XmlWorker { +public class UserStats extends XmlWorker { /** The stats ds. */ private UserstatsDS statsDS; @@ -37,37 +37,19 @@ public class XmlWorkerUserstats extends XmlWorker { /** * Instantiates a new xml worker userstats. */ - public XmlWorkerUserstats(){ + public UserStats(){ this.statsDS = new UserstatsDS(); } /* (non-Javadoc) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) */ - public Element getXML(Map> parameters) { - - Element elem_userstats = this.doc.createElement("userstats"); + public Element getXml(Map> parameters) { + Element elem_error = this.doc.createElement("error"); + elem_error.setAttribute("code", "1"); + elem_error.setTextContent("No data provided with this query!"); - /* - * 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("user") && parameters.get("user").contains(playerName.toLowerCase())){ - elem_userstats.appendChild(getUserElement(playerName)); - } - } - } - /* - * Hier endet der XML-Aufbau - */ - return elem_userstats; + return elem_error; } /** @@ -107,12 +89,12 @@ public class XmlWorkerUserstats extends XmlWorker { * * @return the added up stats element */ - private Element getAddedUpStatsElement(){ - HashMap> addedStats = statsDS.getAddedStats(); - Element elem_player = this.doc.createElement("user"); + private Element getAddedUpStatsElement(List playerList){ + HashMap> addedStats = statsDS.getAddedStats(playerList); + Element elem_stats = this.doc.createElement("stats"); Element elem_cats = this.doc.createElement("categories"); - elem_player.appendChild(elem_cats); + elem_stats.appendChild(elem_cats); for (String catName : addedStats.keySet()){ Element elem_cat = this.doc.createElement("category"); @@ -128,7 +110,7 @@ public class XmlWorkerUserstats extends XmlWorker { elem_cat.appendChild(elem_items); } - return elem_player; + return elem_stats; } /** @@ -146,4 +128,41 @@ public class XmlWorkerUserstats extends XmlWorker { return elem_item; } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map) + */ + @Override + protected Element getSumXml(List playerList, Map> parameters) { + Element elem_sum = this.doc.createElement("sum"); + Element elem_users = this.doc.createElement("users"); + + for (String userName : playerList){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", userName)); + + elem_users.appendChild(elem_user); + } + + elem_sum.appendChild(elem_users); + elem_sum.appendChild(this.getAddedUpStatsElement(playerList)); + + return elem_sum; + } + + /* (non-Javadoc) + * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getUserXml(java.util.List, java.util.Map) + */ + @Override + protected Element getUserXml(List playerList, Map> parameters) { + Element elem_users = this.doc.createElement("users"); + + for(String playerName : playerList){ + elem_users.appendChild(this.getUserElement(playerName)); + } + + return elem_users; + } + + } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java index da1ad57..59f829d 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java @@ -45,6 +45,8 @@ import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpExchange; import de.sockenklaus.XmlStats.XmlStats; +import de.sockenklaus.XmlStats.Datasource.Datasource; +import de.sockenklaus.XmlStats.Datasource.UsersDS; // TODO: Auto-generated Javadoc /** @@ -90,14 +92,39 @@ public abstract class XmlWorker implements HttpHandler { this.result = new StreamResult(this.writer); this.tf = TransformerFactory.newInstance(); this.transformer = this.tf.newTransformer(); - + Datasource ds = new UsersDS(); Element root = this.doc.createElement("xmlstats"); + List playerList; this.doc.appendChild(root); /* * Actually create the XML */ - root.appendChild(getXML(parameters)); - + + if(parameters.isEmpty()){ + root.appendChild(getXml(parameters)); + } + + else if(parameters.containsKey("user")){ + if (parameters.get("user").contains("*")){ + playerList = ds.fetchAllPlayers(); + } + else { + playerList = parameters.get("user"); + } + + root.appendChild(getUserXml(playerList, parameters)); + } + + if(parameters.containsKey("sum")){ + if(parameters.get("sum").contains("*")){ + playerList = ds.fetchAllPlayers(); + } + else { + playerList = parameters.get("sum"); + } + root.appendChild(getSumXml(playerList, parameters)); + } + /* * Build string from XML */ @@ -162,6 +189,26 @@ public abstract class XmlWorker implements HttpHandler { } } + /** + * @param parameters + * @return + */ + protected abstract Element getXml(Map> parameters); + + /** + * @param playerList + * @param parameters + * @return + */ + protected abstract Element getSumXml(List playerList, Map> parameters); + + /** + * @param playerList + * @param parameters + * @return + */ + protected abstract Element getUserXml(List playerList, Map> parameters); + /** * Parses the parameters. * @@ -204,14 +251,6 @@ public abstract class XmlWorker implements HttpHandler { return result; } - /** - * Gets the xML. - * - * @param parameters the parameters - * @return the xML - */ - abstract Element getXML(Map> parameters); - private byte[] compressData(byte[] input){ ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] output; @@ -260,4 +299,10 @@ public abstract class XmlWorker implements HttpHandler { result.setTextContent(text); return result; } + + protected Element getTextElem(String elemName, int value){ + Element result = this.doc.createElement(elemName); + result.setTextContent(String.valueOf(value)); + return result; + } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java deleted file mode 100644 index 9442a82..0000000 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) [2011] [Pascal König] -* -* This program is free software; you can redistribute it and/or modify it under the terms of -* the GNU General Public License as published by the Free Software Foundation; either version -* 3 of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -* See the GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License along with this program; -* if not, see . -*/ -package de.sockenklaus.XmlStats.XmlWorkers; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; - -import de.sockenklaus.XmlStats.XmlStats; -import de.sockenklaus.XmlStats.Datasource.MoneyDS; - -// TODO: Auto-generated Javadoc -/** - * The Class XmlWorkerMoney. - */ -public class XmlWorkerMoney extends XmlWorker { - - private MoneyDS moneyDS; - - public XmlWorkerMoney(){ - this.moneyDS = new MoneyDS(); - } - - /* (non-Javadoc) - * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) - */ - @Override - public Element getXML(Map> parameters) { - - HashMap balances = moneyDS.getBalances(); - - if (parameters.containsKey("user")){ - Element elem_users = this.doc.createElement("users"); - if(parameters.get("user").contains("*")){ - - 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); - } - - } - else { - for(String playerName : parameters.get("user")){ - 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); - } - } - return elem_users; - } - - else if (parameters.containsKey("sum")){ - XmlStats.LogDebug("Entering the sum part"); - Element elem_sum = this.doc.createElement("sum"); - Element elem_users = this.doc.createElement("users"); - elem_users.setAttribute("type", "name"); - elem_sum.appendChild(elem_users); - - - if(parameters.get("sum").contains("*")){ - List userList = new ArrayList(); - for(String userName : balances.keySet()){ - Element elem_user = this.doc.createElement("user"); - elem_user.appendChild(getTextElem("name", userName)); - elem_users.appendChild(elem_user); - XmlStats.LogDebug("Got "+userName); - userList.add(userName); - } - - int sum = moneyDS.getSum(userList); - - elem_sum.appendChild(getTextElem("balance", String.valueOf(sum))); - } - - else { - - for(String userName : parameters.get("sum")){ - Element elem_user = this.doc.createElement("user"); - elem_user.appendChild(getTextElem("name", userName)); - elem_users.appendChild(elem_user); - } - - int sum = moneyDS.getSum(parameters.get("sum")); - - elem_sum.appendChild(getTextElem("balance", String.valueOf(sum))); - } - - - return elem_sum; - } - return this.doc.createElement("users"); - } -} From 2bfa7556e2038bce789367f212627bfbc647fb46 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Thu, 15 Sep 2011 21:48:13 +0200 Subject: [PATCH 7/7] Added the "count" attribute to all users-arrays. --- src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java | 1 + src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java | 2 ++ src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java index 605fcfd..f0fc040 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java @@ -79,6 +79,7 @@ public class UserAchievements extends XmlWorker { @Override protected Element getUserXml(List userList, Map> parameters) { Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("count", String.valueOf(userList.size())); for(String userName : userList){ diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java index f8a0377..2068c94 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java @@ -38,6 +38,7 @@ public class UserBalances extends XmlWorker { protected Element getUserXml(List playerList, Map> parameters){ Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("count", String.valueOf(playerList.size())); for(String userName : playerList){ Element elem_user = this.doc.createElement("user"); @@ -71,6 +72,7 @@ public class UserBalances extends XmlWorker { Element elem_sum = this.doc.createElement("sum"); Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("count", String.valueOf(userList.size())); elem_users.setAttribute("type", "name"); elem_sum.appendChild(elem_users); diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java index 635f972..2eeca59 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java @@ -136,6 +136,7 @@ public class UserStats extends XmlWorker { protected Element getSumXml(List playerList, Map> parameters) { Element elem_sum = this.doc.createElement("sum"); Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("count", String.valueOf(playerList.size())); for (String userName : playerList){ Element elem_user = this.doc.createElement("user"); @@ -156,6 +157,7 @@ public class UserStats extends XmlWorker { @Override protected Element getUserXml(List playerList, Map> parameters) { Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("count", String.valueOf(playerList.size())); for(String playerName : playerList){ elem_users.appendChild(this.getUserElement(playerName));