Add comparison options on Java Scilab datatypes (.equals(obj))
[scilab.git] / scilab / modules / types / src / java / org / scilab / modules / types / scilabTypes / 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.scilabTypes;
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.scilabTypes.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.scilabTypes.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.scilabTypes.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          * @return a Scilab-like String representation of the data.
129          * @see java.lang.Object#toString()
130          */
131         public String toString() {
132                 StringBuffer result = new StringBuffer();
133                 if (isEmpty()) {
134                         result.append("[]");
135                         return result.toString();
136                 }
137
138                 result.append("[");
139                 for (int i = 0; i < getHeight(); ++i) {
140                         for (int j = 0; j < getWidth(); ++j) {
141
142                                 result.append('"');
143                                 result.append(getData()[i][j]);
144                                 result.append('"');
145                                 
146                                 if (j != getWidth() - 1) {
147                                         result.append(", ");
148                                 }
149                         }
150                         if (i != getHeight() - 1) {
151                                 result.append(" ; ");
152                         }
153                 }
154                 result.append("]");
155                 return result.toString();
156         }
157 }