Package org.activiti.designer.features

Source Code of org.activiti.designer.features.PasteFlowElementFeature

/**
*
*/
package org.activiti.designer.features;

import java.util.List;

import org.activiti.bpmn.model.FlowElement;
import org.activiti.designer.util.CloneUtil;
import org.activiti.designer.util.editor.Bpmn2MemoryModel;
import org.activiti.designer.util.editor.ModelHandler;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.graphiti.features.IAddFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.IPasteContext;
import org.eclipse.graphiti.features.context.impl.AddContext;
import org.eclipse.graphiti.features.context.impl.AreaContext;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.ui.features.AbstractPasteFeature;

/**
* Paste feature for flow elements.
*
* @author Tiese Barrell
* @since 0.6.1
* @version 1
*
*/
public class PasteFlowElementFeature extends AbstractPasteFeature {

  public static final int PASTE_OFFSET = 25;

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

  public boolean canPaste(IPasteContext context) {
    // only support pasting directly in the diagram (nothing else selected)
    PictogramElement[] pes = context.getPictogramElements();

    if (pes.length != 1 || !isPasteableContext(pes)) {
      return false;
    }
   
    List<FlowElement> copyList = ModelHandler.getModel(EcoreUtil.getURI(getDiagram())).getClipboard();
    if(copyList.size() > 0) {
      return true;
    } else {
      return false;
    }
  }

  private boolean isPasteableContext(PictogramElement[] pes) {
    return (pes[0] instanceof Diagram) || (pes[0] instanceof ContainerShape);
  }

  public void paste(IPasteContext context) {
    // we already verified, that we paste directly in the diagram
    Bpmn2MemoryModel model = ModelHandler.getModel(EcoreUtil.getURI(getDiagram()));
    List<FlowElement> copyList = model.getClipboard();

    for (FlowElement element : copyList) {
      FlowElement clone = CloneUtil.clone(element, getDiagram());
     
      AddContext addContext = new AddContext(new AreaContext(), clone);
      IAddFeature addFeature = getFeatureProvider().getAddFeature(addContext);
      PictogramElement pictogram = getFeatureProvider().getPictogramElementForBusinessObject(element);
      addContext.setLocation(pictogram.getGraphicsAlgorithm().getX() + PASTE_OFFSET, pictogram.getGraphicsAlgorithm().getY() + PASTE_OFFSET);
      addContext.setSize(pictogram.getGraphicsAlgorithm().getWidth(), pictogram.getGraphicsAlgorithm().getHeight());
      addContext.setTargetContainer(getDiagram());
      if(addFeature.canAdd(addContext)) {
        addFeature.add(addContext);
      }
    }
  }
}
TOP

Related Classes of org.activiti.designer.features.PasteFlowElementFeature

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.