/*
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));
}
}