package hansen.playground;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.util.*;
import java.io.*;
public class DVDManager {
Element root; // Root of document
Document doc; // JDOM document
List dvds; // List of Elements
int index = -1; // index for current Element in "dvds"
public void buildDocument(String filename) {
try {
SAXBuilder builder = new SAXBuilder();
doc = builder.build(filename);
root = doc.getRootElement();
dvds = root.getChildren();
} catch (JDOMException e) {
e.printStackTrace();
}
}
public void setIndex(int i) {
index = i;
}
public int getIndex() {
return index;
}
public int getNumberOfDvds() {
return dvds.size();
}
public String getId() {
Element dvd = (Element)dvds.get(index);
return dvd.getAttributeValue("id");
}
public String getTitle() {
Element dvd = (Element)dvds.get(index);
return dvd.getChildText("title");
}
public String getLength() {
Element dvd = (Element)dvds.get(index);
return dvd.getChildText("length");
}
public ArrayList getActors() {
Element dvd = (Element)dvds.get(index);
List actors = dvd.getChildren("actor");
ArrayList a = new ArrayList(actors.size());
for (int i = 0; i < actors.size(); i++) {
Element actor = (Element)actors.get(i);
a.add(actor.getText());
}
return a;
}
public String getActorLines() {
ArrayList a = getActors();
String s = "";
for (int i = 0; i < a.size(); i ++) {
if (!s.equals("")) s += "\n";
s += a.get(i);
}
return s;
}
public void updateDVD(String id, String title, String length, ArrayList actors) {
Element dvd = (Element)dvds.get(index);
dvd.getAttribute("id").setValue(id);
dvd.getChild("title").setText(title);
dvd.getChild("length").setText(length);
dvd.removeChildren("actor");
for (int i = 0; i < actors.size(); i++) {
dvd.addContent(new Element("actor").setText((String)actors.get(i)));
}
}
public void deleteDVD() {
dvds.remove(index);
}
public void createDVD(String id, String title, String length, ArrayList actors) {
Element dvd = new Element("dvd");
dvd.setAttribute(new Attribute("id", id));
dvd.addContent(new Element("title").setText(title));
dvd.addContent(new Element("length").setText(length));
for (int i = 0; i < actors.size(); i++) {
dvd.addContent(new Element("actor").setText((String)actors.get(i)));
}
dvds.add(dvd);
}
public void sort() {
// Sort does not work with JDOM Beta 8
Collections.sort(dvds, new SortTitle());
}
public void save(String filename) {
XMLOutputter outputter = new XMLOutputter(" ",true);
try {
outputter.setTextNormalize(true);
FileWriter f = new FileWriter(new File(filename));
outputter.output(doc, f);
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
DVDManager d = new DVDManager();
d.buildDocument(args[0]);
//ArrayList actors = new ArrayList();
//actors.add("First actor");
//actors.add("Second actor");
//d.updateDVD("New title", "123", actors);
//d.createDVD("New title2", "1234", actors);
//d.deleteDVD(0);
//d.deleteDVD(0);
//d.deleteDVD(0);
//d.createDVD("New title", "123", actors);
//d.updateDVD(0, "Next title", "7913", actors);
//d.deleteDVD(0);
//d.outList();
//d.sort();
for (int i = 0; i < d.dvds.size(); i++) {
d.setIndex(i);
System.out.println(d.getTitle() + "/" + d.getLength() + "/" + d.getActors());
}
}
private void outList() {
XMLOutputter outputter = new XMLOutputter();
try {
outputter.output(doc, System.out);
} catch (IOException e) {
e.printStackTrace();
}
}
}