/*
* DrakkarKeel - An Enterprise Collaborative Search Platform
*
* The contents of this file are subject under the terms described in the
* DRAKKARKEEL_LICENSE file included in this distribution; you may not use this
* file except in compliance with the License.
*
* 2013-2014 DrakkarKeel Platform.
*/
package drakkar.stern.tracker.persistent;
import drakkar.stern.tracker.persistent.tables.DerbyConnection;
import drakkar.stern.tracker.persistent.tables.PersistentOperations;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Clase que se encarga de establecer los valores por defecto que debe tener
* algunas tablas de la BD, además de instanciar las dos clases que contienen
* los métodos a utilizar en la aplicación cliente y servidora.
*/
public class Manager {
DerbyConnection connection;
private FacadeDBProw client;
private FacadeDBStern server;
private DBUtil util;
/**
* Consntructor de la clase
*
* @param connection
*/
public Manager(DerbyConnection connection) {
this.connection = connection;
util = new DBUtil(connection);
client = new FacadeDBProw(connection, util);
server = new FacadeDBStern(connection, util);
}
/**
* Llena las tablas de Membership, SE, Rol, SP, State
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
public void setConstantValues() throws SQLException {
if (util.isEmpty("DRAKKARKEEL.MEMBERSHIP")) {
this.setMembership();
}
if (util.isEmpty("DRAKKARKEEL.ROL")) {
this.setRoles();
}
if (util.isEmpty("DRAKKARKEEL.SEARCH_ENGINE")) {
this.setSearchEngines();
}
if (util.isEmpty("DRAKKARKEEL.SEARCH_PRINCIPLE")) {
this.setSearchPrinciple();
}
if (util.isEmpty("DRAKKARKEEL.SEEKER_STATE")) {
this.setStates();
}
if (util.isEmpty("DRAKKARKEEL.SEARCH_SESSION")) {
this.setDefaultSession();
}
}
/**
* Llena la tabla SEARCH_ENGINE
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
private void setSearchEngines() throws SQLException {
String[] fields = new String[1];
fields[0] = "SE_NAME";
Object[][] values = new String[6][1];
values[0][0] = "lucene";
values[1][0] = "minion";
values[2][0] = "terrier";
values[3][0] = "indri";
values[4][0] = "metasearcher";
values[5][0] = "svnsearcher";
PersistentOperations.insert(connection, "DRAKKARKEEL.SEARCH_ENGINE", fields, values);
}
/**
* Llena la tabla DRAKKARKEEL.MEMBERSHIP
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
private void setMembership() throws SQLException {
String[] fields = new String[1];
fields[0] = "MSHIP_TYPE";
Object[][] values = new String[3][1];
values[0][0] = "Dynamic and open";
values[1][0] = "Dynamic and close";
values[2][0] = "Static";
PersistentOperations.insert(connection, "DRAKKARKEEL.MEMBERSHIP", fields, values);
}
/**
* Llena la tabla DRAKKARKEEL.ROL
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
private void setRoles() throws SQLException {
String[] fields = new String[1];
fields[0] = "ROL_NAME";
Object[][] values = new String[3][1];
values[0][0] = "Member";
values[1][0] = "Potential Member";
values[2][0] = "Chairman";
PersistentOperations.insert(connection, "DRAKKARKEEL.ROL", fields, values);
}
/**
* Llena la tabla DRAKKARKEEL.SEEKER_STATE
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
private void setStates() throws SQLException {
String[] fields = new String[1];
fields[0] = "STATE_TYPE";
Object[][] values = new String[4][1];
values[0][0] = "Online";
values[1][0] = "Offline";
values[2][0] = "Away";
values[3][0] = "Busy";
PersistentOperations.insert(connection, "DRAKKARKEEL.SEEKER_STATE", fields, values);
}
/**
* Llena la tabla DRAKKARKEEL.SEARCH_PRINCIPLE
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
private void setSearchPrinciple() throws SQLException {
String[] fields = new String[1];
fields[0] = "PRINCIPLE";
Object[][] values = new String[6][1];
values[0][0] = "Single Search";
values[1][0] = "Meta Search";
values[2][0] = "Multi Search";
values[3][0] = "Single Search and Split";
values[4][0] = "Meta Search and Split";
values[5][0] = "Multi Search and Switch";
PersistentOperations.insert(connection, "DRAKKARKEEL.SEARCH_PRINCIPLE", fields, values);
}
/**
* Inserta la sesión por defecto (DefaultSession)
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
private void setDefaultSession() throws SQLException {
String[] fields = new String[10];
fields[0] = "SESSION_TOPIC";
fields[1] = "DESCRIPTION";
fields[2] = "CHAIRMAN";
fields[3] = "INTEGRITY_CRITERIA";
fields[4] = "MAX_MEMBER_NUMBER";
fields[5] = "MIN_MEMBER_NUMBER";
fields[6] = "CURRENT_MEMBER_NUMBER";
fields[7] = "ID_MSHIP";
fields[8] = "START_DATE";
fields[9] = "ENABLE";
Object[] oneValue = new Object[10];
oneValue[0] = "DefaultSession";
oneValue[1] = " ";
oneValue[2] = " ";
oneValue[3] = true;
oneValue[4] = 0;
oneValue[5] = 0;
oneValue[6] = 0;
oneValue[7] = 1;
oneValue[8] = DBUtil.getCurrentDate();
oneValue[9] = true;
PersistentOperations.insert(connection, "DRAKKARKEEL.SEARCH_SESSION", fields, oneValue);
}
/**
* Elimina los datos de una tabla
*
* @param tableName nombre de la tabla
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
public void cleanTable(String tableName) throws SQLException {
PersistentOperations.deleteAll(connection, tableName);
}
/**
* Elimina los datos de todas las tablas
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
public void cleanAllTables() throws SQLException {
String[] list = new String[28];
list[0] = "DRAKKARKEEL.SEARCH_SESSION_SEEKER";
list[1] = "DRAKKARKELL.SEEKER_QUERY";
list[2] = "DRAKKARKEEL.QUERY_SEARCH_RESULT";
list[3] = "DRAKKARKEEL.SEARCH_ENGINE_SEARCH_RESULT";
list[4] = "DRAKKARKEEL.MESSAGE";
list[5] = "DRAKKARKEEL.MARKUP";
list[6] = "DRAKKARKEEL.RECOMMENDATION";
list[7] = "DRAKKARKEEL.SEARCH_RESULT";
list[8] = "DRAKKARKEEL.INDEX";
list[9] = "DRAKKARKEEL.QUERY_SEARCH_ENGINE";
list[10] = "DRAKKARKEEL.QUERY_WEB_SEARCH_ENGINE";
list[11] = "DRAKKARKEEL.QUERY_WEB_SERVICE";
list[12] = "DRAKKARKEEL.SEARCH_SESSION_COLLECTION";
list[13] = "DRAKKARKEEL.WEB_SEARCH_ENGINE_SEARCH_RESULT";
list[14] = "DRAKKARKEEL.WEB_SERVICE_SEARCH_RESULT";
list[15] = "DRAKKARKEEL.WEB_SERVICE";
list[16] = "DRAKKARKEEL.WEB_SEARCH_ENGINE";
list[17] = "DRAKKARKEEL.SEARCH_SESSION_QUERY";
list[18] = "DRAKKARKEEL.COLLECTION";
list[19] = "DRAKKARKEEL.SEARCH_ENGINE";
list[20] = "DRAKKARKEEL.QUERY";
list[21] = "DRAKKARKEEL.SEARCH_PRINCIPLE";
list[22] = "DRAKKARKEEL.SEEKER";
list[23] = "DRAKKARKEEL.SEEKER_STATE";
list[24] = "DRAKKARKEEL.ROL";
list[25] = "DRAKKARKEEL.SEARCH_SESSION";
list[26] = "DRAKKARKEEL.MEMBERSHIP";
list[27] = "DRAKKARKEEL.INDEX_COLLECTION";
for (int i = 0; i < list.length; i++) {
String tableName = list[i];
PersistentOperations.deleteAll(connection, tableName);
}
}
/**
* @return the client
*/
public FacadeDBProw getClient() {
return client;
}
/**
* @param client the client to set
*/
public void setClient(FacadeDBProw client) {
this.client = client;
}
/**
* @return the server
*/
public FacadeDBStern getServer() {
return server;
}
/**
* @param server the server to set
*/
public void setServer(FacadeDBStern server) {
this.server = server;
}
/**
* Método para crear las tablas de la BD y eliminar las que están
*
* @param sql script de la BD (sql)
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución de la operación
*/
public void createDB(String sql) throws SQLException {
Statement s = null;
s = connection.getConnection().createStatement();
s.execute(sql);
}
}