blob: 201e25f9a7a465f4343c4df68535c53c61d2b017 [file] [log] [blame]
package org.eclipse.gendoc.bundle.acceleo.sirius.service;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
import org.eclipse.gendoc.bundle.acceleo.commons.files.CommonService;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.sirius.business.api.session.CustomDataConstants;
import org.eclipse.sirius.diagram.DSemanticDiagram;
import org.eclipse.sirius.viewpoint.description.AnnotationEntry;
public class SiriusServices {
public List<Diagram> getSiriusDiagrams (EObject self){
// TO IMPROVE ? reuse existing sirius services ?
CommonService.load(self, "aird");
ResourceSet set = null;
if (self.eResource() != null && self.eResource().getResourceSet() != null){
set = self.eResource().getResourceSet();
}
if (set == null){
return Arrays.asList();
}
ECrossReferenceAdapter cross = ECrossReferenceAdapter.getCrossReferenceAdapter(set);
if (cross == null){
cross = new ECrossReferenceAdapter();
set.eAdapters().add(cross);
}
List<Diagram> result = new LinkedList<Diagram>();
Collection<Setting> inverses = cross.getInverseReferences(self, true);
for (Setting s : inverses){
if (s.getEObject() instanceof DSemanticDiagram) {
DSemanticDiagram sem = (DSemanticDiagram) s.getEObject();
for (AnnotationEntry e : sem.getOwnedAnnotationEntries()){
if (CustomDataConstants.GMF_DIAGRAMS.equals(e.getSource()) && e.getData() instanceof Diagram){
result.add((Diagram) e.getData());
}
}
}
}
return result;
}
}