From a022c05ee6d8bb1448611bd203bbcfc141d157a1 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Wed, 5 Oct 2011 14:04:38 +0200 Subject: [PATCH] Work on object based XML generation... --- .../XmlStats/Objects/Achievement.java | 46 ++++++++-------- .../sockenklaus/XmlStats/Objects/Array.java | 17 +----- src/de/sockenklaus/XmlStats/Objects/Elem.java | 53 ++++++++++++++++++- src/de/sockenklaus/XmlStats/Objects/Item.java | 25 +++++++++ src/de/sockenklaus/XmlStats/Objects/User.java | 31 +++++++++++ .../XmlStats/Objects/UserAchievement.java | 3 ++ .../XmlStats/Objects/UserAchievements.java | 6 ++- .../XmlStats/XmlWorkers/UserAchievements.java | 33 ++++-------- 8 files changed, 149 insertions(+), 65 deletions(-) create mode 100644 src/de/sockenklaus/XmlStats/Objects/Item.java create mode 100644 src/de/sockenklaus/XmlStats/Objects/User.java diff --git a/src/de/sockenklaus/XmlStats/Objects/Achievement.java b/src/de/sockenklaus/XmlStats/Objects/Achievement.java index 890fc6f..adb0fb2 100644 --- a/src/de/sockenklaus/XmlStats/Objects/Achievement.java +++ b/src/de/sockenklaus/XmlStats/Objects/Achievement.java @@ -14,23 +14,24 @@ import com.nidefawl.Achievements.AchievementListData; */ public class Achievement extends Elem { - private String name; - private String description; - private String category; - private String stat; - private Integer value; - private Integer maxawards; - private String commands; + private Elem name; + private Elem description; + private Elem category; + private Elem stat; + private Elem value; + private Elem maxawards; + private Elem commands; private Boolean enabled; public Achievement(AchievementListData ach){ - this.name = ach.getName(); - this.description = ach.getDescription(); - this.category = ach.getCategory(); - this.stat = ach.getKey(); - this.value = ach.getValue(); - this.maxawards = ach.getMaxawards(); - this.commands = ach.commands.toString(); + + this.name = new Elem("name", ach.getName()); + this.description = new Elem("description", ach.getDescription()); + this.category = new Elem("category", ach.getCategory()); + this.stat = new Elem("stat", ach.getKey()); + this.value = new Elem("value", ach.getValue()); + this.maxawards = new Elem("maxawards", ach.getMaxawards()); + this.commands = new Elem("commands", ach.commands.toString()); this.enabled = ach.isEnabled(); } @@ -42,14 +43,15 @@ public class Achievement extends Elem { Element result = doc.createElement("achievement"); 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.addXmlChild("category", this.category, doc)); - result.appendChild(this.addXmlChild("stat", this.stat, doc)); - result.appendChild(this.addXmlChild("value", this.value, doc)); - result.appendChild(this.addXmlChild("maxawards", this.maxawards, doc)); - result.appendChild(this.addXmlChild("commands", this.commands, doc)); - + + result.appendChild(this.name.getXml(doc)); + result.appendChild(this.description.getXml(doc)); + result.appendChild(this.category.getXml(doc)); + result.appendChild(this.stat.getXml(doc)); + result.appendChild(this.value.getXml(doc)); + result.appendChild(this.maxawards.getXml(doc)); + result.appendChild(this.commands.getXml(doc)); + return result; } } diff --git a/src/de/sockenklaus/XmlStats/Objects/Array.java b/src/de/sockenklaus/XmlStats/Objects/Array.java index 722ba4f..469f315 100644 --- a/src/de/sockenklaus/XmlStats/Objects/Array.java +++ b/src/de/sockenklaus/XmlStats/Objects/Array.java @@ -3,21 +3,12 @@ */ package de.sockenklaus.XmlStats.Objects; -import java.util.ArrayList; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - /** * @author socrates * */ -public abstract class Array { - protected ArrayList childNodes; +public abstract class Array extends Elem{ - protected Array(){ - this.childNodes = new ArrayList(); - } public int getCountInt(){ return this.childNodes.size(); } @@ -25,10 +16,4 @@ public abstract class Array { public String getCountStr(){ return String.valueOf(this.childNodes.size()); } - - /** - * @param doc - * @return - */ - public abstract Element getXml(Document doc); } diff --git a/src/de/sockenklaus/XmlStats/Objects/Elem.java b/src/de/sockenklaus/XmlStats/Objects/Elem.java index ceb648b..0121d35 100644 --- a/src/de/sockenklaus/XmlStats/Objects/Elem.java +++ b/src/de/sockenklaus/XmlStats/Objects/Elem.java @@ -3,6 +3,8 @@ */ package de.sockenklaus.XmlStats.Objects; +import java.util.ArrayList; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -11,7 +13,30 @@ import org.w3c.dom.Node; * @author socrates * */ -public abstract class Elem { +public class Elem { + + protected String textContent; + protected String elemName; + protected ArrayList childNodes; + + protected Elem(){ + this.childNodes = new ArrayList(); + } + + 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){ Element result = doc.createElement(elemName); result.setTextContent(text); @@ -28,5 +53,29 @@ public abstract class Elem { * @param doc * @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(); + } } diff --git a/src/de/sockenklaus/XmlStats/Objects/Item.java b/src/de/sockenklaus/XmlStats/Objects/Item.java new file mode 100644 index 0000000..cdba2c1 --- /dev/null +++ b/src/de/sockenklaus/XmlStats/Objects/Item.java @@ -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; + } + +} diff --git a/src/de/sockenklaus/XmlStats/Objects/User.java b/src/de/sockenklaus/XmlStats/Objects/User.java new file mode 100644 index 0000000..3a9d57e --- /dev/null +++ b/src/de/sockenklaus/XmlStats/Objects/User.java @@ -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; + } + +} diff --git a/src/de/sockenklaus/XmlStats/Objects/UserAchievement.java b/src/de/sockenklaus/XmlStats/Objects/UserAchievement.java index 633864f..58f482f 100644 --- a/src/de/sockenklaus/XmlStats/Objects/UserAchievement.java +++ b/src/de/sockenklaus/XmlStats/Objects/UserAchievement.java @@ -6,6 +6,8 @@ package de.sockenklaus.XmlStats.Objects; import org.w3c.dom.Document; import org.w3c.dom.Element; +import de.sockenklaus.XmlStats.XmlStats; + /** * @author socrates * @@ -18,6 +20,7 @@ public class UserAchievement extends Achievement { public UserAchievement(String paName, com.nidefawl.Achievements.Achievement achievement){ this.name = paName; this.count = achievement.getCount(); + XmlStats.LogDebug("UserAchievement-const castet."); } public Element getXml(Document doc){ diff --git a/src/de/sockenklaus/XmlStats/Objects/UserAchievements.java b/src/de/sockenklaus/XmlStats/Objects/UserAchievements.java index de9eebe..7c85b64 100644 --- a/src/de/sockenklaus/XmlStats/Objects/UserAchievements.java +++ b/src/de/sockenklaus/XmlStats/Objects/UserAchievements.java @@ -8,6 +8,7 @@ import org.w3c.dom.Element; import com.nidefawl.Achievements.PlayerAchievement; +import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.Datasource.AchievementsDS; import de.sockenklaus.XmlStats.Datasource.Datasource; import de.sockenklaus.XmlStats.Exceptions.XmlStatsException; @@ -18,13 +19,16 @@ import de.sockenklaus.XmlStats.Exceptions.XmlStatsException; */ public class UserAchievements extends Achievements { public UserAchievements(String userName) throws XmlStatsException{ + super(); AchievementsDS ads = new AchievementsDS(); if (Datasource.userExists(userName)){ + XmlStats.LogDebug("Achievements-const castet... user exists"); PlayerAchievement pa = ads.getUserAchievement(userName); for(String paName : pa.achievements.keySet()){ this.childNodes.add(new UserAchievement(paName, pa.get(paName))); + XmlStats.LogDebug("Added Achievement."); } } else throw new XmlStatsException("The given username is not valid."); @@ -35,7 +39,7 @@ public class UserAchievements extends Achievements { result.setAttribute("count", this.getCountStr()); for(Elem ach : this.childNodes){ - result.appendChild(((UserAchievement)ach).getXml(doc)); + result.appendChild(ach.getXml(doc)); } return result; diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java index 3cde291..0705c4b 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/UserAchievements.java @@ -33,27 +33,6 @@ public class UserAchievements extends XmlWorker { 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) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getSumXml(java.util.List, java.util.Map) */ @@ -66,15 +45,21 @@ public class UserAchievements extends XmlWorker { * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getUserXml(java.util.List, java.util.Map) */ @Override - protected Element getUserXml(List userList, Map> parameters) { + protected Element getUserXml(List userList, Map> parameters) throws XmlStatsException{ + Element elem_users = this.doc.createElement("users"); elem_users.setAttribute("count", String.valueOf(userList.size())); 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; }