in taverna-scufl2-wfbundle/src/main/java/org/apache/taverna/scufl2/rdfxml/RevisionParser.java [86:156]
private Revision parse(URI base, VersionableResource verResource,
Map<URI, Revision> revisions) throws ReaderException {
URI uri = base.resolve(verResource.getAbout());
Revision revision = addOrExisting(uri, revisions);
if (verResource.getGeneratedAtTime() != null) {
XMLGregorianCalendar xmlCal = verResource.getGeneratedAtTime()
.getValue();
revision.setGeneratedAtTime(xmlCal.toGregorianCalendar());
}
Resource wasRevisionOf = verResource.getWasRevisionOf();
if (wasRevisionOf != null) {
// TODO Put these in a map
Revision r = addOrExisting(
base.resolve(wasRevisionOf.getResource()), revisions);
revision.setPreviousRevision(r);
}
if (verResource.getWasChangedBy() != null) {
ChangeSpecification changeSpec = verResource.getWasChangedBy()
.getChangeSpecification();
if (changeSpec.getFromVersion() != null) {
Revision r = addOrExisting(
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);
}
if (changeSpec.getType() != null)
revision.setChangeSpecificationType(base.resolve(changeSpec
.getType().getResource()));
for (HasChange hasChange : changeSpec.getHasChange()) {
if (hasChange.getAddition() != null) {
Set<URI> additions = parse(hasChange.getAddition(), base);
// Note: Use addAll in case a buggy XML has multiple
// <hasChange><Addition>
revision.getAdditionOf().addAll(additions);
}
if (hasChange.getModification() != null) {
Set<URI> modifications = parse(hasChange.getModification(),
base);
revision.getModificationsOf().addAll(modifications);
}
if (hasChange.getRemoval() != null) {
Set<URI> removals = parse(hasChange.getRemoval(), base);
revision.getRemovalOf().addAll(removals);
}
}
}
for (Resource assoc : verResource.getWasAttributedTo())
revision.getWasAttributedTo()
.add(base.resolve(assoc.getResource()));
for (Resource assoc : verResource.getHadOriginalSource()) {
Revision r = addOrExisting(base.resolve(assoc.getResource()),
revisions);
revision.getHadOriginalSources().add(r);
}
return revision;
}