/** * Returns a resolved resource available outside of the resource set. * It is called by {@link #getResource(URI, boolean) getResource(URI, boolean)} * after it has determined that the URI cannot be resolved * based on the existing contents of the resource set. * This implementation looks up the URI in the {#getPackageRegistry() local} package registry. * Clients may extend this as appropriate. * @param uri the URI * @param loadOnDemand whether demand loading is required. */ protected Resource delegatedGetResource(URI uri, boolean loadOnDemand) { EPackage ePackage = getPackageRegistry().getEPackage(uri.toString()); return ePackage == null ? null : ePackage.eResource(); }
/** * Returns a resolved resource available outside of the resource set. * It is called by {@link #getResource(URI, boolean) getResource(URI, boolean)} * after it has determined that the URI cannot be resolved * based on the existing contents of the resource set. * This implementation looks up the URI in the {#getPackageRegistry() local} package registry. * Clients may extend this as appropriate. * @param uri the URI * @param loadOnDemand whether demand loading is required. */ protected Resource delegatedGetResource(URI uri, boolean loadOnDemand) { EPackage ePackage = getPackageRegistry().getEPackage(uri.toString()); return ePackage == null ? null : ePackage.eResource(); }
public EPackage[] packages() { Map<String, EPackage> map = new TreeMap<String, EPackage>(); // Sort and eliminate duplicates caused by having both a regular package and a demanded package for the same nsURI. // for (EPackage ePackage : packages.keySet()) { String prefix= getPrefix(ePackage); if (prefix == null) { prefix = ""; } EPackage conflict = map.put(prefix, ePackage); if (conflict != null && conflict.eResource() != null) { map.put(prefix, conflict); } } EPackage[] result = new EPackage[map.size()]; map.values().toArray(result); return result; }
public EPackage[] packages() { Map<String, EPackage> map = new TreeMap<String, EPackage>(); // Sort and eliminate duplicates caused by having both a regular package and a demanded package for the same nsURI. // for (EPackage ePackage : packages.keySet()) { String prefix= getPrefix(ePackage); if (prefix == null) { prefix = ""; } EPackage conflict = map.put(prefix, ePackage); if (conflict != null && conflict.eResource() != null) { map.put(prefix, conflict); } } EPackage[] result = new EPackage[map.size()]; map.values().toArray(result); return result; }
protected String getDefaultArtifactFileName(EPackage ePackage) { if (ePackage.eResource() != null && ePackage.getESuperPackage() == null) { String fileName = ePackage.eResource().getURI().lastSegment(); int lastIndex = fileName.lastIndexOf('.'); if (lastIndex > 0) { return fileName.substring(0, lastIndex); } } return ConverterUtil.getQualifiedName(ePackage); }
/** * Search the nsURI by browsing through the registerd EPackage instances and looking up their nsURI * attribute. This case might arise when for instance, the plugin.xml registration of the nsURI does not * match the EPackage nsURI. * * @param nsURI * the nsURI we are looking for. * @return a matching {@link EPackage} if found, null otherwise. */ private EPackage searchInRegisteredEPackageInstances(String nsURI) { Collection<Object> values = this.values(); for (Object object : values) { if (object instanceof EPackage && ((EPackage)object).eResource() != null) { EPackage ePackage = (EPackage)object; Resource eResource = ePackage.eResource(); URI uri = eResource.getURI(); if (uri != null && nsURI.equals(uri.toString())) { return ePackage; } } } return null; }
/** * looks up the EReference in the passed registry, given the external form. if registry == null this */ public static EReference getEReferenceFromExternalForm(EPackage.Registry registry, String externalForm) { if (externalForm == null) return null; List<String> split = Strings.split(externalForm, delim); if (split.size() != 3) { URI uri = URI.createURI(externalForm); URI packURI = uri.trimFragment(); EPackage ePackage = registry.getEPackage(packURI.toString()); if (ePackage == null) return null; EReference result = (EReference) ePackage.eResource().getEObject(uri.fragment()); return result; } EPackage ePackage = registry.getEPackage(split.get(0)); if (ePackage == null) return null; EClass clazz = (EClass) ePackage.getEClassifier(split.get(1)); if (clazz == null) return null; return (EReference) clazz.getEStructuralFeature(Integer.valueOf(split.get(2))); }
public static void collectDependencies(final EPackage ePackage, final Set<EPackage> dependencies) { final Resource eResource = ePackage.eResource(); final Collection<EObject> crossReferencedElements = EcoreUtil.ExternalCrossReferencer.find(eResource).keySet(); for (final Object crossReferencedElement : crossReferencedElements) { if (!(crossReferencedElement instanceof EClassifier)) { continue; } final EClassifier eClass = (EClassifier) crossReferencedElement; final EPackage referencedPackage = eClass.getEPackage(); if (referencedPackage == null) { continue; } final EPackage topPackage = EMFUtil.getTopLevelPackage(referencedPackage); if (dependencies.add(topPackage)) { collectDependencies(topPackage, dependencies); } } } }
private ResourceSet getResourceSet(EModelElement eModelElement) { ResourceSet resourceSet = getResourceSet(eModelElement.eResource()); if (resourceSet == null) { for (EPackage ePackage : ePackages) { resourceSet = getResourceSet(ePackage.eResource()); if (resourceSet != null) { break; } } } return resourceSet; }
protected void moveSubpackagesToNewResource(final EPackage pack, final ResourceSet set) { for (int i = (pack.getESubpackages().size() - 1); (i >= 0); i--) { { final EPackage sub = pack.getESubpackages().get(i); Resource _eResource = sub.eResource(); Resource _eResource_1 = pack.eResource(); boolean _tripleEquals = (_eResource == _eResource_1); if (_tripleEquals) { boolean _isEmpty = sub.getEClassifiers().isEmpty(); if (_isEmpty) { this.moveSubpackagesToNewResource(sub, set); } else { this.movePackageToNewResource(sub, set); pack.getESubpackages().remove(i); } } } } }
public static byte[] getEPackageBytes(EPackage ePackage, boolean zipped, EPackage.Registry packageRegistry) { try { Resource resource = ePackage.eResource(); if (resource == null) { // Happens e.g. for dynamic packages that were not loaded from a resource ResourceSet resourceSet = newEcoreResourceSet(packageRegistry); resource = resourceSet.createResource(URI.createURI(ePackage.getNsURI())); resource.getContents().add(ePackage); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); resource.save(baos, createResourceOptions(zipped)); return baos.toByteArray(); } catch (Exception ex) { throw WrappedException.wrap(ex); } }
private void register(final EPackage ePackage) { final EPackage.Registry registry = ePackage.eResource().getResourceSet().getPackageRegistry(); Object _get = registry.get(ePackage.getNsURI()); boolean _tripleEquals = (_get == null); if (_tripleEquals) { registry.put(ePackage.getNsURI(), ePackage); } }
/** * Create a new descriptor from an in memory instance of {@link EPackage}. * * @param loadedEPackage * the in memorry instance to use. * @param registry * the registry to populate. * @return a new descriptor representing the instance. */ public static LazyEPackageDescriptor create(EPackage loadedEPackage, EPackage.Registry registry) { URIConverter converter = null; if (loadedEPackage.eResource() != null && loadedEPackage.eResource().getResourceSet() != null) { converter = loadedEPackage.eResource().getResourceSet().getURIConverter(); } if (converter == null) { converter = new ExtensibleURIConverterImpl(); } LazyEPackageDescriptor current = new LazyEPackageDescriptor(loadedEPackage, converter, registry); for (EPackage child : loadedEPackage.getESubpackages()) { current.addESubpackage(create(child, registry)); } return current; }
protected List<Resource> computeResourcesToBeSaved() { List<Resource> resources = new UniqueEList.FastCompare<Resource>(); Resource genModelResource = getGenModel().eResource(); resources.add(genModelResource); for (GenPackage genPackage : getGenModel().getGenPackages()) { resources.add(genPackage.getEcorePackage().eResource()); } // Handle application genmodel stub // for (GenPackage genPackage : getGenModel().getUsedGenPackages()) { if (genPackage.eResource() == genModelResource) { resources.add(genPackage.getEcorePackage().eResource()); } } return resources; }
protected IInstantiationHandler getInstantiationHandler() { if (!retrievedHandler) { // Need to retrieve handler lazily because when factory is created it does not yet know what ResourceSet it is in. // Can't know that until the first time we need a handler. ResourceSet rset = getEPackage().eResource().getResourceSet(); if (rset != null) { retrievedHandler = true; IInstantiationHandlerFactoryAdapter factory = (IInstantiationHandlerFactoryAdapter) EcoreUtil.getExistingAdapter(rset, IInstantiationHandlerFactoryAdapter.ADAPTER_KEY); if (factory != null) instantiationHandler = factory.getInstantiationHandler(this); } } return instantiationHandler; }
public Collection<Resource> generateResources(Collection<URI> uris) { ResourceSet resourceSet = createResourceSet(); for (URI uri : uris) { Resource resource = resourceSet.getResource(uri, true); for (Object object : resource.getContents()) { if (object instanceof XSDSchema) { generate((XSDSchema)object); } } } for (EPackage ePackage : targetNamespaceToEPackageMap.values()) { if (ePackage.eResource() == null) { Resource ecoreResource = resourceSet.createResource(URI.createURI("*.ecore")); ecoreResource.setURI(URI.createURI(ePackage.getNsURI())); ecoreResource.getContents().add(ePackage); } } return new ArrayList<Resource>(resourceSet.getResources()); }
/** * Create a new descriptor for an existing instance of {@link EPackage}. * * @param instance * the instance to use to create the descriptor. * @param converter * the {@link URIConverter} to use to normalize URIs or get input streams. * @param registryToPopulate * the registry to populate. */ LazyEPackageDescriptor(EPackage instance, URIConverter converter, EPackage.Registry registryToPopulate) { this.nsURI = instance.getNsURI(); this.nsPrefix = instance.getNsPrefix(); this.name = instance.getName(); this.resourceURI = converter.normalize(instance.eResource().getURI()); this.alreadyLoaded = Optional.of(instance); this.converter = converter; this.registryToPopulate = registryToPopulate; }
public void addToResource(EPackage ePackage, ResourceSet resourceSet) { if (ePackage.eResource() == null) { EPackageImportInfo ePackageInfo = getEPackageImportInfo(ePackage); String fileName = ePackageInfo.getEcoreFileName(); if (fileName != null) { String baseLocation = getGenModelPath().removeLastSegments(1).toString() + "/"; String ecoreFileName = baseLocation + fileName; URI ecoreURI = createFileURI(ecoreFileName); Resource resource = resourceSet.getResource(ecoreURI, false); if (resource == null) { resource = resourceSet.createResource(ecoreURI); } resource.getContents().add(ePackage); } } }
void discardGeneratedPackages(EObject root) { if (root instanceof Grammar) { // unload generated metamodels as they will be recreated during linking for (AbstractMetamodelDeclaration metamodelDeclaration : ((Grammar) root).getMetamodelDeclarations()) { if (metamodelDeclaration instanceof GeneratedMetamodel) { EPackage ePackage = ((GeneratedMetamodel) metamodelDeclaration).getEPackage(); if (ePackage != null) { Resource resource = ePackage.eResource(); if (resource != null && resource.getResourceSet() != null) { if (unloader != null) { for (EObject content : resource.getContents()) { unloader.unloadRoot(content); } } resource.getResourceSet().getResources().remove(resource); } } } } } }