using System;
using System.Data;
using System.Configuration;
//Ini Jena libraries
using com.hp.hpl.jena.db;
using com.hp.hpl.jena.rdf.model;
using com.hp.hpl.jena.query;
using ikvm.lang;
using com.microsoft.sqlserver.jdbc;
//Fin Jena libraries
using System.Xml;
using System.Xml.XPath;
namespace wsGeoConceptsSemWebLayer
{
///
/// Allows the access to an RDF Persitence Model
/// Relational DataBase Jena Persistence Model is used.
///
public class JenaPersistenceRDB : IDisposable
{
#region Class variables
Model modelRDF;
IDBConnection connRDB;
#endregion Class variables
#region Private variables
private bool IsDisposed = false;
#endregion Private variables
#region Constructor
///
/// Creates a new JenaPersitenceRDF object.
/// Connects to an SQL Server 2005 RDB: dbserver, db, dbuser, dbpassword
/// It opens the Jena model with "modelName". If it doesn't exist, the model is created.
///
/// Jena model Name
/// Server url and instance
/// Database name
/// Datatabase user name
/// Datababase user password
public JenaPersistenceRDB(String modelName, String dbserver, String db, String dbuser, String dbpass)
{
String M_DB_URL = "jdbc:microsft:sqlserver://" + dbserver + ";databaseName=" + db; // database URL
String M_DB_USER = dbuser; // database user id
String M_DB_PASSWD = dbpass; // database user password
String M_DB = "MsSQL"; // database engine
try
{
M_DB_URL = "jdbc:sqlserver://" + dbserver + ";databaseName=" + db;
// Following line has some problems with some versions of MS jdbc driver.
//System.Activator.CreateInstance("sqldriver", "com.microsoft.sqlserver.jdbc.SQLServerDriver");
java.lang.Class.forName(typeof(com.microsoft.sqlserver.jdbc.SQLServerDriver).FullName);
connRDB = new DBConnection(M_DB_URL, M_DB_USER, M_DB_PASSWD, M_DB);
if (connRDB == null)
{
// Exception management
}
else
{
// create a model maker with the given connection parameters
ModelMaker mkModel = ModelFactory.createModelRDBMaker(connRDB);
if (!connRDB.containsModel(modelName))
{
// create a new model
modelRDF = mkModel.createModel(modelName);
}
else
{
// open a previously created model
modelRDF = mkModel.openModel(modelName);
}
}
}
catch (Exception e)
{
throw (e);
}
}
#endregion Constructor
#region Destructor
///
/// Close object's Database connection and Jena model
///
public void CloseRDBConnection()
{
try
{
if (modelRDF != null && !modelRDF.isClosed())
modelRDF.close();
if (connRDB != null)
connRDB.close();
}
catch (Exception ex)
{
throw (ex);
}
}
///
/// Close object's model
///
public void CloseModel()
{
try
{
if (modelRDF != null && !modelRDF.isClosed())
modelRDF.close();
}
catch (Exception ex)
{
throw (ex);
}
}
///
/// Overrides standard Dispose method, to free open resources
///
public void Dispose()
{
//Pass true in dispose method to clean managed resources too and say GC to skip finalize in next line.
Dispose(true);
//If dispose is called already then say GC to skip finalize on this instance.
GC.SuppressFinalize(this);
}
///
/// Free open resources (Jena model and connection)
///
///
protected virtual void Dispose(bool disposedStatus)
{
if (!IsDisposed)
{
IsDisposed = true;
// Released unmanaged Resources
if (disposedStatus)
{
CloseModel();
CloseRDBConnection();
}
}
}
#endregion Destructor
#region RDB Access Methods
#endregion RDB Access Methods
}
}