@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())); }
@Override public Revision newRevision(URI revisionIdentifier) { GregorianCalendar created = null; if (revisionIdentifier == null) { revisionIdentifier = generateNewIdentifier(); created = new GregorianCalendar(); } Revision newRevision = new Revision(revisionIdentifier, getCurrentRevision()); newRevision.setGeneratedAtTime(created); setCurrentRevision(newRevision); return newRevision; }
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); }
XMLGregorianCalendar xmlCal = verResource.getGeneratedAtTime() .getValue(); revision.setGeneratedAtTime(xmlCal.toGregorianCalendar()); revision.setPreviousRevision(r); 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()); revision.setPreviousRevision(r); revision.setChangeSpecificationType(base.resolve(changeSpec .getType().getResource())); revision.getAdditionOf().addAll(additions); revision.getModificationsOf().addAll(modifications); revision.getRemovalOf().addAll(removals); revision.getWasAttributedTo() .add(base.resolve(assoc.getResource()));
assertEquals("http://example.com/test/v3", r3.getIdentifier().toASCIIString()); assertEquals(expectedTime.getTimeInMillis(), r3.getGeneratedAtTime().getTimeInMillis()); r3.getChangeSpecificationType().toASCIIString()); assertEquals(2, r3.getWasAttributedTo().size()); assertTrue(r3.getWasAttributedTo().contains(URI.create("http://example.com/Fred"))); assertTrue(r3.getWasAttributedTo().contains(URI.create("http://example.net/SomeoneElse#me"))); assertEquals(2, r3.getHadOriginalSources().size()); List<Revision> originals = new ArrayList<Revision>(r3.getHadOriginalSources()); assertEquals("http://example.org/originalSource1", originals.get(0).getIdentifier().toASCIIString()); assertEquals("http://example.com/test/originalSource2", originals.get(1).getIdentifier().toASCIIString()); assertEquals(2, r3.getAdditionOf().size()); assertTrue(r3.getAdditionOf().contains(URI.create("http://example.com/test/nested-workflow1"))); assertTrue(r3.getAdditionOf().contains(URI.create("http://example.net/nested-workflow2"))); assertEquals(2, r3.getRemovalOf().size()); assertTrue(r3.getRemovalOf().contains(URI.create("http://example.net/removed-item"))); assertTrue(r3.getRemovalOf().contains(URI.create("http://example.com/test/removed-item2"))); assertEquals(2, r3.getModificationsOf().size()); assertTrue(r3.getModificationsOf().contains(URI.create("http://example.com/test/modified"))); assertTrue(r3.getModificationsOf().contains(URI.create("http://example.net/modified2"))); Revision r2 = r3.getPreviousRevision(); assertEquals("http://example.com/test/v2", r2.getIdentifier().toASCIIString());
@Override public boolean equals(Object obj) { if (!(obj instanceof Revision)) return false; Revision other = (Revision) obj; if (getIdentifier() == null) return obj == this; return getIdentifier().equals(other.getIdentifier()); }
@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); }
private Revision addOrExisting(URI uri, Map<URI, Revision> revisions) { Revision rev = revisions.get(uri); if (rev != null) return rev; rev = new Revision(uri, null); revisions.put(uri, rev); return rev; }
@Override public int hashCode() { if (getIdentifier() == null) return 0x01234567; return 0x01234567 ^ getIdentifier().hashCode(); }
@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); }
/** * Set the identifier. * <p> * This will delete any previous revisions in {@link #getCurrentRevision()} * * @see #getIdentifier() * @see #getCurrentRevision() * @param identifier * the identifier */ @Override public void setIdentifier(URI identifier) { setCurrentRevision(new Revision(identifier, null)); } }
@Override public String toString() { return getClass().getSimpleName() + " " + getIdentifier(); }
UUID uuid = entry.getValue(); URI uri = WORKFLOW_ROOT.resolve(uuid.toString() + "/"); rev = new Revision(uri, rev); rev.setGeneratedAtTime(cal);
/** * Returns the identifier. * <p> * The the default identifier is based on #getIdentifierRoot() plus a random * UUID. * * @see {@link #setIdentifier(URI)} * @return the identifier */ @Override public URI getIdentifier() { if (getCurrentRevision() == null) return null; return getCurrentRevision().getIdentifier(); }
return revision.getIdentifier();
@Ignore @Test public void resolveRevisions() { Revision r1 = wfBundle.newRevision(); Revision r2 = wfBundle.newRevision(); Revision r3 = wfBundle.newRevision(); assertEquals(wfBundle, uriTools.resolveUri(r3.getIdentifier(), wfBundle)); assertEquals(r2, uriTools.resolveUri(r2.getIdentifier(), wfBundle)); assertEquals(r1, uriTools.resolveUri(r1.getIdentifier(), wfBundle)); }
@Test public void revisionURIs() { Revision r1 = wfBundle.newRevision(); assertEquals(r1.getIdentifier(), uriTools.uriForBean(r1)); // assertEquals(r1, uriTools.resolveUri(r3.getIdentifier(), wfBundle)); }