private void parseSequencer( XMLExtendedStreamReader reader, String repositoryName, final List<ModelNode> sequencers) throws XMLStreamException { final ModelNode sequencer = new ModelNode(); sequencer.get(OP).set(ADD); String name = null; sequencers.add(sequencer); if (reader.getAttributeCount() > 0) { for (int i = 0; i < reader.getAttributeCount(); i++) { String attrName = reader.getAttributeLocalName(i); String attrValue = reader.getAttributeValue(i); Attribute attribute = Attribute.forName(attrName); switch (attribute) { case NAME: name = attrValue; break; case PATH_EXPRESSION: ModelAttributes.PATH_EXPRESSIONS.parseAndAddParameterElement( attrValue, sequencer, reader); break; case CLASSNAME: ModelAttributes.SEQUENCER_CLASSNAME.parseAndSetParameter(attrValue, sequencer, reader); if (name == null) name = attrValue; break; case MODULE: ModelAttributes.MODULE.parseAndSetParameter(attrValue, sequencer, reader); break; default: // extra attributes are allowed to set sequencer-specific properties ... sequencer.get(ModelKeys.PROPERTIES).add(attrName, attrValue); break; } } } while (reader.hasNext() && (reader.nextTag() != XMLStreamConstants.END_ELEMENT)) { final Element element = Element.forName(reader.getLocalName()); switch (element) { case PATH_EXPRESSION: String value = reader.getElementText(); ModelAttributes.PATH_EXPRESSIONS.parseAndAddParameterElement(value, sequencer, reader); break; default: throw ParseUtils.unexpectedElement(reader); } } sequencer .get(OP_ADDR) .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME) .add(ModelKeys.REPOSITORY, repositoryName) .add(ModelKeys.SEQUENCER, name); }
private void writeSequencing(XMLExtendedStreamWriter writer, ModelNode repository) throws XMLStreamException { if (has(repository, ModelKeys.SEQUENCER)) { writer.writeStartElement(Element.SEQUENCERS.getLocalName()); if (repository.hasDefined(ModelKeys.SEQUENCERS_THREAD_POOL_NAME)) { writer.writeAttribute( Attribute.THREAD_POOL_NAME.getLocalName(), repository.get(ModelKeys.SEQUENCERS_THREAD_POOL_NAME).asString()); } if (repository.hasDefined(ModelKeys.SEQUENCERS_MAX_POOL_SIZE)) { writer.writeAttribute( Attribute.MAX_POOL_SIZE.getLocalName(), repository.get(ModelKeys.SEQUENCERS_MAX_POOL_SIZE).asString()); } ModelNode sequencerNode = repository.get(ModelKeys.SEQUENCER); for (Property sequencer : sequencerNode.asPropertyList()) { writer.writeStartElement(Element.SEQUENCER.getLocalName()); writer.writeAttribute(Attribute.NAME.getLocalName(), sequencer.getName()); ModelNode prop = sequencer.getValue(); ModelAttributes.SEQUENCER_CLASSNAME.marshallAsAttribute(prop, writer); ModelAttributes.MODULE.marshallAsAttribute(prop, writer); // Write out the extra properties ... if (has(prop, ModelKeys.PROPERTIES)) { ModelNode properties = prop.get(ModelKeys.PROPERTIES); for (Property property : properties.asPropertyList()) { writer.writeAttribute(property.getName(), property.getValue().asString()); } } if (has(prop, ModelKeys.PATH_EXPRESSIONS)) { List<ModelNode> pathExpressions = prop.get(ModelKeys.PATH_EXPRESSIONS).asList(); switch (pathExpressions.size()) { case 0: break; case 1: ModelNode pathExpression = pathExpressions.iterator().next(); writer.writeAttribute( Attribute.PATH_EXPRESSION.getLocalName(), pathExpression.asString()); break; default: for (ModelNode pathExpr : pathExpressions) { writer.writeStartElement(Element.PATH_EXPRESSION.getLocalName()); writer.writeCharacters(pathExpr.asString()); writer.writeEndElement(); } } } writer.writeEndElement(); } writer.writeEndElement(); } }