
dk.eobjects.metamodel.AccessDataContextStrategy Maven / Gradle / Ivy
The newest version!
package dk.eobjects.metamodel;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.healthmarketscience.jackcess.Database;
import dk.eobjects.metamodel.data.DataSet;
import dk.eobjects.metamodel.query.SelectItem;
import dk.eobjects.metamodel.schema.Column;
import dk.eobjects.metamodel.schema.ColumnType;
import dk.eobjects.metamodel.schema.Schema;
import dk.eobjects.metamodel.schema.Table;
import dk.eobjects.metamodel.schema.TableType;
public class AccessDataContextStrategy extends
QueryPostprocessDataContextStrategy {
private Database _database;
private File _file;
public AccessDataContextStrategy(File file) {
_file = file;
}
public AccessDataContextStrategy(String filename) {
this(new File(filename));
}
private Database getDatabase() {
if (_database == null) {
synchronized (this) {
try {
_database = Database.open(_file, true);
} catch (IOException e) {
throw new MetaModelException(e);
}
}
}
return _database;
}
@Override
protected Schema getMainSchema() throws MetaModelException {
Schema schema = new Schema(_file.getName());
Database db = getDatabase();
for (com.healthmarketscience.jackcess.Table mdbTable : db) {
Table table = new Table(mdbTable.getName(), TableType.TABLE, schema);
try {
int i = 0;
for (com.healthmarketscience.jackcess.Column mdbColumn : mdbTable
.getColumns()) {
ColumnType columnType = ColumnType
.convertColumnType(mdbColumn.getSQLType());
Column column = new Column(mdbColumn.getName(), columnType,
table, i, null);
column.setColumnSize((int) mdbColumn.getLength());
column.setNativeType(mdbColumn.getType().name());
table.addColumn(column);
i++;
}
schema.addTable(table);
} catch (Exception e) {
throw new MetaModelException(e);
}
}
return schema;
}
@Override
protected String getMainSchemaName() throws MetaModelException {
return _file.getName();
}
@Override
public DataSet materializeMainSchemaTable(Table table, Column[] columns,
int maxRows) {
try {
com.healthmarketscience.jackcess.Table mdbTable = getDatabase()
.getTable(table.getName());
SelectItem[] selectItems = new SelectItem[columns.length];
for (int i = 0; i < columns.length; i++) {
selectItems[i] = new SelectItem(columns[i]);
}
int rowNum = 0;
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy