public void save(WorkflowReport wfReport, Bundle dataBundle) throws IOException { Path path = getWorkflowRunReport(dataBundle); save(wfReport, path); if (!Files.exists(getWorkflow(dataBundle))) // Usually already done by Run constructor setWorkflowBundle(wfReport.getDataBundle(), wfReport.getSubject() .getParent()); }
@Override public void save(String runID, Path runFile) throws InvalidRunIdException, IOException { Run run = getRun(runID); Bundle dataBundle = run.getDataBundle(); try { DataBundles.closeAndSaveBundle(dataBundle, runFile); } catch (InvalidPathException e) { throw new IOException(e); } }
public WorkflowReport load(Bundle bundle) throws IOException, ReaderException, ParseException { Path path = getWorkflowRunReport(bundle); WorkflowBundle workflow = getWorkflowBundle(bundle); return load(path, workflow); }
public static Path newListItem(Path list) throws IOException { createList(list); return list.resolve(Long.toString(getListSize(list))); }
public static Path getIntermediate(Bundle dataBundle, UUID uuid) throws IOException { String fileName = uuid.toString(); Path intermediates = getIntermediates(dataBundle); // Folder is named after first 2 characters of UUID Path folder = intermediates.resolve(fileName.substring(0, 2)); createDirectories(folder); return anyExtension(folder, fileName); }
Bundle dataBundle = DataBundles.createBundle(); Path inputs = DataBundles.getInputs(dataBundle); Path portIn1 = DataBundles.getPort(inputs, "in1"); DataBundles.setStringValue(portIn1, "Hello"); if (DataBundles.isValue(portIn1)) { System.out.println(DataBundles.getStringValue(portIn1)); Path outputs = DataBundles.getOutputs(dataBundle); Files.copy(localFile, DataBundles.getPort(outputs, "out1")); Path port2 = DataBundles.getPort(inputs, "port2"); DataBundles.createList(port2); // empty list if (DataBundles.isList(port2)) { List<Path> list = DataBundles.getList(port2); assertTrue(list.isEmpty()); Path item0 = DataBundles.newListItem(port2); DataBundles.setStringValue(item0, "item 0"); DataBundles.setStringValue(DataBundles.newListItem(port2), "item 1"); DataBundles.setStringValue(DataBundles.newListItem(port2), "item 2"); DataBundles.setStringValue(DataBundles.getListItem(port2, 12), "item 12"); System.out.println(DataBundles.getStringValue(DataBundles.getListItem(port2, 2)));
@Test public void isError() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path portIn1 = DataBundles.getPort(inputs, "in1"); DataBundles.setError(portIn1, "Something did not work", "A very\n long\n error\n trace"); assertFalse(DataBundles.isList(portIn1)); assertFalse(DataBundles.isValue(portIn1)); assertFalse(DataBundles.isMissing(portIn1)); assertFalse(DataBundles.isReference(portIn1)); assertTrue(DataBundles.isError(portIn1)); }
@Test public void setErrorCause() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path portIn1 = DataBundles.getPort(inputs, "in1"); Path cause1 = DataBundles.setError(portIn1, "Something did not work", "A very\n long\n error\n trace"); Path portIn2 = DataBundles.getPort(inputs, "in2"); Path cause2 = DataBundles.setError(portIn2, "Something else did not work", "Shorter trace"); Path outputs = DataBundles.getOutputs(dataBundle); Path portOut1 = DataBundles.getPort(outputs, "out1"); Path errorPath = DataBundles.setError(portOut1, "Errors in input", "", cause1, cause2); List<String> errLines = Files.readAllLines(errorPath, Charset.forName("UTF-8")); assertEquals("../inputs/in1.err", errLines.get(0)); assertEquals("../inputs/in2.err", errLines.get(1)); assertEquals("", errLines.get(2)); }
@Test public void getListItem() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path list = DataBundles.getPort(inputs, "in1"); DataBundles.createList(list); for (int i = 0; i < 5; i++) { Path item = DataBundles.newListItem(list); DataBundles.setStringValue(item, "item " + i); Path item5 = DataBundles.getListItem(list, 5); assertTrue(item5.getFileName().toString().contains("5")); DataBundles.setStringValue(item5, "item 5"); Path item8 = DataBundles.getListItem(list, 8); assertTrue(item8.getFileName().toString().contains("8")); DataBundles.setStringValue(item8, "item 8"); Path item7 = DataBundles.getListItem(list, 7); assertFalse(Files.exists(item7)); assertFalse(DataBundles.isList(item7)); assertFalse(DataBundles.isError(item7)); assertFalse(DataBundles.isValue(item7)); assertTrue(DataBundles.isMissing(item7)); Path item2 = DataBundles.getListItem(list, 2); DataBundles.setStringValue(item2, "replaced"); List<Path> listItems = DataBundles.getList(list); assertEquals(9, listItems.size());
@Test(expected=FileAlreadyExistsException.class) public void setStringExistsAsList() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path in1 = DataBundles.getPort(inputs, "in1"); DataBundles.createList(in1); assertTrue(Files.isDirectory(in1)); DataBundles.setStringValue(in1, "Hello"); }
@Before public void dummyReport() throws Exception { wfReport = new WorkflowReport(wfBundle.getMainWorkflow()); dataBundle = DataBundles.createBundle(); wfReport.setDataBundle(dataBundle); wfReport.setCreatedDate(date(2013,1,2,13,37)); Path name = DataBundles.getPort(DataBundles.getInputs(dataBundle), "name"); DataBundles.setStringValue(name, "John Doe"); wfInvocation.getInputs().put("name", name); Path greeting = DataBundles.getPort(DataBundles.getOutputs(dataBundle), "greeting"); DataBundles.setStringValue(greeting, "Hello, John Doe"); wfInvocation.getOutputs().put("greeting", greeting); Path helloValue = DataBundles.getIntermediate(dataBundle, UUID.randomUUID()); Path concatenateOutput = DataBundles.getIntermediate(dataBundle, UUID.randomUUID()); DataBundles.setStringValue(helloValue, "Hello, "); } else if (p.getName().equals("Concatenate_two_strings")) { pInvocation.getInputs().put("string1", helloValue); pInvocation.getInputs().put("string2", name); pInvocation.getOutputs().put("output", concatenateOutput); DataBundles.setStringValue(concatenateOutput, "Hello, John Doe"); } else { throw new Exception("Unexpected processor " + p);
@Test public void getList() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path list = DataBundles.getPort(inputs, "in1"); DataBundles.createList(list); for (int i = 0; i < 5; i++) { Path item = DataBundles.newListItem(list); DataBundles.setStringValue(item, "test" + i); } List<Path> paths = DataBundles.getList(list); assertEquals(5, paths.size()); assertEquals("test0", DataBundles.getStringValue(paths.get(0))); assertEquals("test4", DataBundles.getStringValue(paths.get(4))); assertEquals(null, DataBundles.getList(null)); }
@Test public void listOfLists() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path list = DataBundles.getPort(inputs, "in1"); DataBundles.createList(list); Path sublist0 = DataBundles.newListItem(list); DataBundles.createList(sublist0); Path sublist1 = DataBundles.newListItem(list); DataBundles.createList(sublist1); assertEquals(Arrays.asList("0/", "1/"), ls(list)); DataBundles.setStringValue(DataBundles.newListItem(sublist1), "Hello"); assertEquals(Arrays.asList("0"), ls(sublist1)); assertEquals("Hello",DataBundles.getStringValue( DataBundles.getListItem(DataBundles.getListItem(list, 1), 0))); }
@Test public void getListSize() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path list = DataBundles.getPort(inputs, "in1"); DataBundles.createList(list); for (int i = 0; i < 5; i++) { Path item = DataBundles.newListItem(list); DataBundles.setStringValue(item, "item " + i); } assertEquals(5, DataBundles.getListSize(list)); // set at next available position Path item5 = DataBundles.getListItem(list, 5); assertTrue(item5.getFileName().toString().contains("5")); DataBundles.setStringValue(item5, "item 5"); assertEquals(6, DataBundles.getListSize(list)); // set somewhere beyond the end Path item8 = DataBundles.getListItem(list, 8); assertTrue(item8.getFileName().toString().contains("8")); DataBundles.setStringValue(item8, "item 8"); assertEquals(9, DataBundles.getListSize(list)); // Evil test - very high number long highNumber = 3l * Integer.MAX_VALUE; Path itemHigh = DataBundles.getListItem(list, highNumber); assertTrue(itemHigh.getFileName().toString().contains(Long.toString(highNumber))); DataBundles.setStringValue(itemHigh, "item 6442450941"); assertEquals(highNumber+1l, DataBundles.getListSize(list)); }
@Test public void getPorts() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); DataBundles.createList(DataBundles.getPort(inputs, "in1")); DataBundles.createList(DataBundles.getPort(inputs, "in2")); DataBundles.setStringValue(DataBundles.getPort(inputs, "value"), "A value"); Map<String, Path> ports = DataBundles.getPorts(DataBundles .getInputs(dataBundle)); assertEquals(3, ports.size()); // System.out.println(ports); assertTrue(ports.containsKey("in1")); assertTrue(ports.containsKey("in2")); assertTrue(ports.containsKey("value")); assertEquals("A value", DataBundles.getStringValue(ports.get("value"))); }
@Test(expected=FileAlreadyExistsException.class) public void setErrorExistsAsValue() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path in1 = DataBundles.getPort(inputs, "in1"); DataBundles.setStringValue(in1, "test"); assertTrue(Files.isRegularFile(in1)); DataBundles.setError(in1, "a", "b"); }
@Test(expected=FileAlreadyExistsException.class) public void setErrorExistsAsList() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path list = DataBundles.getPort(inputs, "in1"); DataBundles.createList(list); assertFalse(Files.isRegularFile(list)); assertTrue(Files.isDirectory(list)); DataBundles.setError(list, "a", "b"); }
@Test public void getBundle() throws Exception { Bundle bundle = run.getDataBundle(); // Contains a copy of workflow assertEquals(wfBundle.getGlobalBaseURI(), DataBundles.getWorkflowBundle(bundle).getGlobalBaseURI()); // Contains a run report Path runReport = DataBundles.getWorkflowRunReport(bundle); assertTrue(Files.exists(runReport)); JsonNode runReportJson = DataBundles.getWorkflowRunReportAsJson(bundle); assertEquals("COMPLETED", runReportJson.get("state").asText()); }
@Test(expected=FileAlreadyExistsException.class) public void setErrorExistsAsReference() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path in1 = DataBundles.getPort(inputs, "in1"); Path ref = DataBundles.setReference(in1, URI.create("http://example.com/")); assertFalse(Files.exists(in1)); assertTrue(Files.isRegularFile(ref)); DataBundles.setError(in1, "a", "b"); }
@Test(expected = FileAlreadyExistsException.class) public void setReferenceExistsAsList() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path in1 = DataBundles.getPort(inputs, "in1"); DataBundles.createList(in1); assertTrue(Files.isDirectory(in1)); DataBundles.setReference(in1, URI.create("http://example.com/")); }