Package org.activiti.designer.util.eclipse

Source Code of org.activiti.designer.util.eclipse.ActivitiUiUtil

package org.activiti.designer.util.eclipse;

import java.util.Collection;
import java.util.List;

import org.activiti.bpmn.model.Activity;
import org.activiti.bpmn.model.Artifact;
import org.activiti.bpmn.model.Association;
import org.activiti.bpmn.model.BaseElement;
import org.activiti.bpmn.model.BoundaryEvent;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.Lane;
import org.activiti.bpmn.model.Pool;
import org.activiti.bpmn.model.Process;
import org.activiti.bpmn.model.SubProcess;
import org.activiti.bpmn.model.TextAnnotation;
import org.activiti.designer.util.editor.Bpmn2MemoryModel;
import org.activiti.designer.util.editor.ModelHandler;
import org.apache.commons.lang.ArrayUtils;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.graphiti.features.context.ICustomContext;
import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer;
import org.eclipse.graphiti.mm.algorithms.AlgorithmsFactory;
import org.eclipse.graphiti.mm.algorithms.Ellipse;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.services.IGaService;
import org.eclipse.graphiti.ui.editor.DiagramEditor;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.action.IAction;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;

public class ActivitiUiUtil {

  private static final String ID_PATTERN = "%s%s";

  public static void runModelChange(final Runnable runnable, final TransactionalEditingDomain editingDomain, final String label) {

    editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain, label) {

      protected void doExecute() {
        runnable.run();
      }
    });
  }

  @SuppressWarnings("rawtypes")
  public static boolean contextPertainsToBusinessObject(final ICustomContext context, final Class businessClass) {
    boolean result = false;
    EList<EObject> businessObjects = context.getInnerPictogramElement().getLink().getBusinessObjects();
    for (final EObject eobj : businessObjects) {
      if (businessClass.equals(eobj.getClass())) {
        result = true;
        break;
      }
    }
    return result;
  }

  @SuppressWarnings("rawtypes")
  public static Object getBusinessObjectFromContext(final ICustomContext context, final Class businessClass) {
    Object result = null;
    EList<EObject> businessObjects = context.getInnerPictogramElement().getLink().getBusinessObjects();
    for (final EObject eobj : businessObjects) {
      if (businessClass.equals(eobj.getClass())) {
        result = eobj;
        break;
      }
    }
    return result;
  }

  public static Ellipse createInvisibleEllipse(GraphicsAlgorithmContainer gaContainer, IGaService gaService) {
    Ellipse ret = AlgorithmsFactory.eINSTANCE.createEllipse();
    ret.setX(0);
    ret.setY(0);
    ret.setWidth(0);
    ret.setHeight(0);
    ret.setFilled(false);
    ret.setLineVisible(false);
    if (gaContainer instanceof PictogramElement) {
      PictogramElement pe = (PictogramElement) gaContainer;
      pe.setGraphicsAlgorithm(ret);
    } else if (gaContainer instanceof GraphicsAlgorithm) {
      GraphicsAlgorithm parentGa = (GraphicsAlgorithm) gaContainer;
      parentGa.getGraphicsAlgorithmChildren().add(ret);
    }
    return ret;
  }

  public static void doProjectReferenceChange(IProject currentProject, IJavaProject containerProject, String className) throws CoreException {

    if (currentProject.equals(containerProject.getProject())) {
      return;
    }

    IProjectDescription desc = currentProject.getDescription();
    IProject[] refs = desc.getReferencedProjects();
    IProject[] newRefs = new IProject[refs.length + 1];
    System.arraycopy(refs, 0, newRefs, 0, refs.length);
    newRefs[refs.length] = containerProject.getProject();
    desc.setReferencedProjects(newRefs);
    currentProject.setDescription(desc, new NullProgressMonitor());

    IPath dependsOnPath = containerProject.getProject().getFullPath();

    IJavaProject javaProject = (IJavaProject) currentProject.getNature(JavaCore.NATURE_ID);
    IClasspathEntry prjEntry = JavaCore.newProjectEntry(dependsOnPath, true);

    boolean dependsOnPresent = false;
    for (IClasspathEntry cpEntry : javaProject.getRawClasspath()) {
      if (cpEntry.equals(prjEntry)) {
        dependsOnPresent = true;
      }
    }

    if (!dependsOnPresent) {
      IClasspathEntry[] entryList = new IClasspathEntry[1];
      entryList[0] = prjEntry;
      IClasspathEntry[] newEntries = (IClasspathEntry[]) ArrayUtils.addAll(javaProject.getRawClasspath(), entryList);
      javaProject.setRawClasspath(newEntries, null);
    }

  }

  public static IProject getProjectFromDiagram(Diagram diagram) {

    IProject currentProject = null;
    Resource resource = diagram.eResource();

    URI uri = resource.getURI();
    URI uriTrimmed = uri.trimFragment();

    if (uriTrimmed.isPlatformResource()) {

      String platformString = uriTrimmed.toPlatformString(true);
      IResource fileResource = ResourcesPlugin.getWorkspace().getRoot().findMember(platformString);

      if (fileResource != null) {
        currentProject = fileResource.getProject();
      }
    } else {
      IResource fileResource = ResourcesPlugin.getWorkspace().getRoot().findMember(uriTrimmed.toString());
     
      if (fileResource != null) {
        currentProject = fileResource.getProject();
      }
    }
    return currentProject;
  }

  /**
   * Gets the {@link ActionRegistry} for the currently active editor.
   *
   * @return the ActionRegistry or null
   */
  public static final ActionRegistry getActionRegistry() {
    IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
    if (part instanceof DiagramEditor) {
      DiagramEditor editor = (DiagramEditor) part;
      return (ActionRegistry) editor.getAdapter(ActionRegistry.class);
    }
    return null;
  }

  /**
   * Runs the action with the provided id for the currently active editor, if
   * there is one.
   *
   * @param actionId
   *          the id of the action to run
   */
  public static final void runAction(final String actionId) {
    final ActionRegistry registry = getActionRegistry();
    if (registry != null) {
      final IAction action = registry.getAction(actionId);
      if (action != null) {
        action.run();
      }
    }
  }

  public static final String getNextId(final Class<? extends BaseElement> featureClass, final String featureIdKey, final Diagram diagram) {
    Bpmn2MemoryModel model = ModelHandler.getModel(EcoreUtil.getURI(diagram));
    int determinedId = 0;
   
    if (featureClass.equals(Pool.class)) {
      determinedId = loopThroughPools(featureClass, determinedId, model.getBpmnModel().getPools(), featureIdKey);
    } else {
   
      for (Process process : model.getBpmnModel().getProcesses()) {
         
        if (featureClass.equals(Lane.class)) {
          determinedId = loopThroughLanes(featureClass, determinedId, process.getLanes(), featureIdKey);
        } else if (featureClass.equals(TextAnnotation.class) || featureClass.equals(Association.class)) {
          determinedId = loopThroughArtifacts(featureClass, determinedId, process.getArtifacts(), featureIdKey);
        } else {
          determinedId = loopThroughElements(featureClass, determinedId, process.getFlowElements(), featureIdKey);
        }
      }
    }
    determinedId++;
    return String.format(ID_PATTERN, featureIdKey, determinedId);
  }
 
  public static int loopThroughPools(final Class<? extends BaseElement> featureClass, int determinedId,
      List<Pool> poolList, final String featureIdKey) {
   
    for (Pool pool : poolList) {
      String contentObjectId = pool.getId().replace(featureIdKey, "");
      determinedId = getId(contentObjectId, determinedId);
    }
    return determinedId;
  }
 
  public static int loopThroughLanes(final Class<? extends BaseElement> featureClass, int determinedId,
      List<Lane> laneList, final String featureIdKey) {
   
    for (Lane lane : laneList) {
      String contentObjectId = lane.getId().replace(featureIdKey, "");
      determinedId = getId(contentObjectId, determinedId);
    }
    return determinedId;
  }
 
  public static int loopThroughArtifacts(final Class<? extends BaseElement> featureClass, int determinedId,
      Collection<Artifact> artifactList, final String featureIdKey) {
   
    for (Artifact artifact : artifactList) {
      String contentObjectId = artifact.getId().replace(featureIdKey, "");
      determinedId = getId(contentObjectId, determinedId);
    }
    return determinedId;
  }
 
  public static int loopThroughElements(final Class<? extends BaseElement> featureClass, int determinedId,
      Collection<FlowElement> elementList, final String featureIdKey) {
   
    for (FlowElement element : elementList) {
     
      if(element instanceof SubProcess) {
        determinedId = loopThroughElements(featureClass, determinedId, ((SubProcess) element).getFlowElements(), featureIdKey);
      }
     
      if(featureClass == BoundaryEvent.class && element instanceof Activity) {
        Activity activity = (Activity) element;
        for (BoundaryEvent boundaryEvent : activity.getBoundaryEvents()) {
          if (boundaryEvent.getId() != null) {
            String contentObjectId = boundaryEvent.getId().replace(featureIdKey, "");
            determinedId = getId(contentObjectId, determinedId);
          }
        }
      }
     
      if (element.getClass() == featureClass) {
        String contentObjectId = element.getId().replace(featureIdKey, "");
        determinedId = getId(contentObjectId, determinedId);
      }
    }
    return determinedId;
  }
 
  private static int getId(String contentObjectId, int determinedId) {
    int newdId = determinedId;
    boolean isNumber = true;
    if(contentObjectId != null && contentObjectId.length() > 0) {
     
      for(int i = 0; i < contentObjectId.length(); i++) {
        if(Character.isDigit(contentObjectId.charAt(i)) == false) {
          isNumber = false;
        }
      }
      if(isNumber == true) {
        Integer intNumber = Integer.valueOf(contentObjectId);
        if (intNumber > newdId) {
          newdId = intNumber;
        }
      }
    }
    return newdId;
  }

}
TOP

Related Classes of org.activiti.designer.util.eclipse.ActivitiUiUtil

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.