/* * #%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.analysis.groupcomparison.filters; import com.google.common.base.Function; import org.gitools.api.matrix.IMatrixDimension; import org.gitools.api.matrix.IMatrixPosition; import org.gitools.api.matrix.IMatrixPredicate; import org.gitools.api.matrix.MatrixDimensionKey; import javax.xml.bind.annotation.*; import java.util.HashSet; import java.util.Objects; import java.util.Set; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class GroupByLabelPredicate implements IMatrixPredicate<Double> { private MatrixDimensionKey dimensionKey; @XmlElementWrapper @XmlElement(name = "id") private Set<String> groupIdentifiers; public GroupByLabelPredicate() { //JAXB requirement } public GroupByLabelPredicate(IMatrixDimension dimension, Set<String> identifiers) { this.dimensionKey = dimension.getId(); this.groupIdentifiers = identifiers; } public GroupByLabelPredicate(IMatrixDimension dimension, String groupAnnotation, Function<String, String> dimensionFunction) { groupIdentifiers = new HashSet<>(); this.dimensionKey = dimension.getId(); for (String identifier : dimension) { if (Objects.equals(dimensionFunction.apply(identifier), groupAnnotation)) { groupIdentifiers.add(identifier); } } } public boolean apply(Double value, IMatrixPosition position) { return groupIdentifiers.contains(position.get(dimensionKey)); } public Set<String> getGroupIdentifiers() { return groupIdentifiers; } }