Переглянути джерело

disable Editor when domain is not available #936

Andreas Muelder 9 роки тому
батько
коміт
51a295ef03

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

@@ -30,6 +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.impl.DomainImpl;
 import org.yakindu.sct.domain.extension.impl.ModuleContribution;
 
@@ -83,7 +84,6 @@ public class DomainRegistry {
 			if (defaultDomainID.equals(id)) {
 				throw new IllegalArgumentException("No default domain found!");
 			}
-			System.err.println("Could not find domain descriptor for id " + id + " - > using default domain");
 			return getDomain(defaultDomainID);
 		}
 	}
@@ -130,6 +130,16 @@ public class DomainRegistry {
 		return result;
 	}
 
+	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)));
+		} else {
+			IDomain domain = DomainRegistry.getDomain(domainID);
+			return domain.getAvailabilityStatus();
+		}
+	}
+
 	protected static void initFromExtensions() {
 		List<ModuleContribution> moduleDescriptors = new ArrayList<>();
 		IConfigurationElement[] configurationElements = Platform.getExtensionRegistry()
@@ -178,5 +188,4 @@ public class DomainRegistry {
 					}
 				}), provider);
 	}
-
 }

+ 1 - 1
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/IDomain.java

@@ -41,6 +41,6 @@ public interface IDomain {
 
 	URL getImagePath();
 
-	DomainStatus isAvailable();
+	DomainStatus getAvailabilityStatus();
 
 }

+ 2 - 1
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/impl/DomainImpl.java

@@ -101,6 +101,7 @@ public class DomainImpl implements IDomain {
 		this.description = description;
 		this.imagePath = imagePath;
 		this.modules = modules;
+		this.statusProvider = provider;
 		initializeCache();
 	}
 
@@ -162,7 +163,7 @@ public class DomainImpl implements IDomain {
 	}
 
 	@Override
-	public DomainStatus isAvailable() {
+	public DomainStatus getAvailabilityStatus() {
 		return statusProvider.getDomainStatus();
 	}
 

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

@@ -1,49 +0,0 @@
-/**
- * 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 org.eclipse.xtext.validation.AbstractDeclarativeValidator;
-import org.eclipse.xtext.validation.Check;
-import org.eclipse.xtext.validation.EValidatorRegistrar;
-import org.yakindu.base.base.BasePackage;
-import org.yakindu.base.base.DomainElement;
-import org.yakindu.sct.domain.extension.DomainRegistry;
-
-import com.google.inject.Inject;
-
-/**
- * @author andreas muelder - Initial contribution and API
- * 
- */
-public class DomainValidator extends AbstractDeclarativeValidator {
-
-	public static final String MSG_DOMAIN_UNAVAILABLE = "Domain '%s' not found!";
-	public static final String CODE_DOMAIN_UNAVAILABLE = "DomainUnavailable";
-
-	@Check
-	public void checkDomainAvailable(DomainElement element) {
-		if (!DomainRegistry.domainExists(element.getDomainID())) {
-			error(String.format(MSG_DOMAIN_UNAVAILABLE, element.getDomainID()), element,
-					BasePackage.Literals.NAMED_ELEMENT__NAME, CODE_DOMAIN_UNAVAILABLE);
-		}
-	}
-
-	@Override
-	public boolean isLanguageSpecific() {
-		return false;
-	}
-
-	@Inject
-	public void register(EValidatorRegistrar registrar) {
-		// Do not register because this validator is only a composite #398987
-	}
-
-}

+ 0 - 1
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/validation/SGraphJavaValidator.java

@@ -29,7 +29,6 @@ import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
 import org.eclipse.xtext.validation.Check;
 import org.eclipse.xtext.validation.CheckType;
-import org.eclipse.xtext.validation.ComposedChecks;
 import org.eclipse.xtext.validation.EValidatorRegistrar;
 import org.yakindu.base.base.BasePackage;
 import org.yakindu.sct.model.sgraph.Choice;

+ 1 - 2
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/STextJavaValidator.java

@@ -71,7 +71,6 @@ import org.yakindu.sct.model.sgraph.Trigger;
 import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.model.sgraph.resource.AbstractSCTResource;
 import org.yakindu.sct.model.sgraph.util.ContextElementAdapter;
-import org.yakindu.sct.model.sgraph.validation.DomainValidator;
 import org.yakindu.sct.model.sgraph.validation.SCTResourceValidator;
 import org.yakindu.sct.model.sgraph.validation.SGraphJavaValidator;
 import org.yakindu.sct.model.stext.services.STextGrammarAccess;
@@ -110,7 +109,7 @@ import com.google.inject.name.Named;
  * @author muelder
  * 
  */
-@ComposedChecks(validators = { SGraphJavaValidator.class, SCTResourceValidator.class, ExpressionsJavaValidator.class, DomainValidator.class })
+@ComposedChecks(validators = { SGraphJavaValidator.class, SCTResourceValidator.class, ExpressionsJavaValidator.class })
 public class STextJavaValidator extends AbstractSTextJavaValidator implements STextValidationMessages {
 
 	@Inject

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

@@ -45,8 +45,11 @@ import org.eclipse.ui.help.IWorkbenchHelpSystem;
 import org.eclipse.ui.ide.IGotoMarker;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.xtext.ui.XtextProjectHelper;
+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.IDomain;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.DiagramActivator;
@@ -113,6 +116,16 @@ public class StatechartDiagramEditor extends DiagramPartitioningEditor implement
 		super(true);
 	}
 
+	public boolean isEditable() {
+		EObject element = getDiagram().getElement();
+		if (element instanceof DomainElement) {
+			DomainStatus domainStatus = DomainRegistry.getDomainStatus(((DomainElement) element).getDomainID());
+			if (domainStatus.getStatus() != Status.OK)
+				return false;
+		}
+		return super.isEditable();
+	};
+
 	@Override
 	public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
 		if (IContentOutlinePage.class.equals(type)) {

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

@@ -30,7 +30,7 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.xtext.EcoreUtil2;
 import org.yakindu.base.base.DomainElement;
 import org.yakindu.sct.domain.extension.DomainRegistry;
-import org.yakindu.sct.model.sgraph.validation.DomainValidator;
+import org.yakindu.sct.domain.extension.DomainStatus;
 import org.yakindu.sct.ui.editor.DiagramActivator;
 import org.yakindu.sct.ui.editor.policies.CompositeElementCanonicalEditPolicy;
 
@@ -55,27 +55,28 @@ public class StatechartDiagramEditPart extends DiagramEditPart implements IDiagr
 		validateDomain();
 	}
 
-	private void validateDomain() {
+	protected void validateDomain() {
 		final DomainElement domainElement = EcoreUtil2.getContainerOfType(resolveSemanticElement(),
 				DomainElement.class);
-		if (domainElement != null && !DomainRegistry.domainExists(domainElement.getDomainID())) {
-			showInvalidDomainMessage(domainElement.getDomainID());
-			disableEditMode();
+		DomainStatus domainStatus = DomainRegistry.getDomainStatus(domainElement.getDomainID());
+		if (domainStatus.getStatus() != DomainStatus.Status.OK) {
+			disableEditor(domainStatus.getMessage());
 		}
 	}
 
-	private void showInvalidDomainMessage(String id) {
+	private void disableEditor(String msg) {
 		RootEditPart rootEditPart = getRoot();
 		if (rootEditPart instanceof RenderedDiagramRootEditPart) {
 			IFigure layer = ((RenderedDiagramRootEditPart) rootEditPart)
 					.getLayer(SCTRenderedDiagramRootEditPart.WATERMARK_LAYER);
-			Label figure = new Label(String.format(DomainValidator.MSG_DOMAIN_UNAVAILABLE, id));
+			Label figure = new Label(msg);
 			figure.setIcon(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
 			figure.setForegroundColor(org.eclipse.draw2d.ColorConstants.red);
 			figure.setFont(INVALID_DOMAIN_FONT);
 			figure.setSize(figure.getPreferredSize());
 			layer.add(figure);
 		}
+		disableEditMode();
 	}
 
 	@Override