package org.eclipse.bpmn2.modeler.core.utils; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IMarker; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EValidator; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.mm.pictograms.ContainerShape; import org.eclipse.graphiti.mm.pictograms.PictogramElement; public class MarkerUtils { public static List<EObject> getAllObjects(ResourceSet resourceSet, IMarker marker) { List<EObject> result = new ArrayList<EObject>(); result.add(getTargetObject(resourceSet, marker)); result.addAll(getRelatedObjects(resourceSet, marker)); return result; } public static List<EObject> getRelatedObjects(ResourceSet resourceSet, IMarker marker) { List<EObject> result = new ArrayList<EObject>(); String targetUri = marker.getAttribute(EValidator.URI_ATTRIBUTE, null); String uriString = marker.getAttribute(EValidator.RELATED_URIS_ATTRIBUTE,null); if (uriString!=null) { String[] uris = uriString.split(" "); //$NON-NLS-1$ for (String s : uris) { if (s.equals(targetUri)) continue; URI uri = URI.createURI(s); EObject o = resourceSet.getEObject(uri, false); if (!(o instanceof EStructuralFeature)) result.add(o); } } return result; } public static EObject getTargetObject(ResourceSet resourceSet, IMarker marker) { final String uriString = marker.getAttribute(EValidator.URI_ATTRIBUTE, null); final URI uri = uriString == null ? null : URI.createURI(uriString); if (uri == null) { return null; } return resourceSet.getEObject(uri, false); } public static ContainerShape getContainerShape(IFeatureProvider fp, IMarker marker) { ResourceSet rs = fp.getDiagramTypeProvider().getDiagramBehavior().getEditingDomain().getResourceSet(); for (EObject o : getAllObjects(rs, marker)) { for (PictogramElement pe : fp.getAllPictogramElementsForBusinessObject(o)) { if (pe instanceof ContainerShape) return (ContainerShape)pe; } } return null; } }