Started to completely rewrite the xml structure...
This commit is contained in:
@@ -3,10 +3,14 @@
|
|||||||
*/
|
*/
|
||||||
package de.sockenklaus.XmlStats.Datasource;
|
package de.sockenklaus.XmlStats.Datasource;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import com.nidefawl.Achievements.AchievementListData;
|
import com.nidefawl.Achievements.AchievementListData;
|
||||||
import com.nidefawl.Achievements.Achievements;
|
import com.nidefawl.Achievements.Achievements;
|
||||||
|
import com.nidefawl.Achievements.PlayerAchievement;
|
||||||
|
import com.nidefawl.Achievements.PlayerAchievementFile;
|
||||||
|
import com.nidefawl.Achievements.PlayerAchievementSQL;
|
||||||
|
|
||||||
import de.sockenklaus.XmlStats.XmlStats;
|
import de.sockenklaus.XmlStats.XmlStats;
|
||||||
import de.sockenklaus.XmlStats.XmlStatsRegistry;
|
import de.sockenklaus.XmlStats.XmlStatsRegistry;
|
||||||
@@ -26,4 +30,30 @@ public class AchievementsDS extends Datasource {
|
|||||||
}
|
}
|
||||||
else return new HashMap<String, AchievementListData>();
|
else return new HashMap<String, AchievementListData>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PlayerAchievement getPlayerAchievement(String playerName){
|
||||||
|
|
||||||
|
PlayerAchievement pa;
|
||||||
|
Achievements ach = (Achievements)XmlStatsRegistry.get("achievements");
|
||||||
|
|
||||||
|
if(ach.useSQL){
|
||||||
|
String location = ach.getDataFolder().getPath() + File.separator + playerName + ".txt";
|
||||||
|
File fold = new File(location);
|
||||||
|
|
||||||
|
pa = new PlayerAchievementSQL(playerName);
|
||||||
|
if(fold.exists()){
|
||||||
|
PlayerAchievement paold = new PlayerAchievementFile(ach.getDataFolder().getPath(), playerName);
|
||||||
|
paold.load();
|
||||||
|
File fnew = new File(location + ".old");
|
||||||
|
fold.renameTo(fnew);
|
||||||
|
pa.copy(paold);
|
||||||
|
pa.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else pa = new PlayerAchievementFile(ach.getDataFolder().getPath(), playerName);
|
||||||
|
|
||||||
|
pa.load();
|
||||||
|
|
||||||
|
return pa;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,40 +75,38 @@ public class Webserver {
|
|||||||
|
|
||||||
this.server = HttpServer.create(this.address, 0);
|
this.server = HttpServer.create(this.address, 0);
|
||||||
|
|
||||||
this.server.createContext("/users.xml", new XmlWorkerUsers());
|
this.server.createContext("/users_list.xml", new XmlWorkerUsers());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.server.start();
|
this.server.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startiConomy(){
|
protected void startiConomy(){
|
||||||
if (this.isRunning() && XmlStats.checkiConomy()){
|
if (this.isRunning() && XmlStats.checkiConomy()){
|
||||||
server.createContext("/money.xml", new XmlWorkerMoney());
|
server.createContext("/users_balances.xml", new XmlWorkerMoney());
|
||||||
XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /money.xml.");
|
XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /users_balances.xml");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
XmlStats.LogWarn("iConomy or webserver not loaded correctly. Disabling /money.xml");
|
XmlStats.LogWarn("iConomy or webserver not loaded correctly. Disabling /users_balances.xml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startAchievements(){
|
protected void startAchievements(){
|
||||||
if(this.isRunning() && XmlStats.checkAchievements()){
|
if(this.isRunning() && XmlStats.checkAchievements()){
|
||||||
server.createContext("/achievements.xml", new XmlWorkerAchievements());
|
server.createContext("/user_achievements.xml", new XmlWorkerAchievements());
|
||||||
XmlStats.LogInfo("Achievements seems to be loaded correctly. Enabling /achievements.xml");
|
XmlStats.LogInfo("Achievements seems to be loaded correctly. Enabling /user_achievements.xml");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
XmlStats.LogWarn("Achievements or webserver not loaded correctly. Disabling /achievements.xml");
|
XmlStats.LogWarn("Achievements or webserver not loaded correctly. Disabling /user_achievements.xml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startStats(){
|
protected void startStats(){
|
||||||
if(this.isRunning() && XmlStats.checkStats()){
|
if(this.isRunning() && XmlStats.checkStats()){
|
||||||
server.createContext("/userstats.xml", new XmlWorkerUserstats());
|
server.createContext("/user_stats.xml", new XmlWorkerUserstats());
|
||||||
XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /userstats.xml");
|
XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /user_stats.xml");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /userstats.xml");
|
XmlStats.LogWarn("Stats or webserver not loaded correctly. Disabling /user_stats.xml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -28,12 +28,16 @@ import java.util.zip.GZIPOutputStream;
|
|||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
import javax.xml.transform.Transformer;
|
import javax.xml.transform.Transformer;
|
||||||
|
import javax.xml.transform.TransformerConfigurationException;
|
||||||
|
import javax.xml.transform.TransformerException;
|
||||||
import javax.xml.transform.TransformerFactory;
|
import javax.xml.transform.TransformerFactory;
|
||||||
import javax.xml.transform.dom.DOMSource;
|
import javax.xml.transform.dom.DOMSource;
|
||||||
import javax.xml.transform.stream.StreamResult;
|
import javax.xml.transform.stream.StreamResult;
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
import com.sun.net.httpserver.Headers;
|
import com.sun.net.httpserver.Headers;
|
||||||
import com.sun.net.httpserver.HttpContext;
|
import com.sun.net.httpserver.HttpContext;
|
||||||
@@ -69,48 +73,90 @@ public abstract class XmlWorker implements HttpHandler {
|
|||||||
String xmlResponse = "";
|
String xmlResponse = "";
|
||||||
byte[] byteResponse = null;
|
byte[] byteResponse = null;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse the parameters
|
||||||
|
*/
|
||||||
try {
|
try {
|
||||||
parameters = parseParameters(queryString);
|
parameters = parseParameters(queryString);
|
||||||
} catch(UnsupportedEncodingException ex){
|
|
||||||
XmlStats.LogWarn("Fehler beim Parsen des HTTP-Query-Strings.");
|
/*
|
||||||
XmlStats.LogWarn(ex.getMessage());
|
* Create the XML doc stuff....
|
||||||
}
|
*/
|
||||||
|
this.factory = DocumentBuilderFactory.newInstance();
|
||||||
xmlResponse = getXML(parameters);
|
this.builder = this.factory.newDocumentBuilder();
|
||||||
|
this.doc = this.builder.newDocument();
|
||||||
|
this.source = new DOMSource(this.doc);
|
||||||
/*
|
this.writer = new StringWriter();
|
||||||
* Check if the clients sends the header "Accept-encoding", the option "gzip-enabled" is true and the clients supports gzip.
|
this.result = new StreamResult(this.writer);
|
||||||
*/
|
this.tf = TransformerFactory.newInstance();
|
||||||
|
this.transformer = this.tf.newTransformer();
|
||||||
|
|
||||||
|
|
||||||
if(parameters.containsKey("gzip") && parameters.get("gzip").contains("true")){
|
|
||||||
XmlStats.LogDebug("Raw gzip requested.");
|
|
||||||
|
|
||||||
HttpContext context = exchange.getHttpContext();
|
Element root = this.doc.createElement("xmlstats");
|
||||||
String filename = context.getPath().substring(1);
|
this.doc.appendChild(root);
|
||||||
|
/*
|
||||||
|
* Actually create the XML
|
||||||
|
*/
|
||||||
|
root.appendChild(getXML(parameters));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Build string from XML
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
catch(TransformerConfigurationException e){
|
||||||
|
|
||||||
byteResponse = compressData(xmlResponse.getBytes());
|
|
||||||
exchange.getResponseHeaders().set("Content-type", "application/gzip");
|
|
||||||
exchange.getResponseHeaders().set("Content-disposition", "attachment; filename="+filename+".gzip");
|
|
||||||
}
|
}
|
||||||
else if(clientAcceptsGzip(headers)) {
|
catch(ParserConfigurationException e){
|
||||||
byteResponse = compressData(xmlResponse.getBytes());
|
|
||||||
exchange.getResponseHeaders().set("Content-encoding", "gzip");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
byteResponse = xmlResponse.getBytes();
|
|
||||||
}
|
}
|
||||||
|
catch (UnsupportedEncodingException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
this.transformer.transform(this.source, this.result);
|
||||||
|
|
||||||
|
xmlResponse = this.writer.toString();
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the clients sends the header "Accept-encoding", the option "gzip-enabled" is true and the clients supports gzip.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(parameters.containsKey("gzip") && parameters.get("gzip").contains("true")){
|
||||||
|
XmlStats.LogDebug("Raw gzip requested.");
|
||||||
|
|
||||||
|
HttpContext context = exchange.getHttpContext();
|
||||||
|
String filename = context.getPath().substring(1);
|
||||||
|
|
||||||
|
byteResponse = compressData(xmlResponse.getBytes());
|
||||||
|
exchange.getResponseHeaders().set("Content-type", "application/gzip");
|
||||||
|
exchange.getResponseHeaders().set("Content-disposition", "attachment; filename="+filename+".gzip");
|
||||||
|
}
|
||||||
|
else if(clientAcceptsGzip(headers)) {
|
||||||
|
byteResponse = compressData(xmlResponse.getBytes());
|
||||||
|
exchange.getResponseHeaders().set("Content-encoding", "gzip");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
byteResponse = xmlResponse.getBytes();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, byteResponse.length);
|
exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, byteResponse.length);
|
||||||
exchange.getResponseBody().write(byteResponse);
|
exchange.getResponseBody().write(byteResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(UnsupportedEncodingException e){
|
||||||
}
|
}
|
||||||
catch(IOException ex){
|
catch(IOException ex){
|
||||||
XmlStats.LogError("Fehler beim Senden der HTTP-Antwort.");
|
XmlStats.LogError("Fehler beim Senden der HTTP-Antwort.");
|
||||||
XmlStats.LogError(ex.getMessage());
|
XmlStats.LogError(ex.getMessage());
|
||||||
}
|
}
|
||||||
|
catch (TransformerException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
exchange.close();
|
exchange.close();
|
||||||
}
|
}
|
||||||
@@ -165,7 +211,7 @@ public abstract class XmlWorker implements HttpHandler {
|
|||||||
* @param parameters the parameters
|
* @param parameters the parameters
|
||||||
* @return the xML
|
* @return the xML
|
||||||
*/
|
*/
|
||||||
abstract String getXML(Map<String, List<String>> parameters);
|
abstract Element getXML(Map<String, List<String>> parameters);
|
||||||
|
|
||||||
private byte[] compressData(byte[] input){
|
private byte[] compressData(byte[] input){
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
@@ -202,4 +248,17 @@ public abstract class XmlWorker implements HttpHandler {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the text elem.
|
||||||
|
*
|
||||||
|
* @param elemName the elem name
|
||||||
|
* @param text the text
|
||||||
|
* @return the text elem
|
||||||
|
*/
|
||||||
|
protected Element getTextElem(String elemName, String text){
|
||||||
|
Element result = this.doc.createElement(elemName);
|
||||||
|
result.setTextContent(text);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,21 +3,13 @@
|
|||||||
*/
|
*/
|
||||||
package de.sockenklaus.XmlStats.XmlWorkers;
|
package de.sockenklaus.XmlStats.XmlWorkers;
|
||||||
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.transform.TransformerFactory;
|
|
||||||
import javax.xml.transform.dom.DOMSource;
|
|
||||||
import javax.xml.transform.stream.StreamResult;
|
|
||||||
|
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
import com.nidefawl.Achievements.AchievementListData;
|
import com.nidefawl.Achievements.AchievementListData;
|
||||||
import com.nidefawl.Stats.Stats;
|
|
||||||
|
|
||||||
import de.sockenklaus.XmlStats.Datasource.AchievementsDS;
|
import de.sockenklaus.XmlStats.Datasource.AchievementsDS;
|
||||||
|
|
||||||
@@ -37,45 +29,31 @@ public class XmlWorkerAchievements extends XmlWorker {
|
|||||||
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
String getXML(Map<String, List<String>> parameters) {
|
Element getXML(Map<String, List<String>> parameters) {
|
||||||
|
|
||||||
try {
|
|
||||||
this.factory = DocumentBuilderFactory.newInstance();
|
|
||||||
this.builder = this.factory.newDocumentBuilder();
|
|
||||||
this.doc = this.builder.newDocument();
|
|
||||||
this.source = new DOMSource(this.doc);
|
|
||||||
this.writer = new StringWriter();
|
|
||||||
this.result = new StreamResult(this.writer);
|
|
||||||
this.tf = TransformerFactory.newInstance();
|
|
||||||
this.transformer = this.tf.newTransformer();
|
|
||||||
|
|
||||||
HashMap<String, AchievementListData> achList = achDS.getAchievementsList();
|
|
||||||
|
HashMap<String, AchievementListData> achList = achDS.getAchievementsList();
|
||||||
|
|
||||||
Element root = this.doc.createElement("xmlstats");
|
Element elem_achs = this.doc.createElement("achievements");
|
||||||
Element elem_achs = this.doc.createElement("achievements");
|
|
||||||
this.doc.appendChild(root);
|
|
||||||
root.appendChild(elem_achs);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hier wird das XML aufgebaut
|
* Hier wird das XML aufgebaut
|
||||||
*/
|
*/
|
||||||
|
if(parameters.containsKey("user")){
|
||||||
|
for (String playerName : parameters.get("user")){
|
||||||
|
elem_achs.appendChild(getPlayerAchievement(playerName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
for(String achName : achList.keySet()){
|
for(String achName : achList.keySet()){
|
||||||
elem_achs.appendChild(getAchievement(achList.get(achName)));
|
elem_achs.appendChild(getAchievement(achList.get(achName)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hier endet der XML-Aufbau
|
* Hier endet der XML-Aufbau
|
||||||
*/
|
*/
|
||||||
|
return elem_achs;
|
||||||
this.transformer.transform(this.source, result);
|
|
||||||
return this.writer.toString();
|
|
||||||
}
|
|
||||||
catch (Exception e){
|
|
||||||
Stats.log.log(Level.SEVERE, "Something went terribly wrong!");
|
|
||||||
Stats.log.log(Level.SEVERE, e.getMessage());
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,5 +83,12 @@ public class XmlWorkerAchievements extends XmlWorker {
|
|||||||
return elem_ach;
|
return elem_ach;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Element getPlayerAchievement(String playerName){
|
||||||
|
Element elem_player = this.doc.createElement("user");
|
||||||
|
elem_player.appendChild(getTextElem("name", playerName));
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,21 +14,12 @@
|
|||||||
*/
|
*/
|
||||||
package de.sockenklaus.XmlStats.XmlWorkers;
|
package de.sockenklaus.XmlStats.XmlWorkers;
|
||||||
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.transform.TransformerFactory;
|
|
||||||
import javax.xml.transform.dom.DOMSource;
|
|
||||||
import javax.xml.transform.stream.StreamResult;
|
|
||||||
|
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
import com.nidefawl.Stats.Stats;
|
|
||||||
|
|
||||||
import de.sockenklaus.XmlStats.Datasource.MoneyDS;
|
import de.sockenklaus.XmlStats.Datasource.MoneyDS;
|
||||||
|
|
||||||
// TODO: Auto-generated Javadoc
|
// TODO: Auto-generated Javadoc
|
||||||
@@ -47,49 +38,27 @@ public class XmlWorkerMoney extends XmlWorker {
|
|||||||
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getXML(Map<String, List<String>> parameters) {
|
public Element getXML(Map<String, List<String>> parameters) {
|
||||||
|
|
||||||
try {
|
HashMap<String, Double> balances = moneyDS.getBalances();
|
||||||
this.factory = DocumentBuilderFactory.newInstance();
|
|
||||||
this.builder = this.factory.newDocumentBuilder();
|
|
||||||
this.doc = this.builder.newDocument();
|
|
||||||
this.source = new DOMSource(this.doc);
|
|
||||||
this.writer = new StringWriter();
|
|
||||||
this.result = new StreamResult(this.writer);
|
|
||||||
this.tf = TransformerFactory.newInstance();
|
|
||||||
this.transformer = this.tf.newTransformer();
|
|
||||||
|
|
||||||
HashMap<String, Double> balances = moneyDS.getBalances();
|
|
||||||
|
|
||||||
Element root = this.doc.createElement("xmlstats");
|
|
||||||
Element elem_money = this.doc.createElement("money");
|
|
||||||
this.doc.appendChild(root);
|
|
||||||
root.appendChild(elem_money);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hier wird das XML aufgebaut
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (String playerName : balances.keySet()){
|
|
||||||
Element elem_player = this.doc.createElement("player");
|
|
||||||
elem_player.setAttribute("name", playerName);
|
|
||||||
elem_player.setAttribute("balance", String.valueOf(balances.get(playerName)));
|
|
||||||
|
|
||||||
elem_money.appendChild(elem_player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hier endet der XML-Aufbau
|
|
||||||
*/
|
|
||||||
transformer.transform(this.source, result);
|
|
||||||
return this.writer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch (Exception e){
|
Element elem_users = this.doc.createElement("users");
|
||||||
Stats.log.log(Level.SEVERE, "Something went terribly wrong!");
|
|
||||||
Stats.log.log(Level.SEVERE, e.getMessage());
|
/*
|
||||||
return "";
|
* Hier wird das XML aufgebaut
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (String playerName : balances.keySet()){
|
||||||
|
Element elem_user = this.doc.createElement("user");
|
||||||
|
elem_user.appendChild(getTextElem("name", playerName));
|
||||||
|
elem_user.appendChild(getTextElem("balance", String.valueOf(balances.get(playerName))));
|
||||||
|
|
||||||
|
elem_users.appendChild(elem_user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hier endet der XML-Aufbau
|
||||||
|
*/
|
||||||
|
return elem_users;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,22 +14,13 @@
|
|||||||
*/
|
*/
|
||||||
package de.sockenklaus.XmlStats.XmlWorkers;
|
package de.sockenklaus.XmlStats.XmlWorkers;
|
||||||
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.transform.TransformerFactory;
|
|
||||||
import javax.xml.transform.dom.DOMSource;
|
|
||||||
import javax.xml.transform.stream.StreamResult;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
import com.nidefawl.Stats.Stats;
|
|
||||||
|
|
||||||
import de.sockenklaus.XmlStats.XmlStats;
|
import de.sockenklaus.XmlStats.XmlStats;
|
||||||
import de.sockenklaus.XmlStats.XmlStatsRegistry;
|
import de.sockenklaus.XmlStats.XmlStatsRegistry;
|
||||||
import de.sockenklaus.XmlStats.Datasource.UsersDS;
|
import de.sockenklaus.XmlStats.Datasource.UsersDS;
|
||||||
@@ -44,68 +35,46 @@ public class XmlWorkerUsers extends XmlWorker {
|
|||||||
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getXML(Map<String, List<String>> parameters) {
|
public Element getXML(Map<String, List<String>> parameters) {
|
||||||
UsersDS users = new UsersDS();
|
UsersDS users = new UsersDS();
|
||||||
|
|
||||||
|
Element elem_users = this.doc.createElement("users");
|
||||||
|
elem_users.setAttribute("count", String.valueOf(users.getAllPlayers().size()));
|
||||||
|
|
||||||
try {
|
/*
|
||||||
this.factory = DocumentBuilderFactory.newInstance();
|
* Get list online player names
|
||||||
this.builder = this.factory.newDocumentBuilder();
|
*/
|
||||||
this.doc = this.builder.newDocument();
|
XmlStats pluginTemp= (XmlStats)XmlStatsRegistry.get("xmlstats");
|
||||||
this.source = new DOMSource(this.doc);
|
|
||||||
this.writer = new StringWriter();
|
|
||||||
this.result = new StreamResult(writer);
|
|
||||||
this.tf = TransformerFactory.newInstance();
|
|
||||||
this.transformer = tf.newTransformer();
|
|
||||||
|
|
||||||
Element root = this.doc.createElement("xmlstats");
|
|
||||||
Element elem_users = this.doc.createElement("users");
|
|
||||||
elem_users.setAttribute("count", String.valueOf(users.getAllPlayers().size()));
|
|
||||||
this.doc.appendChild(root);
|
|
||||||
root.appendChild(elem_users);
|
|
||||||
|
|
||||||
/*
|
Player[] onlinePlayers = pluginTemp.getServer().getOnlinePlayers();
|
||||||
* Get list online player names
|
List<String> onlinePlayerNames = new ArrayList<String>();
|
||||||
*/
|
|
||||||
XmlStats pluginTemp= (XmlStats)XmlStatsRegistry.get("xmlstats");
|
|
||||||
|
|
||||||
Player[] onlinePlayers = pluginTemp.getServer().getOnlinePlayers();
|
if (onlinePlayers != null){
|
||||||
List<String> onlinePlayerNames = new ArrayList<String>();
|
for (int i = 0; i < onlinePlayers.length; i++){
|
||||||
|
onlinePlayerNames.add(onlinePlayers[i].getName());
|
||||||
if (onlinePlayers != null){
|
|
||||||
for (int i = 0; i < onlinePlayers.length; i++){
|
|
||||||
onlinePlayerNames.add(onlinePlayers[i].getName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/*
|
}
|
||||||
* Got list of online player names
|
/*
|
||||||
*/
|
* Got list of online player names
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hier wird das XML aufgebaut
|
* Hier wird das XML aufgebaut
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for(String playerName : users.getAllPlayers()){
|
for(String playerName : users.getAllPlayers()){
|
||||||
|
|
||||||
Element elem_player = this.doc.createElement("player");
|
Element elem_player = this.doc.createElement("user");
|
||||||
elem_player.setTextContent(playerName);
|
elem_player.appendChild(getTextElem("name", playerName));
|
||||||
|
|
||||||
elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline");
|
elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline");
|
||||||
|
|
||||||
elem_users.appendChild(elem_player);
|
elem_users.appendChild(elem_player);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Hier endet der XML-Aufbau
|
* Hier endet der XML-Aufbau
|
||||||
*/
|
*/
|
||||||
transformer.transform(source, result);
|
return elem_users;
|
||||||
return writer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Stats.log.log(Level.SEVERE, "Something went terribly wrong!");
|
|
||||||
Stats.log.log(Level.SEVERE, e.getMessage());
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,20 +14,12 @@
|
|||||||
*/
|
*/
|
||||||
package de.sockenklaus.XmlStats.XmlWorkers;
|
package de.sockenklaus.XmlStats.XmlWorkers;
|
||||||
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.transform.TransformerFactory;
|
|
||||||
import javax.xml.transform.dom.DOMSource;
|
|
||||||
import javax.xml.transform.stream.StreamResult;
|
|
||||||
|
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
import com.nidefawl.Stats.Stats;
|
|
||||||
import com.nidefawl.Stats.datasource.Category;
|
import com.nidefawl.Stats.datasource.Category;
|
||||||
import com.nidefawl.Stats.datasource.PlayerStat;
|
import com.nidefawl.Stats.datasource.PlayerStat;
|
||||||
|
|
||||||
@@ -52,65 +44,43 @@ public class XmlWorkerUserstats extends XmlWorker {
|
|||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
|
||||||
*/
|
*/
|
||||||
public String getXML(Map<String, List<String>> parameters) {
|
public Element getXML(Map<String, List<String>> parameters) {
|
||||||
try {
|
|
||||||
this.factory = DocumentBuilderFactory.newInstance();
|
|
||||||
this.builder = this.factory.newDocumentBuilder();
|
|
||||||
this.doc = this.builder.newDocument();
|
|
||||||
this.source = new DOMSource(this.doc);
|
|
||||||
this.writer = new StringWriter();
|
|
||||||
this.result = new StreamResult(writer);
|
|
||||||
this.tf = TransformerFactory.newInstance();
|
|
||||||
this.transformer = this.tf.newTransformer();
|
|
||||||
|
|
||||||
Element root = this.doc.createElement("xmlstats");
|
|
||||||
Element elem_userstats = this.doc.createElement("userstats");
|
|
||||||
this.doc.appendChild(root);
|
|
||||||
root.appendChild(elem_userstats);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hier wird das XML aufgebaut
|
|
||||||
*/
|
|
||||||
if (!parameters.containsKey("player")){
|
|
||||||
// Generate a summarized XML
|
|
||||||
elem_userstats.setAttribute("type", "sum");
|
|
||||||
elem_userstats.appendChild(getAddedUpStatsElement());
|
|
||||||
|
|
||||||
|
Element elem_userstats = this.doc.createElement("userstats");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hier wird das XML aufgebaut
|
||||||
|
*/
|
||||||
|
if (!parameters.containsKey("player")){
|
||||||
|
// Generate a summarized XML
|
||||||
|
elem_userstats.setAttribute("type", "sum");
|
||||||
|
elem_userstats.appendChild(getAddedUpStatsElement());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Generate the XML for the given user(s)
|
// Generate the XML for the given user(s)
|
||||||
for(String playerName : statsDS.fetchAllPlayers()){
|
for(String playerName : statsDS.fetchAllPlayers()){
|
||||||
if (parameters.containsKey("player") && parameters.get("player").contains(playerName.toLowerCase())){
|
if (parameters.containsKey("user") && parameters.get("user").contains(playerName.toLowerCase())){
|
||||||
elem_userstats.appendChild(getPlayerElement(playerName));
|
elem_userstats.appendChild(getUserElement(playerName));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Hier endet der XML-Aufbau
|
|
||||||
*/
|
|
||||||
|
|
||||||
transformer.transform(source, result);
|
|
||||||
return writer.toString();
|
|
||||||
}
|
|
||||||
catch (Exception e){
|
|
||||||
Stats.log.log(Level.SEVERE, "Something went terribly wrong!");
|
|
||||||
Stats.log.log(Level.SEVERE, e.getMessage());
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Hier endet der XML-Aufbau
|
||||||
|
*/
|
||||||
|
return elem_userstats;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build a XML subtree for the given player.
|
* Build a XML subtree for the given player.
|
||||||
*
|
*
|
||||||
* @param playerName the player name
|
* @param playerName the player name
|
||||||
* @paramthis.doc thethis.doc
|
|
||||||
* @return Returns a XML subtree for the given playerName.
|
* @return Returns a XML subtree for the given playerName.
|
||||||
|
* @paramthis.doc thethis.doc
|
||||||
*/
|
*/
|
||||||
private Element getPlayerElement(String playerName){
|
private Element getUserElement(String playerName){
|
||||||
PlayerStat player_stats = statsDS.getPlayerStat(playerName);
|
PlayerStat player_stats = statsDS.getPlayerStat(playerName);
|
||||||
|
|
||||||
Element elem_player = this.doc.createElement("player");
|
Element elem_player = this.doc.createElement("user");
|
||||||
Element elem_cats = this.doc.createElement("categories");
|
Element elem_cats = this.doc.createElement("categories");
|
||||||
|
|
||||||
elem_player.appendChild(getTextElem("name", playerName));
|
elem_player.appendChild(getTextElem("name", playerName));
|
||||||
@@ -125,22 +95,21 @@ public class XmlWorkerUserstats extends XmlWorker {
|
|||||||
elem_cat.appendChild(elem_items);
|
elem_cat.appendChild(elem_items);
|
||||||
elem_cats.appendChild(elem_cat);
|
elem_cats.appendChild(elem_cat);
|
||||||
|
|
||||||
for(String valName : cat.stats.keySet()){
|
for(String valName : cat.stats.keySet()){
|
||||||
int value = cat.get(valName);
|
elem_items.appendChild(getItemElem(valName, cat.get(valName)));
|
||||||
Element elem_item = this.doc.createElement("item");
|
|
||||||
|
|
||||||
elem_item.appendChild(getTextElem("name", valName));
|
|
||||||
elem_item.appendChild(getTextElem("value", String.valueOf(value)));
|
|
||||||
|
|
||||||
elem_items.appendChild(elem_item);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return elem_player;
|
return elem_player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the added up stats element.
|
||||||
|
*
|
||||||
|
* @return the added up stats element
|
||||||
|
*/
|
||||||
private Element getAddedUpStatsElement(){
|
private Element getAddedUpStatsElement(){
|
||||||
HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats();
|
HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats();
|
||||||
Element elem_player = this.doc.createElement("player");
|
Element elem_player = this.doc.createElement("user");
|
||||||
Element elem_cats = this.doc.createElement("categories");
|
Element elem_cats = this.doc.createElement("categories");
|
||||||
|
|
||||||
elem_player.appendChild(elem_cats);
|
elem_player.appendChild(elem_cats);
|
||||||
@@ -154,26 +123,27 @@ public class XmlWorkerUserstats extends XmlWorker {
|
|||||||
elem_cats.appendChild(elem_cat);
|
elem_cats.appendChild(elem_cat);
|
||||||
|
|
||||||
for(String entryName : addedStats.get(catName).keySet()){
|
for(String entryName : addedStats.get(catName).keySet()){
|
||||||
Element elem_item = this.doc.createElement("item");
|
elem_items.appendChild(getItemElem(entryName, addedStats.get(catName).get(entryName)));
|
||||||
|
|
||||||
elem_item.appendChild(getTextElem("name", entryName));
|
|
||||||
elem_item.appendChild(getTextElem("value", String.valueOf(addedStats.get(catName).get(entryName))));
|
|
||||||
|
|
||||||
elem_items.appendChild(elem_item);
|
|
||||||
}
|
}
|
||||||
elem_cat.appendChild(elem_items);
|
elem_cat.appendChild(elem_items);
|
||||||
}
|
}
|
||||||
|
|
||||||
return elem_player;
|
return elem_player;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Element getTextElem(String elemName, String text){
|
/**
|
||||||
Element result = this.doc.createElement(elemName);
|
* Gets the item elem.
|
||||||
result.setTextContent(text);
|
*
|
||||||
return result;
|
* @param key the key
|
||||||
}
|
* @param value the value
|
||||||
|
* @return the item elem
|
||||||
private Element getItemElem(String key, String value){
|
*/
|
||||||
return null;
|
private Element getItemElem(String key, int value){
|
||||||
|
Element elem_item = this.doc.createElement("item");
|
||||||
|
|
||||||
|
elem_item.appendChild(getTextElem("name", key));
|
||||||
|
elem_item.appendChild(getTextElem("value", String.valueOf(value)));
|
||||||
|
|
||||||
|
return elem_item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user