@@ DEV @@ : Try to use Java MVC for graphics component.
[scilab.git] / scilab / modules / graphic_objects / src / java / org / scilab / modules / graphic_objects / graphicObject / GraphicObject.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - 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-en.txt
10  *
11  */
12
13 package org.scilab.modules.graphic_objects.graphicObject;
14
15 import java.lang.reflect.Method;
16 import java.util.ArrayList;
17
18 /**
19  * GraphicObject class
20  * @author Manuel JULIACHS
21  */
22 public abstract class GraphicObject {
23         /** Graphic objects types */
24         public enum Type { ARC, AXES, AXIS, CHAMP, COMPOUND, FAC3D, FEC, FIGURE, GRAYPLOT,
25                 LABEL, LEGEND, MATPLOT, PLOT3D, POLYLINE, RECTANGLE, SEGS, TEXT, UNKNOWNOBJECT };
26         
27         /** GraphicObject properties */
28         public enum GraphicObjectPropertyType { PARENT, CHILDREN, VISIBLE, USERDATA, UNKNOWNPROPERTY };
29
30         /** Identifier */
31         private String identifier;
32         
33         /** Parent object */
34         private GraphicObject parent;
35
36         /** Child objects list */
37         private ArrayList <GraphicObject> children;
38
39         /** Specifies whether the object is visible or not */
40         private boolean visible;
41
42         /** User data */
43         private byte[] userData;
44
45         /** Constructor */
46         public GraphicObject() {
47                 identifier = null;
48                 parent = null;
49                 children = null;
50                 visible = false;
51                 userData = null;
52         }
53
54         /**
55      * Returns the enum associated to a type name
56      * @param typeName the property name
57      * @return the type enum
58      */
59     public static Type getTypeFromName(String typeName) {
60         if (typeName.equals("arc")) {
61             return Type.ARC;
62         } 
63         else if (typeName.equals("axes")) {
64             return Type.AXES;
65         }
66         else if (typeName.equals("axis")) {
67             return Type.AXIS;
68         }
69         else if (typeName.equals("champ")) {
70             return Type.CHAMP;
71         }
72         else if (typeName.equals("compound")) {
73             return Type.COMPOUND;
74         }
75         else if (typeName.equals("fac3d")) {
76             return Type.FAC3D;
77         }
78         else if (typeName.equals("fec")) {
79             return Type.FEC;
80         }
81         else if (typeName.equals("figure")) {
82             return Type.FIGURE;
83         }
84         else if (typeName.equals("grayplot")) {
85             return Type.GRAYPLOT;
86         }
87         else if (typeName.equals("label")) {
88             return Type.LABEL;
89         }
90         else if (typeName.equals("legend")) {
91             return Type.LEGEND;
92         }
93         else if (typeName.equals("matplot")) {
94             return Type.MATPLOT;
95         }
96         else if (typeName.equals("plot3d")) {
97             return Type.PLOT3D;
98         }
99         else if (typeName.equals("polyline")) {
100             return Type.POLYLINE;
101         }
102         else if (typeName.equals("rectangle")) {
103             return Type.RECTANGLE;
104         }
105         else if (typeName.equals("segs")) {
106             return Type.SEGS;
107         }
108         else if (typeName.equals("text")) {
109             return Type.TEXT;
110         }
111         else {
112             return Type.UNKNOWNOBJECT;
113         }
114         }
115         
116         /**
117          * Returns the enum associated to a property name
118          * @param propertyName the property name
119          * @return the property enum
120          */
121         public Object getPropertyFromName(String propertyName) {
122                 if (propertyName.equals("Parent")) {
123                         return  GraphicObjectPropertyType.PARENT;
124                 } else if (propertyName.equals("Children")) {
125                         return GraphicObjectPropertyType.CHILDREN;
126                 } else if (propertyName.equals("Visible")) {
127                         return GraphicObjectPropertyType.VISIBLE;
128                 } else if (propertyName.equals("UserData")) {
129                         return GraphicObjectPropertyType.USERDATA;
130                 } else {
131                         return GraphicObjectPropertyType.UNKNOWNPROPERTY;
132                 }
133         }
134
135         /**
136          * Fast property get method
137          * @param property the property to get
138          * @return the property value
139          */
140         public Object getPropertyFast(Object property) {
141                 if (property == GraphicObjectPropertyType.PARENT) {
142                         return getParent();
143                 } else if (property == GraphicObjectPropertyType.CHILDREN) {
144                         return getChildren();
145                 } else if (property == GraphicObjectPropertyType.VISIBLE) {
146                         return getVisible();
147                 } else if (property == GraphicObjectPropertyType.USERDATA) {
148                         return getUserData();
149                 } else if (property == GraphicObjectPropertyType.UNKNOWNPROPERTY) {
150                         return null;
151                 } else {
152                         return null;
153                 }
154         }
155
156         /**
157          * Fast property set method
158          * @param property the property to set
159          * @param value the property value
160          */
161         public void setPropertyFast(Object property, Object value) {
162                 if (property == GraphicObjectPropertyType.PARENT) {
163                         setParent((GraphicObject) value);
164                 } else if (property == GraphicObjectPropertyType.CHILDREN) {
165                         setChildren((ArrayList<GraphicObject>) value);
166                 } else if (property == GraphicObjectPropertyType.VISIBLE) {
167                         setVisible((Boolean) value);
168                 } else if (property == GraphicObjectPropertyType.USERDATA) {
169                         setUserData((byte[]) value);
170                 }
171         }
172
173         /**
174          * Set property method
175          * @param property property name
176          * @param value property value
177          */
178     public void setProperty(String property, Object value) {
179         try {
180             Method setter = this.getClass().getMethod("set" + property, value.getClass());
181             setter.invoke(this, value);
182         } catch (Exception e) {
183             System.err.println("Got Exception " + e.getMessage());
184             e.printStackTrace();
185         }
186
187     }
188     
189     /**
190      * Returns a null property
191      * @param property property name
192      * @return null property
193      */
194         public Object getNullProperty(String property) {
195                 return null;
196         }
197
198         /**
199          * Get property method
200          * @param property the property name string
201          * @return the property value
202          */
203         public Object getProperty(String property) {
204                 try {
205                         Method getter = this.getClass().getMethod("get" + property, (Class[]) null);
206                         return getter.invoke(this, (Object[]) null);
207                 } catch (Exception e) {
208                         System.err.println("Got Exception " + e.getMessage());
209                 } // TODO Auto-generated method stub
210                 return null;
211         }
212         
213
214     /**
215      * Void property get method
216      * @param property the property name
217      */
218         public Object getPropertyVoid(String property) {
219                 // TBD
220                 return null;
221         }
222
223         /* TBD */
224         /**
225          * Void property set method
226          * @param property the property name
227          * @param value the property value
228          */
229         public void setPropertyVoid(String property, Object value) {
230                 // TBD
231         }
232         
233         /**
234          * @return the children
235          */
236         public ArrayList<GraphicObject> getChildren() {
237                 return children;
238         }
239
240         /**
241          * @param children the children to set
242          */
243         public void setChildren(ArrayList<GraphicObject> children) {
244                 this.children = children;
245         }
246
247         /**
248          * @return the identifier
249          */
250         public String getIdentifier() {
251                 return identifier;
252         }
253
254         /**
255          * @param identifier the identifier to set
256          */
257         public void setIdentifier(String identifier) {
258                 this.identifier = identifier;
259         }
260
261         /**
262          * @return the parent
263          */
264         public GraphicObject getParent() {
265                 return parent;
266         }
267
268         /**
269          * @param parent the parent to set
270          */
271         public void setParent(GraphicObject parent) {
272                 this.parent = parent;
273         }
274
275         /**
276          * @return the userData
277          */
278         public byte[] getUserData() {
279                 return userData;
280         }
281
282         /**
283          * @param userData the userData to set
284          */
285         public void setUserData(byte[] userData) {
286                 this.userData = userData;
287         }
288
289         /**
290          * Get visible method
291          * @return the visible
292          */
293         public Boolean getVisible() {
294                 return visible;
295         }
296
297         /**
298          * Set visible method
299          * @param visible the visible to set
300          */
301         public void setVisible(Boolean visible) {
302                 this.visible = visible;
303         }
304
305 }