private void writeConnectionCreationOptions(
     final XMLExtendedStreamWriter writer, final ModelNode model) throws XMLStreamException {
   // <connection-creation-options>
   writer.writeStartElement(Element.CONNECTION_CREATION_OPTIONS.getLocalName());
   final List<Property> connectionCreationOptions =
       model.get(CONNECTION_CREATION_OPTIONS).asPropertyList();
   for (final Property connectionCreationOption : connectionCreationOptions) {
     // <option>
     writer.writeStartElement(Element.OPTION.getLocalName());
     // write the name attribute
     final String optionName = connectionCreationOption.getName();
     writer.writeAttribute(Attribute.NAME.getLocalName(), optionName);
     // write the value attribute
     final String optionValue = connectionCreationOption.getValue().asString();
     writer.writeAttribute(Attribute.VALUE.getLocalName(), optionValue);
     // </option>
     writer.writeEndElement();
   }
   // </connection-creation-options>
   writer.writeEndElement();
 }
  enum DWmParameters {
    NAME(
        SimpleAttributeDefinitionBuilder.create("name", ModelType.STRING)
            .setAllowExpression(false)
            .setAllowNull(false)
            .setMeasurementUnit(MeasurementUnit.NONE)
            .setRestartAllServices()
            .setXmlName("name")
            .build()),
    SELECTOR(
        SimpleAttributeDefinitionBuilder.create("selector", ModelType.STRING)
            .setAllowExpression(true)
            .setAllowNull(true)
            .setMeasurementUnit(MeasurementUnit.NONE)
            .setRestartAllServices()
            .setXmlName(Element.SELECTOR.getLocalName())
            .setValidator(new EnumValidator<SelectorValue>(SelectorValue.class, true, true))
            .setDefaultValue(new ModelNode(SelectorValue.PING_TIME.name()))
            .build()),
    POLICY(
        SimpleAttributeDefinitionBuilder.create("policy", ModelType.STRING)
            .setAllowExpression(true)
            .setAllowNull(true)
            .setMeasurementUnit(MeasurementUnit.NONE)
            .setRestartAllServices()
            .setXmlName(Element.POLICY.getLocalName())
            .setValidator(new EnumValidator<PolicyValue>(PolicyValue.class, true, true))
            .setDefaultValue(new ModelNode(PolicyValue.WATERMARK.name()))
            .build()),
    POLICY_OPTIONS(
        new PropertiesAttributeDefinition.Builder("policy-options", true)
            .setAllowExpression(true)
            .setXmlName(Element.OPTION.getLocalName())
            .build()),
    SELECTOR_OPTIONS(
        new PropertiesAttributeDefinition.Builder("selector-options", true)
            .setAllowExpression(true)
            .setXmlName(Element.OPTION.getLocalName())
            .build());

    public static AttributeDefinition[] getAttributeDefinitions() {
      final AttributeDefinition[] returnValue =
          new AttributeDefinition[DWmParameters.values().length];
      int i = 0;
      for (DWmParameters entry : DWmParameters.values()) {
        returnValue[i] = entry.getAttribute();
        i++;
      }
      return returnValue;
    }

    public static AttributeDefinition[] getRuntimeAttributeDefinitions() {
      return new AttributeDefinition[] {
        POLICY.getAttribute(),
        SELECTOR.getAttribute(),
        POLICY_OPTIONS.getAttribute(),
        SELECTOR_OPTIONS.getAttribute()
      };
    }

    public static AttributeDefinition[] getReadOnlyAttributeDefinitions() {
      return new AttributeDefinition[] {NAME.getAttribute()};
    }

    private DWmParameters(AttributeDefinition attribute) {
      this.attribute = attribute;
    }

    public AttributeDefinition getAttribute() {
      return attribute;
    }

    private AttributeDefinition attribute;
  }