commit | 21204ba7ada5f7f34ff39c784cd32338ab38b5b4 | [log] [tgz] |
---|---|---|
author | Stian Soiland-Reyes <stian@soiland-reyes.com> | Thu Sep 26 14:34:12 2013 +0100 |
committer | Stian Soiland-Reyes <stian@soiland-reyes.com> | Thu Sep 26 14:34:12 2013 +0100 |
tree | 479b247effffce51276cc802f86646df897d9a51 | |
parent | ba7957f9a8b39f6604efb55ab050ea8431293901 [diff] |
Don't save non-empty folders. Enforce relative URIs
API for building Wf4Ever RO bundles.
Work in progress.
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 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"); Files.createDirectory(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)) { System.out.println(Bundles.getStringValue(in1)); } // Or just use the regular Files methods: for (String line : Files.readAllLines(in1, Charset.forName("UTF-8"))) { System.out.println(line); } // Binaries and large files are done through the Files API try (OutputStream out = Files.newOutputStream(in1, StandardOpenOption.APPEND)) { out.write(32); } // 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); System.out.println(resolved); } // 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 Desktop.getDesktop().open(zip.toFile()); } // Loading a bundle back from disk try (Bundle bundle2 = Bundles.openBundle(zip)) { assertEquals(zip, bundle2.getSource()); }