X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Futil%2FForesterUtil.java;h=6c14975fcbb2c74839120dcc85c3898a35f0ee22;hb=0d0b9cde030d50b153eb6d1ff7ce13bc273edc17;hp=2374654d19297adb20161d476cc769c5c4dcb966;hpb=3929e5396afcdc3c79e7e4421c9fd444bb2e7a1b;p=jalview.git diff --git a/forester/java/src/org/forester/util/ForesterUtil.java b/forester/java/src/org/forester/util/ForesterUtil.java index 2374654..6c14975 100644 --- a/forester/java/src/org/forester/util/ForesterUtil.java +++ b/forester/java/src/org/forester/util/ForesterUtil.java @@ -99,7 +99,7 @@ public final class ForesterUtil { public final static String OS_VERSION = System.getProperty( "os.version" ); public static final String PDB = "http://www.pdb.org/pdb/explore/explore.do?pdbId="; public final static String UNIPROT_KB = "http://www.uniprot.org/uniprot/"; - public final static double ZERO_DIFF = 1.0E-9; + public final static double ZERO_DIFF = 1.0E-12; private static final Pattern PARANTHESESABLE_NH_CHARS_PATTERN = Pattern.compile( "[(),;\\s:\\[\\]]" ); static { final DecimalFormatSymbols dfs = new DecimalFormatSymbols(); @@ -407,7 +407,7 @@ public final class ForesterUtil { } public static String[][] file22dArray( final File file ) throws IOException { - final List list = new ArrayList(); + final List list = new ArrayList<>(); final BufferedReader in = new BufferedReader( new FileReader( file ) ); String str; while ( ( str = in.readLine() ) != null ) { @@ -445,7 +445,7 @@ public final class ForesterUtil { } final public static List file2list( final File file ) throws IOException { - final List list = new ArrayList(); + final List list = new ArrayList<>(); final BufferedReader in = new BufferedReader( new FileReader( file ) ); String str; while ( ( str = in.readLine() ) != null ) { @@ -461,7 +461,7 @@ public final class ForesterUtil { } final public static SortedSet file2set( final File file ) throws IOException { - final SortedSet set = new TreeSet(); + final SortedSet set = new TreeSet<>(); final BufferedReader in = new BufferedReader( new FileReader( file ) ); String str; while ( ( str = in.readLine() ) != null ) { @@ -542,15 +542,16 @@ public final class ForesterUtil { } final public static MolecularSequence.TYPE guessMolecularSequenceType( final String mol_seq ) { - if ( mol_seq.contains( "L" ) || mol_seq.contains( "I" ) || mol_seq.contains( "E" ) || mol_seq.contains( "H" ) - || mol_seq.contains( "D" ) || mol_seq.contains( "Q" ) ) { + final String s = mol_seq.toUpperCase(); + if ( s.contains( "L" ) || s.contains( "I" ) || s.contains( "E" ) || s.contains( "H" ) || s.contains( "D" ) + || s.contains( "Q" ) ) { return TYPE.AA; } else { - if ( mol_seq.contains( "T" ) ) { + if ( s.contains( "T" ) ) { return TYPE.DNA; } - else if ( mol_seq.contains( "U" ) ) { + else if ( s.contains( "U" ) ) { return TYPE.RNA; } } @@ -594,6 +595,13 @@ public final class ForesterUtil { return ( ( s == null ) || ( s.length() < 1 ) ); } + final public static boolean isEmptyTrimmed( final String s ) { + if ( s == null ) { + return true; + } + return ( ( s.trim().length() < 1 ) ); + } + /** * Returns true is Domain domain falls in an uninterrupted stretch of * covered positions. @@ -615,6 +623,10 @@ public final class ForesterUtil { return ( ( Math.abs( a - b ) ) < ZERO_DIFF ); } + final public static boolean isEqual( final double a, final double b, final double tolerance ) { + return ( ( Math.abs( a - b ) ) < tolerance ); + } + final public static boolean isEven( final int n ) { return ( n % 2 ) == 0; } @@ -712,6 +724,10 @@ public final class ForesterUtil { return null; } + final public static String isWritableFile( final String s ) { + return isWritableFile( new File( s ) ); + } + /** * Helper for method "stringToColor". *

@@ -728,7 +744,7 @@ public final class ForesterUtil { } final public static SortedMap listToSortedCountsMap( final List list ) { - final SortedMap map = new TreeMap(); + final SortedMap map = new TreeMap<>(); for( final Object key : list ) { if ( !map.containsKey( key ) ) { map.put( key, 1 ); @@ -1160,7 +1176,7 @@ public final class ForesterUtil { //urlc.setRequestProperty( "User-Agent", "" ); final BufferedReader in = new BufferedReader( new InputStreamReader( urlc.getInputStream() ) ); String line; - final List result = new ArrayList(); + final List result = new ArrayList<>(); while ( ( line = in.readLine() ) != null ) { result.add( line ); } @@ -1195,7 +1211,7 @@ public final class ForesterUtil { protein.getSpecies().getSpeciesId(), protein.getLength() ); final List sorted = SurfacingUtil.sortDomainsWithAscendingConfidenceValues( protein ); - final List covered_positions = new ArrayList(); + final List covered_positions = new ArrayList<>(); for( final Domain domain : sorted ) { if ( ( ( max_allowed_overlap < 0 ) || ( ForesterUtil.calculateOverlap( domain, covered_positions ) <= max_allowed_overlap ) ) @@ -1502,7 +1518,7 @@ public final class ForesterUtil { is.close(); } catch ( final Exception e ) { - // ignore + // ignore } return trees; } @@ -1534,7 +1550,7 @@ public final class ForesterUtil { File the_one = null; do { int matches = 0; - for( File file : files ) { + for( final File file : files ) { if ( file.getName().startsWith( my_prefix ) ) { matches++; if ( matches > 1 ) { @@ -1572,6 +1588,123 @@ public final class ForesterUtil { return the_one; } + public final static String greatestCommonPrefix( final String a, final String b ) { + final int min_length = Math.min( a.length(), b.length() ); + for( int i = 0; i < min_length; ++i ) { + if ( a.charAt( i ) != b.charAt( i ) ) { + return a.substring( 0, i ); + } + } + return a.substring( 0, min_length ); + } + + public final static boolean isContainsPrefix( final String word, final String prefix, final String separator ) { + if ( ForesterUtil.isEmpty( separator ) ) { + throw new IllegalArgumentException( "separator must not be null or empty" ); + } + final String[] word_ary = word.split( Pattern.quote( separator ) ); + final String[] prefix_ary = prefix.split( Pattern.quote( separator ) ); + if ( word_ary.length < prefix_ary.length ) { + return false; + } + final int prefix_ary_length = prefix_ary.length; + for( int i = 0; i < prefix_ary_length; ++i ) { + if ( !( word_ary[ i ].equals( prefix_ary[ i ] ) ) ) { + return false; + } + } + return true; + } + + public final static String greatestCommonPrefix( final String a, final String b, final String separator ) { + if ( ForesterUtil.isEmpty( separator ) ) { + throw new IllegalArgumentException( "separator must not be null or empty" ); + } + final String[] as = a.split( Pattern.quote( separator ) ); + final String[] bs = b.split( Pattern.quote( separator ) ); + final int min_length = Math.min( as.length, bs.length ); + for( int i = 0; i < min_length; ++i ) { + if ( !( as[ i ].equals( bs[ i ] ) ) ) { + final StringBuilder sb = new StringBuilder(); + boolean first = true; + for( int j = 0; j < i; ++j ) { + if ( first ) { + first = false; + } + else { + sb.append( separator ); + } + sb.append( as[ j ] ); + } + return sb.toString(); + } + } + final StringBuilder sb = new StringBuilder(); + boolean first = true; + for( int j = 0; j < min_length; ++j ) { + if ( first ) { + first = false; + } + else { + sb.append( separator ); + } + sb.append( as[ j ] ); + } + return sb.toString(); + } + + public final static String greatestCommonPrefix( final List strings ) { + if ( strings == null ) { + throw new IllegalArgumentException( "list of strings is null" ); + } + if ( strings.isEmpty() ) { + throw new IllegalArgumentException( "list of strings is empty" ); + } + String common = strings.get( 0 ); + for( int i = 1; i < strings.size(); ++i ) { + common = greatestCommonPrefix( common, strings.get( i ) ); + } + return common; + } + + public final static String greatestCommonPrefix( final List strings, final String separator ) { + if ( ForesterUtil.isEmpty( separator ) ) { + return greatestCommonPrefix( strings ); + } + if ( strings == null ) { + throw new IllegalArgumentException( "list of strings is null" ); + } + if ( strings.isEmpty() ) { + throw new IllegalArgumentException( "list of strings is empty" ); + } + String common = strings.get( 0 ); + for( int i = 1; i < strings.size(); ++i ) { + common = greatestCommonPrefix( common, strings.get( i ), separator ); + } + return common; + } + + public static List spliIntoPrefixes( final String prefix, final String separator ) { + final String[] a = prefix.split( Pattern.quote( separator ) ); + final List l = new ArrayList<>(); + for( int i = 0; i < a.length; ++i ) { + final StringBuilder sb = new StringBuilder(); + for( int j = 0; j <= i; ++j ) { + sb.append( a[ j ] ); + if ( j < i ) { + sb.append( separator ); + } + } + l.add( sb.toString() ); + } + return l; + } + + public static boolean isLooksLikeFasta( final File file ) throws IOException { + final String first_line = ForesterUtil.getFirstLine( file ).trim().toLowerCase(); + return ( ( !isEmptyTrimmed( first_line ) && first_line.trim().startsWith( ">" ) ) ); + } + private ForesterUtil() { } }