* eu.planets_project.ifr.core.wee.api.workflow.WorkflowTemplate#execute()
*/
public WorkflowResult execute() {
/* We want fresh logs and report for every run: */
log = initLog();
WorkflowResult wfResult = new WorkflowResult();
int count = 0;
List<DigitalObject> objects = new ArrayList<DigitalObject>();
log.trace(WorkflowTemplateHelper.overview(this));
String metadata;
try {
for (DigitalObject dgo : this.getData()) {
metadata = null;
log.info("Processing file #" + (count + 1));
try {
// Identify
String[] types = runIdentification(dgo, wfResult);
log.info(new Message("Identification", new Parameter("File", dgo.getTitle()), new Parameter(
"Result", Arrays.asList(types).toString())));
// Extract metadata - will otherwise get lost between steps!
List<Metadata> mList = dgo.getMetadata();
if ((mList != null) && (mList.size() > 0)) {
metadata = mList.get(0).getContent();
}
if (metadata == null) {
log.warn("No metadata contained in DigitalObject!");
} else {
log.info("Extracted metadata: " + metadata);
}
// Migrate
try {
FormatRegistry fr = FormatRegistryFactory.getFormatRegistry();
String ext = fr.getFirstExtension(new URI(types[0]));
log.info("Getting extension: " + ext);
if (ext != null) {
dgo = runMigrateService(dgo, fr.createExtensionUri(ext), wfResult);
objects.add(dgo);
log.info(new Message("Migration", new Parameter("Input", ext), new Parameter("Result", dgo
.getTitle())));
}
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
} catch (Exception e) {
String err = "workflow execution error for digitalObject #" + count;
log.error(err);
log.error(e.getClass() + ": " + e.getMessage());
System.out.println(e);
WorkflowResultItem wfResultItem = new WorkflowResultItem(dgo.getPermanentUri(),
WorkflowResultItem.GENERAL_WORKFLOW_ACTION,
System.currentTimeMillis());
wfResultItem.addLogInfo(err);
wfResult.addWorkflowResultItem(wfResultItem);
}
count++;
}
} finally {
//document endTime of the workflow
wfResult.setEndTime(System.currentTimeMillis());
/* A final message: */
List<URL> results = WorkflowTemplateHelper.reference(objects, log.getOutputFolder());
log.trace(WorkflowTemplateHelper.link(results));
/* Now write the stuff to disk: */
File reportFile = log.reportAsFile();
File logFile = log.logAsFile();
System.out.println("Wrote report to: " + reportFile.getAbsolutePath());
/* And return a result object: */
try {
URI outFolder = new URI("http",this.getHostAuthority(),"/data/wee/id-"+log.getTime(),null,null);
//String outFolder = "http://"+getHostName()+"/data/wee/id-"+log.getTime();
URL reportURL = new URL(""+outFolder+"/wf-report.html");
URL logFileURL = new URL(""+outFolder+"/wf-log.txt");
//wfResult = new WorkflowResult(reportURL, logFile.toURL(), results);
wfResult.setReport(reportURL);
wfResult.setLog(logFileURL);
wfResult.setResults(results);
System.out.println("Workflow result: " + wfResult);
return wfResult;
} catch (MalformedURLException e) {
e.printStackTrace();