1. Introduction

Supports adding new attributes to classes of selected schemas.

The new attributes as well as the classes to which they shall be added are defined via the configuration.

Note
Adding new associations / association roles as well as overwriting existing attributes is not supported by this transformer.

2. Configuration

The following sections specifiy the configuration options for this transformation.

2.1. Class

The class for this transformer implementation is de.interactive_instruments.ShapeChange.Transformation.Adding.AttributeCreator

2.2. Parameters

At the moment no specific parameters are defined for this transformation.

2.3. Rules

At the moment no specific rules are defined for this transformation.

2.4. Map Entries

At the moment no map entries are defined for this transformation.

2.5. Advanced Process Configuration

The <advancedProcessConfigurations> element inside of the <Transformer> element is used to define new attributes. An <AttributeDefinition> element is added for each new attribute. Class selection information inside of such a definition allows the attribute to be added to multiple classes within selected schemas.

An <AttributeDefinition> is structured as follows (the exact XML Schema definition is available in the ShapeChangeConfiguration.xsd):

Element Name

Subelement / -attribute

Required / Optional

Type

Default Value

Explanation

classSelection

 PackageSelector

 Required

 (complex)

 -

Classes to which new attributes will be added must be owned by the packages identified by this selector. Selection occurs as follows:

  • schemaNameRegex: identifies a number of packages from the selected schemas (including all child packages in the same targetNamespace) - if not provided, all selected schemas are identified, else only those whose name matches the regular expression

  • nameRegex: if provided, only those child packages from the schema packages (selected by the schemaNameRegex) whose name match the regular expression remain in the result set

  • stereotypeRegex: if provided, only those child packages from the schema packages (selected by the schemaNameRegex) where at least one normalized(!) stereotype matches the regular expression remain in the result set

 ClassSelector

 Required

 (complex)

 -

Classes to which new attributes will be added are selected as follows:

  • They must be owned by one of the packages selected by the PackageSelector.

  • nameRegex: if provided, only classes whose name matches the regular expression remain in the result set

  • stereotypeRegex: if provided, only those classes where at least one normalized(!) stereotype matches the regular expression remain in the result set

 descriptors

 -

 Optional

 (complex)

 -

Descriptors to be assigned to the new attribute.

  • Known descriptors are listed here.

  • Multiple values can be provided, each value can also have a language tag (use codes from IETF RFC 5646).

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
<descriptors>
 <Descriptor name="definition">
 <descriptorValues>
 <DescriptorValue>This is a ...</DescriptorValue>
 <DescriptorValue lang="de">Dies ist ein ...</DescriptorValue>
 </descriptorValues>
 </Descriptor>
 <Descriptor name="alias">
 <descriptorValues>
 <DescriptorValue>My feature type alias</DescriptorValue>
 </descriptorValues>
 </Descriptor>
</descriptors>

 initialValue

 -

 Optional

 String

 -

An initial value for the new attribute.

 isDerived

 -

 Optional

 Boolean

 false

True, if the new attribute shall be a derived property.

 isOrdered

 -

 Optional

 Boolean

 false

True, if the new attribute shall be ordered.

 isReadOnly

 -

 Optional

 Boolean

 false

True, if the new attribute shall be read only.

 name

 -

 Required

 String

 -

The name of the new attribute.

NOTE: If the name equals one of the properties that already exist for a selected class, then the new attribute will not be added to that class (overwriting existing properties is not allowed). The new attribute may, however, restrict a property with the same name from a supertype of the selected class.

 multiplicity

 -

 Optional

 String

 1

The multiplicity of the new attribute (must be compliant to usual UML notation).

 stereotypes

 Stereotype

 Optional

 String

 -

Stereotype(s) to be assigned to the new attribute.

 taggedValues

 TaggedValue

 Optional

 (complex)

 -

Tagged value(s) to be assigned to the new attribute. NOTE: Some tagged values have specific meaning

  • documentation: information that in the Enterprise Architect modeling environment is usually provided via the "Notes" field

  • sequenceNumber:

    • if provided, the property is added with that sequenceNumber (unless an existing property has the same sequenceNumber - in that case the sequenceNumber of the new attribute is extended with a subcomponent so that it is unique within the existing properties)

    • otherwise, a sequenceNumber is chosen so that the new attribute is put at the end of the list of existing properties

 type

 -

 Required

 String

 -

Name of the class that shall be used as the type of the new attribute.

NOTE: If the type does not exist within the model, the new attribute is created with unknown category of value. For derivation of target representations this may still be ok, if the target defines a mapping for the type.

===

2.6. Sample Configuration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<Transformer class="de.interactive_instruments.ShapeChange.Transformation.Adding.AttributeCreator"
  id="trf">
  <advancedProcessConfigurations>
   <AttributeDefinition>
    <classSelection>
     <PackageSelector schemaNameRegex="Test Schema[1-2]"/>
     <ClassSelector stereotypeRegex="featuretype"/>
    </classSelection>
    <descriptors>
     <Descriptor name="alias">
      <descriptorValues>
       <DescriptorValue>Alias</DescriptorValue>
      </descriptorValues>
     </Descriptor>
    </descriptors>
    <name>GMLID</name>
    <taggedValues>
     <TaggedValue name="sequenceNumber" value="0"/>
    </taggedValues>
    <type>CharacterString</type>
   </AttributeDefinition>
  </advancedProcessConfigurations>
 </Transformer>