/*
* 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.RecommendTracker;
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;
public class SeekerRecommends {
/**
*
*/
public Map<Seeker, RecomendsData> values;//por usuario todas las recomendaciones recibidas
/**
*
* @param record
*/
public SeekerRecommends(Map<Seeker, RecomendsData> record) {
this.values = record;
}
/**
*
*/
public SeekerRecommends() {
values = new HashMap<>();
}
/**
*
* @return
*/
public List<RecommendTracker> getRecommendations() {
List<RecommendTracker> list = new ArrayList<>();
Collection<RecomendsData> col = this.values.values();
for (RecomendsData item : col) {
list.addAll(item.getRecommendations());
}
return list;
}
/**
*
* @param query
* @return
*/
public List<RecommendTracker> getRecommendations(String query) {
List<RecommendTracker> list = new ArrayList<>();
Collection<RecomendsData> col = this.values.values();
for (RecomendsData item : col) {
list.addAll(item.getRecommendations());
}
return list;
}
/**
*
* @param seeker
* @return
*/
public List<RecommendTracker> getRecommendations(Seeker seeker) {
List<RecommendTracker> list = new ArrayList<>();
RecomendsData col = this.values.get(seeker);
list = col.getRecommendations();
return list;
}
/**
*
* @param query
* @param seeker
* @return
*/
public List<RecommendTracker> getRecommendations(String query, Seeker seeker) {
List<RecommendTracker> list = new ArrayList<>();
RecomendsData col = this.values.get(seeker);
list = col.getRecommendations(query);
return list;
}
/**
*
*/
public class RecomendsData {
//query
/**
*
*/
public Map<String, SearcherResults> data;
/**
*
*/
public RecomendsData() {
data = new HashMap<>();
}
/**
*
* @return
*/
public List<RecommendTracker> getRecommendations() {
List<RecommendTracker> list = new ArrayList<>();
Collection<SearcherResults> col = this.data.values();
for (SearcherResults item : col) {
list.addAll(item.getRecommendations());
}
return list;
}
/**
*
* @param query
* @return
*/
public List<RecommendTracker> getRecommendations(String query) {
List<RecommendTracker> list = new ArrayList<>();
SearcherResults col = this.data.get(query);
list = col.getRecommendations();
return list;
}
}
/**
* Almacena por buscadores las recomendaciones
*/
public class SearcherResults {
//searcher - recomendaciĆ³n
/**
*
*/
public Map<Integer, IndexRecommend> searcher;
/**
*
*/
public SearcherResults() {
searcher = new HashMap<>();
}
/**
*
* @param hash relaciĆ³n de docuementos recomendados por buscadores
*/
public SearcherResults(Map<Integer, List<RecommendTracker>> hash) {
this.searcher = new HashMap<>();
IndexRecommend index;
Set<Integer> enu = hash.keySet();
for (Integer item : enu) {
index = new IndexRecommend(hash.get(item));
this.searcher.put(item, index);
}
}
/**
*
* @param hash
*/
public void insertRecommendation(Map<Integer, List<RecommendTracker>> hash) {
IndexRecommend index;
List<RecommendTracker> temp;
Set<Integer> searchers = hash.keySet();
for (Integer item : searchers) {
temp = hash.get(item);
if (this.searcher.containsKey(item)) {
index = this.searcher.get(item);
index.insertIndexRecommend(temp);
} else {
index = new IndexRecommend(temp);
this.searcher.put(item, index);
}
}
}
/**
*
* @return
*/
public List<RecommendTracker> getRecommendations() {
List<RecommendTracker> list = new ArrayList<>();
Collection<IndexRecommend> col = this.searcher.values();
for (IndexRecommend item : col) {
list.addAll(item.getRecommendations());
}
return list;
}
}
/**
* Almacena por id de doc las recomendaciones
*/
public class IndexRecommend {
//id del documento
Map<Integer, RecommendTracker> index;
/**
*
*/
public IndexRecommend() {
index = new HashMap<>();
}
/**
*
* @param rec
*/
public IndexRecommend(List<RecommendTracker> rec) {
index = new HashMap<>();
for (RecommendTracker recommendData : rec) {
index.put(recommendData.getIdDoc(), recommendData);
}
}
/**
*
* @param rec
*/
public void insertIndexRecommend(List<RecommendTracker> rec) {
RecommendTracker temp;
int idDoc;
for (RecommendTracker item : rec) {
idDoc = item.getIdDoc();
if (index.containsKey(idDoc)) {
temp = index.get(idDoc);
temp.getReceptors().addAll(item.getReceptors());
} else {
index.put(idDoc, item);
}
}
}
/**
*
* @return
*/
public List<RecommendTracker> getRecommendations() {
List<RecommendTracker> list = new ArrayList<>();
Collection<RecommendTracker> col = this.index.values();
list = new ArrayList<>(col);
return list;
}
}
}