blob: 713c670a76ffc456794f9ba668b0edbb64a936d8 [file] [log] [blame]
package net.sf.taverna.t2.provenance.lineageservice.utils;
import java.util.Set;
import net.sf.taverna.t2.provenance.item.DataProvenanceItem;
import net.sf.taverna.t2.provenance.vocabulary.SharedVocabulary;
import net.sf.taverna.t2.reference.ErrorDocument;
import net.sf.taverna.t2.reference.ExternalReferenceSPI;
import net.sf.taverna.t2.reference.IdentifiedList;
import net.sf.taverna.t2.reference.ReferenceService;
import net.sf.taverna.t2.reference.ReferenceSet;
import net.sf.taverna.t2.reference.T2Reference;
import net.sf.taverna.t2.reference.T2ReferenceType;
import org.jdom.Element;
public class ProvenanceUtils {
public static String iterationToString(int[] iteration) {
String result = "[";
for (int i = 0; i < iteration.length; i++) {
result += iteration[i];
if (i < (iteration.length - 1))
result += ",";
}
result += "]";
return result;
}
/**
* Returns an Element representing the data item, identfied as either input
* or output. References to data are currently resolved to their actual
* values
*/
public static Element getDataItemAsXML(DataProvenanceItem provenanceItem) {
String name;
if (provenanceItem.getEventType().equals(SharedVocabulary.INPUTDATA_EVENT_TYPE)) {
name = "inputdata";
} else {
name = "outputdata";
}
Element result = new Element(name);
result.setAttribute("identifier", provenanceItem.getIdentifier());
result.setAttribute("processID", provenanceItem.getProcessId());
result.setAttribute("parent", provenanceItem.getParentId());
for (String port : provenanceItem.getDataMap().keySet()) {
Element portElement = new Element("port");
portElement.setAttribute("name", port);
portElement.setAttribute("depth", Integer.toString(provenanceItem.getDataMap()
.get(port).getDepth()));
result.addContent(portElement);
portElement.addContent(resolveToElement(provenanceItem.getDataMap().get(port), provenanceItem.getReferenceService()));
Element element = new Element("some_stuff");
portElement.addContent(element);
}
return result;
}
/**
* Given a {@link T2Reference} return all the other {@link T2Reference}s
* which it contains as an XML Element.
*
* @param entityIdentifier
* @return
* @throws NotFoundException
* @throws RetrievalException
*/
private static org.jdom.Element resolveToElement(T2Reference reference, ReferenceService referenceService) {
org.jdom.Element element = new org.jdom.Element("resolvedReference");
if (reference.getReferenceType().equals(T2ReferenceType.ErrorDocument)) {
ErrorDocument error = referenceService.getErrorDocumentService()
.getError(reference);
element.setName("error");
element.setAttribute("id", reference.toString());
org.jdom.Element messageElement = new org.jdom.Element("message");
messageElement.addContent(error.getExceptionMessage());
element.addContent(messageElement);
} else if (reference.getReferenceType().equals(
T2ReferenceType.ReferenceSet)) {
element.setName("referenceSet");
element.setAttribute("id", reference.toString());
ReferenceSet referenceSet = referenceService
.getReferenceSetService().getReferenceSet(reference);
Set<ExternalReferenceSPI> externalReferences = referenceSet
.getExternalReferences();
for (ExternalReferenceSPI externalReference : externalReferences) {
// FIXME does this make sense? No!! Should get the actual value
// not what it is (TEXT etc)
org.jdom.Element refElement = new org.jdom.Element("reference");
refElement.addContent(externalReference.getDataNature()
.toString());
element.addContent(refElement);
}
} else if (reference.getReferenceType().equals(
T2ReferenceType.IdentifiedList)) {
IdentifiedList<T2Reference> list = referenceService
.getListService().getList(reference);
element.setName("list");
element.setAttribute("id", reference.toString());
for (T2Reference ref : list) {
element.addContent(resolveToElement(ref, referenceService));
}
} else {
// throw something (maybe a tantrum)
}
return element;
}
}