X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FJalview2XML.java;h=ce421742f1be8c9910fd1a08bdfd4462fc3a808a;hb=dfa04e77181fccfa6229ffef1591fc9c622d9b39;hp=4c042b3a379ebedc76e986834a66b1079474d8c8;hpb=9b57bab507b537d42d62e9a4c5f387d75d31cd8a;p=jalview.git
diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java
index 4c042b3..ce42174 100644
--- a/src/jalview/gui/Jalview2XML.java
+++ b/src/jalview/gui/Jalview2XML.java
@@ -1,19 +1,20 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * Copyright (C) 2014 The Jalview Authors
+ *
* This file is part of Jalview.
- *
+ *
* Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
+ * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.gui;
@@ -38,9 +39,8 @@ import jalview.schemabinding.version2.*;
import jalview.schemes.*;
import jalview.util.Platform;
import jalview.util.jarInputStreamProvider;
-import jalview.ws.jws2.AAConsClient;
import jalview.ws.jws2.Jws2Discoverer;
-import jalview.ws.jws2.dm.AAConsSettings;
+import jalview.ws.jws2.dm.AAConSettings;
import jalview.ws.jws2.jabaws2.Jws2Instance;
import jalview.ws.params.ArgumentI;
import jalview.ws.params.AutoCalcSetting;
@@ -48,11 +48,11 @@ import jalview.ws.params.WsParamSetI;
/**
* Write out the current jalview desktop state as a Jalview XML stream.
- *
+ *
* Note: the vamsas objects referred to here are primitive versions of the
* VAMSAS project schema elements - they are not the same and most likely never
* will be :)
- *
+ *
* @author $author$
* @version $Revision: 1.134 $
*/
@@ -60,7 +60,7 @@ public class Jalview2XML
{
/**
* create/return unique hash string for sq
- *
+ *
* @param sq
* @return new or existing unique string for sq
*/
@@ -266,7 +266,7 @@ public class Jalview2XML
/**
* Writes a jalview project archive to the given Jar output stream.
- *
+ *
* @param jout
*/
public void SaveState(JarOutputStream jout)
@@ -407,7 +407,7 @@ public class Jalview2XML
/**
* create a JalviewModel from an algnment view and marshall it to a
* JarOutputStream
- *
+ *
* @param ap
* panel to create jalview model for
* @param fileName
@@ -430,7 +430,7 @@ public class Jalview2XML
object.setVamsasModel(new jalview.schemabinding.version2.VamsasModel());
object.setCreationDate(new java.util.Date(System.currentTimeMillis()));
- object.setVersion(jalview.bin.Cache.getProperty("VERSION"));
+ object.setVersion(jalview.bin.Cache.getDefault("VERSION","Development Build"));
jalview.datamodel.AlignmentI jal = av.getAlignment();
@@ -464,7 +464,7 @@ public class Jalview2XML
}
JSeq jseq;
- Set calcIdSet=new HashSet();
+ Set calcIdSet = new HashSet();
// SAVE SEQUENCES
String id = "";
@@ -510,7 +510,8 @@ public class Jalview2XML
if (av.isHiddenRepSequence(jal.getSequenceAt(i)))
{
- jalview.datamodel.SequenceI[] reps = av.getRepresentedSequences(jal.getSequenceAt(i)).getSequencesInOrder(jal);
+ jalview.datamodel.SequenceI[] reps = av.getRepresentedSequences(
+ jal.getSequenceAt(i)).getSequencesInOrder(jal);
for (int h = 0; h < reps.length; h++)
{
@@ -617,8 +618,8 @@ public class Jalview2XML
for (int smap = 0; smap < jmol.jmb.sequence[peid].length; smap++)
{
-// if (jal.findIndex(jmol.jmb.sequence[peid][smap]) > -1)
- if (jds==jmol.jmb.sequence[peid][smap])
+ // if (jal.findIndex(jmol.jmb.sequence[peid][smap]) > -1)
+ if (jds == jmol.jmb.sequence[peid][smap])
{
StructureState state = new StructureState();
state.setVisible(true);
@@ -870,8 +871,10 @@ public class Jalview2XML
an.setLabel(aa[i].label);
- if (aa[i] == av.getAlignmentQualityAnnot() || aa[i] == av.getAlignmentConservationAnnotation()
- || aa[i] == av.getAlignmentConsensusAnnotation() || aa[i].autoCalculated)
+ if (aa[i] == av.getAlignmentQualityAnnot()
+ || aa[i] == av.getAlignmentConservationAnnotation()
+ || aa[i] == av.getAlignmentConsensusAnnotation()
+ || aa[i].autoCalculated)
{
// new way of indicating autocalculated annotation -
an.setAutoCalculated(aa[i].autoCalculated);
@@ -881,7 +884,7 @@ public class Jalview2XML
an.setScore(aa[i].getScore());
}
- if (aa[i].getCalcId()!=null)
+ if (aa[i].getCalcId() != null)
{
calcIdSet.add(aa[i].getCalcId());
an.setCalcId(aa[i].getCalcId());
@@ -941,7 +944,7 @@ public class Jalview2XML
{
JGroup[] groups = new JGroup[jal.getGroups().size()];
int i = -1;
- for (jalview.datamodel.SequenceGroup sg:jal.getGroups())
+ for (jalview.datamodel.SequenceGroup sg : jal.getGroups())
{
groups[++i] = new JGroup();
@@ -1001,6 +1004,7 @@ public class Jalview2XML
groups[i].setIgnoreGapsinConsensus(sg.getIgnoreGapsConsensus());
groups[i].setShowConsensusHistogram(sg.isShowConsensusHistogram());
groups[i].setShowSequenceLogo(sg.isShowSequenceLogo());
+ groups[i].setNormaliseSequenceLogo(sg.isNormaliseSequenceLogo());
for (int s = 0; s < sg.getSize(); s++)
{
jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence) sg
@@ -1066,6 +1070,8 @@ public class Jalview2XML
ac.setMaxColour(acg.getMaxColour().getRGB());
ac.setMinColour(acg.getMinColour().getRGB());
+ ac.setPerSequence(acg.isSeqAssociated());
+ ac.setPredefinedColours(acg.isPredefinedColours());
view.setAnnotationColours(ac);
view.setBgColour("AnnotationColourGradient");
}
@@ -1114,6 +1120,7 @@ public class Jalview2XML
view.setTextColThreshold(av.thresholdTextColour);
view.setShowConsensusHistogram(av.isShowConsensusHistogram());
view.setShowSequenceLogo(av.isShowSequenceLogo());
+ view.setNormaliseSequenceLogo(av.isNormaliseSequenceLogo());
view.setShowGroupConsensus(av.isShowGroupConsensus());
view.setShowGroupConservation(av.isShowGroupConservation());
view.setShowNPfeatureTooltip(av.isShowNpFeats());
@@ -1195,7 +1202,8 @@ public class Jalview2XML
fs.addSetting(setting);
settingsAdded.addElement(key);
}
- en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups.keySet().iterator();
+ en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups
+ .keySet().iterator();
Vector groupsAdded = new Vector();
while (en.hasNext())
{
@@ -1236,12 +1244,18 @@ public class Jalview2XML
}
}
}
- if (calcIdSet.size()>0)
+ if (calcIdSet.size() > 0)
{
- for (String calcId:calcIdSet)
+ for (String calcId : calcIdSet)
{
- if (calcId.trim().length()>0) {
- view.addCalcIdParam(createCalcIdParam(calcId, av));
+ if (calcId.trim().length() > 0)
+ {
+ CalcIdParam cidp = createCalcIdParam(calcId, av);
+ // Some calcIds have no parameters.
+ if (cidp != null)
+ {
+ view.addCalcIdParam(cidp);
+ }
}
}
}
@@ -1286,7 +1300,7 @@ public class Jalview2XML
vCalcIdParam.addServiceURL(settings.getServiceURI());
// generic URI allowing a third party to resolve another instance of the
// service used for this calculation
- for (String urls:settings.getServiceURLs())
+ for (String urls : settings.getServiceURLs())
{
vCalcIdParam.addServiceURL(urls);
}
@@ -1305,8 +1319,8 @@ public class Jalview2XML
// need to be able to recover 1) settings 2) user-defined presets or
// recreate settings from preset 3) predefined settings provided by
// service - or settings that can be transferred (or discarded)
- vCalcIdParam.setParameters(settings
- .getWsParamFile().replace("\n", "|\\n|"));
+ vCalcIdParam.setParameters(settings.getWsParamFile().replace("\n",
+ "|\\n|"));
vCalcIdParam.setAutoUpdate(settings.isAutoUpdate());
// todo - decide if updateImmediately is needed for any projects.
@@ -1320,33 +1334,47 @@ public class Jalview2XML
{
if (calcIdParam.getVersion().equals("1.0"))
{
- Jws2Instance service=Jws2Discoverer.getDiscoverer().getPreferredServiceFor(calcIdParam.getServiceURL());
- if (service!=null)
+ Jws2Instance service = Jws2Discoverer.getDiscoverer()
+ .getPreferredServiceFor(calcIdParam.getServiceURL());
+ if (service != null)
{
- WsParamSetI parmSet=null;
- try {
- parmSet = service.getParamStore().parseServiceParameterFile(calcIdParam.getName(), calcIdParam.getDescription(), calcIdParam.getServiceURL(), calcIdParam.getParameters().replace("|\\n|", "\n"));
+ WsParamSetI parmSet = null;
+ try
+ {
+ parmSet = service.getParamStore().parseServiceParameterFile(
+ calcIdParam.getName(), calcIdParam.getDescription(),
+ calcIdParam.getServiceURL(),
+ calcIdParam.getParameters().replace("|\\n|", "\n"));
} catch (IOException x)
{
- warn("Couldn't parse parameter data for "+calcIdParam.getCalcId(), x);
+ warn("Couldn't parse parameter data for "
+ + calcIdParam.getCalcId(), x);
return false;
}
- List argList=null;
- if (calcIdParam.getName().length()>0) {
- parmSet = service.getParamStore().getPreset(calcIdParam.getName());
- if (parmSet!=null)
+ List argList = null;
+ if (calcIdParam.getName().length() > 0)
+ {
+ parmSet = service.getParamStore()
+ .getPreset(calcIdParam.getName());
+ if (parmSet != null)
{
- // TODO : check we have a good match with settings in AACons - otherwise we'll need to create a new preset
+ // TODO : check we have a good match with settings in AACon -
+ // otherwise we'll need to create a new preset
}
}
- else {
+ else
+ {
argList = parmSet.getArguments();
- parmSet=null;
+ parmSet = null;
}
- AAConsSettings settings = new AAConsSettings(calcIdParam.isAutoUpdate(), service, parmSet, argList);
- av.setCalcIdSettingsFor(calcIdParam.getCalcId(), settings, calcIdParam.isNeedsUpdate());
+ AAConSettings settings = new AAConSettings(
+ calcIdParam.isAutoUpdate(), service, parmSet, argList);
+ av.setCalcIdSettingsFor(calcIdParam.getCalcId(), settings,
+ calcIdParam.isNeedsUpdate());
return true;
- } else {
+ }
+ else
+ {
warn("Cannot resolve a service for the parameters used in this project. Try configuring a JABAWS server.");
return false;
}
@@ -1354,6 +1382,7 @@ public class Jalview2XML
throw new Error("Unsupported Version for calcIdparam "
+ calcIdParam.toString());
}
+
/**
* External mapping between jalview objects and objects yielding a valid and
* unique object ID string. This is null for normal Jalview project IO, but
@@ -1365,7 +1394,7 @@ public class Jalview2XML
/**
* Construct a unique ID for jvobj using either existing bindings or if none
* exist, the result of the hashcode call for the object.
- *
+ *
* @param jvobj
* jalview data object
* @return unique ID for referring to jvobj
@@ -1396,7 +1425,7 @@ public class Jalview2XML
/**
* return local jalview object mapped to ID, if it exists
- *
+ *
* @param idcode
* (may be null)
* @return null or object bound to idcode
@@ -1632,7 +1661,7 @@ public class Jalview2XML
/**
* Load a jalview project archive from a jar file
- *
+ *
* @param file
* - HTTP URL or filename
*/
@@ -1643,6 +1672,8 @@ public class Jalview2XML
try
{
+ // create list to store references for any new Jmol viewers created
+ newStructureViewers=new Vector();
// UNMARSHALLER SEEMS TO CLOSE JARINPUTSTREAM, MOST ANNOYING
// Workaround is to make sure caller implements the JarInputStreamProvider
// interface
@@ -1650,11 +1681,27 @@ public class Jalview2XML
jarInputStreamProvider jprovider = createjarInputStreamProvider(file);
af = LoadJalviewAlign(jprovider);
+
} catch (MalformedURLException e)
{
errorMessage = "Invalid URL format for '" + file + "'";
reportErrors();
}
+ finally {
+ try
+ {
+ SwingUtilities.invokeAndWait(new Runnable()
+ {
+ public void run()
+ {
+ setLoadingFinishedForNewStructureViewers();
+ };
+ });
+ } catch (Exception x)
+ {
+
+ }
+ }
return af;
}
@@ -1702,7 +1749,7 @@ public class Jalview2XML
* initialise uniqueSetSuffix, seqRefIds, viewportsAdded and frefedSequence
* themselves. Any null fields will be initialised with default values,
* non-null fields are left alone.
- *
+ *
* @param jprovider
* @return
*/
@@ -1923,7 +1970,7 @@ public class Jalview2XML
}
;
out.close();
- String t=outFile.getAbsolutePath();
+ String t = outFile.getAbsolutePath();
alreadyLoadedPDB.put(pdbId, t);
return t;
}
@@ -1960,7 +2007,7 @@ public class Jalview2XML
/**
* Load alignment frame from jalview XML DOM object
- *
+ *
* @param object
* DOM
* @param file
@@ -2021,8 +2068,7 @@ public class Jalview2XML
hiddenSeqs = new Vector();
}
- hiddenSeqs.addElement(seqRefIds
- .get(seqId));
+ hiddenSeqs.addElement(seqRefIds.get(seqId));
}
}
@@ -2243,16 +2289,19 @@ public class Jalview2XML
// Construct new annotation from model.
AnnotationElement[] ae = an[i].getAnnotationElement();
jalview.datamodel.Annotation[] anot = null;
-
+ java.awt.Color firstColour = null;
+ int anpos;
if (!an[i].getScoreOnly())
{
anot = new jalview.datamodel.Annotation[al.getWidth()];
for (int aa = 0; aa < ae.length && aa < anot.length; aa++)
{
- if (ae[aa].getPosition() >= anot.length)
+ anpos = ae[aa].getPosition();
+
+ if (anpos >= anot.length)
continue;
- anot[ae[aa].getPosition()] = new jalview.datamodel.Annotation(
+ anot[anpos] = new jalview.datamodel.Annotation(
ae[aa].getDisplayCharacter(), ae[aa].getDescription(),
(ae[aa].getSecondaryStructure() == null || ae[aa]
@@ -2268,8 +2317,11 @@ public class Jalview2XML
// {
// anot[ae[aa].getPosition()].displayCharacter = "";
// }
- anot[ae[aa].getPosition()].colour = new java.awt.Color(
- ae[aa].getColour());
+ anot[anpos].colour = new java.awt.Color(ae[aa].getColour());
+ if (firstColour == null)
+ {
+ firstColour = anot[anpos].colour;
+ }
}
}
jalview.datamodel.AlignmentAnnotation jaa = null;
@@ -2285,7 +2337,7 @@ public class Jalview2XML
an[i].getGraphType());
jaa.graphGroup = an[i].getGraphGroup();
-
+ jaa._linecolour = firstColour;
if (an[i].getThresholdLine() != null)
{
jaa.setThreshold(new jalview.datamodel.GraphLine(an[i]
@@ -2305,25 +2357,22 @@ public class Jalview2XML
{
jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
an[i].getDescription(), anot);
+ jaa._linecolour = firstColour;
}
- if (autoForView)
+ // register new annotation
+ if (an[i].getId() != null)
{
- // register new annotation
- if (an[i].getId() != null)
- {
- annotationIds.put(an[i].getId(), jaa);
- jaa.annotationId = an[i].getId();
- }
- // recover sequence association
- if (an[i].getSequenceRef() != null)
+ annotationIds.put(an[i].getId(), jaa);
+ jaa.annotationId = an[i].getId();
+ }
+ // recover sequence association
+ if (an[i].getSequenceRef() != null)
+ {
+ if (al.findName(an[i].getSequenceRef()) != null)
{
- if (al.findName(an[i].getSequenceRef()) != null)
- {
- jaa.createSequenceMapping(
- al.findName(an[i].getSequenceRef()), 1, true);
- al.findName(an[i].getSequenceRef()).addAlignmentAnnotation(
- jaa);
- }
+ jaa.createSequenceMapping(al.findName(an[i].getSequenceRef()),
+ 1, true);
+ al.findName(an[i].getSequenceRef()).addAlignmentAnnotation(jaa);
}
}
// and make a note of any group association
@@ -2366,7 +2415,7 @@ public class Jalview2XML
}
if (an[i].hasBelowAlignment())
{
- jaa.belowAlignment=an[i].isBelowAlignment();
+ jaa.belowAlignment = an[i].isBelowAlignment();
}
jaa.setCalcId(an[i].getCalcId());
@@ -2452,6 +2501,10 @@ public class Jalview2XML
{
sg.setshowSequenceLogo(groups[i].isShowSequenceLogo());
}
+ if (groups[i].hasNormaliseSequenceLogo())
+ {
+ sg.setNormaliseSequenceLogo(groups[i].isNormaliseSequenceLogo());
+ }
if (groups[i].hasIgnoreGapsinConsensus())
{
sg.setIgnoreGapsConsensus(groups[i].getIgnoreGapsinConsensus());
@@ -2733,13 +2786,12 @@ public class Jalview2XML
}
if (ids[p].getFile() != null)
{
- File mapkey=new File(ids[p].getFile());
+ File mapkey = new File(ids[p].getFile());
Object[] seqstrmaps = (Object[]) ((Hashtable) jmoldat[2])
.get(mapkey);
if (seqstrmaps == null)
{
- ((Hashtable) jmoldat[2]).put(
- mapkey,
+ ((Hashtable) jmoldat[2]).put(mapkey,
seqstrmaps = new Object[]
{ pdbFile, ids[p].getId(), new Vector(),
new Vector() });
@@ -2836,25 +2888,28 @@ public class Jalview2XML
{
newFileLoc = new StringBuffer();
}
- do {
+ do
+ {
// look for next filename in load statement
- newFileLoc.append(state.substring(cp,
- ncp = (state.indexOf("\"", ncp + 1) + 1)));
- String oldfilenam = state.substring(ncp,
- ecp = state.indexOf("\"", ncp));
- // recover the new mapping data for this old filename
- // have to normalize filename - since Jmol and jalview do filename
- // translation differently.
- Object[] filedat = oldFiles.get(new File(oldfilenam));
- newFileLoc.append(Platform.escapeString((String) filedat[0]));
- pdbfilenames.addElement((String) filedat[0]);
- pdbids.addElement((String) filedat[1]);
- seqmaps.addElement(((Vector) filedat[2])
- .toArray(new SequenceI[0]));
- newFileLoc.append("\"");
- cp = ecp + 1; // advance beyond last \" and set cursor so we can
- // look for next file statement.
- } while ((ncp=state.indexOf("/*file*/",cp))>-1);
+ newFileLoc.append(state.substring(cp,
+ ncp = (state.indexOf("\"", ncp + 1) + 1)));
+ String oldfilenam = state.substring(ncp,
+ ecp = state.indexOf("\"", ncp));
+ // recover the new mapping data for this old filename
+ // have to normalize filename - since Jmol and jalview do
+ // filename
+ // translation differently.
+ Object[] filedat = oldFiles.get(new File(oldfilenam));
+ newFileLoc.append(Platform
+ .escapeString((String) filedat[0]));
+ pdbfilenames.addElement((String) filedat[0]);
+ pdbids.addElement((String) filedat[1]);
+ seqmaps.addElement(((Vector) filedat[2])
+ .toArray(new SequenceI[0]));
+ newFileLoc.append("\"");
+ cp = ecp + 1; // advance beyond last \" and set cursor so we can
+ // look for next file statement.
+ } while ((ncp = state.indexOf("/*file*/", cp)) > -1);
}
if (cp > 0)
{
@@ -2934,6 +2989,7 @@ public class Jalview2XML
sview = new AppJmol(pdbf, id, sq, alf.alignPanel,
useinJmolsuperpos, usetoColourbyseq,
jmolColouring, fileloc, rect, vid);
+ addNewStructureViewer(sview);
} catch (OutOfMemoryError ex)
{
new OOMWarning("restoring structure view for PDB id "
@@ -2990,8 +3046,7 @@ public class Jalview2XML
}
if (usetoColourbyseq)
{
- comp.useAlignmentPanelForColourbyseq(ap,
- !jmolColouring);
+ comp.useAlignmentPanelForColourbyseq(ap, !jmolColouring);
}
else
{
@@ -3004,6 +3059,27 @@ public class Jalview2XML
// and finally return.
return af;
}
+ Vector newStructureViewers=null;
+ protected void addNewStructureViewer(AppJmol sview)
+ {
+ if (newStructureViewers!=null)
+ {
+ sview.jmb.setFinishedLoadingFromArchive(false);
+ newStructureViewers.add(sview);
+ }
+ }
+ protected void setLoadingFinishedForNewStructureViewers()
+ {
+ if (newStructureViewers!=null)
+ {
+ for (AppJmol sview:newStructureViewers)
+ {
+ sview.jmb.setFinishedLoadingFromArchive(true);
+ }
+ newStructureViewers.clear();
+ newStructureViewers=null;
+ }
+ }
AlignFrame loadViewport(String file, JSeq[] JSEQ, Vector hiddenSeqs,
Alignment al, JalviewModelSequence jms, Viewport view,
@@ -3018,8 +3094,8 @@ public class Jalview2XML
for (int i = 0; i < JSEQ.length; i++)
{
- af.viewport.setSequenceColour(af.viewport.getAlignment().getSequenceAt(i),
- new java.awt.Color(JSEQ[i].getColour()));
+ af.viewport.setSequenceColour(af.viewport.getAlignment()
+ .getSequenceAt(i), new java.awt.Color(JSEQ[i].getColour()));
}
af.viewport.gatherViewsHere = view.getGatheredViews();
@@ -3141,8 +3217,8 @@ public class Jalview2XML
if (view.getAnnotationColours().getColourScheme()
.equals("None"))
{
- cs = new AnnotationColourGradient(
- af.viewport.getAlignment().getAlignmentAnnotation()[i],
+ cs = new AnnotationColourGradient(af.viewport
+ .getAlignment().getAlignmentAnnotation()[i],
new java.awt.Color(view.getAnnotationColours()
.getMinColour()), new java.awt.Color(view
.getAnnotationColours().getMaxColour()),
@@ -3151,28 +3227,35 @@ public class Jalview2XML
else if (view.getAnnotationColours().getColourScheme()
.startsWith("ucs"))
{
- cs = new AnnotationColourGradient(
- af.viewport.getAlignment().getAlignmentAnnotation()[i],
+ cs = new AnnotationColourGradient(af.viewport
+ .getAlignment().getAlignmentAnnotation()[i],
GetUserColourScheme(jms, view
.getAnnotationColours().getColourScheme()),
view.getAnnotationColours().getAboveThreshold());
}
else
{
- cs = new AnnotationColourGradient(
- af.viewport.getAlignment().getAlignmentAnnotation()[i],
+ cs = new AnnotationColourGradient(af.viewport
+ .getAlignment().getAlignmentAnnotation()[i],
ColourSchemeProperty.getColour(al, view
.getAnnotationColours().getColourScheme()),
view.getAnnotationColours().getAboveThreshold());
}
-
+ if (view.getAnnotationColours().hasPerSequence())
+ {
+ ((AnnotationColourGradient)cs).setSeqAssociated(view.getAnnotationColours().isPerSequence());
+ }
+ if (view.getAnnotationColours().hasPredefinedColours())
+ {
+ ((AnnotationColourGradient)cs).setPredefinedColours(view.getAnnotationColours().isPredefinedColours());
+ }
// Also use these settings for all the groups
if (al.getGroups() != null)
{
for (int g = 0; g < al.getGroups().size(); g++)
{
- jalview.datamodel.SequenceGroup sg = al
- .getGroups().get(g);
+ jalview.datamodel.SequenceGroup sg = al.getGroups()
+ .get(g);
if (sg.cs == null)
{
@@ -3191,10 +3274,21 @@ public class Jalview2XML
* view.getAnnotationColours().getAboveThreshold()); } else
*/
{
- sg.cs = new AnnotationColourGradient(
- af.viewport.getAlignment().getAlignmentAnnotation()[i],
+ sg.cs = new AnnotationColourGradient(af.viewport
+ .getAlignment().getAlignmentAnnotation()[i],
sg.cs, view.getAnnotationColours()
.getAboveThreshold());
+ if (cs instanceof AnnotationColourGradient)
+ {
+ if (view.getAnnotationColours().hasPerSequence())
+ {
+ ((AnnotationColourGradient)cs).setSeqAssociated(view.getAnnotationColours().isPerSequence());
+ }
+ if (view.getAnnotationColours().hasPredefinedColours())
+ {
+ ((AnnotationColourGradient)cs).setPredefinedColours(view.getAnnotationColours().isPredefinedColours());
+ }
+ }
}
}
@@ -3240,8 +3334,8 @@ public class Jalview2XML
}
if (view.hasIgnoreGapsinConsensus())
{
- af.viewport.setIgnoreGapsConsensus(view
- .getIgnoreGapsinConsensus(), null);
+ af.viewport.setIgnoreGapsConsensus(view.getIgnoreGapsinConsensus(),
+ null);
}
if (view.hasFollowHighlight())
{
@@ -3268,6 +3362,10 @@ public class Jalview2XML
{
af.viewport.setShowSequenceLogo(false);
}
+ if (view.hasNormaliseSequenceLogo())
+ {
+ af.viewport.setNormaliseSequenceLogo(view.getNormaliseSequenceLogo());
+ }
if (view.hasShowDbRefTooltip())
{
af.viewport.setShowDbRefs(view.getShowDbRefTooltip());
@@ -3367,13 +3465,30 @@ public class Jalview2XML
);
}
}
-
+ if (view.getCalcIdParam() != null)
+ {
+ for (CalcIdParam calcIdParam : view.getCalcIdParam())
+ {
+ if (calcIdParam != null)
+ {
+ if (recoverCalcIdParam(calcIdParam, af.viewport))
+ {
+ }
+ else
+ {
+ warn("Couldn't recover parameters for "
+ + calcIdParam.getCalcId());
+ }
+ }
+ }
+ }
af.setMenusFromViewport(af.viewport);
// TODO: we don't need to do this if the viewport is aready visible.
Desktop.addInternalFrame(af, view.getTitle(), view.getWidth(),
view.getHeight());
- af.alignPanel.updateAnnotation(false); // recompute any autoannotation
+ af.alignPanel.updateAnnotation(false, true); // recompute any autoannotation
reorderAutoannotation(af, al, autoAlan);
+ af.alignPanel.alignmentChanged();
return af;
}
@@ -3397,21 +3512,34 @@ public class Jalview2XML
}
for (JvAnnotRow auan : autoAlan)
{
- visan.put(auan.template.label, auan);
+ visan.put(auan.template.label
+ + (auan.template.getCalcId() == null ? "" : "\t"
+ + auan.template.getCalcId()), auan);
}
int hSize = al.getAlignmentAnnotation().length;
ArrayList reorder = new ArrayList();
+ // work through any autoCalculated annotation already on the view
+ // removing it if it should be placed in a different location on the
+ // annotation panel.
+ List remains = new ArrayList(visan.keySet());
for (int h = 0; h < hSize; h++)
{
jalview.datamodel.AlignmentAnnotation jalan = al
.getAlignmentAnnotation()[h];
if (jalan.autoCalculated)
{
- JvAnnotRow valan = visan.get(jalan.label);
+ String k;
+ JvAnnotRow valan = visan.get(k = jalan.label);
+ if (jalan.getCalcId() != null)
+ {
+ valan = visan.get(k = jalan.label + "\t" + jalan.getCalcId());
+ }
+
if (valan != null)
{
// delete the auto calculated row from the alignment
- al.deleteAnnotation(al.getAlignmentAnnotation()[h], false);
+ al.deleteAnnotation(jalan, false);
+ remains.remove(k);
hSize--;
h--;
if (valan != nullAnnot)
@@ -3433,6 +3561,18 @@ public class Jalview2XML
}
}
}
+ // Add any (possibly stale) autocalculated rows that were not appended to
+ // the view during construction
+ for (String other : remains)
+ {
+ JvAnnotRow othera = visan.get(other);
+ if (othera != nullAnnot && othera.template.getCalcId() != null
+ && othera.template.getCalcId().length() > 0)
+ {
+ reorder.add(othera);
+ }
+ }
+ // now put the automatic annotation in its correct place
int s = 0, srt[] = new int[reorder.size()];
JvAnnotRow[] rws = new JvAnnotRow[reorder.size()];
for (JvAnnotRow jvar : reorder)
@@ -3455,7 +3595,7 @@ public class Jalview2XML
/**
* TODO remove this method
- *
+ *
* @param view
* @return AlignFrame bound to sequenceSetId from view, if one exists. private
* AlignFrame getSkippedFrame(Viewport view) { if (skipList==null) {
@@ -3466,7 +3606,7 @@ public class Jalview2XML
/**
* Check if the Jalview view contained in object should be skipped or not.
- *
+ *
* @param object
* @return true if view's sequenceSetId is a key in skipList
*/
@@ -3539,7 +3679,7 @@ public class Jalview2XML
}
/**
- *
+ *
* @param vamsasSeq
* sequence definition to create/merge dataset sequence for
* @param ds
@@ -3597,6 +3737,20 @@ public class Jalview2XML
if (sq != dsq)
{ // make this dataset sequence sq's dataset sequence
sq.setDatasetSequence(dsq);
+ // and update the current dataset alignment
+ if (ds==null) {
+ if (dseqs!=null) {
+ if (!dseqs.contains(dsq))
+ {
+ dseqs.add(dsq);
+ }
+ } else {
+ if (ds.findIndex(dsq)<0)
+ {
+ ds.addSequence(dsq);
+ }
+ }
+ }
}
}
}
@@ -3623,11 +3777,11 @@ public class Jalview2XML
* sb.append(newres.substring(newres.length() - sq.getEnd() -
* dsq.getEnd())); dsq.setEnd(sq.getEnd()); }
*/
- dsq.setSequence(sb.toString());
+ dsq.setSequence(newres);
}
// TODO: merges will never happen if we 'know' we have the real dataset
// sequence - this should be detected when id==dssid
- System.err.println("DEBUG Notice: Merged dataset sequence"); // ("
+ System.err.println("DEBUG Notice: Merged dataset sequence (if you see this often, post at http://issues.jalview.org/browse/JAL-1474)"); // ("
// + (pre ? "prepended" : "") + " "
// + (post ? "appended" : ""));
}
@@ -3663,7 +3817,7 @@ public class Jalview2XML
/**
* make a new dataset ID for this jalview dataset alignment
- *
+ *
* @param dataset
* @return
*/
@@ -3850,7 +4004,7 @@ public class Jalview2XML
/*
* (non-Javadoc)
- *
+ *
* @see java.lang.Object#finalize()
*/
@Override
@@ -3928,13 +4082,13 @@ public class Jalview2XML
* finalize and clearSeqRefs will not clear the tables when the Jalview2XML
* object goes out of scope. - also populates the datasetIds hashtable with
* alignment objects containing dataset sequences
- *
+ *
* @param vobj2jv
* Map from ID strings to jalview datamodel
* @param jv2vobj
* Map from jalview datamodel to ID strings
- *
- *
+ *
+ *
*/
public void setObjectMappingTables(Hashtable vobj2jv,
IdentityHashMap jv2vobj)
@@ -4006,7 +4160,7 @@ public class Jalview2XML
* set the uniqueSetSuffix used to prefix/suffix object IDs for jalview
* objects created from the project archive. If string is null (default for
* construction) then suffix will be set automatically.
- *
+ *
* @param string
*/
public void setUniqueSetSuffix(String string)
@@ -4018,7 +4172,7 @@ public class Jalview2XML
/**
* uses skipList2 as the skipList for skipping views on sequence sets
* associated with keys in the skipList
- *
+ *
* @param skipList2
*/
public void setSkipList(Hashtable skipList2)