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

Source Code of org.eclipse.bpmn2.modeler.ui.features.gateway.UpdateEventBasedGatewayFeature

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

import org.eclipse.bpmn2.EventBasedGateway;
import org.eclipse.bpmn2.EventBasedGatewayType;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
import org.eclipse.bpmn2.modeler.core.utils.StyleUtil;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.IReason;
import org.eclipse.graphiti.features.context.IUpdateContext;
import org.eclipse.graphiti.features.impl.AbstractUpdateFeature;
import org.eclipse.graphiti.features.impl.Reason;
import org.eclipse.graphiti.mm.algorithms.Ellipse;
import org.eclipse.graphiti.mm.algorithms.Polygon;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.services.IPeService;

public class UpdateEventBasedGatewayFeature extends AbstractUpdateFeature {

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

  @Override
  public boolean canUpdate(IUpdateContext context) {
    Object o = getBusinessObjectForPictogramElement(context.getPictogramElement());
    return o != null && o instanceof EventBasedGateway;
  }

  @Override
  public IReason updateNeeded(IUpdateContext context) {
    IPeService service = Graphiti.getPeService();

    boolean instantiate = Boolean.parseBoolean(service.getPropertyValue(context.getPictogramElement(),
            EventBasedGatewayFeatureContainer.INSTANTIATE_PROPERTY));
    EventBasedGatewayType gatewayType = EventBasedGatewayType.getByName(service.getPropertyValue(
            context.getPictogramElement(), EventBasedGatewayFeatureContainer.EVENT_GATEWAY_TYPE_PROPERTY));

    EventBasedGateway gateway = (EventBasedGateway) getBusinessObjectForPictogramElement(context
            .getPictogramElement());

    boolean changed = instantiate != gateway.isInstantiate() || gatewayType != gateway.getEventGatewayType();
    return changed ? Reason.createTrueReason() : Reason.createFalseReason();
  }

  @Override
  public boolean update(IUpdateContext context) {
    IPeService service = Graphiti.getPeService();

    EventBasedGateway gateway = (EventBasedGateway) getBusinessObjectForPictogramElement(context
            .getPictogramElement());

    clearGateway(context.getPictogramElement());

    if (gateway.isInstantiate()) {
      if (gateway.getEventGatewayType() == EventBasedGatewayType.PARALLEL) {
        drawParallelMultipleEventBased((ContainerShape) context.getPictogramElement());
      } else {
        drawExclusiveEventBased((ContainerShape) context.getPictogramElement());
      }
    } else {
      drawEventBased((ContainerShape) context.getPictogramElement());
    }

    service.setPropertyValue(context.getPictogramElement(), EventBasedGatewayFeatureContainer.INSTANTIATE_PROPERTY,
            Boolean.toString(gateway.isInstantiate()));
    service.setPropertyValue(context.getPictogramElement(),
            EventBasedGatewayFeatureContainer.EVENT_GATEWAY_TYPE_PROPERTY, gateway.getEventGatewayType().getName());
    return true;
  }

  private void clearGateway(PictogramElement element) {
    GraphicsUtil.clearGateway(element);
  }

  private void drawEventBased(ContainerShape container) {
    Ellipse outer = GraphicsUtil.createGatewayOuterCircle(container);
    outer.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
    Ellipse inner = GraphicsUtil.createGatewayInnerCircle(container);
    inner.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
    Polygon pentagon = GraphicsUtil.createGatewayPentagon(container);
    pentagon.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
    pentagon.setFilled(false);
  }

  private void drawExclusiveEventBased(ContainerShape container) {
    Ellipse ellipse = GraphicsUtil.createGatewayOuterCircle(container);
    ellipse.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
    Polygon pentagon = GraphicsUtil.createGatewayPentagon(container);
    pentagon.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
    pentagon.setFilled(false);
  }

  private void drawParallelMultipleEventBased(ContainerShape container) {
    Ellipse ellipse = GraphicsUtil.createGatewayOuterCircle(container);
    ellipse.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
    Polygon cross = GraphicsUtil.createEventGatewayParallelCross(container);
    cross.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND));
  }
}
TOP

Related Classes of org.eclipse.bpmn2.modeler.ui.features.gateway.UpdateEventBasedGatewayFeature

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.