Javasci: fix java build, javadoc warnings
[scilab.git] / scilab / modules / types / src / java / org / scilab / modules / types / ScilabList.java
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
4  *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 package org.scilab.modules.types;
18
19 import java.io.IOException;
20 import java.io.ObjectInput;
21 import java.io.ObjectOutput;
22 import java.util.ArrayList;
23 import java.util.Collection;
24
25 /**
26  * This class provides a representation on the Scilab List datatype<br>
27  * <br>
28  * This class is {@link java.io.Serializable} and any modification could impact
29  * load and store of data (Xcos files, Javasci saved data, etc...).<br>
30  * <br>
31  * Example:<BR>
32  * <code>
33  * ScilabList data = new ScilabList();<BR>
34  * data.add(new ScilabString("hello"));<BR>
35  * data.add(new ScilabDouble(2));<BR>
36  * </code>
37  *
38  * @see org.scilab.modules.javasci.Scilab
39  */
40 public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
41
42     private static final long serialVersionUID = 6884293176289980909L;
43
44     private static final int VERSION = 0;
45
46     private String varName;
47
48     /**
49      * Construct an empty Scilab list.
50      */
51     public ScilabList() {
52         super();
53     }
54
55     /**
56      * Construct a list containing the elements of the specified collection, in
57      * the order that they are returned by the specified collection's iterator.
58      *
59      * @param c
60      *            the collection whose elements are to be placed into this list.
61      */
62     public ScilabList(Collection <? extends ScilabType > c) {
63         super(c);
64     }
65
66     /**
67      * Construct an empty mlist.
68      *
69      * Note that the first element of this collection is the header used by
70      * Scilab to find each field name.
71      * @param varName the variable name
72      */
73     public ScilabList(String varName) {
74         super();
75         this.varName = varName;
76     }
77
78     /**
79      * @param varName the variable name
80      * @param size the initial list size
81      */
82     public ScilabList(String varName, int size) {
83         super(size);
84         this.varName = varName;
85     }
86
87     /**
88      * {@inheritDoc}
89      */
90     @Override
91     public boolean isReference() {
92         return false;
93     }
94
95     /**
96      * {@inheritDoc}
97      */
98     @Override
99     public String getVarName() {
100         return varName;
101     }
102
103     /**
104      * {@inheritDoc}
105      */
106     @Override
107     public boolean isSwaped() {
108         return false;
109     }
110
111     /**
112      * @return 1 when there is data on the list, 0 otherwise.
113      * @see org.scilab.modules.types.ScilabType#getHeight()
114      */
115     @Override
116     public int getHeight() {
117         if (isEmpty()) {
118             return 0;
119         }
120         return 1;
121     }
122
123     /**
124      * Return the type of Scilab
125      *
126      * @return the type of Scilab
127      * @since 5.4.0
128      */
129     @Override
130     public ScilabTypeEnum getType() {
131         return ScilabTypeEnum.sci_list;
132     }
133
134     /**
135      * @return 1 when there is data on the list, 0 otherwise.
136      * @see org.scilab.modules.types.ScilabType#getWidth()
137      */
138     @Override
139     public int getWidth() {
140         if (isEmpty()) {
141             return 0;
142         }
143         return size();
144     }
145
146     /**
147      * Get a serialized list; The format is the following: i) returned[0] is an
148      * array of integers containing the Scilab type (ScilabTypeEunm) of the
149      * different elements of the list. ii) returned[i] for i&gt;=1 contains the
150      * serialized form of each items.
151      *
152      * @return a serialized ScilabList/
153      */
154     @Override
155     public Object[] getSerializedObject() {
156         int[] types = new int[size()];
157         Object[] items = new Object[types.length + 1];
158
159         for (int i = 0; i < types.length; i++) {
160             ScilabType var = get(i);
161             types[i] = var.getType().swigValue();
162             items[i + 1] = var.getSerializedObject();
163         }
164         items[0] = types;
165
166         return items;
167     }
168
169     @Override
170     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
171         int version = in.readInt();
172         switch (version) {
173             case 0:
174                 int size = in.readInt();
175                 ensureCapacity(size + 1);
176                 ArrayList list = (ArrayList) this;
177                 for (int i = 0; i < size; i++) {
178                     list.add(in.readObject());
179                 }
180                 varName = (String) in.readObject();
181                 break;
182             default:
183                 throw new ClassNotFoundException("A class ScilabList with a version " + version + " does not exists");
184         }
185     }
186
187     @Override
188     public void writeExternal(ObjectOutput out) throws IOException {
189         out.writeInt(VERSION);
190         out.writeInt(size());
191         for (Object var : (ArrayList) this) {
192             out.writeObject(var);
193         }
194         out.writeObject(varName);
195     }
196
197     /**
198      * Display the representation in the Scilab language of the type<BR>
199      * Note that the representation can be copied/pasted straight into Scilab
200      *
201      * @return the pretty-printed data
202      * @see java.util.AbstractCollection#toString()
203      */
204     @Override
205     public String toString() {
206         StringBuffer result = new StringBuffer();
207         if (isEmpty()) {
208             return "list()";
209         }
210
211         result.append("list(");
212         for (int i = 0; i < size(); i++) {
213             result.append(get(i));
214             if (i != size() - 1) {
215                 result.append(", ");
216             }
217         }
218         result.append(")");
219
220         return result.toString();
221     }
222 }