From bedaaf827545d4e425c98ada89a9dfbff6fc055b Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 14 Sep 2011 11:55:11 +0100 Subject: [PATCH 1/1] patch for NPE (not clear if NPE is evidence of deeper bug in feature renderer state) --- src/jalview/gui/Jalview2XML.java | 177 ++++++++++++++++++++++---------------- 1 file changed, 101 insertions(+), 76 deletions(-) diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 1a9bc03..b899ae9 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -842,7 +842,7 @@ public class Jalview2XML an.setCentreColLabels(aa[i].centreColLabels); an.setScaleColLabels(aa[i].scaleColLabel); an.setShowAllColLabels(aa[i].showAllColLabels); - + if (aa[i].graph > 0) { an.setGraph(true); @@ -909,7 +909,9 @@ public class Jalview2XML an.addAnnotationElement(ae); if (aa[i].autoCalculated) { - // only write one non-null entry into the annotation row - sufficient to get the visualization attributes necessary to display data + // only write one non-null entry into the annotation row - + // sufficient to get the visualization attributes necessary to + // display data continue; } } @@ -1117,40 +1119,43 @@ public class Jalview2XML Vector settingsAdded = new Vector(); Object gstyle = null; GraduatedColor gcol = null; - for (int ro = 0; ro < renderOrder.length; ro++) + if (renderOrder != null) { - gstyle = ap.seqPanel.seqCanvas.getFeatureRenderer() - .getFeatureStyle(renderOrder[ro]); - Setting setting = new Setting(); - setting.setType(renderOrder[ro]); - if (gstyle instanceof GraduatedColor) - { - gcol = (GraduatedColor) gstyle; - setting.setColour(gcol.getMaxColor().getRGB()); - setting.setMincolour(gcol.getMinColor().getRGB()); - setting.setMin(gcol.getMin()); - setting.setMax(gcol.getMax()); - setting.setColourByLabel(gcol.isColourByLabel()); - setting.setAutoScale(gcol.isAutoScale()); - setting.setThreshold(gcol.getThresh()); - setting.setThreshstate(gcol.getThreshType()); - } - else + for (int ro = 0; ro < renderOrder.length; ro++) { - setting.setColour(ap.seqPanel.seqCanvas.getFeatureRenderer() - .getColour(renderOrder[ro]).getRGB()); - } + gstyle = ap.seqPanel.seqCanvas.getFeatureRenderer() + .getFeatureStyle(renderOrder[ro]); + Setting setting = new Setting(); + setting.setType(renderOrder[ro]); + if (gstyle instanceof GraduatedColor) + { + gcol = (GraduatedColor) gstyle; + setting.setColour(gcol.getMaxColor().getRGB()); + setting.setMincolour(gcol.getMinColor().getRGB()); + setting.setMin(gcol.getMin()); + setting.setMax(gcol.getMax()); + setting.setColourByLabel(gcol.isColourByLabel()); + setting.setAutoScale(gcol.isAutoScale()); + setting.setThreshold(gcol.getThresh()); + setting.setThreshstate(gcol.getThreshType()); + } + else + { + setting.setColour(ap.seqPanel.seqCanvas.getFeatureRenderer() + .getColour(renderOrder[ro]).getRGB()); + } - setting.setDisplay(av.featuresDisplayed - .containsKey(renderOrder[ro])); - float rorder = ap.seqPanel.seqCanvas.getFeatureRenderer().getOrder( - renderOrder[ro]); - if (rorder > -1) - { - setting.setOrder(rorder); + setting.setDisplay(av.featuresDisplayed + .containsKey(renderOrder[ro])); + float rorder = ap.seqPanel.seqCanvas.getFeatureRenderer() + .getOrder(renderOrder[ro]); + if (rorder > -1) + { + setting.setOrder(rorder); + } + fs.addSetting(setting); + settingsAdded.addElement(renderOrder[ro]); } - fs.addSetting(setting); - settingsAdded.addElement(renderOrder[ro]); } // Make sure we save none displayed feature settings @@ -2088,7 +2093,7 @@ public class Jalview2XML /** * store any annotations which forward reference a group's ID */ - Hashtable> groupAnnotRefs = new Hashtable>(); + Hashtable> groupAnnotRefs = new Hashtable>(); if (vamsasSet.getAnnotationCount() > 0) { @@ -2111,7 +2116,9 @@ public class Jalview2XML an[i].setAutoCalculated(true); } } - if (autoForView || (an[i].hasAutoCalculated() && an[i].isAutoCalculated())) { + if (autoForView + || (an[i].hasAutoCalculated() && an[i].isAutoCalculated())) + { // remove ID - we don't recover annotation from other views for // view-specific annotation an[i].setId(null); @@ -2168,12 +2175,13 @@ public class Jalview2XML if (an[i].getGraph()) { - float llim=0,hlim=0; - // if (autoForView || an[i].isAutoCalculated()) { - // hlim=11f; - // } + float llim = 0, hlim = 0; + // if (autoForView || an[i].isAutoCalculated()) { + // hlim=11f; + // } jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(), - an[i].getDescription(), anot, llim, hlim, an[i].getGraphType()); + an[i].getDescription(), anot, llim, hlim, + an[i].getGraphType()); jaa.graphGroup = an[i].getGraphGroup(); @@ -2185,9 +2193,11 @@ public class Jalview2XML an[i].getThresholdLine().getColour()))); } - if (autoForView || an[i].isAutoCalculated()) { - // Hardwire the symbol display line to ensure that labels for histograms are displayed - jaa.hasText=true; + if (autoForView || an[i].isAutoCalculated()) + { + // Hardwire the symbol display line to ensure that labels for + // histograms are displayed + jaa.hasText = true; } } else @@ -2218,10 +2228,12 @@ public class Jalview2XML // and make a note of any group association if (an[i].getGroupRef() != null && an[i].getGroupRef().length() > 0) { - ArrayList aal=groupAnnotRefs.get(an[i].getGroupRef()); - if (aal==null) { + ArrayList aal = groupAnnotRefs + .get(an[i].getGroupRef()); + if (aal == null) + { aal = new ArrayList(); - groupAnnotRefs.put(an[i].getGroupRef(),aal); + groupAnnotRefs.put(an[i].getGroupRef(), aal); } aal.add(jaa); } @@ -2254,10 +2266,12 @@ public class Jalview2XML if (jaa.autoCalculated) { autoAlan.add(new JvAnnotRow(i, jaa)); - } else + } + else // if (!autoForView) { - // add autocalculated group annotation and any user created annotation for the view + // add autocalculated group annotation and any user created annotation + // for the view al.addAnnotation(jaa); } } @@ -2352,19 +2366,24 @@ public class Jalview2XML .get(groups[i].getId()); if (jaal != null) { - for (jalview.datamodel.AlignmentAnnotation jaa:jaal) { + for (jalview.datamodel.AlignmentAnnotation jaa : jaal) + { jaa.groupRef = sg; if (jaa.autoCalculated) { - // match up and try to set group autocalc alignment row for this annotation - if (jaa.label.startsWith("Consensus for ")) { + // match up and try to set group autocalc alignment row for this + // annotation + if (jaa.label.startsWith("Consensus for ")) + { sg.setConsensus(jaa); } - // match up and try to set group autocalc alignment row for this annotation - if (jaa.label.startsWith("Conservation for ")) { + // match up and try to set group autocalc alignment row for this + // annotation + if (jaa.label.startsWith("Conservation for ")) + { sg.setConservationRow(jaa); - } } + } } } } @@ -2575,10 +2594,11 @@ public class Jalview2XML { x, y, width, height }, "", new Hashtable(), new boolean[] { false, false, true } }); - // Legacy pre-2.7 conversion JAL-823 : - // do not assume any view has to be linked for colour by sequence + // Legacy pre-2.7 conversion JAL-823 : + // do not assume any view has to be linked for colour by + // sequence } - + // assemble String[] { pdb files }, String[] { id for each // file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, { // seqs_file 2}, boolean[] { @@ -2593,7 +2613,9 @@ public class Jalview2XML .getStructureState(s).getColourwithAlignPanel() : false; // default for pre-2.7 projects is that Jmol colouring is enabled - ((boolean[])jmoldat[3])[2] &=ids[p].getStructureState(s).hasColourByJmol() ? ids[p].getStructureState(s).getColourByJmol() : true; + ((boolean[]) jmoldat[3])[2] &= ids[p].getStructureState(s) + .hasColourByJmol() ? ids[p].getStructureState(s) + .getColourByJmol() : true; if (((String) jmoldat[1]).length() < ids[p] .getStructureState(s).getContent().length()) @@ -2626,7 +2648,7 @@ public class Jalview2XML } else { - errorMessage=("The Jmol views in the Jalview 2 project may\nnot be correctly bound to sequences in the alignment.\nIn the case of problems, see note at\nhttp://issues.jalview.org/browse/JAL-747"); + errorMessage = ("The Jmol views in the Jalview 2 project may\nnot be correctly bound to sequences in the alignment.\nIn the case of problems, see note at\nhttp://issues.jalview.org/browse/JAL-747"); warn(errorMessage); } } @@ -2643,7 +2665,7 @@ public class Jalview2XML int[] geom = (int[]) svattrib[0]; String state = (String) svattrib[1]; Hashtable oldFiles = (Hashtable) svattrib[2]; - final boolean useinJmolsuperpos = ((boolean[]) svattrib[3])[0], usetoColourbyseq = ((boolean[]) svattrib[3])[1], jmolColouring=((boolean[])svattrib[3])[2]; + final boolean useinJmolsuperpos = ((boolean[]) svattrib[3])[0], usetoColourbyseq = ((boolean[]) svattrib[3])[1], jmolColouring = ((boolean[]) svattrib[3])[2]; int x = geom[0], y = geom[1], width = geom[2], height = geom[3]; // collate the pdbfile -> sequence mappings from this view Vector pdbfilenames = new Vector(); @@ -2799,8 +2821,8 @@ public class Jalview2XML try { sview = new AppJmol(pdbf, id, sq, alf.alignPanel, - useinJmolsuperpos, usetoColourbyseq, jmolColouring, fileloc, - rect, vid); + useinJmolsuperpos, usetoColourbyseq, + jmolColouring, fileloc, rect, vid); } catch (OutOfMemoryError ex) { new OOMWarning("restoring structure view for PDB id " @@ -2842,7 +2864,7 @@ public class Jalview2XML SequenceI[] seq = (SequenceI[]) ((Vector) filedat[2]) .toArray(new SequenceI[0]); ((AppJmol) comp).jmb.ssm.setMapping(seq, null, pdbFile, - jalview.io.AppletFormatAdapter.FILE); + jalview.io.AppletFormatAdapter.FILE); ((AppJmol) comp).jmb.addSequenceForStructFile(pdbFile, seq); } // and add the AlignmentPanel's reference to the Jmol view @@ -2857,7 +2879,8 @@ public class Jalview2XML } if (usetoColourbyseq) { - ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap, !jmolColouring); + ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap, + !jmolColouring); } else { @@ -3239,14 +3262,14 @@ public class Jalview2XML Desktop.addInternalFrame(af, view.getTitle(), view.getWidth(), view.getHeight()); af.alignPanel.updateAnnotation(false); // recompute any autoannotation - reorderAutoannotation(af,al,autoAlan); + reorderAutoannotation(af, al, autoAlan); return af; } private void reorderAutoannotation(AlignFrame af, Alignment al, ArrayList autoAlan) { - // copy over visualization settings for autocalculated annotation in the + // copy over visualization settings for autocalculated annotation in the // view if (al.getAlignmentAnnotation() != null) { @@ -3277,32 +3300,34 @@ public class Jalview2XML if (valan != null) { // delete the auto calculated row from the alignment - al.deleteAnnotation(al.getAlignmentAnnotation()[h],false); + al.deleteAnnotation(al.getAlignmentAnnotation()[h], false); hSize--; h--; if (valan != nullAnnot) { - if (jalan!=valan.template) { + if (jalan != valan.template) + { // newly created autoannotation row instance // so keep a reference to the visible annotation row // and copy over all relevant attributes - if (valan.template.graphHeight >= 0) - - { - jalan.graphHeight = valan.template.graphHeight; - } - jalan.visible = valan.template.visible; + if (valan.template.graphHeight >= 0) + + { + jalan.graphHeight = valan.template.graphHeight; + } + jalan.visible = valan.template.visible; } reorder.add(new JvAnnotRow(valan.order, jalan)); } } } } - int s=0,srt[] = new int[reorder.size()]; + int s = 0, srt[] = new int[reorder.size()]; JvAnnotRow[] rws = new JvAnnotRow[reorder.size()]; - for (JvAnnotRow jvar:reorder) { + for (JvAnnotRow jvar : reorder) + { rws[s] = jvar; - srt[s++]=jvar.order; + srt[s++] = jvar.order; } reorder.clear(); jalview.util.QuickSort.sort(srt, rws); -- 1.7.10.2