/*
* #%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.heatmap;
import org.gitools.api.matrix.IAnnotations;
import org.gitools.api.matrix.MatrixDimensionKey;
import org.gitools.api.matrix.view.Direction;
import org.gitools.api.resource.ResourceReference;
import org.gitools.heatmap.decorator.DetailsDecoration;
import org.gitools.heatmap.header.HeatmapHeader;
import org.gitools.matrix.model.matrix.AnnotationMatrix;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
public class MirrorDimension extends HeatmapDimension {
private HeatmapDimension main;
private HeatmapDimension mirror;
private Comparator<String> dimensionComparator;
public MirrorDimension(HeatmapDimension main, HeatmapDimension mirror) {
super(mirror);
this.main = main;
this.mirror = mirror;
this.main.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
MirrorDimension.this.firePropertyChange(evt);
}
});
this.mirror.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
MirrorDimension.this.firePropertyChange(evt);
}
});
createComparator();
}
@Override
public void addAnnotations(IAnnotations annotations) {
mirror.addAnnotations(annotations);
}
@Override
public void addHeader(HeatmapHeader header) {
mirror.addHeader(header);
}
@Override
public void clearHighlightedLabels() {
main.clearHighlightedLabels();
}
@Override
public AnnotationMatrix getAnnotations() {
return mirror.getAnnotations();
}
@Override
public int getCellSize() {
return mirror.getCellSize();
}
@Override
public Color getGridColor() {
return mirror.getGridColor();
}
@Override
public int getGridSize() {
return mirror.getGridSize();
}
@Override
public List<HeatmapHeader> getHeaders() {
return mirror.getHeaders();
}
@Override
public int getHeaderSize() {
return mirror.getHeaderSize();
}
@Override
public MatrixDimensionKey getId() {
return mirror.getId();
}
@Override
public int indexOf(String label) {
return main.indexOf(label);
}
@Override
public String getLabel(int index) {
return main.getLabel(index);
}
@Override
public Set<String> getSelected() {
return main.getSelected();
}
@Override
public String getFocus() {
return mirror.getFocus();
}
@Override
public List<String> toList() {
return main.toList();
}
@Override
public void hide(Set<String> indices) {
main.hide(indices);
}
@Override
public boolean isHighlighted(String label) {
return main.isHighlighted(label);
}
@Override
public void move(Direction direction, Set<String> indices) {
main.move(direction, indices);
}
@Override
public void selectAll() {
main.selectAll();
}
@Override
public void setCellSize(int newValue) {
mirror.setCellSize(newValue);
}
@Override
public void setGridColor(Color gridColor) {
mirror.setGridColor(gridColor);
}
@Override
public void setGridSize(int gridSize) {
mirror.setGridSize(gridSize);
}
@Override
public void setHighlightedLabels(Set<String> highlightedLabels) {
main.setHighlightedLabels(highlightedLabels);
}
@Override
public void setFocus(String focus) {
mirror.setFocus(focus);
}
@Override
public void show(List<String> identifiers) {
main.show(identifiers);
}
@Override
public int size() {
return main.size();
}
@Override
public void updateHeaders() {
mirror.updateHeaders();
}
@Override
public void populateDetails(List<DetailsDecoration> details) {
mirror.populateDetails(details);
}
@Override
public ResourceReference<AnnotationMatrix> getAnnotationsReference() {
return mirror.getAnnotationsReference();
}
@Override
public void setAnnotationsReference(ResourceReference<AnnotationMatrix> annotationsReference) {
mirror.setAnnotationsReference(annotationsReference);
}
private void createComparator() {
dimensionComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return mirror.indexOf(o1) - mirror.indexOf(o2);
}
};
}
public String[] assertOrder(String[] ids) {
Arrays.sort(ids, dimensionComparator);
return ids;
}
}