001/*-
002 *******************************************************************************
003 * Copyright (c) 2011, 2016 Diamond Light Source Ltd.
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *    Peter Chang - initial API and implementation and/or initial documentation
011 *******************************************************************************/
012
013package org.eclipse.january.dataset;
014
015import java.text.MessageFormat;
016
017/**
018 * Extend dataset for objects
019 */
020public class ObjectDataset extends ObjectDatasetBase {
021        // pin UID to base class
022        private static final long serialVersionUID = Dataset.serialVersionUID;
023
024        /**
025         * Create a null dataset
026         */
027        ObjectDataset() {
028                super();
029        }
030
031        /**
032         * Create a null-filled dataset of given shape
033         * @param shape
034         */
035        ObjectDataset(final int... shape) {
036                super(shape);
037        }
038
039        /**
040         * Create a dataset using given data
041         * @param data
042         * @param shape (can be null to create 1D dataset)
043         */
044        ObjectDataset(final Object[] data, int... shape) {
045                super(data, shape);
046        }
047
048        /**
049         * Copy a dataset
050         * @param dataset
051         */
052        ObjectDataset(final ObjectDataset dataset) {
053                super(dataset);
054        }
055
056        /**
057         * Cast a dataset to this class type
058         * @param dataset
059         */
060        ObjectDataset(final Dataset dataset) {
061                super(dataset);
062        }
063
064        @Override
065        public ObjectDataset getView(boolean deepCopyMetadata) {
066                ObjectDataset view = new ObjectDataset();
067                copyToView(this, view, true, deepCopyMetadata);
068                view.setData();
069                return view;
070        }
071
072        @Override
073        public ObjectDataset clone() {
074                return new ObjectDataset(this);
075        }
076
077        @Override
078        public ObjectDataset getSlice(SliceIterator siter) {
079                ObjectDatasetBase base = super.getSlice(siter);
080
081                ObjectDataset slice = new ObjectDataset();
082                copyToView(base, slice, false, false);
083                slice.setData();
084                return slice;
085        }
086
087        /**
088         * Create a dataset from an object which could be a Java list, array (of arrays...)
089         * or Number. Ragged sequences or arrays are padded with zeros.
090         * 
091         * @param obj
092         * @return dataset with contents given by input
093         */
094        static ObjectDataset createFromObject(final Object obj) {
095                ObjectDatasetBase result = ObjectDatasetBase.createFromObject(obj);
096                ObjectDataset ds = new ObjectDataset(result.data, result.shape);
097                if (result.shape.length == 0)
098                        ds.setShape(result.shape); // special case of single item 
099                return ds;
100        }
101
102        /**
103         * @param shape
104         * @return a dataset filled with ones
105         */
106        static ObjectDataset ones(final int... shape) {
107                throw new UnsupportedOperationException("Unsupported method for class");
108        }
109
110        @Override
111        public boolean getElementBooleanAbs(int index) {
112                throw new UnsupportedOperationException("Unsupported method for class");
113        }
114
115        @Override
116        public double getElementDoubleAbs(int index) {
117                throw new UnsupportedOperationException("Unsupported method for class");
118        }
119
120        @Override
121        public long getElementLongAbs(int index) {
122                throw new UnsupportedOperationException("Unsupported method for class");
123        }
124
125        @Override
126        public double getDouble() {
127                throw new UnsupportedOperationException("Unsupported method for class");
128        }
129
130        @Override
131        public double getDouble(int i) {
132                throw new UnsupportedOperationException("Unsupported method for class");
133        }
134
135        @Override
136        public double getDouble(int i, int j) {
137                throw new UnsupportedOperationException("Unsupported method for class");
138        }
139
140        @Override
141        public double getDouble(int... pos) {
142                throw new UnsupportedOperationException("Unsupported method for class");
143        }
144
145        @Override
146        public float getFloat() {
147                throw new UnsupportedOperationException("Unsupported method for class");
148        }
149
150        @Override
151        public float getFloat(int i) {
152                throw new UnsupportedOperationException("Unsupported method for class");
153        }
154
155        @Override
156        public float getFloat(int i, int j) {
157                throw new UnsupportedOperationException("Unsupported method for class");
158        }
159
160        @Override
161        public float getFloat(int... pos) {
162                throw new UnsupportedOperationException("Unsupported method for class");
163        }
164
165        @Override
166        public long getLong() {
167                throw new UnsupportedOperationException("Unsupported method for class");
168        }
169
170        @Override
171        public long getLong(int i) {
172                throw new UnsupportedOperationException("Unsupported method for class");
173        }
174
175        @Override
176        public long getLong(int i, int j) {
177                throw new UnsupportedOperationException("Unsupported method for class");
178        }
179
180        @Override
181        public long getLong(int... pos) {
182                throw new UnsupportedOperationException("Unsupported method for class");
183        }
184
185        @Override
186        public int getInt() {
187                throw new UnsupportedOperationException("Unsupported method for class");
188        }
189
190        @Override
191        public int getInt(int i) {
192                throw new UnsupportedOperationException("Unsupported method for class");
193        }
194
195        @Override
196        public int getInt(int i, int j) {
197                throw new UnsupportedOperationException("Unsupported method for class");
198        }
199
200        @Override
201        public int getInt(int... pos) {
202                throw new UnsupportedOperationException("Unsupported method for class");
203        }
204
205        @Override
206        public short getShort() {
207                throw new UnsupportedOperationException("Unsupported method for class");
208        }
209
210        @Override
211        public short getShort(int i) {
212                throw new UnsupportedOperationException("Unsupported method for class");
213        }
214
215        @Override
216        public short getShort(int i, int j) {
217                throw new UnsupportedOperationException("Unsupported method for class");
218        }
219
220        @Override
221        public short getShort(int... pos) {
222                throw new UnsupportedOperationException("Unsupported method for class");
223        }
224
225        @Override
226        public byte getByte() {
227                throw new UnsupportedOperationException("Unsupported method for class");
228        }
229
230        @Override
231        public byte getByte(int i) {
232                throw new UnsupportedOperationException("Unsupported method for class");
233        }
234
235        @Override
236        public byte getByte(int i, int j) {
237                throw new UnsupportedOperationException("Unsupported method for class");
238        }
239
240        @Override
241        public byte getByte(int... pos) {
242                throw new UnsupportedOperationException("Unsupported method for class");
243        }
244
245        @Override
246        public boolean getBoolean() {
247                throw new UnsupportedOperationException("Unsupported method for class");
248        }
249
250        @Override
251        public boolean getBoolean(int i) {
252                throw new UnsupportedOperationException("Unsupported method for class");
253        }
254
255        @Override
256        public boolean getBoolean(int i, int j) {
257                throw new UnsupportedOperationException("Unsupported method for class");
258        }
259
260        @Override
261        public boolean getBoolean(int... pos) {
262                throw new UnsupportedOperationException("Unsupported method for class");
263        }
264
265        @Override
266        public String getStringAbs(final int index) {
267                return stringFormat instanceof MessageFormat ? stringFormat.format(data[index]) :
268                                String.format("%s", data[index]);
269        }
270
271        @Override
272        public int[] minPos(boolean... ignoreInvalids) {
273                throw new UnsupportedOperationException("Unsupported method for class");
274        }
275
276        @Override
277        public int[] maxPos(boolean... ignoreInvalids) {
278                throw new UnsupportedOperationException("Unsupported method for class");
279        }
280
281        @Override
282        public boolean containsInfs() {
283                return false;
284        }
285
286        @Override
287        public boolean containsNans() {
288                return false;
289        }
290
291        @Override
292        public ObjectDataset iadd(Object o) {
293                throw new UnsupportedOperationException("Unsupported method for class");
294        }
295
296        @Override
297        public ObjectDataset isubtract(Object o) {
298                throw new UnsupportedOperationException("Unsupported method for class");
299        }
300
301        @Override
302        public ObjectDataset imultiply(Object o) {
303                throw new UnsupportedOperationException("Unsupported method for class");
304        }
305
306        @Override
307        public ObjectDataset idivide(Object o) {
308                throw new UnsupportedOperationException("Unsupported method for class");
309        }
310
311        @Override
312        public ObjectDataset iremainder(Object o) {
313                throw new UnsupportedOperationException("Unsupported method for class");
314        }
315
316        @Override
317        public ObjectDataset ifloor() {
318                throw new UnsupportedOperationException("Unsupported method for class");
319        }
320
321        @Override
322        public ObjectDataset ipower(Object o) {
323                throw new UnsupportedOperationException("Unsupported method for class");
324        }
325
326        @Override
327        public double residual(Object o) {
328                throw new UnsupportedOperationException("Unsupported method for class");
329        }
330}