Xcos: exclude the type field introduced by d74e94
[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  * 
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.types;
14
15 import java.util.Arrays;
16
17 /**
18  * This class provides a representation on the Scilab String datatype<br>
19  * <br>
20  * This class is {@link java.io.Serializable} and any modification could 
21  * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
22  * <br>
23  * Example:<br />
24  * <code>
25  * String [][]a={{"This","is","my","string"},{"and","I want to", "compare"," them"}};<br />
26  * ScilabString aMatrix = new ScilabString(a);
27  * </code>
28  * @see org.scilab.modules.javasci.Scilab
29  */
30 public class ScilabString implements ScilabType {
31
32         private static final long serialVersionUID = 359802519980180085L;
33         private static final ScilabTypeEnum type = ScilabTypeEnum.sci_strings;
34
35         private String[][] data;
36
37         /**
38          * Default constructor
39          */
40         public ScilabString() {
41                 data = null;
42         }
43         
44         /**
45          * Constructor with data.
46          * 
47          * @param data the associated data.
48          */
49         public ScilabString(String[][] data) {
50                 this.data = data;
51         }
52         
53         /**
54          * Constructor with vector data.
55          * 
56          * @param data the column vector data 
57          */
58         public ScilabString(String[] data) {
59                 if (data == null || data.length == 0) {
60                         this.data = new String[1][1];
61                         this.data[0][0] = "";
62                 } else {
63                         this.data = new String[1][data.length];
64                         for (int i = 0; i < data.length; i++) {
65                                 this.data[0][i] = data[i];
66                         }
67                 }
68         }
69         
70         /**
71          * Constructor with a unique value
72          * 
73          * @param string the value
74          */
75         public ScilabString(String string) {
76                 if (string == null) {
77                         throw new IllegalArgumentException("string == null");
78                 }
79                 this.data = new String[1][1];
80                 this.data[0][0] = string;
81         }
82
83         /**
84          * Set the values.
85          * 
86          * @param data the values
87          */
88         public void setData(String[][] data) {
89                 this.data = data;
90         }
91
92     /** 
93      * Return the type of Scilab 
94      * @return the type of Scilab
95      * @since 5.4.0
96      */
97     @Override
98         public ScilabTypeEnum getType() {
99         return type;
100     }
101
102         /**
103          * @return the associated values
104          */
105         public String[][] getData() {
106                 return data;
107         }
108         
109         /**
110          * @return the height of the data matrix
111          * @see org.scilab.modules.types.ScilabType#getHeight()
112          */
113         @Override
114         public int getHeight() {
115                 if (data == null) {
116                         return 0;
117                 }
118                 return data.length;
119         }
120
121         /**
122          * @return the width of the data matrix
123          * @see org.scilab.modules.types.ScilabType#getWidth()
124          */
125         @Override
126         public int getWidth() {
127                 if (data == null) {
128                         return 0;
129                 }
130                 return data[0].length;
131         }
132         
133         /**
134          * Check the emptiness of the associated data.
135          * @return true, if the associated data array is empty. 
136          */
137         @Override
138         public boolean isEmpty() {
139                 return (data == null);
140         }
141         
142         /**
143          * @see org.scilab.modules.types.ScilabType#equals(Object)
144          */
145         @Override
146         public boolean equals(Object obj) {
147                 if (obj instanceof ScilabString) {
148                         return Arrays.deepEquals(this.getData(), ((ScilabString)obj).getData());
149                 } else {
150                         return false;
151                 }
152         }
153
154         /**
155          * Display the representation in the Scilab language of the type<br />
156          * Note that the representation can be copied/pasted straight into Scilab 
157      *
158          * @return a Scilab-like String representation of the data.
159          * @see java.lang.Object#toString()
160          */
161         @Override
162         public String toString() {
163                 StringBuffer result = new StringBuffer();
164                 if (isEmpty()) {
165                         result.append("[]");
166                         return result.toString();
167                 }
168
169                 result.append("[");
170                 for (int i = 0; i < getHeight(); ++i) {
171                         for (int j = 0; j < getWidth(); ++j) {
172
173                                 result.append('"');
174                                 result.append(getData()[i][j]);
175                                 result.append('"');
176                                 
177                                 if (j != getWidth() - 1) {
178                                         result.append(", ");
179                                 }
180                         }
181                         if (i != getHeight() - 1) {
182                                 result.append(" ; ");
183                         }
184                 }
185                 result.append("]");
186                 return result.toString();
187         }
188 }