You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by se...@apache.org on 2022/07/28 20:47:01 UTC

svn commit: r1903085 - in /ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core: ae/CommandRunner.java ae/CtakesRunner.java util/external/SystemUtil.java

Author: seanfinan
Date: Thu Jul 28 20:47:01 2022
New Revision: 1903085

URL: http://svn.apache.org/viewvc?rev=1903085&view=rev
Log:
Add ability to use $parameterName substitution on CommandRunner and CtakesRunner.
This allows things like:
cli ExternalOption=e
add CommandRunner Command="someExternalCommand --option $ExternalOption"
And then you can start ctakes with ""-e myExternalOptionValue" on the command line.

Modified:
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CommandRunner.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CtakesRunner.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CommandRunner.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CommandRunner.java?rev=1903085&r1=1903084&r2=1903085&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CommandRunner.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CommandRunner.java Thu Jul 28 20:47:01 2022
@@ -110,6 +110,9 @@ public class CommandRunner extends JCasA
    @Override
    public void initialize( final UimaContext context ) throws ResourceInitializationException {
       super.initialize( context );
+      _cmdDir = SystemUtil.subVariableParameters( _cmdDir, context );
+      _dir = SystemUtil.subVariableParameters( _dir, context );
+      _cmd = SystemUtil.subVariableParameters( _cmd, context );
       if ( _cmdDir != null && !_cmdDir.isEmpty() && !new File( _cmdDir ).exists() ) {
          LOGGER.warn( "Cannot find Command Directory " + _cmdDir );
       }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CtakesRunner.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CtakesRunner.java?rev=1903085&r1=1903084&r2=1903085&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CtakesRunner.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CtakesRunner.java Thu Jul 28 20:47:01 2022
@@ -62,6 +62,7 @@ public class CtakesRunner extends JCasAn
    @Override
    public void initialize( final UimaContext context ) throws ResourceInitializationException {
       super.initialize( context );
+      _cli = SystemUtil.subVariableParameters( _cli, context );
       try {
          final String piper = getPiper();
          if ( _logFile == null || _logFile.isEmpty() ) {

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java?rev=1903085&r1=1903084&r2=1903085&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java Thu Jul 28 20:47:01 2022
@@ -2,6 +2,7 @@ package org.apache.ctakes.core.util.exte
 
 import org.apache.ctakes.core.resource.FileLocator;
 import org.apache.log4j.Logger;
+import org.apache.uima.UimaContext;
 
 import java.io.*;
 import java.net.URL;
@@ -33,6 +34,44 @@ final public class SystemUtil {
    static public final String FILE_NOT_FOUND = "FILE_NOT_FOUND";
 
 
+   static public String subVariableParameters( final String command, final UimaContext context ) {
+      if ( context == null || command == null || !command.contains( "$" ) ) {
+         return command;
+      }
+      final StringBuilder sb = new StringBuilder();
+      int previousVarEnd = 0;
+      int varBegin = command.indexOf( '$', previousVarEnd );
+      while ( varBegin > -1 ) {
+         // copy everything from the command from the end of the previous variable to the begin of this variable.
+         sb.append( command, previousVarEnd, varBegin );
+         // get the end of the current variable name.
+         int varEnd = command.indexOf( ' ', varBegin );
+         varEnd = varEnd < 0 ? command.length() : varEnd;
+         // get the name of the variable (without $).
+         final String varName = command.substring( varBegin + 1, varEnd );
+         // get the value from the uima context.
+         final Object value = context.getConfigParameterValue( varName );
+         if ( value == null ) {
+            LOGGER.error( "No value for $" + varName + " in known parameter values." );
+            sb.append( "$" )
+              .append( varName );
+         } else {
+            LOGGER.info( "Substituting Parameter Value " + value + " for $" + varName );
+            sb.append( value );
+         }
+         if ( varEnd == command.length() ) {
+            break;
+         }
+         previousVarEnd = varEnd + 1;
+         varBegin = command.indexOf( '$', varEnd );
+         if ( varBegin < 0 ) {
+            sb.append( command, varEnd, command.length() );
+         }
+      }
+      return sb.toString();
+   }
+
+
    /**
     * Add key value pairs to a set of environment variables for use in external processes.
     *