diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath b/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath index baa39e03..5b6fba27 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath @@ -7,11 +7,11 @@ - - - + + + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.5.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.5.jar deleted file mode 100644 index 781fe27d..00000000 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.5.jar and /dev/null differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.8.1.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.8.1.jar new file mode 100644 index 00000000..ebd2d8c2 Binary files /dev/null and b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.8.1.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.1.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.1.jar deleted file mode 100644 index f178db33..00000000 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.1.jar and /dev/null differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.2.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.2.jar new file mode 100644 index 00000000..fb04d7fa Binary files /dev/null and b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.2.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java index 258ebe8b..90b84bf4 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -4,20 +4,30 @@ import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; +import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import org.diylc.common.HorizontalAlignment; import org.diylc.common.VerticalAlignment; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.EditableProperty; +import com.rits.cloning.CloningException; + /** * Abstract implementation of {@link IDIYComponent} that contains component name * and toString. * + * IMPORTANT: to improve performance, all fields except for Point + * and Point arrays should be immutable. Failing to comply with + * this can result in annoying and hard to trace bugs. + * * @author Branislav Stojkovic * * @param @@ -80,9 +90,11 @@ public abstract class AbstractComponent implements IDIYComponent { } protected void drawCenteredText(Graphics2D g2d, String text, int x, int y, - HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment) { + HorizontalAlignment horizontalAlignment, + VerticalAlignment verticalAlignment) { FontMetrics fontMetrics = g2d.getFontMetrics(); - Rectangle stringBounds = fontMetrics.getStringBounds(text, g2d).getBounds(); + Rectangle stringBounds = fontMetrics.getStringBounds(text, g2d) + .getBounds(); Font font = g2d.getFont(); FontRenderContext renderContext = g2d.getFontRenderContext(); @@ -117,4 +129,55 @@ public abstract class AbstractComponent implements IDIYComponent { g2d.drawString(text, textX, textY); } + + @SuppressWarnings("unchecked") + public IDIYComponent clone() throws CloneNotSupportedException { + try { + // Instantiate object of the same type + AbstractComponent newInstance = (AbstractComponent) this + .getClass().getConstructors()[0].newInstance(); + Class clazz = this.getClass(); + while (AbstractComponent.class.isAssignableFrom(clazz)) { + Field[] fields = clazz.getDeclaredFields(); + clazz = clazz.getSuperclass(); + // fields = this.getClass().getDeclaredFields(); + // Copy over all non-static, non-final fields that are declared + // in + // AbstractComponent or one of it's child classes + for (Field field : fields) { + if (!Modifier.isStatic(field.getModifiers()) + && !Modifier.isFinal(field.getModifiers())) { + field.setAccessible(true); + Object value = field.get(this); + + // Deep copy point arrays. + // TODO: something nicer + if (value != null + && value.getClass().isArray() + && value.getClass().getComponentType() + .isAssignableFrom(Point.class)) { + Object newArray = Array.newInstance(value + .getClass().getComponentType(), Array + .getLength(value)); + for (int i = 0; i < Array.getLength(value); i++) { + Point p = (Point) Array.get(value, i); + Array.set(newArray, i, new Point(p)); + } + value = newArray; + } + // Deep copy points. + // TODO: something nicer + if (value != null && value instanceof Point) { + value = new Point((Point) value); + } + + field.set(newInstance, value); + } + } + } + return newInstance; + } catch (Exception e) { + throw new CloningException("Could not clone the component", e); + } + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java index ecf23912..7a16358e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java @@ -107,7 +107,8 @@ public interface IDIYComponent extends Serializable { * @param project * @param drawingObserver */ - void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, IDrawingObserver drawingObserver); /** @@ -119,4 +120,11 @@ public interface IDIYComponent extends Serializable { * @param height */ void drawIcon(Graphics2D g2d, int width, int height); + + /** + * Clones the component. + * + * @return + */ + IDIYComponent clone() throws CloneNotSupportedException; } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java index e48d708f..b1f226a9 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java @@ -2,8 +2,10 @@ package org.diylc.core; import java.io.Serializable; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.diylc.appframework.update.VersionNumber; @@ -210,15 +212,37 @@ public class Project implements Serializable { } } - // @Override - // public Project clone() throws CloneNotSupportedException { - // List clonedComponents = new - // ArrayList(); - // for (IDIYComponent component : components) { - // clonedComponents.add(component.clone()); - // } - // Project project = new Project(title, author, description, - // width.clone(), height.clone(), clonedComponents); - // return project; - // } + @Override + public Project clone() { + Project project = new Project(); + project.setTitle(this.getTitle()); + project.setAuthor(this.getAuthor()); + project.setDescription(this.getDescription()); + project.setFileVersion(this.getFileVersion()); + project.setGridSpacing(this.getGridSpacing()); + project.setHeight(this.getHeight()); + project.setWidth(this.getWidth()); + project.getLockedLayers().addAll(this.getLockedLayers()); + + Map, IDIYComponent> cloneMap = new HashMap, IDIYComponent>(); + + for (IDIYComponent component : this.components) { + try { + IDIYComponent clone = component.clone(); + project.getComponents().add(clone); + cloneMap.put(component, clone); + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } + } + + for (Set> group : this.groups) { + Set> cloneGroup = new HashSet>(); + for (IDIYComponent component : group) { + cloneGroup.add(cloneMap.get(component)); + } + project.groups.add(cloneGroup); + } + return project; + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java index 509fa204..ad2386ee 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java @@ -4,6 +4,13 @@ import java.io.Serializable; import java.text.DecimalFormat; import java.text.Format; +/*** + * Immutable measure class. + * + * @author bancika + * + * @param + */ public class AbstractMeasure> implements Serializable, Cloneable { private static final long serialVersionUID = 1L; @@ -13,8 +20,8 @@ public class AbstractMeasure> implements Serializ protected Double value; protected T unit; - public AbstractMeasure() { - } +// public AbstractMeasure() { +// } public AbstractMeasure(Double value, T unit) { super(); @@ -26,22 +33,22 @@ public class AbstractMeasure> implements Serializ return value; } - public void setValue(Double value) { - this.value = value; - } +// public void setValue(Double value) { +// this.value = value; +// } public T getUnit() { return unit; } - public void setUnit(T multiplier) { - this.unit = multiplier; - } +// public void setUnit(T multiplier) { +// this.unit = multiplier; +// } - @Override - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } +// @Override +// public Object clone() throws CloneNotSupportedException { +// return super.clone(); +// } @Override public int hashCode() { diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java index 4e2e79c3..b4d81742 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java @@ -4,10 +4,10 @@ public class Capacitance extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Capacitance() { - super(); - // TODO Auto-generated constructor stub - } +// public Capacitance() { +// super(); +// // TODO Auto-generated constructor stub +// } public Capacitance(Double value, CapacitanceUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java index af598a2a..a63bfcae 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java @@ -4,10 +4,10 @@ public class Inductance extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Inductance() { - super(); - // TODO Auto-generated constructor stub - } +// public Inductance() { +// super(); +// // TODO Auto-generated constructor stub +// } public Inductance(Double value, InductanceUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java index ed4b35f7..f7f6069a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java @@ -4,10 +4,10 @@ public class Power extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Power() { - super(); - // TODO Auto-generated constructor stub - } +// public Power() { +// super(); +// // TODO Auto-generated constructor stub +// } public Power(Double value, PowerUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java index 3d2f8716..bfe0ebbd 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java @@ -15,10 +15,10 @@ public class Resistance extends AbstractMeasure { Color.decode("#FFB90F"), Color.black, Color.decode("#8B4513"), Color.red, Color.orange, Color.yellow, Color.decode("#76EE00"), Color.blue }; - public Resistance() { - super(); - // TODO Auto-generated constructor stub - } +// public Resistance() { +// super(); +// // TODO Auto-generated constructor stub +// } public Resistance(Double value, ResistanceUnit multiplier) { super(value, multiplier); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java index e7543161..b5c7715c 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java @@ -6,10 +6,10 @@ public class Size extends AbstractMeasure implements Comparable private static final long serialVersionUID = 1L; - public Size() { - super(); - // TODO Auto-generated constructor stub - } +// public Size() { +// super(); +// // TODO Auto-generated constructor stub +// } public Size(Double value, SizeUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java index 0f090635..373b45cb 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java @@ -4,10 +4,10 @@ public class Voltage extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Voltage() { - super(); - // TODO Auto-generated constructor stub - } +// public Voltage() { +// super(); +// // TODO Auto-generated constructor stub +// } public Voltage(Double value, VoltageUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java index d8d95f7c..0dea3240 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java @@ -47,8 +47,6 @@ import org.diylc.core.Theme; import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; -import com.rits.cloning.Cloner; - /** * The main presenter class, contains core app logic and drawing routines. * @@ -58,7 +56,7 @@ public class Presenter implements IPlugInPort { private static final Logger LOG = Logger.getLogger(Presenter.class); - public static final VersionNumber CURRENT_VERSION = new VersionNumber(3, 9, + public static final VersionNumber CURRENT_VERSION = new VersionNumber(3, 10, 0); public static final String DEFAULTS_KEY_PREFIX = "default."; @@ -79,7 +77,7 @@ public class Presenter implements IPlugInPort { private Set> lockedComponents; // Utilities - private Cloner cloner; + //private Cloner cloner; private DrawingManager drawingManager; private ProjectFileManager projectFileManager; private InstantiationManager instantiationManager; @@ -109,7 +107,7 @@ public class Presenter implements IPlugInPort { selectedComponents = new ArrayList>(); lockedComponents = new HashSet>(); currentProject = new Project(); - cloner = new Cloner(); + //cloner = new Cloner(); drawingManager = new DrawingManager(messageDispatcher); projectFileManager = new ProjectFileManager(messageDispatcher); instantiationManager = new InstantiationManager(); @@ -412,7 +410,7 @@ public class Presenter implements IPlugInPort { // Keep the reference to component type for later. ComponentType componentTypeSlot = instantiationManager .getComponentTypeSlot(); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); switch (componentTypeSlot.getCreationMethod()) { case SINGLE_CLICK: try { @@ -505,8 +503,7 @@ public class Presenter implements IPlugInPort { // Notify the listeners. if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage( - EventType.PROJECT_MODIFIED, oldProject, cloner - .deepClone(currentProject), "Add " + EventType.PROJECT_MODIFIED, oldProject, currentProject.clone(), "Add " + componentTypeSlot.getName()); projectFileManager.notifyFileChange(); } @@ -612,10 +609,10 @@ public class Presenter implements IPlugInPort { return false; } - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); moveSelectedComponents(controlPointMap, dx, dy, snapToGrid); messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Move Selection"); + oldProject, currentProject.clone(), "Move Selection"); messageDispatcher.dispatchMessage(EventType.REPAINT); return true; } @@ -760,7 +757,7 @@ public class Presenter implements IPlugInPort { } this.dragInProgress = true; this.dragAction = dragAction; - this.preDragProject = cloner.deepClone(currentProject); + this.preDragProject = currentProject.clone(); Point scaledPoint = scalePoint(point); this.previousDragPoint = scaledPoint; List> components = findComponentsAtScaled(scaledPoint); @@ -1067,7 +1064,7 @@ public class Presenter implements IPlugInPort { if (!preDragProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - preDragProject, cloner.deepClone(currentProject), "Drag"); + preDragProject, currentProject.clone(), "Drag"); projectFileManager.notifyFileChange(); } messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1077,7 +1074,7 @@ public class Presenter implements IPlugInPort { @Override public void pasteComponents(List> components) { LOG.info(String.format("addComponents(%s)", components)); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); for (IDIYComponent component : components) { for (int i = 0; i < component.getControlPointCount(); i++) { Point point = new Point(component.getControlPoint(i)); @@ -1096,7 +1093,7 @@ public class Presenter implements IPlugInPort { .getClass()), false); } messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Add"); + oldProject, currentProject.clone(), "Add"); projectFileManager.notifyFileChange(); updateSelection(new ArrayList>(components)); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1109,7 +1106,7 @@ public class Presenter implements IPlugInPort { LOG.debug("Nothing to delete"); return; } - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); // Remove selected components from any groups. ungroupComponents(selectedComponents); // Remove from area map. @@ -1118,7 +1115,7 @@ public class Presenter implements IPlugInPort { } currentProject.getComponents().removeAll(selectedComponents); messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Delete"); + oldProject, currentProject.clone(), "Delete"); projectFileManager.notifyFileChange(); updateSelection(EMPTY_SELECTION); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1160,7 +1157,7 @@ public class Presenter implements IPlugInPort { @Override public void groupSelectedComponents() { LOG.info("groupSelectedComponents()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); // First remove the selected components from other groups. ungroupComponents(selectedComponents); // Then group them together. @@ -1170,7 +1167,7 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.REPAINT); if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Group"); + oldProject, currentProject.clone(), "Group"); projectFileManager.notifyFileChange(); } } @@ -1178,13 +1175,13 @@ public class Presenter implements IPlugInPort { @Override public void ungroupSelectedComponents() { LOG.info("ungroupSelectedComponents()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); ungroupComponents(selectedComponents); // Notify the listeners. messageDispatcher.dispatchMessage(EventType.REPAINT); if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Ungroup"); + oldProject, currentProject.clone(), "Ungroup"); projectFileManager.notifyFileChange(); } } @@ -1206,7 +1203,7 @@ public class Presenter implements IPlugInPort { @Override public void sendSelectionToBack() { LOG.info("sendSelectionToBack()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); for (IDIYComponent component : selectedComponents) { ComponentType componentType = ComponentProcessor.getInstance() .extractComponentTypeFrom( @@ -1235,7 +1232,7 @@ public class Presenter implements IPlugInPort { } if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Send to Back"); projectFileManager.notifyFileChange(); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1245,7 +1242,7 @@ public class Presenter implements IPlugInPort { @Override public void bringSelectionToFront() { LOG.info("bringSelectionToFront()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); for (IDIYComponent component : selectedComponents) { ComponentType componentType = ComponentProcessor.getInstance() .extractComponentTypeFrom( @@ -1274,7 +1271,7 @@ public class Presenter implements IPlugInPort { } if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Bring to Front"); projectFileManager.notifyFileChange(); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1303,7 +1300,7 @@ public class Presenter implements IPlugInPort { if (getSelectedComponents().isEmpty()) { return; } - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); List> components = new ArrayList>( getSelectedComponents()); // Sort components by their location. @@ -1369,7 +1366,7 @@ public class Presenter implements IPlugInPort { } messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Renumber selection"); projectFileManager.notifyFileChange(); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1593,7 +1590,7 @@ public class Presenter implements IPlugInPort { private void applyPropertiesToSelection(List properties) { LOG.debug(String.format("applyPropertiesToSelection(%s)", properties)); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); try { for (IDIYComponent component : selectedComponents) { drawingManager.invalidateComponent(component); @@ -1613,7 +1610,7 @@ public class Presenter implements IPlugInPort { // Notify the listeners. if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Edit Selection"); projectFileManager.notifyFileChange(); } @@ -1641,7 +1638,7 @@ public class Presenter implements IPlugInPort { @Override public void applyPropertiesToProject(List properties) { LOG.debug(String.format("applyPropertiesToProject(%s)", properties)); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); try { for (PropertyWrapper property : properties) { property.writeTo(currentProject); @@ -1656,7 +1653,7 @@ public class Presenter implements IPlugInPort { // Notify the listeners. if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Edit Project"); projectFileManager.notifyFileChange(); } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java index 110c5848..a4736db3 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java @@ -19,7 +19,7 @@ import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @ComponentDescriptor(name = "Mock", author = "bancika", category = "Sample", instanceNamePrefix = "M", description = "test", zOrder = IDIYComponent.COMPONENT) -public class MockDIYComponent implements IDIYComponent { +public class MockDIYComponent extends AbstractComponent { private static final long serialVersionUID = 1L;