/* * Copyright (c) 2017 OBiBa. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.obiba.magma.math.summary; import java.util.Collection; import java.util.List; import javax.validation.constraints.NotNull; import org.obiba.magma.ValueSource; import org.obiba.magma.ValueTable; import org.obiba.magma.Variable; import com.google.common.base.Joiner; import static org.obiba.magma.math.summary.ContinuousVariableSummary.Distribution; public class ContinuousVariableSummaryFactory extends AbstractVariableSummaryFactory<ContinuousVariableSummary> { private Distribution distribution; private List<Double> percentiles; private int intervals; private Integer offset; private Integer limit; @NotNull @Override public String getCacheKey() { return getCacheKey(getVariable(), getTable(), distribution, percentiles, intervals, offset, limit); } @SuppressWarnings("PMD.ExcessiveParameterList") public static String getCacheKey(Variable variable, ValueTable table, Distribution distribution, Collection<Double> percentiles, int intervals, Integer offset, Integer limit) { String key = variable.getVariableReference(table) + ";d=" + distribution + ";i=" + intervals; if(percentiles != null && percentiles.size() > 0) key += ";p=" + Joiner.on(",").skipNulls().join(percentiles); if(offset != null) key += ";o=" + offset; if(limit != null) key += ";l=" + limit; return key; } @NotNull @Override public ContinuousVariableSummary getSummary() { return new ContinuousVariableSummary.Builder(getVariable(), distribution) // .defaultPercentiles(percentiles) // .intervals(intervals) // .filter(offset, limit) // .addTable(getTable(), getValueSource()) // .build(); } public Distribution getDistribution() { return distribution; } public void setDistribution(Distribution distribution) { this.distribution = distribution; } public List<Double> getPercentiles() { return percentiles; } public void setPercentiles(List<Double> percentiles) { this.percentiles = percentiles; } public int getIntervals() { return intervals; } public void setIntervals(int intervals) { this.intervals = intervals; } public Integer getOffset() { return offset; } public void setOffset(Integer offset) { this.offset = offset; } public Integer getLimit() { return limit; } public void setLimit(Integer limit) { this.limit = limit; } @SuppressWarnings("ParameterHidesMemberVariable") public static class Builder { private final ContinuousVariableSummaryFactory factory = new ContinuousVariableSummaryFactory(); public Builder variable(Variable variable) { factory.setVariable(variable); return this; } public Builder table(ValueTable table) { factory.setTable(table); return this; } public Builder valueSource(ValueSource valueSource) { factory.setValueSource(valueSource); return this; } public Builder distribution(Distribution distribution) { factory.distribution = distribution; return this; } public Builder percentiles(List<Double> percentiles) { factory.percentiles = percentiles == null || percentiles.isEmpty() ? ContinuousVariableSummary.DEFAULT_PERCENTILES : percentiles; return this; } public Builder intervals(int intervals) { factory.intervals = intervals; return this; } public Builder offset(Integer offset) { factory.offset = offset; return this; } public Builder limit(Integer limit) { factory.limit = limit; return this; } public ContinuousVariableSummaryFactory build() { return factory; } } }