serialize config using the same XStream as for the project

This commit is contained in:
bancika
2020-09-18 17:48:31 +02:00
parent 5638d560a4
commit 9372858596
19 changed files with 79 additions and 26 deletions
@@ -110,9 +110,9 @@ public class DrawingManager {
private long statReportFrequencyMs = 1000 * 60;
private Counter totalStats = new Counter();
private IConfigurationManager configManager;
private IConfigurationManager<?> configManager;
public DrawingManager(MessageDispatcher<EventType> messageDispatcher, IConfigurationManager configManager) {
public DrawingManager(MessageDispatcher<EventType> messageDispatcher, IConfigurationManager<?> configManager) {
super();
this.messageDispatcher = messageDispatcher;
this.configManager = configManager;
@@ -191,7 +191,7 @@ public class Presenter implements IPlugInPort {
private Rectangle selectionRect;
private final IView view;
private IConfigurationManager configManager;
private IConfigurationManager<?> configManager;
private MessageDispatcher<EventType> messageDispatcher;
@@ -209,7 +209,7 @@ public class Presenter implements IPlugInPort {
private DIYTest test = null;
public Presenter(IView view, IConfigurationManager configManager) {
public Presenter(IView view, IConfigurationManager<?> configManager) {
super();
this.view = view;
this.configManager = configManager;
@@ -3209,5 +3209,25 @@
</changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version>
<org.diylc.appframework.update.Version>
<versionNumber>
<major>4</major>
<minor>10</minor>
<build>0</build>
</versionNumber>
<releaseDate>2020-09-18 00:00:00.000 CET</releaseDate>
<name></name>
<changes>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
<description>Store configuration using the same XML format used for serializing DIY files</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>BUG_FIX</changeType>
<description>Favorites on building blocks show up as "null"</description>
</org.diylc.appframework.update.Change>
</changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version>
</a>
</java.util.Arrays_-ArrayList>
@@ -125,7 +125,9 @@ public class AreaConverter implements Converter {
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
public boolean canConvert(Class clazz) {
if (clazz == null)
return false;
return Area.class.isAssignableFrom(clazz);
}
}
@@ -50,7 +50,9 @@ public class ColorConverter extends com.thoughtworks.xstream.converters.extended
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
public boolean canConvert(Class clazz) {
if (clazz == null)
return false;
return Color.class.isAssignableFrom(clazz);
}
}
@@ -53,7 +53,9 @@ public class FontConverter extends com.thoughtworks.xstream.converters.extended.
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
public boolean canConvert(Class clazz) {
if (clazz == null)
return false;
return Font.class.isAssignableFrom(clazz);
}
}
@@ -87,7 +87,9 @@ public class MeasureConverter implements Converter {
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
public boolean canConvert(Class clazz) {
if (clazz == null)
return false;
return AbstractMeasure.class.isAssignableFrom(clazz);
}
}
@@ -47,15 +47,29 @@ public class PointConverter implements Converter {
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
double x = Double.parseDouble(reader.getAttribute("x"));
double y = Double.parseDouble(reader.getAttribute("y"));
return new Point2D.Double(x * Constants.PIXELS_PER_INCH, y * Constants.PIXELS_PER_INCH);
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
double x;
double y;
if (reader.hasMoreChildren()) {
reader.moveDown();
x = Double.parseDouble(reader.getValue());
reader.moveUp();
reader.moveDown();
y = Double.parseDouble(reader.getValue());
reader.moveUp();
return new Point2D.Double(x, y);
} else {
x = Double.parseDouble(reader.getAttribute("x"));
y = Double.parseDouble(reader.getAttribute("y"));
return new Point2D.Double(x * Constants.PIXELS_PER_INCH, y * Constants.PIXELS_PER_INCH);
}
}
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
public boolean canConvert(Class clazz) {
if (clazz == null)
return false;
return Point2D.class.isAssignableFrom(clazz);
}
}
@@ -96,13 +96,21 @@ public class ProjectFileManager {
};
}
};
configure(xStream);
this.xStreamOld = new XStream(new DomDriver());
xStreamOld.autodetectAnnotations(true);
this.messageDispatcher = messageDispatcher;
}
public static void configure(XStream xStream) {
xStream.autodetectAnnotations(true);
xStream.alias("point", java.awt.geom.Point2D.class);
xStream.alias("point", java.awt.geom.Point2D.Double.class);
xStream.alias("font", java.awt.Font.class);
// xStream.alias("color", java.awt.Color.class);
xStream.alias("project", Project.class);
xStream.aliasPackage("diylc", "org.diylc.components");
xStream.registerConverter(new PointConverter());
xStream.aliasPackage("diylc", "org.diylc.components");
xStream.registerConverter(new PointConverter());
xStream.registerConverter(new ColorConverter());
xStream.registerConverter(new FontConverter());
xStream.registerConverter(new MeasureConverter());
@@ -116,10 +124,7 @@ public class ProjectFileManager {
xStream.addImmutableType(org.diylc.core.measures.Current.class);
xStream.addImmutableType(org.diylc.core.measures.Power.class);
xStream.addImmutableType(org.diylc.core.measures.Inductance.class);
xStream.addImmutableType(org.diylc.core.measures.Size.class);
this.xStreamOld = new XStream(new DomDriver());
xStreamOld.autodetectAnnotations(true);
this.messageDispatcher = messageDispatcher;
xStream.addImmutableType(org.diylc.core.measures.Size.class);
}
public void startNewFile() {