/*
* #%L
* gitools-core
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.matrix.model.compressmatrix;
import org.gitools.api.matrix.IMatrixDimension;
import org.gitools.api.matrix.MatrixDimensionKey;
import org.gitools.matrix.model.AbstractMatrixDimension;
import org.gitools.matrix.model.hashmatrix.HashMatrixDimension;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Represents one dimension (rows or columns) of a {@link CompressMatrix}.
*/
public class CompressDimension extends AbstractMatrixDimension {
private String[] labels;
private Map<String, Integer> labelsToIndex;
/**
* Instantiates a new Compress dimension.
*
* @param labels the identifier labels of this dimension
*/
public CompressDimension(MatrixDimensionKey id, String[] labels) {
super(id);
this.labels = labels;
this.labelsToIndex = new HashMap<>(labels.length);
for (int i = 0; i < labels.length; i++) {
this.labelsToIndex.put(labels[i], i);
}
}
/**
* Total number of labels in this dimension.
*
* @return the int
*/
@Override
public int size() {
return labels.length;
}
/**
* The identifier label at 'index' position.
*
* @param index the index
* @return the label
*/
@Override
public String getLabel(int index) {
return labels[index];
}
/**
* The position of the 'label' item.
*
* @param label the label
* @return the index
*/
@Override
public int indexOf(String label) {
Integer value = labelsToIndex.get(label);
if (value == null) {
return -1;
}
return value;
}
/**
* Get all the labels.
*
* @return the string array
*/
public String[] getLabels() {
return labels;
}
@Override
public IMatrixDimension subset(Set<String> identifiers) {
return new HashMatrixDimension(getId(), identifiers);
}
}