@Override public void seal() { if (this.isSealed) { return; } // register the correct EFactory instance at all (sub-)packages Stack<EPackage> ePackagesToVisit = new Stack<>(); for (EPackage ePackage : this.nsURItoEPackage.values()) { ePackagesToVisit.push(ePackage); } Set<EPackage> visitedEPackages = Sets.newHashSet(); while (ePackagesToVisit.isEmpty() == false) { EPackage pack = ePackagesToVisit.pop(); if (visitedEPackages.contains(pack)) { continue; } visitedEPackages.add(pack); pack.setEFactoryInstance(new ChronoEFactory()); for (EPackage subPackage : pack.getESubpackages()) { ePackagesToVisit.push(subPackage); } } this.isSealed = true; }
/** * Updates the {@link EFactory} of the specified {@code ePackage} if it's a {@link EPackageImpl}. * * @param ePackage the package to update * * @return {@code true} if the package has been updated */ public static boolean updateIfDynamic(EPackage ePackage) { checkNotNull(ePackage, "ePackage"); boolean updated = false; if (ePackage.getClass() == EPackageImpl.class && !(ePackage.getEFactoryInstance() instanceof PersistenceFactory)) { ePackage.setEFactoryInstance(new PersistenceFactory(ePackage)); updated = true; } return updated; }
/** * @since 2.0 */ public static boolean prepareDynamicEPackage(Object value) { if (EMFUtil.isDynamicEPackage(value)) { EPackage ePackage = (EPackage)value; if (!(ePackage.getEFactoryInstance() instanceof CDOFactory)) { ePackage.setEFactoryInstance(new CDOFactoryImpl(ePackage)); return true; } } return false; } }
/** * @since 2.0 */ public static boolean prepareDynamicEPackage(Object value) { if (EMFUtil.isDynamicEPackage(value)) { EPackage ePackage = (EPackage)value; if (!(ePackage.getEFactoryInstance() instanceof CDOFactory)) { ePackage.setEFactoryInstance(new CDOFactoryImpl(ePackage)); return true; } } return false; } }
@Override public void registerOrUpdateEPackages(final Iterator<? extends EPackage> ePackages, final String branchName) { checkNotNull(ePackages, "Precondition violation - argument 'ePackages' must not be NULL!"); checkNotNull(branchName, "Precondition violation - argument 'branchName' must not be NULL!"); // throw the EPackages into a collection List<EPackage> packages = Lists.newArrayList(); ePackages.forEachRemaining(pack -> packages.add(pack)); EPackageBundle bundle = EPackageBundle.of(packages); try (ChronoGraph txGraph = this.owningSphere.getRootGraph().tx().createThreadedTx(branchName)) { this.owningSphere.getEPackageToGraphMapper().mapToGraph(txGraph, bundle); txGraph.tx().commit(); } // make sure that the EPackage uses the correct EFactory packages.forEach(ePackage -> { ePackage.setEFactoryInstance(new ChronoEFactory()); }); }
@Override public ChronoEPackageRegistry readChronoEPackageRegistryFromGraph(final ChronoGraph graph) { checkNotNull(graph, "Precondition violation - argument 'graph' must not be NULL!"); ChronoEPackageRegistryInternal registry = new ChronoEPackageRegistryImpl(); Set<Vertex> bundleVertices = ChronoSphereGraphFormat.getEpackageBundleVertices(graph); for (Vertex bundleVertex : bundleVertices) { String xmi = ChronoSphereGraphFormat.getXMIContents(bundleVertex); List<EPackage> ePackages = EMFUtils.readEPackagesFromXMI(xmi); EMFUtils.flattenEPackages(ePackages) .forEach(ePackage -> ePackage.setEFactoryInstance(new ChronoEFactory())); for (EPackage ePackage : ePackages) { this.registerPackageContentsRecursively(graph, ePackage, registry); } } return registry; }
protected EPackage createNewEPackage(final String name, final String nsURI, final String nsPrefix) { checkNotNull(name, "Precondition violation - argument 'name' must not be NULL!"); checkNotNull(nsURI, "Precondition violation - argument 'nsURI' must not be NULL!"); checkNotNull(nsPrefix, "Precondition violation - argument 'nsPrefix' must not be NULL!"); EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage(); ePackage.setEFactoryInstance(this.createNewEFactory()); ePackage.setName(name); ePackage.setNsURI(nsURI); ePackage.setNsPrefix(nsPrefix); return ePackage; }