r166 - in trunk/chorem-webmotion/src/main: java/org/chorem/webmotion/actions resources
Author: bpoussin Date: 2012-05-31 18:55:38 +0200 (Thu, 31 May 2012) New Revision: 166 Url: http://chorem.org/repositories/revision/chorem/166 Log: rewrite searchAsMap with new wikitty functionnality Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java trunk/chorem-webmotion/src/main/resources/log4j.properties Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java 2012-05-31 14:01:50 UTC (rev 165) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java 2012-05-31 16:55:38 UTC (rev 166) @@ -27,6 +27,9 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import org.chorem.ChoremConfig; +import org.chorem.ChoremConfigOption; +import org.nuiton.wikitty.entities.ElementField; /** * @@ -93,8 +96,74 @@ } + /** + * Fait une recherche et retourne le resultat dans une map avec comme cle + * le nom de l'extension et comme valeur une liste de Wikitty qui correspond + * aux criteres de recherche. + * + * Recherche avec la possilite d'indiquer le niveau de profondeur de recherche + * pour les champs de type wikitty. + * + * @param client objet injecte par le framework webmotion/chorem + * @param extension la liste des extensions que peut/doit avoir l'objet resultat + * Si vide alors on fait la recherche sur toutes les extensions disponibles + * dans la base. + * @param query la restriction a appliquer en plus des extensions + * @param depth le niveau de profondeur de recherche + * @return une Map{extensionName: liste de wikitty} + */ + // depth est un Integer car si c'est un int et qu'il n'existe pas dans les parametres + // l'appel plante au lieu de passer 0 comme valeur par defaut + public LinkedHashMultimap<String, Wikitty> searchAsMap(ChoremClient client, String[] extension, String query, Integer depth) { + if (depth == null) { + depth = 0; + } + + WikittyQuery q; + + if (extension != null) { + q = new WikittyQueryMaker().and() + .extContainsOne(Arrays.asList(extension)) + .parse(query) + .end(); + } else { + q = new WikittyQueryMaker() + .parse(query) + .end(); + } + q.setWikittyFieldSearchDepth(depth); + + // on essai de trier les resultats au mieux tout en ne faisant qu'un requete + Collection<WikittyExtension> exts = client.restoreExtensionLastVersion(extension); + for (WikittyExtension ext : exts) { + q.addSortAscending(ext.getSortAscending().toArray(new ElementField[0])); + q.addSortDescending(ext.getSortDescending().toArray(new ElementField[0])); + } + + + WikittyQueryResult<Wikitty> results = + client.findAllByQuery(Wikitty.class, q); + + // on classe par extension demande les resultats + LinkedHashMultimap<String, Wikitty> map = LinkedHashMultimap.create(); + for (Wikitty w : results) { + for (String ext : w.getExtensionNames()) { + map.put(ext, w); + } + } + + List<String> extExcluded = client.getConfig().getOptionAsList( + ChoremConfigOption.CHOREM_EXTENSION_SEARCH_EXCLUSION.key).getOption(); + for (String ext : extExcluded) { + map.removeAll(ext); + } + + return map; + + } + public Render search(ChoremClient client, String[] extension, String query) { - LinkedHashMultimap<String, Wikitty> map = searchAsMap(client, extension, query); + LinkedHashMultimap<String, Wikitty> map = searchAsMap(client, extension, query, 1); return renderView("search.jsp", "result", map); } @@ -131,7 +200,7 @@ // query += " AND ("+extensionRestriction+")"; // } - LinkedHashMultimap<String, Wikitty> map = searchAsMap(client, extension, query); + LinkedHashMultimap<String, Wikitty> map = searchAsMap(client, extension, query, 1); List<Map<String, String>> result = new ArrayList<Map<String, String>>(map.size()); for (Map.Entry<String, Wikitty> e : map.entries()) { String extName = e.getKey(); @@ -164,7 +233,8 @@ * @param query la restriction a appliquer en plus des extensions * @return une Map{extensionName: liste de wikitty} */ - protected LinkedHashMultimap<String, Wikitty> searchAsMap( + // FIXME poussin 20120531 a supprimer lorsque le searchAsMap fonctionnera bien + protected LinkedHashMultimap<String, Wikitty> searchAsMapOld( ChoremClient client, String[] extension, String query) { boolean expliciteExtension = false; Collection<String> extNames; @@ -211,7 +281,7 @@ // on ajoute pour chaque champs precharge, la meme condition // par exemple cela permet lorsqu'on recherche un 'Employee' de // recherche aussi sur le nom de la personne ou de la societe - String [] preload = StringUtils.split(ext.getTagValue(WikittyTagValue.TAG_PRELOAD), ";"); + String [] preload = null;//FIXME test StringUtils.split(ext.getTagValue(WikittyTagValue.TAG_PRELOAD), ";"); if (preload == null) { // si pas de preload, on ajoute directement la restriction queryMaker.condition(q.getCondition()); @@ -387,7 +457,7 @@ */ public Render searchRelated(ChoremClient client, String id) { String query = id + " AND id != " + id; - LinkedHashMultimap<String, Wikitty> map = searchAsMap(client, null, query); + LinkedHashMultimap<String, Wikitty> map = searchAsMap(client, null, query, 0); return renderView("search.jsp", "result", map); } } Modified: trunk/chorem-webmotion/src/main/resources/log4j.properties =================================================================== --- trunk/chorem-webmotion/src/main/resources/log4j.properties 2012-05-31 14:01:50 UTC (rev 165) +++ trunk/chorem-webmotion/src/main/resources/log4j.properties 2012-05-31 16:55:38 UTC (rev 166) @@ -32,3 +32,4 @@ # package level log4j.logger.org.chorem=DEBUG log4j.logger.org.nuiton=INFO +#log4j.logger.org.nuiton.wikitty.storage.solr.SolrUtil=DEBUG
participants (1)
-
bpoussin@users.chorem.org