io.github.msdk.datamodel.impl.SimpleFeatureTable.java Source code

Java tutorial

Introduction

Here is the source code for io.github.msdk.datamodel.impl.SimpleFeatureTable.java

Source

/* 
 * (C) Copyright 2015-2016 by MSDK Development Team
 *
 * This software is dual-licensed under either
 *
 * (a) the terms of the GNU Lesser General Public License version 2.1
 * as published by the Free Software Foundation
 *
 * or (per the licensee's choosing)
 *
 * (b) the terms of the Eclipse Public License v1.0 as published by
 * the Eclipse Foundation.
 */

package io.github.msdk.datamodel.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Nonnull;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Range;

import io.github.msdk.datamodel.datastore.DataPointStore;
import io.github.msdk.datamodel.featuretables.ColumnName;
import io.github.msdk.datamodel.featuretables.FeatureTable;
import io.github.msdk.datamodel.featuretables.FeatureTableColumn;
import io.github.msdk.datamodel.featuretables.FeatureTableRow;
import io.github.msdk.datamodel.featuretables.Sample;
import io.github.msdk.datamodel.rawdata.ChromatographyInfo;

/**
 * Implementation of the FeatureTable interface.
 */
class SimpleFeatureTable implements FeatureTable {

    private @Nonnull String name;
    private @Nonnull DataPointStore dataPointStore;
    private final @Nonnull ArrayList<FeatureTableRow> featureTableRows;
    private final @Nonnull ArrayList<FeatureTableColumn<?>> featureTableColumns;

    SimpleFeatureTable(@Nonnull String name, @Nonnull DataPointStore dataPointStore) {
        Preconditions.checkNotNull(name);
        Preconditions.checkNotNull(dataPointStore);
        this.name = name;
        this.dataPointStore = dataPointStore;
        featureTableRows = new ArrayList<FeatureTableRow>();
        featureTableColumns = new ArrayList<FeatureTableColumn<?>>();
    }

    /** {@inheritDoc} */
    @Override
    public @Nonnull String getName() {
        return name;
    }

    /** {@inheritDoc} */
    @Override
    public void setName(@Nonnull String name) {
        Preconditions.checkNotNull(name);
        this.name = name;
    }

    /** {@inheritDoc} */
    @SuppressWarnings("null")
    @Override
    public @Nonnull List<FeatureTableRow> getRows() {
        List<FeatureTableRow> featureTableRowCopy = ImmutableList.copyOf(featureTableRows);
        return featureTableRowCopy;
    }

    /** {@inheritDoc} */
    @Override
    public void addRow(@Nonnull FeatureTableRow row) {
        Preconditions.checkNotNull(row);
        synchronized (featureTableRows) {
            featureTableRows.add(row);
        }
    }

    /** {@inheritDoc} */
    @Override
    public void removeRow(@Nonnull FeatureTableRow row) {
        Preconditions.checkNotNull(row);
        synchronized (featureTableRows) {
            featureTableRows.remove(row);
        }
    }

    /** {@inheritDoc} */
    @SuppressWarnings("null")
    @Override
    public @Nonnull List<FeatureTableColumn<?>> getColumns() {
        List<FeatureTableColumn<?>> featureTableColumnsCopy = ImmutableList.copyOf(featureTableColumns);
        return featureTableColumnsCopy;
    }

    /** {@inheritDoc} */
    @Override
    public <DATATYPE> FeatureTableColumn<DATATYPE> getColumn(@Nonnull String columnName, Sample sample,
            Class<? extends DATATYPE> dtClass) {
        for (FeatureTableColumn<?> column : featureTableColumns) {
            if (column.getName().equals(columnName)) {

                if (column.getSample() == null) {
                    if (sample == null)
                        return (FeatureTableColumn<DATATYPE>) column;
                } else if (column.getSample().equals(sample)) {
                    return (FeatureTableColumn<DATATYPE>) column;
                }

            }

        }
        return null;
    }

    /** {@inheritDoc} */
    @Override
    public <DATATYPE> FeatureTableColumn<DATATYPE> getColumn(@Nonnull ColumnName columnName, Sample sample) {
        FeatureTableColumn<?> column = getColumn(columnName.getName(), sample, columnName.getDataTypeClass());
        if (column != null) {
            return (FeatureTableColumn<DATATYPE>) column;
        }
        return null;
    }

    /** {@inheritDoc} */
    @Override
    public void addColumn(@Nonnull FeatureTableColumn<?> col) {
        Preconditions.checkNotNull(col);
        synchronized (featureTableColumns) {
            featureTableColumns.add(col);
        }
    }

    /** {@inheritDoc} */
    @Override
    public void removeColumn(@Nonnull FeatureTableColumn<?> col) {
        Preconditions.checkNotNull(col);
        synchronized (featureTableColumns) {
            featureTableColumns.remove(col);
        }
    }

    /** {@inheritDoc} */
    @SuppressWarnings("null")
    @Override
    public @Nonnull List<Sample> getSamples() {
        ArrayList<Sample> sampleList = new ArrayList<Sample>();
        synchronized (featureTableColumns) {
            for (FeatureTableColumn<?> col : featureTableColumns) {
                Sample s = col.getSample();
                if (s != null && !sampleList.contains(s))
                    sampleList.add(s);
            }
        }
        return ImmutableList.copyOf(sampleList);
    }

    /** {@inheritDoc} */
    @Override
    public void dispose() {
        dataPointStore.dispose();
    }

    /** {@inheritDoc} */
    @Override
    public List<FeatureTableRow> getRowsInsideRange(Range<Double> rtRange, Range<Double> mzRange) {
        List<FeatureTableRow> result = new ArrayList<FeatureTableRow>();
        for (FeatureTableRow row : featureTableRows) {
            ChromatographyInfo rowChromatographyInfo = row.getChromatographyInfo();
            if (rtRange.contains((double) rowChromatographyInfo.getRetentionTime())
                    && mzRange.contains(row.getMz()))
                result.add(row);
        }
        return result;
    }

}