/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.diagram.ui.custom;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.ecore.EObject;
import org.teiid.designer.diagram.ui.editor.DiagramEditor;
import org.teiid.designer.diagram.ui.editor.DiagramEditorUtil;
import org.teiid.designer.diagram.ui.model.DiagramModelNode;
import org.teiid.designer.diagram.ui.part.DropEditPartHelper;
import org.teiid.designer.diagram.ui.util.DiagramUiUtilities;
import org.teiid.designer.metamodels.diagram.Diagram;
/**
* This class provides the Add To Diagram capability for DND on to Custom diagrams
* @since 8.0
*/
public class CustomDiagramDropEditPartHelper extends DropEditPartHelper {
private CustomDiagramEditPart customDiagramEditPart;
/**
*
* @since 4.3
*/
public CustomDiagramDropEditPartHelper(CustomDiagramEditPart customDiagramEditPart) {
super();
this.customDiagramEditPart = customDiagramEditPart;
}
/**
* Implemented to determine which role container to drop the incoming eObject list.
* @see org.teiid.designer.diagram.ui.part.DropEditPart#drop(org.eclipse.draw2d.geometry.Point, java.util.List)
* @since 4.2
*/
@Override
public void drop(Point dropPoint, List dropList) {
// Get some pertinent information. Diagram, Diagram's model node & DiagramEditor
Diagram diagram = (Diagram)customDiagramEditPart.getModelObject();
DiagramModelNode diagramRootModelNode = (DiagramModelNode)customDiagramEditPart.getModel();
DiagramEditor diagramEditor = DiagramEditorUtil.getDiagramEditor(diagram);
// Now add the objects to the custom diagram
List addedObjects = CustomDiagramContentHelper.addToCustomDiagram(diagram, dropList, diagramEditor, this);
// Let's do some layout here based on the dropPoint
layoutNewNodes(dropPoint, addedObjects, diagram, diagramRootModelNode);
}
/**
* @see org.teiid.designer.diagram.ui.part.DropEditPart#allowsDrop(org.eclipse.draw2d.geometry.Point, java.util.List)
* @since 4.3
*/
@Override
public boolean allowsDrop(Object target,
List dropList) {
if( target instanceof CustomDiagramEditPart ) {
return dropList != null && !dropList.isEmpty();
}
return false;
}
private void layoutNewNodes(Point dropPoint, List addedObjects, Diagram diagram, DiagramModelNode diagramRootModelNode) {
List diagramNodes = new ArrayList(addedObjects.size());
for( Iterator iter = addedObjects.iterator(); iter.hasNext(); ) {
EObject nextEObj = (EObject)iter.next();
DiagramModelNode nextNode = DiagramUiUtilities.getDiagramModelNode(nextEObj, diagramRootModelNode);
if( nextNode != null ) {
diagramNodes.add(nextNode);
}
}
Point startPoint = new Point(dropPoint);
for( Iterator iter = diagramNodes.iterator(); iter.hasNext(); ) {
DiagramModelNode nextNode = (DiagramModelNode)iter.next();
nextNode.setPosition(startPoint);
startPoint.x += 20;
startPoint.y += 20;
}
}
}