/*
* #%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.filter;
import org.gitools.api.matrix.IMatrixLayer;
import org.gitools.api.matrix.IMatrixPosition;
import org.gitools.api.matrix.IMatrixPredicate;
import org.gitools.utils.cutoffcmp.CutoffCmp;
import org.gitools.utils.xml.adapter.CutoffCmpXmlAdapter;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlAccessorType(XmlAccessType.FIELD)
public class ValueFilterFunction implements IMatrixPredicate<Double> {
protected String layerId;
@XmlJavaTypeAdapter(CutoffCmpXmlAdapter.class)
protected CutoffCmp comparator;
protected Double cutoffValue;
protected Double nullConversion;
public ValueFilterFunction() {
//JAXB requirement
}
public ValueFilterFunction(IMatrixLayer layer, CutoffCmp comparator, Double cutoffValue, Double nullConversion) {
this.layerId = layer.getId();
this.comparator = comparator;
this.cutoffValue = cutoffValue;
this.nullConversion = nullConversion;
}
public String getLayerId() {
return layerId;
}
public void setLayer(IMatrixLayer layer) {
this.layerId = layer.getId();
}
public void setLayer(String layerId) {
this.layerId = layerId;
}
public CutoffCmp getComparator() {
return comparator;
}
public void setComparator(CutoffCmp comparator) {
this.comparator = comparator;
}
public double getCutoffValue() {
return this.cutoffValue;
}
public void setCutoffValue(Double cutoffValue) {
this.cutoffValue = cutoffValue;
}
@Override
public String toString() {
return layerId + " " + comparator.toString() + " " + cutoffValue;
}
public Double getNullConversion() {
return nullConversion;
}
public void setNullConversion(Double nullConversion) {
this.nullConversion = nullConversion;
}
@Override
public boolean apply(Double value, IMatrixPosition position) {
if (value == null) {
if (nullConversion == null) {
return false;
} else {
value = nullConversion;
}
}
return comparator.compare(value, cutoffValue);
}
}