package org.eclipse.ocl.examples.autogen.lookup; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.ocl.pivot.Model; import org.eclipse.ocl.pivot.Package; import org.eclipse.ocl.pivot.utilities.ClassUtil; import org.eclipse.ocl.pivot.utilities.EnvironmentFactory; import org.eclipse.ocl.pivot.utilities.MetamodelManager; import org.eclipse.ocl.pivot.utilities.OCL; public class LookupCGUtil { public static List<@NonNull Package> getTargetPackages(GenPackage genPackage, EnvironmentFactory envFact, String oclDocFilePath, String oclDocProjectName) { List<@NonNull Package> result = new ArrayList<@NonNull Package>(); URI projectResourceURI = URI.createPlatformResourceURI("/" + oclDocProjectName + "/", true); @NonNull URI nameResoURI = URI.createURI(oclDocFilePath).resolve(projectResourceURI); OCL ocl = envFact.createOCL(); try { Resource resource = ClassUtil.nonNullState(ocl.parse(nameResoURI)); for (EObject root : resource.getContents()) { if (root instanceof Model) { Package asPackage = ClassUtil.nonNullState(getPackage(genPackage, genPackage.getPrefix(), envFact)); for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package oclDocPackage : ((Model)root).getOwnedPackages()) { if (samePrimaryPackage(oclDocPackage, asPackage, envFact)) { result.add(oclDocPackage); } } } } } finally { ocl.dispose(); } return result; } public static org.eclipse.ocl.pivot.@Nullable Package getPackage(GenPackage genPackage, String packageName, EnvironmentFactory envFactory) { MetamodelManager metaModelManager = envFactory.getMetamodelManager(); for (GenPackage gPackage : genPackage.getGenModel().getAllGenAndUsedGenPackagesWithClassifiers()) { String name = gPackage.getPrefix(); if (name.startsWith(packageName)) { // FIXME startsWith ? Make this more robust EPackage eSuperPackage = gPackage.getEcorePackage(); return metaModelManager.getASOfEcore(org.eclipse.ocl.pivot.Package.class, eSuperPackage); } } return null; } private static boolean samePrimaryPackage(org.eclipse.ocl.pivot.@NonNull Package p1, org.eclipse.ocl.pivot.@NonNull Package p2, @NonNull EnvironmentFactory envFactory) { MetamodelManager mm = envFactory.getMetamodelManager(); return mm.getPrimaryPackage(p1).equals(mm.getPrimaryPackage(p2)); } }