blob: 0be8c4506a554197e8905d1ab7f58219b7fa2fdb [file] [log] [blame]
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));
}
}