/*
* Copyright (C) 2010 Medo <smaxein@googlemail.com>
*
* This file is part of GmkSplitter.
* GmkSplitter is free software and comes with ABSOLUTELY NO WARRANTY.
* See LICENSE for details.
*/
package com.ganggarrison.gmdec.xml;
import org.lateralgm.resources.GmObject;
import org.lateralgm.resources.ResourceReference;
import org.lateralgm.resources.Room;
import org.lateralgm.resources.sub.Instance;
import org.lateralgm.resources.sub.Instance.PInstance;
import org.lateralgm.util.PropertyMap;
import com.ganggarrison.easyxml.XmlReader;
import com.ganggarrison.easyxml.XmlWriter;
import com.ganggarrison.gmdec.DeferredPropertyReferenceCreator;
import com.ganggarrison.gmdec.DeferredReferenceCreator;
import com.ganggarrison.gmdec.DeferredReferenceCreatorNotifier;
import com.ganggarrison.gmdec.GmkSplitter;
import com.ganggarrison.gmdec.Tools;
import com.ganggarrison.gmdec.GmkSplitter.IdPreservation;
public class InstanceXmlFormat extends XmlFormat<Instance> {
private Room room;
public InstanceXmlFormat(Room room) {
this.room = room;
}
@Override
public void write(Instance instance, XmlWriter writer) {
writer.startElement("instance");
{
PropertyMap<PInstance> properties = instance.properties;
if (GmkSplitter.preserveIds == IdPreservation.ALL) {
writer.putAttribute("id", properties.get(PInstance.ID));
}
ResourceReference<GmObject> object = properties.get(PInstance.OBJECT);
writeResourceRef(writer, "object", object);
writePoint(writer, "position", instance.getPosition());
String creationCode = instance.getCreationCode();
if (GmkSplitter.convertLineEndings) {
creationCode = Tools.toLf(creationCode);
}
writer.putElement("creationCode", creationCode);
writer.putElement("locked", instance.isLocked());
}
writer.endElement();
}
@Override
public Instance read(XmlReader reader, DeferredReferenceCreatorNotifier notifier) {
Instance instance = new Instance(room);
reader.enterElement("instance");
{
PropertyMap<PInstance> properties = instance.properties;
if (GmkSplitter.preserveIds == IdPreservation.ALL && reader.hasAttribute("id")) {
properties.put(PInstance.ID, reader.getIntAttribute("id"));
}
String objRef = readResourceRef(reader, "object");
DeferredReferenceCreator rc = new DeferredPropertyReferenceCreator<PInstance>(
properties, PInstance.OBJECT, GmObject.class, objRef);
notifier.addDeferredReferenceCreator(rc);
instance.setPosition(readPoint(reader, "position"));
String creationCode = reader.getStringElement("creationCode");
if (GmkSplitter.convertLineEndings) {
creationCode = Tools.toCrlf(creationCode);
}
instance.setCreationCode(creationCode);
instance.setLocked(reader.getBoolElement("locked"));
}
reader.leaveElement();
return instance;
}
}