Kaynağa Gözat

Implemented Feature scoping for different generator ids

Andreas Mülder 13 yıl önce
ebeveyn
işleme
82c7acee62

+ 17 - 0
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/extensions/LibraryExtensions.java

@@ -8,6 +8,8 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.URI;
 
 import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 
 /**
  * 
@@ -19,6 +21,7 @@ public class LibraryExtensions {
 	private static final String EXTENSION_POINT_ID = "org.yakindu.sct.generator.genmodel.featuretypes";
 	private static final String ATTRIBUTE_URI = "uri";
 	private static final String ATTRIBUTE_GENERATOR_ID = "generatorId";
+	public static final String GLOBAL_ID = "ALL";
 
 	public static class LibraryDescriptor {
 		private final IConfigurationElement configElement;
@@ -44,6 +47,20 @@ public class LibraryExtensions {
 				new CreateLibraryDescriptor());
 	}
 
+	public static Iterable<LibraryDescriptor> getLibraryDescriptor(
+			final String generatorId) {
+		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
+				.getLibraryDescriptor();
+		return Iterables.filter(libraryDescriptor,
+				new Predicate<LibraryDescriptor>() {
+					@Override
+					public boolean apply(LibraryDescriptor input) {
+						return input.getGeneratorId().equals(generatorId)
+								|| input.getGeneratorId().equals(GLOBAL_ID);
+					}
+				});
+	}
+
 	private static final class CreateLibraryDescriptor implements
 			Function<IConfigurationElement, LibraryDescriptor> {
 

+ 14 - 2
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenGlobalScopeProvider.java

@@ -1,8 +1,10 @@
 package org.yakindu.sct.generator.genmodel.scoping;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.scoping.IScope;
 import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider;
@@ -10,6 +12,8 @@ import org.eclipse.xtext.scoping.impl.SimpleScope;
 import org.yakindu.sct.generator.genmodel.extensions.LibraryExtensions;
 import org.yakindu.sct.generator.genmodel.extensions.LibraryExtensions.LibraryDescriptor;
 import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
+import org.yakindu.sct.model.sgen.GeneratorModel;
+import org.yakindu.sct.model.sgen.SGenPackage;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
@@ -36,11 +40,19 @@ public class SGenGlobalScopeProvider extends DefaultGlobalScopeProvider {
 				.getScope(resource, ignoreCase, type, filter);
 		Iterable<IEObjectDescription> allElements = defaultScope
 				.getAllElements();
+		// get the generator id
+		GeneratorModel generatorModel = (GeneratorModel) EcoreUtil
+				.getObjectByType(resource.getContents(),
+						SGenPackage.Literals.GENERATOR_MODEL);
+		Assert.isNotNull(generatorModel);
+		String generatorId = generatorModel.getGeneratorId();
+
 		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
-				.getLibraryDescriptor();
+				.getLibraryDescriptor(generatorId);
 		for (LibraryDescriptor desc : libraryDescriptor) {
 			Resource library = resourceSet.getResource(desc.getURI(), true);
-			FeatureResourceDescription description = new FeatureResourceDescription(library);
+			FeatureResourceDescription description = new FeatureResourceDescription(
+					library);
 			injector.injectMembers(description);
 			allElements = Iterables.concat(allElements,
 					description.getExportedObjectsByType(type));