/*
* 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.views;
import org.obiba.magma.Datasource;
import org.obiba.magma.DatasourceFactory;
import org.obiba.magma.Disposable;
import org.obiba.magma.MagmaRuntimeException;
import org.obiba.magma.ValueTable;
import org.obiba.magma.ValueTableWriter.VariableWriter;
import org.obiba.magma.Variable;
import org.obiba.magma.support.Disposables;
import org.obiba.magma.support.Initialisables;
import com.google.common.collect.ImmutableSet;
/**
* Get the list of variables from a value table in a datasource.
*/
public class DatasourceTableClause extends VariablesClause implements Disposable {
private DatasourceFactory factory;
private String table;
@SuppressWarnings("TransientFieldInNonSerializableClass")
private transient Datasource source;
public void setTable(String table) {
this.table = table;
}
public void setFactory(DatasourceFactory factory) {
this.factory = factory;
}
@Override
public void initialise() {
ImmutableSet.Builder<Variable> variableSet = new ImmutableSet.Builder<>();
try {
// read the variables from the excel datasource
source = factory.create();
Initialisables.initialise(source);
if(source.hasValueTable(table)) {
ValueTable vTable = source.getValueTable(table);
for(Variable var : vTable.getVariables()) {
variableSet.add(var);
}
}
setVariables(variableSet.build());
super.initialise();
} catch(Exception e) {
throw new MagmaRuntimeException(e);
}
}
@Override
public void dispose() {
Disposables.silentlyDispose(source);
}
@Override
public VariableWriter createWriter() {
source = factory.create();
Initialisables.initialise(source);
ValueTable vTable = source.getValueTable(table);
return source.createWriter(table, vTable.getEntityType()).writeVariables();
}
}