X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FRnamlFile.java;h=2948c92b5234f930d133cd5a844e7ddc047a94b5;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=bc6b3855c6b706730a887650c62a21c15da678f9;hpb=4e5806da22df848f52f8a4d9b72d7945cac1fbce;p=jalview.git diff --git a/src/jalview/io/RnamlFile.java b/src/jalview/io/RnamlFile.java index bc6b385..2948c92 100644 --- a/src/jalview/io/RnamlFile.java +++ b/src/jalview/io/RnamlFile.java @@ -1,372 +1,242 @@ /* - * 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 + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 The Jalview Authors * * 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. + * 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 * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.io; +import jalview.analysis.SecStrConsensus.SimpleBP; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; -import jalview.datamodel.SecondaryStructureAnnotation; import jalview.datamodel.Sequence; -import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; -import jalview.ws.jws1.Annotate3D; +import jalview.util.MessageManager; import java.io.BufferedReader; import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.Reader; import java.io.FileReader; -import java.lang.reflect.Array; +import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; -import java.util.Hashtable; -import java.util.List; -import java.util.Vector; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; import com.stevesoft.pat.Regex; import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax; import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed; import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied; -import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses; import fr.orsay.lri.varna.factories.RNAFactory; -import fr.orsay.lri.varna.factories.RNAFactory.RNAFileType; import fr.orsay.lri.varna.models.rna.RNA; -import fr.orsay.lri.varna.utils.RNAMLParser; - - - public class RnamlFile extends AlignFile { - public String id; - protected ArrayList result; - - public RnamlFile() - { - super(); - - } - - public RnamlFile(String inFile, String type) throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses - { - super(inFile, type); - - } - - public RnamlFile(FileParse source) throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses - { - super(source); - - } - -// public RnamlFile(BufferedReader r) throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed -// { -// super(); -// parse(r); -// // sets the index of each sequence in the alignment -// for( int i=0,c=seqs.size(); i seq =new ArrayList(); - //System.out.println(r); - - result = RNAFactory.loadSecStr(r,RNAFileType.FILE_TYPE_RNAML); - - System.out.println("this is the secondary scructure:" +result.toArray()); - System.out.println("this is the secondary scructure:" +result.toString()); - System.out.println("this is the secondary scructure:" +result.size()); - for(int i=0;i allbpsTmp = rnaTmp.getStructure(); -// String[] annot = new String[10000]; -// -// //Annotation[] ann = new Annotation[allbpsTmp.size()]; -// for (int i = 0; i < allbpsTmp.size(); i++) { -// RNAMLParser.BPTemp bp = allbpsTmp.get(i); -// //System.err.println("toto ="+bp); -// int bp5 = bp.pos5; -// annot[bp5]= "("; -// //annot[bp5]= '('; -// System.out.println(annot[bp5]); -// //System.out.println("bp5 ="+bp5); -// int bp3 = bp.pos3; -// -// annot[bp3]= ")"; -// System.out.println(annot[bp3]); -// //System.out.println(annot.get(bp3)); -// -// //String pos1 = annot.substring(bp5, bp5+1); -// //String pos2 = annot.substring(bp3, bp3+1); -// //ann[i] = new Annotation(pos1, "", ' ', 0f); -// //ann[i+1] = new Annotation(pos2, "", ' ', 0f); -// //System.out.println(pos1); -// -// //System.out.println("bp3 ="+bp3); -// //ModeleBP newStyle = bp.createBPStyle(mb, part); -// } -// Annotation[] ann = new Annotation[annot.length+1]; -// for(int i=0;i allbpsTmp = rnaTmp.getStructure(); -// for (int i = 0; i < allbpsTmp.size(); i++) { -// RNAMLParser.BPTemp bp = allbpsTmp.get(i); -// //System.err.println("toto ="+bp); -// int bp5 = bp.pos5; -// //System.out.println("bp5 ="+bp5); -// int bp3 = bp.pos3; - //System.out.println("bp3 ="+bp3); - //ModeleBP newStyle = bp.createBPStyle(mb, part); -// } - //Annotation ann; - //ann = new Annotation(bp5, "", ' ', 0f); - - //} - - - -// return result; - -} - - - public static String print(SequenceI[] s) - { - return "not yet implemented"; - } - - public String print() - { - System.out.print("affiche :"); - return print(getSeqsAsArray()); - } - - /** - * make a friendly ID string. - * - * @param dataName - * @return truncated dataName to after last '/' - */ - private String safeName(String dataName) - { - int b = 0; - while ((b = dataName.indexOf("/")) > -1 && b < dataName.length() ) - { - dataName = dataName.substring(b + 1).trim(); - - } - int e = (dataName.length() - dataName.indexOf("."))+1; - dataName = dataName.substring(1,e).trim(); - return dataName; - } - - public ArrayList getRNA() - { - return result; - } - - public Vector getAnnot() - { - return annotations; - } + public String id; + + protected ArrayList result; + + public RnamlFile() + { + super(); + + } + + public RnamlFile(String inFile, String type) throws IOException + { + super(inFile, type); + + } + + public RnamlFile(FileParse source) throws IOException + { + super(source); + + } + + public BufferedReader CreateReader() throws FileNotFoundException + { + FileReader fr = null; + fr = new FileReader(inFile); + + BufferedReader r = new BufferedReader(fr); + return r; + } + + /* + * (non-Javadoc) + * + * @see jalview.io.AlignFile#parse() + */ + public void parse() throws IOException + { + if (System.getProperty("java.version").indexOf("1.6") > -1 + || System.getProperty("java.version").indexOf("1.5") > -1) + { + // patch for 'This parser does not support specification "null" version + // "null"' error + // this hack ensures we get a properly updated SAXParserFactory on older + // JVMs + // thanks to Stefan Birkner over at https://coderwall.com/p/kqsrrw + System.setProperty("javax.xml.parsers.SAXParserFactory", + "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"); + } + // rather than lose exception semantics whilst parsing RNAML with VARNA we + // wrap the routine and catch all exceptions before passing them up the + // chain as an IOException + try + { + _parse(); + } catch (ExceptionPermissionDenied pdx) + { + errormessage = MessageManager.formatMessage( + "exception.rnaml_couldnt_access_datasource", + new String[] { pdx.getMessage() }); + throw new IOException(pdx); + } catch (ExceptionLoadingFailed lf) + { + errormessage = MessageManager.formatMessage( + "exception.ranml_couldnt_process_data", + new String[] { lf.getMessage() }); + throw new IOException(lf); + } catch (ExceptionFileFormatOrSyntax iff) + { + errormessage = MessageManager.formatMessage( + "exception.ranml_invalid_file", + new String[] { iff.getMessage() }); + throw new IOException(iff); + } catch (Exception x) + { + error = true; + errormessage = MessageManager.formatMessage( + "exception.ranml_problem_parsing_data", + new String[] { x.getMessage() }); + throw new IOException(errormessage, x); + } + } + + @SuppressWarnings("unchecked") + public void _parse() throws FileNotFoundException, + ExceptionPermissionDenied, ExceptionLoadingFailed, + ExceptionFileFormatOrSyntax + { + + result = RNAFactory.loadSecStrRNAML(getReader()); + + ArrayList allarray = new ArrayList(); + ArrayList> BP = new ArrayList(); + ArrayList strucinarray = new ArrayList(); + SequenceI[] seqs = new SequenceI[result.size()]; + + for (int i = 0; i < result.size(); i++) + { + + RNA current = result.get(i); + String rna = current.getStructDBN(true); + String seq = current.getSeq(); + int begin = 1; + int end = seq.length(); + + id = current.getName(); + if (id == null || id.trim().length() == 0) + { + id = safeName(getDataName()); + if (result.size() > 1) + { + id += "." + i; + } + } + seqs[i] = new Sequence(id, seq, begin, end); + + seqs[i].setEnd(seqs[i].findPosition(seqs[i].getLength())); + String[] annot = new String[rna.length()]; + Annotation[] ann = new Annotation[rna.length()]; + + for (int j = 0; j < rna.length(); j++) + { + annot[j] = "" + rna.charAt(j); + + } + for (int k = 0; k < rna.length(); k++) + { + ann[k] = new Annotation(annot[k], "", + jalview.schemes.ResidueProperties.getRNASecStrucState( + annot[k]).charAt(0), 0f); + } + + AlignmentAnnotation align = new AlignmentAnnotation( + "Secondary Structure", + current.getID().trim().length() > 0 ? "Secondary Structure for " + + current.getID() + : "", ann); + + seqs[i].addAlignmentAnnotation(align); + seqs[i].setRNA(result.get(i)); + + allarray.add(strucinarray); + + annotations.addElement(align); + BP.add(align.bps); + + } + + setSeqs(seqs); + } + + public static String print(SequenceI[] s) + { + return "not yet implemented"; + } + + public String print() + { + System.out.print("print :"); + return print(getSeqsAsArray()); + } + + public ArrayList getRNA() + { + return result; + } + + // public static void main(String[] args) { + // Pattern p= Pattern.compile("(.+)[.][^.]+"); + // Matcher m = p.matcher("toto.xml.zip"); + // System.out.println(m.matches()); + // System.out.println(m.group(1)); + // } + /** + * make a friendly ID string. + * + * @param dataName + * @return truncated dataName to after last '/' + */ + private String safeName(String dataName) + { + int b = 0; + if ((b = dataName.lastIndexOf(".")) > 0) + { + dataName = dataName.substring(0, b - 1); + } + b = 0; + Regex m = new Regex("[\\/]?([-A-Za-z0-9]+)\\.?"); + String mm = dataName; + while (m.searchFrom(dataName, b)) + { + mm = m.stringMatched(); + b = m.matchedTo(); + } + return mm; + } }