Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2018-03-11 12:32:46 +0000
committerHenrik Rentz-Reichert2018-03-11 12:32:46 +0000
commitd2a982a5bc1ed42b4328e0c53941b2f6dc2fd752 (patch)
treee2c037fbaa4d7d45521b91fc0b7c57ef9d0e4ca5
parentfa768082ea55b0b05a41c88b1e7a2db4daeb107e (diff)
downloadorg.eclipse.etrice-d2a982a5bc1ed42b4328e0c53941b2f6dc2fd752.tar.gz
org.eclipse.etrice-d2a982a5bc1ed42b4328e0c53941b2f6dc2fd752.tar.xz
org.eclipse.etrice-d2a982a5bc1ed42b4328e0c53941b2f6dc2fd752.zip
Bug 532243 - Empty RefinedStates cause problems
* check when going up * check before save Change-Id: I3e5819ec8a4c36abb0546c187d126c46d38f30fe
-rw-r--r--plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java13
-rw-r--r--plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java11
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMEditor.java20
-rw-r--r--plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java20
4 files changed, 53 insertions, 11 deletions
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java
index fca7e9f1d..54ae0b083 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMJavaValidator.java
@@ -26,7 +26,6 @@ import org.eclipse.etrice.core.fsm.fSM.StateGraphItem;
import org.eclipse.etrice.core.fsm.fSM.TrPoint;
import org.eclipse.etrice.core.fsm.fSM.Transition;
import org.eclipse.etrice.core.fsm.services.FSMGrammarAccess;
-import org.eclipse.etrice.core.fsm.util.FSMHelpers;
import org.eclipse.etrice.core.fsm.validation.FSMValidationUtilXtend.Result;
import org.eclipse.xtext.AbstractRule;
import org.eclipse.xtext.RuleCall;
@@ -52,9 +51,6 @@ public class FSMJavaValidator extends org.eclipse.etrice.core.fsm.validation.Abs
private FSMValidationUtil validationUtil;
@Inject
- private FSMHelpers fsmHelpers;
-
- @Inject
FSMGrammarAccess grammar;
@Inject
@@ -78,13 +74,8 @@ public class FSMJavaValidator extends org.eclipse.etrice.core.fsm.validation.Abs
@Check
public void checkRefinedStateNotEmpty(RefinedState rs) {
- if (rs.getSubgraph()==null) {
- boolean entryEmpty = fsmHelpers.getDetailCode(rs.getEntryCode()).trim().isEmpty();
- boolean exitEmpty = fsmHelpers.getDetailCode(rs.getExitCode()).trim().isEmpty();
- boolean doEmpty = fsmHelpers.getDetailCode(rs.getDoCode()).trim().isEmpty();
- if (entryEmpty && exitEmpty && doEmpty) {
- error("Refined state must not be empty (needs to have at least one action code or a subgraph).", FSMPackage.Literals.STATE__ENTRY_CODE);
- }
+ if (validationUtil.isRefinedStateEmpty(rs)) {
+ error("Refined state must not be empty (needs to have at least one action code or a subgraph).", FSMPackage.Literals.STATE__ENTRY_CODE);
}
}
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java
index e6353b163..7436241b7 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java
@@ -336,4 +336,15 @@ public class FSMValidationUtil extends FSMValidationUtilXtend {
return name.matches("\\^?[a-zA-Z_][a-zA-Z_0-9]*");
}
+ public boolean isRefinedStateEmpty(RefinedState rs) {
+ if (rs.getSubgraph()==null || fsmHelpers.isEmpty(rs.getSubgraph())) {
+ boolean entryEmpty = fsmHelpers.getDetailCode(rs.getEntryCode()).trim().isEmpty();
+ boolean exitEmpty = fsmHelpers.getDetailCode(rs.getExitCode()).trim().isEmpty();
+ boolean doEmpty = fsmHelpers.getDetailCode(rs.getDoCode()).trim().isEmpty();
+ if (entryEmpty && exitEmpty && doEmpty) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMEditor.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMEditor.java
index 153364e21..bc2609c17 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMEditor.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/editor/AbstractFSMEditor.java
@@ -28,6 +28,7 @@ import org.eclipse.etrice.core.fsm.fSM.RefinedState;
import org.eclipse.etrice.core.fsm.fSM.State;
import org.eclipse.etrice.core.fsm.fSM.StateGraph;
import org.eclipse.etrice.core.fsm.util.FSMHelpers;
+import org.eclipse.etrice.core.fsm.validation.FSMValidationUtil;
import org.eclipse.etrice.ui.behavior.fsm.support.ContextSwitcher;
import org.eclipse.etrice.ui.behavior.fsm.support.util.FSMSupportUtil;
import org.eclipse.etrice.ui.common.base.editor.DiagramEditorBase;
@@ -39,6 +40,8 @@ import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.Shape;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.ui.editor.DiagramBehavior;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
import com.google.common.base.Function;
@@ -140,6 +143,23 @@ public abstract class AbstractFSMEditor extends DiagramEditorBase {
@Override
public void doSave(IProgressMonitor monitor) {
+
+ FSMValidationUtil fsmValidationUtil = FSMSupportUtil.getInstance().getFSMValidationUtil();
+ Diagram diagram = getDiagramTypeProvider().getDiagram();
+ ModelComponent mc = FSMSupportUtil.getInstance().getModelComponent(diagram);
+ if (mc.getStateMachine()!=null) {
+ for (State s : mc.getStateMachine().getStates()) {
+ if (s instanceof RefinedState) {
+ if (fsmValidationUtil.isRefinedStateEmpty((RefinedState) s)) {
+ MessageDialog.openError(Display.getCurrent().getActiveShell(),
+ "Check of Refined State",
+ "A Refined State with empty action codes must have a non-empty sub state graph.");
+ return;
+ }
+ }
+ }
+ }
+
getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
protected void doExecute() {
cleanupBeforeSave();
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java
index a194ba4f4..16a1795b2 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java
@@ -19,10 +19,12 @@ import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.etrice.core.fsm.fSM.ChoicePoint;
+import org.eclipse.etrice.core.fsm.fSM.RefinedState;
import org.eclipse.etrice.core.fsm.fSM.State;
import org.eclipse.etrice.core.fsm.fSM.StateGraph;
import org.eclipse.etrice.core.fsm.fSM.TrPoint;
import org.eclipse.etrice.core.fsm.fSM.Transition;
+import org.eclipse.etrice.core.fsm.util.FSMHelpers;
import org.eclipse.etrice.ui.behavior.fsm.editor.AbstractFSMEditor;
import org.eclipse.etrice.ui.behavior.fsm.editor.DecoratorUtil;
import org.eclipse.etrice.ui.behavior.fsm.support.util.DiagramEditingUtil;
@@ -73,6 +75,8 @@ import org.eclipse.graphiti.tb.ImageDecorator;
import org.eclipse.graphiti.ui.features.DefaultFeatureProvider;
import org.eclipse.graphiti.util.ColorConstant;
import org.eclipse.graphiti.util.IColorConstant;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
import com.google.common.collect.Sets;
@@ -274,6 +278,22 @@ public class StateGraphSupport {
Object bo = getBusinessObjectForPictogramElement(container);
if (bo instanceof StateGraph) {
StateGraph sg = (StateGraph) bo;
+ if (sg.eContainer() instanceof RefinedState) {
+ RefinedState rs = (RefinedState) sg.eContainer();
+ FSMHelpers fsmHelpers = FSMSupportUtil.getInstance().getFSMHelpers();
+ if (fsmHelpers.isEmpty(sg)) {
+ // check action codes
+ boolean entryEmpty = fsmHelpers.getDetailCode(rs.getEntryCode()).trim().isEmpty();
+ boolean exitEmpty = fsmHelpers.getDetailCode(rs.getExitCode()).trim().isEmpty();
+ boolean doEmpty = fsmHelpers.getDetailCode(rs.getDoCode()).trim().isEmpty();
+ if (entryEmpty && exitEmpty && doEmpty) {
+ MessageDialog.openInformation(Display.getCurrent().getActiveShell(),
+ "Check of Refined State",
+ "A Refined State with empty action codes must have a non-empty sub state graph.");
+ return;
+ }
+ }
+ }
getDiagramBehavior().getDiagramContainer().selectPictogramElements(new PictogramElement[] {});
ContextSwitcher.goUp(getDiagram(), sg);
}

Back to the top