v40
[jalview.git] / forester / java / src / org / forester / util / ForesterUtil.java
index 8d36a6e..48d973b 100644 (file)
@@ -42,6 +42,8 @@ import java.io.Writer;
 import java.math.BigDecimal;
 import java.net.URL;
 import java.net.URLConnection;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
 import java.text.DateFormat;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
@@ -62,11 +64,14 @@ import java.util.TreeSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.forester.archaeopteryx.Constants;
+import org.forester.archaeopteryx.AptxConstants;
+import org.forester.io.parsers.PhylogenyParser;
+import org.forester.phylogeny.Phylogeny;
 import org.forester.phylogeny.PhylogenyNode;
 import org.forester.phylogeny.data.Distribution;
 import org.forester.phylogeny.data.Sequence;
 import org.forester.phylogeny.data.Taxonomy;
+import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory;
 import org.forester.protein.BasicProtein;
 import org.forester.protein.Domain;
 import org.forester.protein.Protein;
@@ -115,13 +120,13 @@ public final class ForesterUtil {
      * This calculates a color. If value is equal to min the returned color is
      * minColor, if value is equal to max the returned color is maxColor,
      * otherwise a color 'proportional' to value is returned.
-     * 
+     *
      * @param value
-     *            the value 
+     *            the value
      * @param min
-     *            the smallest value 
+     *            the smallest value
      * @param max
-     *            the largest value 
+     *            the largest value
      * @param minColor
      *            the color for min
      * @param maxColor
@@ -152,15 +157,15 @@ public final class ForesterUtil {
      * value is equal to mean the returned color is meanColor, otherwise a color
      * 'proportional' to value is returned -- either between min-mean or
      * mean-max
-     * 
+     *
      * @param value
      *            the value
      * @param min
      *            the smallest value
      * @param max
-     *            the largest value 
+     *            the largest value
      * @param mean
-     *            the mean/median value 
+     *            the mean/median value
      * @param minColor
      *            the color for min
      * @param maxColor
@@ -203,7 +208,7 @@ public final class ForesterUtil {
 
     /**
      * Helper method for calcColor methods.
-     * 
+     *
      * @param smallercolor_component_x
      *            color component the smaller color
      * @param largercolor_component_x
@@ -220,8 +225,8 @@ public final class ForesterUtil {
 
     /**
      * Helper method for calcColor methods.
-     * 
-     * 
+     *
+     *
      * @param value
      *            the value
      * @param larger
@@ -583,7 +588,7 @@ public final class ForesterUtil {
     /**
      * Returns true is Domain domain falls in an uninterrupted stretch of
      * covered positions.
-     * 
+     *
      * @param domain
      * @param covered_positions
      * @return
@@ -609,7 +614,7 @@ public final class ForesterUtil {
      * This determines whether String[] a and String[] b have at least one
      * String in common (intersect). Returns false if at least one String[] is
      * null or empty.
-     * 
+     *
      * @param a
      *            a String[] b a String[]
      * @return true if both a and b or not empty or null and contain at least
@@ -646,7 +651,7 @@ public final class ForesterUtil {
             return OS_NAME.toLowerCase().startsWith( "mac" );
         }
         catch ( final Exception e ) {
-            ForesterUtil.printWarningMessage( Constants.PRG_NAME, "minor error: " + e );
+            ForesterUtil.printWarningMessage( AptxConstants.PRG_NAME, "minor error: " + e );
             return false;
         }
     }
@@ -683,7 +688,7 @@ public final class ForesterUtil {
             return OS_NAME.toLowerCase().indexOf( "win" ) > -1;
         }
         catch ( final Exception e ) {
-            ForesterUtil.printWarningMessage( Constants.PRG_NAME, "minor error: " + e );
+            ForesterUtil.printWarningMessage( AptxConstants.PRG_NAME, "minor error: " + e );
             return false;
         }
     }
@@ -969,7 +974,7 @@ public final class ForesterUtil {
         }
         else {
             throw new IllegalArgumentException( "attempt to parse object of type [" + source.getClass()
-                    + "] (can only parse objects of type File, InputStream, String, or StringBuffer)" );
+                                                + "] (can only parse objects of type File, InputStream, String, or StringBuffer)" );
         }
         return reader;
     }
@@ -1113,16 +1118,16 @@ public final class ForesterUtil {
     }
 
     /**
-     * 
+     *
      * Example regarding engulfment: ------------0.1 ----------0.2 --0.3 =>
      * domain with 0.3 is ignored
-     * 
+     *
      * -----------0.1 ----------0.2 --0.3 => domain with 0.3 is ignored
-     * 
-     * 
+     *
+     *
      * ------------0.1 ----------0.3 --0.2 => domains with 0.3 and 0.2 are _not_
      * ignored
-     * 
+     *
      * @param max_allowed_overlap
      *            maximal allowed overlap (inclusive) to be still considered not
      *            overlapping (zero or negative value to allow any overlap)
@@ -1136,7 +1141,7 @@ public final class ForesterUtil {
                                                     final boolean remove_engulfed_domains,
                                                     final Protein protein ) {
         final Protein pruned_protein = new BasicProtein( protein.getProteinId().getId(), protein.getSpecies()
-                .getSpeciesId(), protein.getLength() );
+                                                         .getSpeciesId(), protein.getLength() );
         final List<Domain> sorted = SurfacingUtil.sortDomainsWithAscendingConfidenceValues( protein );
         final List<Boolean> covered_positions = new ArrayList<Boolean>();
         for( final Domain domain : sorted ) {
@@ -1171,7 +1176,7 @@ public final class ForesterUtil {
 
     /**
      * Removes all white space from String s.
-     * 
+     *
      * @return String s with white space removed
      */
     final public static String removeWhiteSpace( String s ) {
@@ -1342,7 +1347,7 @@ public final class ForesterUtil {
     final public static void unexpectedFatalError( final String prg_name, final Exception e ) {
         System.err.println();
         System.err.println( "[" + prg_name
-                + "] > unexpected error; should not have occured! Please contact program author(s)." );
+                            + "] > unexpected error; should not have occured! Please contact program author(s)." );
         e.printStackTrace( System.err );
         System.err.println();
         System.exit( -1 );
@@ -1351,7 +1356,7 @@ public final class ForesterUtil {
     final public static void unexpectedFatalError( final String prg_name, final String message ) {
         System.err.println();
         System.err.println( "[" + prg_name
-                + "] > unexpected error: should not have occured! Please contact program author(s)." );
+                            + "] > unexpected error: should not have occured! Please contact program author(s)." );
         System.err.println( message );
         System.err.println();
         System.exit( -1 );
@@ -1360,7 +1365,7 @@ public final class ForesterUtil {
     final public static void unexpectedFatalError( final String prg_name, final String message, final Exception e ) {
         System.err.println();
         System.err.println( "[" + prg_name
-                + "] > unexpected error: should not have occured! Please contact program author(s)." );
+                            + "] > unexpected error: should not have occured! Please contact program author(s)." );
         System.err.println( message );
         e.printStackTrace( System.err );
         System.err.println();
@@ -1413,6 +1418,44 @@ public final class ForesterUtil {
         return sb.toString();
     }
 
+
+    public final static Phylogeny[] readPhylogeniesFromUrl( final URL url,
+                                                            final PhylogenyParser parser )
+            throws NoSuchAlgorithmException, IOException, KeyManagementException {
+        if ( url == null ) {
+            throw new IllegalArgumentException( "URL to read from must not be null" );
+        }
+        else if ( parser == null ) {
+            throw new IllegalArgumentException( "parser to use to read from URL must not be null" );
+        }
+        final URLConnection con;
+        if ( url.toString().startsWith( "https:" ) ) {    
+             con = TrustManager.makeHttpsURLConnection( url );
+        }
+        else if ( url.toString().startsWith( "http:" ) ) {
+            con = url.openConnection();
+        }
+        else {
+            throw new IllegalArgumentException( "Cannot deal with URL: " + url );
+        }
+        if ( con == null ) {    
+            throw new IOException( "could not create connection from " + url );
+        }
+        con.setDefaultUseCaches( false );
+        final InputStream is = con.getInputStream();
+        if ( is == null ) {    
+            throw new IOException( "could not create input stream from " + url );
+        }
+        final Phylogeny[] trees = ParserBasedPhylogenyFactory.getInstance().create( is, parser );
+        try {
+            is.close();
+        }
+        catch ( final Exception e ) {
+            // ignore  
+        }
+        return trees;
+    }
+    
     private ForesterUtil() {
     }
 }