Work on object based XML generation...

This commit is contained in:
Pascal Koenig
2011-10-05 14:04:38 +02:00
parent 4ac770e4e9
commit a022c05ee6
8 changed files with 149 additions and 65 deletions

View File

@@ -14,23 +14,24 @@ import com.nidefawl.Achievements.AchievementListData;
*/ */
public class Achievement extends Elem { public class Achievement extends Elem {
private String name; private Elem name;
private String description; private Elem description;
private String category; private Elem category;
private String stat; private Elem stat;
private Integer value; private Elem value;
private Integer maxawards; private Elem maxawards;
private String commands; private Elem commands;
private Boolean enabled; private Boolean enabled;
public Achievement(AchievementListData ach){ public Achievement(AchievementListData ach){
this.name = ach.getName();
this.description = ach.getDescription(); this.name = new Elem("name", ach.getName());
this.category = ach.getCategory(); this.description = new Elem("description", ach.getDescription());
this.stat = ach.getKey(); this.category = new Elem("category", ach.getCategory());
this.value = ach.getValue(); this.stat = new Elem("stat", ach.getKey());
this.maxawards = ach.getMaxawards(); this.value = new Elem("value", ach.getValue());
this.commands = ach.commands.toString(); this.maxawards = new Elem("maxawards", ach.getMaxawards());
this.commands = new Elem("commands", ach.commands.toString());
this.enabled = ach.isEnabled(); this.enabled = ach.isEnabled();
} }
@@ -42,13 +43,14 @@ public class Achievement extends Elem {
Element result = doc.createElement("achievement"); Element result = doc.createElement("achievement");
result.setAttribute("enabled", this.enabled ?"true":"false"); result.setAttribute("enabled", this.enabled ?"true":"false");
result.appendChild(this.addXmlChild("name", this.name, doc));
result.appendChild(this.addXmlChild("description", this.description, doc)); result.appendChild(this.name.getXml(doc));
result.appendChild(this.addXmlChild("category", this.category, doc)); result.appendChild(this.description.getXml(doc));
result.appendChild(this.addXmlChild("stat", this.stat, doc)); result.appendChild(this.category.getXml(doc));
result.appendChild(this.addXmlChild("value", this.value, doc)); result.appendChild(this.stat.getXml(doc));
result.appendChild(this.addXmlChild("maxawards", this.maxawards, doc)); result.appendChild(this.value.getXml(doc));
result.appendChild(this.addXmlChild("commands", this.commands, doc)); result.appendChild(this.maxawards.getXml(doc));
result.appendChild(this.commands.getXml(doc));
return result; return result;
} }

View File

@@ -3,21 +3,12 @@
*/ */
package de.sockenklaus.XmlStats.Objects; package de.sockenklaus.XmlStats.Objects;
import java.util.ArrayList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/** /**
* @author socrates * @author socrates
* *
*/ */
public abstract class Array { public abstract class Array extends Elem{
protected ArrayList<Elem> childNodes;
protected Array(){
this.childNodes = new ArrayList<Elem>();
}
public int getCountInt(){ public int getCountInt(){
return this.childNodes.size(); return this.childNodes.size();
} }
@@ -25,10 +16,4 @@ public abstract class Array {
public String getCountStr(){ public String getCountStr(){
return String.valueOf(this.childNodes.size()); return String.valueOf(this.childNodes.size());
} }
/**
* @param doc
* @return
*/
public abstract Element getXml(Document doc);
} }

View File

@@ -3,6 +3,8 @@
*/ */
package de.sockenklaus.XmlStats.Objects; package de.sockenklaus.XmlStats.Objects;
import java.util.ArrayList;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@@ -11,7 +13,30 @@ import org.w3c.dom.Node;
* @author socrates * @author socrates
* *
*/ */
public abstract class Elem { public class Elem {
protected String textContent;
protected String elemName;
protected ArrayList<Elem> childNodes;
protected Elem(){
this.childNodes = new ArrayList<Elem>();
}
protected Elem(String elemName){
this();
this.elemName = elemName;
}
protected Elem(String elemName, String textContent){
this(elemName);
this.textContent = textContent;
}
protected Elem(String elemName, Integer intContent){
this(elemName);
this.textContent = intContent.toString();
}
protected Element addXmlChild(String elemName, String text, Document doc){ protected Element addXmlChild(String elemName, String text, Document doc){
Element result = doc.createElement(elemName); Element result = doc.createElement(elemName);
result.setTextContent(text); result.setTextContent(text);
@@ -28,5 +53,29 @@ public abstract class Elem {
* @param doc * @param doc
* @return * @return
*/ */
public abstract Node getXml(Document doc); public Element getXml(Document doc){
Element result = doc.createElement(this.elemName);
if(!this.textContent.isEmpty()) result.setTextContent(this.textContent);
for (Elem child : this.childNodes){
result.appendChild(child.getXml(doc));
}
return result;
}
public void setTextContent(String content){
this.textContent = content;
}
public void addChild(Elem child){
this.childNodes.add(child);
}
public Elem getFirstChild(){
if (this.childNodes.size() > 0) return this.childNodes.get(0);
else throw new IndexOutOfBoundsException();
}
} }

View File

@@ -0,0 +1,25 @@
/**
*
*/
package de.sockenklaus.XmlStats.Objects;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* @author socrates
*
*/
public class Item extends Elem {
/* (non-Javadoc)
* @see de.sockenklaus.XmlStats.Objects.Elem#getXml(org.w3c.dom.Document)
*/
@Override
public Element getXml(Document doc) {
// TODO Auto-generated method stub
return null;
}
}

View File

@@ -0,0 +1,31 @@
/**
*
*/
package de.sockenklaus.XmlStats.Objects;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* @author socrates
*
*/
public class User extends Elem {
private String name;
public User(String name){
this.name = name;
}
/* (non-Javadoc)
* @see de.sockenklaus.XmlStats.Objects.Elem#getXml(org.w3c.dom.Document)
*/
@Override
public Element getXml(Document doc) {
// TODO Auto-generated method stub
return null;
}
}

View File

@@ -6,6 +6,8 @@ package de.sockenklaus.XmlStats.Objects;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import de.sockenklaus.XmlStats.XmlStats;
/** /**
* @author socrates * @author socrates
* *
@@ -18,6 +20,7 @@ public class UserAchievement extends Achievement {
public UserAchievement(String paName, com.nidefawl.Achievements.Achievement achievement){ public UserAchievement(String paName, com.nidefawl.Achievements.Achievement achievement){
this.name = paName; this.name = paName;
this.count = achievement.getCount(); this.count = achievement.getCount();
XmlStats.LogDebug("UserAchievement-const castet.");
} }
public Element getXml(Document doc){ public Element getXml(Document doc){

View File

@@ -8,6 +8,7 @@ import org.w3c.dom.Element;
import com.nidefawl.Achievements.PlayerAchievement; import com.nidefawl.Achievements.PlayerAchievement;
import de.sockenklaus.XmlStats.XmlStats;
import de.sockenklaus.XmlStats.Datasource.AchievementsDS; import de.sockenklaus.XmlStats.Datasource.AchievementsDS;
import de.sockenklaus.XmlStats.Datasource.Datasource; import de.sockenklaus.XmlStats.Datasource.Datasource;
import de.sockenklaus.XmlStats.Exceptions.XmlStatsException; import de.sockenklaus.XmlStats.Exceptions.XmlStatsException;
@@ -18,13 +19,16 @@ import de.sockenklaus.XmlStats.Exceptions.XmlStatsException;
*/ */
public class UserAchievements extends Achievements { public class UserAchievements extends Achievements {
public UserAchievements(String userName) throws XmlStatsException{ public UserAchievements(String userName) throws XmlStatsException{
super();
AchievementsDS ads = new AchievementsDS(); AchievementsDS ads = new AchievementsDS();
if (Datasource.userExists(userName)){ if (Datasource.userExists(userName)){
XmlStats.LogDebug("Achievements-const castet... user exists");
PlayerAchievement pa = ads.getUserAchievement(userName); PlayerAchievement pa = ads.getUserAchievement(userName);
for(String paName : pa.achievements.keySet()){ for(String paName : pa.achievements.keySet()){
this.childNodes.add(new UserAchievement(paName, pa.get(paName))); this.childNodes.add(new UserAchievement(paName, pa.get(paName)));
XmlStats.LogDebug("Added Achievement.");
} }
} }
else throw new XmlStatsException("The given username is not valid."); else throw new XmlStatsException("The given username is not valid.");
@@ -35,7 +39,7 @@ public class UserAchievements extends Achievements {
result.setAttribute("count", this.getCountStr()); result.setAttribute("count", this.getCountStr());
for(Elem ach : this.childNodes){ for(Elem ach : this.childNodes){
result.appendChild(((UserAchievement)ach).getXml(doc)); result.appendChild(ach.getXml(doc));
} }
return result; return result;

View File

@@ -33,27 +33,6 @@ public class UserAchievements extends XmlWorker {
throw new XmlStatsException("No data provided with this query!"); throw new XmlStatsException("No data provided with this query!");
} }
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");
elem_achs.setAttribute("count", String.valueOf(pa.achievements.size()));
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) /* (non-Javadoc)
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map)
*/ */
@@ -66,13 +45,19 @@ public class UserAchievements extends XmlWorker {
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getUserXml(java.util.List, java.util.Map) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getUserXml(java.util.List, java.util.Map)
*/ */
@Override @Override
protected Element getUserXml(List<String> userList, Map<String, List<String>> parameters) { protected Element getUserXml(List<String> userList, Map<String, List<String>> parameters) throws XmlStatsException{
Element elem_users = this.doc.createElement("users"); Element elem_users = this.doc.createElement("users");
elem_users.setAttribute("count", String.valueOf(userList.size())); elem_users.setAttribute("count", String.valueOf(userList.size()));
for(String userName : userList){ for(String userName : userList){
Element elem_player = this.doc.createElement("user");
elem_player.appendChild(getTextElem("name", userName));
elem_users.appendChild(this.getUserAchievement(userName)); de.sockenklaus.XmlStats.Objects.UserAchievements ua = new de.sockenklaus.XmlStats.Objects.UserAchievements(userName);
elem_player.appendChild(ua.getXml(this.doc));
elem_users.appendChild(elem_player);
} }
return elem_users; return elem_users;