Author: sletellier Date: 2011-10-27 11:27:06 +0200 (Thu, 27 Oct 2011) New Revision: 1243 Url: http://nuiton.org/repositories/revision/wikitty/1243 Log: - Revert task : #1785 Add select method to allow specify wikittyId return field - Use criteria to implement select - Fill documentation with performance warning using select - Clean tests Modified: trunk/src/site/rst/user/search.rst 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/search/Criteria.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/SearchCriteriaTest.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java Modified: trunk/src/site/rst/user/search.rst =================================================================== --- trunk/src/site/rst/user/search.rst 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/src/site/rst/user/search.rst 2011-10-27 09:27:06 UTC (rev 1243) @@ -148,6 +148,7 @@ * Restrictions : restriction - Liste des restrictions du criteria. * Selection : select - Ajout d'un select pour définir le champs des Ids à retourner. + Note:: Peut entrainer des problèmes de performances si beaucoups de résultats sont retournés. * Premier index : firstIndex - Permet de définir le premier index à retourner. Principalement utilisé pour la pagination. Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -28,6 +28,8 @@ import java.io.Serializable; import java.lang.reflect.Array; import java.util.AbstractMap.SimpleEntry; + +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; @@ -585,46 +587,43 @@ BusinessEntityImpl sample = (BusinessEntityImpl) WikittyUtil.newInstance(clazz); -// Commented for task : #1785 Add select method to allow specify wikittyId return field -// No restriction is added on criteria, now, type verification is make on restore -// -// Check will be done in restore -// -// Wikitty wikitty = sample.getWikitty(); -// Collection<String> extensions = wikitty.getExtensionNames(); + Wikitty wikitty = sample.getWikitty(); + Collection<String> extensions = wikitty.getExtensionNames(); -// List<Criteria> serviceCriterias = new ArrayList<Criteria>(criterias.size()); -// for (Criteria criteria : criterias) { -// // 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 ... -// Criteria serviceCriteria = null; -// if (criteria != null) { -// // creation de la nouvelle contrainte -// Search search = Search.query(criteria); -// search = search.exteq(extensions); -// -// // 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<Criteria> serviceCriterias = new ArrayList<Criteria>(criterias.size()); + for (Criteria criteria : criterias) { + // 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 ... + Criteria serviceCriteria = null; + if (criteria != null) { + serviceCriteria = criteria.clone(); + + // Dont add contraint if using select + if (StringUtils.isEmpty(criteria.getSelect())) { + + // utilisation de cette nouvelle contrainte sur le nouvel objet + // creation de la nouvelle contrainte + Search search = Search.query(criteria); + search = search.exteq(extensions); + + serviceCriteria.setRestriction(search); + } + } + + // ajout de ce criteria dans la liste de tous les criteres + serviceCriterias.add(serviceCriteria); + } + List<PagedResult<String>> pagedResult = wikittyService.findAllByCriteria( - securityToken, criterias); + securityToken, serviceCriterias); // 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 ArrayList<PagedResult<E>>(pagedResult.size()); for (PagedResult<String> p : pagedResult) { - -// #1785 Add select method to allow specify wikittyId return field -// autoconvert is set to false to keep only entities in good type - result.add((PagedResult<E>)p.cast(this, sample.getClass(), false)); + result.add((PagedResult<E>)p.cast(this, sample.getClass(), true)); } } timeLog.log(start, "findAllByCriteria<Business>(List)"); @@ -843,7 +842,10 @@ long start = TimeLog.getTime(); E result = null; if (criteria != null) { - result = findByCriteria(clazz, Collections.singletonList(criteria)).get(0); + List<E> criterias = findByCriteria(clazz, Collections.singletonList(criteria)); + if (!criterias.isEmpty()) { + result = criterias.get(0); + } } timeLog.log(start, "findByCriteria<Business>(One)"); return result; Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -320,32 +320,6 @@ */ public List<String> findByCriteria(String securityToken, List<Criteria> criteria); -// /** -// * 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 fqFieldName field name for result -// * @param criteria -// * @return -// */ -// public List<PagedResult<String>> findAllByCriteria( -// String securityToken, String fqFieldName, List<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. for each criteria in parametre there is a result -// * associated with the same index. -// * -// * @param securityToken security token -// * @param fqFieldName field name for result -// * @param criteria -// * @return wikitty field name value object or null -// */ -// public List<String> findByCriteria(String securityToken, String fqFieldName, List<Criteria> criteria); - /* * Classification * Most of classification purpose is handle by extension mechanisms 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-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Criteria.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -75,6 +75,10 @@ */ protected String name; + /** + * Use to return select ids + * Be carefull, can be long if many result is found + */ protected String select; /** All restriction on fields. */ Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -54,8 +54,6 @@ import java.util.List; import java.util.Set; -import static org.junit.Assert.assertEquals; - /** * User: couteau * Date: 05/04/11 @@ -219,7 +217,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(eqCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -236,7 +234,7 @@ PagedResult<Wikitty> results2 = proxy.findAllByCriteria(eqCriteria2); - Assert.assertEquals(1, results2.getAll().size()); + assertPagedResultSizeEquals(1, results2); Wikitty resultW2 = results.getFirst(); @@ -252,7 +250,7 @@ PagedResult<Wikitty> results3 = proxy.findAllByCriteria(eqCriteria3); - Assert.assertEquals(1, results3.getAll().size()); + assertPagedResultSizeEquals(1, results3); Wikitty resultW3 = results.getFirst(); @@ -271,7 +269,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, eqCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -286,7 +284,7 @@ PagedResult<ProductEntity> results2 = proxy.findAllByCriteria(ProductEntity.class, eqCriteria2); - Assert.assertEquals(1, results2.getAll().size()); + assertPagedResultSizeEquals(1, results2); ProductEntity resultW2 = results.getFirst(); @@ -300,7 +298,7 @@ PagedResult<ProductEntity> results3 = proxy.findAllByCriteria(ProductEntity.class, eqCriteria3); - Assert.assertEquals(1, results3.getAll().size()); + assertPagedResultSizeEquals(1, results3); ProductEntity resultW3 = results.getFirst(); @@ -316,7 +314,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(neqCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -328,7 +326,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, neqCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -341,7 +339,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -360,7 +358,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -377,7 +375,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -397,7 +395,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -415,7 +413,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -427,7 +425,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, bwCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -439,7 +437,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -459,7 +457,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -477,7 +475,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -490,7 +488,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, bwCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -503,7 +501,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(inCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -525,7 +523,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, inCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -545,7 +543,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(inCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -564,7 +562,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, inCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -580,7 +578,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(exteqCriteria); - Assert.assertEquals(3, results.getAll().size()); + assertPagedResultSizeEquals(3, results); } @Test @@ -591,7 +589,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, exteqCriteria); - Assert.assertEquals(3, results.getAll().size()); + assertPagedResultSizeEquals(3, results); } @Test @@ -602,7 +600,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(extneqCriteria); - Assert.assertEquals(7, results.getAll().size()); + assertPagedResultSizeEquals(7, results); } @@ -614,7 +612,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(ideqCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -633,7 +631,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, ideqCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -651,7 +649,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(idneqCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -663,7 +661,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, idneqCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -678,7 +676,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(likeCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -693,7 +691,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, likeCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -708,7 +706,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(likeCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); } @Test @@ -723,7 +721,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, likeCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); } @Test @@ -734,7 +732,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(swCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -753,7 +751,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, swCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -771,7 +769,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(nswCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -783,7 +781,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, nswCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @Test @@ -795,7 +793,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(ewCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -815,7 +813,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, ewCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -833,7 +831,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(notewCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -846,7 +844,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, notewCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -859,7 +857,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(keywordCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -872,7 +870,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, keywordCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -885,7 +883,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(isNull); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } @@ -898,7 +896,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, isNull); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } @@ -911,7 +909,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(isNotNull); - Assert.assertEquals(3, results.getAll().size()); + assertPagedResultSizeEquals(3, results); } @@ -924,7 +922,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, isNotNull); - Assert.assertEquals(3, results.getAll().size()); + assertPagedResultSizeEquals(3, results); } @@ -937,7 +935,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(rFalse); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } @@ -950,7 +948,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, rFalse); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } @@ -963,7 +961,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(rTrue); - Assert.assertEquals(3, results.getAll().size()); + assertPagedResultSizeEquals(3, results); } @@ -976,7 +974,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, rTrue); - Assert.assertEquals(3, results.getAll().size()); + assertPagedResultSizeEquals(3, results); } @@ -990,7 +988,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(andCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -1004,7 +1002,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, andCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -1019,7 +1017,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -1034,7 +1032,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, bwCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); } @@ -1049,7 +1047,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); } @Test @@ -1063,7 +1061,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, bwCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); } @Test @@ -1083,7 +1081,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(associatedCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); Wikitty resultW = results.getFirst(); @@ -1099,7 +1097,7 @@ results = proxy.findAllByCriteria(associatedCriteria); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } @Test @@ -1119,7 +1117,7 @@ PagedResult<ProductEntity> results = proxy.findAllByCriteria(ProductEntity.class, associatedCriteria); - Assert.assertEquals(1, results.getAll().size()); + assertPagedResultSizeEquals(1, results); ProductEntity resultW = results.getFirst(); @@ -1135,7 +1133,7 @@ results = proxy.findAllByCriteria(ProductEntity.class, associatedCriteria); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } @Test @@ -1154,7 +1152,7 @@ PagedResult<Wikitty> results = proxy.findAllByCriteria(selectCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); //Test with an associated search that returns nothing query = Search.query().bw("Product.price", "15", "25") @@ -1166,7 +1164,7 @@ results = proxy.findAllByCriteria(selectCriteria); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } @Test @@ -1185,7 +1183,7 @@ PagedResult<CategoryEntity> results = proxy.findAllByCriteria(CategoryEntity.class, selectCriteria); - Assert.assertEquals(2, results.getAll().size()); + assertPagedResultSizeEquals(2, results); //Test with an associated search that returns nothing query = Search.query().bw(ProductEntity.FQ_FIELD_PRODUCTENTITY_PRICE, "15", "25") @@ -1197,7 +1195,7 @@ results = proxy.findAllByCriteria(CategoryEntity.class, selectCriteria); - Assert.assertEquals(0, results.getAll().size()); + assertPagedResultSizeEquals(0, results); } /** @@ -1213,22 +1211,22 @@ { Criteria criteria = Search.query().eq("Category.name", "HardWare").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().eq("*.name", "HardWare").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(2, pagedResult.size()); + assertPagedResultSizeEquals(2, pagedResult); } { Criteria criteria = Search.query().eq("Category.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "HardWare").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "HardWare").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(2, pagedResult.size()); + assertPagedResultSizeEquals(2, pagedResult); } } @@ -1245,22 +1243,22 @@ { Criteria criteria = Search.query().eq(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME, "HardWare").criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().eq("*.name", "HardWare").criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().eq(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "HardWare").criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "HardWare").criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } } @@ -1277,22 +1275,22 @@ { Criteria criteria = Search.query().contains("Product.colors", "Red").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().contains("*.colors", "Red").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(2, pagedResult.size()); + assertPagedResultSizeEquals(2, pagedResult); } { Criteria criteria = Search.query().contains("Product.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().contains("*.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(2, pagedResult.size()); + assertPagedResultSizeEquals(2, pagedResult); } } @@ -1309,22 +1307,22 @@ { Criteria criteria = Search.query().contains(ProductEntity.FQ_FIELD_PRODUCTENTITY_COLORS, "Red").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().contains("*.colors", "Red").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().contains(ProductEntity.FQ_FIELD_PRODUCTENTITY_COLORS + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().contains("*.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } } @@ -1341,22 +1339,22 @@ { Criteria criteria = Search.query().like("Product.name", "*Blue").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like("*.name", "*Blue").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(2, pagedResult.size()); + assertPagedResultSizeEquals(2, pagedResult); } { Criteria criteria = Search.query().like("Product.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(2, pagedResult.size()); + assertPagedResultSizeEquals(2, pagedResult); } } @@ -1373,22 +1371,22 @@ { Criteria criteria = Search.query().like(ProductEntity.FQ_FIELD_PRODUCTENTITY_NAME, "*Blue").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like("*.name", "*Blue").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like(ProductEntity.FQ_FIELD_PRODUCTENTITY_NAME + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria(); PagedResult<ProductEntity> pagedResult = proxy.findAllByCriteria(ProductEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } } @@ -1399,32 +1397,32 @@ { Criteria criteria = Search.query().eq("Category.name", "HardWare").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().eq("Category.name", "hardware").criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(0, pagedResult.size()); + assertPagedResultSizeEquals(0, pagedResult); } { Criteria criteria = Search.query().like("Category.name", "HardWare", Like.SearchAs.ToLowerCase).criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like("Category.name", "hardware", Like.SearchAs.ToLowerCase).criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like("Category.name", "HardWare", Like.SearchAs.AsText).criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like("Category.name", "hardware", Like.SearchAs.AsText).criteria(); PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } } @@ -1435,32 +1433,32 @@ { Criteria criteria = Search.query().eq(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME, "HardWare").criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().eq(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME, "hardware").criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(0, pagedResult.size()); + assertPagedResultSizeEquals(0, pagedResult); } { Criteria criteria = Search.query().like(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME, "HardWare", Like.SearchAs.ToLowerCase).criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME, "hardware", Like.SearchAs.ToLowerCase).criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME, "HardWare", Like.SearchAs.AsText).criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } { Criteria criteria = Search.query().like(CategoryEntity.FQ_FIELD_CATEGORYENTITY_NAME, "hardware", Like.SearchAs.AsText).criteria(); PagedResult<CategoryEntity> pagedResult = proxy.findAllByCriteria(CategoryEntity.class, criteria); - assertEquals(1, pagedResult.size()); + assertPagedResultSizeEquals(1, pagedResult); } } @@ -1509,7 +1507,7 @@ for (Wikitty w : result) { resulted.add(w.getFieldAsInt(sortableExtName, numFieldName)); } - assertEquals(expected, resulted); + Assert.assertEquals(expected, resulted); } } @@ -1518,6 +1516,13 @@ //TODO JC-07-04-2011 Write test } + // Dont use this method if criteria use pagination + protected void assertPagedResultSizeEquals(int expected, PagedResult result) { + Assert.assertEquals(expected, result.getAll().size()); + Assert.assertEquals(expected, result.size()); + Assert.assertEquals(expected, result.getNumFound()); + } + //TODO JC-07-04-2011 Write test on sortBy, facets, and with other types (date,...) public abstract WikittyService getWikittyService(); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -24,6 +24,7 @@ */ package org.nuiton.wikitty.api; +import org.junit.Ignore; import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyService; Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/SearchCriteriaTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/SearchCriteriaTest.java 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/SearchCriteriaTest.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -163,7 +163,7 @@ /* * -============ private test utils operations ============- */ - protected final static Search q() { + protected static Search q() { return Search.query(); } Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -684,6 +684,20 @@ } } + // task : #1785 Add select method to allow specify wikittyId return field + // If select is not empty, add facet on field + String select = criteria.getSelect(); + boolean hasSelect = StringUtils.isNotEmpty(select); + if (hasSelect) { + + // Limit on wikitty + String selectWikitty = SolrUtil.getSolrFieldName(select, TYPE.WIKITTY); + criteria.addFacetField(selectWikitty); + + // We need no result, just facet + criteria.setEndIndex(0); + } + // Add faceting List<String> facetField = criteria.getFacetField(); List<Criteria> facetCriteria = criteria.getFacetCriteria(); @@ -750,26 +764,41 @@ } } - List<String> ids = new ArrayList<String>(solrResults.size()); - for (SolrDocument doc : solrResults) { + List<String> ids; + int numFound; + if (hasSelect) { - String id; -// #1785 Add select method to allow specify wikittyId return field -// Using specified select (if not null) to return id - String select = criteria.getSelect(); - if (StringUtils.isNotEmpty(select)) { - id = SolrUtil.getStringFieldValue(doc, select, TYPE.WIKITTY); - } else { - id = SolrUtil.getStringFieldValue(doc, SOLR_ID); + // Get select facet + List<FacetTopic> facetTopics = facets.get(select); + + // Remove this one + facets.remove(select); + + // Get total num founds + numFound = facetTopics.size(); + + // Extract ids + ids = new ArrayList<String>(facetTopics.size()); + for (FacetTopic topic : facetTopics) { + ids.add(topic.getTopicName()); } - if (id != null) { + } else { + + // Extract ids + ids = new ArrayList<String>(solrResults.size()); + for (SolrDocument doc : solrResults) { + + String id = SolrUtil.getStringFieldValue(doc, SOLR_ID); ids.add(id); } + + // Get total num found + numFound = (int)resp.getResults().getNumFound(); } - int numFound = (int)resp.getResults().getNumFound(); + // Build paged result PagedResult<String> result = new PagedResult<String>( - firstIndex, numFound, queryString, facets, ids); + firstIndex, numFound, queryString, facets, ids); return result; } catch (SolrServerException eee) { Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-10-25 08:41:30 UTC (rev 1242) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-10-27 09:27:06 UTC (rev 1243) @@ -27,6 +27,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_QUERY_PARSER; import java.util.ArrayList; import java.util.Calendar; @@ -35,6 +36,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.solr.client.solrj.SolrQuery; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; @@ -262,47 +264,17 @@ @Test public void testAssociativeSearch() throws Exception { - { - Criteria criteria = Search.query() - .bw("Product.price", "15", "25") - .sw("Product.name", "Paint") - .associated( "Product.category") - .eq("Category.name", "Hardware") - .criteria() - .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); + Criteria criteria = Search.query() + .bw("Product.price", "15", "25") + .sw("Product.name", "Paint") + .associated( "Product.category") + .eq("Category.name", "Hardware") + .criteria() + .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0); - List<String> list = result.getAll(); - assertEquals( 2, list.size() ); - } - { - Criteria criteria = Search.query() - .bw("Product.price", "15", "25") - .sw("Product.name", "Paint") - .criteria() - .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - - criteria.setSelect("Product.category"); - PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0); - List<String> list = result.getAll(); - - // Must return nothing - assertEquals( 3, list.size() ); - } - { - Criteria criteria = Search.query() - .bw("Product.price", "15", "25") - .sw("Product.name", "Paint") - .criteria() - .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); - - criteria.setSelect("Product.name"); - PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0); - List<String> list = result.getAll(); - - // Must return nothing - assertEquals( 0, list.size() ); - } + PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0); + List<String> list = result.getAll(); + assertEquals( 2, list.size() ); } @Test