As you have have already seen it browsing the docs, many of Join runtime services may need informations on the domain model objects they are related to. As a first example there's the mailing-list notification service: we may want to use information related to original event when defining the mail body template. The same way, when you configure a new event consumer for triggering a script on a domain object creation, you will want to have sort of variables representing this object available in the execution context.
This is made possible using a special Join services called the PropertiesExtractor that is a a very simple service defining a general purpose object converter that extract a set of properties from object and its inner fields graph. But don't be afraid with that Java interface: in fact most of Join services already use this service under-cover and you'll don't have to write a single line of code...
What is really interesting here are the properties keys produced by the PropertiesExtractor depending on the domain model object. This document references all these properties keys. You can then use them to customize your templates, deployment parameter values or triggered scripts. You just have to wrap the properties key into an Ant style property using $ and curly braces like this: ${key}.
Here's an example of template for mail messages related to deliverable creation. ${xxx} properties will be replaced at runtime by deliverable fields values when sending this mail. Check out Deliverables subsection for a description of properties.
A new deliverable of type '${deliverable.type.label}' has been supplied by '${deliverable.supplier.id}'. Deliverable will be identified with '${deliverable.key}' for '${deliverable.release.name}' release. Here's the supplier comments: ${deliverable.comments}.
The default implementation of PropertiesExtractor for deliverable domain objects is DeliverablePropertiesExtractor. It uses a prefix for all produced properties that is deliverable. if not specified (we'll see later with assemblies that it can be overriden).
Property | Description |
---|---|
<prefix>key | This is the deliverable unique key (e.g. something like 'framework-r1.0-v01'). |
<prefix>comments | These are the comments made by deliverable supplier. This may include release note. |
<prefix>supplier.id | This is the identifier of the user that has supplied deliverable (e.g. its login). |
<prefix>release.name | This is the display name of the release this delivery has been made for (e.g. something like '1.0') |
<prefix>type.key | This is the key of this deliverable type (e.g. something like 'fwk'). |
<prefix>type.label | This is the display label of this deliverable type (e.g. something like 'Framework'). |
The default implementation of PropertiesExtractor for assembly domain objects is AssemblyPropertiesExtractor. It uses a prefix for all produced properties that is assembly. if not specified.
Property | Description |
---|---|
<prefix>key | This is the assembly unique key (e.g. something like 'myproject-r1.0-v01-SNAPSHOT'). |
<prefix>comments | These are the comments made by assembly composer. This may include composition notes. |
<prefix>composer.id | This is the identifier of the user that has composed assembly (e.g. its login). |
<prefix>release.name | This is the display name of the release this assembly has been made for (e.g. something like '1.0') |
<prefix>deliverables.<deliverable type key>.* | In addition of above properties related to assembly own informations, the default extractor add all properties related to each deliverable composing assembly. Every property of a deliverable is append to the <prefix>deliverables.<deliverable type key>. string (e.g. you may have a 'assembly.deliverables.fwk.key' property denoting the key of assembly deliverable that has the Framework type). See Deliverables subsection for a description of available properties. |
The default implementation of PropertiesExtractor for component domain objects is ComponentPropertiesExtractor. It uses a prefix for all produced properties that is component. if not specified (we'll see later with builds that it can be overriden).
Property | Description |
---|---|
<prefix>key | This is the component unique key (e.g. something like 'component-v01'). |
<prefix>key | This is the size (in bytes) of this component. |
<prefix>version | This is the information on component version (e.g. the '01' in 'component-v01'). |
<prefix>release.name | This is the display name of the release this component has been produced for (e.g. something like '1.0') |
<prefix>type.key | This is the key of this component type (e.g. something like 'comp'). |
<prefix>type.label | This is the display label of this component type (e.g. something like 'Component'). |
The default implementation of PropertiesExtractor for build domain objects is BuildPropertiesExtractor. It uses a prefix for all produced properties that is build. if not specified.
Property | Description |
---|---|
<prefix>key | This is the build unique key (e.g. something like 'mybuild-r1.0-v01'). |
<prefix>comments | These are the comments made by build composer. This may include composition notes. |
<prefix>composer.id | This is the identifier of the user that has composed build (e.g. its login). |
<prefix>release.name | This is the display name of the release this build has been made for (e.g. something like '1.0') |
<prefix>components.<component type key>.* | In addition of above properties related to build own informations, the default extractor add all properties related to each component composing assembly. Every property of a component is append to the <prefix>components.<component type key>. string (e.g. you may have a 'build.components.comp.key' property denoting the key of build component that has the Component type). See Components subsection for a description of available properties. |
Property | Description |
---|---|
<prefix>.name | The name of bound resource |
<prefix>.machine.ip | The IP address of the machine hosting this resource |
<prefix>.machine.name | The name of the machine hosting this resource |
The default implementation of PropertiesExtractor for environment domain objects is PhysicalEnvironmentPropertiesExtractor. It uses a prefix for all produced properties that is physicalenv. if not specified.
Property | Description |
---|---|
<prefix>key | This is the physical environment unique key (e.g. something like 'env01'). |
<prefix>name | This is the displayable name of this physical environment (e.g. something like 'Environment 01') |
<prefix>resources.<resource type key>.* | In addition of above properties related to environment own informations, the default extractor add all properties related to each bound infrastructure resources. Every property of a resource is append to the <prefix>resources.<resource type key>. string (e.g. you may have a 'physicalenv.resources.webserver.name' property denoting the name of the web server that is used by environment). See Resources subsection for a description of available properties. |
The default implementation of PropertiesExtractor for deployment domain objects is DeploymentPropertiesExtractor. It uses a prefix for all produced properties that is deployment. if not specified.
Property | Description |
---|---|
<prefix>id | This is the unique identifier of deployment. It has no special business meaning. |
<prefix>applicant.id | The login of user that has requested the deployment. |
<prefix>applicant.comments | The comments of user that has requested the deployment. |
<prefix>target.name | The choosen deployment target name. |
<prefix>target.description | The choosen deployment target description. |
<prefix>logicalenv.key | This is the unique key identifying logical environment this deployment is for. |
<prefix>logicalenv.label | This is the display label of the logical environment this deployment is for. |
<prefix>physicalenv.* | In addition of above properties related to deployment own informations, the default extractor add all properties related to the physical environments deployment is made on. Every property of the environment is append to the <prefix>physicalenv. string (e.g. you will have a 'deployment.physicalenv.name' property denoting the name of the physical environment). See Environments subsection for a description of available properties. |