Merge branch 'achievements'
Conflicts: src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java src/de/sockenklaus/XmlStats/Webserver.java src/de/sockenklaus/XmlStats/XmlStats.java
This commit is contained in:
@@ -5,13 +5,16 @@
|
||||
<property name="dist" value="dist" />
|
||||
<property name="src" value="src" />
|
||||
<property name="name" value="XmlStats" />
|
||||
<property name="version" value="0.2" />
|
||||
<property name="version" value="0.3" />
|
||||
<property name="package" value="de/sockenklaus/XmlStats" />
|
||||
<property name="resources" value="resources" />
|
||||
<property name="author" value="sockenklaus" />
|
||||
|
||||
<path id="classpath">
|
||||
<pathelement location="lib/" />
|
||||
<pathelement location="lib/Achievements.jar" />
|
||||
<pathelement location="lib/Stats.jar" />
|
||||
<pathelement location="lib/iConomy.jar" />
|
||||
<pathelement location="lib/bukkit-0.0.1-SNAPSHOT.jar" />
|
||||
</path>
|
||||
|
||||
<buildnumber file=".build.number" />
|
||||
|
||||
69
src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java
Normal file
69
src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java
Normal file
@@ -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<String, PlayerAchievement> playerAchievementsList;
|
||||
|
||||
public HashMap<String, AchievementListData> getAchievementsList(){
|
||||
Achievements ach = (Achievements)XmlStatsRegistry.get("achievements");
|
||||
|
||||
if(XmlStats.checkAchievements()){
|
||||
return ach.achievementList;
|
||||
}
|
||||
else return new HashMap<String, AchievementListData>();
|
||||
}
|
||||
|
||||
/*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;
|
||||
}
|
||||
}
|
||||
@@ -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<String> list) {
|
||||
int result = 0;
|
||||
|
||||
for(String playerName : list){
|
||||
result+=this.getBalance(playerName);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, HashMap<String, Integer>> getAddedStats(){
|
||||
public HashMap<String, HashMap<String, Integer>> getAddedStats(List<String> playerList){
|
||||
HashMap <String, HashMap<String, Integer>> result = new HashMap<String, HashMap<String, Integer>>();
|
||||
|
||||
for(String playerName : this.fetchAllPlayers()){
|
||||
for(String playerName : playerList){
|
||||
PlayerStat player = this.getPlayerStat(playerName);
|
||||
|
||||
for(String catName : player.getCats()){
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
17
src/de/sockenklaus/XmlStats/XmlStatsException.java
Normal file
17
src/de/sockenklaus/XmlStats/XmlStatsException.java
Normal file
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package de.sockenklaus.XmlStats;
|
||||
|
||||
/**
|
||||
* @author socrates
|
||||
*
|
||||
*/
|
||||
public class XmlStatsException extends Throwable {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
||||
58
src/de/sockenklaus/XmlStats/XmlStatsServerListener.java
Normal file
58
src/de/sockenklaus/XmlStats/XmlStatsServerListener.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
82
src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java
Normal file
82
src/de/sockenklaus/XmlStats/XmlWorkers/AchievementsList.java
Normal file
@@ -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<String, List<String>> parameters) {
|
||||
HashMap<String, AchievementListData> 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<String> playerList, Map<String, List<String>> 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<String> playerList, Map<String, List<String>> 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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
92
src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java
Normal file
92
src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java
Normal file
@@ -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<String, List<String>> 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<String> playerList, Map<String, List<String>> 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<String> userList, Map<String, List<String>> 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;
|
||||
}
|
||||
|
||||
}
|
||||
92
src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java
Normal file
92
src/de/sockenklaus/XmlStats/XmlWorkers/UserBalances.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String> playerList, Map<String, List<String>> 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<String, List<String>> 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<String> userList, Map<String, List<String>> 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;
|
||||
}
|
||||
}
|
||||
96
src/de/sockenklaus/XmlStats/XmlWorkers/UserList.java
Normal file
96
src/de/sockenklaus/XmlStats/XmlWorkers/UserList.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String, List<String>> 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<String> onlinePlayerNames = new ArrayList<String>();
|
||||
|
||||
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<String> playerList, Map<String, List<String>> 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<String> playerList, Map<String, List<String>> parameters) {
|
||||
return this.getXml(parameters);
|
||||
}
|
||||
|
||||
}
|
||||
170
src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java
Normal file
170
src/de/sockenklaus/XmlStats/XmlWorkers/UserStats.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String, List<String>> 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<String> playerList){
|
||||
HashMap<String, HashMap<String, Integer>> 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<String> playerList, Map<String, List<String>> 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<String> playerList, Map<String, List<String>> 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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<String> 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<String, List<String>> parameters);
|
||||
|
||||
/**
|
||||
* @param playerList
|
||||
* @param parameters
|
||||
* @return
|
||||
*/
|
||||
protected abstract Element getSumXml(List<String> playerList, Map<String, List<String>> parameters);
|
||||
|
||||
/**
|
||||
* @param playerList
|
||||
* @param parameters
|
||||
* @return
|
||||
*/
|
||||
protected abstract Element getUserXml(List<String> playerList, Map<String, List<String>> 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<String> values = result.get(key);
|
||||
|
||||
values.add(value);
|
||||
List<String> values = new ArrayList<String>();
|
||||
for (String value : valueArr){
|
||||
if (!values.contains(value)){
|
||||
values.add(value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
List<String> values = new ArrayList<String>();
|
||||
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<String, List<String>> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String, List<String>> 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<String, Double> 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 "";
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String, List<String>> 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<String> onlinePlayerNames = new ArrayList<String>();
|
||||
|
||||
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 "";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String, List<String>> 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<String, HashMap<String, Integer>> 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user