package org.archstudio.bna.logics.hints.coders;
import org.archstudio.bna.logics.hints.EncodedValue;
import org.archstudio.bna.logics.hints.IEncodedValue;
import org.archstudio.bna.logics.hints.IPropertyCoder;
import org.archstudio.bna.logics.hints.PropertyDecodeException;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
public class SWTPropertyCoder implements IPropertyCoder {
@Override
public IEncodedValue encode(IPropertyCoder masterCoder, Object value) {
if (value instanceof Point) {
Point v = (Point) value;
String type = Point.class.getName();
String data = v.x + "," + v.y;
return new EncodedValue(type, data);
}
else if (value instanceof Rectangle) {
Rectangle v = (Rectangle) value;
String type = Rectangle.class.getName();
String data = v.x + "," + v.y + "," + v.width + "," + v.height;
return new EncodedValue(type, data);
}
else if (value instanceof RGB) {
RGB v = (RGB) value;
String type = RGB.class.getName();
String data = v.red + "," + v.green + "," + v.blue;
return new EncodedValue(type, data);
}
return null;
}
@Override
public Object decode(IPropertyCoder masterCoder, IEncodedValue encodedValue) throws PropertyDecodeException {
try {
String type = encodedValue.getType();
String data = encodedValue.getData();
if (Point.class.getName().equals(type)) {
String[] d = data.split(",");
Point v = new Point(0, 0);
v.x = Integer.parseInt(d[0]);
v.y = Integer.parseInt(d[1]);
return v;
}
else if (Rectangle.class.getName().equals(type)) {
String[] d = data.split(",");
Rectangle v = new Rectangle(0, 0, 0, 0);
v.x = Integer.parseInt(d[0]);
v.y = Integer.parseInt(d[1]);
v.width = Integer.parseInt(d[2]);
v.height = Integer.parseInt(d[3]);
return v;
}
else if (RGB.class.getName().equals(type)) {
String[] d = data.split(",");
RGB v = new RGB(0, 0, 0);
v.red = Integer.parseInt(d[0]);
v.green = Integer.parseInt(d[1]);
v.blue = Integer.parseInt(d[2]);
return v;
}
}
catch (Throwable t) {
throw new PropertyDecodeException(t);
}
return null;
}
}