package com.baselet.element; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import com.baselet.control.HandlerElementMap; import com.baselet.control.basics.geom.Rectangle; import com.baselet.control.enums.ElementId; import com.baselet.diagram.DiagramHandler; import com.baselet.element.elementnew.ElementFactory; import com.baselet.element.interfaces.DrawHandlerInterface; import com.baselet.element.interfaces.GridElement; import com.baselet.element.old.OldGridElement; import com.baselet.element.relation.Relation; import com.baselet.element.sticking.StickableMap; import com.baselet.element.sticking.Stickables; public class ElementFactorySwing extends ElementFactory { /** * uses no reflection, to avoid complications with GWT */ public static NewGridElement create(ElementId id, Rectangle bounds, String panelAttributes, String additionalAttributes, DiagramHandler handler) { final NewGridElement returnObj = createAssociatedGridElement(id); ComponentSwing component = new ComponentSwing(returnObj); DrawHandlerInterface panel = new DrawHandlerInterface() { @Override public void updatePropertyPanel() { HandlerElementMap.getHandlerForElement(returnObj).getDrawPanel().getSelector().updateSelectorInformation(); // update the property panel to display changed attributes } @Override public int getGridSize() { return HandlerElementMap.getHandlerForElement(returnObj).getGridSize(); } @Override public boolean isInitialized() { return HandlerElementMap.getHandlerForElement(returnObj) != null; } @Override public StickableMap getStickableMap() { DiagramHandler h = HandlerElementMap.getHandlerForElement(returnObj); List<Relation> stickables = h.getDrawPanel().getStickables(Collections.<GridElement> emptyList()); return Stickables.getStickingPointsWhichAreConnectedToStickingPolygon(returnObj.generateStickingBorder(), stickables); } }; returnObj.init(bounds, panelAttributes, additionalAttributes, component, panel); handler.setHandlerAndInitListeners(returnObj); return returnObj; } public static GridElement createCopy(GridElement src) { if (src instanceof OldGridElement) { return ((OldGridElement) src).cloneFromMe(); } else { return create(src.getId(), src.getRectangle().copy(), src.getPanelAttributes(), src.getAdditionalAttributes(), HandlerElementMap.getHandlerForElement(src)); } } public static GridElement createCopy(GridElement src, DiagramHandler handler) { GridElement returnElement = createCopy(src); handler.setHandlerAndInitListeners(returnElement); return returnElement; } public static List<GridElement> createCopy(Collection<GridElement> src) { List<GridElement> list = new ArrayList<GridElement>(); for (GridElement o : src) { list.add(createCopy(o)); } return list; } }