Changed the behavior of userstats.xml. See at README.md.

This commit is contained in:
Pascal Koenig
2011-08-28 02:12:46 +02:00
parent f4b04c66af
commit 7982841dfd
3 changed files with 83 additions and 24 deletions

View File

@@ -16,7 +16,7 @@ For a list of all known players on your server:
http://server:port/users.xml
For the stats of all known players:
For the added up stats of all known players:
http://server:port/userstats.xml
@@ -24,12 +24,8 @@ To fetch the stats of the given user:
http://server:port/userstats.xml?player=username
This will eventually be changed to a summarized view of all users stats as soon as the selection of users is implemented
The following commands are planned but not implemented yet:
to get data provided by the iConomy plugin:
http://server:port/money.xml

View File

@@ -19,6 +19,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import com.nidefawl.Stats.Stats;
import com.nidefawl.Stats.datasource.Category;
import com.nidefawl.Stats.datasource.PlayerStat;
import com.nidefawl.Stats.datasource.PlayerStatSQL;
@@ -30,13 +31,8 @@ import de.sockenklaus.XmlStats.XmlStats;
*/
public class StatsDS extends Datasource {
/** The stats plugin. */
private Stats statsPlugin;
//private Server serverRef;
/** The all player names. */
private ArrayList<String> allPlayerNames;
/** The stats. */
private HashMap<String, PlayerStat> stats = new HashMap<String, PlayerStat>();
/**
@@ -44,9 +40,8 @@ public class StatsDS extends Datasource {
*/
public StatsDS() {
this.statsPlugin = XmlStats.getStatsPlugin();
//this.serverRef = XmlStats.getServerRef();
this.allPlayerNames = fetchAllPlayers();
this.stats = fetchAllPlayerStats(allPlayerNames);
this.stats = fetchPlayerStats(allPlayerNames);
}
/**
@@ -54,9 +49,9 @@ public class StatsDS extends Datasource {
*
* @return the plugin
*/
public Stats getPlugin() {
return this.statsPlugin;
}
// public Stats getPlugin() {
// return this.statsPlugin;
//}
/**
* Gets the data folder.
@@ -73,7 +68,7 @@ public class StatsDS extends Datasource {
* @param pPlayerNames the player names
* @return the hash map
*/
private HashMap<String, PlayerStat> fetchAllPlayerStats(ArrayList<String> pPlayerNames){
private HashMap<String, PlayerStat> fetchPlayerStats(ArrayList<String> pPlayerNames){
HashMap<String, PlayerStat> result = new HashMap<String, PlayerStat>();
for (String playerName : pPlayerNames){
@@ -94,4 +89,38 @@ public class StatsDS extends Datasource {
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 catName : player.getCats()){
Category cat = player.get(catName);
for(String entryName : cat.getEntries()){
Integer entry = cat.get(entryName);
if(result.containsKey(catName)){
if(result.get(catName).containsKey(entryName)){
Integer tempInt = result.get(catName).get(entryName) + entry;
result.get(catName).put(entryName, tempInt);
}
else {
result.get(catName).put(entryName, entry);
}
}
else {
HashMap<String, Integer> tempMap = new HashMap<String, Integer>();
tempMap.put(entryName, entry);
result.put(catName, tempMap);
}
}
}
}
return result;
}
}

View File

@@ -17,6 +17,7 @@ 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;
@@ -45,13 +46,17 @@ import de.sockenklaus.XmlStats.Datasource.StatsDS;
public class XmlWorkerUserstats extends XmlWorker {
/** The stats ds. */
StatsDS statsDS = new StatsDS();
private StatsDS statsDS;
private hModItemResolver itemResolver;
private String[] resolveCats;
/**
* Instantiates a new xml worker userstats.
*/
public XmlWorkerUserstats(){
this.statsDS = new StatsDS();
itemResolver = new hModItemResolver(new File(statsDS.getDataFolder(),"items.txt"));
resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"};
}
@@ -76,12 +81,44 @@ public class XmlWorkerUserstats extends XmlWorker {
/*
* Hier wird das XML aufgebaut
*/
if (!parameters.containsKey("player")){
// Generate a summarized XML
HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats();
Element elem_player = doc.createElement("player");
elem_player.setAttribute("name", "*");
for (String catName : addedStats.keySet()){
if (!catName.equals("stats")){
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);
}
}
root.appendChild(elem_player);
}
else {
// Generate the XML for the given user(s)
for(String playerName : statsDS.getStats().keySet()){
if (!parameters.containsKey("player") || (parameters.containsKey("player") && parameters.get("player").contains(playerName))){
if (parameters.containsKey("player") && parameters.get("player").contains(playerName)){
root.appendChild(getPlayerElement(playerName, doc));
}
}
}
/*
* Hier endet der XML-Aufbau
*/
@@ -106,9 +143,6 @@ public class XmlWorkerUserstats extends XmlWorker {
* @return Returns a XML subtree for the given playerName.
*/
private Element getPlayerElement(String playerName, Document doc){
hModItemResolver itemResolver = new hModItemResolver(new File(statsDS.getDataFolder(),"items.txt"));
String[] resolveCats = {"blockdestroy", "blockcreate", "itemdrop", "itempickup"};
PlayerStat player_stats = statsDS.getStats().get(playerName);
Element elem_player = doc.createElement("player");