Package org.eclipse.bpmn2.modeler.core.features

Source Code of org.eclipse.bpmn2.modeler.core.features.AbstractBpmnAddFeature

/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
*  All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.bpmn2.modeler.core.features;

import java.io.IOException;
import java.util.List;

import org.eclipse.bpmn2.Activity;
import org.eclipse.bpmn2.Association;
import org.eclipse.bpmn2.BaseElement;
import org.eclipse.bpmn2.MessageFlow;
import org.eclipse.bpmn2.SequenceFlow;
import org.eclipse.bpmn2.di.BPMNDiagram;
import org.eclipse.bpmn2.di.BPMNEdge;
import org.eclipse.bpmn2.di.BPMNShape;
import org.eclipse.bpmn2.di.BpmnDiFactory;
import org.eclipse.bpmn2.modeler.core.Activator;
import org.eclipse.bpmn2.modeler.core.ModelHandler;
import org.eclipse.bpmn2.modeler.core.ModelHandlerLocator;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.dd.dc.Bounds;
import org.eclipse.dd.dc.DcFactory;
import org.eclipse.dd.dc.Point;
import org.eclipse.dd.di.DiagramElement;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.graphiti.datatypes.ILocation;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.impl.AbstractAddShapeFeature;
import org.eclipse.graphiti.mm.pictograms.Connection;
import org.eclipse.graphiti.mm.pictograms.Shape;
import org.eclipse.graphiti.services.Graphiti;

public abstract class AbstractBpmnAddFeature extends AbstractAddShapeFeature {

  public AbstractBpmnAddFeature(IFeatureProvider fp) {
    super(fp);
  }

  protected void createDIShape(Shape gShape, BaseElement elem) {
    try {
      BPMNShape shape = (BPMNShape) ModelHandlerLocator.getModelHandler(getDiagram().eResource()).findDIElement(
          getDiagram(), elem);
      createDIShape(gShape, elem, shape);
    } catch (IOException e) {
      Activator.logError(e);
    }
  }

  protected void createDIShape(Shape gShape, BaseElement elem, BPMNShape shape) {
    ILocation loc = Graphiti.getLayoutService().getLocationRelativeToDiagram(gShape);
    if (shape == null) {
      EList<EObject> businessObjects = Graphiti.getLinkService().getLinkForPictogramElement(getDiagram())
          .getBusinessObjects();
      for (EObject eObject : businessObjects) {
        if (eObject instanceof BPMNDiagram) {
          BPMNDiagram bpmnDiagram = (BPMNDiagram) eObject;

          shape = BpmnDiFactory.eINSTANCE.createBPMNShape();
//          shape.setId(EcoreUtil.generateUUID());
          shape.setBpmnElement(elem);
          Bounds bounds = DcFactory.eINSTANCE.createBounds();
          if (elem instanceof Activity) {
            bounds.setHeight(gShape.getGraphicsAlgorithm().getHeight());
          } else {
            bounds.setHeight(gShape.getGraphicsAlgorithm().getHeight());
          }
          bounds.setWidth(gShape.getGraphicsAlgorithm().getWidth());
          bounds.setX(loc.getX());
          bounds.setY(loc.getY());
          shape.setBounds(bounds);

          addShape(shape, bpmnDiagram);
          ModelUtil.setID(shape);
        }
      }
    }
    link(gShape, new Object[] { elem, shape });
  }

  private void addShape(DiagramElement elem, BPMNDiagram bpmnDiagram) {
    List<DiagramElement> elements = bpmnDiagram.getPlane().getPlaneElement();
    elements.add(elem);
  }

  protected void createDIEdge(Connection connection, BaseElement conElement) {
    try {
      BPMNEdge edge = (BPMNEdge) ModelHandlerLocator.getModelHandler(getDiagram().eResource()).findDIElement(
          getDiagram(), conElement);
      createDIEdge(connection, conElement, edge);
    } catch (IOException e) {
      Activator.logError(e);
    }

  }

  protected void createDIEdge(Connection connection, BaseElement conElement, BPMNEdge edge) throws IOException {
    ModelHandler modelHandler = ModelHandlerLocator.getModelHandler(getDiagram().eResource());
    if (edge == null) {
      EList<EObject> businessObjects = Graphiti.getLinkService().getLinkForPictogramElement(getDiagram())
          .getBusinessObjects();
      for (EObject eObject : businessObjects) {
        if (eObject instanceof BPMNDiagram) {
          BPMNDiagram bpmnDiagram = (BPMNDiagram) eObject;

          edge = BpmnDiFactory.eINSTANCE.createBPMNEdge();
//          edge.setId(EcoreUtil.generateUUID());
          edge.setBpmnElement(conElement);

          if (conElement instanceof Association) {
            edge.setSourceElement(modelHandler.findDIElement(getDiagram(),
                ((Association) conElement).getSourceRef()));
            edge.setTargetElement(modelHandler.findDIElement(getDiagram(),
                ((Association) conElement).getTargetRef()));
          } else if (conElement instanceof MessageFlow) {
            edge.setSourceElement(modelHandler.findDIElement(getDiagram(),
                (BaseElement) ((MessageFlow) conElement).getSourceRef()));
            edge.setTargetElement(modelHandler.findDIElement(getDiagram(),
                (BaseElement) ((MessageFlow) conElement).getTargetRef()));
          } else if (conElement instanceof SequenceFlow) {
            edge.setSourceElement(modelHandler.findDIElement(getDiagram(),
                ((SequenceFlow) conElement).getSourceRef()));
            edge.setTargetElement(modelHandler.findDIElement(getDiagram(),
                ((SequenceFlow) conElement).getTargetRef()));
          }

          ILocation sourceLoc = Graphiti.getPeService().getLocationRelativeToDiagram(connection.getStart());
          ILocation targetLoc = Graphiti.getPeService().getLocationRelativeToDiagram(connection.getEnd());

          Point point = DcFactory.eINSTANCE.createPoint();
          point.setX(sourceLoc.getX());
          point.setY(sourceLoc.getY());
          edge.getWaypoint().add(point);

          point = DcFactory.eINSTANCE.createPoint();
          point.setX(targetLoc.getX());
          point.setY(targetLoc.getY());
          edge.getWaypoint().add(point);

          addShape(edge, bpmnDiagram);
          ModelUtil.setID(edge);
        }
      }
    }
    link(connection, new Object[] { conElement, edge });
  }
}
TOP

Related Classes of org.eclipse.bpmn2.modeler.core.features.AbstractBpmnAddFeature

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.