protected boolean accept(Visitor visitor, HashSet<Revision> visited) { if (!visited.add(this)) // Ignore this Revision, visitor has already seen it return true; boolean recurse = visitor.visitEnter(this); if (recurse) { if (getPreviousRevision() != null) recurse = getPreviousRevision().accept(visitor, visited); for (Revision rev : getHadOriginalSources()) { if (!recurse) break; recurse = rev.accept(visitor, visited); } } return visitor.visitLeave(this); }
@Override protected void cloneInto(WorkflowBean clone, Cloning cloning) { Revision cloneRevision = (Revision) clone; cloneRevision.setAdditionOf(new LinkedHashSet<URI>(getAdditionOf())); cloneRevision.setChangeSpecificationType(getChangeSpecificationType()); if (getGeneratedAtTime() != null) cloneRevision.setGeneratedAtTime((Calendar) getGeneratedAtTime() .clone()); for (Revision source : getHadOriginalSources()) cloneRevision.getHadOriginalSources().add( cloning.cloneIfNotInCache(source)); cloneRevision.setIdentifier(getIdentifier()); cloneRevision.setModificationsOf(new LinkedHashSet<URI>( getModificationsOf())); cloneRevision.setPreviousRevision(cloning .cloneIfNotInCache(getPreviousRevision())); cloneRevision.setRemovalOf(new LinkedHashSet<URI>(getRemovalOf())); cloneRevision.setWasAttributedTo(new LinkedHashSet<URI>( getWasAttributedTo())); }
@Test public void workflowWithoutRevisions() throws Exception { URL wfResource = getClass().getResource(WF_RANDOM); assertNotNull("Could not find workflow " + WF_RANDOM, wfResource); T2FlowParser parser = new T2FlowParser(); parser.setValidating(true); parser.setStrict(true); WorkflowBundle wfBundle = parser.parseT2Flow(wfResource.openStream()); List<String> expectedRevisions = Arrays.asList( "e87de19a-02c7-4106-ae81-0b8e28efb22c"); List<String> foundRevisions = new ArrayList<String>(); Revision revision = wfBundle.getMainWorkflow().getCurrentRevision(); while (revision != null) { URI revisionUri = revision.getIdentifier(); String revisionUUID = uriTools .relativePath(Workflow.WORKFLOW_ROOT, revisionUri) .toASCIIString().replace("/", ""); foundRevisions.add(revisionUUID); revision = revision.getPreviousRevision(); } assertEquals(expectedRevisions, foundRevisions); }
@Test public void readSimpleWorkflow() throws Exception { URL wfResource = getClass().getResource(WF_ANNOTATED); assertNotNull("Could not find workflow " + WF_ANNOTATED, wfResource); T2FlowParser parser = new T2FlowParser(); parser.setValidating(true); parser.setStrict(true); WorkflowBundle wfBundle = parser.parseT2Flow(wfResource.openStream()); List<String> expectedRevisions = Arrays.asList( "9e1f7ffd-3bf9-4ba8-9c63-03b79b1858ad", "bb902d82-b0e4-46fc-bed5-950a3b38bb98"); List<String> foundRevisions = new ArrayList<String>(); Revision revision = wfBundle.getMainWorkflow().getCurrentRevision(); while (revision != null) { URI revisionUri = revision.getIdentifier(); String revisionUUID = uriTools .relativePath(Workflow.WORKFLOW_ROOT, revisionUri) .toASCIIString().replace("/", ""); foundRevisions.add(revisionUUID); revision = revision.getPreviousRevision(); } assertEquals(expectedRevisions, foundRevisions); }
base.resolve(changeSpec.getFromVersion().getResource()), revisions); if (revision.getPreviousRevision() != null && revision.getPreviousRevision() != r) throw new ReaderException( "Inconsistent previous revision: " + revision.getPreviousRevision() .getIdentifier() + " or " + r.getIdentifier());
assertTrue(r3.getModificationsOf().contains(URI.create("http://example.net/modified2"))); Revision r2 = r3.getPreviousRevision(); assertEquals("http://example.com/test/v2", r2.getIdentifier().toASCIIString()); assertEquals(r2Time.getTimeInMillis(), r2.getGeneratedAtTime().getTimeInMillis()); Revision r1 = r2.getPreviousRevision(); assertEquals("http://example.net/v1", r1.getIdentifier().toASCIIString()); Revision r0 = r1.getPreviousRevision(); assertEquals("http://example.net/v0", r0.getIdentifier().toASCIIString()); assertEquals(null, r0.getPreviousRevision());