blob: 94299e4fe8dd6b597fb813e313765044875321d7 [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.collection.impl.cpm.vinci;
import java.util.Iterator;
import org.apache.uima.adapter.vinci.util.Constants;
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.cas_data.PrimitiveValue;
import org.apache.vinci.transport.BaseClient;
import org.apache.vinci.transport.Transportable;
import org.apache.vinci.transport.TransportableFactory;
import org.apache.vinci.transport.VinciClient;
import org.apache.vinci.transport.VinciFrame;
import org.apache.vinci.transport.document.AFrame;
/**
* The Class Vinci.
*/
public class Vinci {
/** The Constant VNS_HOST. */
public static final String VNS_HOST = "VNS_HOST";
/** The Constant VNS_PORT. */
public static final String VNS_PORT = "VNS_PORT";
/**
* A factory for creating AF objects.
*/
public static class AFFactory implements TransportableFactory {
/*
* (non-Javadoc)
*
* @see org.apache.vinci.transport.TransportableFactory#makeTransportable()
*/
@Override
public Transportable makeTransportable() {
return new AFrame();
}
}
/**
* Returns a new VinciFrame.
*
* @return {@link org.apache.vinci.transport.VinciFrame} instance
*/
private AFrame getAFrame() {
return new AFrame();
}
/**
* Creates and populates an error frame.
*
* @param errorMsg
* - error message to place in the error frame
*
* @return {@link org.apache.vinci.transport.VinciFrame} instance containing error
*/
public VinciFrame replyWithError(String errorMsg) {
AFrame aFrame = getAFrame();
aFrame.fadd("Error", errorMsg);
return aFrame;
}
/**
* Package the {@link org.apache.vinci.transport.VinciFrame} containing result of the requested
* operation into a Vinci Data frame.
*
* @param conn
* the connection
* @param requestFrame
* {@link org.apache.vinci.transport.VinciFrame} containing result of thsi service
* operation
* @return {@link org.apache.vinci.transport.VinciFrame} VinciData frame.
* @throws Exception
* -
*/
public static AFrame replyWithAnalysis(BaseClient conn, VinciFrame requestFrame)
throws Exception {
AFFactory af = new AFFactory();
return (AFrame) conn.sendAndReceive(requestFrame, af);
}
/**
* Package the {@link org.apache.vinci.transport.VinciFrame} containing result of the requested
* operation into a Vinci Data frame.
*
* @param conn
* the connection
* @param requestFrame
* {@link org.apache.vinci.transport.VinciFrame} containing result of thsi service
* operation
* @return {@link org.apache.vinci.transport.VinciFrame} VinciData frame.
* @throws Exception
* the exception
*/
public static AFrame replyWithAnalysis(VinciClient conn, VinciFrame requestFrame)
throws Exception {
AFFactory af = new AFFactory();
return (AFrame) conn.sendAndReceive(requestFrame, af);
}
/**
* Produce A frame.
*
* @param cmd
* the cmd
* @param content
* the content
* @return the a frame
*/
public static AFrame produceAFrame(String cmd, String content) {
AFrame query = new AFrame();
query.fadd(Constants.VINCI_COMMAND, Constants.ANNOTATE);
AFrame keys = new AFrame();
keys.fadd(Constants.VINCI_DETAG, content);
AFrame data = new AFrame();
data.fadd(Constants.KEYS, keys);
query.fadd(Constants.DATA, data);
return query;
}
/**
* Extract KEYS as string.
*
* @param frame
* the frame
* @return the string
*/
public static String extractKEYSAsString(AFrame frame) {
String keys = "";
if (frame == null) {
return keys;
}
String frameAsString = frame.toXML();
if (frameAsString.indexOf("KEYS") > -1 && frameAsString.indexOf("</KEYS>") > -1) {
keys = frameAsString.substring(frameAsString.indexOf("KEYS") + 5,
frameAsString.indexOf("</KEYS>"));
}
return keys;
}
/**
* Gets the feature value by type.
*
* @param aCAS
* the a CAS
* @param featureName
* the feature name
* @return the feature value by type
*/
public static String getFeatureValueByType(CasData aCAS, String featureName) {
if (aCAS == null) {
return "";
}
Iterator it = aCAS.getFeatureStructures();
String featureValue = null;
while (it.hasNext()) {
FeatureStructure fs = (FeatureStructure) it.next();
FeatureValue fValue = fs.getFeatureValue(featureName);
if (fValue != null) {
featureValue = fValue.toString();
break;
}
}
return featureValue;
}
/**
* Gets the content from DATA cas.
*
* @param aCas
* the a cas
* @return the content from DATA cas
*/
public static String getContentFromDATACas(CasData aCas) {
Iterator it = aCas.getFeatureStructures();
while (it.hasNext()) {
FeatureStructure fs = (FeatureStructure) it.next();
if (org.apache.uima.collection.impl.cpm.Constants.CONTENT_TAG.equals(fs.getType())) {
return ((PrimitiveValue) fs
.getFeatureValue(org.apache.uima.collection.impl.cpm.Constants.CONTENT_TAG_VALUE))
.toString();
}
}
return "";
}
/**
* Returns a content from a given VinciFrame.
*
* @param aFrame
* the a frame
* @return the string
*/
public static String stripVinciFrame(VinciFrame aFrame) {
String contentFrame = aFrame.toXML();
int pos = contentFrame.indexOf(">");
int end = contentFrame.lastIndexOf("</vinci:FRAME>");
if (pos == -1 || end == -1) {
return null;
}
return contentFrame.substring(pos + 1, end - 1);
}
}