The DPML Metro platform provides support for primitive (e.g. int, long, short, float, boolean, etc.), and complex object return types, arrays, maps, and usage of default arguments within a Context interface.
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 component definition (additional context entry directives are presented in red).
<component xmlns="dpml:metro" class="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>
<map key="colors">
<entry key="red" class="java.awt.Color" method="RED"/>
<entry key="white" class="java.awt.Color" method="WHITE"/>
<entry key="blue" class="java.awt.Color" method="BLUE"/>
</map>
</context>
</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] [18231] [INFO ] (demo): color (blue): java.awt.Color[r=0,g=0,b=255]
[junit] [18231] [INFO ] (demo): color (white): java.awt.Color[r=255,g=255,b=255]
[junit] [18231] [INFO ] (demo): color (red): java.awt.Color[r=255,g=0,b=0]
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.937 sec
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.