DPML
Primitive Values
HomeUtilitiesStationMetroDepotTransit
Primitives, Complex-types, and Arrays

The DPML Metro platform provides support for primitive (e.g. int, long, short, float, boolean, etc.), and complex object return types. arrays, and default arguments within a #Context inner interface definition.

Component Example

tutorial/components/examples:

Demo.java A component that demonstrates the a broad spectrum of context types (primitives, arrays and complex types).
DemoTestCase.java The testcase.

The deployment solution for the above component is defined in the following part definition (additional context entry directives are presented in red).

<index ..... >

  <project name="acme-demo-examples" basedir="examples">
    <types>
      <type id="jar"/>
      <component xmlns="link:xsd:dpml/lang/dpml-component#1.0" 
         type="org.acme.Demo" 
         name="demo">
        <context>
          <entry key="color" method="RED"/>
          <entry key="anotherColor">
            <param class="int" value="100"/>
            <param class="int" value="200"/>
            <param class="int" value="0"/>
          </entry>
          <entry key="integer" value="42"/>
          <entry key="short" value="19"/>
          <entry key="long" value="1042"/>
          <entry key="byte" value="9"/>
          <entry key="double" value="32"/>
          <entry key="float" value="9.813"/>
          <entry key="char" value="x"/>
          <entry key="boolean" value="true"/>
          <entry key="file" value="${work}"/>
          <entry key="tempFile" value="${temp}"/>
          <entry key="URI" value="${uri}"/>
          <entry key="name" value="${name}"/>
          <entry key="path" value="${path}"/>
          <entry key="names">
            <param value="fred"/>
            <param value="george"/>
            <param value="mary"/>
          </entry>
        </context>
      </component>
    </types>
    <dependencies>
      <test>
        <include ref="ant/ant-junit"/>
        <include ref="dpml/transit/dpml-transit-main"/>
      </test>
    </dependencies>
  </project>
  
  ...
  
</index>
Testing the component

The following testcase log output demonstrates runtime support for primitive types, complex type construction, and arrays.

test:
    [junit] Executing forked test.
    [junit] Running org.acme.test.DemoTestCase
    [junit] [25598] [INFO   ] (demo): color: java.awt.Color[r=255,g=0,b=0]
    [junit] [25598] [INFO   ] (demo): anotherColor: java.awt.Color[r=100,g=200,b=0]
    [junit] [25598] [INFO   ] (demo): integer: 42
    [junit] [25598] [INFO   ] (demo): short: 19
    [junit] [25598] [INFO   ] (demo): long: 1042
    [junit] [25598] [INFO   ] (demo): byte: 9
    [junit] [25598] [INFO   ] (demo): double: 32.0
    [junit] [25598] [INFO   ] (demo): float: 9.813
    [junit] [25598] [INFO   ] (demo): char: x
    [junit] [25598] [INFO   ] (demo): boolean: true
    [junit] [25598] [INFO   ] (demo): file: C:\dev\osm\trunk\tutorial\components\examples
    [junit] [25598] [INFO   ] (demo): temp: C:\DOCUME~1\MCCONN~1\LOCALS~1\Temp
    [junit] [25598] [INFO   ] (demo): uri: component:/demo
    [junit] [25598] [INFO   ] (demo): name: demo
    [junit] [25598] [INFO   ] (demo): path: /demo
    [junit] [25598] [INFO   ] (demo): names: 3
    [junit] [25598] [INFO   ] (demo): optionalColor: java.awt.Color[r=0,g=0,b=255]
    [junit] [25598] [INFO   ] (demo): optionalInteger: 42
    [junit] [25598] [INFO   ] (demo): optionalShort: 9
    [junit] [25598] [INFO   ] (demo): optionalLong: 21
    [junit] [25598] [INFO   ] (demo): optionalByte: 3
    [junit] [25598] [INFO   ] (demo): optionalDouble: 0.0010
    [junit] [25598] [INFO   ] (demo): optionalFloat: 3.142
    [junit] [25598] [INFO   ] (demo): optionalChar: #
    [junit] [25598] [INFO   ] (demo): optionalBoolean: false
    [junit] [25598] [INFO   ] (demo): optionalFile: C:\dev\osm\trunk\tutorial\components\examples
    [junit] [25598] [INFO   ] (demo): optionalURI: file:/C:/dev/osm/trunk/tutorial/components/examples/
    [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.937 sec
Summary

This tutorial demonstrates the ability with Metro to map string-based arguments (presented in XML attributes) into primitive, arrays, and constructed values within a context directive. The next tutorial will introduce the notion of composition of a component which in-turn introduces the potential for references between nested components.