X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FAnnotationFile.java;h=eca27a727c3b625c333ee8a1f0deafcbd24b54b2;hb=refs%2Fheads%2Ffeatures%2FJAL-2040_JAL-2137_phyre2;hp=d8f9f150c488954336d10907bf52f66022e5d5b4;hpb=e84b575bede2d5a6dea85cb96000dc751d090016;p=jalview.git diff --git a/src/jalview/io/AnnotationFile.java b/src/jalview/io/AnnotationFile.java index d8f9f15..eca27a7 100755 --- a/src/jalview/io/AnnotationFile.java +++ b/src/jalview/io/AnnotationFile.java @@ -34,10 +34,11 @@ import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemeProperty; -import jalview.schemes.ResidueProperties; import jalview.schemes.UserColourScheme; +import jalview.structure.StructureSelectionManager; import java.io.BufferedReader; +import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; @@ -690,21 +691,41 @@ public class AnnotationFile public boolean readAnnotationFile(AlignmentI al, ColumnSelection colSel, String file, String protocol) { + baseUri = ""; BufferedReader in = null; try { if (protocol.equals(AppletFormatAdapter.FILE)) { in = new BufferedReader(new FileReader(file)); + baseUri = new File(file).getParent(); + if (baseUri == null) + { + baseUri = ""; + } + else + { + baseUri += "/"; + } } else if (protocol.equals(AppletFormatAdapter.URL)) { URL url = new URL(file); in = new BufferedReader(new InputStreamReader(url.openStream())); + String bs = url.toExternalForm(); + baseUri = bs.substring(0, bs.indexOf(url.getHost()) + + url.getHost().length()); + baseUri += url.toURI().getPath(); + if (baseUri.lastIndexOf("/") > -1) + { + baseUri = baseUri.substring(0, baseUri.lastIndexOf("/")) + "/"; + } } else if (protocol.equals(AppletFormatAdapter.PASTE)) { in = new BufferedReader(new StringReader(file)); + // TODO - support mimencoded PDBs for a paste.. ? + baseUri = ""; } else if (protocol.equals(AppletFormatAdapter.CLASSLOADER)) { @@ -712,6 +733,8 @@ public class AnnotationFile if (is != null) { in = new BufferedReader(new java.io.InputStreamReader(is)); + // TODO: this probably doesn't work for classloader - needs a test + baseUri = new File("/" + file).getParent() + "/"; } } if (in != null) @@ -737,6 +760,12 @@ public class AnnotationFile String lastread = ""; + /** + * used for resolving absolute references to resources relative to + * annotationFile location + */ + String baseUri = ""; + private static String GRAPHLINE = "GRAPHLINE", COMBINE = "COMBINE", STRUCTMODEL = "STRUCTMODEL"; @@ -1233,21 +1262,23 @@ public class AnnotationFile private boolean add_structmodel(AlignmentI al, SequenceI refSeq2, String tempId, String urlToModel, String urlToPairwise) { - String warningMessage=null; + String warningMessage = null, modelPath = null, modelProt = null, aliPath = null, aliProt = null; boolean added = false; try { // locate tempId. if it exists, will need to merge, otherwise: SequenceI templateSeq = al.findName(tempId); // 1. load urlToModel - // TODO: get base for current import operation and resolve against it - // transfer to local temp file ? - PDBEntry modelpe = new PDBEntry(tempId,null,Type.FILE,urlToModel); - PDBEntry templpe = new PDBEntry(tempId, null, Type.FILE, urlToModel); + modelPath = resolveAbsolute(urlToModel); + modelProt = AppletFormatAdapter.checkProtocol(modelPath); + // need to transfer to local temp file ? + PDBEntry modelpe = new PDBEntry(tempId, null, Type.FILE, modelPath); + PDBEntry templpe = new PDBEntry(tempId, null, Type.FILE, modelPath); refSeq2.addPDBId(modelpe); - + aliPath = resolveAbsolute(urlToPairwise); + aliProt = AppletFormatAdapter.checkProtocol(aliPath); // 2. load urlToPairwise - AlignmentI pwa = new AppletFormatAdapter().readFile(urlToPairwise, - AppletFormatAdapter.checkProtocol(urlToPairwise), "FASTA"); + AlignmentI pwa = new AppletFormatAdapter().readFile(aliPath, aliProt, + "FASTA"); SequenceI qPw = null, tPw = null; if (pwa != null) { @@ -1275,7 +1306,11 @@ public class AnnotationFile } else { - // assume 1:1 - so synthesise sequences to use to construct mapping ? + // assume 1:1 - so synthesise sequences to use to construct mapping + StructureFile pdbf = StructureSelectionManager + .getStructureSelectionManager().setMapping(false, + new SequenceI[] { refSeq2.getDatasetSequence() }, + null, modelPath, modelProt); refSeq2.getDatasetSequence().addPDBId(modelpe); if (templateSeq == null && tPw != null) { @@ -1305,6 +1340,16 @@ public class AnnotationFile } } + private String resolveAbsolute(String relURI) + { + if (relURI.indexOf(":/") > -1 || relURI.startsWith("/") + || "".equals(baseUri) || relURI.startsWith(baseUri)) + { + return relURI; + } + return baseUri + relURI; + } + private void parseHideCols(ColumnSelection colSel, String nextToken) { StringTokenizer inval = new StringTokenizer(nextToken, ","); @@ -1763,9 +1808,9 @@ public class AnnotationFile else if (key.equalsIgnoreCase("consThreshold")) { sg.cs.setConservationInc(Integer.parseInt(value)); - Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, sg.getSequences(null), - sg.getStartRes(), sg.getEndRes() + 1); + Conservation c = new Conservation("Group", 3, + sg.getSequences(null), sg.getStartRes(), + sg.getEndRes() + 1); c.calculate(); c.verdict(false, 25); // TODO: refer to conservation percent threshold