package com.lateensoft.pathfinder.toolkit.serialize;
import com.google.common.collect.Lists;
import com.lateensoft.pathfinder.toolkit.model.character.PathfinderCharacter;
import org.dom4j.Element;
import java.io.InvalidObjectException;
import java.util.List;
/**
* @author trevsiemens
*/
public class XMLExportRootAdapter extends XMLObjectAdapter<List<PathfinderCharacter>>{
private static final int VERSION = 2;
public static final String ELEMENT_NAME = "ptx";
public static final String VERSION_ATTR = "version";
private CharacterXMLAdapter m_characterXMLAdapter = new CharacterXMLAdapter();
@Override
public String getElementName() {
return ELEMENT_NAME;
}
@Override
protected List<PathfinderCharacter> createObjectForElement(Element element) throws InvalidObjectException {
updateToCurrentVersion(element);
return getSubObjects(element, m_characterXMLAdapter);
}
@Override
protected void setElementContentForObject(Element element, List<PathfinderCharacter> characters) {
element.addAttribute(VERSION_ATTR, Integer.toString(VERSION));
for (PathfinderCharacter character : characters) {
element.add(m_characterXMLAdapter.toXML(character));
}
}
public Element toXML(PathfinderCharacter character) {
return toXML(Lists.newArrayList(character));
}
private void updateToCurrentVersion(Element element) throws InvalidObjectException {
int version = getVersion(element);
if (version == 1) {
updateFromV1ToV2(element);
}
}
private int getVersion(Element element) throws InvalidObjectException {
return getIntAttribute(element, VERSION_ATTR);
}
private void updateFromV1ToV2(Element element) throws InvalidObjectException {
List characterElements = element.elements(CharacterXMLAdapter.ELEMENT_NAME);
for (Object o : characterElements) {
Element characterElement = (Element) o;
try {
String name = getSubElementText(characterElement.element(FluffXMLAdapter.ELEMENT_NAME), "name");
addSubElementText(characterElement, "name", name);
} catch (InvalidObjectException e) {
throw e;
} catch (Exception e) {
throw new InvalidObjectException("Could not update from v1 to v2 (" + e.getMessage() + ")");
}
}
}
}