Sfoglia il codice sorgente

#358 : GeneratorExtensions refactored to allow standalone execution
(without
eclipse extensions)

Johannes Dicks 9 anni fa
parent
commit
85148981c4
14 ha cambiato i file con 938 aggiunte e 948 eliminazioni
  1. 5 5
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/GeneratorExecutor.java
  2. 26 55
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/extensions/GeneratorExtensions.java
  3. 29 0
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/extensions/IGeneratorDescriptor.java
  4. 13 24
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java
  5. 3 3
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/quickfix/SGenQuickfixProvider.java
  6. 105 105
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/templates/SGenTemplateProposalProvider.java
  7. 3 3
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/CoreGenerator.java
  8. 4 4
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/ModelCreator.java
  9. 2 2
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenNewFileWizard.java
  10. 226 225
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenWizardPage2.java
  11. 2 2
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenWizardPage2LabelProvider.java
  12. 5 5
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java
  13. 369 369
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java
  14. 146 146
      test-plugins/org.yakindu.sct.generator.genmodel.test/src/org/yakindu/sct/generator/genmodel/test/HelpIntegrationTest.java

+ 5 - 5
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/GeneratorExecutor.java

@@ -20,7 +20,7 @@ import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
 import org.yakindu.sct.model.sgen.GeneratorModel;
 
@@ -40,8 +40,8 @@ public class GeneratorExecutor {
 		GeneratorModel model = (GeneratorModel) resource.getContents().get(0);
 
 		String generatorId = model.getGeneratorId();
-		GeneratorDescriptor description = GeneratorExtensions
-				.getGeneratorDescriptorForId(generatorId);
+		IGeneratorDescriptor description = GeneratorExtensions
+				.getGeneratorDescriptor(generatorId);
 		if (description == null)
 			return;
 		final ISCTGenerator generator = description.createGenerator();
@@ -66,8 +66,8 @@ public class GeneratorExecutor {
 	public void executeGenerator(GeneratorModel model) {
 
 		String generatorId = model.getGeneratorId();
-		GeneratorDescriptor description = GeneratorExtensions
-				.getGeneratorDescriptorForId(generatorId);
+		IGeneratorDescriptor description = GeneratorExtensions
+				.getGeneratorDescriptor(generatorId);
 		if (description == null)
 			throw new RuntimeException("No generator registered for ID: " + generatorId);
 		final ISCTGenerator generator = description.createGenerator();

+ 26 - 55
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/extensions/GeneratorExtensions.java

@@ -10,9 +10,6 @@
  */
 package org.yakindu.sct.generator.core.extensions;
 
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.collect.Lists.newArrayList;
-
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
@@ -26,9 +23,9 @@ import org.eclipse.swt.graphics.Image;
 import org.osgi.framework.Bundle;
 import org.yakindu.sct.generator.core.ISCTGenerator;
 
-import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 
 /**
  * @author holger willebrandt - Initial contribution and API
@@ -46,9 +43,9 @@ public class GeneratorExtensions {
 	private static final String ATTRIBUTE_ICON = "icon";
 	private static final String ATTRIBUTE_DESCRIPTION = "description";
 
-	private static Iterable<GeneratorDescriptor> generatorDescriptors;
+	private static List<IGeneratorDescriptor> descriptors;
 
-	public static class GeneratorDescriptor {
+	private static class GeneratorDescriptor implements IGeneratorDescriptor {
 
 		private final IConfigurationElement configElement;
 
@@ -58,6 +55,7 @@ public class GeneratorExtensions {
 			this.configElement = configElement;
 		}
 
+		@Override
 		public ISCTGenerator createGenerator() {
 			try {
 				return (ISCTGenerator) configElement.createExecutableExtension(ATTRIBUTE_CLASS);
@@ -67,6 +65,7 @@ public class GeneratorExtensions {
 			return null;
 		}
 
+		@Override
 		public List<String> getLibraryIDs() {
 			List<String> libs = new ArrayList<String>();
 			for (IConfigurationElement child : configElement.getChildren(LIBRARY_CONFIG_ELEMENT)) {
@@ -78,17 +77,17 @@ public class GeneratorExtensions {
 			return libs;
 		}
 
+		@Override
 		public String getId() {
 			return configElement.getAttribute(ATTRIBUTE_ID);
 		}
 
+		@Override
 		public String getName() {
 			return configElement.getAttribute(ATTRIBUTE_NAME);
 		}
 
-		/**
-		 * may return null!!
-		 */
+		@Override
 		public Image getImage() {
 			if (image != null)
 				return image;
@@ -103,14 +102,17 @@ public class GeneratorExtensions {
 			return image;
 		}
 
+		@Override
 		public String getContentType() {
 			return configElement.getAttribute(ATTRIBUTE_CONTENT_TYPE);
 		}
 
+		@Override
 		public String getDescription() {
 			return configElement.getAttribute(ATTRIBUTE_DESCRIPTION);
 		}
 
+		@Override
 		public String getElementRefType() {
 			try {
 				return configElement.getAttribute(ATTRIBUTE_ELEMENT_REF_TYPE);
@@ -119,58 +121,34 @@ public class GeneratorExtensions {
 				return null;
 			}
 		}
+	}
 
-		@Override
-		public int hashCode() {
-			String id = getId();
-			final int prime = 31;
-			int result = 1;
-			result = prime * result + ((id == null) ? 0 : id.hashCode());
-			return result;
-		}
-
-		@Override
-		public boolean equals(Object obj) {
-			if (this == obj) {
-				return true;
-			}
-			if (obj == null) {
-				return false;
-			}
-			if (getClass() != obj.getClass()) {
-				return false;
-			}
-			GeneratorDescriptor other = (GeneratorDescriptor) obj;
-			String id = getId();
-			if (id == null) {
-				if (other.getId() != null) {
-					return false;
-				}
-			} else if (!id.equals(other.getId())) {
-				return false;
+	public static List<IGeneratorDescriptor> getGeneratorDescriptors() {
+		if (descriptors == null) {
+			descriptors = Lists.newArrayList();
+			if (Platform.isRunning()) {
+				initFromExtensions();
 			}
-			return true;
 		}
-
-
+		return descriptors;
 	}
 
-	public static Iterable<GeneratorDescriptor> getGeneratorDescriptors() {
-		IConfigurationElement[] configurationElements = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_POINT_ID);
-		if (generatorDescriptors == null) {
-			generatorDescriptors = transform(newArrayList(configurationElements), new CreateGeneratorDescriptor());
+	protected static void initFromExtensions() {
+		IConfigurationElement[] configurationElements = Platform.getExtensionRegistry()
+				.getConfigurationElementsFor(EXTENSION_POINT_ID);
+		for (IConfigurationElement iConfigurationElement : configurationElements) {
+			descriptors.add(new GeneratorDescriptor(iConfigurationElement));
 		}
-		return generatorDescriptors;
 	}
 
 	/**
 	 * returns the Generator Descriptor for the given generator id, or null, if
 	 * the id is unknown
 	 */
-	public static GeneratorDescriptor getGeneratorDescriptorForId(final String generatorId) {
+	public static IGeneratorDescriptor getGeneratorDescriptor(final String generatorId) {
 		try {
-			return Iterables.find(getGeneratorDescriptors(), new Predicate<GeneratorDescriptor>() {
-				public boolean apply(GeneratorDescriptor input) {
+			return Iterables.find(getGeneratorDescriptors(), new Predicate<IGeneratorDescriptor>() {
+				public boolean apply(IGeneratorDescriptor input) {
 					return input != null && input.getId() != null && input.getId().equals(generatorId);
 				}
 			});
@@ -179,11 +157,4 @@ public class GeneratorExtensions {
 		}
 	}
 
-	private static final class CreateGeneratorDescriptor implements Function<IConfigurationElement, GeneratorDescriptor> {
-
-		public GeneratorDescriptor apply(IConfigurationElement from) {
-			return new GeneratorDescriptor(from);
-		}
-	}
-
 }

+ 29 - 0
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/extensions/IGeneratorDescriptor.java

@@ -0,0 +1,29 @@
+package org.yakindu.sct.generator.core.extensions;
+
+import java.util.List;
+
+import org.eclipse.swt.graphics.Image;
+import org.yakindu.sct.generator.core.ISCTGenerator;
+
+public interface IGeneratorDescriptor {
+
+	ISCTGenerator createGenerator();
+
+	List<String> getLibraryIDs();
+
+	String getId();
+
+	String getName();
+
+	/**
+	 * may return null!!
+	 */
+	Image getImage();
+
+	String getContentType();
+
+	String getDescription();
+
+	String getElementRefType();
+
+}

+ 13 - 24
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java

@@ -19,7 +19,7 @@ import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
 import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
 import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.model.sgen.GeneratorModel;
 
 /**
@@ -30,48 +30,37 @@ import org.yakindu.sct.model.sgen.GeneratorModel;
 public class SGenProposalProvider extends AbstractSGenProposalProvider {
 
 	@Override
-	public void completeGeneratorEntry_ContentType(EObject model,
-			Assignment assignment, ContentAssistContext context,
+	public void completeGeneratorEntry_ContentType(EObject model, Assignment assignment, ContentAssistContext context,
 			ICompletionProposalAcceptor acceptor) {
 
-		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(model,
-				GeneratorModel.class);
-		GeneratorDescriptor descriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(generatorModel.getGeneratorId());
+		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(model, GeneratorModel.class);
+		IGeneratorDescriptor descriptor = GeneratorExtensions.getGeneratorDescriptor(generatorModel.getGeneratorId());
 		if (descriptor == null)
 			return;
-		ICompletionProposal proposal = createCompletionProposal(
-				descriptor.getContentType(), context);
+		ICompletionProposal proposal = createCompletionProposal(descriptor.getContentType(), context);
 		acceptor.accept(proposal);
 	}
 
 	@Override
-	public void completeGeneratorModel_GeneratorId(EObject model,
-			Assignment assignment, ContentAssistContext context,
+	public void completeGeneratorModel_GeneratorId(EObject model, Assignment assignment, ContentAssistContext context,
 			ICompletionProposalAcceptor acceptor) {
-		Iterable<GeneratorDescriptor> descriptions = GeneratorExtensions
-				.getGeneratorDescriptors();
-		for (GeneratorDescriptor desc : descriptions) {
-			ICompletionProposal proposal = createCompletionProposal(
-					desc.getId(),
-					new StyledString((desc.getName() != null) ? desc.getName()
-							: "null"), desc.getImage(), context);
+		Iterable<IGeneratorDescriptor> descriptions = GeneratorExtensions.getGeneratorDescriptors();
+		for (IGeneratorDescriptor desc : descriptions) {
+			ICompletionProposal proposal = createCompletionProposal(desc.getId(),
+					new StyledString((desc.getName() != null) ? desc.getName() : "null"), desc.getImage(), context);
 
 			if (proposal instanceof ConfigurableCompletionProposal) {
 				ConfigurableCompletionProposal configurable = (ConfigurableCompletionProposal) proposal;
 				configurable.setAdditionalProposalInfo(desc.getDescription());
 			}
 
-
 			acceptor.accept(proposal);
 		}
 	}
 
 	@Override
-	public void completeFeatureConfiguration_ParameterValues(EObject model,
-			Assignment assignment, ContentAssistContext context,
-			ICompletionProposalAcceptor acceptor) {
-		super.completeFeatureConfiguration_ParameterValues(model, assignment,
-				context, acceptor);
+	public void completeFeatureConfiguration_ParameterValues(EObject model, Assignment assignment,
+			ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		super.completeFeatureConfiguration_ParameterValues(model, assignment, context, acceptor);
 	}
 }

+ 3 - 3
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/quickfix/SGenQuickfixProvider.java

@@ -23,8 +23,8 @@ import org.eclipse.xtext.ui.editor.quickfix.Fix;
 import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor;
 import org.eclipse.xtext.validation.Issue;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
 import org.yakindu.sct.generator.genmodel.validation.SGenJavaValidator;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
@@ -63,8 +63,8 @@ public class SGenQuickfixProvider extends DefaultQuickfixProvider {
 		GeneratorModel model = (GeneratorModel) EcoreUtil2
 				.getRootContainer(element);
 		
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
+		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
 		
 		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
 				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());

+ 105 - 105
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/templates/SGenTemplateProposalProvider.java

@@ -1,105 +1,105 @@
-/**
- * Copyright (c) 2012 committers of YAKINDU and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * Contributors:
- * 	committers of YAKINDU - initial API and implementation
- * 
- */
-package org.yakindu.sct.generator.genmodel.ui.templates;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jface.text.templates.ContextTypeRegistry;
-import org.eclipse.jface.text.templates.Template;
-import org.eclipse.jface.text.templates.TemplateContext;
-import org.eclipse.jface.text.templates.TemplateProposal;
-import org.eclipse.jface.text.templates.persistence.TemplateStore;
-import org.eclipse.xtext.EcoreUtil2;
-import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
-import org.eclipse.xtext.ui.editor.contentassist.ITemplateAcceptor;
-import org.eclipse.xtext.ui.editor.templates.ContextTypeIdHelper;
-import org.eclipse.xtext.ui.editor.templates.DefaultTemplateProposalProvider;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
-import org.yakindu.sct.generator.genmodel.services.SGenGrammarAccess;
-import org.yakindu.sct.model.sgen.FeatureType;
-import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
-import org.yakindu.sct.model.sgen.GeneratorModel;
-
-import com.google.inject.Inject;
-/**
- * 
- * @author andreas muelder - Initial contribution and API
- * 
- */
-public class SGenTemplateProposalProvider extends
-		DefaultTemplateProposalProvider {
-
-	@Inject
-	private SGenGrammarAccess gaccess;
-	@Inject
-	private SGenProposalCreator creator;
-
-	private final ContextTypeIdHelper helper;
-
-	@Inject
-	public SGenTemplateProposalProvider(TemplateStore templateStore,
-			ContextTypeRegistry registry, ContextTypeIdHelper helper) {
-		super(templateStore, registry, helper);
-		this.helper = helper;
-	}
-
-	@Override
-	protected void createTemplates(TemplateContext templateContext,
-			ContentAssistContext context, ITemplateAcceptor acceptor) {
-		super.createTemplates(templateContext, context, acceptor);
-
-		String id = helper.getId(gaccess.getFeatureConfigurationRule());
-		if (templateContext.getContextType().getId().equals(id)) {
-			createFeatureConfigurationTemplates(templateContext, context,
-					acceptor);
-		}
-	}
-
-	private void createFeatureConfigurationTemplates(
-			TemplateContext templateContext, ContentAssistContext context,
-			ITemplateAcceptor acceptor) {
-		GeneratorModel model = (GeneratorModel) EcoreUtil2
-				.getRootContainer(context.getCurrentModel());
-
-
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-		
-		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
-		
-		for (LibraryDescriptor desc : libraryDescriptor) {
-			ResourceSet set = new ResourceSetImpl();
-			Resource resource = set.getResource(desc.getURI(), true);
-			FeatureTypeLibrary lib = (FeatureTypeLibrary) resource
-					.getContents().get(0);
-			EList<FeatureType> types = lib.getTypes();
-
-			for (FeatureType featureType : types) {
-				Template template = new Template(featureType.getName()
-						+ " feature", "Creates feature "
-						+ featureType.getName(), featureType.getName(),
-						creator.createProposal(featureType,
-								desc.createFeatureValueProvider(),
-								context.getCurrentModel()), false);
-				TemplateProposal proposal = createProposal(template,
-						templateContext, context, getImage(template),
-						getRelevance(template));
-				acceptor.accept(proposal);
-			}
-		}
-	}
-}
+/**
+ * Copyright (c) 2012 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.generator.genmodel.ui.templates;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jface.text.templates.ContextTypeRegistry;
+import org.eclipse.jface.text.templates.Template;
+import org.eclipse.jface.text.templates.TemplateContext;
+import org.eclipse.jface.text.templates.TemplateProposal;
+import org.eclipse.jface.text.templates.persistence.TemplateStore;
+import org.eclipse.xtext.EcoreUtil2;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+import org.eclipse.xtext.ui.editor.contentassist.ITemplateAcceptor;
+import org.eclipse.xtext.ui.editor.templates.ContextTypeIdHelper;
+import org.eclipse.xtext.ui.editor.templates.DefaultTemplateProposalProvider;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
+import org.yakindu.sct.generator.genmodel.services.SGenGrammarAccess;
+import org.yakindu.sct.model.sgen.FeatureType;
+import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
+import org.yakindu.sct.model.sgen.GeneratorModel;
+
+import com.google.inject.Inject;
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class SGenTemplateProposalProvider extends
+		DefaultTemplateProposalProvider {
+
+	@Inject
+	private SGenGrammarAccess gaccess;
+	@Inject
+	private SGenProposalCreator creator;
+
+	private final ContextTypeIdHelper helper;
+
+	@Inject
+	public SGenTemplateProposalProvider(TemplateStore templateStore,
+			ContextTypeRegistry registry, ContextTypeIdHelper helper) {
+		super(templateStore, registry, helper);
+		this.helper = helper;
+	}
+
+	@Override
+	protected void createTemplates(TemplateContext templateContext,
+			ContentAssistContext context, ITemplateAcceptor acceptor) {
+		super.createTemplates(templateContext, context, acceptor);
+
+		String id = helper.getId(gaccess.getFeatureConfigurationRule());
+		if (templateContext.getContextType().getId().equals(id)) {
+			createFeatureConfigurationTemplates(templateContext, context,
+					acceptor);
+		}
+	}
+
+	private void createFeatureConfigurationTemplates(
+			TemplateContext templateContext, ContentAssistContext context,
+			ITemplateAcceptor acceptor) {
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(context.getCurrentModel());
+
+
+		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+		
+		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
+				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+		
+		for (LibraryDescriptor desc : libraryDescriptor) {
+			ResourceSet set = new ResourceSetImpl();
+			Resource resource = set.getResource(desc.getURI(), true);
+			FeatureTypeLibrary lib = (FeatureTypeLibrary) resource
+					.getContents().get(0);
+			EList<FeatureType> types = lib.getTypes();
+
+			for (FeatureType featureType : types) {
+				Template template = new Template(featureType.getName()
+						+ " feature", "Creates feature "
+						+ featureType.getName(), featureType.getName(),
+						creator.createProposal(featureType,
+								desc.createFeatureValueProvider(),
+								context.getCurrentModel()), false);
+				TemplateProposal proposal = createProposal(template,
+						templateContext, context, getImage(template),
+						getRelevance(template));
+				acceptor.accept(proposal);
+			}
+		}
+	}
+}

+ 3 - 3
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/CoreGenerator.java

@@ -12,7 +12,7 @@ package org.yakindu.sct.generator.genmodel.ui.wizard;
 
 import java.util.Comparator;
 
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 
 /**
  * Defines all Generators that are known to be core-generators (provided by
@@ -58,9 +58,9 @@ public enum CoreGenerator {
 	 * Comparator to sort {@link GeneratorDescriptor}s. YAKINDU
 	 * {@link CoreGenerator}s come first.
 	 */
-	public static final Comparator<GeneratorDescriptor> generatorOrder = new Comparator<GeneratorDescriptor>() {
+	public static final Comparator<IGeneratorDescriptor> generatorOrder = new Comparator<IGeneratorDescriptor>() {
 
-		public int compare(GeneratorDescriptor o1, GeneratorDescriptor o2) {
+		public int compare(IGeneratorDescriptor o1, IGeneratorDescriptor o2) {
 			int a = 0;
 			int b = 0;
 			try {

+ 4 - 4
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/ModelCreator.java

@@ -18,7 +18,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
 import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
@@ -39,11 +39,11 @@ import com.google.common.collect.Lists;
 public class ModelCreator {
 
 	private final SGenFactory factory = SGenFactory.eINSTANCE;
-	private final GeneratorDescriptor descriptor;
+	private final IGeneratorDescriptor descriptor;
 
 	private final List<EObject> eobjects;
 
-	public ModelCreator(GeneratorDescriptor selectedGenerator, List<EObject> objects) {
+	public ModelCreator(IGeneratorDescriptor selectedGenerator, List<EObject> objects) {
 		this.descriptor = selectedGenerator;
 		this.eobjects = objects;
 	}
@@ -83,7 +83,7 @@ public class ModelCreator {
 		return null;
 	}
 
-	public static List<FeatureType> getFeatureTypes(GeneratorDescriptor descriptor) {
+	public static List<FeatureType> getFeatureTypes(IGeneratorDescriptor descriptor) {
 		ArrayList<FeatureType> features = Lists.newArrayList();
 		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions.getLibraryDescriptors(descriptor
 				.getLibraryIDs());

+ 2 - 2
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenNewFileWizard.java

@@ -38,7 +38,7 @@ import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.eclipse.ui.part.FileEditorInput;
 import org.yakindu.sct.builder.nature.SCTNature;
 import org.yakindu.sct.builder.nature.ToggleSCTNatureAction;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.model.sgen.GeneratorModel;
 import org.yakindu.sct.ui.wizards.ModelCreationWizardPage;
 
@@ -131,7 +131,7 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 
 	private Resource createDefaultModel(URI uri) {
 		List<EObject> selectedObjects = generatorConfigPage.getSelectedElements();
-		GeneratorDescriptor selectedGenerator = generatorConfigPage.getSelectedGenerator();
+		IGeneratorDescriptor selectedGenerator = generatorConfigPage.getSelectedGenerator();
 		ModelCreator creator = new ModelCreator(selectedGenerator, selectedObjects);
 		GeneratorModel model = creator.create();
 

+ 226 - 225
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenWizardPage2.java

@@ -1,225 +1,226 @@
-/**
- * Copyright (c) 2013 committers of YAKINDU and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * Contributors:
- * 	committers of YAKINDU - initial API and implementation
- * 
- */
-package org.yakindu.sct.generator.genmodel.ui.wizard;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jface.viewers.AbstractTreeViewer;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.ComboViewer;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.yakindu.sct.generator.core.extensions.FileExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
-import org.yakindu.sct.ui.wizards.ModelCreationWizardPage;
-
-import com.google.common.collect.Lists;
-
-/**
- * 
- * @author holger willebrandt - Initial contribution and API
- * @author andreas muelder - extension point for contribution of file extensions
- *         added
- * @author oliver bohl - changed for more generic
- * 
- */
-public class SGenWizardPage2 extends WizardPage {
-
-	private final static Map<String, CoreGenerator> PROJECT_NATURES = new TreeMap<String, CoreGenerator>();
-	static {
-		PROJECT_NATURES.put("org.eclipse.cdt.core.cnature", CoreGenerator.C);
-		PROJECT_NATURES.put("org.eclipse.cdt.core.ccnature", CoreGenerator.Cpp);
-		PROJECT_NATURES.put(JavaCore.NATURE_ID, CoreGenerator.Java);
-	}
-
-	private ComboViewer generatorCombo;
-
-	protected CheckboxTreeViewer resourceTree;
-
-	private final ModelCreationWizardPage fileSelectionPage;
-
-	@SuppressWarnings("unused")
-	private final IStructuredSelection selection;
-
-	private Label lblNewLabel;
-
-	protected SGenWizardPage2(String pageName, ModelCreationWizardPage fileSelectionPage, IStructuredSelection selection) {
-		super(pageName);
-		this.fileSelectionPage = fileSelectionPage;
-		this.selection = selection;
-	}
-
-	public void createControl(Composite parent) {
-		Composite container = new Composite(parent, SWT.NULL);
-		setControl(container);
-		container.setLayout(new GridLayout(1, false));
-		createGeneratorCombo(container);
-		createObjectTree(container);
-		refreshInput();
-	}
-
-	private void createObjectTree(Composite container) {
-		lblNewLabel = new Label(container, SWT.NONE);
-		lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
-		lblNewLabel.setText("Choose: " + getSelectedGenerator().getContentType());
-
-		resourceTree = new CheckboxTreeViewer(container, SWT.BORDER);
-		resourceTree.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-
-		resourceTree.setContentProvider(new SGenWizardPage2ContentProvider());
-		resourceTree.setLabelProvider(new SGenWizardPage2LabelProvider());
-
-		TreePropagatingCheckStateListener checkStateListener = new TreePropagatingCheckStateListener(resourceTree) {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				super.checkStateChanged(event);
-			}
-		};
-		resourceTree.addCheckStateListener(checkStateListener);
-		resourceTree.addDoubleClickListener(new TreeExpandingDoubleClickListener(resourceTree, checkStateListener));
-		resourceTree.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
-		resourceTree.setFilters(new ViewerFilter[] { new ViewerFilter() {
-			@Override
-			public boolean select(Viewer viewer, Object parentElement, Object element) {
-				// TODO: Filter by common navigator filter instead of supressing
-				// '.' prefixed folder
-				if (element instanceof IFolder) {
-					return !((IFolder) element).getName().startsWith(".");
-				}
-				return true;
-			}
-		} });
-	}
-
-	private void createGeneratorCombo(Composite container) {
-		Label lblGenerator = new Label(container, SWT.NONE);
-		lblGenerator.setText("Generator");
-		generatorCombo = new ComboViewer(container, SWT.READ_ONLY);
-		generatorCombo.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		generatorCombo.setLabelProvider(new GeneratorDescriptorLabelProvider());
-		generatorCombo.setContentProvider(new ArrayContentProvider());
-		List<GeneratorDescriptor> descriptors = Lists.newArrayList(GeneratorExtensions.getGeneratorDescriptors());
-		Collections.sort(descriptors, CoreGenerator.generatorOrder);
-		generatorCombo.setInput(descriptors);
-		generatorCombo.getCombo().select(0);
-		generatorCombo.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				refreshInput();
-			}
-		});
-	}
-
-	protected void refreshInput() {
-		lblNewLabel.setText("Choose: " + getSelectedGenerator().getContentType());
-		((SGenWizardPage2ContentProvider) resourceTree.getContentProvider()).setFileExtension(FileExtensions
-				.getFileExtension(getSelectedGenerator().getId()));
-		resourceTree.setInput(getSelectedProject());
-	}
-
-	protected IProject getSelectedProject() {
-		IPath containerPath = fileSelectionPage.getFilePath();
-		IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(containerPath);
-		return folder.getProject();
-	}
-
-	public List<EObject> getSelectedElements() {
-		List<EObject> selectedElements = Lists.newArrayList();
-		Object[] checkedElements = resourceTree.getCheckedElements();
-		for (Object object : checkedElements) {
-			if (object instanceof IFile) {
-				selectedElements.add(loadReferencedObject((IResource) object));
-			}
-		}
-		return selectedElements;
-	}
-
-	protected EObject loadReferencedObject(IResource resource) {
-		URI uri = URI.createPlatformResourceURI(resource.getFullPath().toString(), true);
-		ResourceSet resourceSet = new ResourceSetImpl();
-		Resource emfResource = resourceSet.getResource(uri, true);
-
-		GeneratorDescriptor desc = getSelectedGenerator();
-		String className = desc.getElementRefType();
-
-		TreeIterator<EObject> content = emfResource.getAllContents();
-		List<EObject> contentList = Lists.newArrayList(content);
-
-		for (EObject obj : contentList) {
-			if (obj.eClass().getInstanceClassName().equals(className))
-				return obj;
-		}
-
-		for (EObject obj : contentList) {
-			List<EClass> superClasses = obj.eClass().getEAllSuperTypes();
-			for (EClass superClass : superClasses) {
-				if (superClass.getInstanceClassName().equals(className)) {
-					return obj;
-				}
-			}
-		}
-		return null;
-	}
-
-	public GeneratorDescriptor getSelectedGenerator() {
-		return (GeneratorDescriptor) ((StructuredSelection) generatorCombo.getSelection()).getFirstElement();
-	}
-
-	private static class GeneratorDescriptorLabelProvider extends LabelProvider {
-
-		@Override
-		public String getText(Object element) {
-			if (element instanceof GeneratorDescriptor) {
-				return ((GeneratorDescriptor) element).getName();
-			}
-			return super.getText(element);
-		}
-
-		@Override
-		public Image getImage(Object element) {
-			if (element instanceof GeneratorDescriptor) {
-				return ((GeneratorDescriptor) element).getImage();
-			}
-			return super.getImage(element);
-		}
-	}
-}
+/**
+ * Copyright (c) 2013 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.generator.genmodel.ui.wizard;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.yakindu.sct.generator.core.extensions.FileExtensions;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
+import org.yakindu.sct.ui.wizards.ModelCreationWizardPage;
+
+import com.google.common.collect.Lists;
+
+/**
+ * 
+ * @author holger willebrandt - Initial contribution and API
+ * @author andreas muelder - extension point for contribution of file extensions
+ *         added
+ * @author oliver bohl - changed for more generic
+ * 
+ */
+public class SGenWizardPage2 extends WizardPage {
+
+	private final static Map<String, CoreGenerator> PROJECT_NATURES = new TreeMap<String, CoreGenerator>();
+	static {
+		PROJECT_NATURES.put("org.eclipse.cdt.core.cnature", CoreGenerator.C);
+		PROJECT_NATURES.put("org.eclipse.cdt.core.ccnature", CoreGenerator.Cpp);
+		PROJECT_NATURES.put(JavaCore.NATURE_ID, CoreGenerator.Java);
+	}
+
+	private ComboViewer generatorCombo;
+
+	protected CheckboxTreeViewer resourceTree;
+
+	private final ModelCreationWizardPage fileSelectionPage;
+
+	@SuppressWarnings("unused")
+	private final IStructuredSelection selection;
+
+	private Label lblNewLabel;
+
+	protected SGenWizardPage2(String pageName, ModelCreationWizardPage fileSelectionPage,
+			IStructuredSelection selection) {
+		super(pageName);
+		this.fileSelectionPage = fileSelectionPage;
+		this.selection = selection;
+	}
+
+	public void createControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+		setControl(container);
+		container.setLayout(new GridLayout(1, false));
+		createGeneratorCombo(container);
+		createObjectTree(container);
+		refreshInput();
+	}
+
+	private void createObjectTree(Composite container) {
+		lblNewLabel = new Label(container, SWT.NONE);
+		lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+		lblNewLabel.setText("Choose: " + getSelectedGenerator().getContentType());
+
+		resourceTree = new CheckboxTreeViewer(container, SWT.BORDER);
+		resourceTree.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+
+		resourceTree.setContentProvider(new SGenWizardPage2ContentProvider());
+		resourceTree.setLabelProvider(new SGenWizardPage2LabelProvider());
+
+		TreePropagatingCheckStateListener checkStateListener = new TreePropagatingCheckStateListener(resourceTree) {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				super.checkStateChanged(event);
+			}
+		};
+		resourceTree.addCheckStateListener(checkStateListener);
+		resourceTree.addDoubleClickListener(new TreeExpandingDoubleClickListener(resourceTree, checkStateListener));
+		resourceTree.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
+		resourceTree.setFilters(new ViewerFilter[]{new ViewerFilter() {
+			@Override
+			public boolean select(Viewer viewer, Object parentElement, Object element) {
+				// TODO: Filter by common navigator filter instead of supressing
+				// '.' prefixed folder
+				if (element instanceof IFolder) {
+					return !((IFolder) element).getName().startsWith(".");
+				}
+				return true;
+			}
+		}});
+	}
+
+	private void createGeneratorCombo(Composite container) {
+		Label lblGenerator = new Label(container, SWT.NONE);
+		lblGenerator.setText("Generator");
+		generatorCombo = new ComboViewer(container, SWT.READ_ONLY);
+		generatorCombo.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		generatorCombo.setLabelProvider(new GeneratorDescriptorLabelProvider());
+		generatorCombo.setContentProvider(new ArrayContentProvider());
+		List<IGeneratorDescriptor> descriptors = Lists.newArrayList(GeneratorExtensions.getGeneratorDescriptors());
+		Collections.sort(descriptors, CoreGenerator.generatorOrder);
+		generatorCombo.setInput(descriptors);
+		generatorCombo.getCombo().select(0);
+		generatorCombo.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				refreshInput();
+			}
+		});
+	}
+
+	protected void refreshInput() {
+		lblNewLabel.setText("Choose: " + getSelectedGenerator().getContentType());
+		((SGenWizardPage2ContentProvider) resourceTree.getContentProvider())
+				.setFileExtension(FileExtensions.getFileExtension(getSelectedGenerator().getId()));
+		resourceTree.setInput(getSelectedProject());
+	}
+
+	protected IProject getSelectedProject() {
+		IPath containerPath = fileSelectionPage.getFilePath();
+		IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(containerPath);
+		return folder.getProject();
+	}
+
+	public List<EObject> getSelectedElements() {
+		List<EObject> selectedElements = Lists.newArrayList();
+		Object[] checkedElements = resourceTree.getCheckedElements();
+		for (Object object : checkedElements) {
+			if (object instanceof IFile) {
+				selectedElements.add(loadReferencedObject((IResource) object));
+			}
+		}
+		return selectedElements;
+	}
+
+	protected EObject loadReferencedObject(IResource resource) {
+		URI uri = URI.createPlatformResourceURI(resource.getFullPath().toString(), true);
+		ResourceSet resourceSet = new ResourceSetImpl();
+		Resource emfResource = resourceSet.getResource(uri, true);
+
+		IGeneratorDescriptor desc = getSelectedGenerator();
+		String className = desc.getElementRefType();
+
+		TreeIterator<EObject> content = emfResource.getAllContents();
+		List<EObject> contentList = Lists.newArrayList(content);
+
+		for (EObject obj : contentList) {
+			if (obj.eClass().getInstanceClassName().equals(className))
+				return obj;
+		}
+
+		for (EObject obj : contentList) {
+			List<EClass> superClasses = obj.eClass().getEAllSuperTypes();
+			for (EClass superClass : superClasses) {
+				if (superClass.getInstanceClassName().equals(className)) {
+					return obj;
+				}
+			}
+		}
+		return null;
+	}
+
+	public IGeneratorDescriptor getSelectedGenerator() {
+		return (IGeneratorDescriptor) ((StructuredSelection) generatorCombo.getSelection()).getFirstElement();
+	}
+
+	private static class GeneratorDescriptorLabelProvider extends LabelProvider {
+
+		@Override
+		public String getText(Object element) {
+			if (element instanceof IGeneratorDescriptor) {
+				return ((IGeneratorDescriptor) element).getName();
+			}
+			return super.getText(element);
+		}
+
+		@Override
+		public Image getImage(Object element) {
+			if (element instanceof IGeneratorDescriptor) {
+				return ((IGeneratorDescriptor) element).getImage();
+			}
+			return super.getImage(element);
+		}
+	}
+}

+ 2 - 2
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenWizardPage2LabelProvider.java

@@ -21,7 +21,7 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.ide.IDE;
 import org.yakindu.sct.generator.core.extensions.FileExtensions;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 
 /**
  * 
@@ -38,7 +38,7 @@ class SGenWizardPage2LabelProvider extends LabelProvider {
 			return PlatformUI.getWorkbench().getSharedImages().getImage(IDE.SharedImages.IMG_OBJ_PROJECT);
 		} else if (element instanceof IFile) {
 			String generatorID = FileExtensions.getGeneratorForFileExtension(((IFile) element).getFileExtension());
-			GeneratorDescriptor genDesc = GeneratorExtensions.getGeneratorDescriptorForId(generatorID);
+			IGeneratorDescriptor genDesc = GeneratorExtensions.getGeneratorDescriptor(generatorID);
 			return genDesc.getImage();
 		}
 		return super.getImage(element);

+ 5 - 5
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java

@@ -25,7 +25,7 @@ import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
 import org.eclipse.xtext.scoping.impl.FilteringScope;
 import org.eclipse.xtext.scoping.impl.SimpleScope;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
 import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
@@ -71,8 +71,8 @@ public class SGenScopeProvider extends AbstractDeclarativeScopeProvider {
 		GeneratorModel generatorModel = (GeneratorModel) EcoreUtil2
 				.getRootContainer(context);
 		String id = generatorModel.getGeneratorId();
-		final GeneratorDescriptor desc = GeneratorExtensions
-				.getGeneratorDescriptorForId(id);
+		final IGeneratorDescriptor desc = GeneratorExtensions
+				.getGeneratorDescriptor(id);
 		if (desc == null)
 			return IScope.NULLSCOPE;
 		final String elementRefType = desc.getElementRefType();
@@ -138,8 +138,8 @@ public class SGenScopeProvider extends AbstractDeclarativeScopeProvider {
 		Assert.isNotNull(generatorModel);
 		String generatorId = generatorModel.getGeneratorId();
 
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(generatorId);
+		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(generatorId);
 
 		Iterable<IEObjectDescription> allElements = Lists.newArrayList();
 

+ 369 - 369
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java

@@ -1,369 +1,369 @@
-/**
- * Copyright (c) 2011 committers of YAKINDU and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     committers of YAKINDU - initial API and implementation
- */
-package org.yakindu.sct.generator.genmodel.validation;
-
-import static com.google.common.collect.Iterables.concat;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.transform;
-
-import java.util.List;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.xtext.EcoreUtil2;
-import org.eclipse.xtext.validation.Check;
-import org.yakindu.base.base.NamedElement;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
-import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
-import org.yakindu.sct.model.sgen.BoolLiteral;
-import org.yakindu.sct.model.sgen.DeprecatableElement;
-import org.yakindu.sct.model.sgen.FeatureConfiguration;
-import org.yakindu.sct.model.sgen.FeatureParameter;
-import org.yakindu.sct.model.sgen.FeatureParameterValue;
-import org.yakindu.sct.model.sgen.FeatureType;
-import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
-import org.yakindu.sct.model.sgen.GeneratorEntry;
-import org.yakindu.sct.model.sgen.GeneratorModel;
-import org.yakindu.sct.model.sgen.IntLiteral;
-import org.yakindu.sct.model.sgen.Literal;
-import org.yakindu.sct.model.sgen.ParameterTypes;
-import org.yakindu.sct.model.sgen.RealLiteral;
-import org.yakindu.sct.model.sgen.SGenPackage;
-import org.yakindu.sct.model.sgen.StringLiteral;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-/**
- * 
- * @author andreas muelder - Initial contribution and API
- * 
- */
-public class SGenJavaValidator extends AbstractSGenJavaValidator {
-
-	// Error messages
-	public static final String MISSING_REQUIRED_PARAMETER = "Missing required Parameter";
-	public static final String MISSING_REQUIRED_FEATURE = "Missing required feature";
-	public static final String DUPLICATE_PARAMETER = "Duplicate parameter!";
-	public static final String DUPLICATE_FEATURE = "Duplicate feature!";
-	public static final String UNKOWN_GENERATOR = "Unkown Generator";
-	public static final String INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED = "Incompatible type, Boolean expected";
-	public static final String INCOMPATIBLE_TYPE_INTEGER_EXPECTED = "Incompatible type, Integer expected";
-	public static final String INCOMPATIBLE_TYPE_FLOAT_EXPECTED = "Incompatible type, Float expected";
-	public static final String INCOMPATIBLE_TYPE_STRING_EXPECTED = "Incompatible type, String expected";
-	public static final String UNKNOWN_CONTENT_TYPE = "Unknown content type '";
-	public static final String DEPRECATED = "Element is depricated";
-	// Failure codes
-	public static final String CODE_REQUIRED_FEATURE = "code_req_feature";
-
-	@Check
-	public void checkContentType(GeneratorEntry entry) {
-		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(entry,
-				GeneratorModel.class);
-		GeneratorDescriptor descriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(generatorModel.getGeneratorId());
-		if (descriptor == null)
-			return;
-		String contentType = entry.getContentType();
-		if (contentType == null || contentType.trim().length() == 0) {
-			return;
-		}
-		if (!contentType.equals(descriptor.getContentType())) {
-			error(UNKNOWN_CONTENT_TYPE + contentType + "'",
-					SGenPackage.Literals.GENERATOR_ENTRY__CONTENT_TYPE);
-		}
-	}
-
-	@Check
-	public void checkParameterValueType(
-			final FeatureParameterValue parameterValue) {
-		if (parameterValue == null || parameterValue.getExpression() == null)
-			return;
-		Literal value = parameterValue.getExpression();
-		ParameterTypes parameterType = parameterValue.getParameter()
-				.getParameterType();
-		switch (parameterType) {
-		case BOOLEAN:
-			if (!(value instanceof BoolLiteral))
-				error(INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case INTEGER:
-			if (!(value instanceof IntLiteral))
-				error(INCOMPATIBLE_TYPE_INTEGER_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case FLOAT:
-			if (!(value instanceof RealLiteral))
-				error(INCOMPATIBLE_TYPE_FLOAT_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case STRING:
-			if (!(value instanceof StringLiteral))
-				error(INCOMPATIBLE_TYPE_STRING_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		}
-	}
-
-	@Check
-	public void checkParameterValue(final FeatureParameterValue value) {
-		if (value.getExpression() == null || value.getExpression() == null)
-			return;
-		GeneratorModel model = (GeneratorModel) EcoreUtil2
-				.getRootContainer(value);
-
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-
-		IDefaultFeatureValueProvider provider = LibraryExtensions
-				.getDefaultFeatureValueProvider(
-						generatorDescriptor.getLibraryIDs(), value
-								.getParameter().getFeatureType().getLibrary());
-		IStatus status = provider.validateParameterValue(value);
-		createMarker(status);
-	}
-
-	private void createMarker(IStatus status) {
-		switch (status.getSeverity()) {
-		case IStatus.ERROR:
-			super.error(status.getMessage(),
-					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case IStatus.WARNING:
-			super.warning(status.getMessage(),
-					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-		}
-	}
-
-	@Check
-	public void checkGeneratorExists(GeneratorModel model) {
-		GeneratorDescriptor descriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-		if (descriptor == null) {
-			error(String.format(UNKOWN_GENERATOR + " %s!",
-					model.getGeneratorId()),
-					SGenPackage.Literals.GENERATOR_MODEL__GENERATOR_ID);
-		}
-	}
-
-	@Check
-	public void checkDuplicateGeneratorEntryFeature(
-			final FeatureConfiguration config) {
-		GeneratorEntry entry = (GeneratorEntry) config.eContainer();
-		Iterable<FeatureConfiguration> filter = Iterables.filter(
-				entry.getFeatures(), new Predicate<FeatureConfiguration>() {
-					public boolean apply(FeatureConfiguration input) {
-						return (input.getType().getName().equals(config
-								.getType().getName()));
-					}
-				});
-		if (Iterables.size(filter) > 1) {
-			error(DUPLICATE_FEATURE,
-					SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
-		}
-
-	}
-
-	@Check
-	public void checkDuplicateFeatureParameter(final FeatureParameterValue value) {
-		FeatureConfiguration entry = (FeatureConfiguration) value.eContainer();
-		Iterable<FeatureParameterValue> filter = Iterables.filter(
-				entry.getParameterValues(),
-				new Predicate<FeatureParameterValue>() {
-					public boolean apply(FeatureParameterValue input) {
-						return (input.getParameter().getName().equals(value
-								.getParameter().getName()));
-					}
-				});
-		if (Iterables.size(filter) > 1) {
-			error(DUPLICATE_PARAMETER,
-					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__PARAMETER);
-		}
-	}
-
-	@Check
-	public void checkRequiredFeatures(GeneratorEntry entry) {
-		GeneratorModel model = (GeneratorModel) EcoreUtil2
-				.getRootContainer(entry);
-
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-
-		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
-
-		Iterable<FeatureType> requiredFeatures = filter(
-				concat(transform(
-						transform(libraryDescriptors, getFeatureTypeLibrary()),
-						getFeatureTypes())), isRequired());
-		List<String> configuredTypes = Lists.newArrayList();
-		for (FeatureConfiguration featureConfiguration : entry.getFeatures()) {
-			configuredTypes.add(featureConfiguration.getType().getName());
-		}
-		for (FeatureType featureType : requiredFeatures) {
-			if (!configuredTypes.contains(featureType.getName()))
-				error(String.format(MISSING_REQUIRED_FEATURE + " %s",
-						featureType.getName()),
-						SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
-						CODE_REQUIRED_FEATURE, featureType.getName());
-		}
-	}
-
-	@Check
-	public void checkDeprecatedFeatures(GeneratorEntry entry) {
-		Iterable<FeatureConfiguration> features = entry.getFeatures();
-		Iterable<FeatureType> deprecatedFeatures = filter(
-				transform(features, getFeatureType()), isDeprecated());
-		for (FeatureType feature : deprecatedFeatures) {
-			warning(String.format(DEPRECATED + " %s : %s", feature.getName(),
-					feature.getComment()),
-					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
-					feature.getName());
-		}
-	}
-
-	@Check
-	public void checkRequiredParameters(FeatureConfiguration configuration) {
-		GeneratorModel model = (GeneratorModel) EcoreUtil2
-				.getRootContainer(configuration);
-
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-
-		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
-
-		Iterable<String> requiredParameters = transform(
-				filter(concat(transform(
-						filter(concat(transform(
-								transform(libraryDescriptors,
-										getFeatureTypeLibrary()),
-								getFeatureTypes())), hasName(configuration
-								.getType().getName())), getParmeter())),
-						isRequiredParamter()), getName());
-
-		List<String> configuredParameters = Lists.newArrayList();
-
-		for (FeatureParameterValue featureParameterValue : configuration
-				.getParameterValues()) {
-			configuredParameters.add(featureParameterValue.getParameter()
-					.getName());
-		}
-		for (String string : requiredParameters) {
-			if (!configuredParameters.contains(string))
-				error(String.format(MISSING_REQUIRED_PARAMETER + " %s", string),
-						SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
-		}
-	}
-
-	@Check
-	public void checkDeprecatedParameters(GeneratorEntry entry) {
-		Iterable<FeatureParameter> deprecatedParameters = filter(
-				concat(transform(
-						transform(entry.getFeatures(), getFeatureType()),
-						getParmeter())), isDeprecated());
-		for (FeatureParameter parameter : deprecatedParameters) {
-			warning(String.format(DEPRECATED + " %s : %s", parameter.getName(),
-					parameter.getComment()),
-					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
-					parameter.getName());
-		}
-	}
-
-	private Function<NamedElement, String> getName() {
-		return new Function<NamedElement, String>() {
-
-			public String apply(NamedElement from) {
-				return from.getName();
-			}
-		};
-	}
-
-	private Predicate<FeatureParameter> isRequiredParamter() {
-		return new Predicate<FeatureParameter>() {
-
-			public boolean apply(FeatureParameter input) {
-				return !input.isOptional();
-			}
-		};
-	}
-
-	private Predicate<DeprecatableElement> isDeprecated() {
-		return new Predicate<DeprecatableElement>() {
-			public boolean apply(DeprecatableElement input) {
-				return input.isDeprecated();
-			}
-		};
-	}
-
-	private Function<FeatureType, Iterable<FeatureParameter>> getParmeter() {
-		return new Function<FeatureType, Iterable<FeatureParameter>>() {
-
-			public Iterable<FeatureParameter> apply(FeatureType from) {
-				return from.getParameters();
-			}
-		};
-	}
-
-	private Predicate<NamedElement> hasName(final String name) {
-		return new Predicate<NamedElement>() {
-
-			public boolean apply(NamedElement input) {
-				if (name == null) {
-					return (input == null);
-				}
-				return name.equals(input.getName());
-			}
-		};
-	}
-
-	private static Predicate<FeatureType> isRequired() {
-		return new Predicate<FeatureType>() {
-
-			public boolean apply(FeatureType input) {
-				return !input.isOptional();
-			}
-		};
-	}
-
-	private static Function<FeatureTypeLibrary, Iterable<FeatureType>> getFeatureTypes() {
-		return new Function<FeatureTypeLibrary, Iterable<FeatureType>>() {
-
-			public Iterable<FeatureType> apply(FeatureTypeLibrary from) {
-				return from.getTypes();
-			}
-		};
-	}
-
-	private static Function<LibraryDescriptor, FeatureTypeLibrary> getFeatureTypeLibrary() {
-		return new Function<LibraryExtensions.LibraryDescriptor, FeatureTypeLibrary>() {
-
-			public FeatureTypeLibrary apply(LibraryDescriptor from) {
-				return (FeatureTypeLibrary) new ResourceSetImpl()
-						.getResource(from.getURI(), true).getContents().get(0);
-			}
-		};
-	}
-
-	private static Function<FeatureConfiguration, FeatureType> getFeatureType() {
-		return new Function<FeatureConfiguration, FeatureType>() {
-			public FeatureType apply(FeatureConfiguration input) {
-				return input.getType();
-			}
-		};
-	}
-}
+/**
+ * Copyright (c) 2011 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.generator.genmodel.validation;
+
+import static com.google.common.collect.Iterables.concat;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.transform;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.xtext.EcoreUtil2;
+import org.eclipse.xtext.validation.Check;
+import org.yakindu.base.base.NamedElement;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
+import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
+import org.yakindu.sct.model.sgen.BoolLiteral;
+import org.yakindu.sct.model.sgen.DeprecatableElement;
+import org.yakindu.sct.model.sgen.FeatureConfiguration;
+import org.yakindu.sct.model.sgen.FeatureParameter;
+import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
+import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
+import org.yakindu.sct.model.sgen.GeneratorEntry;
+import org.yakindu.sct.model.sgen.GeneratorModel;
+import org.yakindu.sct.model.sgen.IntLiteral;
+import org.yakindu.sct.model.sgen.Literal;
+import org.yakindu.sct.model.sgen.ParameterTypes;
+import org.yakindu.sct.model.sgen.RealLiteral;
+import org.yakindu.sct.model.sgen.SGenPackage;
+import org.yakindu.sct.model.sgen.StringLiteral;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class SGenJavaValidator extends AbstractSGenJavaValidator {
+
+	// Error messages
+	public static final String MISSING_REQUIRED_PARAMETER = "Missing required Parameter";
+	public static final String MISSING_REQUIRED_FEATURE = "Missing required feature";
+	public static final String DUPLICATE_PARAMETER = "Duplicate parameter!";
+	public static final String DUPLICATE_FEATURE = "Duplicate feature!";
+	public static final String UNKOWN_GENERATOR = "Unkown Generator";
+	public static final String INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED = "Incompatible type, Boolean expected";
+	public static final String INCOMPATIBLE_TYPE_INTEGER_EXPECTED = "Incompatible type, Integer expected";
+	public static final String INCOMPATIBLE_TYPE_FLOAT_EXPECTED = "Incompatible type, Float expected";
+	public static final String INCOMPATIBLE_TYPE_STRING_EXPECTED = "Incompatible type, String expected";
+	public static final String UNKNOWN_CONTENT_TYPE = "Unknown content type '";
+	public static final String DEPRECATED = "Element is depricated";
+	// Failure codes
+	public static final String CODE_REQUIRED_FEATURE = "code_req_feature";
+
+	@Check
+	public void checkContentType(GeneratorEntry entry) {
+		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(entry,
+				GeneratorModel.class);
+		IGeneratorDescriptor descriptor = GeneratorExtensions
+				.getGeneratorDescriptor(generatorModel.getGeneratorId());
+		if (descriptor == null)
+			return;
+		String contentType = entry.getContentType();
+		if (contentType == null || contentType.trim().length() == 0) {
+			return;
+		}
+		if (!contentType.equals(descriptor.getContentType())) {
+			error(UNKNOWN_CONTENT_TYPE + contentType + "'",
+					SGenPackage.Literals.GENERATOR_ENTRY__CONTENT_TYPE);
+		}
+	}
+
+	@Check
+	public void checkParameterValueType(
+			final FeatureParameterValue parameterValue) {
+		if (parameterValue == null || parameterValue.getExpression() == null)
+			return;
+		Literal value = parameterValue.getExpression();
+		ParameterTypes parameterType = parameterValue.getParameter()
+				.getParameterType();
+		switch (parameterType) {
+		case BOOLEAN:
+			if (!(value instanceof BoolLiteral))
+				error(INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case INTEGER:
+			if (!(value instanceof IntLiteral))
+				error(INCOMPATIBLE_TYPE_INTEGER_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case FLOAT:
+			if (!(value instanceof RealLiteral))
+				error(INCOMPATIBLE_TYPE_FLOAT_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case STRING:
+			if (!(value instanceof StringLiteral))
+				error(INCOMPATIBLE_TYPE_STRING_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		}
+	}
+
+	@Check
+	public void checkParameterValue(final FeatureParameterValue value) {
+		if (value.getExpression() == null || value.getExpression() == null)
+			return;
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(value);
+
+		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+
+		IDefaultFeatureValueProvider provider = LibraryExtensions
+				.getDefaultFeatureValueProvider(
+						generatorDescriptor.getLibraryIDs(), value
+								.getParameter().getFeatureType().getLibrary());
+		IStatus status = provider.validateParameterValue(value);
+		createMarker(status);
+	}
+
+	private void createMarker(IStatus status) {
+		switch (status.getSeverity()) {
+		case IStatus.ERROR:
+			super.error(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case IStatus.WARNING:
+			super.warning(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+		}
+	}
+
+	@Check
+	public void checkGeneratorExists(GeneratorModel model) {
+		IGeneratorDescriptor descriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+		if (descriptor == null) {
+			error(String.format(UNKOWN_GENERATOR + " %s!",
+					model.getGeneratorId()),
+					SGenPackage.Literals.GENERATOR_MODEL__GENERATOR_ID);
+		}
+	}
+
+	@Check
+	public void checkDuplicateGeneratorEntryFeature(
+			final FeatureConfiguration config) {
+		GeneratorEntry entry = (GeneratorEntry) config.eContainer();
+		Iterable<FeatureConfiguration> filter = Iterables.filter(
+				entry.getFeatures(), new Predicate<FeatureConfiguration>() {
+					public boolean apply(FeatureConfiguration input) {
+						return (input.getType().getName().equals(config
+								.getType().getName()));
+					}
+				});
+		if (Iterables.size(filter) > 1) {
+			error(DUPLICATE_FEATURE,
+					SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
+		}
+
+	}
+
+	@Check
+	public void checkDuplicateFeatureParameter(final FeatureParameterValue value) {
+		FeatureConfiguration entry = (FeatureConfiguration) value.eContainer();
+		Iterable<FeatureParameterValue> filter = Iterables.filter(
+				entry.getParameterValues(),
+				new Predicate<FeatureParameterValue>() {
+					public boolean apply(FeatureParameterValue input) {
+						return (input.getParameter().getName().equals(value
+								.getParameter().getName()));
+					}
+				});
+		if (Iterables.size(filter) > 1) {
+			error(DUPLICATE_PARAMETER,
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__PARAMETER);
+		}
+	}
+
+	@Check
+	public void checkRequiredFeatures(GeneratorEntry entry) {
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(entry);
+
+		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+
+		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
+				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+
+		Iterable<FeatureType> requiredFeatures = filter(
+				concat(transform(
+						transform(libraryDescriptors, getFeatureTypeLibrary()),
+						getFeatureTypes())), isRequired());
+		List<String> configuredTypes = Lists.newArrayList();
+		for (FeatureConfiguration featureConfiguration : entry.getFeatures()) {
+			configuredTypes.add(featureConfiguration.getType().getName());
+		}
+		for (FeatureType featureType : requiredFeatures) {
+			if (!configuredTypes.contains(featureType.getName()))
+				error(String.format(MISSING_REQUIRED_FEATURE + " %s",
+						featureType.getName()),
+						SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
+						CODE_REQUIRED_FEATURE, featureType.getName());
+		}
+	}
+
+	@Check
+	public void checkDeprecatedFeatures(GeneratorEntry entry) {
+		Iterable<FeatureConfiguration> features = entry.getFeatures();
+		Iterable<FeatureType> deprecatedFeatures = filter(
+				transform(features, getFeatureType()), isDeprecated());
+		for (FeatureType feature : deprecatedFeatures) {
+			warning(String.format(DEPRECATED + " %s : %s", feature.getName(),
+					feature.getComment()),
+					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
+					feature.getName());
+		}
+	}
+
+	@Check
+	public void checkRequiredParameters(FeatureConfiguration configuration) {
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(configuration);
+
+		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+
+		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
+				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+
+		Iterable<String> requiredParameters = transform(
+				filter(concat(transform(
+						filter(concat(transform(
+								transform(libraryDescriptors,
+										getFeatureTypeLibrary()),
+								getFeatureTypes())), hasName(configuration
+								.getType().getName())), getParmeter())),
+						isRequiredParamter()), getName());
+
+		List<String> configuredParameters = Lists.newArrayList();
+
+		for (FeatureParameterValue featureParameterValue : configuration
+				.getParameterValues()) {
+			configuredParameters.add(featureParameterValue.getParameter()
+					.getName());
+		}
+		for (String string : requiredParameters) {
+			if (!configuredParameters.contains(string))
+				error(String.format(MISSING_REQUIRED_PARAMETER + " %s", string),
+						SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
+		}
+	}
+
+	@Check
+	public void checkDeprecatedParameters(GeneratorEntry entry) {
+		Iterable<FeatureParameter> deprecatedParameters = filter(
+				concat(transform(
+						transform(entry.getFeatures(), getFeatureType()),
+						getParmeter())), isDeprecated());
+		for (FeatureParameter parameter : deprecatedParameters) {
+			warning(String.format(DEPRECATED + " %s : %s", parameter.getName(),
+					parameter.getComment()),
+					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
+					parameter.getName());
+		}
+	}
+
+	private Function<NamedElement, String> getName() {
+		return new Function<NamedElement, String>() {
+
+			public String apply(NamedElement from) {
+				return from.getName();
+			}
+		};
+	}
+
+	private Predicate<FeatureParameter> isRequiredParamter() {
+		return new Predicate<FeatureParameter>() {
+
+			public boolean apply(FeatureParameter input) {
+				return !input.isOptional();
+			}
+		};
+	}
+
+	private Predicate<DeprecatableElement> isDeprecated() {
+		return new Predicate<DeprecatableElement>() {
+			public boolean apply(DeprecatableElement input) {
+				return input.isDeprecated();
+			}
+		};
+	}
+
+	private Function<FeatureType, Iterable<FeatureParameter>> getParmeter() {
+		return new Function<FeatureType, Iterable<FeatureParameter>>() {
+
+			public Iterable<FeatureParameter> apply(FeatureType from) {
+				return from.getParameters();
+			}
+		};
+	}
+
+	private Predicate<NamedElement> hasName(final String name) {
+		return new Predicate<NamedElement>() {
+
+			public boolean apply(NamedElement input) {
+				if (name == null) {
+					return (input == null);
+				}
+				return name.equals(input.getName());
+			}
+		};
+	}
+
+	private static Predicate<FeatureType> isRequired() {
+		return new Predicate<FeatureType>() {
+
+			public boolean apply(FeatureType input) {
+				return !input.isOptional();
+			}
+		};
+	}
+
+	private static Function<FeatureTypeLibrary, Iterable<FeatureType>> getFeatureTypes() {
+		return new Function<FeatureTypeLibrary, Iterable<FeatureType>>() {
+
+			public Iterable<FeatureType> apply(FeatureTypeLibrary from) {
+				return from.getTypes();
+			}
+		};
+	}
+
+	private static Function<LibraryDescriptor, FeatureTypeLibrary> getFeatureTypeLibrary() {
+		return new Function<LibraryExtensions.LibraryDescriptor, FeatureTypeLibrary>() {
+
+			public FeatureTypeLibrary apply(LibraryDescriptor from) {
+				return (FeatureTypeLibrary) new ResourceSetImpl()
+						.getResource(from.getURI(), true).getContents().get(0);
+			}
+		};
+	}
+
+	private static Function<FeatureConfiguration, FeatureType> getFeatureType() {
+		return new Function<FeatureConfiguration, FeatureType>() {
+			public FeatureType apply(FeatureConfiguration input) {
+				return input.getType();
+			}
+		};
+	}
+}

+ 146 - 146
test-plugins/org.yakindu.sct.generator.genmodel.test/src/org/yakindu/sct/generator/genmodel/test/HelpIntegrationTest.java

@@ -1,146 +1,146 @@
-/**
- * Copyright (c) 2012 committers of YAKINDU and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     committers of YAKINDU - initial API and implementation
- */
-package org.yakindu.sct.generator.genmodel.test;
-
-import static org.junit.Assert.fail;
-
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
-import org.eclipse.xtext.junit4.InjectWith;
-import org.eclipse.xtext.junit4.XtextRunner;
-import org.eclipse.xtext.resource.IEObjectDescription;
-import org.eclipse.xtext.resource.XtextResourceSet;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
-import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
-import org.yakindu.sct.generator.genmodel.test.util.SGenInjectorProvider;
-import org.yakindu.sct.generator.genmodel.ui.help.SGenUserHelpDocumentationProvider;
-import org.yakindu.sct.model.sgen.SGenPackage;
-
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-
-/**
- * Checks if all Generator Features have a corresponding documentation section
- * in the user guide.
- * 
- * @author andreas muelder - Initial contribution and API
- * 
- */
-@RunWith(XtextRunner.class)
-@InjectWith(SGenInjectorProvider.class)
-public class HelpIntegrationTest {
-
-	private static final String YAKINDU_JAVA = "yakindu::java";
-	private static final String YAKINDU_C = "yakindu::c";
-	private static final String YAKINDU_CPP = "yakindu::cpp";
-	private static final String YAKINDU_GENERIC = "yakindu::generic";
-	private static final String YAKINDU_XPAND = "yakindu::xpand";
-	@Inject
-	private IEObjectDocumentationProvider documentationProvider;
-	@Inject
-	private XtextResourceSet resourceSet;
-	@Inject
-	private Injector injector;
-
-	@Test
-	public void checkJavaGeneratorFeatureDocumentation() {
-		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_JAVA);
-		if (missingDocumentation.size() > 0) {
-			fail("Missing generator feature(s) documentation for generator "
-					+ YAKINDU_JAVA + ": " + missingDocumentation);
-		}
-	}
-
-	@Test
-	public void checkCGeneratorFeatureDocumentation() {
-		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_C);
-		if (missingDocumentation.size() > 0) {
-			fail("Missing generator feature(s) documentation for generator "
-					+ YAKINDU_C + ": " + missingDocumentation);
-		}
-	}
-
-	@Test
-	@Ignore
-	public void checkCppGeneratorFeatureDocumentation() {
-		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_CPP);
-		if (missingDocumentation.size() > 0) {
-			fail("Missing generator feature(s) documentation for generator "
-					+ YAKINDU_CPP + ": " + missingDocumentation);
-		}
-
-	}
-
-	@Test
-	public void checkGenericGeneratorFeatureDocumentation() {
-		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_GENERIC);
-		if (missingDocumentation.size() > 0) {
-			fail("Missing generator feature(s) documentation for generator "
-					+ YAKINDU_GENERIC + ": " + missingDocumentation);
-		}
-
-	}
-
-	@Test
-	public void checkXpandGeneratorFeatureDocumentation() {
-		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_XPAND);
-		if (missingDocumentation.size() > 0) {
-			fail("Missing generator feature(s) documentation for generator "
-					+ YAKINDU_XPAND + ": " + missingDocumentation);
-		}
-
-	}
-
-	private List<String> getFeaturesWithoutDocumentation(String generatorId) {
-		
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(generatorId);
-		
-		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
-		
-		Iterable<IEObjectDescription> allElements = Lists.newArrayList();
-		for (LibraryDescriptor desc : libraryDescriptor) {
-			Resource library = resourceSet.getResource(desc.getURI(), true);
-			FeatureResourceDescription description = new FeatureResourceDescription(
-					library);
-			injector.injectMembers(description);
-			allElements = Iterables.concat(allElements,
-					description.getExportedObjects());
-		}
-		List<String> missingDocumentation = Lists.newArrayList();
-		for (IEObjectDescription desc : allElements) {
-			if (desc.getEClass() != SGenPackage.Literals.FEATURE_TYPE)
-				continue;
-			EObject eObjectOrProxy = desc.getEObjectOrProxy();
-			String documentation = documentationProvider
-					.getDocumentation(eObjectOrProxy);
-			if (documentation == null
-					|| SGenUserHelpDocumentationProvider.EMPTY_DOCUMENTATION
-							.equals(documentation)) {
-				missingDocumentation.add(desc.getName().toString());
-			}
-		}
-		return missingDocumentation;
-	}
-
-}
+/**
+ * Copyright (c) 2012 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.generator.genmodel.test;
+
+import static org.junit.Assert.fail;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.XtextResourceSet;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
+import org.yakindu.sct.generator.core.extensions.IGeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
+import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
+import org.yakindu.sct.generator.genmodel.test.util.SGenInjectorProvider;
+import org.yakindu.sct.generator.genmodel.ui.help.SGenUserHelpDocumentationProvider;
+import org.yakindu.sct.model.sgen.SGenPackage;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+/**
+ * Checks if all Generator Features have a corresponding documentation section
+ * in the user guide.
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+@RunWith(XtextRunner.class)
+@InjectWith(SGenInjectorProvider.class)
+public class HelpIntegrationTest {
+
+	private static final String YAKINDU_JAVA = "yakindu::java";
+	private static final String YAKINDU_C = "yakindu::c";
+	private static final String YAKINDU_CPP = "yakindu::cpp";
+	private static final String YAKINDU_GENERIC = "yakindu::generic";
+	private static final String YAKINDU_XPAND = "yakindu::xpand";
+	@Inject
+	private IEObjectDocumentationProvider documentationProvider;
+	@Inject
+	private XtextResourceSet resourceSet;
+	@Inject
+	private Injector injector;
+
+	@Test
+	public void checkJavaGeneratorFeatureDocumentation() {
+		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_JAVA);
+		if (missingDocumentation.size() > 0) {
+			fail("Missing generator feature(s) documentation for generator "
+					+ YAKINDU_JAVA + ": " + missingDocumentation);
+		}
+	}
+
+	@Test
+	public void checkCGeneratorFeatureDocumentation() {
+		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_C);
+		if (missingDocumentation.size() > 0) {
+			fail("Missing generator feature(s) documentation for generator "
+					+ YAKINDU_C + ": " + missingDocumentation);
+		}
+	}
+
+	@Test
+	@Ignore
+	public void checkCppGeneratorFeatureDocumentation() {
+		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_CPP);
+		if (missingDocumentation.size() > 0) {
+			fail("Missing generator feature(s) documentation for generator "
+					+ YAKINDU_CPP + ": " + missingDocumentation);
+		}
+
+	}
+
+	@Test
+	public void checkGenericGeneratorFeatureDocumentation() {
+		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_GENERIC);
+		if (missingDocumentation.size() > 0) {
+			fail("Missing generator feature(s) documentation for generator "
+					+ YAKINDU_GENERIC + ": " + missingDocumentation);
+		}
+
+	}
+
+	@Test
+	public void checkXpandGeneratorFeatureDocumentation() {
+		List<String> missingDocumentation = getFeaturesWithoutDocumentation(YAKINDU_XPAND);
+		if (missingDocumentation.size() > 0) {
+			fail("Missing generator feature(s) documentation for generator "
+					+ YAKINDU_XPAND + ": " + missingDocumentation);
+		}
+
+	}
+
+	private List<String> getFeaturesWithoutDocumentation(String generatorId) {
+		
+		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(generatorId);
+		
+		Iterable<LibraryDescriptor> libraryDescriptor = LibraryExtensions
+				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+		
+		Iterable<IEObjectDescription> allElements = Lists.newArrayList();
+		for (LibraryDescriptor desc : libraryDescriptor) {
+			Resource library = resourceSet.getResource(desc.getURI(), true);
+			FeatureResourceDescription description = new FeatureResourceDescription(
+					library);
+			injector.injectMembers(description);
+			allElements = Iterables.concat(allElements,
+					description.getExportedObjects());
+		}
+		List<String> missingDocumentation = Lists.newArrayList();
+		for (IEObjectDescription desc : allElements) {
+			if (desc.getEClass() != SGenPackage.Literals.FEATURE_TYPE)
+				continue;
+			EObject eObjectOrProxy = desc.getEObjectOrProxy();
+			String documentation = documentationProvider
+					.getDocumentation(eObjectOrProxy);
+			if (documentation == null
+					|| SGenUserHelpDocumentationProvider.EMPTY_DOCUMENTATION
+							.equals(documentation)) {
+				missingDocumentation.add(desc.getName().toString());
+			}
+		}
+		return missingDocumentation;
+	}
+
+}