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 2014/12/08 23:44:31 UTC

svn commit: r1643948 - /ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.java

Author: seanfinan
Date: Mon Dec  8 22:44:31 2014
New Revision: 1643948

URL: http://svn.apache.org/r1643948
Log:
Changed to a Singleton with a cache of approved users
added progress ticker (dot plotted for each second of delay)

Modified:
    ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.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=1643948&r1=1643947&r2=1643948&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 Mon Dec  8 22:44:31 2014
@@ -26,7 +26,7 @@ import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.URLEncoder;
-import java.util.Properties;
+import java.util.*;
 
 
 /**
@@ -37,7 +37,13 @@ import java.util.Properties;
  * Affiliation: CHIP-NLP
  * Date: 2/19/14
  */
-final public class UmlsUserApprover {
+public enum UmlsUserApprover {
+
+   INSTANCE;
+
+   static public UmlsUserApprover getInstance() {
+      return INSTANCE;
+   }
 
    // environment, matches old
    private final static String UMLSADDR_PARAM = "ctakes.umlsaddr";
@@ -54,6 +60,9 @@ final public class UmlsUserApprover {
 
    static final private Logger LOGGER = Logger.getLogger( "UmlsUserApprover" );
 
+   // cache of valid users
+   static private final Collection<String> _validUsers = new ArrayList<>();
+
    private UmlsUserApprover() {
    }
 
@@ -64,7 +73,7 @@ final public class UmlsUserApprover {
     * @param properties  -
     * @return true if the server at umlsaddr approves of the vendor, user, password combination
     */
-   public static boolean isValidUMLSUser( final UimaContext uimaContext, final Properties properties ) {
+   public boolean isValidUMLSUser( final UimaContext uimaContext, final Properties properties ) {
       String umlsUrl = EnvironmentVariable.getEnv( UMLSADDR_PARAM, uimaContext );
       if ( umlsUrl == null || umlsUrl.equals( EnvironmentVariable.NOT_PRESENT ) ) {
          umlsUrl = properties.getProperty( URL_PARAM );
@@ -93,8 +102,12 @@ final public class UmlsUserApprover {
     * @param pass    -
     * @return true if the server at umlsaddr approves of the vendor, user, password combination
     */
-   public static boolean isValidUMLSUser( final String umlsUrl, final String vendor,
+   public boolean isValidUMLSUser( final String umlsUrl, final String vendor,
                                           final String user, final String pass ) {
+      final String cacheCode = umlsUrl+vendor+user+pass;
+      if ( _validUsers.contains( cacheCode ) ) {
+         return true;
+      }
       String data;
       try {
          data = URLEncoder.encode( "licenseCode", "UTF-8" ) + "=" + URLEncoder.encode( vendor, "UTF-8" );
@@ -104,7 +117,10 @@ final public class UmlsUserApprover {
          LOGGER.error( "Could not encode URL for " + user + " with vendor license " + vendor );
          return false;
       }
+      final Timer timer = new Timer();
       try {
+         LOGGER.info( "Checking UMLS Account at " + umlsUrl + " for user " + user );
+         timer.scheduleAtFixedRate( new DotPlotter(), 1000, 1000 );
          final URL url = new URL( umlsUrl );
          final URLConnection connection = url.openConnection();
          connection.setDoOutput( true );
@@ -123,17 +139,31 @@ final public class UmlsUserApprover {
          }
          writer.close();
          reader.close();
+         timer.cancel();
          if ( isValidUser ) {
-            LOGGER.info( "UMLS Account at " + umlsUrl + " for user " + user + " has been validated" );
+            LOGGER.info( "  UMLS Account at " + umlsUrl + " for user " + user + " has been validated" );
+            _validUsers.add( cacheCode );
          } else {
-            LOGGER.error( "UMLS Account at " + umlsUrl + " is not valid for user " + user + " with " + pass );
+            LOGGER.error( "  UMLS Account at " + umlsUrl + " is not valid for user " + user + " with " + pass );
          }
          return isValidUser;
       } catch ( IOException ioE ) {
+         timer.cancel();
          LOGGER.error( ioE.getMessage() );
          return false;
       }
    }
 
+   static private class DotPlotter extends TimerTask {
+      private int _count = 0;
+      public void run() {
+         System.out.print( "." );
+         _count++;
+         if ( _count >= 50 ) {
+            _count = 0;
+            System.out.println();
+         }
+      }
+   }
 
 }