Package org.jbpm.ui.common.part.graph

Source Code of org.jbpm.ui.common.part.graph.TransitionGraphicalEditPart

package org.jbpm.ui.common.part.graph;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.draw2d.AbsoluteBendpoint;
import org.eclipse.draw2d.Connection;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.RoutingListener;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.editparts.AbstractConnectionEditPart;
import org.jbpm.ui.PluginConstants;
import org.jbpm.ui.common.figure.TransitionFigure;
import org.jbpm.ui.common.model.Bendpoint;
import org.jbpm.ui.common.model.Decision;
import org.jbpm.ui.common.model.ITimed;
import org.jbpm.ui.common.model.NotificationMessages;
import org.jbpm.ui.common.model.Transition;
import org.jbpm.ui.common.policy.ActiveLayoutEditPolicy;
import org.jbpm.ui.common.policy.TransitionConnectionBendpointEditPolicy;
import org.jbpm.ui.common.policy.TransitionConnectionEditPolicy;
import org.jbpm.ui.common.policy.TransitionConnectionEndpointsEditPolicy;
import org.jbpm.ui.custom.CustomizationRegistry;
import org.jbpm.ui.custom.IDecisionProvider;

public abstract class TransitionGraphicalEditPart extends AbstractConnectionEditPart implements NotificationMessages, PropertyChangeListener, ActionsHost {

    @Override
    public Transition getModel() {
        return (Transition) super.getModel();
    }

    @Override
    public TransitionFigure getFigure() {
        return (TransitionFigure) super.getFigure();
    }

    @Override
    protected IFigure createFigure() {
        Transition transition = getModel();
        final TransitionFigure figure = transition.getTypeDefinition().createFigure(getModel().getProcessDefinition());
        figure.setRoutingConstraint(constructFigureBendpointList());
        if (transition.getSource() instanceof Decision) {
            figure.setLabelText(transition.getName());
        }
        if (transition.getSource() instanceof ITimed && transition.getName().equals(PluginConstants.TIMER_TRANSITION_NAME)) {
          ITimed state = (ITimed) transition.getSource();
            figure.setLabelText(state.getDuration().toString());
        }
      boolean exclusive = getModel().getSource().isExclusive() && getModel().getSource().getLeavingTransitions().size() > 1;
        figure.setExclusive(exclusive);
      if (getModel().getSource() instanceof Decision) {
            Decision decision = (Decision) getModel().getSource();
            IDecisionProvider provider = CustomizationRegistry.getProvider(decision);
            if (transition.getName().equals(provider.getDefaultTransitionName(decision))) {
                figure.setDefaultFlow(true);
            }
      }
        figure.addRoutingListener(new RoutingListener() {
            public void invalidate(Connection connection) {
            }
            public void postRoute(Connection connection) {
                if (!getModel().getProcessDefinition().isShowActions()) {
                    return;
                }
                getFigure().checkActionsFitInFigure();
            }
            public void remove(Connection connection) {
            }
            public boolean route(Connection connection) {
                return false;
            }
            public void setConstraint(Connection connection, Object constraint) {
            }
        });
        //decorateFigure(figure);
        return figure;
    }

    private List<AbsoluteBendpoint> constructFigureBendpointList() {
        List<Bendpoint> modelBendpoints = getModel().getBendpoints();
        List<AbsoluteBendpoint> result = new ArrayList<AbsoluteBendpoint>(modelBendpoints.size());
        for (Bendpoint bendpoint : modelBendpoints) {
            result.add(new AbsoluteBendpoint(bendpoint.getX(), bendpoint.getY()));
        }
        return result;
    }

    @Override
    protected void refreshVisuals() {
        TransitionFigure f = getFigure();
        f.setRoutingConstraint(constructFigureBendpointList());
        decorateFigure(f);
    }
   
    private void decorateFigure(TransitionFigure f) {
        f.updateSourceDecoration();
    }

    @Override
    protected void createEditPolicies() {
        installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new TransitionConnectionEndpointsEditPolicy());
        installEditPolicy(EditPolicy.CONNECTION_ROLE, new TransitionConnectionEditPolicy());
        installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, new TransitionConnectionBendpointEditPolicy());
        installEditPolicy(EditPolicy.LAYOUT_ROLE, new ActiveLayoutEditPolicy());
    }

    @Override
    public void activate() {
        if (!isActive()) {
            getModel().addPropertyChangeListener(this);
            if (getModel().getSource() instanceof ITimed) {
                getModel().getSource().addPropertyChangeListener(this);
            }
            super.activate();
        }
    }

    @Override
    protected List<? extends Object> getModelChildren() {
        if (getModel().getProcessDefinition().isShowActions()) {
            return getModel().getActions();
        }
        return super.getModelChildren();
    }

    @Override
    public void deactivate() {
        if (isActive()) {
            getModel().removePropertyChangeListener(this);
            if (getModel().getSource() instanceof ITimed) {
                getModel().getSource().removePropertyChangeListener(this);
            }
            super.deactivate();
        }
    }

    public void refreshActionsVisibility(boolean visible) {
        refresh();
    }

    public void propertyChange(PropertyChangeEvent evt) {
        String messageId = evt.getPropertyName();
        if (TRANSITION_BENDPOINTS_CHANGED.equals(messageId)) {
            refreshVisuals();
        } else if (PROPERTY_NAME.equals(messageId) && evt.getSource() instanceof Transition) {
            Transition transition = getModel();
            if (transition.getSource() instanceof Decision) {
                getFigure().setLabelText(transition.getName());
                refreshVisuals();
                // update decision configuration
                Decision decision = (Decision) transition.getSource();
                IDecisionProvider provider = CustomizationRegistry.getProvider(decision);
                provider.transitionRenamed(decision, (String) evt.getOldValue(), (String) evt.getNewValue());
            }
            if (transition.getSource() instanceof ITimed) {
                ITimed state = (ITimed) transition.getSource();
                String labelText = state.timerExist() ? state.getDuration().toString() : "";
                getFigure().setLabelText(labelText);
                refreshVisuals();
            }
        } else if (PROPERTY_TIMER_DURATION.equals(messageId)) {
            Transition transition = getModel();
            if (transition.getName().equals(PluginConstants.TIMER_TRANSITION_NAME)) {
              ITimed state = (ITimed) transition.getSource();
                getFigure().setLabelText(state.getDuration().toString());
                refreshVisuals();
            }
        } else if (NODE_CHILDS_CHANGED.equals(messageId)) {
            refreshChildren();
        }
    }
   
}
TOP

Related Classes of org.jbpm.ui.common.part.graph.TransitionGraphicalEditPart

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.