package org.ariadne_eu.content.retrieve; import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.activation.DataHandler; import javax.activation.FileDataSource; import org.apache.log4j.Logger; import org.ariadne.config.PropertiesManager; import org.ariadne_eu.utils.config.RepositoryConstants; import com.ibm.db2.jcc.DB2Xml; /** * Created by ben * Date: 3-mrt-2007 * Time: 15:23:30 * To change this template use File | Settings | File Templates. */ public class RetrieveContentOracleDbImpl extends RetrieveContentImpl { private static Logger log = Logger.getLogger(RetrieveContentOracleDbImpl.class); private String tableName; private String columnName; private String identifierColumnName; private static final int DATA_BLOCK_SIZE = 1024; public RetrieveContentOracleDbImpl() { initialize(); } void initialize() { super.initialize(); try { // String driver = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().CNT_DB_DRIVER); // Class.forName(driver); Class.forName("oracle.jdbc.driver.OracleDriver"); //TODO: auto generate? // if(collection == null) // generateCollection(URI, collectionString, username, password); tableName = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().CNT_DB_XMLDB_SQL_TABLENAME); if (tableName == null) tableName = "Contentstore"; columnName = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().CNT_DB_XMLDB_SQL_COLUMNNAME); if (columnName == null) columnName = "contentxml"; identifierColumnName = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().CNT_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 static void generateCollection(String URI, String collectionString, String username, String password) { // //TODO: auto generate? // try { // Collection root = DatabaseManager.getCollection(URI + "/db", username, password); // CollectionManagementService mgtService = (CollectionManagementService) // root.getService("CollectionManagementService", "1.0"); // collection = mgtService.createCollection(collectionString.substring("/db".length())); // collection = DatabaseManager.getCollection(URI + collectionString, username, password); // } catch (XMLDBException e1) { // e1.printStackTrace(); // } // } public DataHandler retrieveContent(String identifier) { String metadata = getMetadataForID(identifier); if (metadata == null) return null; File file = getFileFromMetadata(metadata); if (file == null || !file.exists()) { return null; } return new DataHandler(new FileDataSource(file)); } public String retrieveFileName(String identifier) { String metadata = getMetadataForID(identifier); if (metadata == null) return null; String fileName = getFileNameFromMetadata(metadata); return fileName; } public String retrieveFileType(String identifier) { String metadata = getMetadataForID(identifier); if (metadata == null) return null; String fileType = getFileTypeFromMetadata(metadata); return fileType; } private String getMetadataForID(String identifier) { PreparedStatement pstmt = null; Connection con = null; try { con = getConnection(); pstmt = con.prepareStatement("SELECT "+columnName+" FROM "+tableName+" WHERE "+identifierColumnName+" = ?"); pstmt.setString(1, identifier); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { DB2Xml xml = (DB2Xml) rs.getObject(1); return xml.getDB2String(); } } catch (SQLException e) { log.error("getMetadataForID:identifier=" + identifier, e); } finally { try { pstmt.close(); con.close(); } catch (Exception e) { log.error("getMetadataForID:identifier=" + identifier, e); } } return null; } private static File getFileFromMetadata(String metadata) { int start = metadata.indexOf("<fullpath>") + "<fullpath>".length(); int end = metadata.indexOf("</fullpath>"); String filename = metadata.substring(start, end); return new File(filename); } private static String getFileNameFromMetadata(String metadata) { int start = metadata.indexOf("<filename>") + "<filename>".length(); int end = metadata.indexOf("</filename>"); String fileName = metadata.substring(start, end); return fileName; } private static String getFileTypeFromMetadata(String metadata) { int start = metadata.indexOf("<filetype>") + "<filetype>".length(); int end = metadata.indexOf("</filetype>"); String fileType = metadata.substring(start, end); return fileType; } private Connection getConnection() throws SQLException { String URI = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().CNT_DB_URI); String username = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().CNT_DB_USERNAME); String password = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().CNT_DB_PASSWORD); return DriverManager.getConnection(URI,username, password); } }