blob: b63b8bf53023c2f890ab952ab100675f2f57c879 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.cas_data.impl;
import java.util.Iterator;
import java.util.Vector;
import org.apache.uima.UIMAFramework;
import org.apache.uima.cas_data.CasData;
import org.apache.uima.cas_data.FeatureStructure;
import org.apache.uima.cas_data.FeatureValue;
import org.apache.uima.resource.metadata.NameValuePair;
import org.apache.uima.resource.metadata.impl.NameValuePair_impl;
import org.apache.uima.util.Level;
/**
* Some utilities for dealing with CasData
*
*
*
*/
public class CasDataUtils {
/**
* resource bundle for log messages
*/
private static final String LOG_RESOURCE_BUNDLE = "org.apache.uima.impl.log_messages";
/**
* current class
*/
private static final Class CLASS_NAME = CasDataUtils.class;
public static boolean hasFeature(CasData aCAS, String featureName) {
Iterator it = aCAS.getFeatureStructures();
while (it.hasNext()) {
Object object = it.next();
if (object instanceof FeatureStructure) {
FeatureStructure fs = (FeatureStructure) object;
FeatureValue fValue = fs.getFeatureValue(featureName);
if (fValue != null) {
return true;
}
}
}
return false;
}
public static boolean hasFeatureStructure(CasData aCAS, String aName) {
Iterator it = aCAS.getFeatureStructures();
while (it.hasNext()) {
Object object = it.next();
if (object instanceof FeatureStructure) {
FeatureStructure fs = (FeatureStructure) object;
if (fs.getType().equals(aName)) {
return true;
}
}
}
return false;
}
public static void dumpFeatures(CasData aCAS) {
Iterator it = aCAS.getFeatureStructures();
while (it.hasNext()) {
Object object = it.next();
if (object instanceof FeatureStructure) {
FeatureStructure fs = (FeatureStructure) object;
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.FINE, CLASS_NAME.getName(), "dumpFeatures",
LOG_RESOURCE_BUNDLE, "UIMA_cas_feature_structure_type__FINE", fs.getType());
String[] names = fs.getFeatureNames();
for (int i = 0; names != null && i < names.length; i++) {
FeatureValue fValue = fs.getFeatureValue(names[i]);
if (fValue != null) {
UIMAFramework.getLogger(CLASS_NAME).logrb(Level.FINE, CLASS_NAME.getName(),
"dumpFeatures", LOG_RESOURCE_BUNDLE, "UIMA_cas_feature_name__FINE",
new Object[] { names[i], fValue.toString() });
}
}
}
}
}
public static String getFeatureValueByType(CasData aCAS, String featureName) {
Iterator it = aCAS.getFeatureStructures();
String featureValue = null;
while (it.hasNext()) {
Object object = it.next();
if (object instanceof FeatureStructure) {
FeatureStructure fs = (FeatureStructure) object;
if (System.getProperty("DEBUG") != null)
System.out.println("FeatureName::::::::::::::::::::::::::::::::::::::::::>"
+ fs.getType() + " Searching For::" + featureName);
if (featureName.equals(fs.getType())) {
String[] names = fs.getFeatureNames();
for (int i = 0; names != null && i < names.length; i++) {
if (System.getProperty("DEBUG") != null)
System.out.println("Feature Structure:::" + fs.getType() + " Has Value::" + names[i]);
}
if ("uima.cpm.DocumentText".equals(featureName) || "UTF8:UTF8Content".equals(featureName)) {
FeatureValue fValue = fs.getFeatureValue("value");
if (fValue == null) {
return null;
}
return fValue.toString();
} else if ("Detag:DetagContent".equals(featureName)) {
FeatureValue fValue = fs.getFeatureValue("Doc:SpannedText");
if (fValue == null) {
return null;
}
return fValue.toString();
}
FeatureValue fValue = fs.getFeatureValue(featureName);
if (fValue != null) {
featureValue = fValue.toString();
break;
}
}
}
}
return featureValue;
}
public static String[] getFeatureStructureValues(CasData aCAS, String featureStructureName,
String featureName) {
Iterator it = aCAS.getFeatureStructures();
String featureValue = null;
Vector v = new Vector();
while (it.hasNext()) {
Object object = it.next();
if (object instanceof FeatureStructure) {
FeatureStructure fs = (FeatureStructure) object;
if (featureStructureName.equals(fs.getType())) {
String[] names = fs.getFeatureNames();
for (int i = 0; names != null && i < names.length; i++) {
if (names[i].equals(featureName)) {
FeatureValue fValue = fs.getFeatureValue(featureName);
if (fValue != null) {
featureValue = fValue.toString();
v.add(featureValue);
}
}
}
}
}
}
String[] features = new String[v.size()];
v.copyInto(features);
return features;
}
public static String getFeatureValueByType(CasData aCAS, String aFeatureStructure,
String featureName) {
Iterator it = aCAS.getFeatureStructures();
String featureValue = null;
while (it.hasNext()) {
Object object = it.next();
if (object instanceof FeatureStructure
&& ((FeatureStructure) object).getType().equals(aFeatureStructure)) {
FeatureStructure fs = (FeatureStructure) object;
FeatureValue fValue = fs.getFeatureValue(featureName);
if (fValue != null) {
featureValue = fValue.toString();
break;
}
}
}
return featureValue;
}
public static NameValuePair[] getCasDataFeatures(CasData aCasData, String aFeatureStructureName) {
NameValuePair[] valuePairSet = null;
Iterator it = aCasData.getFeatureStructures();
while (it.hasNext()) {
Object object = it.next();
if (object instanceof FeatureStructure
&& ((FeatureStructure) object).getType().equals(aFeatureStructureName)) {
FeatureStructure fs = (FeatureStructure) object;
String[] featureNames = fs.getFeatureNames();
if (featureNames == null) {
// return empty set
return new NameValuePair[0];
}
valuePairSet = new NameValuePair[featureNames.length];
for (int i = 0; i < featureNames.length; i++) {
valuePairSet[i] = new NameValuePair_impl();
valuePairSet[i].setName(featureNames[i]);
valuePairSet[i].setValue(fs.getFeatureValue(featureNames[i]).toString());
// System.out.println("DATACasUtils.getCasDataFeatures()-Name::"+valuePairSet[i].getName()+"
// Value:::"+valuePairSet[i].getValue().toString());
}
}
}
return valuePairSet;
}
}