/** * generated by Xtext */ package org.occiware.clouddesigner.occi.xtext.scoping; import java.util.ArrayList; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.resource.EObjectDescription; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.scoping.IScope; import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider; import org.eclipse.xtext.scoping.impl.SimpleScope; import org.occiware.clouddesigner.occi.Attribute; import org.occiware.clouddesigner.occi.Configuration; import org.occiware.clouddesigner.occi.Entity; import org.occiware.clouddesigner.occi.Extension; import org.occiware.clouddesigner.occi.Kind; import org.occiware.clouddesigner.occi.Link; import org.occiware.clouddesigner.occi.Mixin; import org.occiware.clouddesigner.occi.Resource; /** * This class contains custom scoping description. * * See * https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping * on how and when to use it. */ @SuppressWarnings("all") public class OCCIScopeProvider extends AbstractDeclarativeScopeProvider { private IScope scopeForExtensions(final EList<Extension> extensions) { final ArrayList<IEObjectDescription> result = new ArrayList<IEObjectDescription>(); for (Extension extension : extensions) { result.add(EObjectDescription.create(QualifiedName.create(EcoreUtil.getURI(extension).toString()), extension)); } return new SimpleScope(IScope.NULLSCOPE, result); } public IScope scope_Extension_import(final Extension extension, final EReference ref) { return scopeForExtensions(extension.getImport()); } public IScope scope_Kind_parent(final Kind kind, final EReference ref) { final ArrayList<IEObjectDescription> res = new ArrayList<IEObjectDescription>(); Extension extension = (Extension)kind.eContainer(); for(Kind k : extension.getKinds()) { res.add(EObjectDescription.create(QualifiedName.create(k.getTerm()), k)); } for(Extension importExtension : extension.getImport()) { for(Kind k : importExtension.getKinds()) { res.add(EObjectDescription.create(QualifiedName.create(importExtension.getName(), k.getTerm()), k)); } } return new SimpleScope(IScope.NULLSCOPE, res); } public IScope scope_Mixin_depends(final Mixin mixin, final EReference ref) { final ArrayList<IEObjectDescription> res = new ArrayList<IEObjectDescription>(); Extension extension = (Extension)mixin.eContainer(); for(Mixin m : extension.getMixins()) { res.add(EObjectDescription.create(QualifiedName.create(m.getTerm()), m)); } for(Extension importExtension : extension.getImport()) { for(Mixin m : importExtension.getMixins()) { res.add(EObjectDescription.create(QualifiedName.create(importExtension.getName(), m.getTerm()), m)); } } return new SimpleScope(IScope.NULLSCOPE, res); } public IScope scope_Mixin_applies(final Mixin mixin, final EReference ref) { final ArrayList<IEObjectDescription> res = new ArrayList<IEObjectDescription>(); Extension extension = (Extension)mixin.eContainer(); for(Kind k : extension.getKinds()) { res.add(EObjectDescription.create(QualifiedName.create(k.getTerm()), k)); } for(Extension importExtension : extension.getImport()) { for(Kind k : importExtension.getKinds()) { res.add(EObjectDescription.create(QualifiedName.create(importExtension.getName(), k.getTerm()), k)); } } return new SimpleScope(IScope.NULLSCOPE, res); } public IScope scope_Attribute_type(final Attribute attribute, final EReference ref) { final ArrayList<IEObjectDescription> res = new ArrayList<IEObjectDescription>(); Extension extension = (Extension)EcoreUtil2.getRootContainer(attribute); for(EDataType type : extension.getTypes()) { res.add(EObjectDescription.create(QualifiedName.create(type.getName()), type)); } for(Extension importExtension : extension.getImport()) { for(EDataType type : importExtension.getTypes()) { res.add(EObjectDescription.create(QualifiedName.create(importExtension.getName(), type.getName()), type)); } } return new SimpleScope(IScope.NULLSCOPE, res); } public IScope scope_Configuration_use(final Configuration configuration, final EReference ref) { return scopeForExtensions(configuration.getUse()); } public IScope scope_Entity_kind(final Entity entity, final EReference ref) { final ArrayList<IEObjectDescription> result = new ArrayList<IEObjectDescription>(); Configuration configuration = (Configuration)EcoreUtil2.getRootContainer(entity); for(Extension useExtension : configuration.getUse()) { for(Kind kind : useExtension.getKinds()) { result.add(EObjectDescription.create(QualifiedName.create(useExtension.getName(), kind.getTerm()), kind)); } } return new SimpleScope(IScope.NULLSCOPE, result); } public IScope scope_Entity_mixins(final Entity entity, final EReference ref) { final ArrayList<IEObjectDescription> result = new ArrayList<IEObjectDescription>(); Configuration configuration = (Configuration)EcoreUtil2.getRootContainer(entity); for(Extension useExtension : configuration.getUse()) { for(Mixin mixin : useExtension.getMixins()) { result.add(EObjectDescription.create(QualifiedName.create(useExtension.getName(), mixin.getTerm()), mixin)); } } return new SimpleScope(IScope.NULLSCOPE, result); } public IScope scope_Link_target(final Link link, final EReference ref) { final ArrayList<IEObjectDescription> result = new ArrayList<IEObjectDescription>(); Configuration configuration = (Configuration)EcoreUtil2.getRootContainer(link); for(Resource resource : configuration.getResources()) { result.add(EObjectDescription.create(QualifiedName.create(resource.getId()), resource)); } return new SimpleScope(IScope.NULLSCOPE, result); } }