View Javadoc

1   /*
2   
3       dsh-piccolo-venn  Piccolo2D venn diagram nodes and supporting classes.
4       Copyright (c) 2009-2013 held jointly by the individual authors.
5   
6       This library is free software; you can redistribute it and/or modify it
7       under the terms of the GNU Lesser General Public License as published
8       by the Free Software Foundation; either version 3 of the License, or (at
9       your option) any later version.
10  
11      This library is distributed in the hope that it will be useful, but WITHOUT
12      ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
13      FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14      License for more details.
15  
16      You should have received a copy of the GNU Lesser General Public License
17      along with this library;  if not, write to the Free Software Foundation,
18      Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
19  
20      > http://www.fsf.org/licensing/licenses/lgpl.html
21      > http://www.opensource.org/licenses/lgpl-license.php
22  
23  */
24  package org.dishevelled.piccolo.venn;
25  
26  import java.util.Set;
27  
28  import org.piccolo2d.PNode;
29  
30  import org.piccolo2d.nodes.PText;
31  
32  /**
33   * Abstract venn diagram node.
34   *
35   * @param <E> value type
36   * @author  Michael Heuer
37   * @version $Revision$ $Date$
38   */
39  public abstract class AbstractVennNode<E>
40      extends PNode
41  {
42      /** True if should display labels. */
43      private boolean displayLabels = true;
44  
45      /** True if labels should display sizes. */
46      private boolean displaySizes = true;
47  
48      /** True if should display size labels. */
49      private boolean displaySizeLabels = true;
50  
51      /** True if should display size labels for empty areas. */
52      private boolean displaySizesForEmptyAreas = true;
53  
54  
55      /**
56       * Create a new abstract venn diagram node.
57       */
58      protected AbstractVennNode()
59      {
60          super();
61      }
62  
63  
64      /**
65       * Build and return label text.
66       *
67       * @param labelText label text
68       * @param size size
69       * @return label text
70       */
71      protected final String buildLabel(final String labelText, final int size)
72      {
73          StringBuilder sb = new StringBuilder();
74          sb.append(labelText);
75          if (displaySizes)
76          {
77              sb.append(" (");
78              sb.append(size);
79              sb.append(")");
80          }
81          sb.append(":");
82          return sb.toString();
83      }
84  
85      /**
86       * Update labels.
87       */
88      protected abstract void updateLabels();
89  
90      /**
91       * Return the nodes for this venn diagram node.
92       *
93       * @return the nodes for this venn diagram node
94       */
95      public abstract Iterable<PNode> nodes();
96  
97      /**
98       * Return the labels for this venn diagram node.
99       *
100      * @return the labels for this venn diagram node
101      */
102     public abstract Iterable<PText> labels();
103 
104     /**
105      * Return the size labels for this venn diagram node.
106      *
107      * @return the size labels for this venn diagram node
108      */
109     public abstract Iterable<PText> sizeLabels();
110 
111     /**
112      * Return the label for the specified node, if any.
113      *
114      * @param node node
115      * @return the label for the specified node, or <code>null</code>
116      *    if no such label exists
117      */
118     public abstract PText labelForNode(PNode node);
119 
120     /**
121      * Return the label text for the specified node, if any.
122      *
123      * @param node node
124      * @return the label text for the specified node, or <code>null</code>
125      *    if no such label exists
126      */
127     public abstract String labelTextForNode(PNode node);
128 
129     /**
130      * Return the view for the specified node, if any.
131      *
132      * @param node node
133      * @return the view for the specified node, or <code>null</code>
134      *    if no such view exists
135      */
136     public abstract Set<E> viewForNode(PNode node);
137 
138     /**
139      * Return true if labels should display sizes.  Defaults to <code>true</code>.
140      *
141      * @return true if labels should display sizes
142      */
143     public final boolean getDisplaySizes()
144     {
145         return displaySizes;
146     }
147 
148     /**
149      * Set to true if labels should display sizes.
150      *
151      * <p>This is a bound property.</p>
152      *
153      * @param displaySizes true if labels should display sizes
154      */
155     public final void setDisplaySizes(final boolean displaySizes)
156     {
157         boolean oldDisplaySizes = this.displaySizes;
158         this.displaySizes = displaySizes;
159         firePropertyChange(-1, "displaySizes", oldDisplaySizes, this.displaySizes);
160         updateLabels();
161     }
162 
163     /**
164      * Return true if this venn node should display set labels.  Defaults to <code>true</code>.
165      *
166      * @return true if this venn node should display set labels
167      */
168     public final boolean getDisplayLabels()
169     {
170         return displayLabels;
171     }
172 
173     /**
174      * Set to true if this venn node should display set labels.
175      *
176      * <p>This is a bound property.</p>
177      *
178      * @param displayLabels true if this venn node should display set labels
179      */
180     public final void setDisplayLabels(final boolean displayLabels)
181     {
182         boolean oldDisplayLabels = this.displayLabels;
183         this.displayLabels = displayLabels;
184         firePropertyChange(-1, "displayLabels", oldDisplayLabels, this.displayLabels);
185         updateLabels();
186     }
187 
188     /**
189      * Return true if this venn node should display size labels.  Defaults to <code>true</code>.
190      *
191      * @return true if this venn node should display size labels
192      */
193     public final boolean getDisplaySizeLabels()
194     {
195         return displaySizeLabels;
196     }
197 
198     /**
199      * Set to true if this venn node should display size labels.
200      *
201      * <p>This is a bound property.</p>
202      *
203      * @param displaySizeLabels true if this venn node should display size labels
204      */
205     public final void setDisplaySizeLabels(final boolean displaySizeLabels)
206     {
207         boolean oldDisplaySizeLabels = this.displaySizeLabels;
208         this.displaySizeLabels = displaySizeLabels;
209         firePropertyChange(-1, "displaySizeLabels", oldDisplaySizeLabels, this.displaySizeLabels);
210         updateLabels();
211     }
212 
213     /**
214      * Return true if this venn node should display sizes for empty areas.  Defaults to <code>true</code>.
215      *
216      * @return true if this venn node should display sizes for empty areas
217      */
218     public final boolean getDisplaySizesForEmptyAreas()
219     {
220         return displaySizesForEmptyAreas;
221     }
222 
223     /**
224      * Set to true if this venn node should display sizes for empty areas.
225      *
226      * <p>This is a bound property.</p>
227      *
228      * @param displaySizesForEmptyAreas true if this venn node should display sizes for empty areas
229      */
230     public final void setDisplaySizesForEmptyAreas(final boolean displaySizesForEmptyAreas)
231     {
232         boolean oldDisplaySizesForEmptyAreas = this.displaySizesForEmptyAreas;
233         this.displaySizesForEmptyAreas = displaySizesForEmptyAreas;
234         firePropertyChange(-1, "displaySizesForEmptyAreas", oldDisplaySizesForEmptyAreas, this.displaySizesForEmptyAreas);
235         updateLabels();
236     }
237 }