# ConfigurationItem

ConfigurationItems (CIs) are rendered in XML as a follows. The XML element name is the name of the CI type, with its ID stored in the `id` attribute. To prevent concurrent updates, the `token` attribute contains a string that refers to the version of the CI being sent. For each property of the CI there's a child element, where the XML element's name is the name of the CI property.

For example:

    <udm.DeploymentPackage id="Applications/AnimalZoo-ear/1.0" token="032e29c4-94a0-4bdf-b489-a0c2fe5042a1">
      <application ref="Applications/AnimalZoo-ear"/>
      <satisfiesReleaseNotes>true</satisfiesReleaseNotes>
      <deployables>
        <ci ref="Applications/AnimalZoo-ear/1.0/AnimalZooWeb"/>
        <ci ref="Applications/AnimalZoo-ear/1.0/AnimalZooFE"/>
        <ci ref="Applications/AnimalZoo-ear/1.0/AnimalZooBE"/>
      </deployables>
    </udm.DeploymentPackage>

## Property types

The content of each property element is defined by its type. Here's a list of the possible types in Deployit's type system and how they're expressed in XML.

### Simple properties: Boolean, Int, String and Enum

The value of the CI property is simply included in the XML element. The possible values for booleans are `true` or `false`.

    <dummy.MyType id="...>
      <myBoolean>true</myBoolean>
      <myInt>23</myInt>
      <myString>Deployit</myString>
      <myEnum>TELNET</myEnum>
    </dummy.MyType id="...>

### CI reference

A reference to another CI has the ID of the referred CI in its `ref` attribute. The content is empty.

    <myCI ref="Infrastructure/LocalHost/>

### List and Sets

Lists and Sets can refer to either Strings or CIs. In the case of String, for each item in the list (or set), the text is added as a child in `<value>` tags. In the case of CIs, an empty `<ci>` element is added, with an `id` attribute containing the ID of the referred CI.

    <mySetOfString>
      <value>value1</value>
      <value>value2</value>
    </mySetOfString>

    <myListOfString>
      <value>1</value>
      <value>2</value>
      <value>3</value>
    </myListOfString>

    <mySetOfCi>
      <ci ref="Infrastructure/LocalHost"/>
    </mySetOfCi>

    <myListOfCi>
      <ci ref="Infrastructure/LocalHost"/>
    </myListOfCi>

### Maps

Maps are dictionaries from String to String. For each entry in the map, the XML element for a map property has a child element `<entry>`, where the key is stored in the `key` attribute and the map value is stored as content.

    <myMapOfStringString>
      <entry key="key1">value1</entry>
      <entry key="key2">value2</entry>
    </myMapOfStringString>

## Validation messages

For certain operations, the Deployit Server may return a validated CI. This is a ConfigurationItem of which the XML has been enhanced with validation messages. These message are metadata about the CI and are not considered as ordinary properties.

Validation messages are added in a parent element `<validation-messages>` that has a child element `<validation-message>` for each message. The `<validation-message>` element has two attributes: `ci`, [SHOULD BE 'ref'], referring to the CI, and `property` to refer to the property the message is about. The messages itself is stored as content of the `<validation-message>` element.

    <dummy.MyTest id="Applications/AnimalZoo-ear/">
      <validation-messages>
        <validation-message ci="Applications/AnimalZoo-ear/" property="myInt">Value is required</validation-message>
        <validation-message ci="Applications/AnimalZoo-ear/" property="myCis">Value is required</validation-message>
      </validation-messages>
      ...
    </dummy.MyTest>