Search in sources :

Example 6 with IDiagramModelComponent

use of com.archimatetool.model.IDiagramModelComponent in project archi by archimatetool.

the class CopySnapshotTests method testCanPasteToDiagram_DifferentModelDiagramReference.

@Test
public void testCanPasteToDiagram_DifferentModelDiagramReference() throws IOException {
    loadTestModel1();
    // Test can't paste IDiagramModelReference to another Archimate model
    // Source model
    IDiagramModelReference reference = IArchimateFactory.eINSTANCE.createDiagramModelReference();
    reference.setReferencedModel(model.getDiagramModels().get(0));
    sourceDiagramModel.getChildren().add(reference);
    // Target model
    IArchimateModel model2 = IArchimateFactory.eINSTANCE.createArchimateModel();
    IArchimateDiagramModel targetDiagramModel2 = IArchimateFactory.eINSTANCE.createArchimateDiagramModel();
    model2.getDefaultFolderForObject(targetDiagramModel2).getElements().add(targetDiagramModel2);
    List<IDiagramModelComponent> selected = new ArrayList<IDiagramModelComponent>();
    selected.add(reference);
    CopySnapshot snapshot = new CopySnapshot(selected);
    assertFalse(snapshot.canPasteToDiagram(targetDiagramModel2));
    // Should be OK if other objects added
    selected.addAll(sourceDiagramModel.getChildren());
    snapshot = new CopySnapshot(selected);
    assertTrue(snapshot.canPasteToDiagram(targetDiagramModel2));
}
Also used : IDiagramModelComponent(com.archimatetool.model.IDiagramModelComponent) IDiagramModelReference(com.archimatetool.model.IDiagramModelReference) ArrayList(java.util.ArrayList) IArchimateModel(com.archimatetool.model.IArchimateModel) IArchimateDiagramModel(com.archimatetool.model.IArchimateDiagramModel) Test(org.junit.Test)

Example 7 with IDiagramModelComponent

use of com.archimatetool.model.IDiagramModelComponent in project archi by archimatetool.

the class CopySnapshotTests method testGetPasteCommand.

@Test
public void testGetPasteCommand() throws IOException {
    loadTestModel1();
    List<IDiagramModelComponent> selected = new ArrayList<IDiagramModelComponent>();
    selected.addAll(getAllDiagramComponents(sourceDiagramModel));
    CopySnapshot snapshot = new CopySnapshot(selected);
    assertNotNull(snapshot);
    // Should be null
    Command cmd = snapshot.getPasteCommand(null, null, null, false);
    assertNull(cmd);
    // Real one
    cmd = snapshot.getPasteCommand(targetDiagramModel, mock(GraphicalViewer.class), null, false);
    assertTrue(cmd.canExecute());
    cmd.execute();
    // Same number of objects pasted
    assertEquals(countAllObjects(sourceDiagramModel), countAllObjects(targetDiagramModel));
    // Same number of connections pasted
    assertEquals(countAllConnections(sourceDiagramModel), countAllConnections(targetDiagramModel));
}
Also used : IDiagramModelComponent(com.archimatetool.model.IDiagramModelComponent) Command(org.eclipse.gef.commands.Command) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 8 with IDiagramModelComponent

use of com.archimatetool.model.IDiagramModelComponent in project archi by archimatetool.

the class CopySnapshotTests method testCanPasteToDiagram.

@Test
public void testCanPasteToDiagram() throws IOException {
    loadTestModel1();
    List<IDiagramModelComponent> selected = new ArrayList<IDiagramModelComponent>();
    // Empty selection
    CopySnapshot snapshot = new CopySnapshot(selected);
    assertFalse(snapshot.canPasteToDiagram(targetDiagramModel));
    // Select some
    selected.addAll(sourceDiagramModel.getChildren());
    snapshot = new CopySnapshot(selected);
    assertTrue(snapshot.canPasteToDiagram(targetDiagramModel));
    // Different diagram model types
    IDiagramModel sketchModel = IArchimateFactory.eINSTANCE.createSketchModel();
    assertFalse(snapshot.canPasteToDiagram(sketchModel));
}
Also used : IDiagramModelComponent(com.archimatetool.model.IDiagramModelComponent) IDiagramModel(com.archimatetool.model.IDiagramModel) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 9 with IDiagramModelComponent

use of com.archimatetool.model.IDiagramModelComponent in project archi by archimatetool.

the class ArchimateDNDEditPolicy method getDropCommand.

@Override
protected Command getDropCommand(DiagramDropRequest request) {
    if (!(request.getData() instanceof IStructuredSelection)) {
        return null;
    }
    // XY drop point
    Point pt = getDropLocation(request);
    int origin = pt.x;
    int x = pt.x;
    int y = pt.y;
    fElementsToAdd = new ArrayList<IArchimateElement>();
    fRelationsToAdd = new ArrayList<IArchimateRelationship>();
    fDiagramRefsToAdd = new ArrayList<IDiagramModel>();
    // Gather an actual list of elements dragged onto the container, omitting duplicates and anything already on the diagram
    Object[] objects = ((IStructuredSelection) request.getData()).toArray();
    getElementsToAdd(objects);
    // Store the Diagram Model Components that will be added in this list
    List<IDiagramModelArchimateComponent> diagramComponentsThatWereAdded = new ArrayList<IDiagramModelArchimateComponent>();
    // Create a Compound Command - it has to be Non-Notifying or it's too slow (tested with Bill's UoB model!)
    CompoundCommand result = new NonNotifyingCompoundCommand(Messages.ArchimateDNDEditPolicy_0);
    // Add the Commands adding the Elements first
    for (IArchimateElement element : fElementsToAdd) {
        // Add Diagram object
        IDiagramModelArchimateObject dmo = ArchimateDiagramModelFactory.createDiagramModelArchimateObject(element);
        // Set location
        dmo.getBounds().setLocation(x, y);
        // Store it
        diagramComponentsThatWereAdded.add(dmo);
        // Add Command
        result.add(new AddDiagramObjectCommand(getTargetContainer(), dmo));
        // Increase x,y
        x += 150;
        if (x > origin + 400) {
            x = origin;
            y += 100;
        }
    }
    // Then any Diagram Model Ref Commands
    for (IDiagramModel diagramModel : fDiagramRefsToAdd) {
        result.add(new AddDiagramModelReferenceCommand(getTargetContainer(), diagramModel, x, y));
        x += 150;
        if (x > origin + 400) {
            x = origin;
            y += 100;
        }
    }
    // Add selected Relations to create connections to those elements on the diagram that don't already have them
    for (IArchimateRelationship relation : fRelationsToAdd) {
        // Find existing source & target components on the diagram that the new connection will link to
        List<IDiagramModelArchimateComponent> sources = DiagramModelUtils.findDiagramModelComponentsForArchimateConcept(getTargetDiagramModel(), relation.getSource());
        List<IDiagramModelArchimateComponent> targets = DiagramModelUtils.findDiagramModelComponentsForArchimateConcept(getTargetDiagramModel(), relation.getTarget());
        for (IDiagramModelComponent dcSource : sources) {
            for (IDiagramModelComponent dcTarget : targets) {
                if (dcSource instanceof IConnectable && dcTarget instanceof IConnectable) {
                    // Add a new connection between dcSource & dcTarget if there isn't already one on the diagram
                    if (dcTarget != dcSource && !DiagramModelUtils.hasDiagramModelArchimateConnection((IConnectable) dcSource, (IConnectable) dcTarget, relation)) {
                        // Check that source or target is not a hiden connection
                        if (!((dcSource instanceof IDiagramModelArchimateConnection && DiagramModelUtils.shouldBeHiddenConnection((IDiagramModelArchimateConnection) dcSource)) || (dcTarget instanceof IDiagramModelArchimateConnection && DiagramModelUtils.shouldBeHiddenConnection((IDiagramModelArchimateConnection) dcTarget)))) {
                            AddDiagramArchimateConnectionCommand cmd = new AddDiagramArchimateConnectionCommand((IConnectable) dcSource, (IConnectable) dcTarget, relation);
                            result.add(cmd);
                            // Store it
                            diagramComponentsThatWereAdded.add(cmd.getConnection());
                        }
                    }
                }
            }
        }
    }
    // Whether to add connections to elements
    Boolean value = (Boolean) request.getExtendedData().get(ArchimateDiagramTransferDropTargetListener.ADD_ELEMENT_CONNECTIONS);
    boolean addConnectionsToElements = value != null && value.booleanValue();
    // Newly added concepts will need new connections to both existing and newly added concepts
    for (IDiagramModelArchimateComponent dmComponent : diagramComponentsThatWereAdded) {
        IArchimateConcept archimateConcept = dmComponent.getArchimateConcept();
        for (IArchimateRelationship relation : ArchimateModelUtils.getAllRelationshipsForConcept(archimateConcept)) {
            /*
                 * If the user holds down the Copy key (Ctrl on win/lnx, Alt on Mac) then linked connections
                 * are not added on drag and drop. However, any selected relations' linked objects are added.
                 */
            if (!addConnectionsToElements && !fRelationsToAdd.contains(relation)) {
                continue;
            }
            // Find existing objects
            List<IDiagramModelArchimateComponent> sources = DiagramModelUtils.findDiagramModelComponentsForArchimateConcept(getTargetDiagramModel(), relation.getSource());
            List<IDiagramModelArchimateComponent> targets = DiagramModelUtils.findDiagramModelComponentsForArchimateConcept(getTargetDiagramModel(), relation.getTarget());
            // Add new ones too
            for (IDiagramModelArchimateComponent dmComponent2 : diagramComponentsThatWereAdded) {
                if (dmComponent != dmComponent2) {
                    IArchimateConcept archimateConcept2 = dmComponent2.getArchimateConcept();
                    if (archimateConcept2 == relation.getSource()) {
                        // Only need to add sources, not targets
                        sources.add(dmComponent2);
                    }
                }
            }
            // Make the Commands...
            for (IDiagramModelComponent dcSource : sources) {
                if (dcSource instanceof IConnectable && archimateConcept == relation.getTarget()) {
                    result.add(new AddDiagramArchimateConnectionCommand((IConnectable) dcSource, (IConnectable) dmComponent, relation));
                }
            }
            for (IDiagramModelComponent dcTarget : targets) {
                if (dcTarget instanceof IConnectable && archimateConcept == relation.getSource()) {
                    result.add(new AddDiagramArchimateConnectionCommand((IConnectable) dmComponent, (IConnectable) dcTarget, relation));
                }
            }
        }
    }
    // Then, if adding to an Archimate container type to create nesting, ask whether to add new relations if none exist...
    if (ConnectionPreferences.createRelationWhenAddingModelTreeElement() && getTargetContainer() instanceof IDiagramModelArchimateObject) {
        List<IDiagramModelArchimateObject> diagramObjectsThatWereAdded = new ArrayList<IDiagramModelArchimateObject>();
        for (IDiagramModelArchimateComponent dmc : diagramComponentsThatWereAdded) {
            if (dmc instanceof IDiagramModelArchimateObject) {
                diagramObjectsThatWereAdded.add((IDiagramModelArchimateObject) dmc);
            }
        }
        Command cmd = new CreateNestedArchimateConnectionsWithDialogCommand((IDiagramModelArchimateObject) getTargetContainer(), diagramObjectsThatWereAdded);
        result.add(cmd);
    }
    // return the full compound command
    return result;
}
Also used : CreateNestedArchimateConnectionsWithDialogCommand(com.archimatetool.editor.diagram.commands.CreateNestedArchimateConnectionsWithDialogCommand) ArrayList(java.util.ArrayList) AddDiagramObjectCommand(com.archimatetool.editor.diagram.commands.AddDiagramObjectCommand) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) AddDiagramModelReferenceCommand(com.archimatetool.editor.diagram.commands.AddDiagramModelReferenceCommand) CompoundCommand(org.eclipse.gef.commands.CompoundCommand) NonNotifyingCompoundCommand(com.archimatetool.editor.model.commands.NonNotifyingCompoundCommand) IDiagramModel(com.archimatetool.model.IDiagramModel) IArchimateElement(com.archimatetool.model.IArchimateElement) IArchimateConcept(com.archimatetool.model.IArchimateConcept) IArchimateRelationship(com.archimatetool.model.IArchimateRelationship) NonNotifyingCompoundCommand(com.archimatetool.editor.model.commands.NonNotifyingCompoundCommand) IConnectable(com.archimatetool.model.IConnectable) IDiagramModelComponent(com.archimatetool.model.IDiagramModelComponent) IDiagramModelArchimateConnection(com.archimatetool.model.IDiagramModelArchimateConnection) Point(org.eclipse.draw2d.geometry.Point) Point(org.eclipse.draw2d.geometry.Point) AddDiagramModelReferenceCommand(com.archimatetool.editor.diagram.commands.AddDiagramModelReferenceCommand) AddDiagramObjectCommand(com.archimatetool.editor.diagram.commands.AddDiagramObjectCommand) CreateNestedArchimateConnectionsWithDialogCommand(com.archimatetool.editor.diagram.commands.CreateNestedArchimateConnectionsWithDialogCommand) CompoundCommand(org.eclipse.gef.commands.CompoundCommand) NonNotifyingCompoundCommand(com.archimatetool.editor.model.commands.NonNotifyingCompoundCommand) Command(org.eclipse.gef.commands.Command) IDiagramModelArchimateComponent(com.archimatetool.model.IDiagramModelArchimateComponent) IDiagramModelArchimateObject(com.archimatetool.model.IDiagramModelArchimateObject) IArchimateModelObject(com.archimatetool.model.IArchimateModelObject) EObject(org.eclipse.emf.ecore.EObject) IDiagramModelArchimateObject(com.archimatetool.model.IDiagramModelArchimateObject)

Example 10 with IDiagramModelComponent

use of com.archimatetool.model.IDiagramModelComponent in project archi by archimatetool.

the class FormatPainterTool method handleButtonUp.

@Override
protected boolean handleButtonUp(int button) {
    if (button == 1) {
        Point pt = getLocation();
        EditPart editpart = getCurrentViewer().findObjectAt(pt);
        if (editpart != null && editpart.getModel() != null) {
            Object object = editpart.getModel();
            if (isPaintableObject(object)) {
                PaintFormat pf = FormatPainterInfo.INSTANCE.getPaintFormat();
                if (pf == null) {
                    FormatPainterInfo.INSTANCE.updatePaintFormat((IDiagramModelComponent) object);
                } else if (!isObjectLocked(object)) {
                    Command cmd = createCommand(pf, (IDiagramModelComponent) object);
                    if (cmd.canExecute()) {
                        executeCommand(cmd);
                    }
                }
            }
            return true;
        }
    }
    return false;
}
Also used : PaintFormat(com.archimatetool.editor.diagram.tools.FormatPainterInfo.PaintFormat) IDiagramModelComponent(com.archimatetool.model.IDiagramModelComponent) FontStyleCommand(com.archimatetool.editor.diagram.commands.FontStyleCommand) DiagramModelObjectAlphaCommand(com.archimatetool.editor.diagram.commands.DiagramModelObjectAlphaCommand) ConnectionTextPositionCommand(com.archimatetool.editor.diagram.commands.ConnectionTextPositionCommand) BorderColorCommand(com.archimatetool.editor.diagram.commands.BorderColorCommand) TextPositionCommand(com.archimatetool.editor.diagram.commands.TextPositionCommand) LineWidthCommand(com.archimatetool.editor.diagram.commands.LineWidthCommand) FontColorCommand(com.archimatetool.editor.diagram.commands.FontColorCommand) TextAlignmentCommand(com.archimatetool.editor.diagram.commands.TextAlignmentCommand) CompoundCommand(org.eclipse.gef.commands.CompoundCommand) FillColorCommand(com.archimatetool.editor.diagram.commands.FillColorCommand) LineColorCommand(com.archimatetool.editor.diagram.commands.LineColorCommand) Command(org.eclipse.gef.commands.Command) EditPart(org.eclipse.gef.EditPart) IDiagramModelArchimateObject(com.archimatetool.model.IDiagramModelArchimateObject) ILineObject(com.archimatetool.model.ILineObject) IDiagramModelObject(com.archimatetool.model.IDiagramModelObject) IBorderObject(com.archimatetool.model.IBorderObject) Point(org.eclipse.draw2d.geometry.Point)

Aggregations

IDiagramModelComponent (com.archimatetool.model.IDiagramModelComponent)18 ArrayList (java.util.ArrayList)13 Command (org.eclipse.gef.commands.Command)7 Test (org.junit.Test)6 IArchimateConcept (com.archimatetool.model.IArchimateConcept)5 IDiagramModel (com.archimatetool.model.IDiagramModel)5 IDiagramModelArchimateObject (com.archimatetool.model.IDiagramModelArchimateObject)5 IDiagramModelObject (com.archimatetool.model.IDiagramModelObject)5 IDiagramModelArchimateConnection (com.archimatetool.model.IDiagramModelArchimateConnection)4 EObject (org.eclipse.emf.ecore.EObject)4 IArchimateRelationship (com.archimatetool.model.IArchimateRelationship)3 IDiagramModelArchimateComponent (com.archimatetool.model.IDiagramModelArchimateComponent)3 EditPart (org.eclipse.gef.EditPart)3 CompoundCommand (org.eclipse.gef.commands.CompoundCommand)3 NonNotifyingCompoundCommand (com.archimatetool.editor.model.commands.NonNotifyingCompoundCommand)2 IArchimateElement (com.archimatetool.model.IArchimateElement)2 IDiagramModelReference (com.archimatetool.model.IDiagramModelReference)2 Point (org.eclipse.draw2d.geometry.Point)2 IStructuredSelection (org.eclipse.jface.viewers.IStructuredSelection)2 IArchimateDiagramEditor (com.archimatetool.editor.diagram.IArchimateDiagramEditor)1