diff --git a/diylc/diylc-core/.classpath b/diylc/diylc-core/.classpath index dae1c3c9..dbfbc5e0 100644 --- a/diylc/diylc-core/.classpath +++ b/diylc/diylc-core/.classpath @@ -4,7 +4,6 @@ - diff --git a/diylc/diylc-core/build.xml b/diylc/diylc-core/build.xml index 659dac8a..e81ef3b5 100644 --- a/diylc/diylc-core/build.xml +++ b/diylc/diylc-core/build.xml @@ -33,12 +33,7 @@ - - - - - - + diff --git a/diylc/diylc-core/library/main.jar b/diylc/diylc-core/library/main.jar deleted file mode 100644 index 0020736c..00000000 Binary files a/diylc/diylc-core/library/main.jar and /dev/null differ diff --git a/diylc/diylc-core/src/org/diylc/common/ComponentType.java b/diylc/diylc-core/src/org/diylc/common/ComponentType.java index 6086f9ea..aa34e2a1 100644 --- a/diylc/diylc-core/src/org/diylc/common/ComponentType.java +++ b/diylc/diylc-core/src/org/diylc/common/ComponentType.java @@ -29,10 +29,11 @@ public class ComponentType { private BomPolicy bomPolicy; private boolean autoEdit; private boolean rotatable; + private String autoCreateName; public ComponentType(String name, String description, CreationMethod creationMethod, String category, String namePrefix, String author, Icon icon, Class> instanceClass, double zOrder, - boolean flexibleZOrder, boolean stretchable, BomPolicy bomPolicy, boolean autoEdit, boolean rotatable) { + boolean flexibleZOrder, boolean stretchable, BomPolicy bomPolicy, boolean autoEdit, boolean rotatable, String autoCreateName) { super(); this.name = name; this.description = description; @@ -48,6 +49,7 @@ public class ComponentType { this.bomPolicy = bomPolicy; this.autoEdit = autoEdit; this.rotatable = rotatable; + this.autoCreateName = autoCreateName; } public String getName() { @@ -105,6 +107,10 @@ public class ComponentType { public boolean isRotatable() { return rotatable; } + + public String getAutoCreateName() { + return autoCreateName; + } @Override public String toString() { diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreated.java b/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreated.java new file mode 100644 index 00000000..ea470b78 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreated.java @@ -0,0 +1,19 @@ +package org.diylc.core.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import org.diylc.core.IDIYComponent; + +/** + * Annotation for {@link IDIYComponent} implementation. Tells the core which component should be auto-created as a solder pad. + * + * @author Branislav Stojkovic + */ +@Retention(RetentionPolicy.RUNTIME) +public @interface AutoCreated { + /** + * @return auto-create type name. + */ + String name(); +} diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/PositiveMeasureValidator.java b/diylc/diylc-core/src/org/diylc/core/annotations/PositiveMeasureValidator.java index 508cd4e3..08e0fb1d 100644 --- a/diylc/diylc-core/src/org/diylc/core/annotations/PositiveMeasureValidator.java +++ b/diylc/diylc-core/src/org/diylc/core/annotations/PositiveMeasureValidator.java @@ -11,7 +11,7 @@ public class PositiveMeasureValidator implements IPropertyValidator { if (value == null) return; if (value instanceof AbstractMeasure) { - AbstractMeasure measure = (AbstractMeasure) value; + AbstractMeasure measure = (AbstractMeasure) value; if (measure.getValue() < 0) { throw new ValidationException("must be greater than zero."); } diff --git a/diylc/diylc-core/src/org/diylc/parsing/IOldFileParser.java b/diylc/diylc-core/src/org/diylc/parsing/IOldFileParser.java new file mode 100644 index 00000000..90f02097 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/parsing/IOldFileParser.java @@ -0,0 +1,13 @@ +package org.diylc.parsing; + +import java.util.List; + +import org.diylc.core.Project; +import org.w3c.dom.Element; + +public interface IOldFileParser { + + boolean canParse(String version); + + Project parseFile(Element root, List warnings); +} diff --git a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java index 940a55ab..0530ddc8 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java +++ b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java @@ -20,6 +20,7 @@ import org.diylc.common.PropertyWrapper; import org.diylc.core.CreationMethod; import org.diylc.core.IDIYComponent; import org.diylc.core.IPropertyValidator; +import org.diylc.core.annotations.AutoCreated; import org.diylc.core.annotations.BomPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -70,6 +71,7 @@ public class ComponentProcessor { BomPolicy bomPolicy; boolean autoEdit; boolean rotatable; + String autoCreateName = null; if (clazz.isAnnotationPresent(ComponentDescriptor.class)) { ComponentDescriptor annotation = clazz.getAnnotation(ComponentDescriptor.class); name = annotation.name(); @@ -98,6 +100,10 @@ public class ComponentProcessor { autoEdit = true; rotatable = true; } + if (clazz.isAnnotationPresent(AutoCreated.class)) { + AutoCreated annotation = clazz.getAnnotation(AutoCreated.class); + autoCreateName = annotation.name(); + } icon = null; // Draw component icon. try { @@ -116,7 +122,7 @@ public class ComponentProcessor { } ComponentType componentType = new ComponentType(name, description, creationMethod, category, namePrefix, author, icon, clazz, zOrder, - flexibleZOrder, stretchable, bomPolicy, autoEdit, rotatable); + flexibleZOrder, stretchable, bomPolicy, autoEdit, rotatable, autoCreateName); componentTypeMap.put(clazz.getName(), componentType); return componentType; } diff --git a/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java b/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java index 0b4eb776..1156c037 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java @@ -40,7 +40,7 @@ public class InstantiationManager { private static final ComponentType clipboardType = new ComponentType("Clipboard contents", "Components from the clipboard", CreationMethod.SINGLE_CLICK, "Multi", "", "", null, null, 0, false, false, null, - false, true); + false, true, null); public InstantiationManager() {} diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index bfea8762..f8e7078a 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -44,7 +44,6 @@ import org.diylc.common.IPlugInPort; import org.diylc.common.Orientation; import org.diylc.common.OrientationHV; import org.diylc.common.PropertyWrapper; -import org.diylc.components.connectivity.SolderPad; import org.diylc.core.ExpansionMode; import org.diylc.core.IDIYComponent; import org.diylc.core.IView; @@ -64,6 +63,8 @@ import com.thoughtworks.xstream.io.xml.DomDriver; */ public class Presenter implements IPlugInPort { + private static final String SOLDER_PAD = "SolderPad"; + private static final Logger LOG = Logger.getLogger(Presenter.class); public static VersionNumber CURRENT_VERSION = new VersionNumber(3, 0, 0); @@ -72,6 +73,7 @@ public class Presenter implements IPlugInPort { try { BufferedInputStream in = new BufferedInputStream(new FileInputStream("update.xml")); XStream xStream = new XStream(new DomDriver()); + @SuppressWarnings("unchecked") List allVersions = (List) xStream.fromXML(in); in.close(); CURRENT_VERSION = allVersions.get(allVersions.size() - 1).getVersionNumber(); @@ -87,6 +89,10 @@ public class Presenter implements IPlugInPort { private Project currentProject; private Map> componentTypes; + /** + * {@link ComponentType}s that can be autocreated, like Solder Pads + */ + private Map autoCreateTypes; // Maps component class names to ComponentType objects. private List plugIns; @@ -347,6 +353,19 @@ public class Presenter implements IPlugInPort { return componentTypes; } + private Map getAutoCreateTypes() { + if (autoCreateTypes == null) { + autoCreateTypes = new HashMap(); + for (Map.Entry> entry : getComponentTypes().entrySet()) { + for (ComponentType t : entry.getValue()) { + if (t.getAutoCreateName() != null) + autoCreateTypes.put(t.getAutoCreateName(), t); + } + } + } + return autoCreateTypes; + } + @Override public void draw(Graphics2D g2d, Set drawOptions, IComponentFiler filter) { if (currentProject == null) { @@ -670,6 +689,7 @@ public class Presenter implements IPlugInPort { } } + @SuppressWarnings("unchecked") @Override public void mouseMoved(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown) { @@ -746,6 +766,7 @@ public class Presenter implements IPlugInPort { return selectedComponents; } + @SuppressWarnings("unchecked") @Override public void selectAll(int layer) { LOG.info("selectAll()"); @@ -852,6 +873,7 @@ public class Presenter implements IPlugInPort { * * @param controlPointMap */ + @SuppressWarnings("unchecked") private void includeStuckComponents(Map, Set> controlPointMap) { int oldSize = controlPointMap.size(); LOG.trace("Expanding selected component map"); @@ -1054,6 +1076,7 @@ public class Presenter implements IPlugInPort { * * @param direction 1 for clockwise, -1 for counter-clockwise */ + @SuppressWarnings("unchecked") private void rotateComponents(List> components, int direction, boolean snapToGrid) { Point center = getCenterOf(components, snapToGrid); @@ -1286,6 +1309,7 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.LAYER_STATE_CHANGED, currentProject.getLockedLayers()); } + @SuppressWarnings("unchecked") @Override public void sendSelectionToBack() { LOG.info("sendSelectionToBack()"); @@ -1316,6 +1340,7 @@ public class Presenter implements IPlugInPort { } } + @SuppressWarnings("unchecked") @Override public void bringSelectionToFront() { LOG.info("bringSelectionToFront()"); @@ -1363,6 +1388,7 @@ public class Presenter implements IPlugInPort { drawingManager.setTheme(theme); } + @SuppressWarnings("unchecked") @Override public void renumberSelectedComponents(final boolean xAxisFirst) { LOG.info("renumberSelectedComponents(" + xAxisFirst + ")"); @@ -1453,6 +1479,7 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.SELECTION_CHANGED, selectedComponents, controlPointMap.keySet()); } + @SuppressWarnings("unchecked") @Override public void expandSelection(ExpansionMode expansionMode) { LOG.info(String.format("expandSelection(%s)", expansionMode)); @@ -1596,6 +1623,7 @@ public class Presenter implements IPlugInPort { * * @param component */ + @SuppressWarnings("unchecked") private void addComponent(IDIYComponent component, boolean canCreatePads) { int index = currentProject.getComponents().size(); while (index > 0 @@ -1612,9 +1640,10 @@ public class Presenter implements IPlugInPort { } else { currentProject.getComponents().add(component); } + + ComponentType padType = getAutoCreateTypes().get(SOLDER_PAD); if (canCreatePads && ConfigurationManager.getInstance().readBoolean(IPlugInPort.AUTO_PADS_KEY, false) - && !(component instanceof SolderPad)) { - ComponentType padType = ComponentProcessor.getInstance().extractComponentTypeFrom(SolderPad.class); + && padType != null && !(component.getClass().equals(padType.getInstanceClass()))) { for (int i = 0; i < component.getControlPointCount(); i++) { if (component.isControlPointSticky(i)) { try { @@ -1626,11 +1655,6 @@ public class Presenter implements IPlugInPort { } catch (Exception e) { LOG.warn("Could not auto-create solder pad", e); } - // SolderPad pad = new SolderPad(); - // pad.setControlPoint(component.getControlPoint(i), 0); - // addComponent(pad, - // ComponentProcessor.getInstance().extractComponentTypeFrom( - // SolderPad.class), false); } } } @@ -1742,6 +1766,7 @@ public class Presenter implements IPlugInPort { } } + @SuppressWarnings("unchecked") @Override public void saveSelectedComponentAsTemplate(String templateName) { LOG.info(String.format("saveSelectedComponentAsTemplate(%s)", templateName)); @@ -1818,6 +1843,7 @@ public class Presenter implements IPlugInPort { ConfigurationManager.getInstance().writeValue(TEMPLATES_KEY, templateMap); } + @SuppressWarnings("unchecked") @Override public List