r1161 - in trunk/wikitty-api/src/main/java/org/nuiton/wikitty: . search
Author: bpoussin Date: 2011-08-16 20:07:15 +0200 (Tue, 16 Aug 2011) New Revision: 1161 Url: http://nuiton.org/repositories/revision/wikitty/1161 Log: add clone method on criteria to simplify copy and modification of criteria restriction with Search object and new criteria.setRestriction(Search) Use this new feature in WikittyProxy Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Criteria.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-08-16 16:36:23 UTC (rev 1160) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-08-16 18:07:15 UTC (rev 1161) @@ -595,42 +595,21 @@ // on ajoute la condition sur les extensions dans le critere // du coup, pour ne pas modifier le critere qui vient en parametre // il faut creer un nouveau critere ... - Search search = Search.query(criteria); - search = search.exteq(extensions); - Criteria serviceCriteria = search.criteria(); - serviceCriterias.add(serviceCriteria); - - // ... et si besoin recopier tout ce qui etait sur l'ancien + Criteria serviceCriteria = null; if (criteria != null) { - serviceCriteria.setName(criteria.getName()); - serviceCriteria.setFirstIndex(criteria.getFirstIndex()); - serviceCriteria.setEndIndex(criteria.getEndIndex()); + // creation de la nouvelle contrainte + Search search = Search.query(criteria); + search = search.exteq(extensions); - List<String> facetField = criteria.getFacetField(); - if (facetField != null) { - String[] facetFieldTab = new String[facetField.size()]; - serviceCriteria.setFacetField(facetField.toArray(facetFieldTab)); - } - - List<Criteria> facetCriteria = criteria.getFacetCriteria(); - if (facetCriteria != null) { - Criteria[] facetCriteriaTab = new Criteria[facetCriteria.size()]; - serviceCriteria.setFacetCriteria(facetCriteria.toArray(facetCriteriaTab)); - } - - List<String> sortAscending = criteria.getSortAscending(); - if (sortAscending != null) { - String[] sortAscendingTab = new String[sortAscending.size()]; - serviceCriteria.setSortAscending(sortAscending.toArray(sortAscendingTab)); - } - - List<String> sortDescending = criteria.getSortDescending(); - if (sortDescending != null) { - String[] sortDescendingTab = new String[sortDescending.size()]; - serviceCriteria.setSortDescending(sortDescending.toArray(sortDescendingTab)); - } + // utilisation de cette nouvelle contrainte sur le nouvel objet + serviceCriteria = criteria.clone(); + serviceCriteria.setRestriction(search); } + + // ajout de ce criteria dans la liste de tous les criteres + serviceCriterias.add(serviceCriteria); } + List<PagedResult<String>> pagedResult = wikittyService.findAllByCriteria( securityToken, serviceCriterias); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Criteria.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Criteria.java 2011-08-16 16:36:23 UTC (rev 1160) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Criteria.java 2011-08-16 18:07:15 UTC (rev 1161) @@ -34,6 +34,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.search.operators.Restriction; @@ -52,7 +53,7 @@ * Last update: $Date$ * by : $Author$ */ -public class Criteria implements Serializable { +public class Criteria implements Serializable, Cloneable { /** serialVersionUID. */ private static final long serialVersionUID = 2590223960861630283L; @@ -109,7 +110,47 @@ public Criteria() { } + /** + * Cree un nouvel objet criteria ou l'objet restriction est pointer par les + * deux critere apres le clone. La modification d'une restriction impactera + * l'autre critere. (Ce comportement peut-etre modifier si besoin). + * Tous les autres champs sont en deepcopy. + * + * @return + * @throws WikittyException + */ + @Override + public Criteria clone() { + try { + Object result = super.clone(); + Criteria clone = (Criteria) result; + + if (facetField != null) { + clone.facetField = new ArrayList<String>(facetField); + } + if (sortAscending != null) { + clone.sortAscending = new ArrayList<String>(sortAscending); + } + + if (sortDescending != null) { + clone.sortDescending = new ArrayList<String>(sortDescending); + } + + if (facetCriteria != null) { + clone.facetCriteria = new ArrayList<Criteria>(); + for (Criteria c : facetCriteria) { + clone.facetCriteria.add(c.clone()); + } + } + + return clone; + } catch (CloneNotSupportedException eee) { + throw new WikittyException("Can't clone criteria", eee); + } + } + + /** * Create named criteria. * * @param name criteria name @@ -154,7 +195,15 @@ public void setRestriction(Restriction restriction) { this.restriction = restriction; } - + + /** + * Substitue la restriction de ce critere par celui de search + * @param search + */ + public void setRestriction(Search search) { + this.restriction = search.getRestrictions(); + } + public String getName() { return name; }
participants (1)
-
bpoussin@users.nuiton.org