/*
* 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.oar.MarkupData;
import drakkar.oar.RecommendTracker;
import drakkar.oar.SearchResultData;
import drakkar.oar.SearchTracker;
import drakkar.oar.Seeker;
import drakkar.oar.util.KeySearchable;
import drakkar.oar.util.KeySession;
import drakkar.oar.util.SeekerAction;
import drakkar.stern.tracker.persistent.objects.SeekerData;
import drakkar.stern.tracker.persistent.tables.DerbyConnection;
import drakkar.stern.tracker.persistent.tables.PersistentOperations;
import drakkar.stern.tracker.persistent.tables.TableTracker;
import java.sql.Date;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* Clase que contiene los métodos relacionados con la persistencia de los historiales
*/
public class TrackerDB {
DerbyConnection connection;
DBUtil util;
SearchDB dbSearch;
SearchSessionDB dbSession;
// public TrackerDB(DerbyConnection conn, SearchDB dbSearch, SearchSessionDB session){
// this.connection = conn;
// this.dbSearch = dbSearch;
// this.dbSession = session;
// }
/**
* Constructor de la clase
*
* @param connection objeto que representa la conexión con Derby
* @param util objeto que contiene los métodos utilitarios para interactuar con la BD
* @param dbSearch objeto que contiene los métodos referentes a las búsquedas persistentes
* @param dbSession objeto que contiene los métodos referentes a las sesiones persistentes
*/
public TrackerDB(DerbyConnection connection, DBUtil util, SearchDB dbSearch, SearchSessionDB dbSession) {
this.connection = connection;
this.util = util;
this.dbSearch = dbSearch;
this.dbSession = dbSession;
}
/*****************************RECORD TABLES*********************/
////////////////////RECOMMEND//////////////
/**
* Obtiene una lista las recomendaciones realizadas en una sesión.
*
* @param session nombre de la sesión
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<SeekerData> seekers = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
String[] fields;
int idDoc;
String text, uri = null, date = null;
//get all users for this session
seekers = dbSession.loadSeekersData(session);
for (int i = 0; i < seekers.size(); i++) {
SeekerData seekerData = seekers.get(i);
fields = new String[3];
fields[0] = "ID_SR";
fields[1] = "TEXT";
fields[2] = "REC_DATE";
if (util.alreadyExist(seekerData.getUser(), "DRAKKARKEEL.RECOMMENDATION", "SEEKER_USER", "ID_REC")) {
//Get recommendations made by each seeker
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKEEL.RECOMMENDATION", "SEEKER_USER", seekerData.getUser());
Object[][] values = table.getValues();
if (values.length != 0) {
for (int j = 0; j < values.length; j++) {
Object[] obj = values[j];
idDoc = Integer.parseInt(obj[0].toString());
uri = dbSearch.getResult(idDoc, session).getURI();
text = obj[1].toString();
date = obj[2].toString();
usersReceptors = getRecommendationReceptors(idDoc, seekerData.getUser());
data = new RecommendTracker(usersReceptors, seekerData.getUser(), date, text, uri, idDoc, KeySession.MULTIPLE_QUERIES, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
}
}
return list;
}
/**
* Obtiene una lista las recomendaciones realizadas en una sesión.
*
* @param session nombre de la sesión
* @param seeker nombre del usuario que emitió la recomendación
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session, Seeker seeker) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
int doc;
String text = null, uri = null, date = null;
//verify sessions
String[] fields = new String[3];
fields[0] = "ID_SR";
fields[1] = "TEXT";
fields[2] = "REC_DATE";
String[] whereFields = new String[2];
whereFields[0] = "SESSION_TOPIC";
whereFields[1] = "SEEKER_USER";
Object[] whereValues = new Object[2];
whereValues[0] = session;
whereValues[1] = seeker.getUser();
if (util.alreadyExist(seeker.getUser(), "DRAKKARKEEL.RECOMMENDATION", "SEEKER_USER", "ID_REC")) {
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int i = 0; i < values.length; i++) {
Object[] obj = values[i];
doc = Integer.valueOf(obj[0].toString());
text = obj[1].toString();
date = obj[2].toString();
usersReceptors = getRecommendationReceptors(doc, seeker.getUser());
uri = dbSearch.getResult(doc, session).getURI();
data = new RecommendTracker(usersReceptors, seeker.getUser(), date, text, uri, doc, KeySession.MULTIPLE_QUERIES, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
}
return list;
}
/**
* Obtiene una lista las recomendaciones realizadas en una sesión
*
* @param session nombre de la sesión
* @param date fecha de la recomendación
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session, Date date) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
int doc;
String text, seeker, uri = null;
String[] fields = new String[3];
fields[0] = "ID_SR";
fields[1] = "TEXT";
fields[2] = "SEEKER_USER";
String[] whereFields = new String[2];
whereFields[0] = "SESSION_TOPIC";
whereFields[1] = "REC_DATE";
Object[] whereValues = new Object[2];
whereValues[0] = session;
whereValues[1] = date;
if (util.alreadyExist(date, "DRAKKARKEEL.RECOMMENDATION", "REC_DATE", "ID_REC")) {
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int i = 0; i < values.length; i++) {
Object[] obj = values[i];
doc = Integer.valueOf(obj[0].toString());
text = obj[1].toString();
seeker = obj[2].toString();
usersReceptors = getRecommendationReceptors(doc, seeker);
uri = dbSearch.getResult(doc, session).getURI();
data = new RecommendTracker(usersReceptors, seeker, date.toString(), text, uri, doc, KeySession.MULTIPLE_QUERIES, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
}
return list;
}
/**
* Obtiene una lista las recomendaciones realizadas en una sesión.
*
* @param session nombre de la sesión
* @param query consulta
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session, String query) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
List<Integer> documents = new ArrayList<>();
String text = null, seeker = null, date = null;
int idDoc;
//get all results for all the ocurrences of that query
documents = getQueryOcurrences(query);
//get docs recommended in that session
for (int i = 0; i < documents.size(); i++) {
idDoc = documents.get(i);
if (util.alreadyExist(idDoc, "DRAKKARKEEL.RECOMMENDATION", "ID_SR", "SEEKER_USER")) {
String[] fields2 = new String[3];
fields2[0] = "TEXT";
fields2[1] = "SEEKER_USER";
fields2[2] = "REC_DATE";
String[] whereFields = new String[2];
whereFields[0] = "SESSION_TOPIC";
whereFields[1] = "ID_SR";
Object[] whereValues = new Object[2];
whereValues[0] = session;
whereValues[1] = idDoc;
TableTracker table2 = PersistentOperations.load(connection, fields2, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] val = table2.getValues();
if (val.length != 0) {
for (int j = 0; j < val.length; j++) {
Object[] objects = val[j];
text = objects[0].toString();
seeker = objects[1].toString();
date = objects[2].toString();
usersReceptors = getRecommendationReceptors(idDoc, seeker);
String uri = dbSearch.getResult(idDoc, session).getURI();
data = new RecommendTracker(usersReceptors, seeker, date, text, uri, idDoc, query, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
}
}
return list;
}
/**
* Obtiene una lista las recomendaciones realizadas en una sesión.
*
* @param session nombre de la sesión
* @param seeker usuario que hizo la recomendación
* @param query consulta
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session, Seeker seeker, String query) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
List<Integer> documents = new ArrayList<>();
int idDoc;
String text = null, date = null;
//get all results for that query
documents = getQueryOcurrences(query);
//get all the recommendation that this seeker made for these documents
for (int i = 0; i < documents.size(); i++) {
idDoc = documents.get(i);
if (util.alreadyExist(idDoc, "DRAKKARKEEL.RECOMMENDATION", "ID_SR", "ID_REC")) {
String[] fields2 = new String[2];
fields2[0] = "TEXT";
fields2[1] = "REC_DATE";
String[] whereFields = new String[3];
whereFields[0] = "SESSION_TOPIC";
whereFields[1] = "SEEKER_USER";
whereFields[2] = "ID_SR";
Object[] whereValues = new Object[3];
whereValues[0] = session;
whereValues[1] = seeker.getUser();
whereValues[2] = idDoc;
TableTracker table2 = PersistentOperations.load(connection, fields2, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] val = table2.getValues();
if (val.length != 0) {
for (int j = 0; j < val.length; j++) {
Object[] objects = val[j];
text = objects[0].toString();
date = objects[1].toString();
usersReceptors = getRecommendationReceptors(idDoc, seeker.getUser());
data = new RecommendTracker(usersReceptors, seeker.getUser(), date, text, dbSearch.getResult(idDoc, session).getURI(), idDoc, query, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
}
}
return list;
}
/**
* Obtiene una lista las recomendaciones realizadas en una sesión
*
* @param session nombre de la sesión
* @param query consulta
* @param date fecha de recomendación
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session, String query, Date date) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
List<Integer> documents = new ArrayList<>();
int idDoc;
String text = null, seeker = null;
//get all results for that query
documents = getQueryOcurrences(query);
//get all the recommendations in that date
for (int i = 0; i < documents.size(); i++) {
idDoc = documents.get(i);
if (util.alreadyExist(idDoc, "DRAKKARKEEL.RECOMMENDATION", "ID_SR", "ID_REC")) {
String[] fields2 = new String[2];
fields2[0] = "TEXT";
fields2[1] = "SEEKER_USER";
String[] whereFields = new String[3];
whereFields[0] = "SESSION_TOPIC";
whereFields[1] = "REC_DATE";
whereFields[2] = "ID_SR";
Object[] whereValues = new Object[3];
whereValues[0] = session;
whereValues[1] = date;
whereValues[2] = idDoc;
TableTracker table2 = PersistentOperations.load(connection, fields2, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] val = table2.getValues();
if (val.length != 0) {
for (int j = 0; j < val.length; j++) {
Object[] objects = val[j];
text = objects[0].toString();
seeker = objects[1].toString();
usersReceptors = getRecommendationReceptors(idDoc, seeker);
data = new RecommendTracker(usersReceptors, seeker, date.toString(), text, dbSearch.getResult(idDoc, session).getURI(), idDoc, query, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
}
}
return list;
}
/**
* Obtiene una lista las recomendaciones realizadas en una sesión.
*
* @param session nombre de la sesión
* @param seeker nombre del usuario que emitió la recomendación
* @param date fecha de la recomendación
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session, Seeker seeker, Date date) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
int doc;
String text, uri = null;
String[] fields = new String[2];
fields[0] = "TEXT";
fields[1] = "ID_SR";
String[] whereFields = new String[3];
whereFields[0] = "SESSION_TOPIC";
whereFields[1] = "REC_DATE";
whereFields[2] = "SEEKER_USER";
Object[] whereValues = new Object[3];
whereValues[0] = session;
whereValues[1] = date;
whereValues[2] = seeker.getUser();
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int i = 0; i < values.length; i++) {
Object[] obj = values[i];
text = obj[0].toString();
doc = Integer.valueOf(obj[1].toString());
uri = dbSearch.getResult(doc, session).getURI();
usersReceptors = this.getRecommendationReceptors(doc, seeker.getUser());
data = new RecommendTracker(usersReceptors, seeker.getUser(), date.toString(), text, uri, doc, KeySession.MULTIPLE_QUERIES, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
return list;
}
/**
* Obtiene una lista las recomendaciones realizadas en una sesión.
*
* @param session nombre de la sesión
* @param seeker nombre del usuario que emitió la recomendación
* @param query consulta
* @param date fecha
*
* @return devuelve una lista con los datos de las recomendaciones realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<RecommendTracker> getAllRecommendations(String session, Seeker seeker, String query, Date date) throws SQLException {
RecommendTracker data;
List<RecommendTracker> list = new ArrayList<>();
List<String> usersReceptors = new ArrayList<>();
List<Integer> documents = new ArrayList<>();
int idDoc = 0;
String text = null;
//get all results for that query
documents = getQueryOcurrences(query);
//get the recommendations made for that seeker in that date, in that session
for (int i = 0; i < documents.size(); i++) {
idDoc = documents.get(i);
if (util.alreadyExist(idDoc, "DRAKKARKEEL.RECOMMENDATION", "ID_SR", "ID_REC")) {
String[] fields2 = new String[1];
fields2[0] = "TEXT";
String[] whereFields = new String[4];
whereFields[0] = "SESSION_TOPIC";
whereFields[1] = "REC_DATE";
whereFields[2] = "SEEKER_USER";
whereFields[3] = "ID_SR";
Object[] whereValues = new Object[4];
whereValues[0] = session;
whereValues[1] = date;
whereValues[2] = seeker.getUser();
whereValues[3] = idDoc;
TableTracker table2 = PersistentOperations.load(connection, fields2, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] val = table2.getValues();
if (val.length != 0) {
for (int j = 0; j < val.length; j++) {
text = val[j][0].toString();
usersReceptors = getRecommendationReceptors(idDoc, seeker.getUser());
data = new RecommendTracker(usersReceptors, seeker.getUser(), date.toString(), text, dbSearch.getResult(idDoc, session).getURI(), idDoc, query, KeySearchable.MULTIPLE_SEARCHERS);
list.add(data);
}
}
}
}
return list;
}
/**
* Obtiene la lista de receptores de una recomendación
* dado el documento recomendado y el usuario que hizo la recomendación.
*
* @param idDoc id del deocumento recomendado
* @param seeker nombre del usuario que hizo la recomendación
*
* @return devuelve una lista con los nombres de los receptores de una recomendación
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
private List<String> getRecommendationReceptors(int idDoc, String seeker) throws SQLException {
List<String> list = new ArrayList<>();
String[] fields = new String[1];
fields[0] = "SEEKER_RECEPTOR";
String[] whereFields = new String[2];
whereFields[0] = "ID_SR";
whereFields[1] = "SEEKER_USER";
Object[] whereValues = new Object[2];
whereValues[0] = idDoc;
whereValues[1] = seeker;
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKEEL.RECOMMENDATION", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int i = 0; i < values.length; i++) {
String receptor = values[i][0].toString();
list.add(receptor);
}
}
return list;
}
///////////////////SEARCHES////////////////////////////////
/**
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
List<SearchResultData> results = new ArrayList<>();
//get documents
results = filterDocuments(group, session, null);
for (int i = 0; i < results.size(); i++) {
SearchResultData searchResultData = results.get(i);
temp = dbSession.getEvaluations(searchResultData, session);
list.add(new SearchTracker(searchResultData, temp));
}
return list;
}
/**
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión dados los parámetros entrados
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
* @param seeker nombre del usuario
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group, Seeker seeker) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
int idDoc;
SearchResultData data;
//get documents
List<SearchResultData> results = filterDocuments(group, session, null);
//get documents for this seeker
String[] fields = new String[1];
fields[0] = "ID_SR";
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKELL.SEEKER_QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "SEEKER_USER", seeker.getUser());
Object[][] values = table.getValues();
if (values.length != 0) {
for (int i = 0; i < values.length; i++) {
Object[] obj = values[i];
idDoc = Integer.valueOf(obj[0].toString());//documento perteneciente a la búsqueda del seeker
data = dbSearch.getResult(idDoc, session);
for (int j = 0; j < results.size(); j++) {
SearchResultData searchResultData = results.get(j);
if (searchResultData.getId() == data.getId()) {
temp = dbSession.getEvaluations(data, session);
list.add(new SearchTracker(data, temp));
}
}
}
}
return list;
}
/**
*
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión dados los parámetros entrados
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
* @param date fecha
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group, Date date) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
int idDoc;
SearchResultData data;
//get documents
List<SearchResultData> results = filterDocuments(group, session, null);
//get all seekers queries results
List<String> seekers = dbSession.getSessionSeekers(session);
for (int i = 0; i < seekers.size(); i++) {
String seek = seekers.get(i);
String[] fields = new String[1];
fields[0] = "ID_SR";
String[] whereFields = new String[2];
whereFields[0] = "SEEKER_USER";
whereFields[1] = "DATE_QUERY";
Object[] whereValues = new Object[2];
whereValues[0] = seek;
whereValues[1] = date;
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKELL.SEEKER_QUERY", "DRAKKARKEEL.QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "ID_QUERY", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int j = 0; j < values.length; j++) {
Object[] obj = values[j];
idDoc = Integer.valueOf(obj[0].toString());
data = dbSearch.getResult(idDoc, session);
for (int k = 0; k < results.size(); k++) {
SearchResultData searchResultData = results.get(k);
if (searchResultData.getId() == data.getId()) {
temp = dbSession.getEvaluations(data, session);
list.add(new SearchTracker(data, temp));
}
}
}
}
}
return list;
}
/**
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión dados los parámetros entrados
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
* @param query consulta
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group, String query) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
int idDoc = 0;
SearchResultData data;
//get documents
List<SearchResultData> results = filterDocuments(group, session, null);
//verificar que la consulta la halla realizado un usuario de esa sesion
List<String> seekers = dbSession.getSessionSeekers(session);
for (int i = 0; i < seekers.size(); i++) {
String seek = seekers.get(i);
String fields[] = new String[1];
fields[0] = "ID_SR";
String[] whereFields = new String[2];
whereFields[0] = "SEEKER_USER";
whereFields[1] = "TEXT";
Object[] whereValues = new Object[2];
whereValues[0] = seek;
whereValues[1] = query;
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKELL.SEEKER_QUERY", "DRAKKARKEEL.QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "ID_QUERY", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int j = 0; j < values.length; j++) {
Object[] objects = values[j];
idDoc = Integer.valueOf(objects[0].toString());
data = dbSearch.getResult(idDoc, session);
for (int k = 0; k < results.size(); k++) {
SearchResultData searchResultData = results.get(k);
if (searchResultData.getId() == data.getId()) {
temp = dbSession.getEvaluations(data, session);
list.add(new SearchTracker(data, temp));
}
}
}
}
}
/* String fields[] = new String[1];
fields[0] = "ID_SR";
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKEEL.QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "TEXT", query);
*/
return list;
}
/**
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión dados los parámetros entrados
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
* @param seeker nombre del usuario
* @param query consulta
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group, Seeker seeker, String query) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
int idDoc = 0;
SearchResultData data;
//get documents
List<SearchResultData> results = filterDocuments(group, session, null);
//get all results for this query made by this seeker
String fields[] = new String[1];
fields[0] = "ID_SR";
String[] whereFields = new String[2];
whereFields[0] = "SEEKER_USER";
whereFields[1] = "TEXT";
Object[] whereValues = new Object[2];
whereValues[0] = seeker.getUser();
whereValues[1] = query;
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKELL.SEEKER_QUERY", "DRAKKARKEEL.QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "ID_QUERY", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int i = 0; i < values.length; i++) {
Object[] objects = values[i];
idDoc = Integer.valueOf(objects[0].toString());
data = dbSearch.getResult(idDoc, session);
for (int k = 0; k < results.size(); k++) {
SearchResultData searchResultData = results.get(k);
if (searchResultData.getId() == data.getId()) {
temp = dbSession.getEvaluations(data, session);
list.add(new SearchTracker(data, temp));
}
}
}
}
return list;
}
/**
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión dados los parámetros entrados
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
* @param query consulta
* @param date fecha
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group, String query, Date date) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
int idDoc = 0;
SearchResultData data;
//get documents
List<SearchResultData> results = filterDocuments(group, session, date);
//verificar que la consulta la halla realizado un usuario de esa sesion
List<String> seekers = dbSession.getSessionSeekers(session);
for (int i = 0; i < seekers.size(); i++) {
String seek = seekers.get(i);
String fields[] = new String[1];
fields[0] = "ID_SR";
String[] whereFields = new String[3];
whereFields[0] = "SEEKER_USER";
whereFields[1] = "TEXT";
whereFields[2] = "DATE_QUERY";
Object[] whereValues = new Object[3];
whereValues[0] = seek;
whereValues[1] = query;
whereValues[2] = date;
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKELL.SEEKER_QUERY", "DRAKKARKEEL.QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "ID_QUERY", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int j = 0; j < values.length; j++) {
Object[] objects = values[j];
idDoc = Integer.valueOf(objects[0].toString());
data = dbSearch.getResult(idDoc, session);
for (int k = 0; k < results.size(); k++) {
SearchResultData searchResultData = results.get(k);
if (searchResultData.getId() == data.getId()) {
temp = dbSession.getEvaluations(data, session);
list.add(new SearchTracker(data, temp));
}
}
}
}
}
return list;
}
/**
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión dados los parámetros entrados
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
* @param seeker nombre del usuario
* @param date fecha de la búsqueda
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group, Seeker seeker, Date date) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
int idDoc;
SearchResultData data;
//get documents
List<SearchResultData> results = filterDocuments(group, session, date);
//get all queries results that this seeker obtain in that date
String[] fields = new String[1];
fields[0] = "ID_SR";
String[] fields1 = new String[1];
fields1[0] = "DRAKKARKELL.SEEKER_QUERY.ID_QUERY";
String[] whereFields = new String[2];
whereFields[0] = "SEEKER_USER";
whereFields[1] = "DATE_QUERY";
Object[] whereValues = new Object[2];
whereValues[0] = seeker.getUser();
whereValues[1] = date;
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKELL.SEEKER_QUERY", "DRAKKARKEEL.QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "ID_QUERY", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int j = 0; j < values.length; j++) {
Object[] obj = values[j];
idDoc = Integer.valueOf(obj[0].toString());
data = dbSearch.getResult(idDoc, session);
for (int k = 0; k < results.size(); k++) {
SearchResultData searchResultData = results.get(k);
if (data.getURI().equals(searchResultData.getURI())) {
temp = dbSession.getEvaluations(data, session);
list.add(new SearchTracker(data, temp));
}
}
}
}
return list;
}
/**
* Obtiene una lista de documentos correspondientes a búsquedas
* realizadas en una sesión dados los parámetros entrados
*
* @param session nombre de la sesión
* @param group identificador de los documentos (revisados, relevantes o todos)
* @param seeker nombre del usuario
* @param date fecha
* @param query consulta
*
* @return devuelve una lista con los datos de las búsquedas realizadas en una sesión
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
public List<SearchTracker> getAllSearches(String session, int group, Seeker seeker, Date date, String query) throws SQLException {
List<SearchTracker> list = new ArrayList<>();
List<MarkupData> temp = new ArrayList<>();
int idDoc = 0;
SearchResultData data;
//get documents
List<SearchResultData> results = filterDocuments(group, session, date);
//get documents for that query in that date of this seeker
String[] fields = new String[1];
fields[0] = "ID_SR";
String[] whereFields = new String[3];
whereFields[0] = "SEEKER_USER";
whereFields[1] = "DATE_QUERY";
whereFields[2] = "TEXT";
Object[] whereValues = new Object[3];
whereValues[0] = seeker.getUser();
whereValues[1] = date;
whereValues[2] = query;
TableTracker table = PersistentOperations.load(connection, fields, "DRAKKARKELL.SEEKER_QUERY", "DRAKKARKEEL.QUERY", "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", "ID_QUERY", "ID_QUERY", whereFields, whereValues);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int j = 0; j < values.length; j++) {
Object[] obj = values[j];
idDoc = Integer.valueOf(obj[0].toString());
data = dbSearch.getResult(idDoc, session);
for (int k = 0; k < results.size(); k++) {
SearchResultData searchResultData = results.get(k);
if (searchResultData.getId() == data.getId()) {
temp = dbSession.getEvaluations(data, session);
list.add(new SearchTracker(data, temp));
}
}
}
}
return list;
}
/**
* Devuelve una lista de resultados de búsqueda en una sesión
* de acuerdo a tres constantes: revisados, relevantes o todos los resultados de la búsqueda
*
* @param group identificador de los documentos
* @param session nombre de la sesión
*
* @return devuelve una lista con los datos de los resultados de búsqueda
*
* @throws SQLException si ocurre alguna SQLException durante la ejecución
* de la operación
*/
private List<SearchResultData> filterDocuments(int group, String session, Date date) throws SQLException {
List<SearchResultData> list = new ArrayList<>();
switch (group) {
case SeekerAction.SEARCH_REVIEWED_TRACK:
list = dbSearch.getAllReviewDocuments(session);
break;
case SeekerAction.SEARCH_SELECTED_RELEVANT_TRACK:
list = dbSearch.getAllRelevantDocuments(session, date);
break;
case SeekerAction.SEARCH_ALL_TRACK:
list = dbSearch.getAllDocuments(session);
break;
}
return list;
}
/**
*
* Obtiene todos los documentos para una consulta, valora si esta se repite
* de ser el caso, entonces toma todos los documentos que constituyen los
* resultados de búsqueda para cada una
*
* @param query consulta
*
* @return
* @throws SQLException
*/
private List<Integer> getQueryOcurrences(String query) throws SQLException {
List<Integer> list = new ArrayList<>();
List<Integer> queries = new ArrayList<>();
int doc = 0;
int idQuery = 0;
String[] fields = new String[1];
fields[0] = "ID_QUERY";
TableTracker table1 = PersistentOperations.load(connection, fields, "DRAKKARKEEL.QUERY", "TEXT", query);
Object[][] values1 = table1.getValues();
if (values1.length != 0) {
for (int i = 0; i < values1.length; i++) {
Object[] objects = values1[i];
idQuery = Integer.valueOf(objects[0].toString());
queries.add(idQuery);
}
}
for (int i = 0; i < queries.size(); i++) {
Integer integer = queries.get(i);
String[] fields2 = new String[1];
fields2[0] = "ID_SR";
TableTracker table = PersistentOperations.load(connection, fields2, "DRAKKARKEEL.QUERY_SEARCH_RESULT", "ID_QUERY", integer);
Object[][] values = table.getValues();
if (values.length != 0) {
for (int j = 0; j < values.length; j++) {
Object[] obj = values[j];
doc = Integer.valueOf(obj[0].toString());
if (!list.contains(doc)) {
list.add(doc);
}
}
}
}
return list;
}
}