r753 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport wikitty-api/src/main/java/org/nuiton/wikitty/services wikitty-api/src/test/java/org/nuiton/wikitty/addons/importexport wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr
Author: bpoussin Date: 2011-03-18 18:02:55 +0100 (Fri, 18 Mar 2011) New Revision: 753 Url: http://nuiton.org/repositories/revision/wikitty/753 Log: Evolution #1394: add new find method with multiple criteria (we used Criteria ... criteria notation in WikittyService, but perhaps is more portable with Criteria[] criteria. In all case vargargs notation in proxy must be keep) Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ExportTask.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/addons/importexport/ImportExportCSVTest.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.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-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-03-18 17:02:55 UTC (rev 753) @@ -25,6 +25,7 @@ package org.nuiton.wikitty; +import java.lang.reflect.Array; import java.util.AbstractMap.SimpleEntry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,6 +46,7 @@ import org.nuiton.wikitty.services.WikittyServiceEnhanced; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -471,8 +473,7 @@ .setFirstIndex(firstIndex).setEndIndex(endIndex) .setFacetField(fieldFacet); - PagedResult<String> pagedResult = wikittyService.findAllByCriteria( - securityToken, criteria); + PagedResult<String> pagedResult = findAllIdByCriteria(criteria); // we can use autoconvert = true because search by example add automaticaly // restriction on extension PagedResult<E> result = (PagedResult<E>)pagedResult.cast( @@ -492,7 +493,7 @@ long start = TimeLog.getTime(); Criteria criteria = Search.query(e.getWikitty()).criteria(); - String id = wikittyService.findByCriteria(securityToken, criteria); + String id = findIdByCriteria(criteria); E result = null; if (id != null) { Wikitty w = wikittyService.restore(securityToken, id); @@ -508,7 +509,7 @@ * Search object that correspond to criteria and that have all extension * needed by BusinessEntity (clazz). If criteria is null, find all extensions * else if criteria is empty return nothing. - * + * * @param <E> object type * @param clazz entity class * @param criteria criteria @@ -517,82 +518,220 @@ public <E extends BusinessEntity> PagedResult<E> findAllByCriteria( Class<E> clazz, Criteria criteria) { long start = TimeLog.getTime(); + Criteria[] criterias; + if (criteria == null) { + criterias = new Criteria[1]; + } else { + criterias = new Criteria[]{criteria}; + } + PagedResult<E> result = multiFindAllByCriteria(clazz, criterias)[0]; + timeLog.log(start, "findAllByCriteria<Business>"); + return result; + } - // newInstance only return BusinessEntityWikittyImpl - BusinessEntityImpl sample = - (BusinessEntityImpl)WikittyUtil.newInstance(clazz); + /** + * Search object that correspond to criteria and that have all extension + * needed by BusinessEntity (clazz). If one criteria is null, find all extensions + * for this criteria else if criteria is empty return nothing. + * + * @param <E> object type + * @param clazz entity class + * @param criteria criteria + * @return paged result + */ + public <E extends BusinessEntity> PagedResult<E>[] multiFindAllByCriteria( + Class<E> clazz, Criteria ... criterias) { + long start = TimeLog.getTime(); + PagedResult<E>[] result = null; + if (criterias != null) { + // newInstance only return BusinessEntityWikittyImpl + BusinessEntityImpl sample = + (BusinessEntityImpl) WikittyUtil.newInstance(clazz); - Wikitty wikitty = sample.getWikitty(); - Collection<String> extensions = wikitty.getExtensionNames(); + Wikitty wikitty = sample.getWikitty(); + Collection<String> extensions = wikitty.getExtensionNames(); - Criteria serviceCriteria; - if(criteria == null) { - Search search = Search.query(); - search = search.eq(Element.ELT_EXTENSION, extensions); + Criteria[] serviceCriterias = new Criteria[criterias.length]; + for (int i = 0; i < serviceCriterias.length; i++) { + Criteria criteria = criterias[i]; + Search search = Search.query(criteria); + search = search.exteq(extensions); + Criteria serviceCriteria = search.criteria(); + serviceCriterias[i] = serviceCriteria; - serviceCriteria = search.criteria(); - } else { - Search search = Search.query(criteria); - search = search.eq(Element.ELT_EXTENSION, extensions); + if (criteria != null) { + serviceCriteria.setName(criteria.getName()); + serviceCriteria.setFirstIndex(criteria.getFirstIndex()); + serviceCriteria.setEndIndex(criteria.getEndIndex()); - serviceCriteria = search.criteria(criteria.getName()); - serviceCriteria.setFirstIndex(criteria.getFirstIndex()); - serviceCriteria.setEndIndex(criteria.getEndIndex()); + List<String> facetField = criteria.getFacetField(); + if (facetField != null) { + String[] facetFieldTab = new String[facetField.size()]; + serviceCriteria.setFacetField(facetField.toArray(facetFieldTab)); + } - 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<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> 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)); + } + } } + PagedResult<String>[] pagedResult = wikittyService.findAllByCriteria( + securityToken, serviceCriterias); - List<String> sortDescending = criteria.getSortDescending(); - if(sortDescending != null) { - String[] sortDescendingTab = new String[sortDescending.size()]; - serviceCriteria.setSortDescending(sortDescending.toArray(sortDescendingTab)); + // TODO poussin 20110318 optimize cast. Try to cast all pagedResult id + // in one call to service. Currently each PagedResult.cast do a call + result = new PagedResult[pagedResult.length]; + for (int i = 0; i < result.length; i++) { + // we can cast with autoconvert true because we have add restriction + // on extension + result[i] = (PagedResult<E>) pagedResult[i].cast( + this, sample.getClass(), true); } } - - PagedResult<String> pagedResult = wikittyService.findAllByCriteria( - securityToken, serviceCriteria); - - // we can cast with autoconvert true because we have add restriction - // on extension - PagedResult<E> result = (PagedResult<E>)pagedResult.cast( - this, sample.getClass(), true); - - timeLog.log(start, "findAllByCriteria<Business>"); + timeLog.log(start, "multiFindAllByCriteria<Business>"); return result; } public PagedResult<Wikitty> findAllByCriteria(Criteria criteria) { long start = TimeLog.getTime(); - PagedResult<String> resultId = wikittyService.findAllByCriteria(securityToken, criteria); - PagedResult<Wikitty> result = resultId.cast(securityToken, wikittyService); - + PagedResult<Wikitty> result = null; + if (criteria != null) { + result = multiFindAllByCriteria(criteria)[0]; + } timeLog.log(start, "findAllByCriteria"); return result; } + public PagedResult<Wikitty>[] multiFindAllByCriteria(Criteria ... criteria) { + long start = TimeLog.getTime(); + PagedResult<Wikitty>[] result = null; + if (criteria != null) { + PagedResult<String>[] resultId = + wikittyService.findAllByCriteria(securityToken, criteria); + + // TODO poussin 20110318 optimize cast. Try to cast all pagedResult id + // in one call to service. Currently each PagedResult.cast do a call + result = new PagedResult[resultId.length]; + for (int i = 0; i < resultId.length; i++) { + result[i] = resultId[i].cast(securityToken, wikittyService); + } + } + timeLog.log(start, "multiFindAllByCriteria"); + return result; + } + public PagedResult<String> findAllIdByCriteria(Criteria criteria) { long start = TimeLog.getTime(); - PagedResult<String> result = wikittyService.findAllByCriteria(securityToken, criteria); + PagedResult<String> result = null; + if (criteria != null) { + result = multiFindAllIdByCriteria(criteria)[0]; + } + timeLog.log(start, "findAllIdByCriteria"); + return result; + } - timeLog.log(start, "findAllByCriteria"); + public PagedResult<String>[] multiFindAllIdByCriteria(Criteria ... criteria) { + long start = TimeLog.getTime(); + PagedResult<String>[] result = null; + if (criteria != null) { + result = wikittyService.findAllByCriteria(securityToken, criteria); + } + timeLog.log(start, "multiFindAllIdByCriteria"); return result; } + public String findIdByCriteria(Criteria criteria) { + long start = TimeLog.getTime(); + String result = null; + if (criteria != null) { + result = multiFindIdByCriteria(criteria)[0]; + } + timeLog.log(start, "findIdByCriteria"); + return result; + } + + public String[] multiFindIdByCriteria(Criteria ... criteria) { + long start = TimeLog.getTime(); + String[] result = null; + if (criteria != null) { + result = wikittyService.findByCriteria(securityToken, criteria); + } + timeLog.log(start, "multiFindIdByCriteria"); + return result; + } + + public <E extends BusinessEntity> E findByCriteria( + Class<E> clazz, Criteria criteria) { + long start = TimeLog.getTime(); + E result = null; + if (criteria != null) { + result = multiFindByCriteria(clazz, criteria)[0]; + } + timeLog.log(start, "findByCriteria<Business>"); + return result; + } + + public <E extends BusinessEntity> E[] multiFindByCriteria( + Class<E> clazz, Criteria ... criterias) { + long start = TimeLog.getTime(); + E[] result = null; + if (criterias != null) { + BusinessEntityImpl sample = + (BusinessEntityImpl) WikittyUtil.newInstance(clazz); + + Wikitty wikitty = sample.getWikitty(); + Collection<String> extensions = wikitty.getExtensionNames(); + Criteria[] serviceCriterias = new Criteria[criterias.length]; + for (int i = 0; i < criterias.length; i++) { + Criteria criteria = criterias[i]; + Search search = Search.query(criteria); + search = search.exteq(extensions); + criteria = search.criteria(); + serviceCriterias[i] = criteria; + } + + String[] id = multiFindIdByCriteria(serviceCriterias); + List<E> objects = restore(clazz, Arrays.asList(id)); + result = objects.toArray((E[])Array.newInstance(clazz, objects.size())); + } + timeLog.log(start, "multiFindByCriteria<Business>"); + return result; + } + + public Wikitty findByCriteria(Criteria criteria) { + long start = TimeLog.getTime(); + String id = findIdByCriteria(criteria); + Wikitty wikitty = restore(id); + timeLog.log(start, "findByCriteria"); + return wikitty; + } + + public Wikitty[] multiFindByCriteria(Criteria ... criteria) { + long start = TimeLog.getTime(); + Wikitty[] result = null; + if (criteria != null) { + String[] id = multiFindIdByCriteria(criteria); + List<Wikitty> wikitty = restore(Arrays.asList(id)); + result = wikitty.toArray(new Wikitty[wikitty.size()]); + } + timeLog.log(start, "multiFindByCriteria"); + return result; + } + /** * Recupere une portion d'arbre a partir de l'id passer en parametre. L'id * doit etre celui d'un WikittyTreeNode. Ce WikittyTreeNode est alors le @@ -808,35 +947,6 @@ return result; } - public <E extends BusinessEntity> E findByCriteria(Class<E> clazz, Criteria criteria) { - long start = TimeLog.getTime(); - BusinessEntityImpl sample = - (BusinessEntityImpl)WikittyUtil.newInstance(clazz); - - Wikitty wikitty = sample.getWikitty(); - Collection<String> extensions = wikitty.getExtensionNames(); - Search search = Search.query(criteria); - search = search.eq(Element.ELT_EXTENSION, extensions); - - criteria = search.criteria(criteria.getName()); - - String id = wikittyService.findByCriteria(securityToken, criteria); - Wikitty w = wikittyService.restore(securityToken, id); - E result = WikittyUtil.newInstance( - securityToken, wikittyService, clazz, w); - - timeLog.log(start, "findByCriteria<Business>"); - return result; - } - - public Wikitty findByCriteria(Criteria criteria) { - long start = TimeLog.getTime(); - String id = wikittyService.findByCriteria(securityToken, criteria); - Wikitty wikitty = wikittyService.restore(securityToken, id); - timeLog.log(start, "findByCriteria"); - return wikitty; - } - /** * Delete specified tree node and all sub nodes. * Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-03-18 17:02:55 UTC (rev 753) @@ -292,24 +292,28 @@ public WikittyEvent delete(String securityToken, Collection<String> ids); /** - * + * Looking for Wikitty that match criteria. More than one criteria can be + * passed in parametre, for each criteria in parametre there is a PagedResult + * associated with the same index. + * * @param securityToken security token * @param criteria * @return */ - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria); + public PagedResult<String>[] findAllByCriteria( + String securityToken, Criteria ... criteria); /** * First lonely (or first one) wikitty object that match criteria, if no * wikitty found or first retrived is not authorized for the user return - * null + * null. for each criteria in parametre there is a result + * associated with the same index. * * @param securityToken security token * @param criteria * @return wikitty id object or null */ - public String findByCriteria(String securityToken, Criteria criteria); + public String[] findByCriteria(String securityToken, Criteria ... criteria); /* * Classification Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ExportTask.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ExportTask.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ExportTask.java 2011-03-18 17:02:55 UTC (rev 753) @@ -65,7 +65,7 @@ criteria.addFacetField(Element.ELT_EXTENSION); PagedResult<String> pageResultId = ws.findAllByCriteria( - securityToken, criteria); + securityToken, criteria)[0]; long time = 0; if (log.isInfoEnabled()) { time = System.currentTimeMillis(); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java 2011-03-18 17:02:55 UTC (rev 753) @@ -266,7 +266,7 @@ fValue = m.group(6); } Criteria criteria = Search.query().eq(fqField, fValue).criteria(); - String id = ws.findByCriteria(securityToken, criteria); + String id = ws.findByCriteria(securityToken, criteria)[0]; Wikitty wikitty = WikittyServiceEnhanced.restore( ws, securityToken, id); if (wikitty == null) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java 2011-03-18 17:02:55 UTC (rev 753) @@ -161,13 +161,13 @@ } @Override - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria) { + public PagedResult<String>[] findAllByCriteria( + String securityToken, Criteria ... criteria) { return delegate.findAllByCriteria(securityToken, criteria); } @Override - public String findByCriteria(String securityToken, Criteria criteria) { + public String[] findByCriteria(String securityToken, Criteria ... criteria) { return delegate.findByCriteria(securityToken, criteria); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2011-03-18 17:02:55 UTC (rev 753) @@ -93,7 +93,7 @@ @Override public String login(String login, String password) { String userId = getDelegate().findByCriteria(null, Search.query().eq( - WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).criteria()); + WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).criteria())[0]; if (userId == null) { throw new IllegalArgumentException(String.format( "no such account '%s'", login)); @@ -717,7 +717,7 @@ // 1er fois, on le recherche String groupId = getDelegate().findByCriteria(securityToken, Search.query().eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, - WikittySecurityHelper.WIKITTY_APPADMIN_GROUP_NAME).criteria()); + WikittySecurityHelper.WIKITTY_APPADMIN_GROUP_NAME).criteria())[0]; appAdminGroupId = groupId; group = WikittyServiceEnhanced.restore( getDelegate(), securityToken, appAdminGroupId); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2011-03-18 17:02:55 UTC (rev 753) @@ -366,7 +366,7 @@ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, name).criteria(); criteria.setEndIndex(0); // result is not use, just numFound PagedResult<String> wikittyWithExt = findAllByCriteria( - securityToken, criteria); + securityToken, criteria)[0]; int numFound = wikittyWithExt.getNumFound(); if (numFound > 0) { throw new WikittyException(String.format( @@ -662,7 +662,7 @@ Search.query().eq(WikittyTreeNode. FQ_FIELD_WIKITTYTREENODE_PARENT, id).criteria(); List<String> wikittyNodesId = findAllByCriteria( - securityToken, criteria).getAll(); + securityToken, criteria)[0].getAll(); for (String wikittyNodeId : wikittyNodesId) { if (!idSet.contains(wikittyNodeId)) { Wikitty treeNode = restore( @@ -676,7 +676,7 @@ criteria = Search.query().eq(WikittyTreeNode. FQ_FIELD_WIKITTYTREENODE_ATTACHMENT, id).criteria(); wikittyNodesId = findAllByCriteria( - securityToken, criteria).getAll(); + securityToken, criteria)[0].getAll(); for (String wikittyNodeId : wikittyNodesId) { if (!idSet.contains(wikittyNodeId)) { Wikitty treeNode = restore( @@ -758,8 +758,8 @@ * return new PagedResult with Wikitty instance */ @Override - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria) { + public PagedResult<String>[] findAllByCriteria( + String securityToken, Criteria ... criteria) { WikittyTransaction tx = WikittyTransaction.get(); boolean txBeginHere = false; try { @@ -768,8 +768,10 @@ txBeginHere = true; } - PagedResult<String> result = - getSearchEngine().findAllByCriteria(tx, criteria); + PagedResult<String>[] result = new PagedResult[criteria.length]; + for (int i = 0; i < result.length; i++) { + result[i] = getSearchEngine().findAllByCriteria(tx, criteria[i]); + } if (txBeginHere) { tx.commit(); } @@ -788,7 +790,7 @@ } @Override - public String findByCriteria(String securityToken, Criteria criteria) { + public String[] findByCriteria(String securityToken, Criteria ... criteria) { WikittyTransaction tx = WikittyTransaction.get(); boolean txBeginHere = false; try { @@ -797,17 +799,24 @@ txBeginHere = true; } - // TODO poussin 20101222 perhaps we must do a copy of criteria - // before modify it with index, to prevent bad side effect ? - criteria.setFirstIndex(0).setEndIndex(1); - PagedResult<String> pages = findAllByCriteria( - securityToken, criteria); + String[] result = new String[criteria.length]; + Criteria[] criteriaLimit = new Criteria[criteria.length]; + for (int i = 0; i < criteria.length; i++) { + criteriaLimit[i] = + Search.query(criteria[i]).criteria() + .setFirstIndex(0).setEndIndex(1); + } - String result = null; - if (pages.size() > 0) { - result = pages.getFirst(); + PagedResult<String>[] idsArray = + findAllByCriteria(securityToken, criteriaLimit); + + for (int i = 0; i < criteria.length; i++) { + PagedResult<String> ids = idsArray[i]; + if (ids.size() > 0) { + result[i] = ids.getFirst(); + } } - + if (txBeginHere) { tx.commit(); } @@ -868,7 +877,7 @@ search = search.eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, treeNodeId); Criteria criteria = search.criteria(); - PagedResult<String> childTreeNodeIds = findAllByCriteria(securityToken, criteria); + PagedResult<String> childTreeNodeIds = findAllByCriteria(securityToken, criteria)[0]; List<String> treeNodeIds = new ArrayList<String>(); treeNodeIds.add(treeNodeId); for (String childTreeNodeId : childTreeNodeIds.getAll()) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2011-03-18 17:02:55 UTC (rev 753) @@ -281,47 +281,60 @@ } @Override - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria) { - PagedResult<String> resultTx = tx.findAllByCriteria(securityToken, criteria); - PagedResult<String> resultWs = ws.findAllByCriteria(securityToken, criteria); + public PagedResult<String>[] findAllByCriteria( + String securityToken, Criteria ... criteria) { + PagedResult<String>[] resultTxArray = tx.findAllByCriteria(securityToken, criteria); + PagedResult<String>[] resultWsArray = ws.findAllByCriteria(securityToken, criteria); - // Il faut fusionner les deux resultats - // - ne pas avoir de doublon - // - ne pas retenir ceux supprimer dans la transaction - // - fusionner les facettes (comment faire ?) - // - respecter le range demander (comment faire, avec les suppressions possible ?) - LinkedHashSet<String> ids = - new LinkedHashSet<String>(resultTx.size() + resultWs.size()); - ids.addAll(resultTx.getAll()); - for (String id : resultWs.getAll()) { - if (!tx.exists(securityToken, id) || ! tx.isDeleted(securityToken, id)) { - ids.add(id); + PagedResult<String>[] result = new PagedResult[resultWsArray.length]; + for (int i=0; i<result.length; i++) { + PagedResult<String> resultTx = resultTxArray[i]; + PagedResult<String> resultWs = resultWsArray[i]; + // Il faut fusionner les deux resultats + // - ne pas avoir de doublon + // - ne pas retenir ceux supprimer dans la transaction + // - fusionner les facettes (comment faire ?) + // - respecter le range demander (comment faire, avec les suppressions possible ?) + LinkedHashSet<String> ids = + new LinkedHashSet<String>(resultTx.size() + resultWs.size()); + ids.addAll(resultTx.getAll()); + for (String id : resultWs.getAll()) { + if (!tx.exists(securityToken, id) || !tx.isDeleted(securityToken, id)) { + ids.add(id); + } } - } - int firstIndice = resultWs.getFirstIndice(); - // FIXME le resultat est faux, le nombre total n'est pas la somme des deux :( - int numFound = resultTx.getNumFound() + resultWs.getNumFound(); - String queryString = resultWs.getQueryString(); - // FIXME les facettes sont fausses :( - Map<String, List<FacetTopic>> facets = resultWs.getFacets(); - List<String> results = new ArrayList<String>(ids); + int firstIndice = resultWs.getFirstIndice(); + // FIXME le resultat est faux, le nombre total n'est pas la somme des deux :( + int numFound = resultTx.getNumFound() + resultWs.getNumFound(); + String queryString = resultWs.getQueryString(); + // FIXME les facettes sont fausses :( + Map<String, List<FacetTopic>> facets = resultWs.getFacets(); + List<String> results = new ArrayList<String>(ids); - PagedResult<String> result = new PagedResult<String>( - firstIndice, numFound, queryString, facets, results); + result[i] = new PagedResult<String>( + firstIndice, numFound, queryString, facets, results); + } return result; } @Override - public String findByCriteria(String securityToken, Criteria criteria) { - String result = null; - Criteria criteriaLimit = - Search.query(criteria).criteria().setFirstIndex(0).setEndIndex(1); - PagedResult<String> ids = findAllByCriteria(securityToken, criteriaLimit); - if (ids.size() > 0) { - result = ids.getFirst(); + public String[] findByCriteria(String securityToken, Criteria ... criteria) { + String[] result = new String[criteria.length]; + Criteria[] criteriaLimit = new Criteria[criteria.length]; + for (int i=0; i<criteria.length; i++) { + criteriaLimit[i] = + Search.query(criteria[i]).criteria().setFirstIndex(0).setEndIndex(1); } + + PagedResult<String>[] idsArray = findAllByCriteria(securityToken, criteriaLimit); + + for (int i=0; i<criteria.length; i++) { + PagedResult<String> ids = idsArray[i]; + if (ids.size() > 0) { + result[i] = ids.getFirst(); + } + } return result; } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/addons/importexport/ImportExportCSVTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/addons/importexport/ImportExportCSVTest.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/addons/importexport/ImportExportCSVTest.java 2011-03-18 17:02:55 UTC (rev 753) @@ -197,12 +197,12 @@ // test extension support Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, extensionTag.getName()).criteria(); - PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria); + PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0]; Assert.assertEquals(1, pagedResult.getNumFound()); // test normal import Criteria criteria2 = Search.query().eq(extensionClient.getName() + ".name", "Toto").criteria(); - PagedResult<String> pagedResult2 = ws.findAllByCriteria(null, criteria2); + PagedResult<String> pagedResult2 = ws.findAllByCriteria(null, criteria2)[0]; Assert.assertEquals(1, pagedResult2.getNumFound()); // import attachment id that not exist, must be not imported Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-03-18 17:02:55 UTC (rev 753) @@ -162,7 +162,7 @@ .eq("Test.name_s", "chaise") .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(1, list.size()); @@ -180,7 +180,7 @@ .contains("Product.price", "20") .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(3, list.size()); } @@ -189,7 +189,7 @@ .contains("Product.price", "20", "30", "35") .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(0, list.size()); } @@ -202,7 +202,7 @@ .in("Product.price", "20") .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(3, list.size()); } @@ -211,7 +211,7 @@ .in("Product.price", "20", "30", "35") .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(4, list.size()); } @@ -220,7 +220,7 @@ .in("Product.price", "25", "30", "40") .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(0, list.size()); } @@ -233,7 +233,7 @@ .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(4, list.size()); @@ -243,7 +243,7 @@ .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; list = result.getAll(); assertEquals(3, list.size()); } @@ -258,7 +258,7 @@ .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals( 2, list.size() ); } @@ -266,12 +266,12 @@ @Test public void testKeywordSearch() throws Exception { Criteria criteria = Search.query().keyword("bureau").criteria(); - PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria); + PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0]; List<String> result = pagedResult.getAll(); assertEquals(1, result.size()); criteria = Search.query().keyword("nothing").criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; result = pagedResult.getAll(); assertEquals(0, result.size()); @@ -280,7 +280,7 @@ // donc remplacement de la chaine *33* par *ai* // *ai* matches 'paint' et 'chaise' criteria = Search.query().keyword("*ai*").criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; result = pagedResult.getAll(); assertEquals(6, result.size()); @@ -288,7 +288,7 @@ .keyword("*33*") .eq("Test.name", "bureau") .criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; result = pagedResult.getAll(); assertEquals(1, result.size()); } @@ -298,7 +298,7 @@ Criteria criteria = Search.query().keyword("*").criteria(); criteria.addFacetField(Element.ELT_EXTENSION); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; assertEquals(13, result.getAll().size()); List<FacetTopic> topics = result.getTopic(Element.ELT_EXTENSION); @@ -322,14 +322,14 @@ .eq("Test.enabled", "true") .criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; assertEquals(1, result.getNumFound()); criteria = Search.query() .eq("Test.enabled", "false") .criteria(); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; assertEquals(2, result.getNumFound()); } @@ -339,14 +339,14 @@ query.not().eq("Test.name", "bureau"); Criteria criteria = query.criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; assertEquals(12, result.getNumFound()); query = Search.query().eq("Test.amount", "003300"); query.not().eq("Test.name", "bureau"); criteria = query.criteria(); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; assertEquals(1, result.getNumFound()); } @@ -358,7 +358,7 @@ .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(1, list.size()); @@ -372,7 +372,7 @@ .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; list = result.getAll(); assertEquals(12, list.size()); } @@ -384,7 +384,7 @@ example.setField("Product", "price", 20); Criteria criteria = Search.query(example).criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; assertEquals(3, result.getNumFound()); } @@ -394,7 +394,7 @@ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, "Product").criteria(); criteria.addFacetField("Product.value"); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<FacetTopic> topics = result.getTopic("Product.value"); for (FacetTopic topic : topics) { String topicName = topic.getTopicName(); @@ -412,7 +412,7 @@ Criteria facet2 = Search.query().eq("Product.value", "2").criteria("2"); criteria.addFacetCriteria(facet2); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; topics = result.getTopic("1"); FacetTopic topic = topics.get(0); @@ -439,24 +439,24 @@ criteria.setFirstIndex(0); criteria.setEndIndex(0); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; assertEquals(13, result.getNumFound()); ws.syncSearchEngine(null); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; assertTrue(13 <= result.getNumFound()); } @Test public void testNullSearch() { Criteria criteria = Search.query().isNotNull("Product.optional").eq(Element.ELT_EXTENSION, "Product").criteria(); - PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria); + PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0]; List<String> result = pagedResult.getAll(); assertEquals(2, result.size()); criteria = Search.query().isNull("Product.optional").eq(Element.ELT_EXTENSION, "Product").criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; result = pagedResult.getAll(); assertEquals(3, result.size()); } @@ -466,26 +466,26 @@ @Test public void testLikeSearch() throws Exception { Criteria criteria = Search.query().like("Category.name", "hArDwArE").criteria(); - PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria); + PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0]; List<String> result = pagedResult.getAll(); assertEquals(1, result.size()); criteria = Search.query().like("Category.name", "*wAr*").criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; result = pagedResult.getAll(); assertEquals(1, result.size()); criteria = Search.query().like("Category.name", "Har*").criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; result = pagedResult.getAll(); assertEquals(1, result.size()); criteria = Search.query().like("Test.description", "help").criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; assertEquals(1, pagedResult.getNumFound()); criteria = Search.query().like("Test.description", "helped").criteria(); - pagedResult = ws.findAllByCriteria(null, criteria); + pagedResult = ws.findAllByCriteria(null, criteria)[0]; assertEquals(1, pagedResult.getNumFound()); } @@ -499,7 +499,7 @@ .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(1, list.size()); @@ -511,7 +511,7 @@ .criteria() .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; list = result.getAll(); assertEquals(5, list.size()); } @@ -536,7 +536,7 @@ // If an exception is thrown, check that the pattern in WikittyUtil // is compatible with solr, in particular that the trailing Z // is present and respect http://wiki.apache.org/solr/IndexingDates - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); @@ -548,14 +548,14 @@ Criteria criteria = Search.query() .bw("Test.buildDate_dt", AbstractTestConformance.format("26/09/2009"), Criteria.ALL_VALUES) .criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; List<String> list = result.getAll(); assertEquals(2, list.size()); criteria = Search.query() .ge("Test.buildDate_dt", AbstractTestConformance.format("26/09/2009")) .criteria(); - result = ws.findAllByCriteria(null, criteria); + result = ws.findAllByCriteria(null, criteria)[0]; list = result.getAll(); assertEquals(2, list.size()); } @@ -573,20 +573,20 @@ { // sans accent Criteria criteria = Search.query().keyword("coucou").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; Assert.assertEquals(1, result.size()); } { // avec accent Criteria criteria = Search.query().keyword("çéçà").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; Assert.assertEquals(1, result.size()); } { // avec accent specifiquement sur le champs name Criteria criteria = Search.query().eq( WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME,"çéçà").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; Assert.assertEquals(1, result.size()); } { @@ -595,7 +595,7 @@ WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME + WikittySolrConstant.SUFFIX_STRING + WikittySolrConstant.SUFFIX_STRING_FULLTEXT, "ceca").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; Assert.assertEquals(1, result.size()); } { @@ -606,7 +606,7 @@ WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME + WikittySolrConstant.SUFFIX_STRING + WikittySolrConstant.SUFFIX_STRING_FULLTEXT, "CECA").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; Assert.assertEquals(1, result.size()); } { @@ -615,7 +615,7 @@ // et et majuscule Criteria criteria = Search.query().like( WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "CECA").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, criteria); + PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0]; Assert.assertEquals(1, result.size()); } } Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java 2011-03-18 15:14:04 UTC (rev 752) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java 2011-03-18 17:02:55 UTC (rev 753) @@ -90,13 +90,13 @@ { Criteria c = Search.query().keyword("lab*").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, c); + PagedResult<String> result = ws.findAllByCriteria(null, c)[0]; System.out.println(result.getAll()); Assert.assertEquals(2, result.getNumFound()); } { Criteria c = Search.query().keyword("*a*").criteria(); - PagedResult<String> result = ws.findAllByCriteria(null, c); + PagedResult<String> result = ws.findAllByCriteria(null, c)[0]; System.out.println(result.getAll()); Assert.assertEquals(3, result.getNumFound()); } @@ -297,7 +297,7 @@ // look for it Search query = Search.query(); query.eq(Element.ELT_ID, "wikkitytodelete"); - Assert.assertEquals(1, ws.findAllByCriteria(null, query.criteria()).getNumFound()); + Assert.assertEquals(1, ws.findAllByCriteria(null, query.criteria())[0].getNumFound()); Assert.assertEquals(1, proxy.findAllByCriteria(query.criteria()).getNumFound()); // delete it @@ -305,7 +305,7 @@ // try to look for it after deletion Assert.assertEquals(0, proxy.findAllByCriteria(query.criteria()).getNumFound()); - Assert.assertEquals(0, ws.findAllByCriteria(null, query.criteria()).getNumFound()); + Assert.assertEquals(0, ws.findAllByCriteria(null, query.criteria())[0].getNumFound()); } // Nombre of iteration for test delete @@ -336,7 +336,7 @@ // look for it Search query = Search.query(); query.eq(Element.ELT_EXTENSION, WikittyLabel.EXT_WIKITTYLABEL); - Assert.assertEquals(NB_DOCS_TO_DELETE, ws.findAllByCriteria(null, query.criteria()).getNumFound()); + Assert.assertEquals(NB_DOCS_TO_DELETE, ws.findAllByCriteria(null, query.criteria())[0].getNumFound()); Assert.assertEquals(NB_DOCS_TO_DELETE, proxy.findAllByCriteria(query.criteria()).getNumFound()); Assert.assertEquals(NB_DOCS_TO_DELETE, proxy.findAllByCriteria(WikittyLabel.class, query.criteria()).getNumFound()); @@ -345,7 +345,7 @@ // try to look for it after deletion Assert.assertEquals(0, proxy.findAllByCriteria(query.criteria()).getNumFound()); - Assert.assertEquals(0, ws.findAllByCriteria(null, query.criteria()).getNumFound()); + Assert.assertEquals(0, ws.findAllByCriteria(null, query.criteria())[0].getNumFound()); Assert.assertEquals(0, proxy.findAllByCriteria(WikittyLabel.class, query.criteria()).size()); } }
participants (1)
-
bpoussin@users.nuiton.org