@Override public @NonNull Model getASModel() { Model pivotModel2 = pivotModel; if (pivotModel2 == null) { loadImports(ecoreResource); pivotModel2 = pivotModel = importObjects(ClassUtil.nonNullEMF(ecoreResource.getContents()), createPivotURI()); @SuppressWarnings("null") @NonNull Resource asResource = pivotModel2.eResource(); AliasAdapter ecoreAdapter = AliasAdapter.findAdapter(ecoreResource); if (ecoreAdapter != null) { Map<EObject, String> ecoreAliasMap = ecoreAdapter.getAliasMap(); AliasAdapter pivotAdapter = AliasAdapter.getAdapter(asResource); Map<EObject, String> pivotAliasMap = pivotAdapter.getAliasMap(); for (EObject eObject : ecoreAliasMap.keySet()) { String alias = ecoreAliasMap.get(eObject); Element element = newCreateMap.get(eObject); pivotAliasMap.put(element, alias); } } metamodelManager.installResource(asResource); installImports(); } return pivotModel2; }
public static Ecore2AS loadFromEcore(@NonNull ASResource ecoreASResource, @NonNull URI ecoreURI) { EnvironmentFactoryInternal environmentFactory = PivotUtilInternal.getEnvironmentFactory(ecoreASResource); ResourceSet resourceSet = environmentFactory.getResourceSet(); Resource ecoreResource = resourceSet.getResource(ecoreURI, true); if (ecoreResource == null) { return null; } Ecore2AS conversion = getAdapter(ecoreResource, environmentFactory); conversion.loadImports(ecoreResource); // if (asMetamodels != null) { // // } PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager(); conversion.pivotModel = PivotUtil.createModel(ecoreASResource.getURI().toString()); // conversion.installImports(); conversion.update(ecoreASResource, ClassUtil.nonNullEMF(ecoreResource.getContents())); AliasAdapter ecoreAdapter = AliasAdapter.findAdapter(ecoreResource); if (ecoreAdapter != null) { Map<EObject, String> ecoreAliasMap = ecoreAdapter.getAliasMap(); AliasAdapter pivotAdapter = AliasAdapter.getAdapter(ecoreASResource); Map<EObject, String> pivotAliasMap = pivotAdapter.getAliasMap(); for (EObject eObject : ecoreAliasMap.keySet()) { String alias = ecoreAliasMap.get(eObject); Element element = conversion.newCreateMap.get(eObject); pivotAliasMap.put(element, alias); } } metamodelManager.installResource(ecoreASResource); conversion.installImports(); return conversion; }
protected void loadImports(@NonNull EPackage ePackage, @Nullable URI baseURI) { if (ClassUtil.basicGetMetamodelAnnotation(ePackage) != null) { if (asMetamodels == null) { asMetamodels = new HashSet<EPackage>(); } asMetamodels.add(ePackage); } EAnnotation importAnnotation = ePackage.getEAnnotation(PivotConstants.IMPORT_ANNOTATION_SOURCE); if (importAnnotation != null) { EMap<String, String> details = importAnnotation.getDetails(); for (String key : details.keySet()) { URI uri = URI.createURI(details.get(key)); uri = resolveImportURI(uri, ePackage, baseURI); assert uri != null; ResourceSet resourceSet = environmentFactory.getResourceSet(); EObject importedEObject = null; String fragment = uri.fragment(); if (fragment == null) { importedEObject = resourceSet.getPackageRegistry().getEPackage(uri.toString()); } else { importedEObject = resourceSet.getEObject(uri, true); } if (importedEObject != null) { if (importedEObjects == null) { importedEObjects = new HashSet<EObject>(); } if (importedEObjects.add(importedEObject) && (importedEObject instanceof EPackage)) { Resource importedResource = importedEObject.eResource(); if (importedResource != null) { URI baseURI2 = getBaseURI(importedResource); loadImports((EPackage) importedEObject, baseURI2); } } } } } for (EPackage eSubPackage : ePackage.getESubpackages()) { if (eSubPackage != null) { loadImports(eSubPackage, baseURI); } } }
/** * Load all transitively referenced *.ecore files and identify any EPackages identified as OCL AS * Metamodels. */ protected void loadImports(@NonNull Resource ecoreResource) { URI baseURI = getBaseURI(ecoreResource); for (EObject eContent : ecoreResource.getContents()) { if (eContent instanceof EPackage) { loadImports((EPackage) eContent, baseURI); } } if ((asMetamodels != null) && (metamodelManager.getLibraryResource() == null)) { String nsURI = asMetamodels.iterator().next().getNsURI(); if (nsURI != null) { // String stdlibASUri = LibraryConstants.STDLIB_URI + // PivotConstants.DOT_OCL_AS_FILE_EXTENSION; OCLstdlib library = OCLstdlib.getDefault(); // create(stdlibASUri, "ocl", "ocl", nsURI); // metamodelManager.addPackageNsURISynonym(OCLstdlib.STDLIB_URI, // PivotConstants.METAMODEL_URI); metamodelManager.installResource(library); // metamodelManager.installAs(nsURI, OCLstdlibTables.PACKAGE); } } }