/* * 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.mast.retrieval.improves; import drakkar.oar.DocumentMetaData; import drakkar.oar.ResultSetMetaData; import drakkar.oar.util.KeySearchable; import drakkar.oar.util.OutputMonitor; import drakkar.mast.SearchException; import drakkar.mast.retrieval.AdvSearchEngine; import drakkar.mast.retrieval.Searchable; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * Esta clase maneja todos los métodos de búsqueda no colaborativa, con multiples * de buscadores que pueden ser invocados por los clientes * * */ public class DefaultMultiSearch extends SearchFactory { /** * Constructor de la clase * * @param searchers lista de buscadores */ public DefaultMultiSearch(Map<Integer, Searchable> searcherHash, List<Searchable> searchersList) { super(searcherHash, searchersList); } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; for (Searchable item : searchersList) { if (item.isEnabled()) { temp = item.search(query, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param field campo del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, int field, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; for (Searchable item : searchersList) { if (item.isEnabled() && item instanceof AdvSearchEngine) { temp = ((AdvSearchEngine) item).search(query, field, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param fields campos del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, int[] fields, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; for (Searchable item : searchersList) { if (item.isEnabled() && item instanceof AdvSearchEngine) { temp = ((AdvSearchEngine) item).search(query, fields, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param docType tipo de documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, String docType, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; for (Searchable item : searchersList) { if (item.isEnabled()) { temp = item.search(query, docType, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param docTypes tipo de documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, String[] docTypes, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; for (Searchable item : searchersList) { if (item.isEnabled()) { temp = item.search(query, docTypes, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param docType tipo de documento * @param field campo del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, String docType, int field, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; AdvSearchEngine engine; for (Searchable item : searchersList) { if (item.isEnabled() && item instanceof AdvSearchEngine) { engine = (AdvSearchEngine) item; temp = engine.search(query, docType, field, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param docTypes tipo de documento * @param field campo del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, String[] docTypes, int field, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; AdvSearchEngine engine; for (Searchable item : searchersList) { if (item.isEnabled() && item instanceof AdvSearchEngine) { engine = (AdvSearchEngine) item; temp = engine.search(query, docTypes, field, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param docType tipo de documento * @param fields campos del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, String docType, int[] fields, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; AdvSearchEngine engine; for (Searchable item : searchersList) { if (item.isEnabled() && item instanceof AdvSearchEngine) { engine = (AdvSearchEngine) item; temp = engine.search(query, docType, fields, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando todos * los buscadores activos en el servidor * * @param query consulta de la búsqueda * @param docTypes tipo de documento * @param fields campos del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda */ public ResultSetMetaData search(String query, String[] docTypes, int[] fields, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; AdvSearchEngine engine; for (Searchable item : searchersList) { if (item.isEnabled() && item instanceof AdvSearchEngine) { engine = (AdvSearchEngine) item; temp = engine.search(query, docTypes, fields, caseSensitive); results.add(item.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; for (Integer searcher : searchers) { searcherItem = this.searchersHash.get(searcher); if (searcherItem != null && searcherItem.isEnabled()) { temp = searcherItem.search(query, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param field campo del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, int field, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; for (Integer searcher : searchers) { searcherItem = this.searchersHash.get(searcher); if (searcherItem != null && searcherItem.isEnabled() && searcherItem instanceof AdvSearchEngine) { temp = ((AdvSearchEngine) searcherItem).search(query, field, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param fields campos del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, int[] fields, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; for (Integer searcher : searchers) { searcherItem = this.searchersHash.get(searcher); if (searcherItem != null && searcherItem.isEnabled() && searcherItem instanceof AdvSearchEngine) { temp = ((AdvSearchEngine) searcherItem).search(query, fields, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param docType tipo de documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, String docType, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; for (Integer item : searchers) { searcherItem = this.searchersHash.get(item); if (searcherItem != null && searcherItem.isEnabled()) { temp = searcherItem.search(query, docType, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param docTypes tipos de documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, String[] docTypes, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; for (Integer searcher : searchers) { searcherItem = this.searchersHash.get(searcher); if (searcherItem != null && searcherItem.isEnabled()) { temp = searcherItem.search(query, docTypes, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param docType tipo de documento * @param field campo del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, String docType, int field, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; AdvSearchEngine engine; for (Integer item : searchers) { searcherItem = this.searchersHash.get(item); if (searcherItem != null && searcherItem.isEnabled() && searcherItem instanceof AdvSearchEngine) { engine = (AdvSearchEngine) searcherItem; temp = engine.search(query, docType, field, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param docType tipo de documento * @param fields campos del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, String docType, int[] fields, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; AdvSearchEngine engine; for (Integer item : searchers) { searcherItem = this.searchersHash.get(item); if (searcherItem != null && searcherItem.isEnabled() && searcherItem instanceof AdvSearchEngine) { engine = (AdvSearchEngine) searcherItem; temp = engine.search(query, docType, fields, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param docTypes tipos de documento * @param field campo del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, String[] docTypes, int field, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; AdvSearchEngine engine; for (Integer item : searchers) { searcherItem = this.searchersHash.get(item); if (searcherItem != null && searcherItem.isEnabled() && searcherItem instanceof AdvSearchEngine) { engine = (AdvSearchEngine) searcherItem; temp = engine.search(query, docTypes, field, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } /** * Invoca una búsqueda a partir de los parámetros de entrada, empleando los * los buscadores seleccionados * * @param searchers buscadores * @param query consulta de la búsqueda * @param docTypes tipos de documento * @param fields campos del documento * @param caseSensitive tener en cuenta mayúsculas y minísculas * * @return lista de documentos encontrados * * @throws SearchException si ocurre alguna excepción durante el proceso de búsqueda * * <br> * <br> * <b>Nota:</b> * <br> * Las constantes que representan los diferentes buscadores soportados, se encuentran * definidas en la clase <code>KeySearchable</code>, del paquete drakkar.oar.util * <br> * <br> * * @see KeySearchable * */ public ResultSetMetaData search(int[] searchers, String query, String[] docTypes, int[] fields, boolean caseSensitive) throws SearchException { ResultSetMetaData results = new ResultSetMetaData(query); List<DocumentMetaData> temp = null; Searchable searcherItem; AdvSearchEngine engine; for (Integer item : searchers) { searcherItem = this.searchersHash.get(item); if (searcherItem != null && searcherItem.isEnabled() && searcherItem instanceof AdvSearchEngine) { engine = (AdvSearchEngine) searcherItem; temp = engine.search(query, docTypes, fields, caseSensitive); results.add(searcherItem.getID(), temp); } } return results; } private ResultSetMetaData removeRepeatedDocuments(ResultSetMetaData documentsList) { List<DocumentMetaData> documents, tempDocuments = null; ResultSetMetaData temp = documentsList; DocumentMetaData metaDocument1, metaDocument2; Map<Integer, List<DocumentMetaData>> hash = temp.getResultsMap(); Map<Integer, List<DocumentMetaData>> hashTemp = new HashMap<Integer, List<DocumentMetaData>>(); Set<Integer> enumeration = hash.keySet(); for (Integer searcher : enumeration) { documents = hash.get(searcher); deleteRepeated(documents); if (tempDocuments != null) { for (int i = 0; i < tempDocuments.size(); i++) { for (int idx = 0; idx < documents.size(); idx++) { metaDocument1 = tempDocuments.get(i); metaDocument2 = documents.get(idx); if(metaDocument1.getPath().equals(metaDocument2.getPath())){ documents.remove(metaDocument2); } } } } tempDocuments = documents; hashTemp.put(searcher, documents); } temp.setResultsMap(hashTemp); temp.setQuery(documentsList.getQuery()); return temp; } private void deleteRepeated(List<DocumentMetaData> list) { try { for (int i = 0; i < list.size() - 1; i++) { for (int k = 0; k < list.size(); k++) { for (int j = i + 1; j < list.size(); j++) { DocumentMetaData docData1 = list.get(j); DocumentMetaData docData2 = list.get(i); if (docData1.getPath().equals(docData2.getPath())) { list.remove(j); } } } } } catch (NullPointerException ex) { OutputMonitor.printStream("", ex); } } }