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