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