浏览代码

Add EValidator for invalid domains

Andreas Muelder 9 年之前
父节点
当前提交
6156f44b4c

+ 3 - 3
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/DomainRegistry.java

@@ -30,7 +30,7 @@ import org.eclipse.xtext.EcoreUtil2;
 import org.osgi.framework.Bundle;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.base.base.DomainElement;
-import org.yakindu.sct.domain.extension.DomainStatus.Status;
+import org.yakindu.sct.domain.extension.DomainStatus.Severity;
 import org.yakindu.sct.domain.extension.impl.DomainImpl;
 import org.yakindu.sct.domain.extension.impl.ModuleContribution;
 
@@ -132,8 +132,8 @@ public class DomainRegistry {
 
 	public static DomainStatus getDomainStatus(String domainID) {
 		if (!DomainRegistry.domainExists(domainID)) {
-			return new DomainStatus(Status.ERROR,
-					String.format(String.format("Domain '%s' is not available!", domainID)));
+			return new DomainStatus(Severity.ERROR,
+					String.format(String.format("Domain '%s' is not available.", domainID)));
 		} else {
 			IDomain domain = DomainRegistry.getDomain(domainID);
 			return domain.getAvailabilityStatus();

+ 6 - 6
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/DomainStatus.java

@@ -16,25 +16,25 @@ package org.yakindu.sct.domain.extension;
  */
 public class DomainStatus {
 
-	public static final DomainStatus OK = new DomainStatus(Status.OK);
+	public static final DomainStatus OK = new DomainStatus(Severity.OK);
 
-	public static enum Status {
+	public static enum Severity {
 		OK, ERROR
 	}
 
-	private Status status;
+	private Severity status;
 	private String message;
 
-	public DomainStatus(Status status, String message) {
+	public DomainStatus(Severity status, String message) {
 		this.status = status;
 		this.message = message;
 	}
 
-	public DomainStatus(Status status) {
+	public DomainStatus(Severity status) {
 		this.status = status;
 	}
 
-	public Status getStatus() {
+	public Severity getSeverity() {
 		return status;
 	}
 

+ 59 - 0
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/validation/DomainValidator.java

@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2016 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.model.sgraph.validation;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+import org.yakindu.base.base.DomainElement;
+import org.yakindu.sct.domain.extension.DomainRegistry;
+import org.yakindu.sct.domain.extension.DomainStatus;
+import org.yakindu.sct.domain.extension.DomainStatus.Severity;
+
+/**
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class DomainValidator implements EValidator {
+
+	public static final String MSG_DOMAIN_UNAVAILABLE = "Domain '%s' not found!";
+	public static final String CODE_DOMAIN_UNAVAILABLE = "DomainUnavailable";
+
+	@Override
+	public boolean validate(EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return false;
+	}
+
+	@Override
+	public boolean validate(EClass eClass, EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		if (eObject instanceof DomainElement) {
+			DomainStatus status = DomainRegistry.getDomainStatus(((DomainElement) eObject).getDomainID());
+			if (status.getSeverity() != Severity.OK) {
+				diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR, "DomainValidator", 0, status.getMessage(),
+						new Object[] { eObject }));
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public boolean validate(EDataType eDataType, Object value, DiagnosticChain diagnostics,
+			Map<Object, Object> context) {
+		return false;
+	}
+
+}

+ 4 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/DiagramActivator.java

@@ -10,9 +10,12 @@
  */
 package org.yakindu.sct.ui.editor;
 
+import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
+import org.yakindu.sct.model.sgraph.SGraphPackage;
+import org.yakindu.sct.model.sgraph.validation.DomainValidator;
 
 /**
  * 
@@ -37,6 +40,7 @@ public class DiagramActivator extends AbstractUIPlugin {
 		super.start(context);
 		plugin = this;
 		PreferencesHint.registerPreferenceStore(DIAGRAM_PREFERENCES_HINT, getPreferenceStore());
+		EValidator.Registry.INSTANCE.put(SGraphPackage.eINSTANCE, new DomainValidator());
 	}
 
 	@Override

+ 2 - 2
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editor/StatechartDiagramEditor.java

@@ -49,7 +49,7 @@ import org.yakindu.base.base.DomainElement;
 import org.yakindu.base.xtext.utils.gmf.resource.DirtyStateListener;
 import org.yakindu.sct.domain.extension.DomainRegistry;
 import org.yakindu.sct.domain.extension.DomainStatus;
-import org.yakindu.sct.domain.extension.DomainStatus.Status;
+import org.yakindu.sct.domain.extension.DomainStatus.Severity;
 import org.yakindu.sct.domain.extension.IDomain;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.DiagramActivator;
@@ -120,7 +120,7 @@ public class StatechartDiagramEditor extends DiagramPartitioningEditor implement
 		EObject element = getDiagram().getElement();
 		if (element instanceof DomainElement) {
 			DomainStatus domainStatus = DomainRegistry.getDomainStatus(((DomainElement) element).getDomainID());
-			if (domainStatus.getStatus() != Status.OK)
+			if (domainStatus.getSeverity() != Severity.OK)
 				return false;
 		}
 		return super.isEditable();

+ 1 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StatechartDiagramEditPart.java

@@ -59,7 +59,7 @@ public class StatechartDiagramEditPart extends DiagramEditPart implements IDiagr
 		final DomainElement domainElement = EcoreUtil2.getContainerOfType(resolveSemanticElement(),
 				DomainElement.class);
 		DomainStatus domainStatus = DomainRegistry.getDomainStatus(domainElement.getDomainID());
-		if (domainStatus.getStatus() != DomainStatus.Status.OK) {
+		if (domainStatus.getSeverity() != DomainStatus.Severity.OK) {
 			disableEditor(domainStatus.getMessage());
 		}
 	}