From 7f25dfba2ce236e43729c1835b73c00f688c4618 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Mon, 4 Jul 2016 12:53:05 +0100 Subject: [PATCH] JAL-2137 resolve safely for URI and local paths --- src/jalview/io/AnnotationFile.java | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/jalview/io/AnnotationFile.java b/src/jalview/io/AnnotationFile.java index 35651bb..c104fb2 100755 --- a/src/jalview/io/AnnotationFile.java +++ b/src/jalview/io/AnnotationFile.java @@ -712,7 +712,10 @@ public class AnnotationFile { URL url = new URL(file); in = new BufferedReader(new InputStreamReader(url.openStream())); - baseUri = url.toURI().getPath(); + 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("/")) + "/"; @@ -1259,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) { @@ -1331,6 +1336,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, ","); -- 1.7.10.2