diff --git a/build.xml b/build.xml index b5b06e9..c0a1822 100644 --- a/build.xml +++ b/build.xml @@ -5,7 +5,7 @@ - + diff --git a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java index 4f211c3..042167f 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/MoneyDS.java @@ -16,6 +16,8 @@ package de.sockenklaus.XmlStats.Datasource; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Set; import com.iConomy.iConomy; import com.iConomy.system.Account; @@ -69,4 +71,18 @@ public class MoneyDS extends Datasource { return result; } + + /** + * @param list + * @return + */ + public int getSum(List list) { + int result = 0; + + for(String playerName : list){ + result+=this.getBalance(playerName); + } + + return result; + } } diff --git a/src/de/sockenklaus/XmlStats/Webserver.java b/src/de/sockenklaus/XmlStats/Webserver.java index 4929faf..e364526 100644 --- a/src/de/sockenklaus/XmlStats/Webserver.java +++ b/src/de/sockenklaus/XmlStats/Webserver.java @@ -75,15 +75,15 @@ public class Webserver { this.server = HttpServer.create(this.address, 0); - this.server.createContext("/users_list.xml", new XmlWorkerUsers()); + this.server.createContext("/user_list.xml", new XmlWorkerUsers()); this.server.start(); } protected void startiConomy(){ if (this.isRunning() && XmlStats.checkiConomy()){ - server.createContext("/users_balances.xml", new XmlWorkerMoney()); - XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /users_balances.xml"); + server.createContext("/user_balances.xml", new XmlWorkerMoney()); + XmlStats.LogInfo("iConomy seems to be loaded correctly. Enabling /user_balances.xml"); } else { XmlStats.LogWarn("iConomy or webserver not loaded correctly. Disabling /users_balances.xml"); diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java index c975cd1..da1ad57 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java @@ -179,27 +179,26 @@ public abstract class XmlWorker implements HttpHandler { String param[] = pair.split("[=]"); String key = null; - String value = null; + String[] valueArr = null; if(param.length > 0){ key = URLDecoder.decode(param[0].toLowerCase(), System.getProperty("file.encoding")); + valueArr = new String[1]; + valueArr[0] = ""; } if(param.length > 1){ - value = URLDecoder.decode(param[1].toLowerCase(), System.getProperty("file.encoding")); + valueArr = URLDecoder.decode(param[1].toLowerCase(), System.getProperty("file.encoding")).split(","); } - if (result.containsKey(key)){ - List values = result.get(key); - - values.add(value); + List values = new ArrayList(); + for (String value : valueArr){ + if (!values.contains(value)){ + values.add(value); + } } - else { - List values = new ArrayList(); - values.add(value); - result.put(key, values); - } + result.put(key, values); } } return result; diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java index e0569d0..9442a82 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java @@ -14,12 +14,15 @@ */ package de.sockenklaus.XmlStats.XmlWorkers; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.w3c.dom.Element; +import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.Datasource.MoneyDS; // TODO: Auto-generated Javadoc @@ -42,23 +45,70 @@ public class XmlWorkerMoney extends XmlWorker { HashMap balances = moneyDS.getBalances(); - Element elem_users = this.doc.createElement("users"); + if (parameters.containsKey("user")){ + Element elem_users = this.doc.createElement("users"); + if(parameters.get("user").contains("*")){ + + for (String playerName : balances.keySet()){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", playerName)); + elem_user.appendChild(getTextElem("balance", String.valueOf(balances.get(playerName)))); - /* - * Hier wird das XML aufgebaut - */ - - for (String playerName : balances.keySet()){ - Element elem_user = this.doc.createElement("user"); - elem_user.appendChild(getTextElem("name", playerName)); - elem_user.appendChild(getTextElem("balance", String.valueOf(balances.get(playerName)))); - - elem_users.appendChild(elem_user); + elem_users.appendChild(elem_user); + } + + } + else { + for(String playerName : parameters.get("user")){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", playerName)); + elem_user.appendChild(getTextElem("balance", String.valueOf(balances.get(playerName)))); + + elem_users.appendChild(elem_user); + } + } + return elem_users; } - - /* - * Hier endet der XML-Aufbau - */ - return elem_users; + + else if (parameters.containsKey("sum")){ + XmlStats.LogDebug("Entering the sum part"); + Element elem_sum = this.doc.createElement("sum"); + Element elem_users = this.doc.createElement("users"); + elem_users.setAttribute("type", "name"); + elem_sum.appendChild(elem_users); + + + if(parameters.get("sum").contains("*")){ + List userList = new ArrayList(); + for(String userName : balances.keySet()){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", userName)); + elem_users.appendChild(elem_user); + XmlStats.LogDebug("Got "+userName); + userList.add(userName); + } + + int sum = moneyDS.getSum(userList); + + elem_sum.appendChild(getTextElem("balance", String.valueOf(sum))); + } + + else { + + for(String userName : parameters.get("sum")){ + Element elem_user = this.doc.createElement("user"); + elem_user.appendChild(getTextElem("name", userName)); + elem_users.appendChild(elem_user); + } + + int sum = moneyDS.getSum(parameters.get("sum")); + + elem_sum.appendChild(getTextElem("balance", String.valueOf(sum))); + } + + + return elem_sum; + } + return this.doc.createElement("users"); } }