JAL-3032 adds Java 8 functionality (2/2)
[jalview.git] / src2 / fr / orsay / lri / varna / models / rna / ModeleBasesComparison.java
diff --git a/src2/fr/orsay/lri/varna/models/rna/ModeleBasesComparison.java b/src2/fr/orsay/lri/varna/models/rna/ModeleBasesComparison.java
new file mode 100644 (file)
index 0000000..6e9fec7
--- /dev/null
@@ -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;
+
+
+/**
+ * <b>The RNA base comparison model</b>. In each bases we'll place <b>two
+ * characters</b> representing nitrogenous bases of both RNA that have to be
+ * compared. So, in each base in the comparison model, we'll have a <b>couple of
+ * bases</b>, 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<br>
+        *         1 if this base is related to the first RNA<br>
+        *         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<br>
+        *            1 if this base is related to the first RNA<br>
+        *            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));
+       }
+
+}