X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FAppletFormatAdapter.java;h=f391a5414e8d643e43a1b0af33f514bfaf54791a;hb=11fa2109fa963fbd910cb127f9161132ec97b9bf;hp=b1952a9fc66e060730fa6a936a09f5db844b1c62;hpb=8a6fa9ea9900d0f106529c3f6283e7f9d76dd2cb;p=jalview.git diff --git a/src/jalview/io/AppletFormatAdapter.java b/src/jalview/io/AppletFormatAdapter.java index b1952a9..f391a54 100755 --- a/src/jalview/io/AppletFormatAdapter.java +++ b/src/jalview/io/AppletFormatAdapter.java @@ -1,13 +1,13 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) + * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * + * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR @@ -45,21 +45,24 @@ public class AppletFormatAdapter * method */ public static final String[] WRITEABLE_FORMATS = new String[] - { "BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "AMSA" }; + { "BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "STH", + "AMSA" }; /** * List of extensions corresponding to file format types in WRITABLE_FNAMES * that are writable by the application. */ public static final String[] WRITABLE_EXTENSIONS = new String[] - { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "jar" }; + { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "jar", + "sto,stk" }; /** * List of writable formats by the application. Order must correspond with the * WRITABLE_EXTENSIONS list of formats. */ public static final String[] WRITABLE_FNAMES = new String[] - { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Jalview" }; + { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Jalview", + "STH" }; /** * List of readable format file extensions by application in order @@ -67,7 +70,7 @@ public class AppletFormatAdapter */ public static final String[] READABLE_EXTENSIONS = new String[] { "fa, fasta, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "jar", - "sto" }; // , + "sto,stk" }; // , // ".blast" // }; @@ -119,6 +122,21 @@ public class AppletFormatAdapter String inFile; /** + * character used to write newlines + */ + protected String newline = System.getProperty("line.separator"); + + public void setNewlineString(String nl) + { + newline = nl; + } + + public String getNewlineString() + { + return newline; + } + + /** * check that this format is valid for reading * * @param format @@ -430,7 +448,7 @@ public class AppletFormatAdapter } else if (format.equalsIgnoreCase("STH")) { - afile = new StockholmFile(); + afile = new StockholmFile(alignment); } else if (format.equalsIgnoreCase("AMSA")) { @@ -441,7 +459,7 @@ public class AppletFormatAdapter throw new Exception( "Implementation error: Unknown file format string"); } - + afile.setNewlineString(newline); afile.addJVSuffix(jvsuffix); afile.setSeqs(alignment.getSequencesArray()); @@ -463,6 +481,18 @@ public class AppletFormatAdapter return null; } + public static String checkProtocol(String file) + { + String protocol = FILE; + String ft = file.toLowerCase().trim(); + if (ft.indexOf("http:") == 0 || ft.indexOf("https:") == 0 + || ft.indexOf("file:") == 0) + { + protocol = URL; + } + return protocol; + } + public static void main(String[] args) { int i = 0; @@ -475,44 +505,54 @@ public class AppletFormatAdapter { System.out.println("Reading file: " + f); AppletFormatAdapter afa = new AppletFormatAdapter(); - Runtime r = Runtime.getRuntime(); - System.gc(); - long memf = -r.totalMemory() + r.freeMemory(); - long t1 = -System.currentTimeMillis(); - Alignment al = afa.readFile(args[i], FILE, - new IdentifyFile().Identify(args[i], FILE)); - t1 += System.currentTimeMillis(); - System.gc(); - memf += r.totalMemory() - r.freeMemory(); - if (al != null) + String fName = f.getName(); + String extension = fName.substring(fName.lastIndexOf(".") + 1, + fName.length()); + if (extension.equals("stk") || extension.equals("sto")) { - System.out.println("Alignment contains " + al.getHeight() - + " sequences and " + al.getWidth() + " columns."); - try - { - System.out.println(new AppletFormatAdapter().formatSequences( - "FASTA", al, true)); - } catch (Exception e) - { - System.err - .println("Couln't format the alignment for output as a FASTA file."); - e.printStackTrace(System.err); - } + afa.test(f); } else { - System.out.println("Couldn't read alignment"); + Runtime r = Runtime.getRuntime(); + System.gc(); + long memf = -r.totalMemory() + r.freeMemory(); + long t1 = -System.currentTimeMillis(); + Alignment al = afa.readFile(args[i], FILE, + new IdentifyFile().Identify(args[i], FILE)); + t1 += System.currentTimeMillis(); + System.gc(); + memf += r.totalMemory() - r.freeMemory(); + if (al != null) + { + System.out.println("Alignment contains " + al.getHeight() + + " sequences and " + al.getWidth() + " columns."); + try + { + System.out.println(new AppletFormatAdapter() + .formatSequences("FASTA", al, true)); + } catch (Exception e) + { + System.err + .println("Couln't format the alignment for output as a FASTA file."); + e.printStackTrace(System.err); + } + } + else + { + System.out.println("Couldn't read alignment"); + } + System.out.println("Read took " + (t1 / 1000.0) + " seconds."); + System.out + .println("Difference between free memory now and before is " + + (memf / (1024.0 * 1024.0) * 1.0) + " MB"); } - System.out.println("Read took " + (t1 / 1000.0) + " seconds."); - System.out - .println("Difference between free memory now and before is " - + (memf / (1024.0 * 1024.0) * 1.0) + " MB"); - } catch (Exception e) { System.err.println("Exception when dealing with " + i + "'th argument: " + args[i] + "\n" + e); } + } else { @@ -523,6 +563,199 @@ public class AppletFormatAdapter } } + private void test(File f) + { + System.out.println("Reading file: " + f); + String ff = f.getPath(); + try + { + Alignment al = readFile(ff, FILE, + new IdentifyFile().Identify(ff, FILE)); + for (int i = 0; i < al.getSequencesArray().length; ++i) + { + al.getSequenceAt(i).setDatasetSequence(al.getSequenceAt(i)); + } + AlignFile stFile = new StockholmFile(al); + stFile.setSeqs(al.getSequencesArray()); + + String stockholmoutput = stFile.print(); + Alignment al_input = readFile(stockholmoutput, + AppletFormatAdapter.PASTE, "STH"); + if (al != null && al_input != null) + { + System.out.println("Alignment contains: " + al.getHeight() + + " and " + al_input.getHeight() + " sequences; " + + al.getWidth() + " and " + al_input.getWidth() + + " columns."); + AlignmentAnnotation[] aa_new = al_input.getAlignmentAnnotation(); + AlignmentAnnotation[] aa_original = al.getAlignmentAnnotation(); + + // check Alignment annotation + if (aa_new != null && aa_original != null) + { + System.out.println("Alignment contains: " + aa_new.length + + " and " + aa_original.length + + " alignment annotation(s)"); + for (int i = 0; i < aa_original.length; i++) + { + if (!equalss(aa_original[i], aa_new[i])) + System.out.println("Different alignment annotation"); + } + } + + // check sequences, annotation and features + SequenceI[] seq_original = new SequenceI[al.getSequencesArray().length]; + seq_original = al.getSequencesArray(); + SequenceI[] seq_new = new SequenceI[al_input.getSequencesArray().length]; + seq_new = al_input.getSequencesArray(); + SequenceFeature[] sequenceFeatures_original, sequenceFeatures_new; + AlignmentAnnotation annot_original, annot_new; + // + for (int i = 0; i < al.getSequencesArray().length; i++) + { + String name = seq_original[i].getName(); + int start = seq_original[i].getStart(); + int end = seq_original[i].getEnd(); + System.out.println("Check sequence: " + name + "/" + start + "-" + + end); + + // search equal sequence + for (int in = 0; in < al_input.getSequencesArray().length; in++) + { + if (name.equals(seq_new[in].getName()) + && start == seq_new[in].getStart() + && end == seq_new[in].getEnd()) + { + String ss_original = seq_original[i].getSequenceAsString(); + String ss_new = seq_new[in].getSequenceAsString(); + if (!ss_original.equals(ss_new)) + { + System.out.println("The sequences " + name + "/" + start + + "-" + end + " are not equal"); + } + + // compare sequence features + if (seq_original[i].getSequenceFeatures() != null + && seq_new[in].getSequenceFeatures() != null) + { + System.out.println("There are feature!!!"); + sequenceFeatures_original = new SequenceFeature[seq_original[i] + .getSequenceFeatures().length]; + sequenceFeatures_original = seq_original[i] + .getSequenceFeatures(); + sequenceFeatures_new = new SequenceFeature[seq_new[in] + .getSequenceFeatures().length]; + sequenceFeatures_new = seq_new[in].getSequenceFeatures(); + + if (seq_original[i].getSequenceFeatures().length == seq_new[in] + .getSequenceFeatures().length) + { + for (int feat = 0; feat < seq_original[i] + .getSequenceFeatures().length; feat++) + { + if (!sequenceFeatures_original[feat] + .equals(sequenceFeatures_new[feat])) + { + System.out.println("Different features"); + break; + } + } + } + else + { + System.out.println("different number of features"); + } + } + else if (seq_original[i].getSequenceFeatures() == null + && seq_new[in].getSequenceFeatures() == null) + { + System.out.println("No sequence features"); + } + else if (seq_original[i].getSequenceFeatures() != null + && seq_new[in].getSequenceFeatures() == null) + { + System.out + .println("Coudn't compare sequence features new one"); + } + // compare alignment annotation + if (al.getSequenceAt(i).getAnnotation() != null + && al_input.getSequenceAt(in).getAnnotation() != null) + { + for (int j = 0; j < al.getSequenceAt(i).getAnnotation().length; j++) + { + if (al.getSequenceAt(i).getAnnotation()[j] != null + && al_input.getSequenceAt(in).getAnnotation()[j] != null) + { + annot_original = al.getSequenceAt(i).getAnnotation()[j]; + annot_new = al_input.getSequenceAt(in).getAnnotation()[j]; + if (!equalss(annot_original, annot_new)) + System.out.println("Different annotation"); + } + } + } + else if (al.getSequenceAt(i).getAnnotation() == null + && al_input.getSequenceAt(in).getAnnotation() == null) + { + System.out.println("No annotations"); + } + else if (al.getSequenceAt(i).getAnnotation() != null + && al_input.getSequenceAt(in).getAnnotation() == null) + { + System.out.println("Coudn't compare annotations new one"); + } + break; + } + } + } + } + else + { + System.out.println("Couldn't read alignment"); + } + } catch (Exception e) + { + System.err.println("Couln't format the alignment for output file."); + e.printStackTrace(System.err); + } + } + + /* + * compare annotations + */ + private boolean equalss(AlignmentAnnotation annot_or, + AlignmentAnnotation annot_new) + { + if (annot_or.annotations.length != annot_new.annotations.length) + { + return false; + } + for (int i = 0; i < annot_or.annotations.length; i++) + { + if (annot_or.annotations[i] != null + && annot_new.annotations[i] != null) + { + if (!annot_or.annotations[i].displayCharacter + .equals(annot_new.annotations[i].displayCharacter) + && annot_or.annotations[i].secondaryStructure != annot_new.annotations[i].secondaryStructure + && !annot_or.annotations[i].description + .equals(annot_new.annotations[i].description)) + { + return false; + } + } + else if (annot_or.annotations[i] == null + && annot_new.annotations[i] == null) + { + continue; + } + else + { + return false; + } + } + return true; + } + /** * try to discover how to access the given file as a valid datasource that * will be identified as the given type.