Remove some java warnings (redundant declarations)
[scilab.git] / scilab / modules / graphic_objects / src / java / org / scilab / modules / graphic_objects / legend / Legend.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010-2012 - DIGITEO - Manuel JULIACHS
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 package org.scilab.modules.graphic_objects.legend;
14
15 import java.util.ArrayList;
16
17 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
18 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
19 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
20 import org.scilab.modules.graphic_objects.graphicObject.Visitor;
21 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject.UpdateStatus;
22 import org.scilab.modules.graphic_objects.textObject.ClippableTextObject;
23 import org.scilab.modules.graphic_objects.textObject.FormattedText;
24 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.*;
25
26 /**
27  * Legend class
28  * @author Manuel JULIACHS
29  */
30 public class Legend extends ClippableTextObject {
31     /** Legend properties names */
32     private enum LegendProperty { LINKS, LINKSCOUNT, LEGENDLOCATION, POSITION , SIZE};
33
34     /** Legend location */
35     public enum LegendLocation { IN_UPPER_RIGHT, IN_UPPER_LEFT, IN_LOWER_RIGHT, IN_LOWER_LEFT,
36                                  OUT_UPPER_RIGHT, OUT_UPPER_LEFT, OUT_LOWER_RIGHT, OUT_LOWER_LEFT,
37                                  UPPER_CAPTION, LOWER_CAPTION, BY_COORDINATES;
38
39                                  /**
40                                   * Converts an integer to the corresponding enum
41                                   * @param intValue the integer value
42                                   * @return the legend location enum
43                                   */
44     public static LegendLocation intToEnum(Integer intValue) {
45         switch (intValue) {
46             case 0:
47                 return LegendLocation.IN_UPPER_RIGHT;
48             case 1:
49                 return LegendLocation.IN_UPPER_LEFT;
50             case 2:
51                 return LegendLocation.IN_LOWER_RIGHT;
52             case 3:
53                 return LegendLocation.IN_LOWER_LEFT;
54             case 4:
55                 return LegendLocation.OUT_UPPER_RIGHT;
56             case 5:
57                 return LegendLocation.OUT_UPPER_LEFT;
58             case 6:
59                 return LegendLocation.OUT_LOWER_RIGHT;
60             case 7:
61                 return LegendLocation.OUT_LOWER_LEFT;
62             case 8:
63                 return LegendLocation.UPPER_CAPTION;
64             case 9:
65                 return LegendLocation.LOWER_CAPTION;
66             case 10:
67                 return LegendLocation.BY_COORDINATES;
68             default:
69                 return null;
70         }
71     }
72                                };
73
74     /** List of the polylines referred to */
75     private ArrayList <Integer> links;
76
77     /** Legend location */
78     private LegendLocation legendLocation;
79
80     /** 2D position relative to the parent axes bounds */
81     private double[] position;
82
83     /** 2D size relative to the parent axes bounds */
84     private double[] size;
85
86     /** Constructor */
87     public Legend() {
88         super();
89         this.links = new ArrayList<Integer>(0);
90         this.legendLocation = LegendLocation.LOWER_CAPTION;
91         position = new double[2];
92         size = new double[2];
93     }
94
95     @Override
96     public void accept(Visitor visitor) {
97         visitor.visit(this);
98     }
99
100     /**
101      * Returns the enum associated to a property name
102      * @param propertyName the property name
103      * @return the property enum
104      */
105     public Object getPropertyFromName(int propertyName) {
106         switch (propertyName) {
107             case __GO_LINKS__ :
108                 return LegendProperty.LINKS;
109             case __GO_LINKS_COUNT__ :
110                 return LegendProperty.LINKSCOUNT;
111             case __GO_LEGEND_LOCATION__ :
112                 return LegendProperty.LEGENDLOCATION;
113             case __GO_POSITION__ :
114                 return LegendProperty.POSITION;
115             case __GO_SIZE__ :
116                 return LegendProperty.SIZE;
117             default :
118                 return super.getPropertyFromName(propertyName);
119         }
120     }
121
122     /**
123      * Fast property get method
124      * @param property the property to get
125      * @return the property value
126      */
127     public Object getProperty(Object property) {
128         if (property == LegendProperty.LINKS) {
129             return getValidLinks();
130         } else if (property == LegendProperty.LINKSCOUNT) {
131             return getValidLinksCount();
132         } else if (property == LegendProperty.LEGENDLOCATION) {
133             return getLegendLocation();
134         } else if (property == LegendProperty.POSITION) {
135             return getPosition();
136         } else if (property == TextObjectProperty.TEXT_ARRAY_DIMENSIONS) {
137             return getValidTextArrayDimensions();
138         } else if (property == FormattedText.FormattedTextProperty.TEXT) {
139             return getValidTextStrings();
140         } else if (property == LegendProperty.SIZE) {
141             return getSize();
142         } else {
143             return super.getProperty(property);
144         }
145     }
146
147     /**
148      * Fast property set method
149      * @param property the property to set
150      * @param value the property value
151      * @return true if the property has been set, false otherwise
152      */
153     public UpdateStatus setProperty(Object property, Object value) {
154         if (property == LegendProperty.LINKS) {
155             setLinks((Integer[]) value);
156         } else if (property == LegendProperty.LEGENDLOCATION) {
157             setLegendLocation((Integer) value);
158         } else if (property == LegendProperty.POSITION) {
159             setPosition((Double[]) value);
160         } else {
161             return super.setProperty(property, value);
162         }
163
164         return UpdateStatus.Success;
165     }
166
167     /**
168      * @return the legendLocation
169      */
170     public Integer getLegendLocation() {
171         return getLegendLocationAsEnum().ordinal();
172     }
173
174     /**
175      * @return the legendLocation
176      */
177     public LegendLocation getLegendLocationAsEnum() {
178         return legendLocation;
179     }
180
181     /**
182      * @param legendLocation the legendLocation to set
183      */
184     public UpdateStatus setLegendLocation(Integer legendLocation) {
185         setLegendLocationAsEnum(LegendLocation.intToEnum(legendLocation));
186         return UpdateStatus.Success;
187     }
188
189     /**
190      * @param legendLocation the legendLocation to set
191      */
192     public UpdateStatus setLegendLocationAsEnum(LegendLocation legendLocation) {
193         this.legendLocation = legendLocation;
194         return UpdateStatus.Success;
195     }
196
197     /**
198      * @return the valid links
199      */
200     public Integer[] getValidLinks() {
201         ArrayList <Integer> validLinks = new ArrayList<Integer>(0);
202
203         for (int i = 0; i < links.size(); i++) {
204             GraphicObject object = GraphicController.getController().getObjectFromId(links.get(i));
205
206             if (object != null) {
207                 validLinks.add(links.get(i));
208             }
209         }
210
211         return validLinks.toArray(new Integer[validLinks.size()]);
212     }
213
214     /**
215      * @return the valid links count
216      */
217     public Integer getValidLinksCount() {
218         int numValidLinks = 0;
219
220         for (int i = 0; i < links.size(); i++) {
221             GraphicObject object = GraphicController.getController().getObjectFromId(links.get(i));
222
223             if (object != null) {
224                 numValidLinks++;
225             }
226         }
227
228         return numValidLinks;
229     }
230
231     /**
232      * @return the links
233      */
234     public Integer[] getLinks() {
235         Integer[] retLinks = new Integer[links.size()];
236
237         for (int i = 0; i < links.size(); i++) {
238             retLinks[i] = links.get(i);
239         }
240
241         return retLinks;
242     }
243
244     /**
245      * @return the links count
246      */
247     public Integer getLinksCount() {
248         return links.size();
249     }
250
251     /**
252      * @param links the links to set
253      */
254     public UpdateStatus setLinks(Integer[] links) {
255         if (!this.links.isEmpty()) {
256             this.links.clear();
257         }
258
259         for (int i = 0; i < links.length; i++) {
260             this.links.add(links[i]);
261         }
262         return UpdateStatus.Success;
263     }
264
265     /**
266      * Returns the dimensions of the text array, taking into account only valid links.
267      * @return the dimensions of the text array
268      */
269     public Integer[] getValidTextArrayDimensions() {
270         return new Integer[] {getValidLinksCount(), 1};
271     }
272
273     /**
274      * Returns the array of valid text strings.
275      * A string if considered valid if its corresponding link is also valid, otherwise it is ignored.
276      * This is used when getting the Legend's TEXT_STRINGS property in order to return only the strings
277      * corresponding to valid links (see also getValidLinks).
278      * @return the valid text strings
279      */
280     public String[] getValidTextStrings() {
281         ArrayList <String> validStrings = new ArrayList<String>(0);
282
283         /* Text strings are stored in reverse order relative to links. */
284         for (int i = 0; i < links.size(); i++) {
285             GraphicObject object = GraphicController.getController().getObjectFromId(links.get(links.size() - i - 1));
286
287             if (object != null) {
288                 validStrings.add(text[i].getText());
289             }
290         }
291
292         return validStrings.toArray(new String[validStrings.size()]);
293     }
294
295     /**
296      * @param links the links to set
297      */
298     public UpdateStatus setLinks(ArrayList<Integer> links) {
299         this.links = links;
300         return UpdateStatus.Success;
301     }
302
303     /**
304      * @return the position
305      */
306     public Double[] getPosition() {
307         Double[] retPosition = new Double[2];
308         retPosition[0] = position[0];
309         retPosition[1] = position[1];
310
311         return retPosition;
312     }
313
314     /**
315      * @param position the position to set
316      */
317     public UpdateStatus setPosition(Double[] position) {
318         this.position[0] = position[0];
319         this.position[1] = position[1];
320         return UpdateStatus.Success;
321     }
322
323     /**
324      * @return the size
325      */
326     public Double[] getSize() {
327         Double[] retSize = new Double[2];
328         retSize[0] = size[0];
329         retSize[1] = size[1];
330
331         return retSize;
332     }
333
334     /**
335     * @param size the size to set
336     */
337     public UpdateStatus setSize(Double[] size) {
338         this.size[0] = size[0];
339         this.size[1] = size[1];
340         return UpdateStatus.Success;
341     }
342
343     /**
344      * @return Type as String
345      */
346     public Integer getType() {
347         return GraphicObjectProperties.__GO_LEGEND__;
348     }
349
350 }