From: Jim Procter Date: Mon, 18 Jul 2016 13:01:49 +0000 (+0100) Subject: Merge branch 'features/JAL-2068groovyAnnotationWorker' into develop X-Git-Tag: Release_2_10_0~138^2~7 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=c956ba7509e394cf70dbf049abe5fbc967222144;hp=-c;p=jalview.git Merge branch 'features/JAL-2068groovyAnnotationWorker' into develop minor conflicts in constructor/imports for unification of Graduated/FeatureColour --- c956ba7509e394cf70dbf049abe5fbc967222144 diff --combined src/jalview/appletgui/FeatureRenderer.java index 3f87549,d774131..81d8ef5 --- a/src/jalview/appletgui/FeatureRenderer.java +++ b/src/jalview/appletgui/FeatureRenderer.java @@@ -20,13 -20,11 +20,13 @@@ */ package jalview.appletgui; +import jalview.api.FeatureColourI; import jalview.datamodel.SearchResults; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; -import jalview.schemes.AnnotationColourGradient; -import jalview.schemes.GraduatedColor; +import jalview.io.FeaturesFile; +import jalview.schemes.FeatureColour; +import jalview.schemes.UserColourScheme; import jalview.util.MessageManager; import jalview.viewmodel.AlignmentViewport; @@@ -45,9 -43,6 +45,9 @@@ import java.awt.TextArea import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Hashtable; /** * DOCUMENT ME! @@@ -58,20 -53,16 +58,20 @@@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRenderer { + + // Holds web links for feature groups and feature types + // in the form label|link + Hashtable featureLinks = null; + /** * Creates a new FeatureRenderer object. * * @param av */ public FeatureRenderer(AlignmentViewport av) { - super(); - this.av = av; + super(av); + } static String lastFeatureAdded; @@@ -97,35 -88,51 +97,35 @@@ /** * render a feature style in the amend feature dialog box */ - public void updateColor(Object newcol) + public void updateColor(FeatureColourI newcol) { - - Color bg, col = null; - GraduatedColor gcol = null; + Color bg = null; String vlabel = ""; - if (newcol instanceof Color) + if (newcol.isSimpleColour()) { - isGcol = false; - col = (Color) newcol; - gcol = null; - } - else if (newcol instanceof GraduatedColor) - { - isGcol = true; - gcol = (GraduatedColor) newcol; - col = null; + bg = newcol.getColour(); + setBackground(bg); } else { - throw new Error( - MessageManager - .getString("error.invalid_colour_for_mycheckbox")); - } - if (col != null) - { - setBackground(bg = col); - } - else - { - if (gcol.getThreshType() != AnnotationColourGradient.NO_THRESHOLD) + if (newcol.isAboveThreshold()) { - vlabel += " " - + ((gcol.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)" - : "(<)"); + vlabel += " (>)"; } - if (isColourByLabel = gcol.isColourByLabel()) + else if (newcol.isBelowThreshold()) + { + vlabel += " (<)"; + } + + if (isColourByLabel = newcol.isColourByLabel()) { setBackground(bg = Color.white); vlabel += " (by Label)"; } else { - setBackground(bg = gcol.getMinColor()); - maxCol = gcol.getMaxColor(); + setBackground(bg = newcol.getMinColour()); + maxCol = newcol.getMaxColour(); } } label = vlabel; @@@ -232,12 -239,11 +232,12 @@@ ap.seqPanel.seqCanvas.highlightSearchResults(highlight); } - Object col = getFeatureStyle(name.getText()); + FeatureColourI col = getFeatureStyle(name.getText()); if (col == null) { - col = new jalview.schemes.UserColourScheme() + Color generatedColour = UserColourScheme .createColourFromName(name.getText()); + col = new FeatureColour(generatedColour); } colourPanel.updateColor(col); @@@ -345,16 -351,15 +345,16 @@@ start.setText(features[0].getBegin() + ""); end.setText(features[0].getEnd() + ""); description.setText(features[0].getDescription()); - Object fcol = getFeatureStyle(name.getText()); + // lookup (or generate) the feature colour + FeatureColourI fcol = getFeatureStyle(name.getText()); // simply display the feature color in a box colourPanel.updateColor(fcol); dialog.setResizable(true); // TODO: render the graduated color in the box. - colourPanel.addMouseListener(new java.awt.event.MouseAdapter() + colourPanel.addMouseListener(new MouseAdapter() { @Override - public void mousePressed(java.awt.event.MouseEvent evt) + public void mousePressed(MouseEvent evt) { if (!colourPanel.isGcol) { @@@ -362,14 -367,15 +362,14 @@@ } else { - FeatureColourChooser fcc = new FeatureColourChooser( - ap.alignFrame, name.getText()); + new FeatureColourChooser(ap.alignFrame, name.getText()); dialog.transferFocus(); } } }); dialog.setVisible(true); - jalview.io.FeaturesFile ffile = new jalview.io.FeaturesFile(); + FeaturesFile ffile = new FeaturesFile(); if (dialog.accept) { @@@ -398,7 -404,7 +398,7 @@@ if (!colourPanel.isGcol) { // update colour - otherwise its already done. - setColour(sf.type, colourPanel.getBackground()); + setColour(sf.type, new FeatureColour(colourPanel.getBackground())); } try { @@@ -438,7 -444,7 +438,7 @@@ { setGroupVisibility(lastFeatureGroupAdded, true); } - setColour(lastFeatureAdded, newColour); // was fcol + setColour(lastFeatureAdded, new FeatureColour(newColour)); // was fcol setVisible(lastFeatureAdded); findAllFeatures(false); // different to original applet behaviour ? // findAllFeatures(); diff --combined src/jalview/gui/FeatureRenderer.java index 1bf7453,61e99ac..727c13b --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@@ -20,12 -20,10 +20,12 @@@ */ package jalview.gui; +import jalview.api.FeatureColourI; import jalview.datamodel.SearchResults; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; -import jalview.schemes.GraduatedColor; +import jalview.schemes.FeatureColour; +import jalview.schemes.UserColourScheme; import jalview.util.MessageManager; import java.awt.BorderLayout; @@@ -75,9 -73,8 +75,8 @@@ public class FeatureRenderer extend */ public FeatureRenderer(AlignmentPanel ap) { - super(); + super(ap.av); this.ap = ap; - this.av = ap.av; if (ap != null && ap.getSeqPanel() != null && ap.getSeqPanel().seqCanvas != null && ap.getSeqPanel().seqCanvas.fr != null) @@@ -96,7 -93,7 +95,7 @@@ static String lastDescriptionAdded; - Object oldcol, fcol; + FeatureColourI oldcol, fcol; int featureIndex = 0; @@@ -128,19 -125,20 +127,19 @@@ @Override public void mousePressed(MouseEvent evt) { - if (fcol instanceof Color) + if (fcol.isSimpleColour()) { Color col = JColorChooser.showDialog(Desktop.desktop, MessageManager.getString("label.select_feature_colour"), - ((Color) fcol)); + fcol.getColour()); if (col != null) { - fcol = col; - updateColourButton(bigPanel, colour, col); + fcol = new FeatureColour(col); + updateColourButton(bigPanel, colour, new FeatureColour(col)); } } else { - if (fcc == null) { final String type = features[featureIndex].getType(); @@@ -207,11 -205,11 +206,11 @@@ ap.getSeqPanel().seqCanvas.highlightSearchResults(highlight); } - Object col = getFeatureStyle(name.getText()); + FeatureColourI col = getFeatureStyle(name.getText()); if (col == null) { - col = new jalview.schemes.UserColourScheme() - .createColourFromName(name.getText()); + col = new FeatureColour(UserColourScheme + .createColourFromName(name.getText())); } oldcol = fcol = col; updateColourButton(bigPanel, colour, col); @@@ -422,25 -420,26 +421,25 @@@ * * @param bigPanel * @param col - * @param col2 + * @param col */ protected void updateColourButton(JPanel bigPanel, JLabel colour, - Object col2) + FeatureColourI col) { colour.removeAll(); colour.setIcon(null); colour.setToolTipText(null); colour.setText(""); - if (col2 instanceof Color) + if (col.isSimpleColour()) { - colour.setBackground((Color) col2); + colour.setBackground(col.getColour()); } else { colour.setBackground(bigPanel.getBackground()); colour.setForeground(Color.black); - FeatureSettings.renderGraduatedColor(colour, (GraduatedColor) col2); - // colour.setForeground(colour.getBackground()); + FeatureSettings.renderGraduatedColor(colour, col); } } diff --combined src/jalview/renderer/seqfeatures/FeatureRenderer.java index 5d3aa2d,8c6bc5e..b007365 --- a/src/jalview/renderer/seqfeatures/FeatureRenderer.java +++ b/src/jalview/renderer/seqfeatures/FeatureRenderer.java @@@ -20,6 -20,7 +20,7 @@@ */ package jalview.renderer.seqfeatures; + import jalview.api.AlignViewportI; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.viewmodel.seqfeatures.FeatureRendererModel; @@@ -50,8 -51,16 +51,18 @@@ public class FeatureRenderer extends Fe boolean av_validCharWidth, av_isShowSeqFeatureHeight; + private Integer currentColour; + + /** + * Constructor given a viewport + * + * @param viewport + */ + public FeatureRenderer(AlignViewportI viewport) + { + this.av = viewport; + } + protected void updateAvConfig() { av_charHeight = av.getCharHeight(); @@@ -177,8 -186,8 +188,8 @@@ } /** - * This is used by the Molecule Viewer and Overview to get the accurate - * colourof the rendered sequence + * This is used by the Molecule Viewer and Overview to get the accurate colour + * of the rendered sequence */ public synchronized int findFeatureColour(int initialCol, final SequenceI seq, int column) @@@ -248,7 -257,7 +259,7 @@@ } else { - return ((Integer) currentColour).intValue(); + return currentColour.intValue(); } } diff --combined src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java index a4e4348,ee0721d..d813fe2 --- a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java +++ b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java @@@ -27,9 -27,7 +27,8 @@@ import jalview.datamodel.AlignmentI import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.renderer.seqfeatures.FeatureRenderer; -import jalview.schemes.GraduatedColor; +import jalview.schemes.FeatureColour; +import jalview.schemes.UserColourScheme; - import jalview.viewmodel.AlignmentViewport; import java.awt.Color; import java.beans.PropertyChangeListener; @@@ -53,19 -51,28 +52,19 @@@ public abstract class FeatureRendererMo */ protected float transparency = 1.0f; - protected Map featureColours = new ConcurrentHashMap(); + protected Map featureColours = new ConcurrentHashMap(); protected Map featureGroups = new ConcurrentHashMap(); - protected Object currentColour; - - /* - * feature types in ordering of rendering, where last means on top - */ protected String[] renderOrder; + Map featureOrder = null; + protected PropertyChangeSupport changeSupport = new PropertyChangeSupport( this); - protected AlignmentViewport av; + protected AlignViewportI av; - /* - * map holds per feature type, {{min, max}, {min, max}} feature score - * values for positional and non-positional features respectively - */ - private Map minmax = new Hashtable(); - @Override public AlignViewportI getViewport() { @@@ -192,8 -199,6 +191,8 @@@ renderOrder = neworder; } + protected Map minmax = new Hashtable(); + public Map getMinMax() { return minmax; @@@ -443,6 -448,7 +442,6 @@@ List allfeatures = new ArrayList(allFeatures); String[] oldRender = renderOrder; renderOrder = new String[allfeatures.size()]; - Object mmrange, fc = null; boolean initOrders = (featureOrder == null); int opos = 0; if (oldRender != null && oldRender.length > 0) @@@ -462,13 -468,16 +461,13 @@@ allfeatures.remove(oldRender[j]); if (minmax != null) { - mmrange = minmax.get(oldRender[j]); + float[][] mmrange = minmax.get(oldRender[j]); if (mmrange != null) { - fc = featureColours.get(oldRender[j]); - if (fc != null && fc instanceof GraduatedColor - && ((GraduatedColor) fc).isAutoScale()) + FeatureColourI fc = featureColours.get(oldRender[j]); + if (fc != null && !fc.isSimpleColour() && fc.isAutoScaled()) { - ((GraduatedColor) fc).updateBounds( - ((float[][]) mmrange)[0][0], - ((float[][]) mmrange)[0][1]); + fc.updateBounds(mmrange[0][0], mmrange[0][1]); } } } @@@ -492,13 -501,15 +491,13 @@@ if (minmax != null) { // update from new features minmax if necessary - mmrange = minmax.get(newf[i]); + float[][] mmrange = minmax.get(newf[i]); if (mmrange != null) { - fc = featureColours.get(newf[i]); - if (fc != null && fc instanceof GraduatedColor - && ((GraduatedColor) fc).isAutoScale()) + FeatureColourI fc = featureColours.get(newf[i]); + if (fc != null && !fc.isSimpleColour() && fc.isAutoScaled()) { - ((GraduatedColor) fc).updateBounds(((float[][]) mmrange)[0][0], - ((float[][]) mmrange)[0][1]); + fc.updateBounds(mmrange[0][0], mmrange[0][1]); } } } @@@ -510,7 -521,7 +509,7 @@@ setOrder(newf[i], i / (float) denom); } // set order from newly found feature from persisted ordering. - sortOrder[i] = 2 - ((Float) featureOrder.get(newf[i])).floatValue(); + sortOrder[i] = 2 - featureOrder.get(newf[i]).floatValue(); if (i < iSize) { // only sort if we need to @@@ -528,20 -539,22 +527,20 @@@ /** * get a feature style object for the given type string. Creates a - * java.awt.Color for a featureType with no existing colourscheme. TODO: - * replace return type with object implementing standard abstract colour/style - * interface + * java.awt.Color for a featureType with no existing colourscheme. * * @param featureType - * @return java.awt.Color or GraduatedColor + * @return */ @Override - public Object getFeatureStyle(String featureType) + public FeatureColourI getFeatureStyle(String featureType) { - Object fc = featureColours.get(featureType); + FeatureColourI fc = featureColours.get(featureType); if (fc == null) { - jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(); - Color col = ucs.createColourFromName(featureType); - featureColours.put(featureType, fc = col); + Color col = UserColourScheme.createColourFromName(featureType); + fc = new FeatureColour(col); + featureColours.put(featureType, fc); } return fc; } @@@ -555,14 -568,33 +554,14 @@@ */ public Color getColour(SequenceFeature feature) { - Object fc = getFeatureStyle(feature.getType()); - if (fc instanceof Color) - { - return (Color) fc; - } - else - { - if (fc instanceof GraduatedColor) - { - return ((GraduatedColor) fc).findColor(feature); - } - } - throw new Error("Implementation Error: Unrecognised render object " - + fc.getClass() + " for features of type " + feature.getType()); + FeatureColourI fc = getFeatureStyle(feature.getType()); + return fc.getColor(feature); } protected boolean showFeature(SequenceFeature sequenceFeature) { - Object fc = getFeatureStyle(sequenceFeature.type); - if (fc instanceof GraduatedColor) - { - return ((GraduatedColor) fc).isColored(sequenceFeature); - } - else - { - return true; - } + FeatureColourI fc = getFeatureStyle(sequenceFeature.type); + return fc.isColored(sequenceFeature); } protected boolean showFeatureOfType(String type) @@@ -571,9 -603,26 +570,9 @@@ } @Override - public void setColour(String featureType, Object col) + public void setColour(String featureType, FeatureColourI col) { - // overwrite - // Color _col = (col instanceof Color) ? ((Color) col) : (col instanceof - // GraduatedColor) ? ((GraduatedColor) col).getMaxColor() : null; - // Object c = featureColours.get(featureType); - // if (c == null || c instanceof Color || (c instanceof GraduatedColor && - // !((GraduatedColor)c).getMaxColor().equals(_col))) - if (col instanceof FeatureColourI) - { - if (((FeatureColourI) col).isGraduatedColour()) - { - col = new GraduatedColor((FeatureColourI) col); - } - else - { - col = ((FeatureColourI) col).getColour(); - } - } - featureColours.put(featureType, col); + featureColours.put(featureType, col); } public void setTransparency(float value) @@@ -586,6 -635,8 +585,6 @@@ return transparency; } - Map featureOrder = null; - /** * analogous to colour - store a normalized ordering for all feature types in * this rendering context. @@@ -600,7 -651,7 +599,7 @@@ { if (featureOrder == null) { - featureOrder = new Hashtable(); + featureOrder = new Hashtable(); } featureOrder.put(type, new Float(position)); return position; @@@ -618,14 -669,14 +617,14 @@@ { if (featureOrder.containsKey(type)) { - return ((Float) featureOrder.get(type)).floatValue(); + return featureOrder.get(type).floatValue(); } } return -1; } @Override - public Map getFeatureColours() + public Map getFeatureColours() { return featureColours; } @@@ -658,7 -709,7 +657,7 @@@ * note visible feature ordering and colours before update */ List visibleFeatures = getDisplayedFeatureTypes(); - Map visibleColours = new HashMap( + Map visibleColours = new HashMap( getFeatureColours()); FeaturesDisplayedI av_featuresdisplayed = null; @@@ -691,7 -742,8 +690,7 @@@ for (int i = 0; i < data.length; i++) { String type = data[i][0].toString(); - setColour(type, data[i][1]); // todo : typesafety - feature color - // interface object + setColour(type, (FeatureColourI) data[i][1]); if (((Boolean) data[i][2]).booleanValue()) { av_featuresdisplayed.setVisible(type); @@@ -816,9 -868,9 +815,9 @@@ { if (featureGroups != null) { - ArrayList gp = new ArrayList(); + List gp = new ArrayList(); - for (Object grp : featureGroups.keySet()) + for (String grp : featureGroups.keySet()) { Boolean state = featureGroups.get(grp); if (state.booleanValue() == visible) @@@ -860,19 -912,19 +859,19 @@@ } @Override - public Hashtable getDisplayedFeatureCols() + public Map getDisplayedFeatureCols() { - Hashtable fcols = new Hashtable(); + Map fcols = new Hashtable(); if (getViewport().getFeaturesDisplayed() == null) { return fcols; } - Iterator en = getViewport().getFeaturesDisplayed() + Iterator features = getViewport().getFeaturesDisplayed() .getVisibleFeatures(); - while (en.hasNext()) + while (features.hasNext()) { - String col = en.next(); - fcols.put(col, featureColours.get(col)); + String feature = features.next(); + fcols.put(feature, getFeatureStyle(feature)); } return fcols; } diff --combined src/jalview/workers/StrucConsensusThread.java index 4249112,1944e76..5ed2885 --- a/src/jalview/workers/StrucConsensusThread.java +++ b/src/jalview/workers/StrucConsensusThread.java @@@ -94,15 -94,12 +94,15 @@@ public class StrucConsensusThread exten .getAlignmentAnnotation(); AlignmentAnnotation rnaStruc = null; // select rna struct to use for calculation - for (int i = 0; i < aa.length; i++) + if (aa != null) { - if (aa[i].visible && aa[i].isRNA() && aa[i].isValidStruc()) + for (int i = 0; i < aa.length; i++) { - rnaStruc = aa[i]; - break; + if (aa[i].visible && aa[i].isRNA() && aa[i].isValidStruc()) + { + rnaStruc = aa[i]; + break; + } } } // check to see if its valid @@@ -129,7 -126,7 +129,7 @@@ updateResultAnnotation(true); } catch (OutOfMemoryError error) { - calcMan.workerCannotRun(this); + calcMan.disableWorker(this); // consensus = null; // hconsensus = null;