Javasci: fix java build, javadoc warnings
[scilab.git] / scilab / modules / types / src / java / org / scilab / modules / types / ScilabBoolean.java
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
4  *  Copyright (C) 2010-2010 - DIGITEO - Clement DAVID
5  *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17
18 package org.scilab.modules.types;
19
20 import java.io.IOException;
21 import java.io.ObjectInput;
22 import java.io.ObjectOutput;
23 import java.util.Arrays;
24
25 /**
26  * This class provides a representation on the Scilab boolean datatype<br>
27  * <br>
28  * This class is {@link java.io.Serializable} and any modification could impact
29  * load and store of data (Xcos files, Javasci saved data, etc...).<br>
30  * <br>
31  * Example:<BR>
32  * <code>
33  * boolean [][]a={{true,false,true}, {true,true,true}};<BR>
34  * ScilabBoolean aMatrix = new ScilabBoolean(a);
35  * </code>
36  *
37  * @see org.scilab.modules.javasci.Scilab
38  */
39 public class ScilabBoolean implements ScilabType {
40
41     private static final long serialVersionUID = 6511497080095473901L;
42
43     private static final int VERSION = 0;
44
45     /* the boolean data */
46     protected boolean[][] data;
47     protected String varName;
48     protected boolean swaped;
49     transient protected boolean byref;
50
51     /**
52      * Create an empty object
53      */
54     public ScilabBoolean() {
55         data = null;
56     }
57
58     /**
59      * Create an object from an array of array of boolean
60      *
61      * @param data
62      *            the array of boolean
63      */
64     public ScilabBoolean(boolean[][] data) {
65         this.data = data;
66     }
67
68     /**
69      * Create an object from an array of array of boolean
70      *
71      * @param varName the variable name
72      * @param data the array of boolean
73      * @param swaped true if the matrix is stored row by row
74      */
75     public ScilabBoolean(String varName, boolean[][] data, boolean swaped) {
76         this.varName = varName;
77         this.data = data;
78         this.swaped = swaped;
79     }
80
81     /**
82      * Create a scalar boolean from a boolean
83      *
84      * @param value
85      *            the boolean
86      */
87     public ScilabBoolean(boolean value) {
88         this.data = new boolean[1][1];
89         this.data[0][0] = value;
90     }
91
92     /**
93      * {@inheritDoc}
94      */
95     @Override
96     public boolean isReference() {
97         return byref;
98     }
99
100     /**
101      * Change the value with the provided data
102      *
103      * @param data
104      *            array of boolean
105      */
106     public void setData(boolean[][] data) {
107         this.data = data;
108     }
109
110     /**
111      * Return the data
112      *
113      * @return the array of array of boolean
114      */
115     public boolean[][] getData() {
116         return data;
117     }
118
119     /**
120      * @return the data
121      */
122     public Object getRawData() {
123         return data;
124     }
125
126     /**
127      * Get the element at position (i, j)
128      * @param i the first coordinate
129      * @param j the second coordinate
130      * @return the corresponding boolean
131      */
132     public boolean getElement(final int i, final int j) {
133         return data[i][j];
134     }
135
136     /**
137      * Set the element at position (i, j)
138      * @param i the first coordinate
139      * @param j the second coordinate
140      * @param x the new value
141      */
142     public void setElement(final int i, final int j, final boolean x) {
143         data[i][j] = x;
144     }
145
146     /**
147      * {@inheritDoc}
148      */
149     @Override
150     public String getVarName() {
151         return varName;
152     }
153
154     /**
155      * {@inheritDoc}
156      */
157     @Override
158     public boolean isSwaped() {
159         return swaped;
160     }
161
162     /**
163      * Return the type of Scilab
164      *
165      * @return the type of Scilab
166      * @since 5.4.0
167      */
168     @Override
169     public ScilabTypeEnum getType() {
170         return ScilabTypeEnum.sci_boolean;
171     }
172
173     /**
174      * Return the height (number of element) of the stored data
175      *
176      * @return the height
177      */
178     @Override
179     public int getHeight() {
180         if (data == null) {
181             return 0;
182         }
183         return data.length;
184     }
185
186     /**
187      * Return the width (number of element) of the stored data
188      *
189      * @return the width
190      */
191     @Override
192     public int getWidth() {
193         if (data == null) {
194             return 0;
195         }
196         return data[0].length;
197     }
198
199     /**
200      * If it is empty / uninitialized
201      *
202      * @return true if empty
203      */
204     @Override
205     public boolean isEmpty() {
206         return data == null;
207     }
208
209     @Override
210     public int hashCode() {
211         return Arrays.deepHashCode(data);
212     }
213
214     /**
215      * @see org.scilab.modules.types.ScilabType#equals(Object)
216      */
217     @Override
218     public boolean equals(Object obj) {
219         if (obj instanceof ScilabBoolean) {
220             ScilabBoolean sciBool = (ScilabBoolean) obj;
221             if (isEmpty() && sciBool.isEmpty()) {
222                 return true;
223             }
224
225             if (this.getWidth() != sciBool.getWidth() || this.getHeight() != sciBool.getHeight()) {
226                 return false;
227             }
228
229             return ScilabTypeUtils.equalsBoolean(this.getRawData(), this.isSwaped(), sciBool.getRawData(), sciBool.isSwaped());
230         }
231
232         return false;
233     }
234
235     /**
236      * {@inheritDoc}
237      */
238     @Override
239     public Object getSerializedObject() {
240         return getData();
241     }
242
243     @Override
244     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
245         int version = in.readInt();
246         switch (version) {
247             case 0:
248                 data = (boolean[][]) in.readObject();
249                 varName = (String) in.readObject();
250                 swaped = in.readBoolean();
251                 break;
252             default:
253                 throw new ClassNotFoundException("A class ScilabBoolean with a version " + version + " does not exists");
254         }
255     }
256
257     @Override
258     public void writeExternal(ObjectOutput out) throws IOException {
259         out.writeInt(VERSION);
260         out.writeObject(getData());
261         out.writeObject(varName);
262         out.writeBoolean(swaped);
263     }
264
265     /**
266      * Display the representation in the Scilab language of the type<BR>
267      * Note that the representation can be copied/pasted straight into Scilab
268      *
269      * @return the pretty print
270      */
271     @Override
272     public String toString() {
273         StringBuilder result = new StringBuilder();
274
275         if (isEmpty()) {
276             return "[]";
277         }
278
279         result.append("[");
280         for (int i = 0; i < getHeight(); ++i) {
281             for (int j = 0; j < getWidth(); ++j) {
282                 if (getElement(i, j)) {
283                     result.append("%t");
284                 } else {
285                     result.append("%f");
286                 }
287                 if (j != getWidth() - 1) {
288                     result.append(", ");
289                 }
290             }
291             if (i != getHeight() - 1) {
292                 result.append(" ; ");
293             }
294         }
295         result.append("]");
296         return result.toString();
297     }
298 }