diff --git a/build.xml b/build.xml
index 0fc50c1..c0a1822 100644
--- a/build.xml
+++ b/build.xml
@@ -5,13 +5,16 @@
-
+
-
+
+
+
+
diff --git a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java
new file mode 100644
index 0000000..d5de98e
--- /dev/null
+++ b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java
@@ -0,0 +1,69 @@
+/**
+ *
+ */
+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;
+
+/**
+ * @author socrates
+ *
+ */
+public class AchievementsDS extends Datasource {
+
+ //HashMap playerAchievementsList;
+
+ public HashMap getAchievementsList(){
+ Achievements ach = (Achievements)XmlStatsRegistry.get("achievements");
+
+ if(XmlStats.checkAchievements()){
+ return ach.achievementList;
+ }
+ else return new HashMap();
+ }
+
+ /*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");
+
+ 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/Datasource/MoneyDS.java b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java
index bd0be8e..eabfdb5 100644
--- a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java
+++ b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java
@@ -16,6 +16,7 @@ package de.sockenklaus.XmlStats.Datasource;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import com.iConomy.iConomy;
import com.iConomy.system.Account;
@@ -48,10 +49,10 @@ public class MoneyDS extends Datasource {
}
@SuppressWarnings("static-access")
- private Double getBalance(String playerName){
+ public 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);
@@ -69,4 +70,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/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 7992ca1..585501c 100644
--- a/src/de/sockenklaus/XmlStats/Webserver.java
+++ b/src/de/sockenklaus/XmlStats/Webserver.java
@@ -74,25 +74,42 @@ public class Webserver {
this.address = new InetSocketAddress(port);
this.server = HttpServer.create(this.address, 0);
+
+ this.server.createContext("/user_list.xml", new UserList());
- this.server.createContext("/users.xml", new XmlWorkerUsers());
-
- if(XmlStats.isStatsHooked()){
- 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.isiConomyHooked()){
- 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");
- }
-
+ this.server.start();
+
this.server.start();
}
+
+ protected void startiConomy(){
+ if (this.isRunning() && XmlStats.checkiConomy()){
+ server.createContext("/user_balances.xml", new UserBalances());
+ 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");
+ }
+ }
+
+ protected void startAchievements(){
+ if(this.isRunning() && XmlStats.checkAchievements()){
+ 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 {
+ XmlStats.LogWarn("Achievements or webserver not loaded correctly. Disabling /user_achievements.xml");
+ }
+ }
+
+ protected void startStats(){
+ if(this.isRunning() && XmlStats.checkStats()){
+ server.createContext("/user_stats.xml", new UserStats());
+ XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /user_stats.xml");
+ }
+ else {
+ XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /user_stats.xml");
+ }
+ }
}
diff --git a/src/de/sockenklaus/XmlStats/XmlStats.java b/src/de/sockenklaus/XmlStats/XmlStats.java
index 8232acf..0afc5fd 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;
@@ -75,15 +77,15 @@ 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"));
-
- 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,41 +143,62 @@ public class XmlStats extends JavaPlugin {
* Hook plugins.
*/
protected void hookPlugins(){
- Plugin StatsTemp = getServer().getPluginManager().getPlugin("Stats");
+ this.hookAchievements();
+ this.hookiConomy();
+ this.hookStats();
+ }
+
+ protected void hookiConomy(){
Plugin iConomyTemp = getServer().getPluginManager().getPlugin("iConomy");
+ Webserver webserver = (Webserver)XmlStatsRegistry.get("webserver");
- 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 (iConomyTemp != null) {
- if (iConomyTemp.isEnabled() && iConomyTemp.getClass().getName().equals("com.iConomy.iConomy")) {
- XmlStatsRegistry.put("iconomy", (iConomy)iConomyTemp);
- LogInfo("Hooked into iConomy");
- }
+ 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.
*
* @return true, if is stats hooked
*/
- public static boolean isStatsHooked(){
+ 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;
}
@@ -184,15 +207,25 @@ 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){
- 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;
}
-
+
+ /**
+ * Checks if is Achievements hooked.
+ *
+ * @return true, if is Achievements hooked
+ */
+ public static boolean checkAchievements(){
+ Achievements AchievementsTemp = (Achievements)XmlStatsRegistry.get("achievements");
+
+ if(AchievementsTemp != null && AchievementsTemp.getClass().getName().equals("com.nidefawl.Achievements.Achievements") && AchievementsTemp.isEnabled()) return true;
+ return false;
+ }
+
/* (non-Javadoc)
* @see org.bukkit.plugin.java.JavaPlugin#onCommand(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[])
*/
@@ -223,4 +256,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/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/XmlStatsServerListener.java b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java
new file mode 100644
index 0000000..504a8b3
--- /dev/null
+++ b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java
@@ -0,0 +1,58 @@
+/**
+ *
+ */
+package de.sockenklaus.XmlStats;
+
+import org.bukkit.event.server.PluginDisableEvent;
+import org.bukkit.event.server.PluginEnableEvent;
+import org.bukkit.event.server.ServerListener;
+
+/**
+ * @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);
+ }
+}
diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java b/src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java
new file mode 100644
index 0000000..940e8f7
--- /dev/null
+++ b/src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java
@@ -0,0 +1,82 @@
+/**
+ *
+ */
+package de.sockenklaus.XmlStats.XmlWorkers;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.w3c.dom.Element;
+
+import com.nidefawl.Achievements.AchievementListData;
+
+import de.sockenklaus.XmlStats.Datasource.AchievementsDS;
+
+/**
+ * @author socrates
+ *
+ */
+public class AchievementsList extends XmlWorker {
+
+ /* (non-Javadoc)
+ * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXml(java.util.Map)
+ */
+ @Override
+ protected Element getXml(Map> parameters) {
+ HashMap achList = new AchievementsDS().getAchievementsList();
+
+ Element elem_achs = this.doc.createElement("achievements");
+
+ for(String achName : achList.keySet()){
+ elem_achs.appendChild(getAchievement(achList.get(achName)));
+ }
+
+ 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());
+ elem_ach.appendChild(elem_category);
+
+ Element elem_stat = this.doc.createElement("stat");
+ elem_stat.setTextContent(data.getKey());
+ elem_ach.appendChild(elem_stat);
+
+ Element elem_value = this.doc.createElement("value");
+ elem_value.setTextContent(String.valueOf(data.getValue()));
+ elem_ach.appendChild(elem_value);
+
+ Element elem_maxawards = this.doc.createElement("maxawards");
+ elem_maxawards.setTextContent(String.valueOf(data.getMaxawards()));
+ elem_ach.appendChild(elem_maxawards);
+
+ Element elem_commands = this.doc.createElement("commands");
+ elem_commands.setTextContent(data.commands.toString());
+ elem_ach.appendChild(elem_commands);
+
+ return elem_ach;
+
+ }
+
+}
diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java
new file mode 100644
index 0000000..f0fc040
--- /dev/null
+++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java
@@ -0,0 +1,92 @@
+/**
+ *
+ */
+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");
+ elem_users.setAttribute("count", String.valueOf(userList.size()));
+
+ 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..2068c94
--- /dev/null
+++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java
@@ -0,0 +1,92 @@
+/*
+ * 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");
+ elem_users.setAttribute("count", String.valueOf(playerList.size()));
+
+ 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("count", String.valueOf(userList.size()));
+ 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/UserList.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserList.java
new file mode 100644
index 0000000..e58a1d5
--- /dev/null
+++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserList.java
@@ -0,0 +1,96 @@
+/*
+ * 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.Map;
+import java.util.List;
+
+import org.bukkit.entity.Player;
+import org.w3c.dom.Element;
+
+import de.sockenklaus.XmlStats.XmlStats;
+import de.sockenklaus.XmlStats.XmlStatsRegistry;
+import de.sockenklaus.XmlStats.Datasource.UsersDS;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class XmlWorkerUsers.
+ */
+public class UserList extends XmlWorker {
+
+ /* (non-Javadoc)
+ * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
+ */
+ @Override
+ 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()));
+
+ /*
+ * 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());
+ }
+ }
+ /*
+ * Got list of online player names
+ */
+
+ /*
+ * Hier wird das XML aufgebaut
+ */
+
+ for(String playerName : users.getAllPlayers()){
+
+ Element elem_player = this.doc.createElement("user");
+ elem_player.appendChild(getTextElem("name", playerName));
+
+ elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline");
+
+ elem_users.appendChild(elem_player);
+ }
+ /*
+ * Hier endet der XML-Aufbau
+ */
+ 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/UserStats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java
new file mode 100644
index 0000000..2eeca59
--- /dev/null
+++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java
@@ -0,0 +1,170 @@
+/*
+ * 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.HashMap;
+import java.util.Map;
+import java.util.List;
+
+import org.w3c.dom.Element;
+
+import com.nidefawl.Stats.datasource.Category;
+import com.nidefawl.Stats.datasource.PlayerStat;
+
+import de.sockenklaus.XmlStats.Datasource.UserstatsDS;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class XmlWorkerUserstats.
+ */
+public class UserStats extends XmlWorker {
+
+ /** The stats ds. */
+ private UserstatsDS statsDS;
+
+ /**
+ * Instantiates a new xml worker userstats.
+ */
+ 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_error = this.doc.createElement("error");
+ elem_error.setAttribute("code", "1");
+ elem_error.setTextContent("No data provided with this query!");
+
+ return elem_error;
+ }
+
+ /**
+ * Build a XML subtree for the given player.
+ *
+ * @param playerName the player name
+ * @return Returns a XML subtree for the given playerName.
+ * @paramthis.doc thethis.doc
+ */
+ private Element getUserElement(String playerName){
+ PlayerStat player_stats = statsDS.getPlayerStat(playerName);
+
+ Element elem_player = this.doc.createElement("user");
+ 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 = 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()){
+ 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(List playerList){
+ HashMap> addedStats = statsDS.getAddedStats(playerList);
+ Element elem_stats = this.doc.createElement("stats");
+ Element elem_cats = this.doc.createElement("categories");
+
+ elem_stats.appendChild(elem_cats);
+
+ for (String catName : addedStats.keySet()){
+ 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()){
+ elem_items.appendChild(getItemElem(entryName, addedStats.get(catName).get(entryName)));
+ }
+ elem_cat.appendChild(elem_items);
+ }
+
+ return elem_stats;
+ }
+
+ /**
+ * 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;
+ }
+
+ /* (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");
+ elem_users.setAttribute("count", String.valueOf(playerList.size()));
+
+ 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");
+ elem_users.setAttribute("count", String.valueOf(playerList.size()));
+
+ 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 f532fed..59f829d 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,19 +26,42 @@ 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.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;
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
/**
* 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)
*/
@@ -51,53 +75,140 @@ 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();
+ Datasource ds = new UsersDS();
+ Element root = this.doc.createElement("xmlstats");
+ List playerList;
+ this.doc.appendChild(root);
+ /*
+ * Actually create the XML
+ */
- HttpContext context = exchange.getHttpContext();
- String filename = context.getPath().substring(1);
+ if(parameters.isEmpty()){
+ root.appendChild(getXml(parameters));
+ }
- byteResponse = compressData(xmlResponse.getBytes());
- exchange.getResponseHeaders().set("Content-type", "application/gzip");
- exchange.getResponseHeaders().set("Content-disposition", "attachment; filename="+filename+".gzip");
+ 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
+ */
}
- else if(clientAcceptsGzip(headers)) {
- byteResponse = compressData(xmlResponse.getBytes());
- exchange.getResponseHeaders().set("Content-encoding", "gzip");
- }
- else {
- byteResponse = xmlResponse.getBytes();
+ catch(TransformerConfigurationException e){
+
}
-
+ 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();
}
}
+ /**
+ * @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.
*
@@ -115,52 +226,43 @@ 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;
}
- /**
- * Gets the xML.
- *
- * @param parameters the parameters
- * @return the xML
- */
- abstract String getXML(Map> parameters);
-
private byte[] compressData(byte[] input){
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] output;
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[]");
@@ -184,4 +286,23 @@ 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;
+ }
+
+ 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 3a03c51..0000000
--- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java
+++ /dev/null
@@ -1,96 +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.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.Stats.Stats;
-
-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 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();
-
- HashMap balances = moneyDS.getBalances();
-
- Element root = doc.createElement("money");
- doc.appendChild(root);
-
- /*
- * Hier wird das XML aufgebaut
- */
-
- for (String playerName : balances.keySet()){
- Element elem_player = doc.createElement("player");
- elem_player.setAttribute("name", playerName);
- elem_player.setAttribute("balance", String.valueOf(balances.get(playerName)));
-
- root.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 "";
- }
-}
diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java
deleted file mode 100644
index 0853cc0..0000000
--- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.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.io.StringWriter;
-import java.util.ArrayList;
-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;
-
-import de.sockenklaus.XmlStats.XmlStats;
-import de.sockenklaus.XmlStats.XmlStatsRegistry;
-import de.sockenklaus.XmlStats.Datasource.UsersDS;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Class XmlWorkerUsers.
- */
-public class XmlWorkerUsers extends XmlWorker {
-
- /* (non-Javadoc)
- * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
- */
- @Override
- public String getXML(Map> parameters) {
- 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);
-
- /*
- * 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());
- }
- }
- /*
- * 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);
-
- elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline");
-
- root.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 "";
- }
-
-}
diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java
deleted file mode 100644
index 0d8015d..0000000
--- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java
+++ /dev/null
@@ -1,177 +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.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;
-
-import de.sockenklaus.XmlStats.Datasource.UserstatsDS;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Class XmlWorkerUserstats.
- */
-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)
- * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
- */
- 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);
-
- /*
- * Hier wird das XML aufgebaut
- */
- if (!parameters.containsKey("player")){
- // Generate a summarized XML
-
- root.appendChild(getAddedUpStatsElement(doc));
-
- }
- 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));
- }
- }
- }
-
- /*
- * 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 "";
- }
-
- /**
- * Build a XML subtree for the given player.
- *
- * @param playerName the player name
- * @param doc the doc
- * @return Returns a XML subtree for the given playerName.
- */
- private Element getPlayerElement(String playerName, Document doc){
- PlayerStat player_stats = statsDS.getPlayerStat(playerName);
-
- Element elem_player = doc.createElement("player");
- elem_player.setAttribute("name", playerName);
-
- for(String catName : player_stats.getCats()){
- Category cat = player_stats.get(catName);
- Element elem_cat = doc.createElement("category");
- elem_cat.setAttribute("name", catName);
-
- 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);
- }
-
-
- elem_player.appendChild(elem_cat);
- }
- return elem_player;
- }
-
- private Element getAddedUpStatsElement(Document doc){
- HashMap> addedStats = statsDS.getAddedStats();
-
- Element elem_player = doc.createElement("player");
- elem_player.setAttribute("name", "*");
-
- for (String catName : addedStats.keySet()){
- Element elem_cat = doc.createElement("category");
- elem_cat.setAttribute("name", catName);
-
- for(String entryName : addedStats.get(catName).keySet()){
- Element elem_stat = doc.createElement("stat");
- elem_stat.setAttribute("name", entryName);
-
- if(Arrays.asList(resolveCats).contains(catName)){
- elem_stat.setAttribute("id", String.valueOf(itemResolver.getItem(entryName)));
- }
- elem_stat.setAttribute("value", String.valueOf(addedStats.get(catName).get(entryName)));
-
- elem_cat.appendChild(elem_stat);
- }
- elem_player.appendChild(elem_cat);
- }
-
- return elem_player;
- }
-}