package eclipse.model.xml8;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import eclipse.model.data.DeviceItem;
/**
* Standard Converter for the DeviceItem
* @author Marco
*
*/
public class DeviceItemConverter implements Converter {
@SuppressWarnings("rawtypes")
public boolean canConvert(Class type) {
return type.equals(DeviceItem.class);
}
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
// N/A
}
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Integer itemId = 0;
String name = null;
String unit = null;
int bitsize = 0;
double minValue = 0;
double maxValue = 0;
double resolution = 0;
double factor = 0;
int offset = 0;
boolean signed = false;
boolean isFloat = false;
// Set the <deviceItem> attributes
itemId = Integer.parseInt(reader.getAttribute("id"));
name = reader.getAttribute("name");
while (reader.hasMoreChildren()) { // While there are some <deviceItem> properties
reader.moveDown(); // Go down to this property
// Set the <deviceItem> properties
if ("unit".equals(reader.getNodeName())) unit = reader.getValue();
else if ("bitsize".equals(reader.getNodeName())) bitsize = Integer.parseInt(reader.getValue());
else if ("minvalue".equals(reader.getNodeName())) minValue = Double.parseDouble(reader.getValue());
else if ("maxvalue".equals(reader.getNodeName())) maxValue = Double.parseDouble(reader.getValue());
else if ("resolution".equals(reader.getNodeName())) resolution = Double.parseDouble(reader.getValue());
else if ("factor".equals(reader.getNodeName())) factor = Double.parseDouble(reader.getValue());
else if ("offset".equals(reader.getNodeName())) offset = Integer.parseInt(reader.getValue());
else if ("signed".equals(reader.getNodeName())) signed = Boolean.parseBoolean(reader.getValue());
else if ("isFloat".equals(reader.getNodeName())) isFloat = Boolean.parseBoolean(reader.getValue());
reader.moveUp(); // Go back up to the <deviceItem>
}
// Return a new DeviceItem
return new DeviceItem(itemId, name, unit, bitsize, minValue, maxValue,
resolution, factor, offset,
signed,isFloat);
}
}