/* * 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.Seeker; import drakkar.oar.util.OutputMonitor; 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 las evaluaciones efectuadas por cada usuario de la sesión, * sobre los documentos obtenidos para cada consulta de búsqueda */ public class SelectedDocuments { /** * Esta tabla hash almacena las evaluaciones efectuadas por cada uno de los * usuarios */ public Map<Seeker, Evaluation> record; /** * Constructor de la clase */ public SelectedDocuments() { this.record = new HashMap<>(); } public boolean isSelected(int searcher, int docIndex) { Collection<Evaluation> col = this.record.values(); boolean flag = false; for (Evaluation item : col) { flag = item.isSelected(searcher, docIndex); if (flag) { return flag; } } return flag; } public boolean isSelected(int searcher, int docIndex, String query) { Collection<Evaluation> col = this.record.values(); boolean flag = false; for (Evaluation item : col) { flag = item.isSelected(query, searcher, docIndex); if (flag) { return flag; } } return flag; } public boolean isSelected(int searcher, int docIndex, Seeker seeker) { Evaluation col = this.record.get(seeker); boolean flag = false; if (col != null) { flag = col.isSelected(searcher, docIndex); } else { OutputMonitor.printLine("No hay evaluaciones del seeker: " + seeker.getUser(), OutputMonitor.ERROR_MESSAGE); } return flag; } public boolean isSelected(int searcher, int docIndex, String query, Seeker seeker) { boolean flag = false; Evaluation col = this.record.get(seeker); if (col != null) { flag = col.isSelected(query, searcher, docIndex); } else { OutputMonitor.printLine("No hay evaluaciones del seeker: " + seeker.getUser(), OutputMonitor.ERROR_MESSAGE); } return flag; } /** * * @param searcher * @param docIndex * @return */ public ArrayList<SelectDocumentsData> getSelectedDocuments(int searcher, int docIndex) { ArrayList<SelectDocumentsData> list = new ArrayList<>(); SelectDocumentsData data; Set<Seeker> seekers = this.record.keySet(); for (Seeker seeker : seekers) { data = record.get(seeker).getSelectedDocuments(searcher, docIndex); if (data != null) { data.setUser(seeker.getUser()); list.add(data); } } return list; } /** * * @param query * @param searcher * @param docIndex * @return */ public ArrayList<SelectDocumentsData> getSelectedDocuments(String query, int searcher, int docIndex) { ArrayList<SelectDocumentsData> list = new ArrayList<>(); SelectDocumentsData data; Set<Seeker> seekers = this.record.keySet(); for (Seeker seeker : seekers) { data = record.get(seeker).getSelectedDocuments(query, searcher, docIndex); if (data != null) { data.setUser(seeker.getUser()); list.add(data); } } return list; } /** * * @param seeker * @param searcher * @param docIndex * @return */ public SelectDocumentsData getSelectedDocuments(Seeker seeker, int searcher, int docIndex) { SelectDocumentsData data = null; data = record.get(seeker).getSelectedDocuments(searcher, docIndex); if (data != null) { data.setUser(seeker.getUser()); } return data; } /** * * @param query * @param seeker * @param searcher * @param docIndex * @return */ public SelectDocumentsData getSelectedDocuments(String query, Seeker seeker, int searcher, int docIndex) { SelectDocumentsData data = null; data = record.get(seeker).getSelectedDocuments(query, searcher, docIndex); if (data != null) { data.setUser(seeker.getUser()); } return data; } /** * Esta clase interna almacena la relación de evaluaciones efecuadas a * documentos obtenidos para una consulta en una hora determinada */ public class Evaluation { /** * Esta tabla hash almacena la lista de evaluaciones efecuadas a los * documento obtenidos por cada buscador */ public Map<String, SelectedData> evaluation; /** * Constructor de la clase */ public Evaluation() { this.evaluation = new HashMap<>(); } private SelectDocumentsData getSelectedDocuments(int searcher, int docIndex) { SelectDocumentsData data = null; Collection<SelectedData> col = this.evaluation.values(); for (SelectedData item : col) { data = item.getSelectedDocuments(searcher, docIndex); if (item != null) { return data; } } return data; } private SelectDocumentsData getSelectedDocuments(String query, int searcher, int docIndex) { SelectDocumentsData data = null; SelectedData col = this.evaluation.get(query); if (col != null) { data = col.getSelectedDocuments(searcher, docIndex); } return data; } private boolean isSelected(int searcher, int docIndex) { Collection<SelectedData> col = this.evaluation.values(); boolean flag = false; for (SelectedData item : col) { flag = item.isSelected(searcher, docIndex); if (flag) { return flag; } } return flag; } private boolean isSelected(String query, int searcher, int docIndex) { SelectedData col = this.evaluation.get(query); boolean flag = false; if (col != null) { flag = col.isSelected(searcher, docIndex); } return flag; } } /** * */ public class SelectedData { // buscador /** * */ public Map<Integer, RelevanceDocs> values; /** * Constructor de la clase */ public SelectedData() { this.values = new HashMap<>(); } private SelectDocumentsData getSelectedDocuments(int searcher, int docIndex) { SelectDocumentsData data = null; byte relevance; try { Object object = this.values.get(searcher).values.get(docIndex); relevance = (object != null) ? (Byte) object : 0; data = new SelectDocumentsData(relevance, ""); } catch (NullPointerException ex) { OutputMonitor.printStream("No existen resultados asociados al buscador.", ex); } return data; } private List<SelectDocumentsData> getSelectedDocuments() { List<SelectDocumentsData> list = null; SelectDocumentsData data = null; byte relevance; try { Set<Integer> searchers = this.values.keySet(); RelevanceDocs relDocs; for (Integer searcher : searchers) { relDocs = this.values.get(searcher); Set<Integer> indexDocs = relDocs.values.keySet(); for (Integer docIndex : indexDocs) { relevance = relDocs.values.get(docIndex); data = new SelectDocumentsData(relevance, null); } } } catch (NullPointerException ex) { OutputMonitor.printStream("No existen resultados asociados al buscador.", ex); } return list; } public boolean isSelected(int searcher, int docIndex) { boolean flag = false; RelevanceDocs col = this.values.get(searcher); if (col != null) { flag = col.isSelected(docIndex); } return flag; } } /** * */ public class RelevanceDocs { /** * Esta tabla hash almacena la relación del valor de relevancia por * documentos (<indice del documento, valor de relevancia>) */ public Map<Integer, Byte> values; public RelevanceDocs() { this.values = new HashMap<>(); } /** * Constructor de la clase * * @param values lista de evaluaciones */ public RelevanceDocs(Map<Integer, Byte> values) { this.values = values; } /** * Constructor de la clase * * @param index índice del documento * @param relevance evaluación */ public RelevanceDocs(int index, byte relevance) { values = new HashMap<>(); values.put(index, relevance); } public boolean isSelected(int docIndex) { Set<Integer> col = this.values.keySet(); boolean flag = col.contains(docIndex); return flag; } } }