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

Source Code of org.eclipse.bpmn2.modeler.core.features.activity.ActivityLoopAndMultiInstanceMarkerUpdateFeature

/*******************************************************************************
* 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.activity;

import org.eclipse.bpmn2.Activity;
import org.eclipse.bpmn2.LoopCharacteristics;
import org.eclipse.bpmn2.MultiInstanceLoopCharacteristics;
import org.eclipse.bpmn2.StandardLoopCharacteristics;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
import org.eclipse.bpmn2.modeler.core.utils.StyleUtil;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil.Loop;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil.MultiInstance;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;

public class ActivityLoopAndMultiInstanceMarkerUpdateFeature extends AbstractMarkerUpdateFeature {

  public static String IS_LOOP_OR_MULTI_INSTANCE = "marker.loop.or.multi";

  enum LoopCharacteristicType {
   
    NULL("null"),
   
    LOOP(StandardLoopCharacteristics.class.getSimpleName()),
   
    MULTI_PARALLEL(MultiInstanceLoopCharacteristics.class.getSimpleName() + ":parallel"),
   
    MULTI_SEQUENTIAL(MultiInstanceLoopCharacteristics.class.getSimpleName() + ":sequential");

    private String name;

    private LoopCharacteristicType(String name) {
      this.name = name;
    }

    String getName() {
      return name;
    }
  }

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

  @Override
  String getPropertyKey() {
    return IS_LOOP_OR_MULTI_INSTANCE;
  }

  @Override
  boolean isPropertyChanged(Activity activity, String propertyValue) {
    return !getLoopCharacteristicsValue(activity).getName().equals(propertyValue);
  }

  @Override
  void doUpdate(Activity activity, ContainerShape markerContainer) {
    GraphicsUtil.clearActivityMarker(markerContainer, GraphicsUtil.ACTIVITY_MARKER_LOOP_CHARACTERISTIC);
    switch (getLoopCharacteristicsValue(activity)) {
    case LOOP:
      Loop loop = GraphicsUtil.createActivityMarkerStandardLoop(markerContainer);
      loop.circle.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      loop.arrow.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      break;
    case MULTI_PARALLEL:
      MultiInstance multiParallel = GraphicsUtil.createActivityMarkerMultiParallel(markerContainer);
      multiParallel.line1.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      multiParallel.line2.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      multiParallel.line3.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      break;
    case MULTI_SEQUENTIAL:
      MultiInstance multiSeq = GraphicsUtil.createActivityMarkerMultiSequential(markerContainer);
      multiSeq.line1.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      multiSeq.line2.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      multiSeq.line3.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
      break;
    }
  }

  @Override
  String convertPropertyToString(Activity activity) {
    return getLoopCharacteristicsValue(activity).getName();
  }

  public static LoopCharacteristicType getLoopCharacteristicsValue(Activity activity) {
    LoopCharacteristics loopCharacteristics = activity.getLoopCharacteristics();
    LoopCharacteristicType type = LoopCharacteristicType.NULL;

    if (loopCharacteristics != null) {
      if (loopCharacteristics instanceof MultiInstanceLoopCharacteristics) {
        MultiInstanceLoopCharacteristics multi = (MultiInstanceLoopCharacteristics) loopCharacteristics;
        type = multi.isIsSequential() ? LoopCharacteristicType.MULTI_SEQUENTIAL
                : LoopCharacteristicType.MULTI_PARALLEL;
      } else {
        type = LoopCharacteristicType.LOOP;
      }
    }

    return type;
  }
}
TOP

Related Classes of org.eclipse.bpmn2.modeler.core.features.activity.ActivityLoopAndMultiInstanceMarkerUpdateFeature

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.