Package org.eclipse.bpmn2.modeler.ui.features.choreography

Source Code of org.eclipse.bpmn2.modeler.ui.features.choreography.ChoreographyMessageLinkFeatureContainer

/*******************************************************************************
* 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.ui.features.choreography;

import java.util.List;
import java.util.Map;

import org.eclipse.bpmn2.ChoreographyActivity;
import org.eclipse.bpmn2.di.BPMNShape;
import org.eclipse.bpmn2.modeler.core.features.BusinessObjectUtil;
import org.eclipse.bpmn2.modeler.core.features.DefaultBpmnDeleteFeature;
import org.eclipse.bpmn2.modeler.core.features.PropertyBasedFeatureContainer;
import org.eclipse.bpmn2.modeler.core.features.choreography.ChoreographyProperties;
import org.eclipse.bpmn2.modeler.core.utils.AnchorUtil;
import org.eclipse.bpmn2.modeler.core.utils.AnchorUtil.AnchorLocation;
import org.eclipse.bpmn2.modeler.core.utils.AnchorUtil.BoundaryAnchor;
import org.eclipse.bpmn2.modeler.core.utils.Tuple;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.graphiti.features.IAddFeature;
import org.eclipse.graphiti.features.ICreateFeature;
import org.eclipse.graphiti.features.IDeleteFeature;
import org.eclipse.graphiti.features.IDirectEditingFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.ILayoutFeature;
import org.eclipse.graphiti.features.IMoveShapeFeature;
import org.eclipse.graphiti.features.IResizeShapeFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
import org.eclipse.graphiti.features.context.IDeleteContext;
import org.eclipse.graphiti.features.context.IMoveShapeContext;
import org.eclipse.graphiti.features.context.IResizeShapeContext;
import org.eclipse.graphiti.features.impl.AbstractMoveShapeFeature;
import org.eclipse.graphiti.features.impl.DefaultResizeShapeFeature;
import org.eclipse.graphiti.mm.pictograms.Connection;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;

public class ChoreographyMessageLinkFeatureContainer extends PropertyBasedFeatureContainer {

  @Override
  protected String getPropertyKey() {
    return ChoreographyProperties.MESSAGE_LINK;
  }

  @Override
  protected boolean canApplyToProperty(String value) {
    return new Boolean(value);
  }

  @Override
  public ICreateFeature getCreateFeature(IFeatureProvider fp) {
    return null;
  }

  @Override
  public IAddFeature getAddFeature(IFeatureProvider fp) {
    return null;
  }

  @Override
  public IUpdateFeature getUpdateFeature(IFeatureProvider fp) {
    return null;
  }

  @Override
  public IDirectEditingFeature getDirectEditingFeature(IFeatureProvider fp) {
    return null;
  }

  @Override
  public ILayoutFeature getLayoutFeature(IFeatureProvider fp) {
    return null;
  }

  @Override
  public IMoveShapeFeature getMoveFeature(IFeatureProvider fp) {
    return new AbstractMoveShapeFeature(fp) {

      @Override
      public void moveShape(IMoveShapeContext context) {
      }

      @Override
      public boolean canMoveShape(IMoveShapeContext context) {
        return false;
      }
    };
  }

  @Override
  public IResizeShapeFeature getResizeFeature(IFeatureProvider fp) {
    return new DefaultResizeShapeFeature(fp) {
      @Override
      public boolean canResizeShape(IResizeShapeContext context) {
        return false;
      }
    };
  }

  @Override
  public IDeleteFeature getDeleteFeature(IFeatureProvider fp) {
    return new DefaultBpmnDeleteFeature(fp) {

      @Override
      public void delete(IDeleteContext context) {
        ContainerShape envelope = (ContainerShape) context.getPictogramElement();
        Map<AnchorLocation, BoundaryAnchor> boundaryAnchors = AnchorUtil.getBoundaryAnchors(envelope);
        BoundaryAnchor topBoundaryAnchor = boundaryAnchors.get(AnchorLocation.TOP);
        BoundaryAnchor bottomBoundaryAnchor = boundaryAnchors.get(AnchorLocation.BOTTOM);
        modifyAffectedBands(topBoundaryAnchor);
        modifyAffectedBands(bottomBoundaryAnchor);
        super.delete(context);
      }

      private void modifyAffectedBands(BoundaryAnchor anchor) {

        for (Connection connection : anchor.anchor.getIncomingConnections()) {

          EObject start = connection.getStart().eContainer();

          if (!(start instanceof ContainerShape)) {
            continue;
          }

          if (!BusinessObjectUtil.containsElementOfType((PictogramElement) start, ChoreographyActivity.class)) {
            continue;
          }

          List<ContainerShape> bands = ChoreographyUtil
              .getParticipantBandContainerShapes((ContainerShape) start);

          Tuple<List<ContainerShape>, List<ContainerShape>> topAndBottomBands = ChoreographyUtil
              .getTopAndBottomBands(bands);

          List<ContainerShape> affectedBands = anchor.locationType == AnchorLocation.BOTTOM ? topAndBottomBands
              .getFirst() : topAndBottomBands.getSecond();

          for (ContainerShape bottomBand : affectedBands) {
            BPMNShape bpmnShape = BusinessObjectUtil.getFirstElementOfType(bottomBand, BPMNShape.class);
            bpmnShape.setIsMessageVisible(false);
          }

          break;
        }
      }
    };
  }
}
TOP

Related Classes of org.eclipse.bpmn2.modeler.ui.features.choreography.ChoreographyMessageLinkFeatureContainer

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.