use of org.apache.uima.cas.FeatureStructure in project webanno by webanno.
the class TypeAdapter_ImplBase method setFeatureValue.
@Override
public void setFeatureValue(AnnotatorState aState, JCas aJcas, int aAddress, AnnotationFeature aFeature, Object aValue) {
FeatureStructure fs = selectByAddr(aJcas, aAddress);
Object oldValue = getValue(fs, aFeature);
featureSupportRegistry.getFeatureSupport(aFeature).setFeatureValue(aJcas, aFeature, aAddress, aValue);
Object newValue = getValue(fs, aFeature);
if (!Objects.equals(oldValue, newValue)) {
publishEvent(new FeatureValueUpdatedEvent(this, aState.getDocument(), aState.getUser().getUsername(), fs, aFeature, newValue, oldValue));
}
}
use of org.apache.uima.cas.FeatureStructure in project webanno by webanno.
the class WebAnnoCasUtil method setLinkFeatureValue.
public static void setLinkFeatureValue(FeatureStructure aFS, Feature aFeature, List<FeatureStructure> linkFSes) {
// Create a new array if size differs otherwise re-use existing one
ArrayFS array = (ArrayFS) WebAnnoCasUtil.getFeatureFS(aFS, aFeature.getShortName());
if (array == null || (array.size() != linkFSes.size())) {
array = aFS.getCAS().createArrayFS(linkFSes.size());
}
// Fill in links
array.copyFromArray(linkFSes.toArray(new FeatureStructure[linkFSes.size()]), 0, 0, linkFSes.size());
aFS.setFeatureValue(aFeature, array);
}
use of org.apache.uima.cas.FeatureStructure in project webanno by webanno.
the class WebAnnoCasUtil method setLinkFeature.
private static void setLinkFeature(FeatureStructure aFS, AnnotationFeature aFeature, List<LinkWithRoleModel> aValue, Feature feature) {
Type linkType = aFS.getCAS().getTypeSystem().getType(aFeature.getLinkTypeName());
Feature roleFeat = linkType.getFeatureByBaseName(aFeature.getLinkTypeRoleFeatureName());
Feature targetFeat = linkType.getFeatureByBaseName(aFeature.getLinkTypeTargetFeatureName());
// Create all the links
// FIXME: actually we could re-use existing link link feature structures
List<FeatureStructure> linkFSes = new ArrayList<>();
if (aValue != null) {
// remove duplicate links
Set<LinkWithRoleModel> links = new HashSet<>(aValue);
for (LinkWithRoleModel e : links) {
// set
if (e.targetAddr == -1) {
continue;
}
FeatureStructure link = aFS.getCAS().createFS(linkType);
link.setStringValue(roleFeat, e.role);
link.setFeatureValue(targetFeat, selectByAddr(aFS.getCAS(), e.targetAddr));
linkFSes.add(link);
}
}
setLinkFeatureValue(aFS, feature, linkFSes);
}
use of org.apache.uima.cas.FeatureStructure in project webanno by webanno.
the class WebAnnoTsv3WriterTestBase method testZeroLengthSlotFeature1.
@Test
public void testZeroLengthSlotFeature1() throws Exception {
JCas jcas = makeJCasOneSentence();
CAS cas = jcas.getCas();
List<Token> tokens = new ArrayList<>(select(jcas, Token.class));
Token t1 = tokens.get(0);
Token t2 = tokens.get(1);
Token t3 = tokens.get(2);
Type type = cas.getTypeSystem().getType("webanno.custom.SimpleSpan");
AnnotationFS s2 = cas.createAnnotation(type, t2.getBegin(), t3.getEnd());
cas.addFsToIndexes(s2);
AnnotationFS s3 = cas.createAnnotation(type, t2.getBegin(), t3.getEnd());
cas.addFsToIndexes(s3);
FeatureStructure link1 = makeLinkFS(jcas, "p1", s2);
FeatureStructure link2 = makeLinkFS(jcas, "p2", s3);
makeLinkHostFS(jcas, t1.getBegin(), t1.getBegin(), link1, link2);
writeAndAssertEquals(jcas, WebannoTsv3Writer.PARAM_SLOT_FEATS, asList("webanno.custom.SimpleLinkHost:links"), WebannoTsv3Writer.PARAM_SPAN_LAYERS, asList("webanno.custom.SimpleSpan", "webanno.custom.SimpleLinkHost"), WebannoTsv3Writer.PARAM_LINK_TYPES, asList("webanno.custom.LinkType"), WebannoTsv3Writer.PARAM_SLOT_TARGETS, asList("webanno.custom.SimpleSpan"));
}
use of org.apache.uima.cas.FeatureStructure in project webanno by webanno.
the class WebAnnoTsv3WriterTestBase method testStackedSimpleSlotFeatureWithoutValues.
@Test
public void testStackedSimpleSlotFeatureWithoutValues() throws Exception {
JCas jcas = makeJCasOneSentence();
CAS cas = jcas.getCas();
List<Token> tokens = new ArrayList<>(select(jcas, Token.class));
Token t1 = tokens.get(0);
Token t2 = tokens.get(1);
Token t3 = tokens.get(2);
Type type = cas.getTypeSystem().getType("webanno.custom.SimpleSpan");
AnnotationFS s2 = cas.createAnnotation(type, t2.getBegin(), t2.getEnd());
cas.addFsToIndexes(s2);
AnnotationFS s3 = cas.createAnnotation(type, t3.getBegin(), t3.getEnd());
cas.addFsToIndexes(s3);
{
FeatureStructure link1 = makeLinkFS(jcas, null, s2);
FeatureStructure link2 = makeLinkFS(jcas, null, s3);
makeLinkHostFS(jcas, t1.getBegin(), t1.getEnd(), link1, link2);
}
{
FeatureStructure link1 = makeLinkFS(jcas, null, s2);
FeatureStructure link2 = makeLinkFS(jcas, null, s3);
makeLinkHostFS(jcas, t1.getBegin(), t1.getEnd(), link1, link2);
}
writeAndAssertEquals(jcas, WebannoTsv3Writer.PARAM_SLOT_FEATS, asList("webanno.custom.SimpleLinkHost:links"), WebannoTsv3Writer.PARAM_SPAN_LAYERS, asList("webanno.custom.SimpleSpan", "webanno.custom.SimpleLinkHost"), WebannoTsv3Writer.PARAM_LINK_TYPES, asList("webanno.custom.LinkType"), WebannoTsv3Writer.PARAM_SLOT_TARGETS, asList("webanno.custom.SimpleSpan"));
}
Aggregations