Return-Path: X-Original-To: apmail-ctakes-commits-archive@www.apache.org Delivered-To: apmail-ctakes-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id C0FB89EBB for ; Mon, 8 Dec 2014 22:44:36 +0000 (UTC) Received: (qmail 20623 invoked by uid 500); 8 Dec 2014 22:44:36 -0000 Delivered-To: apmail-ctakes-commits-archive@ctakes.apache.org Received: (qmail 20587 invoked by uid 500); 8 Dec 2014 22:44:36 -0000 Mailing-List: contact commits-help@ctakes.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ctakes.apache.org Delivered-To: mailing list commits@ctakes.apache.org Received: (qmail 20576 invoked by uid 99); 8 Dec 2014 22:44:36 -0000 Received: from eris.apache.org (HELO hades.apache.org) (140.211.11.105) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Dec 2014 22:44:36 +0000 Received: from hades.apache.org (localhost [127.0.0.1]) by hades.apache.org (ASF Mail Server at hades.apache.org) with ESMTP id 70EA0AC1090; Mon, 8 Dec 2014 22:44:31 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1643948 - /ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/util/UmlsUserApprover.java Date: Mon, 08 Dec 2014 22:44:31 -0000 To: commits@ctakes.apache.org From: seanfinan@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20141208224432.70EA0AC1090@hades.apache.org> 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 _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(); + } + } + } }