package ttt.organization.managers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import javax.swing.JOptionPane;
import nu.xom.Element;
import nu.xom.Elements;
import ttt.TTT_Constants;
import ttt.io.XMLSerializeable;
import ttt.organization.TTT_Scene;
public class TTT_SceneManager implements XMLSerializeable {
private final HashMap<String, TTT_Scene> scenes;
private final List<TTT_Scene> sceneList;
private TTT_Scene currentSceneRef;
public TTT_SceneManager() {
scenes = new HashMap<String, TTT_Scene>();
sceneList = new ArrayList<TTT_Scene>();
}
private TTT_Scene getScene(final String id) {
return scenes.get(id);
}
public List<TTT_Scene> getSceneList() {
return sceneList;
}
public void addScene(final TTT_Scene scene) {
String key = scene.variables.loadString(TTT_Constants.ID_KEY);
while (scenes.containsKey(key)) {
key += "+";
}
scene.variables.store(TTT_Constants.ID_KEY, key);
scenes.put(scene.variables.loadString(TTT_Constants.ID_KEY), scene);
if (!sceneList.contains(scene)) {
sceneList.add(scene);
}
}
@Override
public Element writeToElement() {
Element e = new Element(getElementName());
for (Entry<String, TTT_Scene> scene : scenes.entrySet()) {
e.appendChild(scene.getValue().writeToElement());
}
return e;
}
@Override
public void assembleFromElement(Element entity) {
scenes.clear();
sceneList.clear();
Elements children = entity.getChildElements();
for (int i = 0; i < children.size(); i++) {
Element scene = children.get(i);
TTT_Scene ts = new TTT_Scene();
ts.assembleFromElement(scene);
if (!ts.variables.has(TTT_Constants.ID_KEY)) {
ts.variables.store(TTT_Constants.ID_KEY, JOptionPane
.showInputDialog("Please supply a scene name:"));
}
addScene(ts);
}
}
@Override
public String getElementName() {
return "scenes";
}
public TTT_Scene getCurrentScene() {
return currentSceneRef;
}
public void moveToBlankScene() {
currentSceneRef = new TTT_Scene();
}
public void moveToScene(final String id) {
TTT_Scene s = getScene(id);
if (s != null) {
currentSceneRef = s;
} else {
moveToBlankScene();
}
}
public String toString() {
return getElementName();
}
}