/*
* 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.js;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import org.obiba.magma.ValueTable;
import org.obiba.magma.Variable;
import org.obiba.magma.VariableValueSource;
import org.obiba.magma.VariableValueSourceFactory;
import com.google.common.collect.ImmutableSet;
/**
* Creates a {@code Set} of custom derived variables.
*
* @see JavascriptVariableValueSource
* @see SameAsVariableValueSource
*/
public class JavascriptVariableValueSourceFactory implements VariableValueSourceFactory {
private final Collection<Variable> variables = new LinkedHashSet<>();
private ValueTable valueTable;
@Override
public Set<VariableValueSource> createSources() {
return variables.size() > 0 ? createSourcesFromVariables() : ImmutableSet.<VariableValueSource>of();
}
private Set<VariableValueSource> createSourcesFromVariables() {
ImmutableSet.Builder<VariableValueSource> sources = new ImmutableSet.Builder<>();
for(Variable variable : variables) {
if(variable.hasAttribute(SameAsVariableValueSource.SAME_AS_ATTRIBUTE_NAME)) {
sources.add(new SameAsVariableValueSource(variable, valueTable));
} else {
sources.add(new JavascriptVariableValueSource(variable, valueTable));
}
}
return sources.build();
}
public void setVariables(Collection<Variable> variables) {
this.variables.clear();
if(variables != null) {
this.variables.addAll(variables);
}
}
public void setValueTable(ValueTable valueTable) {
this.valueTable = valueTable;
}
}