diff --git a/diylc/diylc-core/lib/app-framework.jar b/diylc/diylc-core/lib/app-framework.jar index 7fed7294..014a7e51 100644 Binary files a/diylc/diylc-core/lib/app-framework.jar and b/diylc/diylc-core/lib/app-framework.jar differ diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java index 723eb1dd..4b78cf0c 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java @@ -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 messageDispatcher, IConfigurationManager configManager) { + public DrawingManager(MessageDispatcher messageDispatcher, IConfigurationManager configManager) { super(); this.messageDispatcher = messageDispatcher; this.configManager = configManager; diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index cc863dda..f1a9aad1 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -191,7 +191,7 @@ public class Presenter implements IPlugInPort { private Rectangle selectionRect; private final IView view; - private IConfigurationManager configManager; + private IConfigurationManager configManager; private MessageDispatcher 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; diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index 5dda9199..a12e0aa4 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3209,5 +3209,25 @@ https://github.com/bancika/diy-layout-creator/releases + + + 4 + 10 + 0 + + 2020-09-18 00:00:00.000 CET + + + + IMPROVEMENT + Store configuration using the same XML format used for serializing DIY files + + + BUG_FIX + Favorites on building blocks show up as "null" + + + https://github.com/bancika/diy-layout-creator/releases + diff --git a/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java b/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java index 147171ab..f1a1e3ff 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java +++ b/diylc/diylc-core/src/org/diylc/serialization/AreaConverter.java @@ -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); } } diff --git a/diylc/diylc-core/src/org/diylc/serialization/ColorConverter.java b/diylc/diylc-core/src/org/diylc/serialization/ColorConverter.java index 20061899..e5a2e347 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/ColorConverter.java +++ b/diylc/diylc-core/src/org/diylc/serialization/ColorConverter.java @@ -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); } } diff --git a/diylc/diylc-core/src/org/diylc/serialization/FontConverter.java b/diylc/diylc-core/src/org/diylc/serialization/FontConverter.java index 6c7d27b5..5866ea5f 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/FontConverter.java +++ b/diylc/diylc-core/src/org/diylc/serialization/FontConverter.java @@ -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); } } diff --git a/diylc/diylc-core/src/org/diylc/serialization/MeasureConverter.java b/diylc/diylc-core/src/org/diylc/serialization/MeasureConverter.java index 2955036f..cde82f72 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/MeasureConverter.java +++ b/diylc/diylc-core/src/org/diylc/serialization/MeasureConverter.java @@ -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); } } diff --git a/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java b/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java index c08ac51b..b4a636d6 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java +++ b/diylc/diylc-core/src/org/diylc/serialization/PointConverter.java @@ -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); } } diff --git a/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java b/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java index 80024646..6ddc2fe3 100644 --- a/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java +++ b/diylc/diylc-core/src/org/diylc/serialization/ProjectFileManager.java @@ -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() { diff --git a/diylc/diylc-library/lib/app-framework.jar b/diylc/diylc-library/lib/app-framework.jar index 7fed7294..014a7e51 100644 Binary files a/diylc/diylc-library/lib/app-framework.jar and b/diylc/diylc-library/lib/app-framework.jar differ diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 3c73d822..fd7b52e2 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/lib/app-framework.jar b/diylc/diylc-swing/lib/app-framework.jar index 7fed7294..014a7e51 100644 Binary files a/diylc/diylc-swing/lib/app-framework.jar and b/diylc/diylc-swing/lib/app-framework.jar differ diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 3c73d822..fd7b52e2 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 30d65fdc..f7b13a67 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java index c79e6ebd..bdba31a2 100644 --- a/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java +++ b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java @@ -42,6 +42,7 @@ import org.diylc.common.IPlugInPort; import org.diylc.core.IView; import org.diylc.lang.LangUtil; import org.diylc.presenter.Presenter; +import org.diylc.serialization.ProjectFileManager; import org.diylc.swing.gui.MainFrame; import org.diylc.swing.gui.TemplateDialog; import org.diylc.swingframework.FontChooserComboBox; @@ -49,6 +50,7 @@ import org.diylc.utils.ResourceLoader; import com.apple.eawt.AppEvent; import com.apple.eawt.Application; +import com.thoughtworks.xstream.XStream; /** * Main class that runs DIYLC. @@ -88,8 +90,12 @@ public class DIYLCStarter { } catch (Exception e) { LOG.error("Could not initialize log4j configuration", e); } - - ConfigurationManager.initialize("diylc"); + + // initialize configuration + ConfigurationManager configurationManager = ConfigurationManager.getInstance(); + XStream xStream = configurationManager.getSerializer(); + ProjectFileManager.configure(xStream); + configurationManager.initialize("diylc"); // disable HIGHLIGHT_CONTINUITY_AREA config, keep it transient ConfigurationManager.getInstance().writeValue(IPlugInPort.HIGHLIGHT_CONTINUITY_AREA, false); diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java index 0534ad84..ee602cbc 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java @@ -86,9 +86,9 @@ public class CanvasPanel extends JComponent implements Autoscroll { private HashMap componentTypeCache; - private IConfigurationManager configManager; + private IConfigurationManager configManager; - public CanvasPanel(IPlugInPort plugInPort, IConfigurationManager configManager) { + public CanvasPanel(IPlugInPort plugInPort, IConfigurationManager configManager) { this.plugInPort = plugInPort; this.configManager = configManager; diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index 82850da2..ac4d4130 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -117,9 +117,9 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { private double zoomLevel = 1; - private IConfigurationManager configManager; + private IConfigurationManager configManager; - public CanvasPlugin(ISwingUI swingUI, IConfigurationManager configManager) { + public CanvasPlugin(ISwingUI swingUI, IConfigurationManager configManager) { this.swingUI = swingUI; this.configManager = configManager; clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); diff --git a/diylc/diylc-swing/test/org/diylc/TestBase.java b/diylc/diylc-swing/test/org/diylc/TestBase.java index c4be90e0..dbaeba2a 100644 --- a/diylc/diylc-swing/test/org/diylc/TestBase.java +++ b/diylc/diylc-swing/test/org/diylc/TestBase.java @@ -17,7 +17,7 @@ public class TestBase { protected IView view; public TestBase() { - ConfigurationManager.initialize("diylc-test"); + ConfigurationManager.getInstance().initialize("diylc-test"); view = new MockView(); presenter = new Presenter(view, InMemoryConfigurationManager.getInstance()); }