/*
* 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.cache;
import drakkar.oar.DocumentMetaData;
import drakkar.oar.Seeker;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Esta clase almacena los resultados de las recomendaciones efectuadas a cada
* usuario de la sesión
*/
public class SeekerRecommendResults {
/**
* Esta tabla hash almacena los documentos obtenidos en las búsquedas de cada
* usuario
*/
public Map<Seeker, SeekerRecData> record;
/**
* Constructor de la clase
*/
public SeekerRecommendResults() {
this.record = new HashMap<>();
}
/**
* Esta clase interna almacena los documentos obtenidos para una consulta
* de búsqueda
*/
/* Esta clase interna almacena los resultados obtenidos por cada uno de los
* buscadores empleados en la búsqueda
*/
public class SeekerRecData {
/**
* Esta tabla hash almacena los documentos obtenidos por hora por cada buscador
*/
public Map<String, RecommendResults> values;
/**
* Constructor de la clase
*/
public SeekerRecData() {
this.values = new HashMap<>();
}
/**
* Devuelve los metadocumentos encontrados para el buecador especificado
*
* @param searcher buscador
*
* @return lista de metadocumentos
*/
public List<DocumentMetaData> getMetaDocuments(int searcher) {
List<DocumentMetaData> metaDocuments = new ArrayList<>();
Collection<RecommendResults> engineResults = values.values();
for (RecommendResults item : engineResults) {
metaDocuments.addAll(item.results.get(searcher).getDocuments());
}
return metaDocuments;
}
}
/**
* Esta clase guarda los resultados por buscadores
*/
public class RecommendResults {
/**
*
*/
public Map<Integer, IndexRecommendation> results;
/**
* Constructor
*/
public RecommendResults() {
results = new HashMap<>();
}
/**
*
* @return
*/
public Map<Integer, List<DocumentMetaData>> getDocuments() {
Map<Integer, List<DocumentMetaData>> docs = new HashMap<>();
Set<Integer> searchers = results.keySet();
for (Integer item : searchers) {
docs.put(item, results.get(item).getDocuments());
}
return docs;
}
public void insertRecommendation(Map<Integer, List<DocumentMetaData>> hash) {
IndexRecommendation index;
List<DocumentMetaData> temp;
Set<Integer> searchers = hash.keySet();
for (Integer item : searchers) {
temp = hash.get(item);
if (this.results.containsKey(item)) {
index = this.results.get(item);
index.insertIndexRecommend(temp);
} else {
index = new IndexRecommendation(temp);
this.results.put(item, index);
}
}
}
}
/**
*
*/
public class IndexRecommendation {
/**
*
*/
public Map<Integer, DocumentMetaData> index;
/**
*
* @param docs
*/
public IndexRecommendation(List<DocumentMetaData> docs) {
this.index = new HashMap<>(docs.size());
for (DocumentMetaData item : docs) {
this.index.put(item.getIndex(), item);
}
}
/**
*
* @return
*/
public List<DocumentMetaData> getDocuments() {
List<DocumentMetaData> docs = new ArrayList<>(this.index.values());
return docs;
}
public void insertIndexRecommend(List<DocumentMetaData> rec) {
int idDoc;
for (DocumentMetaData item : rec) {
idDoc = item.getIndex();
if (!index.containsKey(idDoc)) {
index.put(idDoc, item);
}
}
}
}
}