Browse Source

Implemented basic infrastructure for GeneratorModel validation rules

Andreas Mülder 13 years ago
parent
commit
5887523c30

+ 6 - 0
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/features/CDefaultFeatureValueProvider.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.generator.c.features;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
@@ -33,4 +35,8 @@ public class CDefaultFeatureValueProvider extends
 		//TODO: Implement my default properties
 	}
 
+	public IStatus validateParameterValue(FeatureParameterValue value) {
+		return Status.OK_STATUS;
+	}
+
 }

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

@@ -8,6 +8,9 @@ import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.URI;
 import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
+import org.yakindu.sct.model.sgen.FeatureParameter;
+import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
@@ -74,6 +77,20 @@ public class LibraryExtensions {
 				});
 	}
 
+	public static IDefaultFeatureValueProvider getDefaultFeatureValueProvider(
+			String generatorId, FeatureTypeLibrary library) {
+		Iterable<LibraryDescriptor> libraryDescriptor = getLibraryDescriptor(generatorId);
+		for (LibraryDescriptor desc : libraryDescriptor) {
+			IDefaultFeatureValueProvider defaultProvider = desc
+					.createFeatureValueProvider();
+			if (defaultProvider != null
+					&& defaultProvider.isProviderFor(library)) {
+				return defaultProvider;
+			}
+		}
+		return null;
+	}
+
 	private static final class CreateLibraryDescriptor implements
 			Function<IConfigurationElement, LibraryDescriptor> {
 

+ 9 - 0
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/AbstractDefaultFeatureValueProvider.java

@@ -2,8 +2,11 @@ package org.yakindu.sct.generator.core.features;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.util.EList;
+import org.yakindu.sct.generator.core.GeneratorActivator;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
 import org.yakindu.sct.model.sgen.FeatureParameter;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
@@ -64,4 +67,10 @@ public abstract class AbstractDefaultFeatureValueProvider implements
 								.toPlatformString(true))).getProject();
 	}
 
+	protected IStatus error(String msg) {
+		return new Status(IStatus.ERROR, GeneratorActivator.PLUGIN_ID, msg);
+	}
+	protected IStatus warning(String msg) {
+		return new Status(IStatus.WARNING, GeneratorActivator.PLUGIN_ID, msg);
+	}
 }

+ 4 - 0
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/features/IDefaultFeatureValueProvider.java

@@ -1,6 +1,8 @@
 package org.yakindu.sct.generator.core.features;
 
+import org.eclipse.core.runtime.IStatus;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
+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.sgraph.Statechart;
@@ -14,6 +16,8 @@ public interface IDefaultFeatureValueProvider {
 
 	public FeatureConfiguration createDefaultFeatureConfiguration(
 			FeatureType type, Statechart statechart);
+	
+	public IStatus validateParameterValue(FeatureParameterValue value);
 
 	public boolean isProviderFor(FeatureTypeLibrary library);
 	

+ 6 - 0
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/features/CPPDefaultFeatureValueProvider.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.generator.cpp.features;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
@@ -33,4 +35,8 @@ public class CPPDefaultFeatureValueProvider extends
 		//TODO: Implement my default properties
 	}
 
+	public IStatus validateParameterValue(FeatureParameterValue value) {
+		return Status.OK_STATUS;
+	}
+
 }

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

@@ -1,9 +1,14 @@
 package org.yakindu.sct.generator.genmodel.validation;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.validation.Check;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
+import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
+import org.yakindu.sct.model.sgen.GeneratorModel;
 import org.yakindu.sct.model.sgen.SGenPackage;
 
 import com.google.common.base.Predicate;
@@ -16,6 +21,29 @@ import com.google.common.collect.Iterables;
  */
 public class SGenJavaValidator extends AbstractSGenJavaValidator {
 
+	@Check
+	public void checkParameterValue(final FeatureParameterValue value) {
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(value);
+		IDefaultFeatureValueProvider provider = LibraryExtensions
+				.getDefaultFeatureValueProvider(model.getGeneratorId(), value
+						.getParameter().getFeatureType().getLibrary());
+		IStatus status = provider.validateParameterValue(value);
+		createMarker(status);
+	}
+
+	private void createMarker(IStatus status) {
+		switch (status.getCode()) {
+		case IStatus.ERROR:
+			super.error(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__VALUE);
+			break;
+		case IStatus.WARNING:
+			super.warning(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__VALUE);
+		}
+	}
+
 	@Check
 	public void checkDuplicateGeneratorEntryFeature(
 			final FeatureConfiguration config) {

+ 6 - 0
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureValueProvider.java

@@ -4,6 +4,8 @@ import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.BASE
 import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.IMPLEMENTATION_SUFFIX;
 import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.LIBRARY_NAME;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.yakindu.sct.generator.core.features.AbstractDefaultFeatureValueProvider;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
@@ -32,4 +34,8 @@ public class JavaFeatureValueProvider extends
 		return library.getName().equals(LIBRARY_NAME);
 	}
 
+	public IStatus validateParameterValue(FeatureParameterValue value) {
+		return super.error("falsch");
+	}
+
 }