package es.icarto.gvsig.navtableforms.gui.tables.model;
import java.util.ArrayList;
import java.util.List;
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
import com.iver.cit.gvsig.fmap.edition.IEditableSource;
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
import es.icarto.gvsig.navtableforms.gui.i18n.I18nResourceManager;
import es.icarto.gvsig.navtableforms.gui.i18n.resource.GvSIGI18nResource;
import es.icarto.gvsig.navtableforms.gui.i18n.resource.I18nResource;
import es.icarto.gvsig.navtableforms.gui.tables.filter.IRowFilter;
import es.icarto.gvsig.navtableforms.gui.tables.filter.IRowFilterImplementer;
import es.icarto.gvsig.navtableforms.gui.tables.filter.IRowMultipleOrFilterImplementer;
import es.icarto.gvsig.navtableforms.gui.tables.filter.IRowNotFilterImplementer;
import es.icarto.gvsig.navtableforms.utils.TOCLayerManager;
import es.icarto.gvsig.navtableforms.utils.TOCTableManager;
/**
* TableModelFactory
*
* Factory for creating table models from layers or source tables, with or
* without filters.
*
* @author Jorge L�pez Fern�ndez <jlopez@cartolab.es>
*/
public class TableModelFactory {
/**
* The default i18n resource for the translations that requests them
* to gvSIG.
*/
private static final I18nResource defaultI18n = new GvSIGI18nResource();
public static AlphanumericTableModel createFromTable(String sourceTable,
String[] columnNames, String[] columnAliases, I18nResource[] i18nResources) {
TOCTableManager toc = new TOCTableManager();
IEditableSource model = toc.getTableModelByName(sourceTable);
I18nResourceManager i18nManager = new I18nResourceManager(i18nResources);
i18nManager.addResource(defaultI18n);
return new AlphanumericTableModel(model, columnNames, columnAliases,
i18nManager);
}
public static AlphanumericTableModel createFromTable(String sourceTable,
String[] columnNames, String[] columnAliases) {
return createFromTable(sourceTable, columnNames, columnAliases,
new I18nResource[0]);
}
public static AlphanumericTableModel createFromTableWithFilter(String sourceTable,
String rowFilterName,
String rowFilterValue,
String[] columnNames,
String[] columnAliases, I18nResource[] i18nResources)
throws ReadDriverException {
TOCTableManager toc = new TOCTableManager();
IEditableSource model = toc.getTableModelByName(sourceTable);
int fieldIndex = model.getRecordset()
.getFieldIndexByName(rowFilterName);
IRowFilter filter = new IRowFilterImplementer(
fieldIndex, rowFilterValue);
I18nResourceManager i18nManager = new I18nResourceManager(i18nResources);
i18nManager.addResource(defaultI18n);
return new AlphanumericTableModel(model, columnNames, columnAliases,
i18nManager, filter);
}
public static AlphanumericTableModel createFromTableWithFilter(String sourceTable,
String rowFilterName, String rowFilterValue, String[] columnNames, String[] columnAliases)
throws ReadDriverException {
return createFromTableWithFilter(sourceTable, rowFilterName, rowFilterValue,
columnNames, columnAliases, new I18nResource[0]);
}
public static AlphanumericTableModel createFromTableWithNotFilter(
String sourceTable, String rowFilterName, String rowFilterValue,
String[] columnNames, String[] columnAliases, I18nResource[] i18nResources)
throws ReadDriverException {
TOCTableManager toc = new TOCTableManager();
IEditableSource model = toc.getTableModelByName(sourceTable);
int fieldIndex = model.getRecordset()
.getFieldIndexByName(rowFilterName);
IRowFilter filter = new IRowNotFilterImplementer(
new IRowFilterImplementer(fieldIndex, rowFilterValue));
I18nResourceManager i18nManager = new I18nResourceManager(i18nResources);
i18nManager.addResource(defaultI18n);
return new AlphanumericTableModel(model, columnNames, columnAliases,
i18nManager, filter);
}
public static AlphanumericTableModel createFromTableWithNotFilter(
String sourceTable, String rowFilterName, String rowFilterValue,
String[] columnNames, String[] columnAliases)
throws ReadDriverException {
return createFromTableWithNotFilter(sourceTable, rowFilterName, rowFilterValue,
columnNames, columnAliases, new I18nResource[0]);
}
public static AlphanumericTableModel createFromTableWithOrFilter(
String sourceTable,
String rowFilterName, String[] rowFilterValues,
String[] columnNames, String[] columnAliases, I18nResource[] i18nResources)
throws ReadDriverException {
TOCTableManager toc = new TOCTableManager();
IEditableSource model = toc.getTableModelByName(sourceTable);
int fieldIndex = model.getRecordset()
.getFieldIndexByName(rowFilterName);
List<IRowFilter> filters = new ArrayList<IRowFilter>();
for (String rowFilterValue : rowFilterValues) {
filters.add(new IRowFilterImplementer(fieldIndex, rowFilterValue));
}
I18nResourceManager i18nManager = new I18nResourceManager(i18nResources);
i18nManager.addResource(defaultI18n);
return new AlphanumericTableModel(model, columnNames, columnAliases,
i18nManager, new IRowMultipleOrFilterImplementer(filters));
}
public static AlphanumericTableModel createFromTableWithOrFilter(
String sourceTable,
String rowFilterName, String[] rowFilterValues,
String[] columnNames, String[] columnAliases)
throws ReadDriverException {
return createFromTableWithOrFilter(sourceTable, rowFilterName, rowFilterValues,
columnNames, columnAliases, new I18nResource[0]);
}
public static VectorialTableModel createFromLayer(String layerName,
String[] columnNames, String[] columnAliases) {
FLyrVect layer = new TOCLayerManager().getLayerByName(layerName);
return new VectorialTableModel(layer, columnNames, columnAliases);
}
public static VectorialTableModel createFromLayerWithFilter(
String layerName, String rowFilterName, String rowFilterValue,
String[] columnNames, String[] columnAliases)
throws ReadDriverException {
FLyrVect layer = new TOCLayerManager().getLayerByName(layerName);
int fieldIndex = layer.getRecordset()
.getFieldIndexByName(rowFilterName);
IRowFilter filter = new IRowFilterImplementer(fieldIndex,
rowFilterValue);
return new VectorialTableModel(layer, columnNames, columnAliases,
filter);
}
public static VectorialTableModel createFromLayerWithNotFilter(
String layerName, String rowFilterName, String rowFilterValue,
String[] columnNames, String[] columnAliases)
throws ReadDriverException {
FLyrVect layer = new TOCLayerManager().getLayerByName(layerName);
int fieldIndex = layer.getRecordset()
.getFieldIndexByName(rowFilterName);
IRowFilter filter = new IRowNotFilterImplementer(
new IRowFilterImplementer(fieldIndex, rowFilterValue));
return new VectorialTableModel(layer, columnNames, columnAliases,
filter);
}
public static VectorialTableModel createFromLayerWithOrFilter(
String layerName, String rowFilterName, String[] rowFilterValues,
String[] columnNames, String[] columnAliases)
throws ReadDriverException {
FLyrVect layer = new TOCLayerManager().getLayerByName(layerName);
int fieldIndex = layer.getRecordset()
.getFieldIndexByName(rowFilterName);
List<IRowFilter> filters = new ArrayList<IRowFilter>();
for (String rowFilterValue : rowFilterValues) {
filters.add(new IRowFilterImplementer(fieldIndex, rowFilterValue));
}
return new VectorialTableModel(layer, columnNames, columnAliases,
new IRowMultipleOrFilterImplementer(filters));
}
}