X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=srcjar%2Ffr%2Forsay%2Flri%2Fvarna%2Fmodels%2Frna%2FModeleBasesComparison.java;fp=srcjar%2Ffr%2Forsay%2Flri%2Fvarna%2Fmodels%2Frna%2FModeleBasesComparison.java;h=6e9fec75a5d82308118596c43c26da66ac7fb82c;hb=65740880573a48adc758bec3939ece9d9ae104dd;hp=0000000000000000000000000000000000000000;hpb=71aa78b8a7d54e5aeb6b278310dfd735efb77477;p=jalview.git diff --git a/srcjar/fr/orsay/lri/varna/models/rna/ModeleBasesComparison.java b/srcjar/fr/orsay/lri/varna/models/rna/ModeleBasesComparison.java new file mode 100644 index 0000000..6e9fec7 --- /dev/null +++ b/srcjar/fr/orsay/lri/varna/models/rna/ModeleBasesComparison.java @@ -0,0 +1,354 @@ +/* + 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.rna; + +import java.awt.Color; +import java.awt.geom.Point2D; + +import javax.xml.transform.sax.TransformerHandler; + +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +import fr.orsay.lri.varna.utils.XMLUtils; + + +/** + * The RNA base comparison model. In each bases we'll place two + * characters representing nitrogenous bases of both RNA that have to be + * compared. So, in each base in the comparison model, we'll have a couple of + * bases, with the same coordinates on the final drawing. + * + * @author Masson + * + */ +public class ModeleBasesComparison extends ModeleBase { + + /* + * LOCAL FIELDS + */ + + /** + * + */ + private static final long serialVersionUID = -2733063250714562463L; + + /** + * The base of the first RNA associated with the base of the second RNA. + */ + private Character _base1; + + /** + * The base of the second RNA associated with the base of the first RNA. + */ + private Character _base2; + + /** + * This ModeleBasesComparison owning statement. It's value will be 0 if this + * base is common for both RNA that had been compared, 1 if this base is + * related to the first RNA, 2 if related to the second. Default is -1. + */ + private int _appartenance = -1; + + /** + * This base's offset in the sequence + */ + private int _index; + + public static String XML_ELEMENT_NAME = "NTPair"; + public static String XML_VAR_FIRST_CONTENT_NAME = "base1"; + public static String XML_VAR_SECOND_CONTENT_NAME = "base2"; + public static String XML_VAR_MEMBERSHIP_NAME = "type"; + + + + public void toXML(TransformerHandler hd) throws SAXException + { + AttributesImpl atts = new AttributesImpl(); + atts.addAttribute("","",XML_VAR_INDEX_NAME,"CDATA",""+_index); + atts.addAttribute("","",XML_VAR_NUMBER_NAME,"CDATA",""+_realIndex); + atts.addAttribute("","",XML_VAR_CUSTOM_DRAWN_NAME,"CDATA",""+_colorie); + atts.addAttribute("","",XML_VAR_LABEL_NAME,"CDATA",""+_label); + atts.addAttribute("","",XML_VAR_MEMBERSHIP_NAME,"CDATA",""+_appartenance); + atts.addAttribute("","","VALUE","CDATA",""+_value); + hd.startElement("","",XML_ELEMENT_NAME,atts); + atts.clear(); + hd.startElement("","",XML_VAR_FIRST_CONTENT_NAME,atts); + XMLUtils.exportCDATAString(hd, ""+_base1); + hd.endElement("","",XML_VAR_FIRST_CONTENT_NAME); + atts.clear(); + hd.startElement("","",XML_VAR_SECOND_CONTENT_NAME,atts); + XMLUtils.exportCDATAString(hd, ""+_base2); + hd.endElement("","",XML_VAR_SECOND_CONTENT_NAME); + + _coords.toXML(hd,XML_VAR_POSITION_NAME); + _center.toXML(hd,XML_VAR_CENTER_NAME); + if (_colorie) + { _styleBase.toXML(hd); } + hd.endElement("","",XML_ELEMENT_NAME); + + } + + + /* + * -> END LOCAL FIELDS <-- + */ + + public static Color FIRST_RNA_COLOR = Color.decode("#FFDD99"); + public static Color SECOND_RNA_COLOR = Color.decode("#99DDFF"); + public static Color BOTH_RNA_COLOR = Color.decode("#99DD99"); + public static Color DEFAULT_RNA_COLOR = Color.white; + + /* + * CONSTRUCTORS + */ + + /** + * Creates a new comparison base with the default display style and no + * nitrogenous bases. + */ + public ModeleBasesComparison(int index) { + this(' ', ' ', index); + } + + /** + * Creates a new comparison base at the specified coordinates, with the + * default display style and no nitrogenous bases. + * + * @param coords + * - The coordinates in which the comparison base has to be + * placed. + */ + public ModeleBasesComparison(Point2D coords, int index) { + this(' ', ' ', new Point2D.Double(coords.getX(), coords.getY()), index); + } + + /** + * Creates a new comparison base with the specified nitrogenous bases. + * + * @param base1 + * - The first RNA' nitrogenous base + * @param base2 + * - The second RNA' nitrogenous base + */ + public ModeleBasesComparison(char base1, char base2, int index) { + this(base1, base2, -1, index); + } + + /** + * Creates a new comparison base with the specified nitrogenous bases, at + * the specified coordinates. + * + * @param base1 + * - The first RNA' nitrogenous base + * @param base2 + * - The second RNA' nitrogenous base + * @param coords + * - The coordinates in which the comparison base has to be + * placed. + */ + public ModeleBasesComparison(char base1, char base2, Point2D coords, + int index) { + this(new Point2D.Double(coords.getX(), coords.getY()), base1, base2, + true, new ModelBaseStyle(), -1, index); + } + + /** + * Creates a new comparison base with the specified nitrogenous bases. + * + * @param base1 + * - The first RNA' nitrogenous base + * @param base2 + * - The second RNA' nitrogenous base + */ + public ModeleBasesComparison(char base1, char base2, int elementStructure, + int index) { + this(new Point2D.Double(), base1, base2, true, new ModelBaseStyle(), + elementStructure, index); + } + + /** + * Creates a new comparison base with the specified nitrogenous bases. + * + * @param coords + * - This base's XY coordinates + * @param base1 + * - The first RNA' nitrogenous base + * @param base2 + * - The second RNA' nitrogenous base + * @param colorie + * - Whether or not this base will be drawn + * @param mb + * - The drawing style for this base + * @param elementStructure + * - The index of a bp partner in the secondary structure + * @param index + * - Index of this base in its initial sequence + */ + public ModeleBasesComparison(Point2D coords, char base1, char base2, + boolean colorie, ModelBaseStyle mb, int elementStructure, int index) { + _colorie = colorie; + _base1 = base1; + _base2 = base2; + _styleBase = mb; + _coords = new VARNAPoint(coords.getX(), coords.getY()); + _index = index; + } + + /* + * -> END CONSTRUCTORS <-- + */ + + /* + * GETTERS & SETTERS + */ + + /** + * Return the display style associated to this comparison base. + * + * @return The display style associated to this comparison base. + */ + public ModelBaseStyle getStyleBase() { + if (_colorie) + return _styleBase; + return new ModelBaseStyle(); + } + + /** + * Allows to know if this comparison base is colored. + * + * @return TRUE if this comparison base is colored, else FALSE. + */ + public Boolean getColored() { + return _colorie; + } + + /** + * Sets the coloration authorization of this comparison base. + * + * @param colored + * - TRUE if this comparison base has to be colored, else FALSE. + */ + public void set_colored(Boolean colored) { + this._colorie = colored; + } + + + /** + * Return the base of the first RNA in this comparison base. + * + * @return The base of the first RNA in this comparison base. + */ + public Character getBase1() { + return _base1; + } + + /** + * Sets the base of the first RNA in this comparison base. + * + * @param _base1 + * - The base of the first RNA in this comparison base. + */ + public void setBase1(Character _base1) { + this._base1 = _base1; + } + + /** + * Return the base of the second RNA in this comparison base. + * + * @return The base of the second RNA in this comparison base. + */ + public Character getBase2() { + return _base2; + } + + /** + * Sets the base of the second RNA in this comparison base. + * + * @param _base2 + * - The base of the second RNA in this comparison base. + */ + public void setBase2(Character _base2) { + this._base2 = _base2; + } + + /* + * --> END GETTERS & SETTERS <-- + */ + + /** + * Gets the string representation of the two bases in this + * ModeleBasesComparison. + * + * @return the string representation of the two bases in this + * ModeleBasesComparison. + */ + public String getBases() { + return String.valueOf(_base1) + String.valueOf(_base2); + } + + public String getContent() { + return getBases(); + } + + + /** + * Gets this base's related RNA. + * + * @return 0 if this base is common for both RNA
+ * 1 if this base is related to the first RNA
+ * 2 if this base is related to the second RNA + */ + public int get_appartenance() { + return _appartenance; + } + + /** + * Sets this base's related RNA. + * + * @param _appartenance + * : 0 if this base is common for both RNA
+ * 1 if this base is related to the first RNA
+ * 2 if this base is related to the second RNA. + */ + public void set_appartenance(int _appartenance) { + if (_appartenance == 0) { + this.getStyleBase().setBaseInnerColor(BOTH_RNA_COLOR); + } else if (_appartenance == 1) { + this.getStyleBase().setBaseInnerColor(FIRST_RNA_COLOR); + } else if (_appartenance == 2) { + this.getStyleBase().setBaseInnerColor(SECOND_RNA_COLOR); + } else { + this.getStyleBase().setBaseInnerColor(DEFAULT_RNA_COLOR); + } + this._appartenance = _appartenance; + } + + + + public int getIndex() { + return _index; + } + + @Override + public void setContent(String s) { + this.setBase1(s.charAt(0)); + this.setBase2(s.charAt(1)); + } + +}