* Java mapping of Scilab data has now a new method called getType() which
[scilab.git] / scilab / modules / types / src / java / org / scilab / modules / types / ScilabMList.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.ArrayList;
16 import java.util.Collection;
17
18 /**
19  * This class provides a representation on the Scilab MList datatype
20  * <br>
21  * Example:<br />
22  * <code>
23  * ScilabMList data = new ScilabMList();<br />
24  * data.add(new ScilabString("hello"));<br />
25  * data.add(new ScilabDouble(2));<br />
26  * </code>
27  * @see org.scilab.modules.javasci.Scilab
28  */
29 public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
30    
31         private static final long serialVersionUID = 3224510024213901841L;
32         private ScilabTypeEnum type = ScilabTypeEnum.sci_mlist;
33
34         /**
35          * Construct an empty mlist.
36          * 
37          * Note that the first element of this collection is the header used by
38          * Scilab to find each field name.
39          */
40         public ScilabMList() {
41                 super();
42         }
43         
44         /**
45          * Construct an mlist with a specified header.
46          *  
47          * @param types field names used by the accessors.
48          */
49         public ScilabMList(String []types) {
50                 super();
51                 String [][] typesData = new String[1][types.length];
52                 typesData[0] = types;
53                 add(new ScilabString(typesData));
54         }
55         
56         /**
57          * Construct a tlist containing the elements of the specified collection, in
58          * the order that they are returned by the specified collection's iterator.
59          * 
60          * @param names
61          *                      field names, used by the accessors.
62          * @param c
63          *                      the collection whose elements are to be placed into this
64          *                      mlist.
65          */
66         public ScilabMList(String[] names, Collection< ? extends ScilabType> c) {
67                 super(c.size() + 1);
68                 
69                 String[][] namesData = new String[1][names.length];
70                 namesData[0] = names;
71                 add(new ScilabString(namesData));
72                 
73                 addAll(c);
74         }
75         
76         /**
77          * @return 1 when there is data on the list, 0 otherwise.
78          * @see org.scilab.modules.types.ScilabType#getHeight()
79          */
80         @Override
81         public int getHeight() {
82                 if (isEmpty()) {
83                         return 0;
84                 }
85                 return 1;
86         }
87
88     /** 
89      * Return the type of Scilab 
90      * @return the type of Scilab
91      * @since 5.4.0
92      */
93     public ScilabTypeEnum getType() {
94         return type;
95     }
96
97         /**
98          * @return 1 when there is data on the list, 0 otherwise.
99          * @see org.scilab.modules.types.ScilabType#getWidth()
100          */
101         @Override
102         public int getWidth() {
103                 if (isEmpty()) {
104                         return 0;
105                 }
106                 return size();
107         }
108         
109         /**
110          * Display the representation in the Scilab language of the type<br />
111          * Note that the representation can be copied/pasted straight into Scilab 
112      *
113          * @return the pretty-printed data 
114          * @see java.util.AbstractCollection#toString()
115          */
116         @Override
117         public String toString() {
118                 
119                 StringBuffer result = new StringBuffer();
120                 if (isEmpty()) {
121                         result.append("mlist()");
122                         return result.toString();
123                 }
124
125                 result.append("mlist(");
126                 for (int i = 0; i < size(); i++) {
127                         result.append(get(i));
128                         if (i != size() - 1) {
129                                 result.append(", ");
130                         }
131                         
132                 }
133                 result.append(")");
134         
135                 return result.toString();
136         }
137 }