From b325e0f2ddc477cf89da1d928f1c1f1d627f6372 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Mon, 5 Sep 2011 01:35:21 +0200 Subject: [PATCH] Started to unify the xml structure to match the common xml semantics and tried to simplify the xml worker classes. --- .../XmlStats/Datasource/AchievementsDS.java | 10 -- src/de/sockenklaus/XmlStats/XmlStats.java | 3 +- .../XmlStats/XmlStatsServerListener.java | 4 - .../XmlStats/XmlWorkers/XmlWorker.java | 24 +++- .../XmlWorkers/XmlWorkerAchievements.java | 71 +++++----- .../XmlStats/XmlWorkers/XmlWorkerMoney.java | 51 ++++--- .../XmlStats/XmlWorkers/XmlWorkerUsers.java | 57 ++++---- .../XmlWorkers/XmlWorkerUserstats.java | 130 +++++++++--------- 8 files changed, 171 insertions(+), 179 deletions(-) diff --git a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java index 03dc44f..73eefa9 100644 --- a/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java +++ b/src/de/sockenklaus/XmlStats/Datasource/AchievementsDS.java @@ -3,13 +3,10 @@ */ package de.sockenklaus.XmlStats.Datasource; -import java.io.File; import java.util.HashMap; -import com.nidefawl.Achievements.AchPropertiesFile; import com.nidefawl.Achievements.AchievementListData; import com.nidefawl.Achievements.Achievements; -import com.nidefawl.Achievements.AchievementsLoader; import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.XmlStatsRegistry; @@ -28,12 +25,5 @@ public class AchievementsDS extends Datasource { return ach.achievementList; } else return new HashMap(); - //return AchievementsLoader.LoadAchievementsList(ach, ach.getDataFolder().getPath(), getListLocation(ach)); } - - /*private String getListLocation(Achievements ach){ - AchPropertiesFile props = new AchPropertiesFile(new File(ach.getDataFolder(), "achievements.properties")); - - return props.getString("achievements-list", "achievements.txt", ""); - }*/ } diff --git a/src/de/sockenklaus/XmlStats/XmlStats.java b/src/de/sockenklaus/XmlStats/XmlStats.java index 09837c6..a2af82b 100644 --- a/src/de/sockenklaus/XmlStats/XmlStats.java +++ b/src/de/sockenklaus/XmlStats/XmlStats.java @@ -77,7 +77,7 @@ public class XmlStats extends JavaPlugin { LogDebug("options.webserver-enabled: "+settingsTemp.getBoolean("options.webserver-enabled")); LogDebug("options.webserver-port: "+settingsTemp.getInt("options.webserver-port")); LogDebug("options.verbose-enabled: "+settingsTemp.getBoolean("options.verbose-enabled")); - + if (settingsTemp.getBoolean("options.webserver-enabled")){ try { XmlStatsRegistry.put("webserver", new Webserver()); @@ -85,7 +85,6 @@ public class XmlStats extends JavaPlugin { this.enabled = true; LogInfo("XmStats "+this.version+" enabled"); this.hookPlugins(); - this.registerEvents(); } catch (Exception ex){ diff --git a/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java index b552ff0..504a8b3 100644 --- a/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java +++ b/src/de/sockenklaus/XmlStats/XmlStatsServerListener.java @@ -6,10 +6,6 @@ package de.sockenklaus.XmlStats; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.ServerListener; -import org.bukkit.plugin.Plugin; - -import com.iConomy.iConomy; -import com.nidefawl.Stats.Stats; /** * @author socrates diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java index f532fed..b9de8f8 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorker.java @@ -16,6 +16,7 @@ package de.sockenklaus.XmlStats.XmlWorkers; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URLDecoder; @@ -25,6 +26,15 @@ import java.util.List; import java.util.Map; import java.util.zip.GZIPOutputStream; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; + import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpContext; import com.sun.net.httpserver.HttpHandler; @@ -37,7 +47,15 @@ import de.sockenklaus.XmlStats.XmlStats; * The Class XmlWorker. */ public abstract class XmlWorker implements HttpHandler { - + protected DocumentBuilderFactory factory; + protected DocumentBuilder builder; + protected Document doc; + protected DOMSource source; + protected StringWriter writer; + protected StreamResult result; + protected TransformerFactory tf; + protected Transformer transformer; + /* (non-Javadoc) * @see com.sun.net.httpserver.HttpHandler#handle(com.sun.net.httpserver.HttpExchange) */ @@ -155,12 +173,12 @@ public abstract class XmlWorker implements HttpHandler { try { XmlStats.LogDebug("OK... let's try gzip compression..."); - XmlStats.LogDebug("Actual size of the xml file: "+input.length+"Bytes"); + XmlStats.LogDebug("Actual size of the xml file: "+input.length+" B"); GZIPOutputStream gzip = new GZIPOutputStream(out); gzip.write(input); gzip.close(); output = out.toByteArray(); - XmlStats.LogDebug("Compressed size of the xml file: "+output.length+"Bytes"); + XmlStats.LogDebug("Compressed size of the xml file: "+output.length+" B"); } catch(IOException e){ XmlStats.LogError("GZIP-Compression failed! Returning empty byte[]"); diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java index 0df3df6..a941571 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerAchievements.java @@ -9,14 +9,11 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.Document; import org.w3c.dom.Element; import com.nidefawl.Achievements.AchievementListData; @@ -41,73 +38,67 @@ public class XmlWorkerAchievements extends XmlWorker { */ @Override String getXML(Map> parameters) { + try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - + 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 achList = achDS.getAchievementsList(); - - Element root = doc.createElement("achievements"); - doc.appendChild(root); - + + Element root = this.doc.createElement("xmlstats"); + Element elem_achs = this.doc.createElement("achievements"); + this.doc.appendChild(root); + root.appendChild(elem_achs); + /* * Hier wird das XML aufgebaut */ for(String achName : achList.keySet()){ - root.appendChild(getAchievement(doc, achList.get(achName))); + elem_achs.appendChild(getAchievement(achList.get(achName))); } - + /* * Hier endet der XML-Aufbau */ - - transformer.transform(source, result); - return writer.toString(); - } + 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 ""; } - return ""; + } - private Element getAchievement(Document doc, AchievementListData data){ - Element elem_ach = doc.createElement("achievement"); - elem_ach.setAttribute("enabled", String.valueOf(data.isEnabled())); - - Element elem_name = doc.createElement("name"); - elem_name.setTextContent(data.getName()); - elem_ach.appendChild(elem_name); - - Element elem_description = doc.createElement("description"); - elem_description.setTextContent(data.getDescription()); - elem_ach.appendChild(elem_description); - - Element elem_category = doc.createElement("category"); + private Element getAchievement(AchievementListData data){ + Element elem_ach = this.doc.createElement("achievement"); + + Element elem_category = this.doc.createElement("category"); elem_category.setTextContent(data.getCategory()); elem_ach.appendChild(elem_category); - Element elem_stat = doc.createElement("stat"); + Element elem_stat = this.doc.createElement("stat"); elem_stat.setTextContent(data.getKey()); elem_ach.appendChild(elem_stat); - Element elem_value = doc.createElement("value"); + Element elem_value = this.doc.createElement("value"); elem_value.setTextContent(String.valueOf(data.getValue())); elem_ach.appendChild(elem_value); - Element elem_maxawards = doc.createElement("maxawards"); + Element elem_maxawards = this.doc.createElement("maxawards"); elem_maxawards.setTextContent(String.valueOf(data.getMaxawards())); elem_ach.appendChild(elem_maxawards); - Element elem_commands = doc.createElement("commands"); + Element elem_commands = this.doc.createElement("commands"); elem_commands.setTextContent(data.commands.toString()); elem_ach.appendChild(elem_commands); diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java index 3a03c51..2d7bffd 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerMoney.java @@ -20,14 +20,11 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.Document; import org.w3c.dom.Element; import com.nidefawl.Stats.Stats; @@ -51,46 +48,48 @@ public class XmlWorkerMoney extends XmlWorker { */ @Override public String getXML(Map> parameters) { + try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - + 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 balances = moneyDS.getBalances(); - - Element root = doc.createElement("money"); - doc.appendChild(root); - + + 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 = doc.createElement("player"); + Element elem_player = this.doc.createElement("player"); elem_player.setAttribute("name", playerName); elem_player.setAttribute("balance", String.valueOf(balances.get(playerName))); - - root.appendChild(elem_player); + + elem_money.appendChild(elem_player); } - + /* * Hier endet der XML-Aufbau */ - - transformer.transform(source, result); - return writer.toString(); + 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 ""; } - - return ""; } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java index 0853cc0..c3d67c0 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUsers.java @@ -20,15 +20,12 @@ import java.util.Map; import java.util.logging.Level; import java.util.List; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.bukkit.entity.Player; -import org.w3c.dom.Document; import org.w3c.dom.Element; import com.nidefawl.Stats.Stats; @@ -51,27 +48,29 @@ public class XmlWorkerUsers extends XmlWorker { UsersDS users = new UsersDS(); try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - - Element root = doc.createElement("players"); - root.setAttribute("count", String.valueOf(users.getAllPlayers().size())); - doc.appendChild(root); - + 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 = 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); + /* * Get list online player names */ XmlStats pluginTemp= (XmlStats)XmlStatsRegistry.get("xmlstats"); - + Player[] onlinePlayers = pluginTemp.getServer().getOnlinePlayers(); List onlinePlayerNames = new ArrayList(); - + if (onlinePlayers != null){ for (int i = 0; i < onlinePlayers.length; i++){ onlinePlayerNames.add(onlinePlayers[i].getName()); @@ -80,24 +79,23 @@ public class XmlWorkerUsers extends XmlWorker { /* * Got list of online player names */ - + /* * Hier wird das XML aufgebaut */ - + for(String playerName : users.getAllPlayers()){ - - Element elem_player = doc.createElement("player"); - elem_player.setAttribute("name", playerName); - + + Element elem_player = this.doc.createElement("player"); + elem_player.setTextContent(playerName); + elem_player.setAttribute("status", onlinePlayerNames.contains(playerName) ? "online":"offline"); - - root.appendChild(elem_player); + + elem_users.appendChild(elem_player); } /* * Hier endet der XML-Aufbau */ - transformer.transform(source, result); return writer.toString(); } @@ -106,9 +104,8 @@ public class XmlWorkerUsers extends XmlWorker { { Stats.log.log(Level.SEVERE, "Something went terribly wrong!"); Stats.log.log(Level.SEVERE, e.getMessage()); - } - - return ""; + return ""; + } } } diff --git a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java index 0d8015d..6316f8f 100644 --- a/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java +++ b/src/de/sockenklaus/XmlStats/XmlWorkers/XmlWorkerUserstats.java @@ -14,26 +14,20 @@ */ 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; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.Document; import org.w3c.dom.Element; import com.nidefawl.Stats.Stats; -import com.nidefawl.Stats.ItemResolver.hModItemResolver; import com.nidefawl.Stats.datasource.Category; import com.nidefawl.Stats.datasource.PlayerStat; @@ -47,16 +41,12 @@ public class XmlWorkerUserstats extends XmlWorker { /** The stats ds. */ private UserstatsDS statsDS; - private hModItemResolver itemResolver; - private String[] resolveCats; /** * Instantiates a new xml worker userstats. */ public XmlWorkerUserstats(){ this.statsDS = new UserstatsDS(); - itemResolver = new hModItemResolver(new File(statsDS.getDataFolder(),"items.txt")); - resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"}; } /* (non-Javadoc) @@ -64,36 +54,38 @@ public class XmlWorkerUserstats extends XmlWorker { */ public String getXML(Map> parameters) { try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.newDocument(); - DOMSource source = new DOMSource(doc); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - - Element root = doc.createElement("stats"); - doc.appendChild(root); - + 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 - - root.appendChild(getAddedUpStatsElement(doc)); - + elem_userstats.setAttribute("type", "sum"); + elem_userstats.appendChild(getAddedUpStatsElement()); + } else { // Generate the XML for the given user(s) for(String playerName : statsDS.fetchAllPlayers()){ if (parameters.containsKey("player") && parameters.get("player").contains(playerName.toLowerCase())){ - root.appendChild(getPlayerElement(playerName, doc)); + elem_userstats.appendChild(getPlayerElement(playerName)); } } } - + /* * Hier endet der XML-Aufbau */ @@ -101,77 +93,87 @@ public class XmlWorkerUserstats extends XmlWorker { 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 ""; } - - return ""; } /** * Build a XML subtree for the given player. * * @param playerName the player name - * @param doc the doc + * @paramthis.doc thethis.doc * @return Returns a XML subtree for the given playerName. */ - private Element getPlayerElement(String playerName, Document doc){ + private Element getPlayerElement(String playerName){ PlayerStat player_stats = statsDS.getPlayerStat(playerName); - Element elem_player = doc.createElement("player"); - elem_player.setAttribute("name", playerName); + Element elem_player = this.doc.createElement("player"); + Element elem_cats = this.doc.createElement("categories"); + + elem_player.appendChild(getTextElem("name", playerName)); + elem_player.appendChild(elem_cats); for(String catName : player_stats.getCats()){ Category cat = player_stats.get(catName); - Element elem_cat = doc.createElement("category"); - elem_cat.setAttribute("name", catName); - + Element elem_cat = this.doc.createElement("category"); + Element elem_items = this.doc.createElement("items"); + + elem_cat.appendChild(getTextElem("name", catName)); + elem_cat.appendChild(elem_items); + elem_cats.appendChild(elem_cat); + for(String valName : cat.stats.keySet()){ int value = cat.get(valName); - Element elem_value = doc.createElement("stat"); - - elem_value.setAttribute("name", valName); - - if (Arrays.asList(resolveCats).contains(catName)){ - elem_value.setAttribute("id", String.valueOf(itemResolver.getItem(valName))); - } - elem_value.setAttribute("value", String.valueOf(value)); - - elem_cat.appendChild(elem_value); + 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); } - - - elem_player.appendChild(elem_cat); } return elem_player; } - private Element getAddedUpStatsElement(Document doc){ + private Element getAddedUpStatsElement(){ HashMap> addedStats = statsDS.getAddedStats(); + Element elem_player = this.doc.createElement("player"); + Element elem_cats = this.doc.createElement("categories"); - Element elem_player = doc.createElement("player"); - elem_player.setAttribute("name", "*"); + elem_player.appendChild(elem_cats); for (String catName : addedStats.keySet()){ - Element elem_cat = doc.createElement("category"); - elem_cat.setAttribute("name", catName); + Element elem_cat = this.doc.createElement("category"); + Element elem_items = this.doc.createElement("items"); + + elem_cat.appendChild(getTextElem("name", catName)); + elem_cat.appendChild(elem_items); + elem_cats.appendChild(elem_cat); 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))); + Element elem_item = this.doc.createElement("item"); - elem_cat.appendChild(elem_stat); + elem_item.appendChild(getTextElem("name", entryName)); + elem_item.appendChild(getTextElem("value", String.valueOf(addedStats.get(catName).get(entryName)))); + + elem_items.appendChild(elem_item); } - elem_player.appendChild(elem_cat); + elem_cat.appendChild(elem_items); } return elem_player; } + + private Element getTextElem(String elemName, String text){ + Element result = this.doc.createElement(elemName); + result.setTextContent(text); + return result; + } + + private Element getItemElem(String key, String value){ + return null; + } }