You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by tm...@apache.org on 2014/04/23 21:37:23 UTC

svn commit: r1589499 - in /ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core: ae/CopyAnnotator.java resource/FileLocator.java util/ParamUtil.java

Author: tmill
Date: Wed Apr 23 19:37:22 2014
New Revision: 1589499

URL: http://svn.apache.org/r1589499
Log:
CTAKES-295: Update CopyAnnotator to use UimaFit-style configuration.

Modified:
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CopyAnnotator.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/resource/FileLocator.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/ParamUtil.java

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CopyAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CopyAnnotator.java?rev=1589499&r1=1589498&r2=1589499&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CopyAnnotator.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CopyAnnotator.java Wed Apr 23 19:37:22 2014
@@ -20,22 +20,21 @@ package org.apache.ctakes.core.ae;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import org.apache.ctakes.core.util.JCasUtil;
 import org.apache.ctakes.core.util.ParamUtil;
 import org.apache.log4j.Logger;
 import org.apache.uima.UimaContext;
-import org.apache.uima.analysis_component.JCasAnnotator_ImplBase;
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.jcas.JCas;
-import org.apache.uima.jcas.JFSIndexRepository;
 import org.apache.uima.jcas.cas.TOP;
-import org.apache.uima.jcas.tcas.Annotation;
 import org.apache.uima.resource.ResourceInitializationException;
+import org.uimafit.component.JCasAnnotator_ImplBase;
+import org.uimafit.descriptor.ConfigurationParameter;
+import org.uimafit.util.JCasUtil;
 
 
 /**
@@ -46,7 +45,31 @@ import org.apache.uima.resource.Resource
  * 
  */
 public class CopyAnnotator extends JCasAnnotator_ImplBase {
-	private int iv_srcType;
+  public static final String PARAM_SOURCE_CLASS = "srcObjClass";
+  @ConfigurationParameter(
+      name = PARAM_SOURCE_CLASS,
+      mandatory = true,
+      description = "Name of source class"
+      )
+  private String srcClassName;
+  
+  public static final String PARAM_DEST_CLASS = "destObjClass";
+  @ConfigurationParameter(
+      name = PARAM_DEST_CLASS,
+      mandatory = true,
+      description = "Name of destination class"
+      )
+  private String destClassName;
+  
+  public static final String PARAM_METHOD_MAP = "dataBindMap";
+  @ConfigurationParameter(
+      name = PARAM_METHOD_MAP,
+      mandatory = true,
+      description = "Mapping between source methods and destination methods in a bar (\"|\") separated format"
+      )
+  private String[] methodMapArray;
+  
+	private Class<? extends TOP> srcClass;
 
 	// LOG4J logger based on class name
 	private Logger logger = Logger.getLogger(getClass().getName());
@@ -59,30 +82,28 @@ public class CopyAnnotator extends JCasA
 	// val = destination setter method (java.lang.reflect.Method)
 	private Map<Method, Method> iv_getSetMap;
 
-	public void initialize(UimaContext annotCtx)
+  @SuppressWarnings("unchecked")
+  @Override
+  public void initialize(UimaContext annotCtx)
 			throws ResourceInitializationException {
-		super.initialize(annotCtx);
+    super.initialize(annotCtx);
 
-		try {
-			String className;
-			className = (String) annotCtx
-					.getConfigParameterValue("srcObjClass");
-			Class<?> srcClass = Class.forName(className);
-			iv_srcType = JCasUtil.getType(className);
-
-			className = (String) annotCtx
-					.getConfigParameterValue("destObjClass");
-			Class<?> destClass = Class.forName(className);
+    
+    try {
+			srcClass = (Class<? extends TOP>) Class.forName(srcClassName);
+		  if(!TOP.class.isAssignableFrom(srcClass)) throw new ResourceInitializationException();
+		  
+			Class<?> destClass = Class.forName(destClassName);
 			Class<?>[] constrArgs = { JCas.class };
 			iv_destContr = destClass.getConstructor(constrArgs);
 
 			Map<String, String> m = ParamUtil.getStringParameterValuesMap(
-					"dataBindMap", annotCtx, "|");
-			iv_getSetMap = new HashMap<Method, Method>();
+					methodMapArray, "|");
+			iv_getSetMap = new HashMap<>();
 			Iterator<String> getterItr = m.keySet().iterator();
 			while (getterItr.hasNext()) {
-				String getterMethName = (String) getterItr.next();
-				String setterMethName = (String) m.get(getterMethName);
+				String getterMethName = getterItr.next();
+				String setterMethName = m.get(getterMethName);
 
 				Method getterMeth = srcClass.getMethod(getterMethName,
 						(Class[]) null);
@@ -94,21 +115,22 @@ public class CopyAnnotator extends JCasA
 
 				iv_getSetMap.put(getterMeth, setterMeth);
 			}
-		} catch (Exception e) {
+		} catch (ClassNotFoundException e) {
 			throw new ResourceInitializationException(e);
-		}
+		} catch (NoSuchMethodException e) {
+      throw new ResourceInitializationException(e);
+    } catch (SecurityException e) {
+      throw new ResourceInitializationException(e);
+    }
 	}
 
-	public void process(JCas jcas) throws AnalysisEngineProcessException {
+	@Override
+  public void process(JCas jcas) throws AnalysisEngineProcessException {
 		logger.info("process(JCas)");
 
 		// iterate over source objects in JCas
-		JFSIndexRepository indexes = jcas.getJFSIndexRepository();
-		FSIterator<Annotation> srcObjItr = indexes.getAnnotationIndex(
-				iv_srcType).iterator();
-		while (srcObjItr.hasNext()) {
-			TOP srcObj = (TOP) srcObjItr.next();
-
+		Collection<? extends TOP> srcObjs = JCasUtil.select(jcas, srcClass);
+		for(TOP srcObj : srcObjs){
 			Object[] constrArgVals = { jcas };
 			try {
 				// create new destination object
@@ -117,8 +139,8 @@ public class CopyAnnotator extends JCasA
 				// copy data from source to destination
 				Iterator<Method> getterItr = iv_getSetMap.keySet().iterator();
 				while (getterItr.hasNext()) {
-					Method getterMeth = (Method) getterItr.next();
-					Method setterMeth = (Method) iv_getSetMap.get(getterMeth);
+					Method getterMeth = getterItr.next();
+					Method setterMeth = iv_getSetMap.get(getterMeth);
 
 					Object val = getterMeth.invoke(srcObj, (Object[]) null);
 					Object[] setterArgs = { val };

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/resource/FileLocator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/resource/FileLocator.java?rev=1589499&r1=1589498&r2=1589499&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/resource/FileLocator.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/resource/FileLocator.java Wed Apr 23 19:37:22 2014
@@ -53,7 +53,7 @@ public class FileLocator
     }
 	
     /**
-     * @deprecated  As of release 3.1, replaced by {@link #getAsStream()}
+     * @Deprecated  As of release 3.1, replaced by {@link #getAsStream()}
      */    
     public static File locateFile(String location)
             throws FileNotFoundException

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/ParamUtil.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/ParamUtil.java?rev=1589499&r1=1589498&r2=1589499&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/ParamUtil.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/ParamUtil.java Wed Apr 23 19:37:22 2014
@@ -23,10 +23,8 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-
-import org.apache.uima.UimaContext;
+import org.apache.uima.UimaContext;
 import org.apache.uima.analysis_engine.annotator.AnnotatorContextException;
-import org.apache.uima.resource.ResourceAccessException;
 
 public class ParamUtil {
 
@@ -38,9 +36,8 @@ public class ParamUtil {
 	 *         optional or not set.
 	 * @throws AnnotatorContextException
 	 */
-	public static Set<String> getStringParameterValuesSet(String parameterName, UimaContext annotatorContext)
-			throws ResourceAccessException {
-		Set<String> returnValues = new HashSet<String>();
+	public static Set<String> getStringParameterValuesSet(String parameterName, UimaContext annotatorContext) {
+		Set<String> returnValues = new HashSet<>();
 		String[] strings = (String[]) annotatorContext.getConfigParameterValue(parameterName);
 		if (strings == null)
 			return returnValues;
@@ -52,18 +49,21 @@ public class ParamUtil {
 	}
 
 	public static Map<String, String> getStringParameterValuesMap(String parameterName,
-			UimaContext annotatorContext, String keyValueDelimiter) throws ResourceAccessException {
+			UimaContext annotatorContext, String keyValueDelimiter) {
 		String[] paramValues = (String[]) annotatorContext.getConfigParameterValue(parameterName);
-		Map<String, String> map = new HashMap<String, String>();
-		for (int i = 0; i < paramValues.length; i++) {
-			int delimiterIndex = paramValues[i].lastIndexOf(keyValueDelimiter);
-			if (delimiterIndex == -1)
-				continue;
-			String key = paramValues[i].substring(0, delimiterIndex);
-			String value = paramValues[i].substring(delimiterIndex + 1);
-			map.put(key, value);
-		}
-		return map;
+		return getStringParameterValuesMap(paramValues, keyValueDelimiter);
+	}
+	
+	public static Map<String, String> getStringParameterValuesMap(String[] paramValues, String keyValueDelimiter){
+    Map<String, String> map = new HashMap<>();
+    for (int i = 0; i < paramValues.length; i++) {
+      int delimiterIndex = paramValues[i].lastIndexOf(keyValueDelimiter);
+      if (delimiterIndex == -1)
+        continue;
+      String key = paramValues[i].substring(0, delimiterIndex);
+      String value = paramValues[i].substring(delimiterIndex + 1);
+      map.put(key, value);
+    }
+    return map;
 	}
-
 }