This is an automated email from the ASF dual-hosted git repository.

seanfinan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ctakes.git


The following commit(s) were added to refs/heads/main by this push:
     new 567b0cb  Use default parameter values if a user-declared piper 
$variable is not defined.
567b0cb is described below

commit 567b0cbba544729d3f2243aec549f663d6fd9204
Author: Sean Finan <[email protected]>
AuthorDate: Fri Dec 20 10:18:01 2024 -0500

    Use default parameter values if a user-declared piper $variable is not 
defined.
---
 .../ctakes/core/pipeline/CliOptionalsHandler.java  |  8 ++++-
 .../ctakes/core/pipeline/PiperFileReader.java      | 28 +++++++++++----
 .../apache/ctakes/core/util/PropertyAeFactory.java | 41 ++++++++++++++--------
 3 files changed, 55 insertions(+), 22 deletions(-)

diff --git 
a/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/CliOptionalsHandler.java
 
b/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/CliOptionalsHandler.java
index 57da199..e373e5d 100644
--- 
a/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/CliOptionalsHandler.java
+++ 
b/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/CliOptionalsHandler.java
@@ -15,9 +15,15 @@ final public class CliOptionalsHandler {
 
    static private final Logger LOGGER = LoggerFactory.getLogger( 
"CliOptionalsHandler" );
 
+   static public final String NO_CLI_VALUE = "NO_CLI_VALUE";
+
    private CliOptionalsHandler() {
    }
 
+   static public boolean noCliValue( final Object value ) {
+      return NO_CLI_VALUE.equals( value );
+   }
+
    /**
     * Brute force method to get option values
     *
@@ -169,7 +175,7 @@ final public class CliOptionalsHandler {
          }
       }
       LOGGER.warn( "No value specified on command line for parameter \"{}\"", 
name );
-      return "";
+      return NO_CLI_VALUE;
    }
 
 }
diff --git 
a/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PiperFileReader.java
 
b/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PiperFileReader.java
index e4f2441..df3a9a8 100644
--- 
a/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PiperFileReader.java
+++ 
b/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PiperFileReader.java
@@ -435,7 +435,8 @@ final public class PiperFileReader {
          pairList.add( text.substring( matcher.start(), matcher.end() ) );
       }
       final String[] pairs = pairList.toArray( new String[ pairList.size() ] );
-      final Object[] keysAndValues = new Object[ pairs.length * 2 ];
+//      final Object[] keysAndValues = new Object[ pairs.length * 2 ];
+      final List<Object> keyValueList = new ArrayList<>();
       int i = 0;
       for ( String pair : pairs ) {
 //         final String[] keyAndValue = KEY_VALUE_PATTERN.split( pair );
@@ -445,19 +446,32 @@ final public class PiperFileReader {
             kvList.add( pair.substring( kv_matcher.start(), kv_matcher.end() ) 
);
          }
          final String[] keyAndValue = kvList.toArray( new String[ 
kvList.size() ] );
-         keysAndValues[ i ] = keyAndValue[ 0 ];
+//         keysAndValues[ i ] = keyAndValue[ 0 ];
          if ( keyAndValue.length == 1 ) {
-            keysAndValues[ i + 1 ] = "";
-            i += 2;
+//            keysAndValues[ i + 1 ] = "";
+//            i += 2;
+            keyValueList.add( keyAndValue[ 0 ] );
+            keyValueList.add( "" );
             continue;
          } else if ( keyAndValue.length > 2 ) {
             LOGGER.warn( "Multiple parameter values, using first of {}", pair 
);
          }
-         keysAndValues[ i + 1 ] = getValueObject( CliOptionalsHandler
+         final Object value = getValueObject( CliOptionalsHandler
                .getCliOptionalValue( _cliOptionals, keyAndValue[ 1 ] ) );
-         i += 2;
+         if ( CliOptionalsHandler.noCliValue( value ) ) {
+            continue;
+         }
+//            keysAndValues[ i + 1 ] = getValueObject( CliOptionalsHandler
+//                  .getCliOptionalValue( _cliOptionals, keyAndValue[ 1 ] ) );
+//            i += 2;
+         keyValueList.add( keyAndValue[ 0 ] );
+         keyValueList.add( value );
       }
-      return keysAndValues;
+      if ( keyValueList.isEmpty() ) {
+         return EMPTY_OBJECT_ARRAY;
+      }
+      return keyValueList.toArray();
+//      return keysAndValues;
    }
 
    /**
diff --git 
a/ctakes-core/src/main/java/org/apache/ctakes/core/util/PropertyAeFactory.java 
b/ctakes-core/src/main/java/org/apache/ctakes/core/util/PropertyAeFactory.java
index 17d9672..e6392a5 100644
--- 
a/ctakes-core/src/main/java/org/apache/ctakes/core/util/PropertyAeFactory.java
+++ 
b/ctakes-core/src/main/java/org/apache/ctakes/core/util/PropertyAeFactory.java
@@ -14,7 +14,9 @@ import 
org.apache.uima.fit.factory.TypeSystemDescriptionFactory;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -34,6 +36,7 @@ public enum PropertyAeFactory {
 
    static private final Logger LOGGER = LoggerFactory.getLogger( 
"PropertyAeFactory" );
 
+   static private final String NO_SUBSTITUTION_VALUE = "NO_SUBSTITUTION_VALUE";
 
    // Use a single hashmap so that multiple properties files can be used
    final private Map<String, Object> _properties = new HashMap<>();
@@ -44,7 +47,7 @@ public enum PropertyAeFactory {
          _typeSystemDescription = 
TypeSystemDescriptionFactory.createTypeSystemDescription();
       } catch ( ResourceInitializationException riE ) {
          LoggerFactory.getLogger( "PropertyAeFactory" )
-                      .error( "Could not initialize cTAKES Type System\n{}", 
riE.getMessage() );
+                      .error( "Could not initialize cTAKES Type System\n{}.", 
riE.getMessage() );
          System.exit( -1 );
       }
    }
@@ -56,7 +59,7 @@ public enum PropertyAeFactory {
     */
    synchronized public void addParameters( final Object... parameters ) {
       if ( parameters.length == 0 ) {
-         LOGGER.warn( "No parameters specified." );
+//         LOGGER.warn( "No parameters specified." );
          return;
       }
       if ( parameters.length % 2 != 0 ) {
@@ -73,7 +76,7 @@ public enum PropertyAeFactory {
     */
    synchronized public void addIfEmptyParameters( final Object... parameters ) 
{
       if ( parameters.length == 0 ) {
-         LOGGER.warn( "No parameters specified." );
+//         LOGGER.warn( "No parameters specified." );
          return;
       }
       if ( parameters.length % 2 != 0 ) {
@@ -101,19 +104,28 @@ public enum PropertyAeFactory {
     * @return array of Objects representing name value pairs
     */
    static private Object[] createParameters( final Map<String, Object> 
parameterMap ) {
-      final Object[] parameters = new Object[ parameterMap.size() * 2 ];
-      int i = 0;
+//      final Object[] parameters = new Object[ parameterMap.size() * 2 ];
+      final List<Object> parameterList = new ArrayList<>();
+//      int i = 0;
       for ( Map.Entry<String, Object> entry : parameterMap.entrySet() ) {
-         parameters[ i ] = entry.getKey();
+//         parameters[ i ] = entry.getKey();
          final Object value = subVariableParameter( entry.getValue(), 
parameterMap );
          if ( !value.equals( entry.getValue() ) ) {
-            LOGGER.info( "Substituting Parameter Value \"{}\" for \"{}\" on 
Parameter \"{}\"", value, entry.getValue(),
-                  entry.getKey() );
+            if ( value.equals( NO_SUBSTITUTION_VALUE ) ) {
+               LOGGER.warn( "No value for variable {} on parameter {}, default 
value will be used.", entry.getValue(), entry.getKey() );
+               continue;
+            } else {
+               LOGGER.info( "Substituting Parameter Value \"{}\" for \"{}\" on 
Parameter \"{}\".", value, entry.getValue(),
+                     entry.getKey() );
+            }
          }
-         parameters[ i + 1 ] = value;
-         i += 2;
+         parameterList.add( entry.getKey() );
+         parameterList.add( value );
+//         parameters[ i + 1 ] = value;
+//         i += 2;
       }
-      return parameters;
+//      return parameters;
+      return parameterList.toArray();
    }
 
    /**
@@ -152,8 +164,9 @@ public enum PropertyAeFactory {
          if ( envValue != null ) {
             return envValue;
          }
-         LOGGER.warn( "No value for unknown substitution variable ${}", 
varName );
-         return parameterValue;
+//         LOGGER.warn( "No value for unknown substitution variable ${}", 
varName );
+//         return parameterValue;
+         return NO_SUBSTITUTION_VALUE;
       }
       return subValue;
     }
@@ -247,7 +260,7 @@ public enum PropertyAeFactory {
          if ( parameters[ i ] instanceof String ) {
             map.put( (String) parameters[ i ], parameters[ i + 1 ] );
          } else {
-            LOGGER.warn( "Parameter {} not a String, using {}", i, parameters[ 
i ].toString() );
+            LOGGER.warn( "Parameter {} not a String, using {}.", i, 
parameters[ i ].toString() );
             map.put( parameters[ i ].toString(), parameters[ i + 1 ] );
          }
       }

Reply via email to