package com.bluedragontavern; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import java.util.ArrayList; import java.util.List; import java.util.Iterator; import java.util.Collections; import java.io.File; import java.io.FileWriter; import com.bluedragontavern.Constants; import com.bluedragontavern.SortElementsByName; /** * Sort the Artists, Albums, and Songs in the dat.xml file */ public class SortXML { public static void main(String[] args) { try { //Locate the dat.xml file File datFile = new File(Constants.CGIBIN + File.separator + Constants.DATFILE); //Build the JDOM SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(datFile); Element rootElem = doc.getRootElement(); //Sort the Elements sortElements(rootElem); //Store the old file to a backup File datXML = new File(Constants.CGIBIN + File.separator + Constants.DATFILE); File bckDatXML = new File(Constants.CGIBIN + File.separator + Constants.DATFILE + "_bck"); bckDatXML.delete(); datXML.renameTo(bckDatXML); //Write out the new file File newDatXML = new File(Constants.CGIBIN + File.separator + Constants.DATFILE); FileWriter fw = new FileWriter(datXML); XMLOutputter xmlOutputter = new XMLOutputter(" ", true); xmlOutputter.setTextNormalize(true); xmlOutputter.output(doc, fw); fw.flush(); fw.close(); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(System.out); System.exit(1); } } /** * Recursively sort the Elements */ private static void sortElements(Element element) { //Get the children List elements = element.getChildren(); //Sort the children List sortableElements = new ArrayList(); Iterator iter = elements.iterator(); while(iter.hasNext()) sortableElements.add(new SortElementsByName((Element)iter.next())); Collections.sort(sortableElements); elements.clear(); iter = sortableElements.iterator(); while(iter.hasNext()) elements.add(((SortElementsByName)iter.next()).getElement()); //Sort the grandchildren iter = elements.iterator(); while(iter.hasNext()) sortElements((Element)iter.next()); } }