/*
* #%L
* org.gitools.matrix
* %%
* Copyright (C) 2013 - 2014 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.matrix.element;
import org.gitools.api.matrix.*;
import java.util.HashMap;
import java.util.Map;
public class MapLayerAdapter<T> implements ILayerAdapter<Map<String, T>> {
private IMatrixDimension mappedDimension;
private ILayerAdapter<T> innerAdapter;
public MapLayerAdapter(IMatrixDimension mappedDimension, ILayerAdapter<T> innerAdapter) {
this.mappedDimension = mappedDimension;
this.innerAdapter = innerAdapter;
}
@Override
public IMatrixLayers<? extends IMatrixLayer> getMatrixLayers() {
return innerAdapter.getMatrixLayers();
}
@Override
public <L> IMatrixLayer<L> getLayer(Class<L> layerClass, String layerName) {
return innerAdapter.getLayer(layerClass, layerName);
}
@Override
public void set(IMatrix matrix, Map<String, T> value, IMatrixPosition position) {
for (String key : value.keySet()) {
innerAdapter.set(matrix, value.get(key), position.set(mappedDimension, key));
}
}
@Override
public void set(IMatrix matrix, Map<String, T> value, String... identifiers) {
throw new UnsupportedOperationException("This layer adapter requires a IMatrixPosition instead of a identifiers array");
}
@Override
public Map<String, T> get(IMatrix matrix, IMatrixPosition position) {
Map<String, T> results = new HashMap();
for (String key : mappedDimension) {
results.put(key, innerAdapter.get(matrix, position.set(mappedDimension, key)));
}
return results;
}
@Override
public Map<String, T> get(IMatrix matrix, String... identifiers) {
throw new UnsupportedOperationException("This layer adapter requires a IMatrixPosition instead of a identifiers array");
}
}