private static void readParallel()

in src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java [2007:2085]


    private static void readParallel(final XMLStreamReader reader, final Configuration configuration, final SCXML scxml,
                                     final TransitionalState parent)
            throws IOException, ModelException, XMLStreamException {

        final Parallel parallel = new Parallel();
        parallel.setId(readOrGeneratedTransitionTargetId(reader, scxml, SCXMLConstants.ELEM_PARALLEL));
        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, parallel);
        }

        if (parent == null) {
            scxml.addChild(parallel);
        } else if (parent instanceof State) {
            ((State)parent).addChild(parallel);
        }
        else {
            ((Parallel)parent).addChild(parallel);
        }
        scxml.addTarget(parallel);
        if (configuration.parent != null) {
            configuration.parent.addTarget(parallel);
        }

        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:
                            parallel.addTransition(readTransition(reader, configuration));
                            break;
                        case SCXMLConstants.ELEM_STATE:
                            readState(reader, configuration, scxml, parallel);
                            break;
                        case SCXMLConstants.ELEM_PARALLEL:
                            readParallel(reader, configuration, scxml, parallel);
                            break;
                        case SCXMLConstants.ELEM_ONENTRY:
                            readOnEntry(reader, configuration, parallel);
                            break;
                        case SCXMLConstants.ELEM_ONEXIT:
                            readOnExit(reader, configuration, parallel);
                            break;
                        case SCXMLConstants.ELEM_DATAMODEL:
                            readDatamodel(reader, configuration, null, parallel);
                            break;
                        case SCXMLConstants.ELEM_INVOKE:
                            readInvoke(reader, configuration, parallel);
                            break;
                        case SCXMLConstants.ELEM_HISTORY:
                            readHistory(reader, configuration, scxml, parallel);
                            break;
                        default:
                            reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_PARALLEL, nsURI, name);
                            break;
                        }
                    } else {
                        reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_PARALLEL, nsURI, name);
                    }
                    break;
                case XMLStreamConstants.END_ELEMENT:
                    break loop;
                default:
            }
        }
    }