/*******************************************************************************
 * Copyright (c) 2006, 2018 IBM Corporation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - Jeff Briggs, Henry Hughes, Ryan Morse
 *******************************************************************************/

package org.eclipse.linuxtools.systemtap.graphing.core.datasets.row;

import java.util.Arrays;

import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataEntry;

public class RowEntry implements IDataEntry {
    public RowEntry() {
        data = null;
    }

    @Override
    public int getRowCount() {
        if(null != data)
            return 1;
        return 0;
    }

    @Override
    public int getColCount() {
        return (null == data) ? 0 : data.length;
    }

    @Override
    public Object get(String key, int col) {
        return (0 <= col && col < getColCount()) ? data[col] : null;
    }

    @Override
    public Object[] getRow(int row) {
        if(0 == row)
            return data;
        return null;
    }

    @Override
    public Object[] getRow(String key) {
        return data;
    }

    @Override
    public Object[] getColumn(int col) {
        if(0 <= col && getColCount() > col) {
            return new Object[] {get(null, col)};
        }
        return null;
    }

    @Override
    public Object[][] getData() {
        return new Object[][] {getRow(null)};
    }

    @Override
    public IDataEntry copy() {
        RowEntry entry = new RowEntry();
        if(null != data) {
            entry.data = new Object[data.length];
            System.arraycopy(data, 0, entry.data, 0, data.length);
        }

        return entry;
    }

    @Override
    public void putRow(int row, Object[] data) {
        if(0 == row && data != null){
            this.data = Arrays.copyOf(data, data.length);
        }
    }

    @Override
    public boolean remove(int row) {
        if(row == 0) {
            data = null;
            return true;
        } else {
            return false;
        }
    }

    private Object[] data;
}
