2 package org.forester.phylogeny.data;
\r
4 import java.awt.Color;
\r
5 import java.awt.Font;
\r
6 import java.io.IOException;
\r
7 import java.io.Writer;
\r
8 import java.util.ArrayList;
\r
9 import java.util.List;
\r
11 import org.forester.phylogeny.data.Property.AppliesTo;
\r
12 import org.forester.util.ForesterUtil;
\r
14 public final class NodeVisualData implements PhylogenyData {
\r
16 public static final String SIZE_REF = "aptx_visualiation:node_size";
\r
17 public static final String SIZE_TYPE = "xsd:decimal";
\r
18 private static final byte DEFAULT_FONT_SIZE = -1;
\r
19 private static final int DEFAULT_SIZE = -1;
\r
20 private static final int DEFAULT_TRANSPARANCY = -1;
\r
21 private Color _border_color;
\r
22 private Color _fill_color;
\r
23 private NodeFill _fill_type;
\r
24 private String _font_name;
\r
25 private Color _font_color;
\r
26 private byte _font_size;
\r
27 private FontType _font_style;
\r
28 private NodeShape _shape;
\r
29 private float _size;
\r
30 private float _transparancy;
\r
33 public NodeVisualData() {
\r
37 public NodeVisualData( final String font_name,
\r
38 final FontType font_style,
\r
39 final byte font_size,
\r
40 final Color font_color,
\r
41 final NodeShape shape,
\r
42 final NodeFill fill_type,
\r
43 final Color border_color,
\r
44 final Color fill_color,
\r
46 final float transparancy ) {
\r
47 setFontName( font_name );
\r
48 setFontStyle( font_style );
\r
49 setFontSize( font_size );
\r
50 setFontColor( font_color );
\r
52 setFillType( fill_type );
\r
53 setBorderColor( border_color );
\r
54 setFillColor( fill_color );
\r
56 setTransparancy( transparancy );
\r
60 public final StringBuffer asSimpleText() {
\r
65 public final StringBuffer asText() {
\r
66 final StringBuffer sb = new StringBuffer();
\r
71 public final PhylogenyData copy() {
\r
72 return new NodeVisualData( !ForesterUtil.isEmpty( getFontName() ) ? new String( getFontName() ) : null,
\r
75 getFontColor() != null ? new Color( getFontColor().getRed(), getFontColor()
\r
76 .getGreen(), getFontColor().getBlue() ) : null,
\r
79 getBorderColor() != null ? new Color( getBorderColor().getRed(), getBorderColor()
\r
80 .getGreen(), getBorderColor().getBlue() ) : null,
\r
81 getFillColor() != null ? new Color( getFillColor().getRed(), getFillColor()
\r
82 .getGreen(), getFillColor().getBlue() ) : null,
\r
84 getTransparancy() );
\r
87 public final Color getBorderColor() {
\r
88 return _border_color;
\r
91 public final Color getFillColor() {
\r
95 public final NodeFill getFillType() {
\r
99 public final String getFontName() {
\r
103 public final Color getFontColor() {
\r
104 return _font_color;
\r
107 public final byte getFontSize() {
\r
111 public final FontType getFontStyle() {
\r
112 return _font_style;
\r
115 public final NodeShape getShape() {
\r
119 public final float getSize() {
\r
123 public final float getTransparancy() {
\r
124 return _transparancy;
\r
127 public final boolean isEmpty() {
\r
128 return ( ForesterUtil.isEmpty( getFontName() ) && ( getFontStyle() == FontType.PLAIN )
\r
129 && ( getFontSize() == DEFAULT_FONT_SIZE ) && ( getFontColor() == null )
\r
130 && ( getShape() == NodeShape.DEFAULT ) && ( getFillType() == NodeFill.DEFAULT )
\r
131 && ( getBorderColor() == null ) && ( getFillColor() == null ) && ( getSize() == DEFAULT_SIZE ) && ( getTransparancy() == DEFAULT_TRANSPARANCY ) );
\r
135 public final boolean isEqual( final PhylogenyData data ) {
\r
136 throw new UnsupportedOperationException();
\r
139 public final void setBorderColor( final Color border_color ) {
\r
140 _border_color = border_color;
\r
143 public final void setFillColor( final Color fill_color ) {
\r
144 _fill_color = fill_color;
\r
147 public final void setFillType( final NodeFill fill_type ) {
\r
148 _fill_type = fill_type;
\r
151 public final void setFontName( final String font_name ) {
\r
152 if ( !ForesterUtil.isEmpty( font_name ) ) {
\r
153 _font_name = font_name;
\r
161 public final void setFontColor( final Color font_color ) {
\r
162 _font_color = font_color;
\r
165 public final void setFontSize( final int font_size ) {
\r
166 if ( ( font_size != DEFAULT_FONT_SIZE ) && ( font_size < 0 ) ) {
\r
167 throw new IllegalArgumentException( "negative font size: " + font_size );
\r
169 else if ( font_size > Byte.MAX_VALUE ) {
\r
170 throw new IllegalArgumentException( "font size is too large: " + font_size );
\r
172 _font_size = ( byte ) font_size;
\r
176 public final void setFontStyle( final FontType font_style ) {
\r
177 _font_style = font_style;
\r
181 public final void setFontStyle( final int font_style ) {
\r
182 if ( ( font_style == ( Font.BOLD + Font.ITALIC ) ) ) {
\r
183 setFontStyle( FontType.BOLD_ITALIC );
\r
185 else if ( font_style == Font.ITALIC ) {
\r
186 setFontStyle( FontType.ITALIC );
\r
188 else if ( font_style == Font.BOLD ) {
\r
189 setFontStyle( FontType.BOLD );
\r
192 setFontStyle( FontType.PLAIN );
\r
196 public final void setShape( final NodeShape shape ) {
\r
200 public final void setSize( final float size ) {
\r
204 public final void setTransparancy( final float transparancy ) {
\r
205 _transparancy = transparancy;
\r
208 public final int getFontStyleInt() {
\r
209 if ( getFontStyle() == FontType.BOLD ) {
\r
212 else if ( getFontStyle() == FontType.ITALIC ) {
\r
213 return Font.ITALIC;
\r
215 else if ( getFontStyle() == FontType.BOLD_ITALIC ) {
\r
216 return Font.BOLD + Font.ITALIC;
\r
221 public final Font getFont() {
\r
222 if ( _font != null ) {
\r
225 else if ( !ForesterUtil.isEmpty( getFontName() ) ) {
\r
226 _font = new Font( getFontName(), getFontStyleInt(), getFontSize() );
\r
233 public final StringBuffer toNHX() {
\r
234 throw new UnsupportedOperationException();
\r
238 public final void toPhyloXML( final Writer writer, final int level, final String indentation ) throws IOException {
\r
239 throw new UnsupportedOperationException();
\r
243 public final String toString() {
\r
244 return asText().toString();
\r
247 private final void init() {
\r
248 setFontName( null );
\r
249 setFontStyle( FontType.PLAIN );
\r
250 setFontSize( DEFAULT_FONT_SIZE );
\r
251 setFontColor( null );
\r
252 setShape( NodeShape.DEFAULT );
\r
253 setFillType( NodeFill.DEFAULT );
\r
254 setBorderColor( null );
\r
255 setFillColor( null );
\r
256 setSize( DEFAULT_SIZE );
\r
257 setTransparancy( DEFAULT_TRANSPARANCY );
\r
261 private final List<Property> toProperties() {
\r
262 final List<Property> properties = new ArrayList<Property>();
\r
263 properties.add( new Property( SIZE_REF, String.valueOf( getSize() ), "", SIZE_TYPE, AppliesTo.NODE ) );
\r
264 properties.add( new Property( SIZE_REF, String.valueOf( getShape() ), "", SIZE_TYPE, AppliesTo.NODE ) );
\r
265 properties.add( new Property( SIZE_REF, String.valueOf( getFillType() ), "", SIZE_TYPE, AppliesTo.NODE ) );
\r
266 properties.add( new Property( SIZE_REF, String.valueOf( getTransparancy() ), "", SIZE_TYPE, AppliesTo.NODE ) );
\r
267 properties.add( new Property( SIZE_REF, String.valueOf( getFillColor() ), "", SIZE_TYPE, AppliesTo.NODE ) );
\r
268 properties.add( new Property( SIZE_REF, String.valueOf( getBorderColor() ), "", SIZE_TYPE, AppliesTo.NODE ) );
\r
272 public enum FontType {
\r
273 BOLD, BOLD_ITALIC, ITALIC, PLAIN
\r
276 public enum NodeFill {
\r
277 DEFAULT, GRADIENT, NONE, SOLID
\r
280 public enum NodeShape {
\r
281 CIRCLE, DEFAULT, RECTANGLE
\r