}
- /** */
+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.datamodel.AlignmentI#findIndex(jalview.datamodel.SequenceI)
+ */
public int findIndex(SequenceI s)
{
int i = 0;
}
return removed;
}
+
+ public void append(AlignmentI toappend)
+ {
+ // TODO test this method for a future 2.5 release
+ // currently tested for use in jalview.gui.SequenceFetcher
+ boolean samegap = toappend.getGapCharacter()==getGapCharacter();
+ char oldc = toappend.getGapCharacter();
+ boolean hashidden = toappend.getHiddenSequences()!=null && toappend.getHiddenSequences().hiddenSequences!=null;
+ // get all sequences including any hidden ones
+ Vector sqs = (hashidden) ? toappend.getHiddenSequences().getFullAlignment().getSequences() : toappend.getSequences();
+ if (sqs != null)
+ {
+ Enumeration sq = sqs.elements();
+ while (sq.hasMoreElements())
+ {
+ SequenceI addedsq=(SequenceI) sq.nextElement();
+ if (!samegap)
+ {
+ char[] oldseq = addedsq.getSequence();
+ for (int c=0;c<oldseq.length;c++)
+ {
+ if (oldseq[c]==oldc)
+ {
+ oldseq[c] = gapCharacter;
+ }
+ }
+ }
+ addSequence(addedsq);
+ }
+ }
+ AlignmentAnnotation[] alan = toappend.getAlignmentAnnotation();
+ for (int a = 0; alan != null && a < alan.length; a++)
+ {
+ addAnnotation(alan[a]);
+ }
+ AlignedCodonFrame[] acod = toappend.getCodonFrames();
+ for (int a = 0; acod != null && a < acod.length; a++)
+ {
+ this.addCodonFrame(acod[a]);
+ }
+ Vector sg = toappend.getGroups();
+ if (sg != null)
+ {
+ Enumeration el = sg.elements();
+ while (el.hasMoreElements())
+ {
+ addGroup((SequenceGroup) el.nextElement());
+ }
+ }
+ if (toappend.getHiddenSequences()!=null)
+ {
+ HiddenSequences hs = toappend.getHiddenSequences();
+ if (hiddenSequences==null)
+ {
+ hiddenSequences = new HiddenSequences(this);
+ }
+ if (hs.hiddenSequences!=null)
+ {
+ for (int s=0;s<hs.hiddenSequences.length; s++)
+ {
+ // hide the newly appended sequence in the alignment
+ if (hs.hiddenSequences[s]!=null)
+ {
+ hiddenSequences.hideSequence(hs.hiddenSequences[s]);
+ }
+ }
+ }
+ }
+ if (toappend.getProperties()!=null)
+ {
+ // we really can't do very much here - just try to concatenate strings where property collisions occur.
+ Enumeration key = toappend.getProperties().keys();
+ while (key.hasMoreElements())
+ {
+ Object k = key.nextElement();
+ Object ourval = this.getProperty(k);
+ Object toapprop = toappend.getProperty(k);
+ if (ourval!=null)
+ {
+ if (ourval.getClass().equals(toapprop.getClass()) && !ourval.equals(toapprop))
+ {
+ if (ourval instanceof String)
+ {
+ // append strings
+ this.setProperty(k, ((String) ourval)+"; "+((String) toapprop));
+ } else {
+ if (ourval instanceof Vector)
+ {
+ // append vectors
+ Enumeration theirv = ((Vector) toapprop).elements();
+ while (theirv.hasMoreElements())
+ {
+ ((Vector)ourval).addElement(theirv);
+ }
+ }
+ }
+ }
+ } else {
+ // just add new property directly
+ setProperty(k, toapprop);
+ }
+
+ }
+ }
+ }
+
}
*/
public SequenceI findName(SequenceI startAfter, String token, boolean b);
+ /**
+ * append sequences and annotation from another alignment object to this one.
+ * Note: this is a straight transfer of object references, and may result in
+ * toappend's dependent data being transformed to fit the alignment (changing gap characters, etc...).
+ * If you are uncertain, use the copy Alignment copy constructor to create a new version
+ * which can be appended without side effect.
+ * @param toappend - the alignment to be appended.
+ */
+ public void append(AlignmentI toappend);
+
}
return;
}
AlignmentI aresult = null;
+ Object source = database.getSelectedItem();
+ Enumeration en = new StringTokenizer(textArea.getText(), ";");
try
{
guiWindow.setProgressBar("Fetching Sequences from "
+ database.getSelectedItem(), Thread.currentThread()
.hashCode());
- aresult = sfetch.getSourceProxy(
- (String) sources.get(database.getSelectedItem()))
- .getSequenceRecords(textArea.getText());
+ DbSourceProxy proxy = sfetch.getSourceProxy(
+ (String) sources.get(source));
+ if (proxy.getAccessionSeparator()==null)
+ {
+ while (en.hasMoreElements())
+ {
+ String item = (String) en.nextElement();
+ try {
+ if (aresult!=null)
+ {
+ try {
+ // give the server a chance to breathe
+ Thread.sleep(5);
+ } catch (Exception e)
+ {
+ //
+ }
+
+ }
+ AlignmentI indres = proxy.getSequenceRecords(item);
+ if (indres!=null)
+ {
+ if (aresult == null)
+ {
+ aresult = indres;
+ } else {
+ aresult.append(indres);
+ }
+ }
+ } catch (Exception e)
+ {
+ jalview.bin.Cache.log.info("Error retrieving "+item+" from "+source,e);
+ }
+ }
+ } else {
+ StringBuffer multiacc = new StringBuffer();
+ while (en.hasMoreElements())
+ {
+ multiacc.append(en.nextElement());
+ if (en.hasMoreElements())
+ {
+ multiacc.append(proxy.getAccessionSeparator());
+ }
+ }
+ aresult = proxy
+ .getSequenceRecords(multiacc.toString());
+ }
} catch (Exception e)
{
{
title = "Retrieved from " + database.getSelectedItem();
}
+ SequenceFeature[] sfs=null;
+ for (Enumeration sq=al.getSequences().elements(); sq.hasMoreElements();)
+ {
+ if ((sfs=((SequenceI)sq.nextElement()).getDatasetSequence().getSequenceFeatures())!=null)
+ {
+ if (sfs.length>0)
+ {
+ af.setShowSeqFeatures(true);
+ break;
+ }
+ }
+ }
Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);