Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "COSMOS SDD Tooling Examples"

(Reading SDDs)
(Reading SDDs)
Line 58: Line 58:
 
===Reading SDDs===
 
===Reading SDDs===
  
For reading an SDD, we first need a
+
For reading an SDD, we first need a DOM document. There's a few things I like to setup before reading the actual file into memory.
 +
 
 +
<code><pre>DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
 +
docBuilderFactory.setValidating(false);
 +
docBuilderFactory.setNamespaceAware(true);
 +
 
 +
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
 +
docBuilder.setErrorHandler(new ErrorHandler()
 +
{
 +
    public void warning(SAXParseException e) throws SAXException {
 +
        printErrorMessage(e);
 +
    }
 +
 
 +
    public void error(SAXParseException e) throws SAXException {
 +
        printErrorMessage(e);
 +
    }
 +
 
 +
    public void fatalError(SAXParseException e) throws SAXException {
 +
        printErrorMessage(e);
 +
    }
 +
           
 +
    private void printErrorMessage(SAXParseException e)
 +
    {
 +
        System.out.println("Line: " + e.getLineNumber() + ": " + e.getMessage());
 +
    }
 +
});</pre></code>
 +
 
 +
With that all set, we'll create the Document object.
 +
 
 +
<code><pre>Document doc = docBuilder.parse(new InputSource("mySDD.xml"));</code></pre>
 +
 
 +
And now our deployment descriptor.
 +
 
 +
<code><pre>SPISession session = SPISession.DEFAULT_INSTANCE;
 +
DeploymentDescriptor dd = (DeploymentDescriptor) session.buildDescriptorFromDocument(doc);</pre></code>
 +
 
 +
At this point, you can run through all the getter methods to get at the data you need to read.
 +
 
 +
===Writing SDDs===
 +
 
 +
Once you've either created an SDD or read one in to change some values, you probably want to write it back to the system. Let's setup some DOM objects first.
 +
 
 +
<code><pre>DOMImplementationRegistry domRegistry = DOMImplementationRegistry.newInstance();
 +
DOMImplementationLS domImpl = (DOMImplementationLS) domRegistry.getDOMImplementation("LS");
 +
LSSerializer serializer = domImpl.createLSSerializer();
 +
serializer.getDomConfig().setParameter("format-pretty-print", true);</pre></code>
 +
 
 +
This will format our xml like we're used to seeing. Otherwise you may see everything on one line. Now we write it to a file.
 +
 
 +
<code><pre>Document doc = dd.getOwnerDocument();
 +
FileWriter fw = new FileWriter("mySDD.xml");
 +
BufferedWriter bw = new BufferedWriter(fw);
 +
 
 +
bw.write(lsSerializer.writeToString(doc));
 +
bw.close();</pre></code>
 +
 
 +
The dd object here is our deployment descriptor.

Revision as of 22:48, 5 October 2008

This page contains examples of how to use various functions of the SDD tooling. Please use these examples as references as you create your own applications.

SDD Programmatic Interface

The SPI is used to read and write SDDs with a Java interface. These examples will take the reader through reading, writing, and creating SDDs.

Creating SDDs

The SPI is controlled through one instance of a session. In order to use any methods in the SPI, a session must first be created.

SPISession session = SPISession.DEFAULT_INSTANCE;

The SPI objects for the most part correspond to the SDD types. These objects are created from factory objects, so let's create these first.

BaseFactory baseFactory = session.createBaseFactory();
ContentUnitFactory cuFactory = session.createContentUnitFactory();
ArtifactFactory artifactFactory = session.createArtifactFactory();

Each package of the SPI APIs have a factory class. To create an SPI object, all required elements and attributes of the SPI object must be passed into the factory method. This means we'll be creating our deployment descriptor close to the end. Let's create our install artifact first.

Artifact install = artifactFactory.createInstallArtifact();
install.setContentReference("installArtifact");

This sets up our install artifact and sets the content reference to "installArtifact" which will map to one of the contents in the package descriptor. Next we'll add some additional content:

Collection<AdditionalContent> additionalContents = new ArrayList<AdditionalContent>();
additionalContents.add(artifactFactory.createAdditionalContent("bom"));
AdditionalContent additionalContent = artifactFactory.createAdditionalContent("readme");
additionalContent.setType("readme");
additionalContents.add(additionalContent);
install.setAdditionalContents(additionalContents);

A Collection of AdditionalContent types was created and two AdditionalContent objects were created through the artifact factory. The createAdditionalContent method requires the content reference to be defined, which also must match an entry in the package descriptor. All required elements and attributes of the SDD types will be required for the factory methods as well in order to create that type. The final step was to call the appropriate setter method on the install artifact for the additional content.

Now that we have an artifact, we can create our installable unit. Remember that installable units require artifacts.

InstallableUnit iu = cuFactory.createInstallableUnit("IU_ID", "IU_TARGET_REF", install, ContentUnitFactory.INSTALL_ARTIFACT);

We pass in our newly created install artifact to the factory method to create our install artifact.

One of the last objects we need to create are the resources in the topology.

Collection<Resource> resources = new ArrayList<Resource>();
Resource resource = baseFactory.createResource("OS", "OperatingSystem");
resource.setName("Windows Vista");
resource.setDescription(new TranslatableString("The operationg system of the computer.", "osDesc"));
resource.setShortDescription(new TranslatableString("Computer's OS", "osShortDesc"));
resources.add(resource);

Here we have added one resource to our SDD. The factory method takes the reference ID and then the resource type as parameters. In the two description elements, we've introduced the ability for the SDD to handle translatable strings. The first parameter is the default string. The second parameter is the translation key in the properties file that will accompany the SDD.

Now we'll create our final object:

DeploymentDescriptor dd = baseFactory.createDeploymentDescriptor("1.0", "12341234123412341234123412341234".getBytes(), Calendar.getInstance().getTime(), iu, resources);

We have everything we need and we finally create the deployment descriptor object. We pass in the schema version (usually 1.0), the descriptor UUID, last modified time, our installable unit, and our resources. Similar techniques can be used to create the package descriptor and add additional elements to the SDD.

Reading SDDs

For reading an SDD, we first need a DOM document. There's a few things I like to setup before reading the actual file into memory.

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilderFactory.setValidating(false);
docBuilderFactory.setNamespaceAware(true);

DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
docBuilder.setErrorHandler(new ErrorHandler()
{
    public void warning(SAXParseException e) throws SAXException {
        printErrorMessage(e);
    }

    public void error(SAXParseException e) throws SAXException {
        printErrorMessage(e);
    }

    public void fatalError(SAXParseException e) throws SAXException {
        printErrorMessage(e);
    }
            
    private void printErrorMessage(SAXParseException e)
    {
        System.out.println("Line: " + e.getLineNumber() + ": " + e.getMessage());
    }
});

With that all set, we'll create the Document object.

Document doc = docBuilder.parse(new InputSource("mySDD.xml"));</code>

And now our deployment descriptor.

<code>
SPISession session = SPISession.DEFAULT_INSTANCE;
DeploymentDescriptor dd = (DeploymentDescriptor) session.buildDescriptorFromDocument(doc);

At this point, you can run through all the getter methods to get at the data you need to read.

Writing SDDs

Once you've either created an SDD or read one in to change some values, you probably want to write it back to the system. Let's setup some DOM objects first.

DOMImplementationRegistry domRegistry = DOMImplementationRegistry.newInstance();
DOMImplementationLS domImpl = (DOMImplementationLS) domRegistry.getDOMImplementation("LS");
LSSerializer serializer = domImpl.createLSSerializer();
serializer.getDomConfig().setParameter("format-pretty-print", true);

This will format our xml like we're used to seeing. Otherwise you may see everything on one line. Now we write it to a file.

Document doc = dd.getOwnerDocument();
FileWriter fw = new FileWriter("mySDD.xml");
BufferedWriter bw = new BufferedWriter(fw);

bw.write(lsSerializer.writeToString(doc));
bw.close();

The dd object here is our deployment descriptor.

Back to the top