in progress
[jalview.git] / forester / java / src / org / forester / archaeopteryx / AptxUtil.java
index 09effc3..d6c980a 100644 (file)
@@ -25,6 +25,7 @@
 
 package org.forester.archaeopteryx;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Graphics2D;
 import java.awt.GraphicsEnvironment;
@@ -35,10 +36,12 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.URI;
 import java.net.URL;
+import java.net.URLConnection;
 import java.text.ParseException;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -649,13 +652,13 @@ public final class AptxUtil {
         System.out.println( "[" + applet_name + "] > " + message );
     }
 
-    final static Phylogeny[] readPhylogeniesFromUrl( final URL url,
-                                                     final boolean phyloxml_validate_against_xsd,
-                                                     final boolean replace_underscores,
-                                                     final boolean internal_numbers_are_confidences,
-                                                     final TAXONOMY_EXTRACTION taxonomy_extraction,
-                                                     final boolean midpoint_reroot ) throws FileNotFoundException,
-            IOException {
+    final public static Phylogeny[] readPhylogeniesFromUrl( final URL url,
+                                                            final boolean phyloxml_validate_against_xsd,
+                                                            final boolean replace_underscores,
+                                                            final boolean internal_numbers_are_confidences,
+                                                            final TAXONOMY_EXTRACTION taxonomy_extraction,
+                                                            final boolean midpoint_reroot )
+            throws FileNotFoundException, IOException {
         final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
         final PhylogenyParser parser;
         boolean nhx_or_nexus = false;
@@ -679,7 +682,11 @@ public final class AptxUtil {
             }
         }
         AptxUtil.printAppletMessage( "Archaeopteryx", "parser is " + parser.getName() );
-        final Phylogeny[] phys = factory.create( url.openStream(), parser );
+        final URLConnection url_connection = url.openConnection();
+        url_connection.setDefaultUseCaches( false );
+        final InputStream i = url_connection.getInputStream();
+        final Phylogeny[] phys = factory.create( i, parser );
+        i.close();
         if ( phys != null ) {
             if ( nhx_or_nexus && internal_numbers_are_confidences ) {
                 for( final Phylogeny phy : phys ) {
@@ -978,4 +985,50 @@ public final class AptxUtil {
             return _suffix;
         }
     }
+
+    final public static Color calculateColorFromString( final String str, final boolean is_taxonomy ) {
+        final String my_str = str.toUpperCase();
+        char first = my_str.charAt( 0 );
+        char second = ' ';
+        char third = ' ';
+        if ( my_str.length() > 1 ) {
+            if ( is_taxonomy ) {
+                second = my_str.charAt( 1 );
+            }
+            else {
+                second = my_str.charAt( my_str.length() - 1 );
+            }
+            if ( is_taxonomy ) {
+                if ( my_str.length() > 2 ) {
+                    if ( my_str.indexOf( " " ) > 0 ) {
+                        third = my_str.charAt( my_str.indexOf( " " ) + 1 );
+                    }
+                    else {
+                        third = my_str.charAt( 2 );
+                    }
+                }
+            }
+            else if ( my_str.length() > 2 ) {
+                third = my_str.charAt( ( my_str.length() - 1 ) / 2 );
+            }
+        }
+        first = normalizeCharForRGB( first );
+        second = normalizeCharForRGB( second );
+        third = normalizeCharForRGB( third );
+        if ( ( first > 235 ) && ( second > 235 ) && ( third > 235 ) ) {
+            first = 0;
+        }
+        else if ( ( first < 60 ) && ( second < 60 ) && ( third < 60 ) ) {
+            second = 255;
+        }
+        return new Color( first, second, third );
+    }
+
+    final private static char normalizeCharForRGB( char c ) {
+        c -= 65;
+        c *= 10.2;
+        c = c > 255 ? 255 : c;
+        c = c < 0 ? 0 : c;
+        return c;
+    }
 }