package eu.esdihumboldt.hale.io.jdbc.msaccess;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import de.fhg.igd.slf4jplus.ALogger;
import de.fhg.igd.slf4jplus.ALoggerFactory;
import eu.esdihumboldt.hale.io.jdbc.extension.URIBuilder;
/**
* Create JDBC URIs for Ms Access database.
*
* @author Arun Varma
*/
public class MsAccessURIBuilder implements URIBuilder {
private static final ALogger log = ALoggerFactory.getLogger(MsAccessURIBuilder.class);
private static final String ENC = "UTF-8";
// UCanAccess Driver;
private static final String DRIVER = "jdbc:ucanaccess://";
// UCanAccess Driver properties. Property : singleconnection to release the
// connection after closing it.
private static final String PARAM = ";showschema=true;sysschema=false;singleconnection=true";
@Override
public URI createJdbcUri(String host, String database) {
if (database == null || database.isEmpty())
throw new IllegalArgumentException("A database file must be provided");
String rawDatabasePath = getEncodedPath(new File(database).toURI().getPath());
return URI.create(DRIVER + rawDatabasePath + PARAM);
}
/**
* @param jdbcUri the JDBC URI
* @return the file system path to the MsAccess database
*/
public static String getDatabase(URI jdbcUri) {
if (jdbcUri == null) {
throw new IllegalArgumentException("JDBC URI must be provided");
}
return jdbcUri.toString().substring(DRIVER.length());
}
private String getEncodedPath(String path) {
try {
return URLEncoder.encode(path, ENC);
} catch (UnsupportedEncodingException e) {
log.error(ENC + "! that's supposed to be an encoding", e);
return path;
}
}
}