using System;
using System.Text;
using System.Data;
using System.Configuration;
using java.sql;
using chemaxon.util;
using chemaxon.struc;
using chemaxon.jchem.db;
using chemaxon.sss.search;
namespace JChemBaseSearch
{
///
/// DataAccess class using JDBC driver
///
public static class DataAccess
{
private static DataTable GetStructures(int[] ids)
{
string structureTableName = ConfigurationManager.AppSettings["username"] + "." + ConfigurationManager.AppSettings["tablename"]; //read configuration settings from app.config
String sql = "SELECT * " + "FROM " + structureTableName;
if (ids.Length > 0)
{
sql += " WHERE cd_id in (";
for (int i = 0; i < Math.Min(ids.Length, 10); i++)
{
sql += ids[i] + ",";
}
sql = sql.Remove(sql.Length - 1);
sql += ")";
}
Connection con = getConnectionHandler().getConnection();
PreparedStatement preparedStatement = con.prepareStatement(sql, ResultSet.__Fields.TYPE_SCROLL_INSENSITIVE, ResultSet.__Fields.CONCUR_READ_ONLY);
//preparedStatement.setInt(1, 1);
ResultSet results = preparedStatement.executeQuery();
DataTable dt = new DataTable();
dt.Columns.Add("cd_id");
dt.Columns.Add("cd_structure");
bool a = results.first();
while (results.next())
{
Blob blobStructure = results.getBlob("cd_structure");
byte[] barr = new byte[blobStructure.length()];
blobStructure.getBinaryStream().read(barr);
string molFile = Encoding.ASCII.GetString(barr);
string cdId = results.getString("cd_id");
dt.Rows.Add(cdId, molFile);
}
return dt;
}
private static ConnectionHandler getConnectionHandler()
{
string url = ConfigurationManager.AppSettings["url"]; //read configuration settings from App.config
string username = ConfigurationManager.AppSettings["username"];
string password = ConfigurationManager.AppSettings["password"];
try
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection(url, username, password);
ConnectionHandler ch = new ConnectionHandler();
ch.setConnection(conn);
return ch;
}
catch (Exception ex)
{
throw ex;
}
}
public static DataTable SearchStructure(object molecule, JChemSearchOptions searchOptions)
{
JChemSearch searcher = new JChemSearch();
string molStr = molecule as string;
if (molStr == null)
{
Molecule mol = molecule as Molecule;
searcher.setQueryStructure(mol);
}
else
{
searcher.setQueryStructure(molStr);
}
searcher.setConnectionHandler(getConnectionHandler());
searcher.setStructureTable(ConfigurationManager.AppSettings["tablename"]);
searcher.setSearchOptions(searchOptions);
searcher.setRunMode(JChemSearch.RUN_MODE_SYNCH_COMPLETE);
searcher.run();
int[] resultedIds = searcher.getResults();
return GetStructures(resultedIds);
}
}
}