/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Pavel Savara
* - Initial implementation
*******************************************************************************/
package net.sf.robocode.peer;
import net.sf.robocode.serialization.*;
import robocode.control.snapshot.IDebugProperty;
import java.io.IOException;
import java.io.Serializable;
import java.nio.ByteBuffer;
/**
* @author Pavel Savara (original)
*/
public class DebugProperty implements Serializable, IXmlSerializable, IDebugProperty {
private static final long serialVersionUID = 1L;
public DebugProperty() {}
public DebugProperty(String key, String value) {
this.setKey(key);
this.setValue(value);
}
private String key;
private String value;
public void writeXml(XmlWriter writer, SerializableOptions options) throws IOException {
writer.startElement("debug"); {
writer.writeAttribute("key", getKey());
writer.writeAttribute("value", getValue());
}
writer.endElement();
}
public XmlReader.Element readXml(XmlReader reader) {
return reader.expect("debug", new XmlReader.Element() {
public IXmlSerializable read(XmlReader reader) {
final DebugProperty snapshot = new DebugProperty();
reader.expect("key", new XmlReader.Attribute() {
public void read(String value) {
snapshot.setKey(value);
}
});
reader.expect("value", new XmlReader.Attribute() {
public void read(String value) {
snapshot.setValue(value);
}
});
return snapshot;
}
});
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
static ISerializableHelper createHiddenSerializer() {
return new SerializableHelper();
}
private static class SerializableHelper implements ISerializableHelper {
public int sizeOf(RbSerializer serializer, Object object) {
DebugProperty obj = (DebugProperty) object;
return RbSerializer.SIZEOF_TYPEINFO + serializer.sizeOf(obj.key) + serializer.sizeOf(obj.value);
}
public void serialize(RbSerializer serializer, ByteBuffer buffer, Object object) {
DebugProperty obj = (DebugProperty) object;
serializer.serialize(buffer, obj.key);
serializer.serialize(buffer, obj.value);
}
public Object deserialize(RbSerializer serializer, ByteBuffer buffer) {
String key = serializer.deserializeString(buffer);
String value = serializer.deserializeString(buffer);
return new DebugProperty(key, value);
}
}
}