    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                if (obj == null) { // special case
    096                        ObjectDataset ds = new ObjectDataset(new Object[] {null});
    097                        ds.setShape();
    098                        return ds;
    099                }
    100
    101                ObjectDatasetBase result = ObjectDatasetBase.createFromObject(obj);
    102                ObjectDataset ds = new ObjectDataset(result.data, result.shape);
    103                if (result.shape.length == 0) {
    104                        ds.setShape(result.shape); // special case of single item
    105                }
    106                return ds;
    107        }
    108
    109        /**
    110         * @param shape
    111         * @return a dataset filled with ones
    112         */
    113        static ObjectDataset ones(final int... shape) {
    114                throw new UnsupportedOperationException("Unsupported method for class");
    115        }
    116
    117        @Override
    118        public boolean getElementBooleanAbs(int index) {
    119                throw new UnsupportedOperationException("Unsupported method for class");
    120        }
    121
    122        @Override
    123        public double getElementDoubleAbs(int index) {
    124                throw new UnsupportedOperationException("Unsupported method for class");
    125        }
    126
    127        @Override
    128        public long getElementLongAbs(int index) {
    129                throw new UnsupportedOperationException("Unsupported method for class");
    130        }
    131
    132        @Override
    133        public double getDouble() {
    134                throw new UnsupportedOperationException("Unsupported method for class");
    135        }
    136
    137        @Override
    138        public double getDouble(int i) {
    139                throw new UnsupportedOperationException("Unsupported method for class");
    140        }
    141
    142        @Override
    143        public double getDouble(int i, int j) {
    144                throw new UnsupportedOperationException("Unsupported method for class");
    145        }
    146
    147        @Override
    148        public double getDouble(int... pos) {
    149                throw new UnsupportedOperationException("Unsupported method for class");
    150        }
    151
    152        @Override
    153        public float getFloat() {
    154                throw new UnsupportedOperationException("Unsupported method for class");
    155        }
    156
    157        @Override
    158        public float getFloat(int i) {
    159                throw new UnsupportedOperationException("Unsupported method for class");
    160        }
    161
    162        @Override
    163        public float getFloat(int i, int j) {
    164                throw new UnsupportedOperationException("Unsupported method for class");
    165        }
    166
    167        @Override
    168        public float getFloat(int... pos) {
    169                throw new UnsupportedOperationException("Unsupported method for class");
    170        }
    171
    172        @Override
    173        public long getLong() {
    174                throw new UnsupportedOperationException("Unsupported method for class");
    175        }
    176
    177        @Override
    178        public long getLong(int i) {
    179                throw new UnsupportedOperationException("Unsupported method for class");
    180        }
    181
    182        @Override
    183        public long getLong(int i, int j) {
    184                throw new UnsupportedOperationException("Unsupported method for class");
    185        }
    186
    187        @Override
    188        public long getLong(int... pos) {
    189                throw new UnsupportedOperationException("Unsupported method for class");
    190        }
    191
    192        @Override
    193        public int getInt() {
    194                throw new UnsupportedOperationException("Unsupported method for class");
    195        }
    196
    197        @Override
    198        public int getInt(int i) {
    199                throw new UnsupportedOperationException("Unsupported method for class");
    200        }
    201
    202        @Override
    203        public int getInt(int i, int j) {
    204                throw new UnsupportedOperationException("Unsupported method for class");
    205        }
    206
    207        @Override
    208        public int getInt(int... pos) {
    209                throw new UnsupportedOperationException("Unsupported method for class");
    210        }
    211
    212        @Override
    213        public short getShort() {
    214                throw new UnsupportedOperationException("Unsupported method for class");
    215        }
    216
    217        @Override
    218        public short getShort(int i) {
    219                throw new UnsupportedOperationException("Unsupported method for class");
    220        }
    221
    222        @Override
    223        public short getShort(int i, int j) {
    224                throw new UnsupportedOperationException("Unsupported method for class");
    225        }
    226
    227        @Override
    228        public short getShort(int... pos) {
    229                throw new UnsupportedOperationException("Unsupported method for class");
    230        }
    231
    232        @Override
    233        public byte getByte() {
    234                throw new UnsupportedOperationException("Unsupported method for class");
    235        }
    236
    237        @Override
    238        public byte getByte(int i) {
    239                throw new UnsupportedOperationException("Unsupported method for class");
    240        }
    241
    242        @Override
    243        public byte getByte(int i, int j) {
    244                throw new UnsupportedOperationException("Unsupported method for class");
    245        }
    246
    247        @Override
    248        public byte getByte(int... pos) {
    249                throw new UnsupportedOperationException("Unsupported method for class");
    250        }
    251
    252        @Override
    253        public boolean getBoolean() {
    254                throw new UnsupportedOperationException("Unsupported method for class");
    255        }
    256
    257        @Override
    258        public boolean getBoolean(int i) {
    259                throw new UnsupportedOperationException("Unsupported method for class");
    260        }
    261
    262        @Override
    263        public boolean getBoolean(int i, int j) {
    264                throw new UnsupportedOperationException("Unsupported method for class");
    265        }
    266
    267        @Override
    268        public boolean getBoolean(int... pos) {
    269                throw new UnsupportedOperationException("Unsupported method for class");
    270        }
    271
    272        @Override
    273        public String getStringAbs(final int index) {
    274                return stringFormat instanceof MessageFormat ? stringFormat.format(data[index]) :
    275                                String.format("%s", data[index]);
    276        }
    277
    278        @Override
    279        public int[] minPos(boolean... ignoreInvalids) {
    280                throw new UnsupportedOperationException("Unsupported method for class");
    281        }
    282
    283        @Override
    284        public int[] maxPos(boolean... ignoreInvalids) {
    285                throw new UnsupportedOperationException("Unsupported method for class");
    286        }
    287
    288        @Override
    289        public boolean containsInfs() {
    290                return false;
    291        }
    292
    293        @Override
    294        public boolean containsNans() {
    295                return false;
    296        }
    297
    298        @Override
    299        public ObjectDataset iadd(Object o) {
    300                throw new UnsupportedOperationException("Unsupported method for class");
    301        }
    302
    303        @Override
    304        public ObjectDataset isubtract(Object o) {
    305                throw new UnsupportedOperationException("Unsupported method for class");
    306        }
    307
    308        @Override
    309        public ObjectDataset imultiply(Object o) {
    310                throw new UnsupportedOperationException("Unsupported method for class");
    311        }
    312
    313        @Override
    314        public ObjectDataset idivide(Object o) {
    315                throw new UnsupportedOperationException("Unsupported method for class");
    316        }
    317
    318        @Override
    319        public ObjectDataset iremainder(Object o) {
    320                throw new UnsupportedOperationException("Unsupported method for class");
    321        }
    322
    323        @Override
    324        public ObjectDataset ifloor() {
    325                throw new UnsupportedOperationException("Unsupported method for class");
    326        }
    327
    328        @Override
    329        public ObjectDataset ipower(Object o) {
    330                throw new UnsupportedOperationException("Unsupported method for class");
    331        }
    332
    333        @Override
    334        public double residual(Object o) {
    335                throw new UnsupportedOperationException("Unsupported method for class");
    336        }
    337}