import jalview.api.structures.JalviewStructureDisplayI;
import jalview.bin.Cache;
+import jalview.datamodel.AlignedCodonFrame;
import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
+import jalview.datamodel.StructureViewerModel;
+import jalview.datamodel.StructureViewerModel.StructureData;
import jalview.schemabinding.version2.AlcodMap;
-import jalview.schemabinding.version2.Alcodon;
import jalview.schemabinding.version2.AlcodonFrame;
import jalview.schemabinding.version2.Annotation;
import jalview.schemabinding.version2.AnnotationColours;
import jalview.util.Platform;
import jalview.util.jarInputStreamProvider;
import jalview.viewmodel.AlignmentViewport;
+import jalview.viewmodel.seqfeatures.FeatureRendererSettings;
+import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
import jalview.ws.jws2.Jws2Discoverer;
import jalview.ws.jws2.dm.AAConSettings;
import jalview.ws.jws2.jabaws2.Jws2Instance;
import java.util.Hashtable;
import java.util.IdentityHashMap;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
*/
public class Jalview2XML
{
-
- /**
- * A data bean to hold stored data about a structure viewer.
- */
- public class ViewerData
- {
-
- private int x;
-
- private int y;
-
- private int width;
-
- private int height;
-
- public boolean alignWithPanel;
-
- public boolean colourWithAlignPanel;
-
- public boolean colourByViewer;
-
- String stateData = "";
-
- // todo: java bean in place of Object []
- private Map<File, Object[]> fileData = new HashMap<File, Object[]>();
-
- public ViewerData(int x, int y, int width, int height,
- boolean alignWithPanel, boolean colourWithAlignPanel,
- boolean colourByViewer)
- {
- this.x = x;
- this.y = y;
- this.width = width;
- this.height = height;
- this.alignWithPanel = alignWithPanel;
- this.colourWithAlignPanel = colourWithAlignPanel;
- this.colourByViewer = colourByViewer;
- }
-
- }
-
/*
* SequenceI reference -> XML ID string in jalview XML. Populated as XML reps
* of sequence objects are created.
*/
public void saveState(JarOutputStream jout)
{
- JInternalFrame[] frames = Desktop.desktop.getAllFrames();
+ AlignFrame[] frames = Desktop.getAlignFrames(); // Desktop.desktop.getAllFrames();
if (frames == null)
{
// REVERSE ORDER
for (int i = frames.length - 1; i > -1; i--)
{
- if (frames[i] instanceof AlignFrame)
+ AlignFrame af = frames[i];
+ // skip ?
+ if (skipList != null
+ && skipList
+ .containsKey(af.getViewport().getSequenceSetId()))
{
- AlignFrame af = (AlignFrame) frames[i];
- // skip ?
- if (skipList != null
- && skipList.containsKey(af.getViewport()
- .getSequenceSetId()))
- {
- continue;
- }
+ continue;
+ }
- String shortName = af.getTitle();
+ String shortName = af.getTitle();
+
+ if (shortName.indexOf(File.separatorChar) > -1)
+ {
+ shortName = shortName.substring(shortName
+ .lastIndexOf(File.separatorChar) + 1);
+ }
- if (shortName.indexOf(File.separatorChar) > -1)
+ int count = 1;
+
+ while (shortNames.contains(shortName))
+ {
+ if (shortName.endsWith("_" + (count - 1)))
{
- shortName = shortName.substring(shortName
- .lastIndexOf(File.separatorChar) + 1);
+ shortName = shortName.substring(0, shortName.lastIndexOf("_"));
}
- int count = 1;
+ shortName = shortName.concat("_" + count);
+ count++;
+ }
- while (shortNames.contains(shortName))
- {
- if (shortName.endsWith("_" + (count - 1)))
- {
- shortName = shortName
- .substring(0, shortName.lastIndexOf("_"));
- }
+ shortNames.addElement(shortName);
- shortName = shortName.concat("_" + count);
- count++;
- }
+ if (!shortName.endsWith(".xml"))
+ {
+ shortName = shortName + ".xml";
+ }
- shortNames.addElement(shortName);
+ int ap, apSize = af.alignPanels.size();
- if (!shortName.endsWith(".xml"))
+ for (ap = 0; ap < apSize; ap++)
+ {
+ AlignmentPanel apanel = af.alignPanels.get(ap);
+ String fileName = apSize == 1 ? shortName : ap + shortName;
+ if (!fileName.endsWith(".xml"))
{
- shortName = shortName + ".xml";
+ fileName = fileName + ".xml";
}
- int ap, apSize = af.alignPanels.size();
+ saveState(apanel, fileName, jout);
- for (ap = 0; ap < apSize; ap++)
+ String dssid = getDatasetIdRef(af.getViewport().getAlignment()
+ .getDataset());
+ if (!dsses.containsKey(dssid))
{
- AlignmentPanel apanel = (AlignmentPanel) af.alignPanels
- .elementAt(ap);
- String fileName = apSize == 1 ? shortName : ap + shortName;
- if (!fileName.endsWith(".xml"))
- {
- fileName = fileName + ".xml";
- }
-
- saveState(apanel, fileName, jout);
-
- String dssid = getDatasetIdRef(af.getViewport().getAlignment()
- .getDataset());
- if (!dsses.containsKey(dssid))
- {
- dsses.put(dssid, af);
- }
-
+ dsses.put(dssid, af);
}
}
}
{
try
{
- int ap, apSize = af.alignPanels.size();
+ int ap = 0;
+ int apSize = af.alignPanels.size();
FileOutputStream fos = new FileOutputStream(jarFile);
JarOutputStream jout = new JarOutputStream(fos);
Hashtable<String, AlignFrame> dsses = new Hashtable<String, AlignFrame>();
- for (ap = 0; ap < apSize; ap++)
+ for (AlignmentPanel apanel : af.alignPanels)
{
- AlignmentPanel apanel = (AlignmentPanel) af.alignPanels
- .elementAt(ap);
String jfileName = apSize == 1 ? fileName : fileName + ap;
+ ap++;
if (!jfileName.endsWith(".xml"))
{
jfileName = jfileName + ".xml";
{
byte[] data = new byte[(int) file.length()];
jout.putNextEntry(new JarEntry(entry.getId()));
- dis = new DataInputStream(
- new FileInputStream(file));
+ dis = new DataInputStream(new FileInputStream(file));
dis.readFully(data);
DataOutputStream dout = new DataOutputStream(jout);
jal = av.getAlignment();
}
// SAVE MAPPINGS
- if (jal.getCodonFrames() != null && jal.getCodonFrames().length > 0)
+ if (jal.getCodonFrames() != null)
{
- jalview.datamodel.AlignedCodonFrame[] jac = jal.getCodonFrames();
- for (int i = 0; i < jac.length; i++)
+ Set<AlignedCodonFrame> jac = jal.getCodonFrames();
+ for (AlignedCodonFrame acf : jac)
{
AlcodonFrame alc = new AlcodonFrame();
vamsasSet.addAlcodonFrame(alc);
- for (int p = 0; p < jac[i].aaWidth; p++)
- {
- Alcodon cmap = new Alcodon();
- if (jac[i].codons[p] != null)
- {
- // Null codons indicate a gapped column in the translated peptide
- // alignment.
- cmap.setPos1(jac[i].codons[p][0]);
- cmap.setPos2(jac[i].codons[p][1]);
- cmap.setPos3(jac[i].codons[p][2]);
- }
- alc.addAlcodon(cmap);
- }
- if (jac[i].getProtMappings() != null
- && jac[i].getProtMappings().length > 0)
+ if (acf.getProtMappings() != null
+ && acf.getProtMappings().length > 0)
{
- SequenceI[] dnas = jac[i].getdnaSeqs();
- jalview.datamodel.Mapping[] pmaps = jac[i].getProtMappings();
+ SequenceI[] dnas = acf.getdnaSeqs();
+ jalview.datamodel.Mapping[] pmaps = acf.getProtMappings();
for (int m = 0; m < pmaps.length; m++)
{
AlcodMap alcmap = new AlcodMap();
alc.addAlcodMap(alcmap);
}
}
+
+// {
+// AlcodonFrame alc = new AlcodonFrame();
+// vamsasSet.addAlcodonFrame(alc);
+// for (int p = 0; p < acf.aaWidth; p++)
+// {
+// Alcodon cmap = new Alcodon();
+// if (acf.codons[p] != null)
+// {
+// // Null codons indicate a gapped column in the translated peptide
+// // alignment.
+// cmap.setPos1(acf.codons[p][0]);
+// cmap.setPos2(acf.codons[p][1]);
+// cmap.setPos3(acf.codons[p][2]);
+// }
+// alc.addAlcodon(cmap);
+// }
+// if (acf.getProtMappings() != null
+// && acf.getProtMappings().length > 0)
+// {
+// SequenceI[] dnas = acf.getdnaSeqs();
+// jalview.datamodel.Mapping[] pmaps = acf.getProtMappings();
+// for (int m = 0; m < pmaps.length; m++)
+// {
+// AlcodMap alcmap = new AlcodMap();
+// alcmap.setDnasq(seqHash(dnas[m]));
+// alcmap.setMapping(createVamsasMapping(pmaps[m], dnas[m], null,
+// false));
+// alc.addAlcodMap(alcmap);
+// }
+// }
}
}
view.setFontName(av.font.getName());
view.setFontSize(av.font.getSize());
view.setFontStyle(av.font.getStyle());
- view.setRenderGaps(av.renderGaps);
- view.setShowAnnotation(av.getShowAnnotation());
+ view.setRenderGaps(av.isRenderGaps());
+ view.setShowAnnotation(av.isShowAnnotation());
view.setShowBoxes(av.getShowBoxes());
view.setShowColourText(av.getColourText());
view.setShowFullId(av.getShowJVSuffix());
view.setRightAlignIds(av.isRightAlignIds());
- view.setShowSequenceFeatures(av.showSequenceFeatures);
+ view.setShowSequenceFeatures(av.isShowSequenceFeatures());
view.setShowText(av.getShowText());
view.setShowUnconserved(av.getShowUnconserved());
view.setWrapAlignment(av.getWrapAlignment());
- view.setTextCol1(av.textColour.getRGB());
- view.setTextCol2(av.textColour2.getRGB());
- view.setTextColThreshold(av.thresholdTextColour);
+ view.setTextCol1(av.getTextColour().getRGB());
+ view.setTextCol2(av.getTextColour2().getRGB());
+ view.setTextColThreshold(av.getThresholdTextColour());
view.setShowConsensusHistogram(av.isShowConsensusHistogram());
view.setShowSequenceLogo(av.isShowSequenceLogo());
view.setNormaliseSequenceLogo(av.isNormaliseSequenceLogo());
view.setShowGroupConsensus(av.isShowGroupConsensus());
view.setShowGroupConservation(av.isShowGroupConservation());
- view.setShowNPfeatureTooltip(av.isShowNpFeats());
- view.setShowDbRefTooltip(av.isShowDbRefs());
+ view.setShowNPfeatureTooltip(av.isShowNPFeats());
+ view.setShowDbRefTooltip(av.isShowDBRefs());
view.setFollowHighlight(av.followHighlight);
view.setFollowSelection(av.followSelection);
- view.setIgnoreGapsinConsensus(av.getIgnoreGapsConsensus());
+ view.setIgnoreGapsinConsensus(av.isIgnoreGapsConsensus());
if (av.getFeaturesDisplayed() != null)
{
jalview.schemabinding.version2.FeatureSettings fs = new jalview.schemabinding.version2.FeatureSettings();
- String[] renderOrder = ap.getSeqPanel().seqCanvas.getFeatureRenderer().renderOrder;
+ String[] renderOrder = ap.getSeqPanel().seqCanvas
+ .getFeatureRenderer().getRenderOrder()
+ .toArray(new String[0]);
Vector settingsAdded = new Vector();
Object gstyle = null;
}
else
{
- setting.setColour(ap.getSeqPanel().seqCanvas.getFeatureRenderer()
+ setting.setColour(ap.getSeqPanel().seqCanvas
+ .getFeatureRenderer()
.getColour(renderOrder[ro]).getRGB());
}
- setting.setDisplay(av.getFeaturesDisplayed()
- .containsKey(renderOrder[ro]));
+ setting.setDisplay(av.getFeaturesDisplayed().isVisible(
+ renderOrder[ro]));
float rorder = ap.getSeqPanel().seqCanvas.getFeatureRenderer()
.getOrder(renderOrder[ro]);
if (rorder > -1)
}
// Make sure we save none displayed feature settings
- Iterator en = ap.getSeqPanel().seqCanvas.getFeatureRenderer().featureColours
- .keySet().iterator();
+ Iterator en = ap.getSeqPanel().seqCanvas.getFeatureRenderer()
+ .getFeatureColours().keySet().iterator();
while (en.hasNext())
{
String key = en.next().toString();
fs.addSetting(setting);
settingsAdded.addElement(key);
}
- en = ap.getSeqPanel().seqCanvas.getFeatureRenderer().featureGroups
- .keySet().iterator();
+ // is groups actually supposed to be a map here ?
+ en = ap.getSeqPanel().seqCanvas.getFeatureRenderer()
+ .getFeatureGroups().iterator();
Vector groupsAdded = new Vector();
while (en.hasNext())
{
Group g = new Group();
g.setName(grp);
g.setDisplay(((Boolean) ap.getSeqPanel().seqCanvas
- .getFeatureRenderer().featureGroups.get(grp))
+ .getFeatureRenderer().checkGroupVisibility(grp, false))
.booleanValue());
fs.addGroup(g);
groupsAdded.addElement(grp);
for (int c = 0; c < av.getColumnSelection().getHiddenColumns()
.size(); c++)
{
- int[] region = (int[]) av.getColumnSelection()
- .getHiddenColumns().elementAt(c);
+ int[] region = av.getColumnSelection().getHiddenColumns()
+ .get(c);
HiddenColumns hc = new HiddenColumns();
hc.setStart(region[0]);
hc.setEnd(region[1]);
Pdbids pdb, PDBEntry entry, List<String> viewIds,
String matchedFile, StructureViewerBase viewFrame)
{
- final AAStructureBindingModel bindingModel = viewFrame
- .getBinding();
- for (int peid = 0; peid < bindingModel
- .getPdbCount(); peid++)
+ final AAStructureBindingModel bindingModel = viewFrame.getBinding();
+ for (int peid = 0; peid < bindingModel.getPdbCount(); peid++)
{
final PDBEntry pdbentry = bindingModel.getPdbEntry(peid);
final String pdbId = pdbentry.getId();
if (!pdbId.equals(entry.getId())
&& !(entry.getId().length() > 4 && entry.getId()
- .toLowerCase()
- .startsWith(pdbId.toLowerCase())))
+ .toLowerCase().startsWith(pdbId.toLowerCase())))
{
continue;
}
{
matchedFile = pdbentry.getFile();
}
- else if (!matchedFile.equals(pdbentry
- .getFile()))
+ else if (!matchedFile.equals(pdbentry.getFile()))
{
Cache.log
.warn("Probably lost some PDB-Sequence mappings for this structure file (which apparently has same PDB Entry code): "
// 1QIP==1qipA)
String statestring = viewFrame.getStateInfo();
- for (int smap = 0; smap < viewFrame.getBinding()
- .getSequence()[peid].length; smap++)
+ for (int smap = 0; smap < viewFrame.getBinding().getSequence()[peid].length; smap++)
{
// if (jal.findIndex(jmol.jmb.sequence[peid][smap]) > -1)
if (jds == viewFrame.getBinding().getSequence()[peid][smap])
final String viewId = viewFrame.getViewId();
state.setViewId(viewId);
state.setAlignwithAlignPanel(viewFrame.isUsedforaligment(ap));
- state.setColourwithAlignPanel(viewFrame
- .isUsedforcolourby(ap));
+ state.setColourwithAlignPanel(viewFrame.isUsedforcolourby(ap));
state.setColourByJmol(viewFrame.isColouredByViewer());
/*
* Only store each structure viewer's state once in each XML document.
an.addProperty(prop);
}
}
+
AnnotationElement ae;
if (aa[i].annotations != null)
{
return false;
}
}
- throw new Error(MessageManager.formatMessage("error.unsupported_version_calcIdparam", new String[]{calcIdParam.toString()}));
+ throw new Error(MessageManager.formatMessage(
+ "error.unsupported_version_calcIdparam", new String[]
+ { calcIdParam.toString() }));
}
/**
}
}
StructureSelectionManager.getStructureSelectionManager(
- Desktop.instance)
- .registerPDBEntry(entry);
+ Desktop.instance).registerPDBEntry(entry);
al.getSequenceAt(i).getDatasetSequence().addPDBId(entry);
}
}
AlcodonFrame[] alc = vamsasSet.getAlcodonFrame();
for (int i = 0; i < alc.length; i++)
{
- jalview.datamodel.AlignedCodonFrame cf = new jalview.datamodel.AlignedCodonFrame(
- alc[i].getAlcodonCount());
- if (alc[i].getAlcodonCount() > 0)
- {
- Alcodon[] alcods = alc[i].getAlcodon();
- for (int p = 0; p < cf.codons.length; p++)
- {
- if (alcods[p].hasPos1() && alcods[p].hasPos2()
- && alcods[p].hasPos3())
- {
- // translated codons require three valid positions
- cf.codons[p] = new int[3];
- cf.codons[p][0] = (int) alcods[p].getPos1();
- cf.codons[p][1] = (int) alcods[p].getPos2();
- cf.codons[p][2] = (int) alcods[p].getPos3();
- }
- else
- {
- cf.codons[p] = null;
- }
- }
- }
+ AlignedCodonFrame cf = new AlignedCodonFrame();
if (alc[i].getAlcodMapCount() > 0)
{
AlcodMap[] maps = alc[i].getAlcodMap();
for (int m = 0; m < maps.length; m++)
{
- SequenceI dnaseq = seqRefIds
- .get(maps[m].getDnasq());
+ SequenceI dnaseq = seqRefIds.get(maps[m].getDnasq());
// Load Mapping
jalview.datamodel.Mapping mapping = null;
// attach to dna sequence reference.
}
al.addCodonFrame(cf);
}
-
}
// ////////////////////////////////
for (int s = 0; s < groups[i].getSeqCount(); s++)
{
String seqId = groups[i].getSeq(s) + "";
- jalview.datamodel.SequenceI ts = seqRefIds
- .get(seqId);
+ jalview.datamodel.SequenceI ts = seqRefIds.get(seqId);
if (ts != null)
{
protected void loadStructures(jarInputStreamProvider jprovider,
JSeq[] jseqs, AlignFrame af, AlignmentPanel ap)
{
- // run through all PDB ids on the alignment, and collect mappings between
- // jmol view ids and all sequences referring to it
- Map<String, ViewerData> jmolViewIds = new HashMap<String, ViewerData>();
+ /*
+ * Run through all PDB ids on the alignment, and collect mappings between
+ * distinct view ids and all sequences referring to that view.
+ */
+ Map<String, StructureViewerModel> structureViewers = new LinkedHashMap<String, StructureViewerModel>();
for (int i = 0; i < jseqs.length; i++)
{
for (int s = 0; s < structureStateCount; s++)
{
// check to see if we haven't already created this structure view
- final StructureState structureState = ids[p].getStructureState(s);
+ final StructureState structureState = ids[p]
+ .getStructureState(s);
String sviewid = (structureState.getViewId() == null) ? null
- : structureState.getViewId()
- + uniqueSetSuffix;
+ : structureState.getViewId() + uniqueSetSuffix;
jalview.datamodel.PDBEntry jpdb = new jalview.datamodel.PDBEntry();
// Originally : ids[p].getFile()
// : TODO: verify external PDB file recovery still works in normal
// Desktop.desktop.getComponentAt(x, y);
// TODO: NOW: check that this recovers the PDB file correctly.
String pdbFile = loadPDBFile(jprovider, ids[p].getId());
- jalview.datamodel.SequenceI seq = seqRefIds
- .get(jseqs[i].getId() + "");
+ jalview.datamodel.SequenceI seq = seqRefIds.get(jseqs[i]
+ .getId() + "");
if (sviewid == null)
{
sviewid = "_jalview_pre2_4_" + x + "," + y + "," + width
+ "," + height;
}
- if (!jmolViewIds.containsKey(sviewid))
+ if (!structureViewers.containsKey(sviewid))
{
- jmolViewIds.put(sviewid, new ViewerData(x, y, width, height,
- false, false, true));
+ structureViewers.put(sviewid, new StructureViewerModel(x, y,
+ width, height, false, false, true));
// Legacy pre-2.7 conversion JAL-823 :
// do not assume any view has to be linked for colour by
// sequence
// file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, {
// seqs_file 2}, boolean[] {
// linkAlignPanel,superposeWithAlignpanel}} from hash
- ViewerData jmoldat = jmolViewIds.get(sviewid);
- jmoldat.alignWithPanel |= structureState
- .hasAlignwithAlignPanel() ? structureState.getAlignwithAlignPanel() : false;
- // never colour by linked panel if not specified
- jmoldat.colourWithAlignPanel |= structureState
- .hasColourwithAlignPanel() ? structureState.getColourwithAlignPanel()
- : false;
- // default for pre-2.7 projects is that Jmol colouring is enabled
- jmoldat.colourByViewer &= structureState
- .hasColourByJmol() ? structureState
+ StructureViewerModel jmoldat = structureViewers.get(sviewid);
+ jmoldat.setAlignWithPanel(jmoldat.isAlignWithPanel()
+ | (structureState.hasAlignwithAlignPanel() ? structureState
+ .getAlignwithAlignPanel() : false));
+
+ /*
+ * Default colour by linked panel to false if not specified (e.g.
+ * for pre-2.7 projects)
+ */
+ boolean colourWithAlignPanel = jmoldat.isColourWithAlignPanel();
+ colourWithAlignPanel |= (structureState
+ .hasColourwithAlignPanel() ? structureState
+ .getColourwithAlignPanel() : false);
+ jmoldat.setColourWithAlignPanel(colourWithAlignPanel);
+
+ /*
+ * Default colour by viewer to true if not specified (e.g. for
+ * pre-2.7 projects)
+ */
+ boolean colourByViewer = jmoldat.isColourByViewer();
+ colourByViewer &= structureState.hasColourByJmol() ? structureState
.getColourByJmol() : true;
+ jmoldat.setColourByViewer(colourByViewer);
- if (jmoldat.stateData.length() < structureState.getContent()
- .length())
+ if (jmoldat.getStateData().length() < structureState
+ .getContent().length())
{
{
- jmoldat.stateData = structureState.getContent();
+ jmoldat.setStateData(structureState.getContent());
}
}
if (ids[p].getFile() != null)
{
File mapkey = new File(ids[p].getFile());
- Object[] seqstrmaps = jmoldat.fileData.get(mapkey);
+ StructureData seqstrmaps = jmoldat.getFileData().get(mapkey);
if (seqstrmaps == null)
{
- jmoldat.fileData.put(mapkey,
- seqstrmaps = new Object[]
- { pdbFile, ids[p].getId(), new Vector(),
- new Vector() });
+ jmoldat.getFileData().put(
+ mapkey,
+ seqstrmaps = jmoldat.new StructureData(pdbFile,
+ ids[p].getId()));
}
- if (!((Vector) seqstrmaps[2]).contains(seq))
+ if (!seqstrmaps.getSeqList().contains(seq))
{
- ((Vector) seqstrmaps[2]).addElement(seq);
- // ((Vector)seqstrmaps[3]).addElement(n) :
- // in principle, chains
- // should be stored here : do we need to
- // TODO: store and recover seq/pdb_id :
- // chain mappings
+ seqstrmaps.getSeqList().add(seq);
+ // TODO and chains?
}
}
else
}
}
}
- // Instantiate the associated structure views
- for (Entry<String, ViewerData> entry : jmolViewIds.entrySet())
+ // Instantiate the associated structure views
+ for (Entry<String, StructureViewerModel> entry : structureViewers
+ .entrySet())
{
- createOrLinkStructureViewer(entry, af, ap);
- }
+ createOrLinkStructureViewer(entry, af, ap);
+ }
}
/**
* @param ap
*/
protected void createOrLinkStructureViewer(
- Entry<String, ViewerData> viewerData, AlignFrame af,
+ Entry<String, StructureViewerModel> viewerData, AlignFrame af,
AlignmentPanel ap)
{
- final ViewerData svattrib = viewerData.getValue();
+ final StructureViewerModel svattrib = viewerData.getValue();
/*
* Search for any viewer windows already open from other alignment views
* Pending an XML element for ViewerType, just check if stateData contains
* "chimera" (part of the chimera session filename).
*/
- if (svattrib.stateData.indexOf("chimera") > -1)
+ if (svattrib.getStateData().indexOf("chimera") > -1)
{
createChimeraViewer(viewerData, af);
}
* @param viewerData
* @param af
*/
- protected void createChimeraViewer(Entry<String, ViewerData> viewerData,
- AlignFrame af)
+ protected void createChimeraViewer(
+ Entry<String, StructureViewerModel> viewerData, AlignFrame af)
{
- final ViewerData svattrib = viewerData.getValue();
- ChimeraViewFrame cvf = new ChimeraViewFrame(svattrib, af);
+ final StructureViewerModel data = viewerData.getValue();
+ String chimeraSession = data.getStateData();
+
+ if (new File(chimeraSession).exists())
+ {
+ Set<Entry<File, StructureData>> fileData = data.getFileData()
+ .entrySet();
+ List<PDBEntry> pdbs = new ArrayList<PDBEntry>();
+ List<SequenceI[]> allseqs = new ArrayList<SequenceI[]>();
+ for (Entry<File, StructureData> pdb : fileData)
+ {
+ String filePath = pdb.getValue().getFilePath();
+ String pdbId = pdb.getValue().getPdbId();
+ pdbs.add(new PDBEntry(filePath, pdbId));
+ final List<SequenceI> seqList = pdb.getValue().getSeqList();
+ SequenceI[] seqs = seqList.toArray(new SequenceI[seqList.size()]);
+ allseqs.add(seqs);
+ }
+
+ boolean colourByChimera = data.isColourByViewer();
+ boolean colourBySequence = data.isColourWithAlignPanel();
+
+ // TODO can/should this be done via StructureViewer (like Jmol)?
+ final PDBEntry[] pdbArray = pdbs.toArray(new PDBEntry[pdbs.size()]);
+ final SequenceI[][] seqsArray = allseqs.toArray(new SequenceI[allseqs
+ .size()][]);
+ new ChimeraViewFrame(chimeraSession, af.alignPanel, pdbArray,
+ seqsArray, colourByChimera, colourBySequence);
+ }
+ else
+ {
+ Cache.log.error("Chimera session file " + chimeraSession
+ + " not found");
+ }
}
/**
* @param af
*/
protected void createJmolViewer(
- final Entry<String, ViewerData> viewerData, AlignFrame af)
+ final Entry<String, StructureViewerModel> viewerData,
+ AlignFrame af)
{
- final ViewerData svattrib = viewerData.getValue();
- String state = svattrib.stateData;
+ final StructureViewerModel svattrib = viewerData.getValue();
+ String state = svattrib.getStateData();
List<String> pdbfilenames = new ArrayList<String>();
List<SequenceI[]> seqmaps = new ArrayList<SequenceI[]>();
List<String> pdbids = new ArrayList<String>();
StringBuilder newFileLoc = new StringBuilder(64);
int cp = 0, ncp, ecp;
- Map<File, Object[]> oldFiles = svattrib.fileData;
+ Map<File, StructureData> oldFiles = svattrib.getFileData();
while ((ncp = state.indexOf("load ", cp)) > -1)
{
do
// 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.add((String) filedat[0]);
- pdbids.add((String) filedat[1]);
- seqmaps.add(((Vector<SequenceI>) filedat[2])
- .toArray(new SequenceI[0]));
+ StructureData filedat = oldFiles.get(new File(oldfilenam));
+ newFileLoc.append(Platform.escapeString(filedat.getFilePath()));
+ pdbfilenames.add(filedat.getFilePath());
+ pdbids.add(filedat.getPdbId());
+ seqmaps.add(filedat.getSeqList().toArray(new SequenceI[0]));
newFileLoc.append("\"");
cp = ecp + 1; // advance beyond last \" and set cursor so we can
// look for next file statement.
{
// add this and any other pdb files that should be present in
// the viewer
- Object[] filedat = oldFiles.get(id);
- String nfilename;
- newFileLoc.append(((String) filedat[0]));
- pdbfilenames.add((String) filedat[0]);
- pdbids.add((String) filedat[1]);
- seqmaps.add(((Vector<SequenceI>) filedat[2])
- .toArray(new SequenceI[0]));
+ StructureData filedat = oldFiles.get(id);
+ newFileLoc.append(filedat.getFilePath());
+ pdbfilenames.add(filedat.getFilePath());
+ pdbids.add(filedat.getPdbId());
+ seqmaps.add(filedat.getSeqList().toArray(new SequenceI[0]));
newFileLoc.append(" \"");
- newFileLoc.append((String) filedat[0]);
+ newFileLoc.append(filedat.getFilePath());
newFileLoc.append("\"");
}
final String fileloc = newFileLoc.toString();
final String sviewid = viewerData.getKey();
final AlignFrame alf = af;
- final java.awt.Rectangle rect = new java.awt.Rectangle(svattrib.x,
- svattrib.y, svattrib.width, svattrib.height);
+ final Rectangle rect = new Rectangle(svattrib.getX(),
+ svattrib.getY(), svattrib.getWidth(), svattrib.getHeight());
try
{
javax.swing.SwingUtilities.invokeAndWait(new Runnable()
* @return
*/
protected StructureViewerBase findMatchingViewer(
- Entry<String, ViewerData> viewerData)
+ Entry<String, StructureViewerModel> viewerData)
{
final String sviewid = viewerData.getKey();
- final ViewerData svattrib = viewerData.getValue();
+ final StructureViewerModel svattrib = viewerData.getValue();
StructureViewerBase comp = null;
JInternalFrame[] frames = getAllFrames();
for (JInternalFrame frame : frames)
* Post jalview 2.4 schema includes structure view id
*/
if (sviewid != null
- && ((StructureViewerBase) frame).getViewId().equals(
- sviewid))
+ && ((StructureViewerBase) frame).getViewId()
+ .equals(sviewid))
{
comp = (AppJmol) frame;
// todo: break?
/*
* Otherwise test for matching position and size of viewer frame
*/
- else if (frame.getX() == svattrib.x && frame.getY() == svattrib.y
- && frame.getHeight() == svattrib.height
- && frame.getWidth() == svattrib.width)
+ else if (frame.getX() == svattrib.getX()
+ && frame.getY() == svattrib.getY()
+ && frame.getHeight() == svattrib.getHeight()
+ && frame.getWidth() == svattrib.getWidth())
{
comp = (AppJmol) frame;
// todo: break?
* @param viewerColouring
*/
protected void linkStructureViewer(AlignmentPanel ap,
- StructureViewerBase viewer, ViewerData svattrib)
+ StructureViewerBase viewer, StructureViewerModel svattrib)
{
// NOTE: if the jalview project is part of a shared session then
// view synchronization should/could be done here.
- final boolean useinViewerSuperpos = svattrib.alignWithPanel;
- final boolean usetoColourbyseq = svattrib.colourWithAlignPanel;
- final boolean viewerColouring = svattrib.colourByViewer;
- Map<File, Object[]> oldFiles = svattrib.fileData;
+ final boolean useinViewerSuperpos = svattrib.isAlignWithPanel();
+ final boolean usetoColourbyseq = svattrib.isColourWithAlignPanel();
+ final boolean viewerColouring = svattrib.isColourByViewer();
+ Map<File, StructureData> oldFiles = svattrib.getFileData();
/*
* Add mapping for sequences in this view to an already open viewer
{
// add this and any other pdb files that should be present in the
// viewer
- Object[] filedat = oldFiles.get(id);
- String pdbFile = (String) filedat[0];
- SequenceI[] seq = ((Vector<SequenceI>) filedat[2])
- .toArray(new SequenceI[0]);
- binding
- .getSsm()
- .setMapping(seq, null, pdbFile,
+ StructureData filedat = oldFiles.get(id);
+ String pdbFile = filedat.getFilePath();
+ SequenceI[] seq = filedat.getSeqList().toArray(new SequenceI[0]);
+ binding.getSsm().setMapping(seq, null, pdbFile,
jalview.io.AppletFormatAdapter.FILE);
binding.addSequenceForStructFile(pdbFile, seq);
}
if (av != null)
{
// propagate shared settings to this new view
- af.viewport.historyList = av.historyList;
- af.viewport.redoList = av.redoList;
+ af.viewport.setHistoryList(av.getHistoryList());
+ af.viewport.setRedoList(av.getRedoList());
}
else
{
af.viewport.setRightAlignIds(view.getRightAlignIds());
af.viewport.setFont(new java.awt.Font(view.getFontName(), view
.getFontStyle(), view.getFontSize()));
- af.alignPanel.fontChanged();
+ // TODO: allow custom charWidth/Heights to be restored by updating them
+ // after setting font
af.viewport.setRenderGaps(view.getRenderGaps());
af.viewport.setWrapAlignment(view.getWrapAlignment());
- af.alignPanel.setWrapAlignment(view.getWrapAlignment());
af.viewport.setShowAnnotation(view.getShowAnnotation());
- af.alignPanel.setAnnotationVisible(view.getShowAnnotation());
af.viewport.setShowBoxes(view.getShowBoxes());
af.viewport.setShowText(view.getShowText());
- af.viewport.textColour = new java.awt.Color(view.getTextCol1());
- af.viewport.textColour2 = new java.awt.Color(view.getTextCol2());
- af.viewport.thresholdTextColour = view.getTextColThreshold();
+ af.viewport.setTextColour(new java.awt.Color(view.getTextCol1()));
+ af.viewport.setTextColour2(new java.awt.Color(view.getTextCol2()));
+ af.viewport.setThresholdTextColour(view.getTextColThreshold());
af.viewport.setShowUnconserved(view.hasShowUnconserved() ? view
.isShowUnconserved() : false);
af.viewport.setStartRes(view.getStartRes());
af.viewport.setStartSeq(view.getStartSeq());
-
+ af.alignPanel.updateLayout();
ColourSchemeI cs = null;
// apply colourschemes
if (view.getBgColour() != null)
af.viewport.setColourAppliesToAllGroups(true);
- if (view.getShowSequenceFeatures())
- {
- af.viewport.showSequenceFeatures = true;
- }
+ af.viewport.setShowSequenceFeatures(view.getShowSequenceFeatures());
+
if (view.hasCentreColumnLabels())
{
af.viewport.setCentreColumnLabels(view.getCentreColumnLabels());
}
if (view.hasShowDbRefTooltip())
{
- af.viewport.setShowDbRefs(view.getShowDbRefTooltip());
+ af.viewport.setShowDBRefs(view.getShowDbRefTooltip());
}
if (view.hasShowNPfeatureTooltip())
{
- af.viewport.setShowNpFeats(view.hasShowNPfeatureTooltip());
+ af.viewport.setShowNPFeats(view.hasShowNPfeatureTooltip());
}
if (view.hasShowGroupConsensus())
{
// recover featre settings
if (jms.getFeatureSettings() != null)
{
- af.viewport.setFeaturesDisplayed(new Hashtable());
+ FeaturesDisplayed fdi;
+ af.viewport.setFeaturesDisplayed(fdi = new FeaturesDisplayed());
String[] renderOrder = new String[jms.getFeatureSettings()
.getSettingCount()];
+ Hashtable featureGroups = new Hashtable();
+ Hashtable featureColours = new Hashtable();
+ Hashtable featureOrder = new Hashtable();
+
for (int fs = 0; fs < jms.getFeatureSettings().getSettingCount(); fs++)
{
Setting setting = jms.getFeatureSettings().getSetting(fs);
gc.setColourByLabel(setting.getColourByLabel());
}
// and put in the feature colour table.
- af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setColour(
- setting.getType(), gc);
+ featureColours.put(setting.getType(), gc);
}
else
{
- af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setColour(
- setting.getType(),
+ featureColours.put(setting.getType(),
new java.awt.Color(setting.getColour()));
}
renderOrder[fs] = setting.getType();
if (setting.hasOrder())
{
- af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setOrder(
- setting.getType(), setting.getOrder());
+ featureOrder.put(setting.getType(), setting.getOrder());
}
else
{
- af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().setOrder(
- setting.getType(),
- fs / jms.getFeatureSettings().getSettingCount());
+ featureOrder.put(setting.getType(), new Float(fs
+ / jms.getFeatureSettings().getSettingCount()));
}
if (setting.getDisplay())
{
- af.viewport.getFeaturesDisplayed().put(setting.getType(), new Integer(
- setting.getColour()));
+ fdi.setVisible(setting.getType());
}
}
- af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().renderOrder = renderOrder;
- Hashtable fgtable;
- af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer().featureGroups = fgtable = new Hashtable();
+ Hashtable fgtable = new Hashtable();
for (int gs = 0; gs < jms.getFeatureSettings().getGroupCount(); gs++)
{
Group grp = jms.getFeatureSettings().getGroup(gs);
fgtable.put(grp.getName(), new Boolean(grp.getDisplay()));
}
+ // FeatureRendererSettings frs = new FeatureRendererSettings(renderOrder,
+ // fgtable, featureColours, jms.getFeatureSettings().hasTransparency() ?
+ // jms.getFeatureSettings().getTransparency() : 0.0, featureOrder);
+ FeatureRendererSettings frs = new FeatureRendererSettings(
+ renderOrder, fgtable, featureColours, 1.0f, featureOrder);
+ af.alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer()
+ .transferSettings(frs);
+
}
if (view.getHiddenColumnsCount() > 0)
{
// JBP TODO: Check this is called for AlCodonFrames to support recovery of
// xRef Codon Maps
- jalview.datamodel.Sequence sq = (jalview.datamodel.Sequence) seqRefIds
- .get(vamsasSeq.getId());
- jalview.datamodel.SequenceI dsq = null;
+ SequenceI sq = seqRefIds.get(vamsasSeq.getId());
+ SequenceI dsq = null;
if (sq != null && sq.getDatasetSequence() != null)
{
dsq = sq.getDatasetSequence();
* local sequence definition
*/
Sequence ms = mc.getSequence();
- jalview.datamodel.Sequence djs = null;
+ SequenceI djs = null;
String sqid = ms.getDsseqid();
if (sqid != null && sqid.length() > 0)
{
/*
* recover dataset sequence
*/
- djs = (jalview.datamodel.Sequence) seqRefIds.get(sqid);
+ djs = seqRefIds.get(sqid);
}
else
{
{
skipList = skipList2;
}
-
}