import jalview.datamodel.ColumnSelection;
import jalview.datamodel.GraphLine;
import jalview.datamodel.HiddenSequences;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.PDBEntry.Type;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
import jalview.schemes.ColourSchemeI;
import java.io.BufferedReader;
import java.io.FileReader;
+import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;
String urlToModel = st.nextToken();
String urlToPairwise = st.hasMoreTokens() ? st.nextToken()
: "";
- if (add_structmodel(refSeq, tempId, urlToModel, urlToPairwise))
+ if (add_structmodel(al, refSeq, tempId, urlToModel,
+ urlToPairwise))
{
failedtoadd = false;
}
* @param urlToPairwise
* @return true if model and sequence was added
*/
- private boolean add_structmodel(SequenceI refSeq2, String tempId,
+ private boolean add_structmodel(AlignmentI al, SequenceI refSeq2, String tempId,
String urlToModel, String urlToPairwise)
{
-
- return false;
- }
-
- private void add_structmodel(StringTokenizer st)
- {
-
- // TODO Auto-generated method stub
-
+ String warningMessage=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);
+ refSeq2.addPDBId(modelpe);
+
+ // 2. load urlToPairwise
+ AlignmentI pwa = new AppletFormatAdapter().readFile(urlToPairwise,
+ AppletFormatAdapter.checkProtocol(urlToPairwise), "FASTA");
+ SequenceI qPw = null, tPw = null;
+ if (pwa != null)
+ {
+ // resolve query/template sequences in provided alignment
+ qPw = pwa.findName(refSeqId);
+ tPw = pwa.findName(tempId);
+ }
+ if (false)
+ // (qPw != null && tPw != null)
+ {
+ // not yet complete
+ // refalQ vvva--addrvvvtttddd
+ // refalT ---aaaa---sss---ddd
+ // profalQ ---v-v-v-a.-.-a---dd--r--vvvtt--td--dd
+ // profalT ---.-.-.-aa-a-a---..--.--sss..--.d--dd
+ // Pragmatic solution here:
+ // Map templpe onto refalT only where refalT and refalQ are both
+ // non-gaps
+
+ // columns for start..end in refSeq2
+ int[] gapMap = refSeq2.gapMap();
+ // insert gaps in tPw
+ int curi = 0, width = refSeq2.getLength();
+ // TBC
+ }
+ else
+ {
+ // assume 1:1 - so synthesise sequences to use to construct mapping ?
+ refSeq2.getDatasetSequence().addPDBId(modelpe);
+ if (templateSeq == null && tPw != null)
+ {
+ tPw.createDatasetSequence();
+ tPw.getDatasetSequence().addPDBId(templpe); // needs to set mapping based on model yet...
+ al.addSequence(tPw);
+ added = true;
+ }
+ }
+ // 3. pad/insert gaps in urlToPairwise according to gaps already present in
+ // refSeq2
+ // 4. add padded tempId sequence to alignment
+ // 4. associate urlToModel with refSeq2 based on position map provided by
+ // urlToPairwise
+ // 5. associate urlToModel with tempId based on position map provided by
+ // urlToPairwise
+ // start a thread to load urlToModel and process/annotate sequences.
+ } catch (IOException x)
+ {
+ warningMessage = x.toString();
+ } finally {
+ if (warningMessage !=null)
+ {
+ System.err.println("Warnings whilst processing STRUCTMODEL: "+warningMessage);
+ }
+ return added;
+ }
}
private void parseHideCols(ColumnSelection colSel, String nextToken)