private static void readAssign()

in src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java [1690:1731]


    private static void readAssign(final XMLStreamReader reader, final Configuration configuration,
                                   final Executable executable, final ActionsContainer parent)
            throws XMLStreamException, ModelException {

        final Assign assign = new Assign();
        assign.setExpr(readAV(reader, SCXMLConstants.ATTR_EXPR));
        assign.setLocation(readRequiredAV(reader, SCXMLConstants.ELEM_ASSIGN, SCXMLConstants.ATTR_LOCATION));
        assign.setSrc(readAV(reader, SCXMLConstants.ATTR_SRC));
        if (assign.getExpr() != null && assign.getSrc() != null) {
            reportConflictingAttribute(reader, configuration, SCXMLConstants.ELEM_ASSIGN, SCXMLConstants.ATTR_EXPR, SCXMLConstants.ATTR_SRC);
        }
        else if (assign.getExpr() != null) {
            skipToEndElement(reader);
        }
        else if (assign.getSrc() != null) {
            skipToEndElement(reader);
            String resolvedSrc = assign.getSrc();
            if (configuration.pathResolver != null) {
                resolvedSrc = configuration.pathResolver.resolvePath(resolvedSrc);
            }
            try {
                assign.setParsedValue(ContentParser.DEFAULT_PARSER.parseResource(resolvedSrc));
            } catch (final IOException e) {
                throw new ModelException(e);
            }
        }
        else {
            final Location location = reader.getLocation();
            readParsedValue(reader, configuration, assign, false);
            if (assign.getParsedValue() == null) {
                // report missing expression (as most common use-case)
                reportMissingAttribute(location, SCXMLConstants.ELEM_ASSIGN, SCXMLConstants.ATTR_EXPR);
            }
        }

        assign.setParent(executable);
        if (parent != null) {
            parent.addAction(assign);
        } else {
            executable.addAction(assign);
        }
    }