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;
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))
{
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)
String lastread = "";
+ /**
+ * used for resolving absolute references to resources relative to
+ * annotationFile location
+ */
+ String baseUri = "";
+
private static String GRAPHLINE = "GRAPHLINE", COMBINE = "COMBINE",
STRUCTMODEL = "STRUCTMODEL";
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)
{
}
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)
{
}
}
+ 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, ",");
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