public abstract class CustomLinkResolver extends Object implements LinkResolver
Database
and Table
classes. In order to
consume linked tables in non-mdb files, they need to somehow be coerced
into the appropriate form. The approach taken by this utility is to make
it easy to copy the external tables into a temporary mdb file for
consumption by the primary database.
The primary features of this utility:
loadCustomFile(com.healthmarketscience.jackcess.Database, java.lang.String)
loadCustomTable(com.healthmarketscience.jackcess.Database, java.lang.Object, java.lang.String)
Modifier and Type | Field and Description |
---|---|
static Database.FileFormat |
DEFAULT_FORMAT
the default file format used for temp dbs
|
static boolean |
DEFAULT_IN_MEMORY
temp dbs default to the filesystem, not in memory
|
static File |
DEFAULT_TEMP_DIR
temp dbs end up in the system temp dir by default
|
DEFAULT
Modifier | Constructor and Description |
---|---|
protected |
CustomLinkResolver()
Creates a CustomLinkResolver using the default behavior for creating temp
dbs, see
DEFAULT_FORMAT , DEFAULT_IN_MEMORY and
DEFAULT_TEMP_DIR . |
protected |
CustomLinkResolver(Database.FileFormat defaultFormat,
boolean defaultInMemory,
File defaultTempDir)
Creates a CustomLinkResolver with the given default behavior for creating
temp dbs.
|
Modifier and Type | Method and Description |
---|---|
protected Database |
createTempDb(Object customFile,
Database.FileFormat format,
boolean inMemory,
File tempDir)
Creates a temporary database for holding the table data from
linkeeFileName.
|
protected Database.FileFormat |
getDefaultFormat() |
protected File |
getDefaultTempDirectory() |
protected boolean |
isDefaultInMemory() |
protected abstract Object |
loadCustomFile(Database linkerDb,
String linkeeFileName)
Called by
resolveLinkedDatabase(com.healthmarketscience.jackcess.Database, java.lang.String) to determine whether the
linkeeFileName should be treated as a custom file (thus utiliziing a temp
db) or a normal access db (loaded via the default behavior). |
protected abstract boolean |
loadCustomTable(Database tempDb,
Object customFile,
String tableName)
Called by an instance of a temp db when a missing table is first requested.
|
Database |
resolveLinkedDatabase(Database linkerDb,
String linkeeFileName)
Custom implementation is:
|
public static final Database.FileFormat DEFAULT_FORMAT
public static final boolean DEFAULT_IN_MEMORY
public static final File DEFAULT_TEMP_DIR
protected CustomLinkResolver()
DEFAULT_FORMAT
, DEFAULT_IN_MEMORY
and
DEFAULT_TEMP_DIR
.protected CustomLinkResolver(Database.FileFormat defaultFormat, boolean defaultInMemory, File defaultTempDir)
defaultFormat
- the default format for the temp dbdefaultInMemory
- whether or not the temp db should be entirely in
memory by default (while this will be faster, it
should only be used if table data is expected to
fit entirely in memory)defaultTempDir
- the default temp dir for a file based temp db
(null
for the system defaqult temp
directory)protected Database.FileFormat getDefaultFormat()
protected boolean isDefaultInMemory()
protected File getDefaultTempDirectory()
public Database resolveLinkedDatabase(Database linkerDb, String linkeeFileName) throws IOException
// attempt to load the linkeeFileName as a custom file Object customFile = loadCustomFile(linkerDb, linkeeFileName); if(customFile != null) { // this is a custom file, create and return relevant temp db return createTempDb(customFile, getDefaultFormat(), isDefaultInMemory(), getDefaultTempDirectory()); } // not a custmom file, load using the default behavior return LinkResolver.DEFAULT.resolveLinkedDatabase(linkerDb, linkeeFileName);
protected Database createTempDb(Object customFile, Database.FileFormat format, boolean inMemory, File tempDir) throws IOException
customFile
- custom file state returned from loadCustomFile(com.healthmarketscience.jackcess.Database, java.lang.String)
format
- the access format for the temp dbinMemory
- whether or not the temp db should be entirely in memory
(while this will be faster, it should only be used if
table data is expected to fit entirely in memory)tempDir
- the temp dir for a file based temp db (null
for
the system default temp directory)IOException
protected abstract Object loadCustomFile(Database linkerDb, String linkeeFileName) throws IOException
resolveLinkedDatabase(com.healthmarketscience.jackcess.Database, java.lang.String)
to determine whether the
linkeeFileName should be treated as a custom file (thus utiliziing a temp
db) or a normal access db (loaded via the default behavior). Loads any
state necessary for subsequently loading data from linkeeFileName.
The returned custom file state object will be maintained with the temp db
and passed to loadCustomTable(com.healthmarketscience.jackcess.Database, java.lang.Object, java.lang.String)
whenever a new table needs to be
loaded. Also, if this object is Closeable
, it will be closed
with the temp db.
linkerDb
- the primary database in which the link is definedlinkeeFileName
- the name of the linked filenull
if linkeeFileName should be treated as a custom
file (using a temp db) or null
if it should be treated as
a normal access db.IOException
protected abstract boolean loadCustomTable(Database tempDb, Object customFile, String tableName) throws IOException
tempDb
- the temp db instance which should be populated with the
relevant table info for the given tableNamecustomFile
- custom file state returned from loadCustomFile(com.healthmarketscience.jackcess.Database, java.lang.String)
tableName
- the name of the table which is requested from the linked
filetrue
if the table was available in the linked file,
false
otherwiseIOException
Copyright © 2005–2018. All rights reserved.