package org.ariadne_eu.metadata.query; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.log4j.Logger; import org.ariadne.config.PropertiesManager; import org.ariadne_eu.metadata.query.language.QueryTranslationException; import org.ariadne_eu.metadata.query.language.TranslateLanguage; import org.ariadne_eu.utils.config.RepositoryConstants; import com.ibm.db2.jcc.DB2Xml; /** * Created by ben * Date: 5-mei-2007 * Time: 19:30:21 * To change this template use File | Settings | File Templates. */ public class QueryMetadataIBMDB2DbImpl extends QueryMetadataImpl { private static Logger log = Logger.getLogger(QueryMetadataIBMDB2DbImpl.class); public QueryMetadataIBMDB2DbImpl() { } QueryMetadataIBMDB2DbImpl(int language) { setLanguage(language); initialize(); } void initialize() { super.initialize(); try { 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"); } catch (ClassNotFoundException e) { log.error("initialize: ", e); } } catch (Throwable t) { log.error("initialize: ", t); } } 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); } public String xQuery(String xQuery) throws QueryMetadataException { Statement stmt = null; Connection con = null; try { con = getConnection(); stmt = (Statement) con.createStatement(); ResultSet rs = stmt.executeQuery(xQuery.replaceAll("version \"1.0\";", "")); //TODO: why doesn't version work for IBM DB2 String result = ""; while (rs.next()) { DB2Xml xml = (DB2Xml) rs.getObject(1); result = result + xml.getDB2String(); //return xml.getDB2String(); } if (result.equals("")){ log.error("xQuery:method didn't return answer, xQuery=" + xQuery); return null; } return result; } catch (SQLException e) { log.error("xQuery:xQuery=" + xQuery, e); throw new QueryMetadataException(e); } finally { try { stmt.close(); con.close(); } catch (Exception e) { log.error("xQuery:xQuery=" + xQuery, e); } } //log.error("xQuery:method didn't return answer, xQuery=" + xQuery); //return null; } public String query(String query, int start, int max, int resultsFormat) throws QueryTranslationException, QueryMetadataException { String xQuery = TranslateLanguage.translateToQuery(query, getLanguage(), TranslateLanguage.XQUERY, start, max, resultsFormat); return xQuery(xQuery); } public int count(String query) throws QueryTranslationException, QueryMetadataException { String xQuery = TranslateLanguage.translateToCount(query, getLanguage(), TranslateLanguage.XQUERY); return Integer.parseInt(xQuery(xQuery)); } }