X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=srcjar%2Ffr%2Forsay%2Flri%2Fvarna%2Fmodels%2FVARNAConfig.java;fp=srcjar%2Ffr%2Forsay%2Flri%2Fvarna%2Fmodels%2FVARNAConfig.java;h=c6fb103628752705e2b7b90ce8b6a6dddb2799ff;hb=ec8f3cedf60fb1feed6d34de6b49f6bfa78b9dd8;hp=0000000000000000000000000000000000000000;hpb=056dad85a910551cc95e44d451a61f6b8c4dd35d;p=jalview.git diff --git a/srcjar/fr/orsay/lri/varna/models/VARNAConfig.java b/srcjar/fr/orsay/lri/varna/models/VARNAConfig.java new file mode 100644 index 0000000..c6fb103 --- /dev/null +++ b/srcjar/fr/orsay/lri/varna/models/VARNAConfig.java @@ -0,0 +1,395 @@ +/* + VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases. + Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty. + electronic mail : Yann.Ponty@lri.fr + paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France + + This file is part of VARNA version 3.1. + VARNA version 3.1 is free software: you can redistribute it and/or 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. + + VARNA version 3.1 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 VARNA version 3.1. + If not, see http://www.gnu.org/licenses. + */ +package fr.orsay.lri.varna.models; + +import java.awt.Color; +import java.awt.Font; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +import javax.xml.transform.sax.TransformerHandler; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +import fr.orsay.lri.varna.models.annotations.HighlightRegionAnnotation; +import fr.orsay.lri.varna.models.annotations.TextAnnotation; +import fr.orsay.lri.varna.models.rna.ModeleBP; +import fr.orsay.lri.varna.models.rna.ModeleBPStyle; +import fr.orsay.lri.varna.models.rna.ModeleBase; +import fr.orsay.lri.varna.models.rna.ModeleColorMap; +import fr.orsay.lri.varna.utils.XMLUtils; + +public class VARNAConfig implements Serializable, Cloneable { + + /** + * + */ + private static final long serialVersionUID = 2853916694420964233L; + /** + * + */ + public static final int MAJOR_VERSION = 3; + public static final int MINOR_VERSION = 9; + + public static String getFullName() + { + return "VARNA "+MAJOR_VERSION+"."+MINOR_VERSION; + } + + /** + * Enum types and internal classes + */ + + public enum BP_STYLE implements Serializable { + NONE, SIMPLE, RNAVIZ, LW, LW_ALT; + public String toString() + { + switch(this) + { + case LW: return "Leontis/Westhof (Centered)"; + case SIMPLE: return "Line"; + case RNAVIZ: return "Circles"; + case NONE: return "None"; + case LW_ALT: return "Leontis/Westhof (End)"; + } + return "Unspecified"; + } + public String getOpt() + { + switch(this) + { + case NONE: return "none"; + case SIMPLE: return "simple"; + case LW: return "lw"; + case RNAVIZ: return "rnaviz"; + case LW_ALT: return "lwalt"; + } + return "x"; + } + public static BP_STYLE getStyle(String opt) + { + for(BP_STYLE b: BP_STYLE.values()) + { + if (opt.toLowerCase().equals(b.getOpt().toLowerCase())) + return b; + } + return null; + } + }; + + /** + * Default values for config options + */ + + public static final double MAX_ZOOM = 60; + public static final double MIN_ZOOM = 0.5; + public static final double DEFAULT_ZOOM = 1; + public static final double MAX_AMOUNT = 2; + public static final double MIN_AMOUNT = 1.01; + public static final double DEFAULT_AMOUNT = 1.2; + public static final double DEFAULT_BP_THICKNESS = 1.0; + public static final double DEFAULT_DIST_NUMBERS = 3.0; + + public static final int DEFAULT_PERIOD = 10; + + public static final Color DEFAULT_TITLE_COLOR = Color.black; + public static final Color DEFAULT_BACKBONE_COLOR = Color.DARK_GRAY.brighter(); + public static final Color DEFAULT_BOND_COLOR = Color.blue; + public static final Color DEFAULT_SPECIAL_BASE_COLOR = Color.green.brighter(); + public static final Color DEFAULT_DASH_BASE_COLOR = Color.yellow.brighter(); + public static final double DEFAULT_BASE_OUTLINE_THICKNESS = 1.5; + public static final Color BASE_OUTLINE_COLOR_DEFAULT = Color.DARK_GRAY.brighter(); + public static final Color BASE_INNER_COLOR_DEFAULT = new Color(242, 242,242); + public static final Color BASE_NUMBER_COLOR_DEFAULT = Color.DARK_GRAY; + public static final Color BASE_NAME_COLOR_DEFAULT = Color.black; + + public static final Color DEFAULT_HOVER_COLOR = new Color(230, 230,230); + + public static final Color DEFAULT_BACKGROUND_COLOR = Color.WHITE; + public static final Font DEFAULT_TITLE_FONT = new Font("SansSerif", Font.BOLD,18); + public static final Font DEFAULT_BASE_FONT = new Font("SansSerif", Font.PLAIN, 18); + public static final Font DEFAULT_NUMBERS_FONT = new Font("SansSerif", + Font.BOLD, 18); + public static final Font DEFAULT_MESSAGE_FONT = Font.decode("dialog-PLAIN-25"); + public static final Color DEFAULT_MESSAGE_COLOR = new Color(230, 230,230); + + + public static final BP_STYLE DEFAULT_BP_STYLE = BP_STYLE.LW; + + public static final ModeleColorMap DEFAULT_COLOR_MAP = ModeleColorMap.defaultColorMap(); + public static final Color DEFAULT_COLOR_MAP_OUTLINE = Color.gray; + public static final double DEFAULT_BP_INCREMENT = 0.65; + + public static double DEFAULT_COLOR_MAP_WIDTH = 120; + public static double DEFAULT_COLOR_MAP_HEIGHT = 30; + public static double DEFAULT_COLOR_MAP_X_OFFSET = 40; + public static double DEFAULT_COLOR_MAP_Y_OFFSET = 0; + public static int DEFAULT_COLOR_MAP_STRIPE_WIDTH = 2; + public static int DEFAULT_COLOR_MAP_FONT_SIZE = 20; + public static Color DEFAULT_COLOR_MAP_FONT_COLOR = Color.gray.darker(); + + public static double DEFAULT_SPACE_BETWEEN_BASES = 1.0; + + /** + * Various options. + */ + + public static String XML_VAR_DRAW_OUTLINE = "drawoutline"; + public static String XML_VAR_FILL_BASE = "fillbase"; + public static String XML_VAR_AUTO_FIT = "autofit"; + public static String XML_VAR_AUTO_CENTER = "autocenter"; + public static String XML_VAR_MODIFIABLE = "modifiable"; + public static String XML_VAR_ERRORS = "errors"; + public static String XML_VAR_SPECIAL_BASES = "specialbases"; + public static String XML_VAR_DASH_BASES = "dashbases"; + public static String XML_VAR_USE_BASE_BPS = "usebasebps"; + public static String XML_VAR_DRAW_NC = "drawnc"; + public static String XML_VAR_DRAW_NON_PLANAR = "drawnonplanar"; + public static String XML_VAR_SHOW_WARNINGS = "warnings"; + public static String XML_VAR_COMPARISON_MODE = "comparison"; + public static String XML_VAR_FLAT = "flat"; + public static String XML_VAR_DRAW_BACKGROUND = "drawbackground"; + public static String XML_VAR_COLOR_MAP = "drawcm"; + public static String XML_VAR_DRAW_BACKBONE = "drawbackbone"; + + public static String XML_VAR_CM_HEIGHT = "cmh"; + public static String XML_VAR_CM_WIDTH = "cmw"; + public static String XML_VAR_CM_X_OFFSET = "cmx"; + public static String XML_VAR_CM_Y_OFFSET = "cmy"; + public static String XML_VAR_DEFAULT_ZOOM = "defaultzoom"; + public static String XML_VAR_ZOOM_AMOUNT = "zoominc"; + public static String XML_VAR_BP_THICKNESS = "bpthick"; + public static String XML_VAR_BASE_THICKNESS = "basethick"; + public static String XML_VAR_DIST_NUMBERS = "distnumbers"; + + public static String XML_VAR_NUM_PERIOD = "numperiod"; + + public static String XML_VAR_MAIN_BP_STYLE = "bpstyle"; + + public static String XML_VAR_CM = "cm"; + + public static String XML_VAR_BACKBONE_COLOR = "backbonecol"; + public static String XML_VAR_HOVER_COLOR = "hovercol"; + public static String XML_VAR_BACKGROUND_COLOR = "backgroundcol"; + public static String XML_VAR_BOND_COLOR = "bondcol"; + public static String XML_VAR_TITLE_COLOR = "titlecol"; + public static String XML_VAR_SPECIAL_BASES_COLOR = "specialco"; + public static String XML_VAR_DASH_BASES_COLOR = "dashcol"; + public static String XML_VAR_SPACE_BETWEEN_BASES = "spacebetweenbases"; + + public static String XML_VAR_TITLE_FONT = "titlefont"; + public static String XML_VAR_NUMBERS_FONT = "numbersfont"; + public static String XML_VAR_FONT_BASES = "basefont"; + + public static String XML_VAR_CM_CAPTION = "cmcaption"; + public static String XML_VAR_TITLE = "title"; + + + public boolean _drawOutlineBases = true; + public boolean _fillBases = true; + public boolean _autoFit = true; + public boolean _autoCenter = true; + public boolean _modifiable = true; + public boolean _errorsOn = false; + public boolean _colorSpecialBases = false; + public boolean _colorDashBases = false; + public boolean _useBaseColorsForBPs = false; + public boolean _drawnNonCanonicalBP = true; + public boolean _drawnNonPlanarBP = true; + public boolean _showWarnings = false; + public boolean _comparisonMode = false; + public boolean _flatExteriorLoop = true; + public boolean _drawBackground = false; + public boolean _drawColorMap = false; + public boolean _drawBackbone = true; + + public double _colorMapHeight = DEFAULT_COLOR_MAP_HEIGHT; + public double _colorMapWidth = DEFAULT_COLOR_MAP_WIDTH; + public double _colorMapXOffset = DEFAULT_COLOR_MAP_X_OFFSET; + public double _colorMapYOffset = DEFAULT_COLOR_MAP_Y_OFFSET; + public double _zoom = DEFAULT_ZOOM; + public double _zoomAmount = DEFAULT_AMOUNT; + public double _bpThickness = 1.0; + public double _baseThickness = DEFAULT_BASE_OUTLINE_THICKNESS; + public double _distNumbers = DEFAULT_DIST_NUMBERS; + public double _spaceBetweenBases = DEFAULT_SPACE_BETWEEN_BASES; + + public int _numPeriod = DEFAULT_PERIOD; + public BP_STYLE _mainBPStyle = DEFAULT_BP_STYLE; + + public ModeleColorMap _cm = DEFAULT_COLOR_MAP; + + public Color _backboneColor = DEFAULT_BACKBONE_COLOR; + public Color _hoverColor = DEFAULT_HOVER_COLOR; + public Color _backgroundColor = DEFAULT_BACKGROUND_COLOR; + public Color _bondColor = DEFAULT_BOND_COLOR; + public Color _titleColor = DEFAULT_TITLE_COLOR; + public Color _specialBasesColor = DEFAULT_SPECIAL_BASE_COLOR; + public Color _dashBasesColor = DEFAULT_DASH_BASE_COLOR; + + public Font _titleFont = DEFAULT_TITLE_FONT; + public Font _numbersFont = DEFAULT_NUMBERS_FONT; + public Font _fontBasesGeneral = DEFAULT_BASE_FONT; + + public String _colorMapCaption = ""; + //public String _title = ""; + + + public static String XML_ELEMENT_NAME = "config"; + + public void toXML(TransformerHandler hd) throws SAXException + { + AttributesImpl atts = new AttributesImpl(); + atts.addAttribute("","",XML_VAR_DRAW_OUTLINE,"CDATA", ""+_drawOutlineBases); + atts.addAttribute("","",XML_VAR_FILL_BASE,"CDATA", ""+_fillBases); + atts.addAttribute("","",XML_VAR_AUTO_FIT,"CDATA", ""+_autoFit); + atts.addAttribute("","",XML_VAR_AUTO_CENTER,"CDATA", ""+_autoCenter); + atts.addAttribute("","",XML_VAR_MODIFIABLE,"CDATA", ""+_modifiable); + atts.addAttribute("","",XML_VAR_ERRORS,"CDATA", ""+_errorsOn); + atts.addAttribute("","",XML_VAR_SPECIAL_BASES,"CDATA", ""+_colorSpecialBases); + atts.addAttribute("","",XML_VAR_DASH_BASES,"CDATA", ""+_colorDashBases); + atts.addAttribute("","",XML_VAR_USE_BASE_BPS,"CDATA", ""+_useBaseColorsForBPs); + atts.addAttribute("","",XML_VAR_DRAW_NC,"CDATA", ""+_drawnNonCanonicalBP); + atts.addAttribute("","",XML_VAR_DRAW_NON_PLANAR,"CDATA",""+_drawnNonPlanarBP); + atts.addAttribute("","",XML_VAR_SHOW_WARNINGS,"CDATA", ""+_showWarnings); + atts.addAttribute("","",XML_VAR_COMPARISON_MODE,"CDATA",""+_comparisonMode); + atts.addAttribute("","",XML_VAR_FLAT,"CDATA", ""+_flatExteriorLoop); + atts.addAttribute("","",XML_VAR_DRAW_BACKGROUND,"CDATA",""+_drawBackground); + atts.addAttribute("","",XML_VAR_COLOR_MAP,"CDATA", ""+_drawColorMap); + atts.addAttribute("","",XML_VAR_DRAW_BACKBONE,"CDATA", ""+_drawBackbone); + + atts.addAttribute("","",XML_VAR_CM_HEIGHT,"CDATA", ""+_colorMapHeight); + atts.addAttribute("","",XML_VAR_CM_WIDTH,"CDATA", ""+_colorMapWidth); + atts.addAttribute("","",XML_VAR_CM_X_OFFSET,"CDATA", ""+_colorMapXOffset); + atts.addAttribute("","",XML_VAR_CM_Y_OFFSET,"CDATA", ""+_colorMapYOffset); + atts.addAttribute("","",XML_VAR_DEFAULT_ZOOM,"CDATA", ""+_zoom); + atts.addAttribute("","",XML_VAR_ZOOM_AMOUNT,"CDATA", ""+_zoomAmount); + atts.addAttribute("","",XML_VAR_BP_THICKNESS,"CDATA", ""+_bpThickness); + atts.addAttribute("","",XML_VAR_BASE_THICKNESS,"CDATA", ""+_baseThickness); + atts.addAttribute("","",XML_VAR_DIST_NUMBERS,"CDATA", ""+_distNumbers); + atts.addAttribute("","",XML_VAR_SPACE_BETWEEN_BASES,"CDATA", ""+_spaceBetweenBases); + + + atts.addAttribute("","",XML_VAR_NUM_PERIOD,"CDATA", ""+_numPeriod); + + atts.addAttribute("","",XML_VAR_MAIN_BP_STYLE,"CDATA", ""+_mainBPStyle.getOpt()); + + atts.addAttribute("","",XML_VAR_BACKBONE_COLOR,"CDATA", XMLUtils.toHTMLNotation(_backboneColor)); + atts.addAttribute("","",XML_VAR_HOVER_COLOR,"CDATA", XMLUtils.toHTMLNotation(_hoverColor)); + atts.addAttribute("","",XML_VAR_BACKGROUND_COLOR,"CDATA", XMLUtils.toHTMLNotation(_backgroundColor)); + atts.addAttribute("","",XML_VAR_BOND_COLOR,"CDATA", XMLUtils.toHTMLNotation(_bondColor)); + atts.addAttribute("","",XML_VAR_TITLE_COLOR,"CDATA", XMLUtils.toHTMLNotation(_titleColor)); + atts.addAttribute("","",XML_VAR_SPECIAL_BASES_COLOR,"CDATA",XMLUtils.toHTMLNotation(_specialBasesColor)); + atts.addAttribute("","",XML_VAR_DASH_BASES_COLOR,"CDATA", XMLUtils.toHTMLNotation(_dashBasesColor)); + + atts.addAttribute("","",XML_VAR_CM,"CDATA", _cm.getParamEncoding()); + + + hd.startElement("","",XML_ELEMENT_NAME,atts); + XMLUtils.toXML(hd, _titleFont,XML_VAR_TITLE_FONT); + XMLUtils.toXML(hd, _numbersFont,XML_VAR_NUMBERS_FONT); + XMLUtils.toXML(hd, _fontBasesGeneral,XML_VAR_FONT_BASES); + + XMLUtils.exportCDATAElem(hd,XML_VAR_CM_CAPTION, _colorMapCaption); + hd.endElement("","",XML_ELEMENT_NAME); + } + + + + + public void loadFromXMLAttributes(Attributes attributes) + { + _drawOutlineBases = Boolean.parseBoolean(attributes.getValue(XML_VAR_DRAW_OUTLINE)); + _fillBases = Boolean.parseBoolean(attributes.getValue(XML_VAR_FILL_BASE)); + _autoFit = Boolean.parseBoolean(attributes.getValue(XML_VAR_AUTO_FIT)); + _autoCenter = Boolean.parseBoolean(attributes.getValue(XML_VAR_AUTO_CENTER)); + _modifiable = Boolean.parseBoolean(attributes.getValue(XML_VAR_MODIFIABLE)); + _errorsOn = Boolean.parseBoolean(attributes.getValue(XML_VAR_ERRORS)); + _colorSpecialBases = Boolean.parseBoolean(attributes.getValue(XML_VAR_SPECIAL_BASES)); + _colorDashBases = Boolean.parseBoolean(attributes.getValue(XML_VAR_DASH_BASES)); + _useBaseColorsForBPs = Boolean.parseBoolean(attributes.getValue(XML_VAR_USE_BASE_BPS)); + _drawnNonCanonicalBP = Boolean.parseBoolean(attributes.getValue(XML_VAR_DRAW_NC)); + _drawnNonPlanarBP = Boolean.parseBoolean(attributes.getValue(XML_VAR_DRAW_NON_PLANAR)); + _showWarnings = Boolean.parseBoolean(attributes.getValue(XML_VAR_SHOW_WARNINGS)); + _comparisonMode = Boolean.parseBoolean(attributes.getValue(XML_VAR_COMPARISON_MODE)); + _flatExteriorLoop = Boolean.parseBoolean(attributes.getValue(XML_VAR_FLAT)); + _drawBackground = Boolean.parseBoolean(attributes.getValue(XML_VAR_DRAW_BACKGROUND)); + _drawColorMap = Boolean.parseBoolean(attributes.getValue(XML_VAR_COLOR_MAP)); + _drawBackbone = Boolean.parseBoolean(attributes.getValue(XML_VAR_DRAW_BACKBONE)); + + _colorMapHeight = Double.parseDouble(attributes.getValue(XML_VAR_CM_HEIGHT)); + _colorMapWidth = Double.parseDouble(attributes.getValue(XML_VAR_CM_WIDTH)); + _colorMapXOffset = Double.parseDouble(attributes.getValue(XML_VAR_CM_X_OFFSET)); + _colorMapYOffset = Double.parseDouble(attributes.getValue(XML_VAR_CM_Y_OFFSET)); + _zoom = Double.parseDouble(attributes.getValue(XML_VAR_DEFAULT_ZOOM)); + _zoomAmount = Double.parseDouble(attributes.getValue(XML_VAR_ZOOM_AMOUNT)); + _bpThickness = Double.parseDouble(attributes.getValue(XML_VAR_BP_THICKNESS)); + _baseThickness = Double.parseDouble(attributes.getValue(XML_VAR_BASE_THICKNESS)); + _distNumbers = Double.parseDouble(attributes.getValue(XML_VAR_DIST_NUMBERS)); + _spaceBetweenBases = XMLUtils.getDouble(attributes, XML_VAR_SPACE_BETWEEN_BASES, DEFAULT_SPACE_BETWEEN_BASES); + + _numPeriod = Integer.parseInt(attributes.getValue(XML_VAR_NUM_PERIOD)); + + _mainBPStyle = BP_STYLE.getStyle(attributes.getValue(XML_VAR_MAIN_BP_STYLE)); + + _backboneColor = Color.decode(attributes.getValue(XML_VAR_BACKBONE_COLOR)); + _hoverColor = Color.decode(attributes.getValue(XML_VAR_HOVER_COLOR)); + _backgroundColor = Color.decode(attributes.getValue(XML_VAR_BACKGROUND_COLOR)); + _bondColor = Color.decode(attributes.getValue(XML_VAR_BOND_COLOR)); + _titleColor = Color.decode(attributes.getValue(XML_VAR_TITLE_COLOR)); + _specialBasesColor = Color.decode(attributes.getValue(XML_VAR_SPECIAL_BASES_COLOR)); + _dashBasesColor = Color.decode(attributes.getValue(XML_VAR_DASH_BASES_COLOR)); + + _cm = ModeleColorMap.parseColorMap(attributes.getValue(XML_VAR_CM)); + } + + + + public VARNAConfig clone () + { + + /** + * @j2sNative + * + * return this; + * + */ + try + { + ByteArrayOutputStream out = new ByteArrayOutputStream (); + ObjectOutputStream oout = new ObjectOutputStream (out); + oout.writeObject (this); + + ObjectInputStream in = new ObjectInputStream ( + new ByteArrayInputStream (out.toByteArray ())); + return (VARNAConfig)in.readObject (); + } + catch (Exception e) + { + throw new RuntimeException ("cannot clone class [" + + this.getClass ().getName () + "] via serialization: " + + e.toString ()); + } + } + +}