commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wolfgang Frech (JIRA)" <j...@apache.org>
Subject [jira] Commented: (SCXML-38) spec and semantics of initialstate attribute not clear for external state
Date Mon, 12 Feb 2007 17:25:06 GMT

    [ https://issues.apache.org/jira/browse/SCXML-38?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12472350
] 

Wolfgang Frech commented on SCXML-38:
-------------------------------------

continued....

The actual behavior is: When the external state is entered (that is the parent state), the
initialstate attribute takes precedence over the target of the transition in the initial attribute.

This can be explained like this: As the initialstate attribute is honored, the state chart
goes directly into the specified substate. It does not enter the parent state per se, so it
does not enter the initial element of the parent state, and does not execute the unconditional
transition in it either.


Demo code

----
	@Test
	public void externalStateWithConflictingInitialstate()
			throws FileNotFoundException, IOException, SAXException, ModelException {
		final URL definition = getClass().getClassLoader().getResource(
				"externalStateWithConflictingInitialstate-external.scxml");
		SCXML model = SCXMLDigester.digest(definition, new SimpleErrorHandler());
		SCXMLExecutor executor = new SCXMLExecutor();
		executor.setStateMachine(model);
		executor.setRootContext(new SimpleContext());
		executor.setEvaluator(new ELEvaluator());
		executor.setErrorReporter(new SimpleErrorReporter());
		executor.go();
		State state = (State) (executor.getCurrentStatus().getStates().iterator()
				.next());
		assertEquals("one", state.getId());
	}	
----
<?xml version="1.0"?>
<scxml
  xmlns="http://www.w3.org/2005/07/scxml"
  version="1.0"
  initialstate="start">
  <state
    id="start"
    src="externalStateWithConflictingInitialstate-external.scxml" />
</scxml>
----
<?xml version="1.0"?>
<scxml
  xmlns="http://www.w3.org/2005/07/scxml"
  version="1.0"
  initialstate="one">
  <state id="start">
    <initial>
      <onentry>
        <log expr="'entering intial'" />
      </onentry>
      <transition target="other" />
    </initial>
    <state id="one" />
    <state id="other" />
  </state>
</scxml>

> spec and semantics of initialstate attribute not clear for external state
> -------------------------------------------------------------------------
>
>                 Key: SCXML-38
>                 URL: https://issues.apache.org/jira/browse/SCXML-38
>             Project: Commons SCXML
>          Issue Type: Bug
>    Affects Versions: 0.6
>         Environment: Win XP, Java 5, Eclipse 3.2, JUnit 4
>            Reporter: Wolfgang Frech
>            Priority: Minor
>
> The WD-SCXML is not fully consistent if the initialstate attribute is required for an
external state, that is a state that has a src attribute pointing to a file containing its
content.
> The attribute details (WD 3.1.1) define the initialstate attribute as required, without
any exception for external states.
> The example Test2Sub1.scxml (WD F.1) does not have a initialstate attribute.
> If this is only a minor omission in the example, the real issue is: how does an initialstate
attribute affect the behavior of the state chart?
> So far this would be only an issue with the WD.
> The commons SCXML implementation decided to treat the initialstate attribute as required.
> Demonstration code follows.
> The issue with the commons implementation is:
> It is not clear which (state) id can be given in the initialstate attribute of an external
state SCXML file and what this means.
> The id of the external state itself is not accepted. See second demonstration code.
> Demo - initialstate required:
> ----
> 	@Test
> 	public void externalStateWithoutInitialstate() throws FileNotFoundException,
> 			IOException, SAXException, ModelException {
> 		final URL definition = getClass().getClassLoader().getResource(
> 				"externalStateWithoutInitialstate-main.scxml");
> 		try {
> 			SCXMLDigester.digest(definition, new SimpleErrorHandler());
> 			fail();
> 		} catch (ModelException e) {
> 			assertEquals(
> 					"Initial state null or not a descendant of state with ID \"start\"",
> 					e.getMessage());
> 		}
> 	}
> ----
> main scxml
> ----
> <?xml version="1.0"?>
> <scxml
>   xmlns="http://www.w3.org/2005/07/scxml"
>   version="1.0"
>   initialstate="start">
>   <state id="start" src="externalStateWithoutInitialstate-external.scxml"/>
> </scxml>
> ----
> included scxml 
> note: no initalstate
> ----
> <?xml version="1.0"?>
> <scxml
>   xmlns="http://www.w3.org/2005/07/scxml"
>   version="1.0">
>   <state id="start" />
> </scxml>
> Demo - with initialstate pointing to external state
> -----
> 	@Test
> 	public void externalStateWithInitialstate() throws FileNotFoundException,
> 			IOException, SAXException, ModelException {
> 		final URL definition = getClass().getClassLoader().getResource(
> 				"externalStateWithInitialstate-main.scxml");
> 		try {
> 			SCXMLDigester.digest(definition, new SimpleErrorHandler());
> 			fail();
> 		} catch (ModelException e) {
> 			assertEquals(
> 					"Initial state null or not a descendant of state with ID \"start\"",
> 					e.getMessage());
> 		}
> 	}
> -----
> main scxml
> -----
> <?xml version="1.0"?>
> <scxml
>   xmlns="http://www.w3.org/2005/07/scxml"
>   version="1.0"
>   initialstate="start">
>   <state id="start" src="externalStateWithInitialstate-external.scxml"/>
> </scxml>
> ----
> included scxml
> note: with initialstate
> ----
> <?xml version="1.0"?>
> <scxml
>   xmlns="http://www.w3.org/2005/07/scxml"
>   version="1.0"
>   initialstate="start">
>   <state id="start">
>     <onentry>
>       <log expr="'now in state start'" />
>     </onentry>
>   </state>
> </scxml>
> ----

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message