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