Java tutorial
/* * (C) Copyright 2015-2017 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.mzmine.datamodel; 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.FeatureTable; import io.github.msdk.datamodel.featuretables.FeatureTableColumn; import io.github.msdk.datamodel.featuretables.FeatureTableRow; import io.github.msdk.datamodel.featuretables.Sample; /** * Implementation of the FeatureTable interface. */ public 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} */ @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} */ @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} */ @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<Float> rtRange, Range<Double> mzRange) { List<FeatureTableRow> result = new ArrayList<FeatureTableRow>(); for (FeatureTableRow row : featureTableRows) { Float rowRT = row.getRT(); if ((rowRT != null) && rtRange.contains(rowRT) && mzRange.contains(row.getMz())) result.add(row); } return result; } }