package org.ariadne_eu.metadata.insert;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import org.ariadne.config.PropertiesManager;
import org.ariadne_eu.utils.config.RepositoryConstants;
/**
* Created by ben
* Date: 5-mei-2007
* Time: 19:05:44
* To change this template use File | Settings | File Templates.
*/
public class InsertMetadataIBMDB2DbImpl extends InsertMetadataImpl {
private static Logger log = Logger.getLogger(InsertMetadataIBMDB2DbImpl.class);
private String tableName;
private String columnName;
private String identifierColumnName;
public InsertMetadataIBMDB2DbImpl() {
}
public InsertMetadataIBMDB2DbImpl(int language) {
setLanguage(language);
initialize();
}
void initialize() {
super.initialize();
try {
// String driver = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_DRIVER + "." + getLanguage());
// if (driver == null)
// driver = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_DRIVER);
// Class.forName(driver);
Class.forName("com.ibm.db2.jcc.DB2Driver");
//TODO: auto generate?
// if(collection == null)
// generateCollection(URI, collectionString, username, password);
tableName = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_XMLDB_SQL_TABLENAME);
if (tableName == null)
tableName = "Metadatastore";
columnName = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_XMLDB_SQL_COLUMNNAME);
if (columnName == null)
columnName = "lomxml";
identifierColumnName = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_XMLDB_SQL_IDCOLUMNNAME);
if (identifierColumnName == null)
identifierColumnName = "GLOBAL_IDENTIFIER";
} catch (ClassNotFoundException e) {
log.error("initialize: ", e);
} catch (Throwable t) {
log.error("initialize: ", t);
}
}
private void generateCollection(String URI, String collectionString, String username, String password) {
//TODO: auto generate?
}
private Connection getConnection() throws SQLException {
String URI = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_URI + "." + getLanguage());
if (URI == null)
URI = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_URI);
String username = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_USERNAME + "." + getLanguage());
if (username == null)
username = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_USERNAME);
String password = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_PASSWORD + "." + getLanguage());
if (password == null)
password = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_PASSWORD);
return DriverManager.getConnection(URI,username, password);
}
/*
* NOTE: Collection is not implemented!
*
* */
public synchronized void insertMetadata(String identifier, String metadata, String collection) throws InsertMetadataException{
try {
Connection con = getConnection();
PreparedStatement pstmt;
pstmt = con.prepareStatement("DELETE FROM " + tableName + " WHERE "+identifierColumnName+" = ?");
pstmt.setString(1, identifier);
pstmt.execute();
pstmt.close();
java.sql.Blob blobData = com.ibm.db2.jcc.t2zos.DB2LobFactory.createBlob(metadata.getBytes("UTF-8"));
pstmt = con.prepareStatement(
"INSERT INTO " + tableName + " ("+identifierColumnName+", " + columnName + ") " +
"VALUES(?, XMLPARSE(document cast(? as Blob) strip whitespace))");
pstmt.setString(1, identifier);
pstmt.setBlob(2, blobData);
pstmt.execute();
pstmt.close();
con.close();
log.info("insertMetadata:identifier:\""+identifier+"\"");
} catch (SQLException e) {
log.error("insertMetadata:identifier:\""+identifier+"\" ", e);
throw new InsertMetadataException(e);
} catch (UnsupportedEncodingException e) {
log.error("insertMetadata:identifier:\""+identifier+"\" ", e);
throw new InsertMetadataException(e);
}
}
}