/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.core.api.impl.scripts;
import com.opendoorlogistics.api.scripts.ScriptAdapterTable;
import com.opendoorlogistics.api.tables.ODLColumnType;
import com.opendoorlogistics.api.tables.ODLTableDefinition;
import com.opendoorlogistics.api.tables.ODLTableReadOnly;
import com.opendoorlogistics.core.api.impl.scripts.ScriptOptionImpl.FindMode;
import com.opendoorlogistics.core.scripts.ScriptConstants;
import com.opendoorlogistics.core.scripts.elements.AdaptedTableConfig;
import com.opendoorlogistics.core.scripts.elements.AdapterColumnConfig;
import com.opendoorlogistics.core.scripts.elements.AdapterColumnConfig.SortField;
import com.opendoorlogistics.core.utils.strings.Strings;
public class ScriptAdapterTableImpl implements ScriptAdapterTable{
private final AdaptedTableConfig table;
public ScriptAdapterTableImpl(AdaptedTableConfig table) {
this.table = table;
}
protected AdapterColumnConfig getAdaptedColumn( String columnName, FindMode findMode) {
for (AdapterColumnConfig col : table.getColumns()) {
if (Strings.equalsStd(col.getName(), columnName)) {
return col;
}
}
if (findMode!= FindMode.CANNOT_EXIST_ANYWHERE) {
throw new RuntimeException("Column with name not found: " + columnName);
}
return null;
}
@Override
public void setFormula(String columnName, String formula) {
AdapterColumnConfig conf = getAdaptedColumn( columnName, FindMode.MUST_EXIST_IN_CURRENT_OPTION);
setFormula(formula, conf);
}
private void setFormula(String formula, AdapterColumnConfig conf) {
conf.setFormula(formula);
conf.setUseFormula(true);
}
@Override
public void setFormula(int columnIdx, String formula) {
setFormula(formula,table.getColumn(columnIdx));
}
@Override
public void setSourceColumn(String columnName, String sourceColumn) {
AdapterColumnConfig conf = getAdaptedColumn( columnName, FindMode.MUST_EXIST_IN_CURRENT_OPTION);
conf.setSourceFields(sourceColumn, null, false);
}
@Override
public void setSourceTable(String sourceTable) {
setSourceTable(ScriptConstants.EXTERNAL_DS_NAME,sourceTable);
}
@Override
public void setSourceTable(String datastoreId, String sourceTable) {
table.setFrom(datastoreId, sourceTable);
}
@Override
public void setTableFilterFormula(String formula) {
table.setFilterFormula(formula);
}
@Override
public void setSourceColumns(String[][] columnNameSourcePairs) {
for (String[] pair : columnNameSourcePairs) {
if (pair.length != 2) {
throw new RuntimeException("Found column name - source pair string array not of length 2.");
}
setSourceColumn(pair[0], pair[1]);
}
}
@Override
public void setFormulae(String[][] columnNameFormulaPairs) {
for (String[] pair : columnNameFormulaPairs) {
if (pair.length != 2) {
throw new RuntimeException("Found column name - formula pair string array not of length 2.");
}
setFormula(pair[0], pair[1]);
}
}
@Override
public void setTableName(String name) {
table.setName(name);
}
@Override
public ODLTableDefinition getTableDefinition() {
return table;
}
@Override
public int addColumn(String name, ODLColumnType type, boolean usesFormula, String source) {
AdapterColumnConfig col = new AdapterColumnConfig(-1, null, name, type, 0);
if(usesFormula){
col.setUseFormula(true);
col.setFormula(source);
}else{
col.setUseFormula(false);
col.setFrom(source);
}
table.getColumns().add(col);
return table.getColumns().size()-1;
}
@Override
public int getColumnCount() {
return table.getColumnCount();
}
@Override
public String getColumnName(int i) {
return table.getColumnName(i);
}
@Override
public long getColumnFlags(String name) {
return getAdaptedColumn(name, FindMode.MUST_EXIST_IN_CURRENT_OPTION).getFlags();
}
@Override
public void setColumnFlags(String name, long flags) {
getAdaptedColumn(name, FindMode.MUST_EXIST_IN_CURRENT_OPTION).setFlags(flags);
}
@Override
public long getFlags() {
return table.getFlags();
}
@Override
public void setFlags(long flags) {
table.setFlags(flags);
}
@Override
public ODLColumnType getColumnType(int i) {
return table.getColumnType(i);
}
@Override
public void removeColumn(int i) {
table.deleteColumn(i);
}
@Override
public void setSortType(int col, ColumnSortType cst) {
switch(cst){
case ASCENDING:
table.getColumn(col).setSortField(SortField.ASCENDING);
break;
case DESCENDING:
table.getColumn(col).setSortField(SortField.DESCENDING);
break;
case NONE:
table.getColumn(col).setSortField(SortField.NO);
break;
}
}
@Override
public void setFetchSourceField(boolean b) {
table.setFetchSourceFields(b);
}
@Override
public ODLTableReadOnly getDataTable() {
return this.table.getDataTable();
}
@Override
public void setDataTable(ODLTableReadOnly table) {
this.table.setDataTable(table);
}
}