Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package org.texttechnologylab.DockerUnifiedUIMAInterface.driver;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.apache.commons.compress.compressors.CompressorException;
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.compressors.CompressorOutputStream;
import org.apache.commons.compress.compressors.CompressorStreamFactory;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.cas.CAS;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
import org.apache.uima.util.InvalidXMLException;
import org.json.JSONArray;
Expand All @@ -28,8 +30,8 @@
* @author Alexander Leonhardt
*/
public class DUUIPipelineComponent {
private HashMap<String, String> _options;
private HashMap<String,String> _parameters;
private Map<String, String> _options;
private Map<String,String> _parameters;

private AnalysisEngineDescription _engine;
private String _finalizedEncoded;
Expand Down Expand Up @@ -65,7 +67,7 @@ public class DUUIPipelineComponent {

private static String versionInformation = "version";
private static String writeToViewName = "uimaViewName";
private static String initialViewFromInitialViewName = "uimaViewInitializeFromInitial";
private static String initializeTargetView = "uimaViewInitializeFromInitial";

private static String componentName = "name";

Expand Down Expand Up @@ -114,6 +116,9 @@ public void finalizeComponent() throws CompressorException, IOException, SAXExce
cos.close();
_finalizedEncoded = Base64.getEncoder().encodeToString(out.toByteArray());
_finalizedEncodedHash = _finalizedEncoded.hashCode();

_options = ImmutableMap.copyOf(_options);
_parameters = ImmutableMap.copyOf(_parameters);
}

public String getFinalizedRepresentation() {
Expand Down Expand Up @@ -466,39 +471,70 @@ public Boolean getDockerImageFetching(Boolean defaultValue) {
return Boolean.parseBoolean(result);
}

/**
* @deprecated Use {@link #withTargetView(String)} instead
*/
@Deprecated
public DUUIPipelineComponent withWriteToView(String viewName) {
return withWriteToView(viewName,false);
System.err.printf("[DEPRECATED] DUUIPipelineComponent.withWriteToView(String) is deprecated, use withTargetView(String) instead.%n");
this.withTargetView(viewName);
return this;
}

public DUUIPipelineComponent withWriteToView(String viewName, boolean createViewFromInitialView) {
if(_finalizedEncoded!=null) {
throw new RuntimeException("DUUIPipelineComponent has already been finalized, it is immutable now!");
/**
* @deprecated Use {@link #withTargetView(String)} and {@link #withInitializeTargetView(boolean)} instead
*/
@Deprecated
public DUUIPipelineComponent withWriteToView(String viewName, boolean initializeTargetView) {
System.err.printf("[DEPRECATED] DUUIPipelineComponent.withWriteToView(String, boolean) is deprecated, use withTargetView(String) and withInitializeTargetView(boolean) instead.%n");
if (viewName == null) {
this.withTargetView(CAS.NAME_DEFAULT_SOFA);
this.withInitializeTargetView(false);
return this;
}
this.withTargetView(viewName);
this.withInitializeTargetView(initializeTargetView);
return this;
}

if(viewName==null) {
_options.remove(writeToViewName);
_options.remove(initialViewFromInitialViewName);
return this;
/**
* If set {@code true} and the configured {@link #withTargetView(String) target view} does not exist,
* the {@code Sofa}s {@link org.apache.uima.jcas.JCas#setDocumentText(String) document text},
* {@link org.apache.uima.jcas.JCas#setDocumentLanguage(String) document language} from the
* {@link org.apache.uima.jcas.tcas.DocumentAnnotation DocumentAnnotation}, and&mdash;if present&mdash;the
* {@link de.tudarmstadt.ukp.dkpro.core.api.metadata.type.DocumentMetaData DocumentMetaData}
* will be copied from the {@link #withSourceView(String) source view} ({@code _InitialView} by default).
*/
public DUUIPipelineComponent withInitializeTargetView(boolean bool) {
if(_finalizedEncoded!=null) {
throw new RuntimeException("DUUIPipelineComponent has already been finalized, it is immutable now!");
}
_options.put(writeToViewName,viewName);
_options.put(initialViewFromInitialViewName,String.valueOf(createViewFromInitialView));
_options.put(initializeTargetView, String.valueOf(bool));
return this;
}

public Boolean getCreateViewFromInitialView() {
String value = _options.get(initialViewFromInitialViewName);
if(value == null) return null;
public Boolean getInitializeTargetView() {
String value = _options.get(initializeTargetView);
if (value == null) return false;
return Boolean.valueOf(value);
}

/**
* @deprecated Use {@link #getTargetView()} instead
*/
@Deprecated
public String getViewName() {
return getViewName(null);
System.err.printf("[DEPRECATED] DUUIPipelineComponent.getViewName() is deprecated, use getTargetView() instead.%n");
return this.getTargetView();
}

/**
* @deprecated Use {@link #getTargetView()} instead
*/
@Deprecated
public String getViewName(String defaultValue) {
String value = _options.get(writeToViewName);
if(value==null) return defaultValue;
return value;
System.err.printf("[DEPRECATED] DUUIPipelineComponent.getViewName(String) is deprecated, use getTargetView() instead.%n");
return _options.getOrDefault(targetView, defaultValue);
}

public String toJson() {
Expand Down Expand Up @@ -538,24 +574,44 @@ public DUUIPipelineComponent withParameter(String key, String value) {
return this;
}

/**
* Sets source and target view to {@code viewName}.
*/
public DUUIPipelineComponent withView(String viewName){
if (_finalizedEncoded != null) {
throw new RuntimeException("DUUIPipelineComponent has already been finalized, it is immutable now!");
}
withSourceView(viewName);
withTargetView(viewName);
return this;
}

public DUUIPipelineComponent withSourceView(String viewName) {
if (_finalizedEncoded != null) {
throw new RuntimeException("DUUIPipelineComponent has already been finalized, it is immutable now!");
}
if (viewName == null) {
viewName = CAS.NAME_DEFAULT_SOFA;
}
_options.put(sourceView, viewName);
return this;
}


public DUUIPipelineComponent withTargetView(String viewName) {
if (_finalizedEncoded != null) {
throw new RuntimeException("DUUIPipelineComponent has already been finalized, it is immutable now!");
}
if (viewName == null) {
viewName = CAS.NAME_DEFAULT_SOFA;
}
_options.put(targetView, viewName);
return this;
}

public DUUIPipelineComponent withTimeout(long lLong) {
if (_finalizedEncoded != null) {
throw new RuntimeException("DUUIPipelineComponent has already been finalized, it is immutable now!");
}
_parameters.put(timeout, String.valueOf(lLong));
return this;
}
Expand Down Expand Up @@ -634,19 +690,11 @@ public final Map<String,String> getParameters() {
}

public String getSourceView() {
String result = _options.get(sourceView);
if(result == null) {
return "_InitialView";
}
return result;
return _options.getOrDefault(sourceView, CAS.NAME_DEFAULT_SOFA);
}

public String getTargetView() {
String result = _options.get(targetView);
if(result == null) {
return "_InitialView";
}
return result;
return _options.getOrDefault(targetView, CAS.NAME_DEFAULT_SOFA);
}

public DUUIPipelineComponent clearParameters() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.texttechnologylab.DockerUnifiedUIMAInterface.driver;

import de.tudarmstadt.ukp.dkpro.core.api.metadata.type.DocumentMetaData;
import org.apache.commons.compress.compressors.CompressorException;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.uima.UIMAException;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CASException;
import org.apache.uima.cas.CASRuntimeException;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
Expand All @@ -16,6 +16,7 @@
import org.apache.uima.resource.metadata.ConfigurationParameter;
import org.apache.uima.resource.metadata.NameValuePair;
import org.apache.uima.resource.metadata.TypeSystemDescription;
import org.apache.uima.util.CasCopier;
import org.apache.uima.util.InvalidXMLException;
import org.texttechnologylab.DockerUnifiedUIMAInterface.DUUIComposer;
import org.texttechnologylab.DockerUnifiedUIMAInterface.exception.PipelineComponentException;
Expand Down Expand Up @@ -374,34 +375,40 @@ public void run(String uuid, JCas aCas, DUUIPipelineDocumentPerformance perf, DU
long mutexEnd = System.nanoTime();
try {
long annotatorStart = mutexEnd;
JCas jc;
String viewName = component.getPipelineComponent().getViewName();
if (viewName == null) {
jc = aCas;
} else {
String sourceViewName = component.getPipelineComponent().getSourceView();
JCas sourceView = aCas.getView(sourceViewName);

JCas targetView = sourceView;
String targetViewName = component.getPipelineComponent().getTargetView();
if (targetViewName != null && !Objects.equals(sourceViewName, targetViewName)) {
try {
jc = aCas.getView(viewName);
targetView = sourceView.getView(targetViewName);
} catch (CASException | CASRuntimeException e) {
if (component.getPipelineComponent().getCreateViewFromInitialView()) {
jc = aCas.createView(viewName);
jc.setDocumentText(aCas.getDocumentText());
jc.setDocumentLanguage(aCas.getDocumentLanguage());
targetView = aCas.createView(targetViewName);
if (component.getPipelineComponent().getInitializeTargetView()) {
targetView.setDocumentText(sourceView.getDocumentText());
targetView.setDocumentLanguage(sourceView.getDocumentLanguage());
try {
DocumentMetaData documentMetaData = DocumentMetaData.get(sourceView);
CasCopier casCopier = new CasCopier(sourceView.getCas(), targetView.getCas());
casCopier.copyFs(documentMetaData).addToIndexes();
} catch (IllegalArgumentException ignored) {}
} else {
throw e;
}
}
}

// if (composer.shouldShutdown()) return;
engine.process(jc);
engine.process(targetView);
long annotatorEnd = System.nanoTime();
ReproducibleAnnotation ann = new ReproducibleAnnotation(jc);
ReproducibleAnnotation ann = new ReproducibleAnnotation(targetView);
ann.setDescription(component.getPipelineComponent().getFinalizedRepresentation());
ann.setCompression(DUUIPipelineComponent.compressionMethod);
ann.setTimestamp(System.nanoTime());
ann.setPipelineName(perf.getRunKey());
ann.addToIndexes();
perf.addData(0, 0, annotatorEnd - annotatorStart, mutexEnd - mutexStart, annotatorEnd - mutexStart, String.valueOf(component.getPipelineComponent().getFinalizedRepresentationHash()), 0, jc, null);
perf.addData(0, 0, annotatorEnd - annotatorStart, mutexEnd - mutexStart, annotatorEnd - mutexStart, String.valueOf(component.getPipelineComponent().getFinalizedRepresentationHash()), 0, targetView, null);
} catch (Exception e) {

// track error docs
Expand Down
Loading