Bundle

A bundle is a JAVA specific archive used for internationalization.

It demonstrates another use of the nodes repository: The repository can store settings used in a build. A virtual page is used to display the values in a user friendly form and there is an API to access this information via RMI or WEB-DAV, thus it can be used to create implementation artifacts in the build. For instance, if you are using maven for your build, you can create artifact specific plugins, that will query the repository to create the artifacts. That way, the specification and the implementation are connected and will not deviate from each other.

Note, that this can be used to trace requirements and to generate a skeleton of your application always consistent with your specification. You can create references from the requirements stored in the repository to the build specifications of artifacts associated to the requirements and implicitly to the generated artifacts as well. Generation of artifacts will usually make sense, if there are multiple similar artifacts. But on the other hand such artifacts will most often form the skeleton of your application. So your nodes repository can build a bridge between the specification and the implementation and specify a skeleton of your application, that will be generated from the information in the repository, i.e. it will always be consitent with the specification. Think of schema specifications and associated access objects, internal service specifications of the application generating abstract service classes, validation specifications generating abstract validation classes and even generation of parts of the user interface, if the user interface is build up from multiple similar items.

In the maven case, the repository can be accessed by a maven plugin that uses offset.nodes.maven.RMISession.

As an example, the application uses the offset.nodes.maven.bundle.BundleMojo. This maven plugin retrieves the internationalization settings stored by users into the repository and creates bundle files from that. That way the internationalization can be done inside the nodes repository, bundle files will always be consistent with the specification.

Schema

nodes:bundle again inherits from nodes:shortId and nodes:versionable.

A node may have properties

  • nodes:module that holds the name of the maven module, which will create the bundle.
  • nodes:packagePath specifies the package path used to create the bundle.

The node may have child nodes

  • nodes:description. This is a nodes:htmlDiv, i.e. an HTML DIV used to describe the usage of the bundle.
  • nodes with arbitrary names of type nodes:bundleEntry. These can be multiple and list the bundle entries that belong to the bundle.

As custom_nodestypes.xml:

<nodeType
   hasOrderableChildNodes="true"
   isMixin="false"
   name="nodes:bundle"
   primaryItemName="">
  <supertypes>
   <supertype>nt:base</supertype>
   <supertype>nodes:shortId</supertype>
   <supertype>nodes:versionable</supertype>
  </supertypes>
  <propertyDefinition
    autoCreated="false"
    mandatory="false"
    multiple="false"
    name="nodes:module"
    onParentVersion="VERSION"
    protected="false"
    requiredType="String"/>
  <propertyDefinition
    autoCreated="false"
    mandatory="false"
    multiple="false"
    name="nodes:packagePath"
    onParentVersion="VERSION"
    protected="false"
    requiredType="String"/>
  <childNodeDefinition
    autoCreated="false"
    defaultPrimaryType="nodes:bundleEntry"
    mandatory="false"
    name="*"
    onParentVersion="VERSION"
    protected="false"
    sameNameSiblings="true">
   <requiredPrimaryTypes>
    <requiredPrimaryType>nodes:bundleEntry</requiredPrimaryType>
   </requiredPrimaryTypes>
  </childNodeDefinition>
  <childNodeDefinition
    autoCreated="false"
    defaultPrimaryType="nodes:htmlDiv"
    mandatory="false"
    name="nodes:description"
    onParentVersion="VERSION"
    protected="false"
    sameNameSiblings="false">
   <requiredPrimaryTypes>
    <requiredPrimaryType>nodes:htmlDiv</requiredPrimaryType>
   </requiredPrimaryTypes>
  </childNodeDefinition>
 </nodeType>

Template

The template looks like

The priority and the risk as well as the type of the sub requirements will be displayed as icons.

For that, in addition to configure the template columns as images here, you have to add the icons. For instance for the enumerated values of nodes:priority you have to add image files with the names HIGH, LOW and MEDIUM in folder /jcr:system/nodes/icons/nodes:requirement/nodes:priority.