[maven-release-plugin]  copy for tag 0.1.1
[maven-release-plugin] prepare release 0.1.1
1 file changed
tree: 91ed0fb158436757d712aa4da11e30ffc4bb11e7
  1. .gitignore
  2. README.md
  3. pom.xml
  4. src/

RO bundle API

API for building Wf4Ever RO bundles.

Work in progress.

See RO bundle specification.

This API is built on the Java 7 NIO Files and uses the Java 7 ZIP file provider to generate the RO Bundle.

The class org.purl.wf4ever.robundle.Bundle complements the Java 7 java.nio.Files API with more specific helper methods to work with RO Bundles.

This API is the basis for the Taverna Data Bundles API.


mvn clean install

should normally work, given a recent version of Maven 3 and Java 7 SDK.

myGrid's Jenkins installation has automated builds of robundle, which are deployed to myGrid's snapshot Maven repository.

Example of use

Example in full is at org.purl.wf4ever.robundle.TestExample

        // Create a new (temporary) RO bundle
        Bundle bundle = Bundles.createBundle();

        // Get the inputs
        Path inputs = bundle.getRoot().resolve("inputs");

        // Get an input port:
        Path in1 = inputs.resolve("in1");

        // Setting a string value for the input port:
        Bundles.setStringValue(in1, "Hello");

        // And retrieving it
        if (Bundles.isValue(in1)) {

        // Or just use the regular Files methods:
        for (String line : Files.readAllLines(in1, Charset.forName("UTF-8"))) {

        // Binaries and large files are done through the Files API
        try (OutputStream out = Files.newOutputStream(in1,
                StandardOpenOption.APPEND)) {
        // Or Java 7 style
        Path localFile = Files.createTempFile("", ".txt");
        Files.copy(in1, localFile, StandardCopyOption.REPLACE_EXISTING);
        System.out.println("Written to: " + localFile);

        Files.copy(localFile, bundle.getRoot().resolve("out1"));

        // Representing references
        URI ref = URI.create("http://example.com/external.txt");
        Path out3 = bundle.getRoot().resolve("out3");
        System.out.println(Bundles.setReference(out3, ref));
        if (Bundles.isReference(out3)) {
            URI resolved = Bundles.getReference(out3);

        // Saving a bundle:
        Path zip = Files.createTempFile("bundle", ".zip");
        Bundles.closeAndSaveBundle(bundle, zip);
        // NOTE: From now "bundle" and its Path's are CLOSED
        // and can no longer be accessed

        System.out.println("Saved to " + zip);
        if (Desktop.isDesktopSupported()) {
            // Open ZIP file for browsing

        // Loading a bundle back from disk
        try (Bundle bundle2 = Bundles.openBundle(zip)) {
            assertEquals(zip, bundle2.getSource());