Added a possibility to reload the webserver (not accessible for the user
though) and fixed a bug that prevented the userstats.xml from delivering up-to-date data.
This commit is contained in:
@@ -28,7 +28,7 @@ public abstract class Datasource {
|
||||
*
|
||||
* @return the array list
|
||||
*/
|
||||
protected ArrayList<String> fetchAllPlayers(){
|
||||
public ArrayList<String> fetchAllPlayers(){
|
||||
File[] files = new File("world/players").listFiles();
|
||||
ArrayList<String> result = new ArrayList<String>();
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
package de.sockenklaus.XmlStats.Datasource;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.nidefawl.Stats.Stats;
|
||||
@@ -32,16 +31,12 @@ import de.sockenklaus.XmlStats.XmlStatsRegistry;
|
||||
public class UserstatsDS extends Datasource {
|
||||
|
||||
private Stats statsPlugin;
|
||||
private ArrayList<String> allPlayerNames;
|
||||
private HashMap<String, PlayerStat> stats = new HashMap<String, PlayerStat>();
|
||||
|
||||
/**
|
||||
* Instantiates a new stats ds.
|
||||
*/
|
||||
public UserstatsDS() {
|
||||
this.statsPlugin = (Stats)XmlStatsRegistry.get("stats");
|
||||
this.allPlayerNames = fetchAllPlayers();
|
||||
this.stats = fetchPlayerStats(allPlayerNames);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,39 +57,11 @@ public class UserstatsDS extends Datasource {
|
||||
return this.statsPlugin.getDataFolder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch all player stats.
|
||||
*
|
||||
* @param pPlayerNames the player names
|
||||
* @return the hash map
|
||||
*/
|
||||
private HashMap<String, PlayerStat> fetchPlayerStats(ArrayList<String> pPlayerNames){
|
||||
HashMap<String, PlayerStat> result = new HashMap<String, PlayerStat>();
|
||||
|
||||
for (String playerName : pPlayerNames){
|
||||
|
||||
PlayerStat ps = new PlayerStatSQL(playerName, statsPlugin);
|
||||
ps.load();
|
||||
result.put(playerName, ps);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the stats.
|
||||
*
|
||||
* @return the stats
|
||||
*/
|
||||
public HashMap<String, PlayerStat> getStats(){
|
||||
return this.stats;
|
||||
}
|
||||
|
||||
public HashMap<String, HashMap<String, Integer>> getAddedStats(){
|
||||
HashMap <String, HashMap<String, Integer>> result = new HashMap<String, HashMap<String, Integer>>();
|
||||
|
||||
for(String playerName : this.stats.keySet()){
|
||||
PlayerStat player = this.stats.get(playerName);
|
||||
for(String playerName : this.fetchAllPlayers()){
|
||||
PlayerStat player = this.getPlayerStat(playerName);
|
||||
|
||||
for(String catName : player.getCats()){
|
||||
Category cat = player.get(catName);
|
||||
@@ -129,8 +96,12 @@ public class UserstatsDS extends Datasource {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public void sortStats(){
|
||||
|
||||
public PlayerStat getPlayerStat(String playerName){
|
||||
PlayerStat result = new PlayerStatSQL(playerName, this.statsPlugin);
|
||||
|
||||
result.load();
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ public class Settings {
|
||||
else {
|
||||
conf.setProperty("options.webserver-enabled", false);
|
||||
conf.setProperty("options.webserver-port", 9123);
|
||||
conf.setProperty("options.gzip-enabled", false);
|
||||
conf.setProperty("options.verbose-enabled", false);
|
||||
conf.save();
|
||||
}
|
||||
@@ -93,7 +92,7 @@ public class Settings {
|
||||
*
|
||||
* @return the settings filename
|
||||
*/
|
||||
public String getSettingsFilename(){
|
||||
protected String getSettingsFilename(){
|
||||
return configFilename;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,13 +37,51 @@ public class Webserver {
|
||||
* @param port the port
|
||||
* @throws IOException Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public Webserver(int port) throws IOException {
|
||||
public Webserver() throws IOException {
|
||||
Settings settingsTemp = (Settings)XmlStatsRegistry.get("settings");
|
||||
|
||||
this.start(settingsTemp.getInt("options.webserver-port"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop server.
|
||||
*/
|
||||
public void stop() {
|
||||
server.stop(0);
|
||||
this.server = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Server running.
|
||||
*
|
||||
* @return true, if successful
|
||||
*/
|
||||
public boolean isRunning(){
|
||||
return (this.server == null) ? false : true;
|
||||
}
|
||||
|
||||
public void reload() throws IOException {
|
||||
this.stop();
|
||||
|
||||
Settings settingsTemp = (Settings)XmlStatsRegistry.get("settings");
|
||||
|
||||
this.start(settingsTemp.getInt("options.webserver-port"));
|
||||
}
|
||||
|
||||
private void start(int port) throws IOException {
|
||||
this.address = null;
|
||||
this.server = null;
|
||||
|
||||
this.address = new InetSocketAddress(port);
|
||||
|
||||
server = HttpServer.create(address, 0);
|
||||
this.server = HttpServer.create(this.address, 0);
|
||||
|
||||
server.createContext("/users.xml", new XmlWorkerUsers());
|
||||
server.createContext("/userstats.xml", new XmlWorkerUserstats());
|
||||
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");
|
||||
}
|
||||
|
||||
if (XmlStats.isiConomyHooked()){
|
||||
server.createContext("/money.xml", new XmlWorkerMoney());
|
||||
@@ -55,20 +93,4 @@ public class Webserver {
|
||||
|
||||
this.server.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop server.
|
||||
*/
|
||||
public void stopServer() {
|
||||
server.stop(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Server running.
|
||||
*
|
||||
* @return true, if successful
|
||||
*/
|
||||
public boolean isRunning(){
|
||||
return (this.server == null) ? false : true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,8 @@ package de.sockenklaus.XmlStats;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.event.Event.Priority;
|
||||
import org.bukkit.event.Event.Type;
|
||||
import org.bukkit.event.server.PluginDisableEvent;
|
||||
import org.bukkit.event.server.PluginEnableEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
@@ -49,7 +46,7 @@ public class XmlStats extends JavaPlugin {
|
||||
if(this.enabled && webserverTemp.isRunning()){
|
||||
this.enabled = false;
|
||||
|
||||
webserverTemp.stopServer();
|
||||
webserverTemp.stop();
|
||||
|
||||
getServer().getScheduler().cancelTasks(this);
|
||||
|
||||
@@ -77,10 +74,13 @@ public class XmlStats extends JavaPlugin {
|
||||
LogDebug("options.verbose-enabled: "+settingsTemp.getBoolean("options.verbose-enabled"));
|
||||
|
||||
this.hookPlugins();
|
||||
|
||||
this.registerEvents();
|
||||
|
||||
|
||||
if (settingsTemp.getBoolean("options.webserver-enabled")){
|
||||
try {
|
||||
XmlStatsRegistry.put("webserver", new Webserver(settingsTemp.getInt("options.webserver-port")));
|
||||
XmlStatsRegistry.put("webserver", new Webserver());
|
||||
|
||||
this.enabled = true;
|
||||
LogInfo("Plugin Enabled");
|
||||
@@ -172,4 +172,11 @@ public class XmlStats extends JavaPlugin {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ package de.sockenklaus.XmlStats;
|
||||
import org.bukkit.event.server.PluginDisableEvent;
|
||||
import org.bukkit.event.server.PluginEnableEvent;
|
||||
import org.bukkit.event.server.ServerListener;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.iConomy.iConomy;
|
||||
import com.nidefawl.Stats.Stats;
|
||||
|
||||
@@ -30,9 +30,7 @@ import com.sun.net.httpserver.HttpContext;
|
||||
import com.sun.net.httpserver.HttpHandler;
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
|
||||
import de.sockenklaus.XmlStats.Settings;
|
||||
import de.sockenklaus.XmlStats.XmlStats;
|
||||
import de.sockenklaus.XmlStats.XmlStatsRegistry;
|
||||
|
||||
// TODO: Auto-generated Javadoc
|
||||
/**
|
||||
@@ -48,7 +46,6 @@ public abstract class XmlWorker implements HttpHandler {
|
||||
Map<String, List<String>> parameters = new HashMap<String, List<String>>();
|
||||
|
||||
Headers headers = exchange.getRequestHeaders();
|
||||
Settings settingsTemp = (Settings)XmlStatsRegistry.get("settings");
|
||||
|
||||
if("get".equalsIgnoreCase(exchange.getRequestMethod())){
|
||||
String queryString = exchange.getRequestURI().getRawQuery();
|
||||
@@ -109,7 +106,7 @@ public abstract class XmlWorker implements HttpHandler {
|
||||
* @return the map
|
||||
* @throws UnsupportedEncodingException the unsupported encoding exception
|
||||
*/
|
||||
public Map<String, List<String>> parseParameters(String queryString) throws UnsupportedEncodingException {
|
||||
private Map<String, List<String>> parseParameters(String queryString) throws UnsupportedEncodingException {
|
||||
Map<String, List<String>> result = new HashMap<String, List<String>>();
|
||||
|
||||
if (queryString != null){
|
||||
|
||||
@@ -59,8 +59,6 @@ public class XmlWorkerUserstats extends XmlWorker {
|
||||
resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"};
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
||||
*/
|
||||
@@ -84,12 +82,12 @@ public class XmlWorkerUserstats extends XmlWorker {
|
||||
if (!parameters.containsKey("player")){
|
||||
// Generate a summarized XML
|
||||
|
||||
root.appendChild(getAddedUpStats(doc));
|
||||
root.appendChild(getAddedUpStatsElement(doc));
|
||||
|
||||
}
|
||||
else {
|
||||
// Generate the XML for the given user(s)
|
||||
for(String playerName : statsDS.getStats().keySet()){
|
||||
for(String playerName : statsDS.fetchAllPlayers()){
|
||||
if (parameters.containsKey("player") && parameters.get("player").contains(playerName)){
|
||||
root.appendChild(getPlayerElement(playerName, doc));
|
||||
}
|
||||
@@ -120,7 +118,7 @@ public class XmlWorkerUserstats extends XmlWorker {
|
||||
* @return Returns a XML subtree for the given playerName.
|
||||
*/
|
||||
private Element getPlayerElement(String playerName, Document doc){
|
||||
PlayerStat player_stats = statsDS.getStats().get(playerName);
|
||||
PlayerStat player_stats = statsDS.getPlayerStat(playerName);
|
||||
|
||||
Element elem_player = doc.createElement("player");
|
||||
elem_player.setAttribute("name", playerName);
|
||||
@@ -150,7 +148,7 @@ public class XmlWorkerUserstats extends XmlWorker {
|
||||
return elem_player;
|
||||
}
|
||||
|
||||
private Element getAddedUpStats(Document doc){
|
||||
private Element getAddedUpStatsElement(Document doc){
|
||||
HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats();
|
||||
|
||||
Element elem_player = doc.createElement("player");
|
||||
|
||||
Reference in New Issue
Block a user