@Override
  public void marshallAsElement(ModelNode resourceModel, XMLStreamWriter writer)
      throws XMLStreamException {
    if (resourceModel.hasDefined(getName()) && resourceModel.asInt() > 0) {
      final ModelNode modules = resourceModel.get(getName());
      for (ModelNode module : modules.asList()) {
        writer.writeStartElement(getXmlName());
        writer.writeAttribute(Attribute.CODE.getLocalName(), module.get(CODE).asString());
        if (module.hasDefined(Constants.LOGIN_MODULE_STACK_REF)) {
          writer.writeAttribute(
              Attribute.LOGIN_MODULE_STACK_REF.getLocalName(),
              module.get(Constants.LOGIN_MODULE_STACK_REF).asString());
        }

        if (module.hasDefined(Constants.MODULE_OPTIONS)) {
          for (ModelNode option : module.get(Constants.MODULE_OPTIONS).asList()) {
            writer.writeEmptyElement(Element.MODULE_OPTION.getLocalName());
            writer.writeAttribute(Attribute.NAME.getLocalName(), option.asProperty().getName());
            writer.writeAttribute(
                Attribute.VALUE.getLocalName(), option.asProperty().getValue().asString());
          }
        }
        writer.writeEndElement();
      }
    }
  }
 /**
  * Write element content. The start element is already written.
  *
  * @param writer
  * @throws XMLStreamException
  */
 public void writeContent(XMLStreamWriter writer) throws XMLStreamException {
   for (int i = 0; i < moduleEntries.size(); i++) {
     IdentityTrustModuleEntry entry = moduleEntries.get(i);
     writer.writeStartElement(Element.TRUST_MODULE.getLocalName());
     writer.writeAttribute(Attribute.CODE.getLocalName(), entry.getName());
     writer.writeAttribute(
         Attribute.FLAG.getLocalName(),
         entry.getControlFlag().toString().toLowerCase(Locale.ENGLISH));
     Map<String, ?> options = entry.getOptions();
     if (options != null && options.size() > 0) {
       for (Entry<String, ?> option : options.entrySet()) {
         writer.writeStartElement(Element.MODULE_OPTION.getLocalName());
         writer.writeAttribute(Attribute.NAME.getLocalName(), option.getKey());
         writer.writeAttribute(Attribute.VALUE.getLocalName(), option.getValue().toString());
         writer.writeEndElement();
       }
     }
     writer.writeEndElement();
   }
   writer.writeEndElement();
 }