Author: seanfinan
Date: Tue May 12 13:22:08 2015
New Revision: 1678940

URL: http://svn.apache.org/r1678940
Log:
CTAKES-359 : added additional check for <Result>true</Result> preceded by xml 
declaration

Modified:
    
ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.java
    
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/ThreadedUmlsDictionaryLookupAnnotator.java
    
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/UmlsDictionaryLookupAnnotator.java

Modified: 
ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.java?rev=1678940&r1=1678939&r2=1678940&view=diff
==============================================================================
--- 
ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.java
 (original)
+++ 
ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.java
 Tue May 12 13:22:08 2015
@@ -104,8 +104,8 @@ public enum UmlsUserApprover {
     * @return true if the server at umlsaddr approves of the vendor, user, 
password combination
     */
    public boolean isValidUMLSUser( final String umlsUrl, final String vendor,
-                                          final String user, final String pass 
) {
-      final String cacheCode = umlsUrl+vendor+user+pass;
+                                   final String user, final String pass ) {
+      final String cacheCode = umlsUrl + vendor + user + pass;
       if ( _validUsers.contains( cacheCode ) ) {
          return true;
       }
@@ -136,7 +136,8 @@ public enum UmlsUserApprover {
             if ( trimline.isEmpty() ) {
                break;
             }
-            isValidUser = trimline.equalsIgnoreCase( "<Result>true</Result>" );
+            isValidUser = trimline.equalsIgnoreCase( "<Result>true</Result>" )
+                          || trimline.equalsIgnoreCase( "<?xml version='1.0' 
encoding='UTF-8'?><Result>true</Result>" );
          }
          writer.close();
          reader.close();

Modified: 
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/ThreadedUmlsDictionaryLookupAnnotator.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/ThreadedUmlsDictionaryLookupAnnotator.java?rev=1678940&r1=1678939&r2=1678940&view=diff
==============================================================================
--- 
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/ThreadedUmlsDictionaryLookupAnnotator.java
 (original)
+++ 
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/ThreadedUmlsDictionaryLookupAnnotator.java
 Tue May 12 13:22:08 2015
@@ -47,7 +47,7 @@ public class ThreadedUmlsDictionaryLooku
 
 
    @Override
-  public void initialize( final UimaContext aContext ) throws 
ResourceInitializationException {
+   public void initialize( final UimaContext aContext ) throws 
ResourceInitializationException {
       super.initialize( aContext );
       final String umlsAddress = EnvironmentVariable.getEnv( UMLSADDR_PARAM, 
aContext );
       final String umlsVendor = EnvironmentVariable.getEnv( UMLSVENDOR_PARAM, 
aContext );
@@ -79,22 +79,24 @@ public class ThreadedUmlsDictionaryLooku
          final URL url = new URL( umlsaddr );
          final URLConnection connection = url.openConnection();
          connection.setDoOutput( true );
-         try(final OutputStreamWriter writer = new OutputStreamWriter( 
connection.getOutputStream() );
-             final BufferedReader reader = new BufferedReader( new 
InputStreamReader( connection.getInputStream() ) )){
-         
-           writer.write( data );
-           writer.flush();
-           boolean result = false;
+         try ( final OutputStreamWriter writer = new OutputStreamWriter( 
connection.getOutputStream() );
+               final BufferedReader reader = new BufferedReader( new 
InputStreamReader( connection
+                     .getInputStream() ) ) ) {
 
-           String line;
-           while ( (line = reader.readLine()) != null ) {
-             final String trimline = line.trim();
-             if ( trimline.isEmpty() ) {
-               break;
-             }
-             result = trimline.equalsIgnoreCase( "<Result>true</Result>" );
-           }
-           return result;
+            writer.write( data );
+            writer.flush();
+            boolean result = false;
+
+            String line;
+            while ( (line = reader.readLine()) != null ) {
+               final String trimline = line.trim();
+               if ( trimline.isEmpty() ) {
+                  break;
+               }
+               result = trimline.equalsIgnoreCase( "<Result>true</Result>" )
+                        || trimline.equalsIgnoreCase( "<?xml version='1.0' 
encoding='UTF-8'?><Result>true</Result>" );
+            }
+            return result;
          }
       } catch ( IOException ioE ) {
          LOGGER.error( ioE.getMessage() );

Modified: 
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/UmlsDictionaryLookupAnnotator.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/UmlsDictionaryLookupAnnotator.java?rev=1678940&r1=1678939&r2=1678940&view=diff
==============================================================================
--- 
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/UmlsDictionaryLookupAnnotator.java
 (original)
+++ 
ctakes/trunk/ctakes-dictionary-lookup/src/main/java/org/apache/ctakes/dictionary/lookup/ae/UmlsDictionaryLookupAnnotator.java
 Tue May 12 13:22:08 2015
@@ -18,14 +18,6 @@
  */
 package org.apache.ctakes.dictionary.lookup.ae;
 
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
-
 import org.apache.ctakes.core.resource.FileLocator;
 import org.apache.ctakes.core.resource.FileResourceImpl;
 import org.apache.ctakes.core.resource.JdbcConnectionResourceImpl;
@@ -33,128 +25,136 @@ import org.apache.ctakes.utils.env.Envir
 import org.apache.log4j.Logger;
 import org.apache.uima.UimaContext;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
-import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.fit.factory.AnalysisEngineFactory;
 import org.apache.uima.fit.factory.ExternalResourceFactory;
+import org.apache.uima.resource.ResourceInitializationException;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
 
 /**
  * UIMA annotator that identified entities based on lookup.
- * 
+ *
  * @author Mayo Clinic
  */
-public class UmlsDictionaryLookupAnnotator extends DictionaryLookupAnnotator
-{
-       /* Special implementation to pre bundle the UMLS SnowmedCT/RxNorm 
dictionaries
-        * Performs a check for user's UMLS licence at init time via their 
RESTful API
-        * User's will need to configure their UMLS username/password in their 
config
-        */
-       public final static String UMLSADDR_PARAM = "ctakes.umlsaddr";
-       public final static String UMLSVENDOR_PARAM = "ctakes.umlsvendor";
-       public final static String UMLSUSER_PARAM = "ctakes.umlsuser";
-       public final static String UMLSPW_PARAM = "ctakes.umlspw";
-       
-       private Logger iv_logger = Logger.getLogger(getClass().getName());
-
-       private String UMLSAddr;
-       private String UMLSVendor;
-       private String UMLSUser;
-       private String UMLSPW;
-
-       @Override
-  public void initialize(UimaContext aContext)
-                       throws ResourceInitializationException
-       {
-               super.initialize(aContext);
-
-               try {
-                       UMLSAddr = EnvironmentVariable.getEnv(UMLSADDR_PARAM, 
aContext);
-                       UMLSVendor = 
EnvironmentVariable.getEnv(UMLSVENDOR_PARAM, aContext);
-                       UMLSUser = EnvironmentVariable.getEnv(UMLSUSER_PARAM, 
aContext);
-                       UMLSPW = EnvironmentVariable.getEnv(UMLSPW_PARAM, 
aContext);
-                       
-                       iv_logger.info("Using " + UMLSADDR_PARAM + ": " + 
UMLSAddr + ": " + UMLSUser);
-                       if(!isValidUMLSUser(UMLSAddr, UMLSVendor, UMLSUser, 
UMLSPW))
-                       {
-                               iv_logger.error("Error: Invalid UMLS License.  
A UMLS License is required to use the UMLS dictionary lookup. \n" +
-                                               "Error: You may request one at: 
https://uts.nlm.nih.gov/license.html \n" +
-                                               "Please verify your UMLS 
license settings in the DictionaryLookupAnnotatorUMLS.xml configuration.");
-                               throw new Exception("Failed to initilize.  
Invalid UMLS License");
-                       }
-                       
-               } catch (Exception e) {
-                       throw new ResourceInitializationException(e);
-               }       
-       }
-
-       public static boolean isValidUMLSUser(String umlsaddr, String vendor, 
String username, String password) throws Exception {
-               String data = URLEncoder.encode("licenseCode", "UTF-8") + "="
-                               + URLEncoder.encode(vendor, "UTF-8");
-               data += "&" + URLEncoder.encode("user", "UTF-8") + "="
-                               + URLEncoder.encode(username, "UTF-8");
-               data += "&" + URLEncoder.encode("password", "UTF-8") + "="
-                               + URLEncoder.encode(password, "UTF-8");
-               URL url = new URL(umlsaddr);
-               URLConnection conn = url.openConnection();
-               conn.setDoOutput(true);
-               try(OutputStreamWriter wr = new 
OutputStreamWriter(conn.getOutputStream())){
-      wr.write(data);
-      wr.flush();
-               }
-               try(BufferedReader rd = new BufferedReader(new 
InputStreamReader(conn.getInputStream()))){
-                 boolean result = false;
-                 String line;
-                 while ((line = rd.readLine()) != null) {
-                   if(line.trim().length()>0)
-                   {
-                     result = 
line.trim().equalsIgnoreCase("<Result>true</Result>");
-                   }
-                 }
-                 return result;
-               }
-       }
-       
-       public static AnalysisEngineDescription createAnnotatorDescription() 
throws ResourceInitializationException{
-         try {
-      return 
AnalysisEngineFactory.createEngineDescription(UmlsDictionaryLookupAnnotator.class,
-          UMLSADDR_PARAM,
-          "https://uts-ws.nlm.nih.gov/restful/isValidUMLSUser";,
-          UMLSVENDOR_PARAM,
-          "NLM-6515182895",
-          "LookupDescriptor",
-          ExternalResourceFactory.createExternalResourceDescription(
-              FileResourceImpl.class,
-              
FileLocator.locateFile("org/apache/ctakes/dictionary/lookup/LookupDesc_Db.xml")),
-          "DbConnection",
-          ExternalResourceFactory.createExternalResourceDescription(
-              JdbcConnectionResourceImpl.class,
-              "",
-              JdbcConnectionResourceImpl.PARAM_DRIVER_CLASS,
-              "org.hsqldb.jdbcDriver",
-              JdbcConnectionResourceImpl.PARAM_URL,
-              // Should be the following but it's WAY too slow
-               
"jdbc:hsqldb:res:/org/apache/ctakes/dictionary/lookup/umls2011ab/umls"),
-              
//"jdbc:hsqldb:file:target/unpacked/org/apache/ctakes/dictionary/lookup/umls2011ab/umls"),
-          "RxnormIndexReader",
-          ExternalResourceFactory.createExternalResourceDescription(
-              JdbcConnectionResourceImpl.class,
-              "",
-              JdbcConnectionResourceImpl.PARAM_DRIVER_CLASS,
-              "org.hsqldb.jdbcDriver",
-              JdbcConnectionResourceImpl.PARAM_URL,
-              
"jdbc:hsqldb:res:/org/apache/ctakes/dictionary/lookup/rxnorm-hsqldb/umls"),
-          "OrangeBookIndexReader",
-          ExternalResourceFactory.createExternalResourceDescription(
-              JdbcConnectionResourceImpl.class,
-              "",
-              JdbcConnectionResourceImpl.PARAM_DRIVER_CLASS,
-              "org.hsqldb.jdbcDriver",
-              JdbcConnectionResourceImpl.PARAM_URL,
-              
"jdbc:hsqldb:res:/org/apache/ctakes/dictionary/lookup/orange_book_hsqldb/umls")
-              );
-    } catch (FileNotFoundException e) {
-      e.printStackTrace();
-      throw new ResourceInitializationException(e);
-    }
-            
-       }
+public class UmlsDictionaryLookupAnnotator extends DictionaryLookupAnnotator {
+   /* Special implementation to pre bundle the UMLS SnowmedCT/RxNorm 
dictionaries
+    * Performs a check for user's UMLS licence at init time via their RESTful 
API
+    * User's will need to configure their UMLS username/password in their 
config
+    */
+   public final static String UMLSADDR_PARAM = "ctakes.umlsaddr";
+   public final static String UMLSVENDOR_PARAM = "ctakes.umlsvendor";
+   public final static String UMLSUSER_PARAM = "ctakes.umlsuser";
+   public final static String UMLSPW_PARAM = "ctakes.umlspw";
+
+   private Logger iv_logger = Logger.getLogger( getClass().getName() );
+
+   private String UMLSAddr;
+   private String UMLSVendor;
+   private String UMLSUser;
+   private String UMLSPW;
+
+   @Override
+   public void initialize( UimaContext aContext )
+         throws ResourceInitializationException {
+      super.initialize( aContext );
+
+      try {
+         UMLSAddr = EnvironmentVariable.getEnv( UMLSADDR_PARAM, aContext );
+         UMLSVendor = EnvironmentVariable.getEnv( UMLSVENDOR_PARAM, aContext );
+         UMLSUser = EnvironmentVariable.getEnv( UMLSUSER_PARAM, aContext );
+         UMLSPW = EnvironmentVariable.getEnv( UMLSPW_PARAM, aContext );
+
+         iv_logger.info( "Using " + UMLSADDR_PARAM + ": " + UMLSAddr + ": " + 
UMLSUser );
+         if ( !isValidUMLSUser( UMLSAddr, UMLSVendor, UMLSUser, UMLSPW ) ) {
+            iv_logger.error(
+                  "Error: Invalid UMLS License.  A UMLS License is required to 
use the UMLS dictionary lookup. \n" +
+                  "Error: You may request one at: 
https://uts.nlm.nih.gov/license.html \n" +
+                  "Please verify your UMLS license settings in the 
DictionaryLookupAnnotatorUMLS.xml configuration." );
+            throw new Exception( "Failed to initilize.  Invalid UMLS License" 
);
+         }
+
+      } catch ( Exception e ) {
+         throw new ResourceInitializationException( e );
+      }
+   }
+
+   public static boolean isValidUMLSUser( String umlsaddr, String vendor, 
String username, String password )
+         throws Exception {
+      String data = URLEncoder.encode( "licenseCode", "UTF-8" ) + "="
+                    + URLEncoder.encode( vendor, "UTF-8" );
+      data += "&" + URLEncoder.encode( "user", "UTF-8" ) + "="
+              + URLEncoder.encode( username, "UTF-8" );
+      data += "&" + URLEncoder.encode( "password", "UTF-8" ) + "="
+              + URLEncoder.encode( password, "UTF-8" );
+      URL url = new URL( umlsaddr );
+      URLConnection conn = url.openConnection();
+      conn.setDoOutput( true );
+      try ( OutputStreamWriter wr = new OutputStreamWriter( 
conn.getOutputStream() ) ) {
+         wr.write( data );
+         wr.flush();
+      }
+      try ( BufferedReader rd = new BufferedReader( new InputStreamReader( 
conn.getInputStream() ) ) ) {
+         boolean result = false;
+         String line;
+         while ( (line = rd.readLine()) != null ) {
+            if ( line.trim().length() > 0 ) {
+               result = line.trim().equalsIgnoreCase( "<Result>true</Result>" )
+                        ||
+                        line.trim().equalsIgnoreCase( "<?xml version='1.0' 
encoding='UTF-8'?><Result>true</Result>" );
+            }
+         }
+         return result;
+      }
+   }
+
+   public static AnalysisEngineDescription createAnnotatorDescription() throws 
ResourceInitializationException {
+      try {
+         return AnalysisEngineFactory.createEngineDescription( 
UmlsDictionaryLookupAnnotator.class,
+               UMLSADDR_PARAM,
+               "https://uts-ws.nlm.nih.gov/restful/isValidUMLSUser";,
+               UMLSVENDOR_PARAM,
+               "NLM-6515182895",
+               "LookupDescriptor",
+               ExternalResourceFactory.createExternalResourceDescription(
+                     FileResourceImpl.class,
+                     FileLocator.locateFile( 
"org/apache/ctakes/dictionary/lookup/LookupDesc_Db.xml" ) ),
+               "DbConnection",
+               ExternalResourceFactory.createExternalResourceDescription(
+                     JdbcConnectionResourceImpl.class,
+                     "",
+                     JdbcConnectionResourceImpl.PARAM_DRIVER_CLASS,
+                     "org.hsqldb.jdbcDriver",
+                     JdbcConnectionResourceImpl.PARAM_URL,
+                     // Should be the following but it's WAY too slow
+                     
"jdbc:hsqldb:res:/org/apache/ctakes/dictionary/lookup/umls2011ab/umls" ),
+               
//"jdbc:hsqldb:file:target/unpacked/org/apache/ctakes/dictionary/lookup/umls2011ab/umls"),
+               "RxnormIndexReader",
+               ExternalResourceFactory.createExternalResourceDescription(
+                     JdbcConnectionResourceImpl.class,
+                     "",
+                     JdbcConnectionResourceImpl.PARAM_DRIVER_CLASS,
+                     "org.hsqldb.jdbcDriver",
+                     JdbcConnectionResourceImpl.PARAM_URL,
+                     
"jdbc:hsqldb:res:/org/apache/ctakes/dictionary/lookup/rxnorm-hsqldb/umls" ),
+               "OrangeBookIndexReader",
+               ExternalResourceFactory.createExternalResourceDescription(
+                     JdbcConnectionResourceImpl.class,
+                     "",
+                     JdbcConnectionResourceImpl.PARAM_DRIVER_CLASS,
+                     "org.hsqldb.jdbcDriver",
+                     JdbcConnectionResourceImpl.PARAM_URL,
+                     
"jdbc:hsqldb:res:/org/apache/ctakes/dictionary/lookup/orange_book_hsqldb/umls" )
+         );
+      } catch ( FileNotFoundException e ) {
+         e.printStackTrace();
+         throw new ResourceInitializationException( e );
+      }
+
+   }
 }


Reply via email to