in src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java [2530:2618]
private static void readState(final XMLStreamReader reader, final Configuration configuration, final SCXML scxml,
final TransitionalState parent)
throws IOException, ModelException, XMLStreamException {
final State state = new State();
state.setId(readOrGeneratedTransitionTargetId(reader, scxml, SCXMLConstants.ELEM_STATE));
final String initial = readAV(reader, SCXMLConstants.ATTR_INITIAL);
if (initial != null) {
state.setFirst(initial);
}
final String src = readAV(reader, SCXMLConstants.ATTR_SRC);
if (src != null) {
String source = src;
final Configuration copy = new Configuration(configuration);
if (copy.parent == null) {
copy.parent = scxml;
}
if (configuration.pathResolver != null) {
source = configuration.pathResolver.resolvePath(src);
copy.pathResolver = configuration.pathResolver.getResolver(src);
}
readTransitionalStateSrc(copy, source, state);
}
if (parent == null) {
scxml.addChild(state);
} else if (parent instanceof State) {
((State)parent).addChild(state);
}
else {
((Parallel)parent).addChild(state);
}
scxml.addTarget(state);
if (configuration.parent != null) {
configuration.parent.addTarget(state);
}
loop : while (reader.hasNext()) {
String name, nsURI;
switch (reader.next()) {
case XMLStreamConstants.START_ELEMENT:
nsURI = reader.getNamespaceURI();
name = reader.getLocalName();
if (SCXMLConstants.XMLNS_SCXML.equals(nsURI)) {
switch (name) {
case SCXMLConstants.ELEM_TRANSITION:
state.addTransition(readTransition(reader, configuration));
break;
case SCXMLConstants.ELEM_STATE:
readState(reader, configuration, scxml, state);
break;
case SCXMLConstants.ELEM_INITIAL:
readInitial(reader, configuration, state);
break;
case SCXMLConstants.ELEM_FINAL:
readFinal(reader, configuration, scxml, state);
break;
case SCXMLConstants.ELEM_ONENTRY:
readOnEntry(reader, configuration, state);
break;
case SCXMLConstants.ELEM_ONEXIT:
readOnExit(reader, configuration, state);
break;
case SCXMLConstants.ELEM_PARALLEL:
readParallel(reader, configuration, scxml, state);
break;
case SCXMLConstants.ELEM_DATAMODEL:
readDatamodel(reader, configuration, null, state);
break;
case SCXMLConstants.ELEM_INVOKE:
readInvoke(reader, configuration, state);
break;
case SCXMLConstants.ELEM_HISTORY:
readHistory(reader, configuration, scxml, state);
break;
default:
reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_STATE, nsURI, name);
break;
}
} else {
reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_STATE, nsURI, name);
}
break;
case XMLStreamConstants.END_ELEMENT:
break loop;
default:
}
}
}