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