Wikitty-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
April 2011
- 6 participants
- 99 discussions
Author: tchemit
Date: 2011-04-11 10:46:53 +0200 (Mon, 11 Apr 2011)
New Revision: 773
Url: http://nuiton.org/repositories/revision/wikitty/773
Log:
Update mavenpom4redmine to 2.5.3.
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-04-08 16:18:50 UTC (rev 772)
+++ trunk/pom.xml 2011-04-11 08:46:53 UTC (rev 773)
@@ -6,7 +6,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.5.2</version>
+ <version>2.5.3</version>
</parent>
<!-- ************************************************************* -->
1
0
08 Apr '11
Author: bpoussin
Date: 2011-04-08 18:18:50 +0200 (Fri, 08 Apr 2011)
New Revision: 772
Url: http://nuiton.org/repositories/revision/wikitty/772
Log:
Evolution #1394: add new find method with multiple criteria
uniformisation on a maintenant en parametre, List<Criteria>, Criteria ou Criteria[] pour toutes les methodes find du proxy et le service utilise seulement List
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/WikittyServiceHook.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-perf-test/src/main/java/org/nuiton/wikitty/perftest/PerfTestSearch.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -48,6 +48,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -505,29 +506,11 @@
return result;
}
- /**
- * 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
- * @return paged result
- */
- 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;
- }
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // FIND ALL BY CRITERIA <E>
+ //
+ ///////////////////////////////////////////////////////////////////////////
/**
* Search object that correspond to criteria and that have all extension
@@ -539,10 +522,10 @@
* @param criteria criteria
* @return paged result
*/
- public <E extends BusinessEntity> PagedResult<E>[] multiFindAllByCriteria(
- Class<E> clazz, Criteria ... criterias) {
+ public <E extends BusinessEntity> List<PagedResult<E>> findAllByCriteria(
+ Class<E> clazz, List<Criteria> criterias) {
long start = TimeLog.getTime();
- PagedResult<E>[] result = null;
+ List<PagedResult<E>> result = null;
if (criterias != null) {
// newInstance only return BusinessEntityWikittyImpl
BusinessEntityImpl sample =
@@ -551,14 +534,17 @@
Wikitty wikitty = sample.getWikitty();
Collection<String> extensions = wikitty.getExtensionNames();
- Criteria[] serviceCriterias = new Criteria[criterias.length];
- for (int i = 0; i < serviceCriterias.length; i++) {
- Criteria criteria = criterias[i];
+ 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 ...
Search search = Search.query(criteria);
search = search.exteq(extensions);
Criteria serviceCriteria = search.criteria();
- serviceCriterias[i] = serviceCriteria;
+ serviceCriterias.add(serviceCriteria);
+ // ... et si besoin recopier tout ce qui etait sur l'ancien
if (criteria != null) {
serviceCriteria.setName(criteria.getName());
serviceCriteria.setFirstIndex(criteria.getFirstIndex());
@@ -589,149 +575,299 @@
}
}
}
- PagedResult<String>[] pagedResult = wikittyService.findAllByCriteria(
+ List<PagedResult<String>> pagedResult = wikittyService.findAllByCriteria(
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 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);
+ result = new ArrayList<PagedResult<E>>(pagedResult.size());
+ for (PagedResult<String> p : pagedResult) {
+ result.add((PagedResult<E>)p.cast(this, sample.getClass(), true));
}
}
- timeLog.log(start, "multiFindAllByCriteria<Business>");
+ timeLog.log(start, "findAllByCriteria<Business>(List)");
return result;
}
- public PagedResult<Wikitty> findAllByCriteria(Criteria criteria) {
+ /**
+ * 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
+ * @return paged result
+ */
+ public <E extends BusinessEntity> PagedResult<E> findAllByCriteria(
+ Class<E> clazz, Criteria criteria) {
long start = TimeLog.getTime();
- PagedResult<Wikitty> result = null;
- if (criteria != null) {
- result = multiFindAllByCriteria(criteria)[0];
- }
- timeLog.log(start, "findAllByCriteria");
- return result;
+ PagedResult<E> result = findAllByCriteria(clazz,
+ Collections.singletonList(criteria)).get(0);
+ timeLog.log(start, "findAllByCriteria<Business>(One)");
+ return result;
}
- public PagedResult<Wikitty>[] multiFindAllByCriteria(Criteria ... criteria) {
+ /**
+ * 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
+ * @return paged result
+ */
+ public <E extends BusinessEntity> PagedResult<E>[] findAllByCriteria(
+ Class<E> clazz, Criteria c1, Criteria c2, Criteria... otherCriteria) {
long start = TimeLog.getTime();
- PagedResult<Wikitty>[] result = null;
+ List<Criteria> criterias = new ArrayList<Criteria>(otherCriteria.length + 2);
+ Collections.addAll(criterias, c1, c2);
+ Collections.addAll(criterias, otherCriteria);
+
+ List<PagedResult<E>> resultList = findAllByCriteria(clazz, criterias);
+ PagedResult<E>[] result = resultList.toArray(new PagedResult[criterias.size()]);
+ timeLog.log(start, "findAllByCriteria<Business>(Varargs)");
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // FIND ALL BY CRITERIA <Wikitty>
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ public List<PagedResult<Wikitty>> findAllByCriteria(List<Criteria> criteria) {
+ long start = TimeLog.getTime();
+ List<PagedResult<Wikitty>> result = null;
if (criteria != null) {
- PagedResult<String>[] resultId =
+ List<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);
+ result = new ArrayList<PagedResult<Wikitty>>(resultId.size());
+ for (PagedResult<String> p : resultId) {
+ result.add(p.cast(securityToken, wikittyService));
}
}
- timeLog.log(start, "multiFindAllByCriteria");
+ timeLog.log(start, "findAllByCriteria(List)");
return result;
}
- public PagedResult<String> findAllIdByCriteria(Criteria criteria) {
+ public PagedResult<Wikitty> findAllByCriteria(Criteria criteria) {
long start = TimeLog.getTime();
- PagedResult<String> result = null;
+ PagedResult<Wikitty> result = null;
if (criteria != null) {
- result = multiFindAllIdByCriteria(criteria)[0];
+ result = findAllByCriteria(Collections.singletonList(criteria)).get(0);
}
- timeLog.log(start, "findAllIdByCriteria");
+ timeLog.log(start, "findAllByCriteria(One)");
return result;
}
- public PagedResult<String>[] multiFindAllIdByCriteria(Criteria ... criteria) {
+ public PagedResult<Wikitty>[] findAllByCriteria(
+ Criteria c1, Criteria c2, Criteria ... otherCriteria) {
long start = TimeLog.getTime();
- PagedResult<String>[] result = null;
+
+ List<Criteria> criterias = new ArrayList<Criteria>(otherCriteria.length + 2);
+ Collections.addAll(criterias, c1, c2);
+ Collections.addAll(criterias, otherCriteria);
+
+ List<PagedResult<Wikitty>> resultList = findAllByCriteria(criterias);
+ PagedResult<Wikitty>[] result = resultList.toArray(new PagedResult[criterias.size()]);
+
+ timeLog.log(start, "findAllByCriteria(Varargs)");
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // FIND ALL ID BY CRITERIA <String>
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ public List<PagedResult<String>> findAllIdByCriteria(List<Criteria> criteria) {
+ long start = TimeLog.getTime();
+ List<PagedResult<String>> result = null;
if (criteria != null) {
result = wikittyService.findAllByCriteria(securityToken, criteria);
}
- timeLog.log(start, "multiFindAllIdByCriteria");
+ timeLog.log(start, "findAllIdByCriteria(List)");
return result;
}
- public String findIdByCriteria(Criteria criteria) {
+ public PagedResult<String> findAllIdByCriteria(Criteria criteria) {
long start = TimeLog.getTime();
- String result = null;
+ PagedResult<String> result = null;
if (criteria != null) {
- result = multiFindIdByCriteria(criteria)[0];
+ result = findAllIdByCriteria(
+ Collections.singletonList(criteria)).get(0);
}
- timeLog.log(start, "findIdByCriteria");
+ timeLog.log(start, "findAllIdByCriteria(One)");
return result;
}
- public String[] multiFindIdByCriteria(Criteria ... criteria) {
+ public PagedResult<String>[] findAllIdByCriteria(
+ Criteria c1, Criteria c2, Criteria ... otherCriteria) {
long start = TimeLog.getTime();
- String[] result = null;
+
+ List<Criteria> criterias = new ArrayList<Criteria>(otherCriteria.length + 2);
+ Collections.addAll(criterias, c1, c2);
+ Collections.addAll(criterias, otherCriteria);
+
+ List<PagedResult<String>> resultList = findAllIdByCriteria(criterias);
+ PagedResult<String>[] result = resultList.toArray(new PagedResult[criterias.size()]);
+
+ timeLog.log(start, "findAllIdByCriteria(Varargs)");
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // FIND ID BY CRITERIA <String>
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ public List<String> findIdByCriteria(List<Criteria> criteria) {
+ long start = TimeLog.getTime();
+ List<String> result = null;
if (criteria != null) {
result = wikittyService.findByCriteria(securityToken, criteria);
}
- timeLog.log(start, "multiFindIdByCriteria");
+ timeLog.log(start, "findIdByCriteria(List)");
return result;
}
- public <E extends BusinessEntity> E findByCriteria(
- Class<E> clazz, Criteria criteria) {
+ public String findIdByCriteria(Criteria criteria) {
long start = TimeLog.getTime();
- E result = null;
+ String result = null;
if (criteria != null) {
- result = multiFindByCriteria(clazz, criteria)[0];
+ result = findIdByCriteria(Collections.singletonList(criteria)).get(0);
}
- timeLog.log(start, "findByCriteria<Business>");
- return result;
+ timeLog.log(start, "findIdByCriteria(One)");
+ return result;
}
- public <E extends BusinessEntity> E[] multiFindByCriteria(
- Class<E> clazz, Criteria ... criterias) {
+ public String[] findIdByCriteria(
+ Criteria c1, Criteria c2, Criteria... otherCriteria) {
long start = TimeLog.getTime();
- E[] result = null;
+
+ List<Criteria> criterias = new ArrayList<Criteria>(otherCriteria.length + 2);
+ Collections.addAll(criterias, c1, c2);
+ Collections.addAll(criterias, otherCriteria);
+
+ List<String> resultList = findIdByCriteria(criterias);
+ String[] result = resultList.toArray(new String[criterias.size()]);
+
+ timeLog.log(start, "findIdByCriteria(Varargs)");
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // FIND BY CRITERIA <E>
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ public <E extends BusinessEntity> List<E> findByCriteria(
+ Class<E> clazz, List<Criteria> criterias) {
+ long start = TimeLog.getTime();
+ List<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];
+ List<Criteria> serviceCriterias = new ArrayList<Criteria>(criterias.size());
+ for (Criteria criteria : criterias) {
Search search = Search.query(criteria);
search = search.exteq(extensions);
criteria = search.criteria();
- serviceCriterias[i] = criteria;
+ serviceCriterias.add(criteria);
}
- String[] id = multiFindIdByCriteria(serviceCriterias);
- List<E> objects = restore(clazz, Arrays.asList(id));
- result = objects.toArray((E[])Array.newInstance(clazz, objects.size()));
+ List<String> id = findIdByCriteria(serviceCriterias);
+ result = restore(clazz, id);
}
- timeLog.log(start, "multiFindByCriteria<Business>");
+ timeLog.log(start, "multiFindByCriteria<Business>(List>");
return result;
}
+ public <E extends BusinessEntity> E findByCriteria(
+ Class<E> clazz, Criteria criteria) {
+ long start = TimeLog.getTime();
+ E result = null;
+ if (criteria != null) {
+ result = findByCriteria(clazz, Collections.singletonList(criteria)).get(0);
+ }
+ timeLog.log(start, "findByCriteria<Business>(One)");
+ return result;
+ }
+
+ public <E extends BusinessEntity> E[] findByCriteria(
+ Class<E> clazz, Criteria c1, Criteria c2, Criteria... otherCriteria) {
+ long start = TimeLog.getTime();
+
+ List<Criteria> criterias = new ArrayList<Criteria>(otherCriteria.length + 2);
+ Collections.addAll(criterias, c1, c2);
+ Collections.addAll(criterias, otherCriteria);
+
+ List<E> resultList = findByCriteria(clazz, criterias);
+ E[] result = resultList.toArray((E[])Array.newInstance(clazz, resultList.size()));
+
+ timeLog.log(start, "findByCriteria<Business>(One)");
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // FIND BY CRITERIA <Wikitty>
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ public List<Wikitty> findByCriteria(List<Criteria> criteria) {
+ long start = TimeLog.getTime();
+ List<Wikitty> result = null;
+ if (criteria != null) {
+ List<String> id = findIdByCriteria(criteria);
+ result = restore(id);
+ }
+ timeLog.log(start, "findByCriteria(List)");
+ return result;
+ }
+
public Wikitty findByCriteria(Criteria criteria) {
long start = TimeLog.getTime();
String id = findIdByCriteria(criteria);
Wikitty wikitty = restore(id);
- timeLog.log(start, "findByCriteria");
+ timeLog.log(start, "findByCriteria(One)");
return wikitty;
}
- public Wikitty[] multiFindByCriteria(Criteria ... criteria) {
+ public Wikitty[] findByCriteria(
+ Criteria c1, Criteria c2, Criteria... otherCriteria) {
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");
+
+ List<Criteria> criterias = new ArrayList<Criteria>(otherCriteria.length + 2);
+ Collections.addAll(criterias, c1, c2);
+ Collections.addAll(criterias, otherCriteria);
+
+ List<String> resultList = findIdByCriteria(criterias);
+ List<Wikitty> wikitties = restore(resultList);
+ Wikitty[] result = wikitties.toArray(new Wikitty[resultList.size()]);
+
+ timeLog.log(start, "findByCriteria(One)");
return result;
}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // FIND BY TREE NODE
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
/**
* 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
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -300,8 +300,8 @@
* @param criteria
* @return
*/
- public PagedResult<String>[] findAllByCriteria(
- String securityToken, Criteria ... criteria);
+ public List<PagedResult<String>> findAllByCriteria(
+ String securityToken, List<Criteria> criteria);
/**
* First lonely (or first one) wikitty object that match criteria, if no
@@ -313,7 +313,7 @@
* @param criteria
* @return wikitty id object or null
*/
- public String[] findByCriteria(String securityToken, Criteria ... criteria);
+ public List<String> findByCriteria(String securityToken, List<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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ExportTask.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -25,6 +25,7 @@
package org.nuiton.wikitty.addons.importexport;
import java.io.Writer;
+import java.util.Collections;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.wikitty.search.Criteria;
@@ -65,7 +66,7 @@
criteria.addFacetField(Element.ELT_EXTENSION);
PagedResult<String> pageResultId = ws.findAllByCriteria(
- securityToken, criteria)[0];
+ securityToken, Collections.singletonList(criteria)).get(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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -266,7 +266,8 @@
fValue = m.group(6);
}
Criteria criteria = Search.query().eq(fqField, fValue).criteria();
- String id = ws.findByCriteria(securityToken, criteria)[0];
+ String id = ws.findByCriteria(securityToken,
+ Collections.singletonList(criteria)).get(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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -161,13 +161,13 @@
}
@Override
- public PagedResult<String>[] findAllByCriteria(
- String securityToken, Criteria ... criteria) {
+ public List<PagedResult<String>> findAllByCriteria(
+ String securityToken, List<Criteria> criteria) {
return delegate.findAllByCriteria(securityToken, criteria);
}
@Override
- public String[] findByCriteria(String securityToken, Criteria ... criteria) {
+ public List<String> findByCriteria(String securityToken, List<Criteria> criteria) {
return delegate.findByCriteria(securityToken, criteria);
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceHook.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceHook.java 2011-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceHook.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -2,6 +2,7 @@
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -70,9 +71,10 @@
Criteria criteria = Search.query().exteq(WikittyHook.EXT_WIKITTYHOOK)
.and().eq(WikittyHook.FQ_FIELD_WIKITTYHOOK_ACTIONTOHOOK, actionName)
.criteria();
- PagedResult<String>[] ids = getDelegate().findAllByCriteria(securityToken, criteria);
+ PagedResult<String> ids = getDelegate().findAllByCriteria(securityToken,
+ Collections.singletonList(criteria)).get(0);
- List<Wikitty> result = getDelegate().restore(securityToken, ids[0].getAll());
+ List<Wikitty> result = getDelegate().restore(securityToken, ids.getAll());
return result;
}
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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -51,6 +51,7 @@
import org.nuiton.wikitty.entities.WikittyUser;
import org.nuiton.wikitty.entities.WikittyUserHelper;
import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.Search;
/**
@@ -92,8 +93,10 @@
@Override
public String login(String login, String password) {
- String userId = getDelegate().findByCriteria(null, Search.query().eq(
- WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).criteria())[0];
+ Criteria criteria = Search.query()
+ .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).criteria();
+ String userId = getDelegate().findByCriteria(null,
+ Collections.singletonList(criteria)).get(0);
if (userId == null) {
throw new IllegalArgumentException(String.format(
"no such account '%s'", login));
@@ -715,9 +718,11 @@
getDelegate(), securityToken, appAdminGroupId);
if (group == null) {
// 1er fois, on le recherche
- String groupId = getDelegate().findByCriteria(securityToken,
- Search.query().eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME,
- WikittySecurityHelper.WIKITTY_APPADMIN_GROUP_NAME).criteria())[0];
+ Criteria criteria = Search.query()
+ .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME,
+ WikittySecurityHelper.WIKITTY_APPADMIN_GROUP_NAME).criteria();
+ String groupId = getDelegate().findByCriteria(
+ securityToken, Collections.singletonList(criteria)).get(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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -30,6 +30,7 @@
import org.nuiton.wikitty.storage.WikittyStorage;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -366,7 +367,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)[0];
+ securityToken, Collections.singletonList(criteria)).get(0);
int numFound = wikittyWithExt.getNumFound();
if (numFound > 0) {
throw new WikittyException(String.format(
@@ -662,7 +663,8 @@
Search.query().eq(WikittyTreeNode.
FQ_FIELD_WIKITTYTREENODE_PARENT, id).criteria();
List<String> wikittyNodesId = findAllByCriteria(
- securityToken, criteria)[0].getAll();
+ securityToken, Collections.singletonList(criteria))
+ .get(0).getAll();
for (String wikittyNodeId : wikittyNodesId) {
if (!idSet.contains(wikittyNodeId)) {
Wikitty treeNode = restore(
@@ -676,7 +678,8 @@
criteria = Search.query().eq(WikittyTreeNode.
FQ_FIELD_WIKITTYTREENODE_ATTACHMENT, id).criteria();
wikittyNodesId = findAllByCriteria(
- securityToken, criteria)[0].getAll();
+ securityToken, Collections.singletonList(criteria))
+ .get(0).getAll();
for (String wikittyNodeId : wikittyNodesId) {
if (!idSet.contains(wikittyNodeId)) {
Wikitty treeNode = restore(
@@ -758,8 +761,8 @@
* return new PagedResult with Wikitty instance
*/
@Override
- public PagedResult<String>[] findAllByCriteria(
- String securityToken, Criteria ... criteria) {
+ public List<PagedResult<String>> findAllByCriteria(
+ String securityToken, List<Criteria> criteria) {
WikittyTransaction tx = WikittyTransaction.get();
boolean txBeginHere = false;
try {
@@ -768,13 +771,21 @@
txBeginHere = true;
}
- PagedResult<String>[] result = new PagedResult[criteria.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = getSearchEngine().findAllByCriteria(tx, criteria[i]);
+ List<PagedResult<String>> result =
+ new ArrayList<PagedResult<String>>(criteria.size());
+ for (Criteria c : criteria) {
+ PagedResult<String> searchResult =
+ getSearchEngine().findAllByCriteria(tx, c);
+ result.add(searchResult);
}
+
if (txBeginHere) {
tx.commit();
}
+ if (criteria.size() != result.size()) {
+ log.error(String.format("Criteria input list (%s) has not same size that result list (%s)",
+ criteria.size(), result.size()));
+ }
return result;
} catch (WikittyException ex) {
if (tx != null && tx.isStarted()) {
@@ -790,7 +801,7 @@
}
@Override
- public String[] findByCriteria(String securityToken, Criteria ... criteria) {
+ public List<String> findByCriteria(String securityToken, List<Criteria> criteria) {
WikittyTransaction tx = WikittyTransaction.get();
boolean txBeginHere = false;
try {
@@ -799,27 +810,32 @@
txBeginHere = true;
}
- 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()
+ List<String> result = new ArrayList<String>(criteria.size());
+ List<Criteria> criteriaLimit = new ArrayList<Criteria>(criteria.size());
+ for (Criteria c : criteria) {
+ Criteria cLimit = Search.query(c).criteria()
.setFirstIndex(0).setEndIndex(1);
+ criteriaLimit.add(cLimit);
}
- PagedResult<String>[] idsArray =
+ List<PagedResult<String>> idsList =
findAllByCriteria(securityToken, criteriaLimit);
- for (int i = 0; i < criteria.length; i++) {
- PagedResult<String> ids = idsArray[i];
+ for (PagedResult<String> ids : idsList) {
if (ids.size() > 0) {
- result[i] = ids.getFirst();
+ result.add(ids.getFirst());
+ } else {
+ result.add(null);
}
}
if (txBeginHere) {
tx.commit();
}
+ if (criteria.size() != result.size()) {
+ log.error(String.format("Criteria input list (%s) has not same size that result list (%s)",
+ criteria.size(), result.size()));
+ }
return result;
} catch (WikittyException ex) {
if (tx != null && tx.isStarted()) {
@@ -877,7 +893,8 @@
search = search.eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, treeNodeId);
Criteria criteria = search.criteria();
- PagedResult<String> childTreeNodeIds = findAllByCriteria(securityToken, criteria)[0];
+ PagedResult<String> childTreeNodeIds = findAllByCriteria(
+ securityToken, Collections.singletonList(criteria)).get(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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -28,6 +28,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -281,15 +282,18 @@
}
@Override
- public PagedResult<String>[] findAllByCriteria(
- String securityToken, Criteria ... criteria) {
- PagedResult<String>[] resultTxArray = tx.findAllByCriteria(securityToken, criteria);
- PagedResult<String>[] resultWsArray = ws.findAllByCriteria(securityToken, criteria);
+ public List<PagedResult<String>> findAllByCriteria(
+ String securityToken, List<Criteria> criteria) {
+ List<PagedResult<String>> resultTxList =
+ tx.findAllByCriteria(securityToken, criteria);
+ List<PagedResult<String>> resultWsList =
+ ws.findAllByCriteria(securityToken, criteria);
- 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];
+ List<PagedResult<String>> result =
+ new ArrayList<PagedResult<String>>(resultWsList.size());
+ for (int i=0; i<criteria.size(); i++) {
+ PagedResult<String> resultTx = resultTxList.get(i);
+ PagedResult<String> resultWs = resultWsList.get(i);
// Il faut fusionner les deux resultats
// - ne pas avoir de doublon
// - ne pas retenir ceux supprimer dans la transaction
@@ -312,29 +316,43 @@
Map<String, List<FacetTopic>> facets = resultWs.getFacets();
List<String> results = new ArrayList<String>(ids);
- result[i] = new PagedResult<String>(
- firstIndice, numFound, queryString, facets, results);
+ result.add(new PagedResult<String>(
+ firstIndice, numFound, queryString, facets, results));
}
+
+ if (criteria.size() != result.size()) {
+ log.error(String.format("Criteria input list (%s) has not same size that result list (%s)",
+ criteria.size(), result.size()));
+ }
+
return result;
}
@Override
- 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);
+ public List<String> findByCriteria(String securityToken, List<Criteria> criteria) {
+ List<String> result = new ArrayList<String>(criteria.size());
+ List<Criteria> criteriaLimit = new ArrayList<Criteria>(criteria.size());
+ for (Criteria c : criteria) {
+ Criteria climit = Search.query(c).criteria().setFirstIndex(0).setEndIndex(1);
+ criteriaLimit.add(climit);
}
- PagedResult<String>[] idsArray = findAllByCriteria(securityToken, criteriaLimit);
+ List<PagedResult<String>> idsList = findAllByCriteria(
+ securityToken, criteriaLimit);
- for (int i=0; i<criteria.length; i++) {
- PagedResult<String> ids = idsArray[i];
+ for (PagedResult<String> ids : idsList) {
if (ids.size() > 0) {
- result[i] = ids.getFirst();
+ result.add(ids.getFirst());
+ } else {
+ result.add(null);
}
}
+
+ if (criteria.size() != result.size()) {
+ log.error(String.format("Criteria input list (%s) has not same size that result list (%s)",
+ criteria.size(), result.size()));
+ }
+
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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/addons/importexport/ImportExportCSVTest.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -26,6 +26,7 @@
package org.nuiton.wikitty.addons.importexport;
import java.net.URL;
+import java.util.Collections;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
@@ -197,12 +198,12 @@
// test extension support
Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, extensionTag.getName()).criteria();
- PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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)[0];
+ PagedResult<String> pagedResult2 = ws.findAllByCriteria(null, Collections.singletonList(criteria2)).get(0);
Assert.assertEquals(1, pagedResult2.getNumFound());
// import attachment id that not exist, must be not imported
Modified: trunk/wikitty-perf-test/src/main/java/org/nuiton/wikitty/perftest/PerfTestSearch.java
===================================================================
--- trunk/wikitty-perf-test/src/main/java/org/nuiton/wikitty/perftest/PerfTestSearch.java 2011-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-perf-test/src/main/java/org/nuiton/wikitty/perftest/PerfTestSearch.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -35,6 +35,7 @@
import org.nuiton.wikitty.services.WikittyServiceEnhanced;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
public class PerfTestSearch {
@@ -79,8 +80,8 @@
private static void searchGt(int researches, WikittyService ws, WikittyExtension ext, String searchIn, String searched, boolean withRestore) {
for (int i = 0; i < researches; i++) {
Criteria criteria = Search.query().gt(ext.getName() + "." + searchIn, searched).criteria();
- PagedResult<String>[] result = ws.findAllByCriteria(null, criteria);
- List<String> found = result[0].getAll();
+ List<PagedResult<String>> result = ws.findAllByCriteria(null, Collections.singletonList(criteria));
+ List<String> found = result.get(0).getAll();
for (String aFound : found) {
if (withRestore) {
Wikitty wikittyFound = WikittyServiceEnhanced.restore(ws, null, aFound);
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -237,8 +237,8 @@
}
@Override
- public PagedResult<String>[] findAllByCriteria(String securityToken,
- Criteria... criteria) {
+ public List<PagedResult<String>> findAllByCriteria(String securityToken,
+ List<Criteria> criteria) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
// return null;
@@ -246,7 +246,7 @@
}
@Override
- public String[] findByCriteria(String securityToken, Criteria... criteria) {
+ public List<String> findByCriteria(String securityToken, List<Criteria> criteria) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
// return null;
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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -30,6 +30,7 @@
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collections;
import java.util.List;
import org.apache.commons.logging.Log;
@@ -161,7 +162,7 @@
.eq("Test.name_s", "chaise")
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(1, list.size());
@@ -179,7 +180,7 @@
.contains("Product.price", "20")
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(3, list.size());
}
@@ -188,7 +189,7 @@
.contains("Product.price", "20", "30", "35")
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(0, list.size());
}
@@ -201,7 +202,7 @@
.in("Product.price", "20")
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(3, list.size());
}
@@ -210,7 +211,7 @@
.in("Product.price", "20", "30", "35")
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(4, list.size());
}
@@ -219,7 +220,7 @@
.in("Product.price", "25", "30", "40")
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(0, list.size());
}
@@ -232,7 +233,7 @@
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(4, list.size());
@@ -242,7 +243,7 @@
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- result = ws.findAllByCriteria(null, criteria)[0];
+ result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
list = result.getAll();
assertEquals(3, list.size());
}
@@ -257,7 +258,7 @@
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals( 2, list.size() );
}
@@ -265,12 +266,12 @@
@Test
public void testKeywordSearch() throws Exception {
Criteria criteria = Search.query().keyword("bureau").criteria();
- PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> result = pagedResult.getAll();
assertEquals(1, result.size());
criteria = Search.query().keyword("nothing").criteria();
- pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
result = pagedResult.getAll();
assertEquals(0, result.size());
@@ -279,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)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
result = pagedResult.getAll();
assertEquals(6, result.size());
@@ -287,7 +288,7 @@
.keyword("*33*")
.eq("Test.name", "bureau")
.criteria();
- pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
result = pagedResult.getAll();
assertEquals(1, result.size());
}
@@ -297,7 +298,7 @@
Criteria criteria = Search.query().keyword("*").criteria();
criteria.addFacetField(Element.ELT_EXTENSION);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(13, result.getAll().size());
List<FacetTopic> topics = result.getTopic(Element.ELT_EXTENSION);
@@ -321,14 +322,14 @@
.eq("Test.enabled", "true")
.criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(1, result.getNumFound());
criteria = Search.query()
.eq("Test.enabled", "false")
.criteria();
- result = ws.findAllByCriteria(null, criteria)[0];
+ result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(2, result.getNumFound());
}
@@ -338,14 +339,14 @@
query.not().eq("Test.name", "bureau");
Criteria criteria = query.criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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)[0];
+ result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(1, result.getNumFound());
}
@@ -356,7 +357,7 @@
example.setField("Product", "price", 20);
Criteria criteria = Search.query(example).criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(3, result.getNumFound());
}
@@ -366,7 +367,7 @@
Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, "Product").criteria();
criteria.addFacetField("Product.value");
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<FacetTopic> topics = result.getTopic("Product.value");
for (FacetTopic topic : topics) {
String topicName = topic.getTopicName();
@@ -384,7 +385,7 @@
Criteria facet2 = Search.query().eq("Product.value", "2").criteria("2");
criteria.addFacetCriteria(facet2);
- result = ws.findAllByCriteria(null, criteria)[0];
+ result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
topics = result.getTopic("1");
FacetTopic topic = topics.get(0);
@@ -411,24 +412,24 @@
criteria.setFirstIndex(0);
criteria.setEndIndex(0);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(13, result.getNumFound());
ws.syncSearchEngine(null);
- result = ws.findAllByCriteria(null, criteria)[0];
+ result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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)[0];
+ PagedResult<String> pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
result = pagedResult.getAll();
assertEquals(3, result.size());
}
@@ -438,26 +439,26 @@
/*@Test
public void testLikeSearch() throws Exception {
Criteria criteria = Search.query().like("Category.name", "hArDwArE").criteria();
- PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> result = pagedResult.getAll();
assertEquals(1, result.size());
criteria = Search.query().like("Category.name", "*wAr*").criteria();
- pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
result = pagedResult.getAll();
assertEquals(1, result.size());
criteria = Search.query().like("Category.name", "Har*").criteria();
- pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
result = pagedResult.getAll();
assertEquals(1, result.size());
criteria = Search.query().like("Test.description", "help").criteria();
- pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(1, pagedResult.getNumFound());
criteria = Search.query().like("Test.description", "helped").criteria();
- pagedResult = ws.findAllByCriteria(null, criteria)[0];
+ pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
assertEquals(1, pagedResult.getNumFound());
}*/
@@ -471,7 +472,7 @@
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
assertEquals(1, list.size());
@@ -483,7 +484,7 @@
.criteria()
.setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- result = ws.findAllByCriteria(null, criteria)[0];
+ result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
list = result.getAll();
assertEquals(5, list.size());
}*/
@@ -508,7 +509,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)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
List<String> list = result.getAll();
@@ -520,14 +521,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)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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)[0];
+ result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
list = result.getAll();
assertEquals(2, list.size());
}
@@ -545,20 +546,20 @@
{
// sans accent
Criteria criteria = Search.query().keyword("coucou").criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
Assert.assertEquals(1, result.size());
}
{
// avec accent
Criteria criteria = Search.query().keyword("çéçà").criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
Assert.assertEquals(1, result.size());
}
{
@@ -567,7 +568,7 @@
WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME
+ WikittySolrConstant.SUFFIX_STRING
+ WikittySolrConstant.SUFFIX_STRING_FULLTEXT, "ceca").criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
Assert.assertEquals(1, result.size());
}
{
@@ -578,7 +579,7 @@
WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME
+ WikittySolrConstant.SUFFIX_STRING
+ WikittySolrConstant.SUFFIX_STRING_FULLTEXT, "CECA").criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
Assert.assertEquals(1, result.size());
}
{
@@ -587,7 +588,7 @@
// et et majuscule
/*Criteria criteria = Search.query().like(
WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "CECA").criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
+ PagedResult<String> result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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-04-08 15:35:00 UTC (rev 771)
+++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java 2011-04-08 16:18:50 UTC (rev 772)
@@ -90,13 +90,15 @@
{
Criteria c = Search.query().keyword("lab*").criteria();
- PagedResult<String> result = ws.findAllByCriteria(null, c)[0];
+ PagedResult<String> result = ws.findAllByCriteria(
+ null, Collections.singletonList(c)).get(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)[0];
+ PagedResult<String> result = ws.findAllByCriteria(
+ null, Collections.singletonList(c)).get(0);
System.out.println(result.getAll());
Assert.assertEquals(3, result.getNumFound());
}
@@ -297,7 +299,8 @@
// look for it
Search query = Search.query();
query.eq(Element.ELT_ID, "wikkitytodelete");
- Assert.assertEquals(1, ws.findAllByCriteria(null, query.criteria())[0].getNumFound());
+ Assert.assertEquals(1, ws.findAllByCriteria(null,
+ Collections.singletonList(query.criteria())).get(0).getNumFound());
Assert.assertEquals(1, proxy.findAllByCriteria(query.criteria()).getNumFound());
// delete it
@@ -305,7 +308,8 @@
// try to look for it after deletion
Assert.assertEquals(0, proxy.findAllByCriteria(query.criteria()).getNumFound());
- Assert.assertEquals(0, ws.findAllByCriteria(null, query.criteria())[0].getNumFound());
+ Assert.assertEquals(0, ws.findAllByCriteria(null,
+ Collections.singletonList(query.criteria())).get(0).getNumFound());
}
// Nombre of iteration for test delete
@@ -336,7 +340,8 @@
// 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())[0].getNumFound());
+ Assert.assertEquals(NB_DOCS_TO_DELETE, ws.findAllByCriteria(null,
+ Collections.singletonList(query.criteria())).get(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 +350,8 @@
// try to look for it after deletion
Assert.assertEquals(0, proxy.findAllByCriteria(query.criteria()).getNumFound());
- Assert.assertEquals(0, ws.findAllByCriteria(null, query.criteria())[0].getNumFound());
+ Assert.assertEquals(0, ws.findAllByCriteria(null,
+ Collections.singletonList(query.criteria())).get(0).getNumFound());
Assert.assertEquals(0, proxy.findAllByCriteria(WikittyLabel.class, query.criteria()).size());
}
}
1
0
r771 - in trunk/wikitty-publication/src/main: java java/org/nuiton/wikitty/publication resources webapp
by mfortun@users.nuiton.org 08 Apr '11
by mfortun@users.nuiton.org 08 Apr '11
08 Apr '11
Author: mfortun
Date: 2011-04-08 17:35:00 +0200 (Fri, 08 Apr 2011)
New Revision: 771
Url: http://nuiton.org/repositories/revision/wikitty/771
Log:
*Import basically works.
*correction of properties to make a cajoServer works properly
*mok method in wikittyservicefilesystem for import testing
Modified:
trunk/wikitty-publication/src/main/java/
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java
trunk/wikitty-publication/src/main/resources/wikitty-publication-ws-default.properties
trunk/wikitty-publication/src/main/webapp/
Property changes on: trunk/wikitty-publication/src/main/java
___________________________________________________________________
Added: svn:ignore
+ tempTest
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-08 13:49:27 UTC (rev 770)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-08 15:35:00 UTC (rev 771)
@@ -14,6 +14,7 @@
import org.nuiton.util.ArgumentsParserException;
import org.nuiton.util.StringUtil;
import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyServiceFactory;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyLabel;
import org.nuiton.wikitty.publication.entities.WikittyPubData;
@@ -21,6 +22,17 @@
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.Search;
+
+/**
+ * Main class of the sync part of wikitty publication, this class is the entry
+ * point for sync operation : import, checkout, commit, delete, relocate and
+ * update.
+ *
+ *
+ *
+ * @author mfortun
+ *
+ */
public class WikittyPublication {
/** to use log facility, just put in your code: log.info(\"...\"); */
@@ -161,8 +173,15 @@
+ noRecur + " directory= " + dir.getAbsolutePath());
// usage: wp --norecursion --ws http://truc.com import --dir /home/Manou
+ applicationConfig.setOption("wikitty.WikittyService.components",
+ "org.nuiton.wikitty.services.WikittyServiceCajoClient");
+
+ System.out.println(applicationConfig
+ .getOption("wikitty.service.server.url"));
+
// real code:
- WikittyProxy remoteWikittyService = new WikittyProxy(applicationConfig);
+ WikittyProxy remoteWikittyService = new WikittyProxy(
+ WikittyServiceFactory.buildWikittyService(applicationConfig));
// load the list of file
List<File> toTransfert = listFile(dir, !noRecur);
@@ -171,7 +190,8 @@
// transform file into wikitties
for (File fileToTransform : toTransfert) {
- listWikitty.add(WikittyPublicationFileSystem.fileToWikitty(fileToTransform, dir));
+ listWikitty.add(WikittyPublicationFileSystem.fileToWikitty(
+ fileToTransform, dir));
}
// send the wikitties
@@ -209,11 +229,14 @@
*/
static protected List<File> listFile(File starts, boolean recursivly) {
ArrayList<File> result = new ArrayList<File>();
- result.add(starts);
+ if (!starts.isDirectory()) {
+ result.add(starts);
+ }
for (File child : starts.listFiles()) {
if (child.isDirectory() && recursivly
&& !child.getName().equals(PROPERTY_DIRECTORY)) {
- result.add(child);
+ // Directory don't have to be harvest
+ // result.add(child);
result.addAll(listFile(child, recursivly));
} else if (!child.isDirectory()) {
result.add(child);
@@ -240,7 +263,8 @@
+ dir.getAbsolutePath() + "Label a checkout " + label
+ "HessianProtocol=" + hessianProtocole);
- WikittyProxy remoteWikittyService = new WikittyProxy(applicationConfig);
+ WikittyProxy remoteWikittyService = new WikittyProxy(
+ WikittyServiceFactory.buildWikittyService(applicationConfig));
WikittyPublicationFileSystem localWikittyService = new WikittyPublicationFileSystem(
dir);
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-08 13:49:27 UTC (rev 770)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-08 15:35:00 UTC (rev 771)
@@ -37,6 +37,8 @@
final static private Log log = LogFactory
.getLog(WikittyPublicationFileSystem.class);
+ static public String WIKITTYLABEL_SEPARATOR = ".";
+
protected File homeFile;
/**
@@ -315,18 +317,28 @@
Wikitty result = new WikittyImpl();
result.addExtension(WikittyLabelImpl.extensionWikittyLabel);
+
+ //creation of the label
/*
- * TODO mfortun-2011-04-08 need to parse the file name to create the
- * label need to use starts directory.
+ * TODO mfortun-2011-04-08 find a better way to do this ?
*/
- String pathToFile = fileToTransform.getCanonicalPath();
+ String pathToFile = fileToTransform.getParent();
+ String pathToStart = starts.getCanonicalPath();
+ String startDirName = starts.getName();
- WikittyLabelHelper.addLabels(result, "path");
+ /*
+ * remove path from root to start dir to have path from start to current
+ * working dir e.g.: if current file=
+ * /home/foo/bob/chaine.chaussette.tar.gz and starts dir = /home/foo/
+ * then path will be = foo/bob
+ */
+ String path = startDirName + pathToFile.replaceAll(pathToStart, "");
- // InputStreamReader reader = new InputStreamReader( new
- // FileReader(object));
- // reader.
+ String label = path.replaceAll(File.separator, WIKITTYLABEL_SEPARATOR);
+ WikittyLabelHelper.addLabels(result, label);
+
+
// complete with the correct extension with content
if (isMimeWikittyPubText(mimeType)) {
result.addExtension(WikittyPubTextImpl.extensionWikittyPubText);
@@ -338,7 +350,6 @@
result.addExtension(WikittyPubDataImpl.extensionWikittyPubData);
WikittyPubDataHelper.setName(result, name);
WikittyPubDataHelper.setMimeType(result, mimeType);
-
WikittyPubDataHelper.setContent(result,
FileUtil.fileToByte(fileToTransform));
}
@@ -354,7 +365,16 @@
* @return
*/
static public String mimeTypeForExtension(String ext) {
- return null;
+ /*
+ * TODO mfortun-2011-04-08 really implements this method
+ *
+ */
+ if (ext.equalsIgnoreCase("ws")) {
+ return "application/javascript";
+ } else {
+ return "image/png";
+ }
+
}
/**
@@ -364,7 +384,15 @@
* @return
*/
static public boolean isMimeWikittyPubText(String mime) {
- return true;
+ /*
+ * TODO mfortun-2011-04-08 really implements this method
+ *
+ */
+ if (mime.equalsIgnoreCase("application/javascript")) {
+ return true;
+ } else {
+ return false;
+ }
}
}
Modified: trunk/wikitty-publication/src/main/resources/wikitty-publication-ws-default.properties
===================================================================
--- trunk/wikitty-publication/src/main/resources/wikitty-publication-ws-default.properties 2011-04-08 13:49:27 UTC (rev 770)
+++ trunk/wikitty-publication/src/main/resources/wikitty-publication-ws-default.properties 2011-04-08 15:35:00 UTC (rev 771)
@@ -38,7 +38,9 @@
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
org.nuiton.wikitty.services.WikittyServiceSecurity,\
-org.nuiton.wikitty.services.WikittyServiceAccessStat
+org.nuiton.wikitty.services.WikittyServiceAccessStat,\
+org.nuiton.wikitty.services.WikittyServiceCajoServer
+wikitty.service.server.url=http://localhost:1111/wikitty
wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr
Property changes on: trunk/wikitty-publication/src/main/webapp
___________________________________________________________________
Added: svn:ignore
+ META-INF
1
0
r770 - in trunk/wikitty-api/src: main/xmi site site/resources site/resources/images site/rst
by bpoussin@users.nuiton.org 08 Apr '11
by bpoussin@users.nuiton.org 08 Apr '11
08 Apr '11
Author: bpoussin
Date: 2011-04-08 15:49:27 +0200 (Fri, 08 Apr 2011)
New Revision: 770
Url: http://nuiton.org/repositories/revision/wikitty/770
Log:
Evolution #1449: Add Hook support in WikittyService (useful for trigger or calculated field)
add WikittyHook in model
add documentation for this feature
Added:
trunk/wikitty-api/src/site/resources/
trunk/wikitty-api/src/site/resources/images/
trunk/wikitty-api/src/site/resources/images/wikitty-diagClass.png
trunk/wikitty-api/src/site/rst/dataModel.rst
Modified:
trunk/wikitty-api/src/main/xmi/wikitty.zargo
Modified: trunk/wikitty-api/src/main/xmi/wikitty.zargo
===================================================================
(Binary files differ)
Added: trunk/wikitty-api/src/site/resources/images/wikitty-diagClass.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-api/src/site/resources/images/wikitty-diagClass.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-api/src/site/rst/dataModel.rst
===================================================================
--- trunk/wikitty-api/src/site/rst/dataModel.rst (rev 0)
+++ trunk/wikitty-api/src/site/rst/dataModel.rst 2011-04-08 13:49:27 UTC (rev 770)
@@ -0,0 +1,43 @@
+====================
+Le modèle de données
+====================
+
+..image:: images/wikitty-diagClass.png
+
+WikittyHook
+===========
+
+Cet objet sert à ajouter des fonctionnalités au framework de Wikitty. Pour
+cela il suffit d'ajouter un nouvelle objet ayant l'extension WikittyHook
+et d'indiquer sur quelle action aura lieu le lancement de ce hook. Pour
+chaque action qui a lieu sur le WikittyService les WikittyHook sont
+recherché et leur variable Hook est exécuté en fonction du mimetype associé.
+Le script du hook a automatiquement accès au variable:
+
+- actionName: nom de l'action
+- hook: l'objet wikitty du hook
+- ws: WikittyService sous jacent du WikittyServiceHook
+- aux arguments de l'action appelé (variable du même nom que l'argument de
+ l'action). Si les arguments sont modifiés par le hook (pre-), les nouvelles
+ valeurs seront utilisées lors de l'appel de l'action
+- event: l'objet WikittyEvent resultat de l'action (null s'il n'est pas disponible)
+
+Valeur possible pour actionToHook et s'il est possible d'indiquer des extensions:
+
+- (pre|post)-store
+- (pre|post)-storeExtension
+- (pre|post)-delete
+- (pre|post)-deleteExtension
+- (pre|post)-deleteTree
+- (pre|post)-clear
+- (pre|post)-login
+- (pre|post)-logout
+- (pre|post)-replay
+- (pre|post)-syncSearchEngine
+
+Quelques exemple d'utilisation:
+- recalculer un champs d'un objet avant sont enregistrement
+- ne pas authoriser la modification d'un objet, en le supprimant de la liste
+ des objets a storer
+- créer de nouveaux objets lorsque certain sont sauvegardé
+- ...
1
0
r769 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/main/java/org/nuiton/wikitty/services wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by bpoussin@users.nuiton.org 08 Apr '11
by bpoussin@users.nuiton.org 08 Apr '11
08 Apr '11
Author: bpoussin
Date: 2011-04-08 15:46:27 +0200 (Fri, 08 Apr 2011)
New Revision: 769
Url: http://nuiton.org/repositories/revision/wikitty/769
Log:
Evolution #1449: Add Hook support in WikittyService (useful for trigger or calculated field)
Create ScriptEvaluator class for hook evaluation and use it for WikittyPublication
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/ScriptEvaluator.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceHook.java
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEval.java
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/ScriptEvaluator.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/ScriptEvaluator.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/ScriptEvaluator.java 2011-04-08 13:46:27 UTC (rev 769)
@@ -0,0 +1,141 @@
+package org.nuiton.wikitty;
+
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class ScriptEvaluator {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(ScriptEvaluator.class);
+
+ static protected ScriptEngineManager scriptEnginManager;
+
+ /**
+ * Return all time new ScriptEnginManager if classLoader is not null
+ * else return default ScriptEnginManager
+ *
+ * @param classLoader ClassLoader used to looking for ScriptEngin, can be null
+ * @return ScriptEnginManager
+ */
+ static public ScriptEngineManager getScriptEnginManager(ClassLoader classLoader) {
+ ScriptEngineManager result;
+ if (classLoader != null) {
+ result = new ScriptEngineManager();
+ } else {
+ if (scriptEnginManager == null) {
+ // create default ScriptEngineManager
+ scriptEnginManager = new ScriptEngineManager();
+ }
+ result = scriptEnginManager;
+ }
+ return result;
+ }
+
+ /**
+ *
+ * @param classLoader
+ * @param name only used in exception message (this help to determine what
+ * script failed)
+ * @param mimetype script engine looking for this specific mimetype
+ * @return ScriptEngine or exception if not available for this mimetype
+ */
+ static public ScriptEngine getScriptEngin(ClassLoader classLoader,
+ String name, String mimetype) {
+ ScriptEngineManager scriptEnginManager = getScriptEnginManager(classLoader);
+ ScriptEngine scriptEngin = scriptEnginManager.getEngineByMimeType(mimetype);
+ if (scriptEngin == null) {
+ List<ScriptEngineFactory> factories =
+ scriptEnginManager.getEngineFactories();
+ String msgFactories = "";
+ for (ScriptEngineFactory f : factories) {
+ msgFactories += String.format(
+ "\n%s extensions: %s mimetypes: %s",
+ f.getEngineName(), f.getExtensions(), f.getMimeTypes());
+ }
+ throw new WikittyException(String.format(
+ "Can't find engine for %s(%s). Available engines: %s",
+ name, mimetype, msgFactories));
+ } else {
+ return scriptEngin;
+ }
+ }
+
+ /**
+ * Evalue le script et retourne le retour de l'evaluation
+ *
+ * @param classLoader optionnal classLoader used to find ScriptEngine
+ * @param name
+ * @param script
+ * @param mimetype
+ * @param bindings
+ * @return
+ */
+ static public Object eval(ClassLoader classLoader, String name,
+ String script, String mimetype, Map<String, Object> bindings) {
+ ScriptEngine scriptEngin = getScriptEngin(classLoader, name, mimetype);
+
+ Bindings b = scriptEngin.createBindings();
+ b.putAll(bindings);
+ try {
+ Object result = scriptEngin.eval(script, b);
+ return result;
+ } catch (ScriptException eee) {
+ throw new WikittyException(String.format(
+ "Can't evaluated script %s(%s=>%s) script was\n%s",
+ name, mimetype,
+ scriptEngin.getFactory().getEngineName(), script), eee);
+ }
+ }
+
+ /**
+ * Evalue le script et recupere a la fin de l'evaluation les valeurs
+ * des variables presentes dans la map bindings. Le resultat a exactement
+ * les memes cles que binding.
+ *
+ * @param classLoader optionnal classLoader used to find ScriptEngine
+ * @param name
+ * @param script
+ * @param mimetype
+ * @param bindings
+ * @return
+ */
+ static public Map<String, Object> exec(ClassLoader classLoader, String name,
+ String script, String mimetype, Map<String, Object> bindings) {
+ ScriptEngine scriptEngin = getScriptEngin(classLoader, name, mimetype);
+
+ Bindings b = scriptEngin.createBindings();
+ b.putAll(bindings);
+ try {
+ scriptEngin.eval(script, b);
+ Map<String, Object> result = new HashMap<String, Object>();
+ for (Map.Entry<String, Object> e : bindings.entrySet()) {
+ Object value = scriptEngin.get(e.getKey());
+ result.put(e.getKey(), value);
+ }
+ return result;
+ } catch (ScriptException eee) {
+ throw new WikittyException(String.format(
+ "Can't evaluated script %s(%s=>%s) script was\n%s",
+ name, mimetype,
+ scriptEngin.getFactory().getEngineName(), script), eee);
+ }
+ }
+
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceHook.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceHook.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceHook.java 2011-04-08 13:46:27 UTC (rev 769)
@@ -0,0 +1,276 @@
+package org.nuiton.wikitty.services;
+
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.wikitty.ScriptEvaluator;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyExtension;
+import org.nuiton.wikitty.entities.WikittyHook;
+import org.nuiton.wikitty.entities.WikittyHookHelper;
+import org.nuiton.wikitty.search.Criteria;
+import org.nuiton.wikitty.search.PagedResult;
+import org.nuiton.wikitty.search.Search;
+
+/**
+ * Cette classe permet d'intercepter les modifications faites via les differentes
+ * methodes de modification des données et d'executer les differents WikittyHook
+ * enregistres.
+ *
+ * Les WikittyHook peuvent
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyServiceHook extends WikittyServiceDelegator {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceHook.class);
+
+ final static public String PRE_STORE = "pre-store";
+ final static public String POST_STORE = "post-store";
+ final static public String PRE_STORE_EXTENSION = "pre-storeExtension";
+ final static public String POST_STORE_EXTENSION = "post-storeExtension";
+ final static public String PRE_DELETE = "pre-delete";
+ final static public String POST_DELETE = "post-delete";
+ final static public String PRE_DELETE_EXTENSION = "pre-deleteExtension";
+ final static public String POST_DELETE_EXTENSION = "post-deleteExtension";
+ final static public String PRE_DELETE_TREE = "pre-deleteTree";
+ final static public String POST_DELETE_TREE = "post-deleteTree";
+ final static public String PRE_CLEAR = "pre-clear";
+ final static public String POST_CLEAR = "post-clear";
+ final static public String PRE_LOGIN = "pre-login";
+ final static public String POST_LOGIN = "post-login";
+ final static public String PRE_LOGOUT = "pre-logout";
+ final static public String POST_LOGOUT = "post-logout";
+ final static public String PRE_REPLAY = "pre-replay";
+ final static public String POST_REPLAY = "post-replay";
+ final static public String PRE_SYNC_SEARCH_ENGINE = "pre-syncSearchEngine";
+ final static public String POST_SYNC_SEARCH_ENGINE = "post-syncSearchEngine";
+
+ /**
+ *
+ * @param config not use currently but needed in futur
+ * @param ws
+ */
+ public WikittyServiceHook(ApplicationConfig config, WikittyService ws) {
+ super(ws);
+ }
+
+ protected Collection<Wikitty> getHook(String securityToken, String actionName) {
+ Criteria criteria = Search.query().exteq(WikittyHook.EXT_WIKITTYHOOK)
+ .and().eq(WikittyHook.FQ_FIELD_WIKITTYHOOK_ACTIONTOHOOK, actionName)
+ .criteria();
+ PagedResult<String>[] ids = getDelegate().findAllByCriteria(securityToken, criteria);
+
+ List<Wikitty> result = getDelegate().restore(securityToken, ids[0].getAll());
+
+ return result;
+ }
+
+ protected Map<String, Object> callHook(String securityToken, String actionName,
+ Map<String, Object> args, WikittyEvent event) {
+ Collection<Wikitty> hooks = getHook(securityToken, actionName);
+
+ WikittyService ws = getDelegate();
+ args.put("actionName", actionName);
+ args.put("ws", ws);
+ args.put("event", event);
+
+ for (Wikitty hook : hooks) {
+ String hookName = WikittyHookHelper.getName(hook);
+ String mimetype = WikittyHookHelper.getMimetype(hook);
+ String script = WikittyHookHelper.getScript(hook);
+
+ args.put("hook", hook);
+
+ args = ScriptEvaluator.exec(null, hookName, script, mimetype, args);
+ }
+ return args;
+ }
+
+ @Override
+ public WikittyEvent store(String securityToken, Collection<Wikitty> wikitties, boolean force) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+ args.put("wikitties", wikitties);
+ args.put("force", force);
+
+ args = callHook(securityToken, PRE_STORE, args, null);
+
+ securityToken = (String)args.get("securityToken");
+ wikitties= (Collection<Wikitty>)args.get("wikitties");
+ force = (Boolean)args.get("force");
+
+ WikittyEvent result = super.store(securityToken, wikitties, force);
+
+ callHook(securityToken, POST_STORE, args, result);
+
+ return result;
+ }
+
+ @Override
+ public WikittyEvent storeExtension(String securityToken, Collection<WikittyExtension> exts) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+ args.put("exts", exts);
+
+ args = callHook(securityToken, PRE_STORE_EXTENSION, args, null);
+
+ securityToken = (String)args.get("securityToken");
+ exts = (Collection<WikittyExtension>) args.get("exts");
+
+ WikittyEvent result = super.storeExtension(securityToken, exts);
+
+ callHook(securityToken, POST_STORE_EXTENSION, args, result);
+
+ return result;
+ }
+
+ @Override
+ public WikittyEvent delete(String securityToken, Collection<String> ids) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+ args.put("ids", ids);
+
+ args = callHook(securityToken, PRE_DELETE, args, null);
+
+ securityToken = (String)args.get("securityToken");
+ ids = (Collection<String>) args.get("ids");
+
+ WikittyEvent result = super.delete(securityToken, ids);
+
+ callHook(securityToken, POST_DELETE, args, result);
+
+ return result;
+ }
+
+ @Override
+ public WikittyEvent deleteExtension(String securityToken, Collection<String> extNames) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+ args.put("extNames", extNames);
+
+ args = callHook(securityToken, PRE_DELETE_EXTENSION, args, null);
+
+ securityToken = (String)args.get("securityToken");
+ extNames = (Collection<String>) args.get("extNames");
+
+ WikittyEvent result = super.deleteExtension(securityToken, extNames);
+
+ callHook(securityToken, POST_DELETE_EXTENSION, args, result);
+
+ return result;
+ }
+
+ @Override
+ public WikittyEvent deleteTree(String securityToken, String wikittyId) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+ args.put("wikittyId", wikittyId);
+
+ args = callHook(securityToken, PRE_DELETE_TREE, args, null);
+
+ securityToken = (String)args.get("securityToken");
+ wikittyId = (String) args.get("wikittyId");
+
+ WikittyEvent result = super.deleteTree(securityToken, wikittyId);
+
+ callHook(securityToken, POST_DELETE_TREE, args, result);
+
+ return result;
+ }
+
+ @Override
+ public WikittyEvent clear(String securityToken) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+
+ args = callHook(securityToken, PRE_CLEAR, args, null);
+
+ securityToken = (String)args.get("securityToken");
+
+ WikittyEvent result = super.clear(securityToken);
+
+ callHook(securityToken, POST_CLEAR, args, result);
+
+ return result;
+ }
+
+ @Override
+ public String login(String login, String password) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("login", login);
+ args.put("password", password);
+
+ args = callHook(null, PRE_LOGIN, args, null);
+
+ login = (String)args.get("login");
+ password = (String) args.get("password");
+
+ String result = super.login(login, password);
+
+ callHook(null, POST_LOGIN, args, null);
+
+ return result;
+ }
+
+ @Override
+ public void logout(String securityToken) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+
+ args = callHook(securityToken, PRE_LOGOUT, args, null);
+
+ securityToken = (String)args.get("securityToken");
+
+ super.logout(securityToken);
+
+ callHook(securityToken, POST_LOGOUT, args, null);
+ }
+
+ @Override
+ public WikittyEvent replay(String securityToken, List<WikittyEvent> events, boolean force) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+ args.put("events", events);
+ args.put("force", force);
+
+ args = callHook(securityToken, PRE_REPLAY, args, null);
+
+ securityToken = (String)args.get("securityToken");
+ events = (List<WikittyEvent>) args.get("events");
+ force = (Boolean)args.get("force");
+
+ WikittyEvent result = super.replay(securityToken, events, force);
+
+ callHook(securityToken, POST_REPLAY, args, result);
+
+ return result;
+ }
+
+ @Override
+ public void syncSearchEngine(String securityToken) {
+ Map<String, Object> args = new HashMap<String, Object>();
+ args.put("securityToken", securityToken);
+
+ args = callHook(securityToken, PRE_SYNC_SEARCH_ENGINE, args, null);
+
+ securityToken = (String)args.get("securityToken");
+
+ super.syncSearchEngine(securityToken);
+
+ callHook(securityToken, POST_SYNC_SEARCH_ENGINE, args, null);
+
+ }
+
+}
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEval.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEval.java 2011-04-08 11:26:05 UTC (rev 768)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEval.java 2011-04-08 13:46:27 UTC (rev 769)
@@ -38,6 +38,7 @@
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.StringUtil;
+import org.nuiton.wikitty.ScriptEvaluator;
import org.nuiton.wikitty.WikittyException;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.entities.Wikitty;
@@ -102,37 +103,6 @@
scriptEnginManager = new ScriptEngineManager();
}
- protected Object eval(String name, String script, String mimetype,
- Map<String, Object> bindings) {
- ScriptEngine scriptEngin = scriptEnginManager.getEngineByMimeType(mimetype);
- if (scriptEngin == null) {
- List<ScriptEngineFactory> factories =
- scriptEnginManager.getEngineFactories();
- String msgFactories = "";
- for (ScriptEngineFactory f : factories) {
- msgFactories += String.format(
- "\n%s extensions: %s mimetypes: %s",
- f.getEngineName(), f.getExtensions(), f.getMimeTypes());
- }
- throw new WikittyException(String.format(
- "Can't find engine for %s(%s). Available engines: %s",
- name, mimetype, msgFactories));
- } else {
- Bindings b = scriptEngin.createBindings();
- b.putAll(bindings);
- try {
- Object result = scriptEngin.eval(script, b);
- return result;
- } catch (ScriptException eee) {
- throw new WikittyException(String.format(
- "Can't evaluated script %s(%s=>%s) script was\n%s",
- name, mimetype,
- scriptEngin.getFactory().getEngineName(), script), eee);
- }
- }
-
- }
-
public Object doAction(WikittyPublicationContext context, List<String> subContext) {
log.info("path " + subContext);
@@ -150,7 +120,7 @@
if (w == null) {
context.setContentType("text/plain");
result = String.format(
- "no data found for criteria %s", criteria);
+ "no data found for criteria '%s'", criteria);
} else {
String contentField = getContentFieldName(context, criteria.getName(), w);
@@ -173,7 +143,8 @@
bindings.put(WIKITTY_VAR, w);
bindings.put(EVAL_VAR, this);
- result = eval(criteria.getName(), content, mimetype, bindings);
+ result = ScriptEvaluator.eval(
+ null, criteria.getName(), content, mimetype, bindings);
}
}
}
1
0
r768 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty/search wikitty-api/src/main/java/org/nuiton/wikitty/search/operators wikitty-api/src/main/java/org/nuiton/wikitty/storage wikitty-api/src/test/java/org/nuiton/wikitty/api wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr
by jcouteau@users.nuiton.org 08 Apr '11
by jcouteau@users.nuiton.org 08 Apr '11
08 Apr '11
Author: jcouteau
Date: 2011-04-08 13:26:05 +0200 (Fri, 08 Apr 2011)
New Revision: 768
Url: http://nuiton.org/repositories/revision/wikitty/768
Log:
Add True search
Refactor False search
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/True.java
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java 2011-04-08 10:18:32 UTC (rev 767)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java 2011-04-08 11:26:05 UTC (rev 768)
@@ -49,6 +49,7 @@
import java.util.Locale;
import java.util.TimeZone;
import org.nuiton.wikitty.search.operators.In;
+import org.nuiton.wikitty.search.operators.True;
/**
* @author "Nicolas Chapurlat" <nicolas.chapurlat(a)logica.com>
@@ -226,14 +227,14 @@
return or;
}
- public static Restriction rTrue() {
- Restriction rTrue = new Restriction();
+ public static True rTrue() {
+ True rTrue = new True();
rTrue.setName(RestrictionName.TRUE);
return rTrue;
}
- public static Restriction rFalse() {
- Restriction rFalse = new Restriction();
+ public static False rFalse() {
+ False rFalse = new False();
rFalse.setName(RestrictionName.FALSE);
return rFalse;
}
@@ -259,12 +260,6 @@
return isNotNull;
}
- public static False isFalse() {
- False falseRestriction = new False();
- falseRestriction.setName(RestrictionName.FALSE);
- return falseRestriction;
- }
-
static ThreadLocal<SimpleDateFormat> myFormats = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java 2011-04-08 10:18:32 UTC (rev 767)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java 2011-04-08 11:26:05 UTC (rev 768)
@@ -440,12 +440,22 @@
*
* @return {@code this}
*/
- public Search isFalse() {
- restrictions.add(RestrictionHelper.isFalse());
+ public Search rFalse() {
+ restrictions.add(RestrictionHelper.rFalse());
return this;
}
/**
+ * True.
+ *
+ * @return {@code this}
+ */
+ public Search rTrue() {
+ restrictions.add(RestrictionHelper.rTrue());
+ return this;
+ }
+
+ /**
* Not (sub query).
*
* @return sub query
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java 2011-04-08 10:18:32 UTC (rev 767)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java 2011-04-08 11:26:05 UTC (rev 768)
@@ -40,7 +40,7 @@
// equals use objects that are not constant through time
// then, unable to create hashCode from those objects
// returning a constant hash-code
- return Greater.class.hashCode();
+ return False.class.hashCode();
}
}
\ No newline at end of file
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/True.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/True.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/True.java 2011-04-08 11:26:05 UTC (rev 768)
@@ -0,0 +1,46 @@
+package org.nuiton.wikitty.search.operators;
+
+import java.io.Serializable;
+
+/**
+ * User: couteau
+ * Date: 08/04/11
+ */
+public class True extends Restriction implements Serializable {
+
+ // serialVersionUID is used for serialization.
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Default constructor
+ */
+ public True() {
+ super();
+ }
+
+ /**
+ * Equality test based attributes values
+ *
+ * @param other Value to compare
+ */
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (!(other instanceof True)) {
+ return false;
+ }
+
+ final True trueOther = (True) other;
+
+ return super.equals(trueOther);
+ }
+
+ public int hashCode() {
+ // equals use objects that are not constant through time
+ // then, unable to create hashCode from those objects
+ // returning a constant hash-code
+ return True.class.hashCode();
+ }
+
+}
\ No newline at end of file
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2011-04-08 10:18:32 UTC (rev 767)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2011-04-08 11:26:05 UTC (rev 768)
@@ -47,6 +47,7 @@
import org.nuiton.wikitty.search.operators.BinaryOperator;
import org.nuiton.wikitty.search.operators.Contains;
import org.nuiton.wikitty.search.operators.Element;
+import org.nuiton.wikitty.search.operators.False;
import org.nuiton.wikitty.search.operators.In;
import org.nuiton.wikitty.search.operators.Keyword;
import org.nuiton.wikitty.search.operators.Not;
@@ -54,6 +55,7 @@
import org.nuiton.wikitty.search.operators.Or;
import org.nuiton.wikitty.search.operators.Restriction;
import org.nuiton.wikitty.search.operators.RestrictionName;
+import org.nuiton.wikitty.search.operators.True;
import org.nuiton.wikitty.services.WikittyTransaction;
public class WikittySearchEngineInMemory implements WikittySearchEngine {
@@ -243,6 +245,10 @@
return false;
+ } else if (restriction instanceof True) {
+ return true;
+ } else if (restriction instanceof False) {
+ return false;
} else if (restriction instanceof Contains) {
Contains contains = (Contains) restriction;
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-04-08 10:18:32 UTC (rev 767)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-04-08 11:26:05 UTC (rev 768)
@@ -458,6 +458,32 @@
}
@Test
+ public void testFalse() throws Exception {
+
+ Search query = Search.query().rFalse();
+
+ Criteria rFalse = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(rFalse);
+
+ Assert.assertEquals(0, results.getAll().size());
+
+ }
+
+ @Test
+ public void testTrue() throws Exception {
+
+ Search query = Search.query().rTrue();
+
+ Criteria rTrue = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(rTrue);
+
+ Assert.assertEquals(5, results.getAll().size());
+
+ }
+
+ @Test
public void testAnd() throws Exception {
Search query = Search.query().and().bw("Product.price", "15", "25")
Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java
===================================================================
--- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-04-08 10:18:32 UTC (rev 767)
+++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-04-08 11:26:05 UTC (rev 768)
@@ -204,7 +204,7 @@
Restriction generatedRestriction;
long size = solrResults.size();
if ( size == 0 ) {
- generatedRestriction = RestrictionHelper.isFalse();
+ generatedRestriction = RestrictionHelper.rFalse();
} else if ( size == 1 ) {
generatedRestriction = RestrictionHelper.eq( associated.getElement(),
(String) solrResults.get(0).getFieldValue(WikittySolrConstant.SOLR_ID) );
1
0
r767 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 08 Apr '11
by mfortun@users.nuiton.org 08 Apr '11
08 Apr '11
Author: mfortun
Date: 2011-04-08 12:18:32 +0200 (Fri, 08 Apr 2011)
New Revision: 767
Url: http://nuiton.org/repositories/revision/wikitty/767
Log:
*remove static attribut that don't have to be
*change method to static (fileToWikitty)
*partialy complete wikittyServiceFileSystem
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-08 09:43:14 UTC (rev 766)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-08 10:18:32 UTC (rev 767)
@@ -26,9 +26,7 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
final static private Log log = LogFactory.getLog(WikittyPublication.class);
- static protected WikittyPublicationFileSystem wikittyServiceFileSystem;
static protected ApplicationConfig applicationConfig;
- static protected WikittyProxy proxyWS;
/*
* static string for allias, wrong named attribut TODO mfortun-2011-04-06
@@ -164,8 +162,7 @@
// usage: wp --norecursion --ws http://truc.com import --dir /home/Manou
// real code:
- wikittyServiceFileSystem = new WikittyPublicationFileSystem(dir);
- proxyWS = new WikittyProxy(applicationConfig);
+ WikittyProxy remoteWikittyService = new WikittyProxy(applicationConfig);
// load the list of file
List<File> toTransfert = listFile(dir, !noRecur);
@@ -174,12 +171,11 @@
// transform file into wikitties
for (File fileToTransform : toTransfert) {
- listWikitty.add(wikittyServiceFileSystem
- .objectToWikitty(fileToTransform));
+ listWikitty.add(WikittyPublicationFileSystem.fileToWikitty(fileToTransform, dir));
}
// send the wikitties
- proxyWS.storeWikitty(listWikitty);
+ remoteWikittyService.storeWikitty(listWikitty);
}
@@ -244,8 +240,9 @@
+ dir.getAbsolutePath() + "Label a checkout " + label
+ "HessianProtocol=" + hessianProtocole);
- proxyWS = new WikittyProxy(applicationConfig);
- wikittyServiceFileSystem = new WikittyPublicationFileSystem(dir);
+ WikittyProxy remoteWikittyService = new WikittyProxy(applicationConfig);
+ WikittyPublicationFileSystem localWikittyService = new WikittyPublicationFileSystem(
+ dir);
// Construct the criteria
Criteria labelCriteria;
@@ -270,11 +267,11 @@
}
// request to the proxy
- List<Wikitty> wikittiesToWrite = proxyWS.findAllByCriteria(
- labelCriteria).getAll();
+ List<Wikitty> wikittiesToWrite = remoteWikittyService
+ .findAllByCriteria(labelCriteria).getAll();
// write the wikities
- wikittyServiceFileSystem.store("", wikittiesToWrite, true);
+ localWikittyService.store("", wikittiesToWrite, true);
/*
* obtain the list of wikittypub and write then in the file system with
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-08 09:43:14 UTC (rev 766)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-08 10:18:32 UTC (rev 767)
@@ -1,14 +1,30 @@
package org.nuiton.wikitty.publication;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.InputStreamReader;
import java.util.Collection;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.FileUtil;
+import org.nuiton.util.StringUtil;
import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
+import org.nuiton.wikitty.entities.WikittyImpl;
+import org.nuiton.wikitty.entities.WikittyLabel;
+import org.nuiton.wikitty.entities.WikittyLabelHelper;
+import org.nuiton.wikitty.entities.WikittyLabelImpl;
+import org.nuiton.wikitty.publication.entities.WikittyPubDataHelper;
+import org.nuiton.wikitty.publication.entities.WikittyPubDataImpl;
+import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper;
+import org.nuiton.wikitty.publication.entities.WikittyPubTextImpl;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.PagedResult;
import org.nuiton.wikitty.search.TreeNodeResult;
@@ -20,25 +36,27 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
final static private Log log = LogFactory
.getLog(WikittyPublicationFileSystem.class);
-
+
protected File homeFile;
/**
* Constructor with the working directory
- * @param home the home directory
+ *
+ * @param home
+ * the home directory
*/
- public WikittyPublicationFileSystem(File home){
+ public WikittyPublicationFileSystem(File home) {
this.setHomeFile(home);
}
-
+
public File getHomeFile() {
return homeFile;
}
+
public void setHomeFile(File homeFile) {
this.homeFile = homeFile;
}
-
@Override
public void addWikittyServiceListener(WikittyListener listener,
ServiceListenerType type) {
@@ -133,6 +151,9 @@
@Override
public WikittyEvent store(String securityToken,
Collection<Wikitty> wikitties, boolean force) {
+
+ // StringUtil.encodeMD5(toEncode)
+
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
// return null;
@@ -195,11 +216,11 @@
@Override
public List<Wikitty> restore(String securityToken, List<String> id) {
// TODO mfortun-2011-04-05
-
+
/*
*
*/
-
+
throw new UnsupportedOperationException("not yet implemented");
// return null;
@@ -265,23 +286,85 @@
}
/**
- * Transform an object into a wikitty object
- * in this case a File into a wikittyPubText/Data
- * @param object the objet to transform
+ * Transform an object into a wikitty object in this case a File into a
+ * wikittyPubText/Data
+ *
+ * @param fileToTransform
+ * the objet to transform
+ * @param starts
+ * the home directory of the fileToTransform use to contruct the
+ * label
* @return the wikitty
* @throws Exception
*/
/*
* TODO mfortun-2011-04-07 correct the Exception's type
*/
- public Wikitty objectToWikitty(Object object) throws Exception {
- if (object instanceof File) {
-
- return null;
+ static public Wikitty fileToWikitty(File fileToTransform, File starts)
+ throws Exception {
+
+ String completeName = fileToTransform.getName();
+ // isolate extension and file name
+
+ String extension = FileUtil.extension(fileToTransform);
+ String name = FileUtil.basename(completeName, "." + extension);
+ // search for the mimetype
+ String mimeType = mimeTypeForExtension(extension);
+
+ // prepare wikitty basics
+ Wikitty result = new WikittyImpl();
+ result.addExtension(WikittyLabelImpl.extensionWikittyLabel);
+
+ /*
+ * TODO mfortun-2011-04-08 need to parse the file name to create the
+ * label need to use starts directory.
+ */
+ String pathToFile = fileToTransform.getCanonicalPath();
+
+ WikittyLabelHelper.addLabels(result, "path");
+
+ // InputStreamReader reader = new InputStreamReader( new
+ // FileReader(object));
+ // reader.
+
+ // complete with the correct extension with content
+ if (isMimeWikittyPubText(mimeType)) {
+ result.addExtension(WikittyPubTextImpl.extensionWikittyPubText);
+ WikittyPubTextHelper.setName(result, name);
+ WikittyPubTextHelper.setMimeType(result, mimeType);
+ WikittyPubTextHelper.setContent(result,
+ FileUtil.readAsString(fileToTransform));
} else {
- throw new Exception();
+ result.addExtension(WikittyPubDataImpl.extensionWikittyPubData);
+ WikittyPubDataHelper.setName(result, name);
+ WikittyPubDataHelper.setMimeType(result, mimeType);
+
+ WikittyPubDataHelper.setContent(result,
+ FileUtil.fileToByte(fileToTransform));
}
+ return result;
+
}
+ /**
+ * Return the mime type for an extension name Extension
+ *
+ * @param ext
+ * @return
+ */
+ static public String mimeTypeForExtension(String ext) {
+ return null;
+ }
+
+ /**
+ * return if the mime type is associate to a wikittypubtext
+ *
+ * @param mime
+ * @return
+ */
+ static public boolean isMimeWikittyPubText(String mime) {
+ return true;
+ }
+
}
1
0
08 Apr '11
Author: jcouteau
Date: 2011-04-08 11:43:14 +0200 (Fri, 08 Apr 2011)
New Revision: 766
Url: http://nuiton.org/repositories/revision/wikitty/766
Log:
* Remove Like and Unlike search
* Create False search
* Add tests for each kind of search
* Associated search do not throw exception when nothing found
* All kind of searches now implemented in InMemorySearchEngine
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java
trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java
Removed:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Like.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Unlike.java
Modified:
trunk/src/site/rst/user/generation.rst.vm
trunk/src/site/site_fr.xml
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/RestrictionName.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java
trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java
trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java
Modified: trunk/src/site/rst/user/generation.rst.vm
===================================================================
--- trunk/src/site/rst/user/generation.rst.vm 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/src/site/rst/user/generation.rst.vm 2011-04-08 09:43:14 UTC (rev 766)
@@ -89,6 +89,13 @@
La génération est effectuée ensuite à chaque fois que vous lancez un build.
+Vous pourriez être étonné que le lien entre vos entités soit représenté par une
+chaîne de caractère. En fait, dans vos entité Wikitty, un lien vers un autre
+Wikitty estreprésenté par son identifiant qui est une chaîne de caractères.
+Ainsi, un getXXXXX vous retournera l'identifiant d'un Wikitty qu'il faudra
+récupérer en passant par le proxy. Vous pouvez alors utiliser le cache pour
+limiter les appels côté serveur.
+
Subtilités de modélisation
==========================
Modified: trunk/src/site/site_fr.xml
===================================================================
--- trunk/src/site/site_fr.xml 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/src/site/site_fr.xml 2011-04-08 09:43:14 UTC (rev 766)
@@ -59,6 +59,8 @@
<item name="Migration" href="user/migration.html"/>
<item name="Hessian" href="user/hessian.html"/>
<item name="Sécurité" href="user/security.html"/>
+ <item name="Recherche" href="user/search.html"/>
+ <item name="FAQ" href="user/faq.html"/>
</menu>
<menu name="Developpeur">
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -24,18 +24,17 @@
*/
package org.nuiton.wikitty.search;
+import org.nuiton.wikitty.search.operators.False;
import org.nuiton.wikitty.search.operators.RestrictionName;
import org.nuiton.wikitty.search.operators.Restriction;
import org.nuiton.wikitty.search.operators.StartsWith;
import org.nuiton.wikitty.search.operators.Not;
-import org.nuiton.wikitty.search.operators.Like;
import org.nuiton.wikitty.search.operators.EndsWith;
import org.nuiton.wikitty.search.operators.And;
import org.nuiton.wikitty.search.operators.Or;
import org.nuiton.wikitty.search.operators.Less;
import org.nuiton.wikitty.search.operators.Greater;
import org.nuiton.wikitty.search.operators.GreaterOrEqual;
-import org.nuiton.wikitty.search.operators.Unlike;
import org.nuiton.wikitty.search.operators.NotEquals;
import org.nuiton.wikitty.search.operators.LessOrEqual;
import org.nuiton.wikitty.search.operators.Keyword;
@@ -90,24 +89,6 @@
return eq;
}
- public static Restriction like(Element element, String value, Like.SearchAs searchAs) {
- Like like = new Like();
- like.setName(RestrictionName.LIKE);
- like.setElement(element);
- like.setValue(value);
- like.setSearchAs(searchAs);
- return like;
- }
-
- public static Restriction unlike(Element element, String value, Like.SearchAs searchAs) {
- Unlike unlike = new Unlike();
- unlike.setName(RestrictionName.UNLIKE);
- unlike.setElement(element);
- unlike.setValue(value);
- unlike.setSearchAs(searchAs);
- return unlike;
- }
-
public static Restriction neq(Element element, String value) {
NotEquals neq = new NotEquals();
neq.setName(RestrictionName.NOT_EQUALS);
@@ -278,6 +259,12 @@
return isNotNull;
}
+ public static False isFalse() {
+ False falseRestriction = new False();
+ falseRestriction.setName(RestrictionName.FALSE);
+ return falseRestriction;
+ }
+
static ThreadLocal<SimpleDateFormat> myFormats = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -25,7 +25,6 @@
package org.nuiton.wikitty.search;
import org.nuiton.wikitty.search.operators.Restriction;
-import org.nuiton.wikitty.search.operators.Like;
import org.nuiton.wikitty.search.operators.SubSearch;
import org.nuiton.wikitty.search.operators.Element;
import java.util.ArrayList;
@@ -159,7 +158,8 @@
* Contains.
*
* @param element
- * @param value
+ * @param value1
+ * @param values
* @return
*/
public Search contains(String element, String value1, String ... values) {
@@ -185,7 +185,8 @@
* Contains.
*
* @param element
- * @param value
+ * @param value1
+ * @param values
* @return
*/
public Search in(String element, String value1, String ... values) {
@@ -209,7 +210,6 @@
/**
* Looking find specific extension
*
- * @param element
* @param value
* @return {@code this}
*/
@@ -221,7 +221,6 @@
/**
* Looking find specific id
*
- * @param element
* @param value
* @return {@code this}
*/
@@ -247,7 +246,6 @@
/**
* Equals each collection elements.
*
- * @param element
* @param values
* @return {@code this}
*/
@@ -259,44 +257,6 @@
}
/**
- * Like.
- *
- * @param element
- * @param value
- * @param searchAs
- * @return {@code this}
- */
- public Search like(String element, String value, Like.SearchAs searchAs) {
- restrictions.add(RestrictionHelper.like(elt(element), value, searchAs));
- return this;
- }
-
- public Search like(String element, String value) {
- restrictions.add(RestrictionHelper.like(
- elt(element), value, Like.SearchAs.AsText));
- return this;
- }
-
- /**
- * Unlike.
- *
- * @param element
- * @param value
- * @param searchAs
- * @return {@code this}
- */
- public Search unlike(String element, String value, Like.SearchAs searchAs) {
- restrictions.add(RestrictionHelper.unlike(elt(element), value, searchAs));
- return this;
- }
-
- public Search unlike(String element, String value) {
- restrictions.add(RestrictionHelper.unlike(
- elt(element), value, Like.SearchAs.AsText));
- return this;
- }
-
- /**
* Not equals.
*
* @param element
@@ -311,7 +271,6 @@
/**
* Not equals.
*
- * @param element
* @param value
* @return {@code this}
*/
@@ -320,10 +279,9 @@
return this;
}
- /**
+ /**
* Not equals.
*
- * @param element
* @param value
* @return {@code this}
*/
@@ -381,11 +339,12 @@
}
/**
- * Between.
+ * Restrict search so that the element value is between lower and upper
+ * values (it can also be equals)
*
- * @param element
- * @param lowerValue
- * @param upperValue
+ * @param element the element you put the restriction on
+ * @param lowerValue the lower bound
+ * @param upperValue the upper bound
* @return {@code this}
*/
public Search bw(String element, String lowerValue, String upperValue) {
@@ -477,6 +436,16 @@
}
/**
+ * False.
+ *
+ * @return {@code this}
+ */
+ public Search isFalse() {
+ restrictions.add(RestrictionHelper.isFalse());
+ return this;
+ }
+
+ /**
* Not (sub query).
*
* @return sub query
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/False.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -0,0 +1,46 @@
+package org.nuiton.wikitty.search.operators;
+
+import java.io.Serializable;
+
+/**
+ * User: couteau
+ * Date: 08/04/11
+ */
+public class False extends Restriction implements Serializable {
+
+ // serialVersionUID is used for serialization.
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Default constructor
+ */
+ public False() {
+ super();
+ }
+
+ /**
+ * Equality test based attributes values
+ *
+ * @param other Value to compare
+ */
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (!(other instanceof False)) {
+ return false;
+ }
+
+ final False falseOther = (False) other;
+
+ return super.equals(falseOther);
+ }
+
+ public int hashCode() {
+ // equals use objects that are not constant through time
+ // then, unable to create hashCode from those objects
+ // returning a constant hash-code
+ return Greater.class.hashCode();
+ }
+
+}
\ No newline at end of file
Deleted: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Like.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Like.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Like.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -1,58 +0,0 @@
-/*
- * #%L
- * Wikitty :: api
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>.
- * #L%
- */
-
-package org.nuiton.wikitty.search.operators;
-
-import java.io.Serializable;
-
-/**
- * Like is use on String field type, to precise some particularity on search.
- *
- * @author ruchaud
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class Like extends BinaryOperator implements Serializable {
-
- // serialVersionUID is used for serialization.
- private static final long serialVersionUID = 1L;
-
- public enum SearchAs {AsText, ToLowerCase};
- protected SearchAs searchAs;
-
- public Like() {
- }
-
- public SearchAs getSearchAs() {
- return searchAs;
- }
-
- public void setSearchAs(SearchAs searchAs) {
- this.searchAs = searchAs;
- }
-
-}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/RestrictionName.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/RestrictionName.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/RestrictionName.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -32,8 +32,6 @@
*/
public enum RestrictionName {
EQUALS,
- LIKE,
- UNLIKE,
NOT_EQUALS,
LESS,
LESS_OR_EQUAL,
Deleted: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Unlike.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Unlike.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Unlike.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -1,59 +0,0 @@
-/*
- * #%L
- * Wikitty :: api
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>.
- * #L%
- */
-package org.nuiton.wikitty.search.operators;
-
-import java.io.Serializable;
-
-import org.nuiton.wikitty.search.operators.Like.SearchAs;
-
-/**
- * UnLike is use on String field type, to precise some particularity on search
- * (case insensitive for example).
- *
- * @author martel
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class Unlike extends BinaryOperator implements Serializable {
-
- // serialVersionUID is used for serialization.
- private static final long serialVersionUID = 1L;
-
- protected SearchAs searchAs;
-
- public Unlike() {
- }
-
- public SearchAs getSearchAs() {
- return searchAs;
- }
-
- public void setSearchAs(SearchAs searchAs) {
- this.searchAs = searchAs;
- }
-
-}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -24,12 +24,17 @@
*/
package org.nuiton.wikitty.storage;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.WikittyUtil;
import org.nuiton.wikitty.entities.FieldType;
import org.nuiton.wikitty.entities.FieldType.TYPE;
import org.nuiton.wikitty.entities.Wikitty;
@@ -38,9 +43,17 @@
import org.nuiton.wikitty.search.TreeNodeResult;
import org.nuiton.wikitty.search.operators.And;
import org.nuiton.wikitty.search.operators.AssociatedRestriction;
+import org.nuiton.wikitty.search.operators.Between;
import org.nuiton.wikitty.search.operators.BinaryOperator;
+import org.nuiton.wikitty.search.operators.Contains;
import org.nuiton.wikitty.search.operators.Element;
+import org.nuiton.wikitty.search.operators.In;
+import org.nuiton.wikitty.search.operators.Keyword;
+import org.nuiton.wikitty.search.operators.Not;
+import org.nuiton.wikitty.search.operators.Null;
+import org.nuiton.wikitty.search.operators.Or;
import org.nuiton.wikitty.search.operators.Restriction;
+import org.nuiton.wikitty.search.operators.RestrictionName;
import org.nuiton.wikitty.services.WikittyTransaction;
public class WikittySearchEngineInMemory implements WikittySearchEngine {
@@ -72,19 +85,52 @@
Restriction restriction, Wikitty w) {
if (restriction instanceof BinaryOperator) {
BinaryOperator binOp = (BinaryOperator) restriction;
- if (binOp.getElement().getName().equals(Element.ELT_EXTENSION)) {
- return w.hasExtension(binOp.getValue());
- }
+
String fqfieldName = binOp.getElement().getName();
+
+ //Checks on extensions
if (Element.ELT_EXTENSION.equals(fqfieldName)) {
- return true;
+ boolean checked = false;
+
+ switch (restriction.getName()) {
+ case NOT_EQUALS:
+ checked = !w.getExtensionNames().contains(binOp.getValue());
+ break;
+ case EQUALS:
+ checked = w.getExtensionNames().contains(binOp.getValue());
+ break;
+ }
+
+ return checked;
+
+ //Checks on id
} else if (Element.ELT_ID.equals(fqfieldName)) {
- return w.getId().equals(binOp.getValue());
- } // si les wikitty n'ont meme pas l'extension concerné
+
+ boolean checked = false;
+
+ switch (restriction.getName()) {
+ case NOT_EQUALS:
+ checked = !w.getId().equals(binOp.getValue());
+ break;
+ case EQUALS:
+ checked = w.getId().equals(binOp.getValue());
+ break;
+ }
+
+ return checked;
+ }
+
+ // si les wikitty n'ont meme pas l'extension concerné
// Le check restriction, ne doit pas tester les champs
// si les wikitty n'ont meme pas l'extension concerné
String[] extName = fqfieldName.split("\\.");
if (!w.hasField(extName[0], extName[1])) {
+
+ //return true in case of not equals
+ if (RestrictionName.NOT_EQUALS == restriction.getName()) {
+ return true;
+ }
+
return false;
}
// recupere la valeur dans le wikitty
@@ -104,9 +150,21 @@
}
value = t.getValidValue(value);
boolean checked = false;
+
switch (restriction.getName()) {
case EQUALS:
- checked = value.equals(o);
+ if (value instanceof String && o instanceof String) {
+
+ String pattern = (String)value;
+ pattern = pattern.replace("*","\\p{ASCII}*");
+ pattern = pattern.replace("?","\\p{ASCII}");
+
+ Pattern p = Pattern.compile(pattern);
+ Matcher m = p.matcher((String)o);
+ checked = m.matches();
+ } else {
+ checked = value.equals(o);
+ }
break;
case LESS:
checked = ((Comparable) o).compareTo(value) < 0;
@@ -137,6 +195,86 @@
break;
}
return checked;
+ } else if (restriction instanceof Null) {
+ Null nullRes = (Null) restriction;
+
+ String fqfieldName = nullRes.getFieldName();
+
+ //check my wikitty got the right extension before doing anything.
+ String[] extName = fqfieldName.split("\\.");
+ if (!w.hasField(extName[0], extName[1])) {
+ return false;
+ }
+ // get the value in the wikitty
+ Object o = w.getFqField(fqfieldName);
+
+ //No null on extensions, always return false
+ if (fqfieldName.equals(Element.ELT_EXTENSION)) {
+ return false;
+ }
+
+ //No null on ids, always return false
+ if (fqfieldName.equals(Element.ELT_ID)) {
+ return false;
+ }
+
+ boolean checked = false;
+
+ switch (nullRes.getName()) {
+ case IS_NULL:
+ checked = (o == null);
+ break;
+ case IS_NOT_NULL:
+ checked = (o != null);
+ break;
+ }
+
+ return checked;
+
+ } else if (restriction instanceof In) {
+ In in = (In) restriction;
+ String fqfieldName = in.getElement().getName();
+ String testedValue = String.valueOf(w.getFqField(fqfieldName));
+ for (String value : in.getValue()){
+ if (testedValue.equals(value)) {
+ return true;
+ }
+ }
+
+ return false;
+
+ } else if (restriction instanceof Contains) {
+ Contains contains = (Contains) restriction;
+
+ String fqfieldName = contains.getElement().getName();
+ List<String> values = contains.getValue();
+
+ String extension = WikittyUtil.getExtensionNameFromFQFieldName(fqfieldName);
+ String fieldName = WikittyUtil.getFieldNameFromFQFieldName(fqfieldName);
+
+ if (!w.hasField(extension, fieldName)) {
+ return false;
+ }
+
+ // Get field as string and then split it to take into account not
+ // multivalued fields.
+ String testedValuesAsString = w.getFieldAsString(extension, fieldName);
+
+ if('[' == testedValuesAsString.charAt(0)){
+ testedValuesAsString = testedValuesAsString.substring(1, testedValuesAsString.length());
+ }
+
+ List<String> testedValues = Arrays.asList(testedValuesAsString.split(","));
+
+
+ for (Object value : values){
+ if (!testedValues.contains(String.valueOf(value))) {
+ return false;
+ }
+ }
+
+ return true;
+
} else if (restriction instanceof And) {
And and = (And) restriction;
for (Restriction sub : and.getRestrictions()) {
@@ -145,6 +283,30 @@
}
}
return true;
+ } else if (restriction instanceof Or) {
+ Or or = (Or) restriction;
+ for (Restriction sub : or.getRestrictions()) {
+ if (checkRestriction(transaction, sub, w)) {
+ return true;
+ }
+ }
+ return false;
+ } else if (restriction instanceof Keyword) {
+ Keyword keyword = (Keyword) restriction;
+
+ String value = keyword.getValue();
+
+ for(String fieldName : w.getAllFieldNames()) {
+ String testedValue = String.valueOf(w.getFqField(fieldName));
+ if (testedValue.contains(value)) {
+ return true;
+ }
+ }
+ return false;
+ } else if (restriction instanceof Not) {
+ Not or = (Not) restriction;
+ Restriction sub = or.getRestriction();
+ return !checkRestriction(transaction, sub, w);
} else if (restriction instanceof AssociatedRestriction) {
AssociatedRestriction ass = (AssociatedRestriction) restriction;
@@ -172,7 +334,62 @@
//Check that my field is contained in the sub-restriction results.
return associatedList.contains(String.valueOf(o));
- } else {
+ } else if (restriction instanceof Between) {
+
+ Between op = (Between) restriction;
+
+ Object max = op.getMax();
+ Object min = op.getMin();
+
+ //No between on extensions, always return false
+ if (op.getElement().getName().equals(Element.ELT_EXTENSION)) {
+ return false;
+ }
+
+ //No between on ids, always return false
+ if (op.getElement().getName().equals(Element.ELT_ID)) {
+ return false;
+ }
+
+ String fqfieldName = op.getElement().getName();
+
+ // si les wikitty n'ont meme pas l'extension concerné
+ // Le check restriction, ne doit pas tester les champs
+ // si les wikitty n'ont meme pas l'extension concerné
+ String[] extName = fqfieldName.split("\\.");
+ if (!w.hasField(extName[0], extName[1])) {
+ return false;
+ }
+
+ // recupere la valeur dans le wikitty
+ Object o = w.getFqField(fqfieldName);
+
+ // recupere le type de la valeur
+ FieldType t = w.getFieldType(fqfieldName);
+
+ if (!(min instanceof Collection) && t.isCollection()) {
+ // on doit encapsuler dans une collection, car la creation
+ // de la requete ajoute autant de v == o && ... que de valeurs
+ // dans la collection (champs multi-value solr). Mais
+ // dans le inmemory on doit retrouve des collections et non pas
+ // des objets seuls :(
+ min = Collections.singleton(min);
+ }
+ min = t.getValidValue(min);
+
+ if (!(max instanceof Collection) && t.isCollection()) {
+ // on doit encapsuler dans une collection, car la creation
+ // de la requete ajoute autant de v == o && ... que de valeurs
+ // dans la collection (champs multi-value solr). Mais
+ // dans le inmemory on doit retrouve des collections et non pas
+ // des objets seuls :(
+ max = Collections.singleton(max);
+ }
+ max = t.getValidValue(max);
+
+ return ((Comparable) o).compareTo(min) >= 0
+ && ((Comparable) o).compareTo(max) <= 0;
+ } else{
throw new UnsupportedOperationException(restriction.getName() + " Search Not yet implemented");
}
}
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-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -6,7 +6,6 @@
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.entities.ExtensionFactory;
-import org.nuiton.wikitty.entities.FieldFactory;
import org.nuiton.wikitty.entities.FieldType;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
@@ -28,6 +27,7 @@
public static final String PRODUCT_CATEGORY = "category";
public static final String CATEGORY_NAME = "name";
public static final String VERSION = "1.0";
+ public static String W_ID ="";
protected WikittyProxy proxy = new WikittyProxy(getWikittyService());
@@ -96,9 +96,411 @@
product3.setField(EXT_PRODUCT, PRODUCT_CATEGORY, category2.getId());
proxy.store(product3);
+ W_ID = product3.getId();
+
}
@Test
+ public void testEq() throws Exception {
+
+ Search query = Search.query().eq("Product.price", "3");
+
+ Criteria eqCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(eqCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+
+ //Test using pattern matching
+ Search query2 = Search.query().eq("Product.name", "*dri*");
+
+ Criteria eqCriteria2 = query2.criteria();
+
+ PagedResult<Wikitty> results2 = proxy.findAllByCriteria(eqCriteria2);
+
+ Assert.assertEquals(1, results2.getAll().size());
+
+ Wikitty resultW2 = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW2.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW2.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+ //Test using pattern matching
+ Search query3 = Search.query().eq("Product.name", "*dri?er");
+
+ Criteria eqCriteria3 = query3.criteria();
+
+ PagedResult<Wikitty> results3 = proxy.findAllByCriteria(eqCriteria3);
+
+ Assert.assertEquals(1, results3.getAll().size());
+
+ Wikitty resultW3 = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW3.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW3.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+ }
+
+ @Test
+ public void testNeq() throws Exception {
+ Search query = Search.query().neq("Product.price", "3");
+
+ Criteria neqCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(neqCriteria);
+
+ Assert.assertEquals(4, results.getAll().size());
+
+ }
+
+ @Test
+ public void testBw() throws Exception {
+
+ Search query = Search.query().bw("Product.price", "3", "5");
+
+ Criteria bwCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+ }
+
+ @Test
+ public void testLt() throws Exception {
+
+ Search query = Search.query().lt("Product.price", "20");
+
+ Criteria bwCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+ }
+
+ @Test
+ public void testLe() throws Exception {
+
+ Search query = Search.query().le("Product.price", "20");
+
+ Criteria bwCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
+
+ Assert.assertEquals(2, results.getAll().size());
+ }
+
+ @Test
+ public void testGt() throws Exception {
+
+ Search query = Search.query().gt("Product.price", "20");
+
+ Criteria bwCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Paint Blue", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(22, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+ }
+
+ @Test
+ public void testGe() throws Exception {
+
+ Search query = Search.query().ge("Product.price", "20");
+
+ Criteria bwCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
+
+ Assert.assertEquals(2, results.getAll().size());
+
+ }
+
+ @Test
+ public void testContains() throws Exception {
+
+ Search query = Search.query().contains("Product.price", "3");
+
+ Criteria inCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(inCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+ //TODO JC-07-04-2011 do a test with multi-valued field
+
+ }
+
+ @Test
+ public void testIn() throws Exception {
+
+ Search query = Search.query().in("Product.price","1","2","3","4","5");
+
+ Criteria inCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(inCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+ }
+
+ @Test
+ public void testExteq() throws Exception {
+ Search query = Search.query().exteq(EXT_PRODUCT);
+
+ Criteria exteqCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(exteqCriteria);
+
+ Assert.assertEquals(3, results.getAll().size());
+ }
+
+ @Test
+ public void testExtneq() throws Exception {
+ Search query = Search.query().extneq(EXT_PRODUCT);
+
+ Criteria extneqCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(extneqCriteria);
+
+ Assert.assertEquals(2, results.getAll().size());
+
+ }
+
+ @Test
+ public void testIdeq() throws Exception {
+ Search query = Search.query().ideq(W_ID);
+
+ Criteria ideqCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(ideqCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Paint Blue", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(22, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+ }
+
+ @Test
+ public void testIdneq() throws Exception {
+
+ Search query = Search.query().idneq(W_ID);
+
+ Criteria idneqCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(idneqCriteria);
+
+ Assert.assertEquals(4, results.getAll().size());
+ }
+
+ @Test
+ public void testUnlike() throws Exception {
+ /*Search query = Search.query().unlike("Product.name", "*dri*");
+
+ Criteria likeCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(likeCriteria);
+
+ Assert.assertEquals(4, results.getAll().size());*/
+ }
+
+ @Test
+ public void testSw() throws Exception {
+ Search query = Search.query().sw("Product.name", "Scre");
+
+ Criteria swCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(swCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+ }
+
+ @Test
+ public void testNsw() throws Exception {
+
+ Search query = Search.query().nsw("Product.name", "Scre");
+
+ Criteria nswCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(nswCriteria);
+
+ Assert.assertEquals(4, results.getAll().size());
+ }
+
+ @Test
+ public void testEw() throws Exception {
+
+ Search query = Search.query().ew("Product.name", "ver");
+
+ Criteria ewCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(ewCriteria);
+
+ Assert.assertEquals(1, results.getAll().size());
+
+ Wikitty resultW = results.getFirst();
+
+ Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
+ PRODUCT_NAME));
+ Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
+ PRODUCT_PRICE));
+
+ }
+
+ @Test
+ public void testNotew() throws Exception {
+
+ Search query = Search.query().notew("Product.name", "ver");
+
+ Criteria notewCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(notewCriteria);
+
+ Assert.assertEquals(4, results.getAll().size());
+
+ }
+
+ @Test
+ public void testKeyword() throws Exception {
+
+ Search query = Search.query().keyword("Paint");
+
+ Criteria keywordCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(keywordCriteria);
+
+ Assert.assertEquals(2, results.getAll().size());
+
+ }
+
+ @Test
+ public void testIsNull() throws Exception {
+
+ Search query = Search.query().isNull("Product.name");
+
+ Criteria isNull = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(isNull);
+
+ Assert.assertEquals(0, results.getAll().size());
+
+ }
+
+ @Test
+ public void testIsNotNull() throws Exception {
+
+ Search query = Search.query().isNotNull("Product.name");
+
+ Criteria isNotNull = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(isNotNull);
+
+ Assert.assertEquals(3, results.getAll().size());
+
+ }
+
+ @Test
+ public void testAnd() throws Exception {
+
+ Search query = Search.query().and().bw("Product.price", "15", "25")
+ .sw("Product.name", "Paint");
+
+ Criteria andCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(andCriteria);
+
+ Assert.assertEquals(2, results.getAll().size());
+
+ }
+
+ @Test
+ public void testOr() throws Exception {
+
+ Search query = Search.query();
+
+ query.or().gt("Product.price", "20").sw("Product.name", "Screw");
+
+ Criteria bwCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
+
+ Assert.assertEquals(2, results.getAll().size());
+
+ }
+
+ @Test
+ public void testNot() throws Exception {
+
+ Search query = Search.query();
+
+ query.not().ge("Product.price", "20");
+
+ Criteria bwCriteria = query.criteria();
+
+ PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
+
+ Assert.assertEquals(3, results.getAll().size());
+ }
+
+ @Test
public void testAssociated() throws Exception {
/* Following request mean is :
@@ -108,12 +510,10 @@
*/
Search query = Search.query().bw("Product.price", "15", "25")
- .sw("Product.name", "Paint");
-
- Search associatedSearch = query.associated("Product.category")
+ .sw("Product.name", "Paint").associated("Product.category")
.eq("Category.name", "Hardware");
- Criteria associatedCriteria = associatedSearch.criteria();
+ Criteria associatedCriteria = query.criteria();
PagedResult<Wikitty> results = proxy.findAllByCriteria(associatedCriteria);
@@ -123,7 +523,27 @@
Assert.assertEquals("Paint", resultW.getFieldAsString(EXT_PRODUCT, PRODUCT_NAME));
Assert.assertEquals(20, resultW.getFieldAsInt(EXT_PRODUCT, PRODUCT_PRICE));
+
+
+
+ //Test with an associated search that returns nothing
+ query = Search.query().bw("Product.price", "15", "25")
+ .sw("Product.name", "Paint").associated("Product.category")
+ .eq("Category.name", "don't return anything");
+
+ associatedCriteria = query.criteria();
+
+ results = proxy.findAllByCriteria(associatedCriteria);
+
+ Assert.assertEquals(0, results.getAll().size());
}
+ @Test
+ public void testComplexQueries() throws Exception {
+ //TODO JC-07-04-2011 Write test
+ }
+
+ //TODO JC-07-04-2011 Write test on sortBy, facets, and with other types (date,...)
+
public abstract WikittyService getWikittyService();
}
Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java
===================================================================
--- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -49,15 +49,12 @@
import org.nuiton.wikitty.search.operators.Keyword;
import org.nuiton.wikitty.search.operators.Less;
import org.nuiton.wikitty.search.operators.LessOrEqual;
-import org.nuiton.wikitty.search.operators.Like;
import org.nuiton.wikitty.search.operators.Not;
import org.nuiton.wikitty.search.operators.NotEquals;
import org.nuiton.wikitty.search.operators.Or;
import org.nuiton.wikitty.search.operators.Restriction;
import org.nuiton.wikitty.search.RestrictionHelper;
import org.nuiton.wikitty.search.operators.StartsWith;
-import org.nuiton.wikitty.search.operators.Unlike;
-import org.nuiton.wikitty.search.operators.Like.SearchAs;
import org.nuiton.wikitty.search.operators.Null;
/**
@@ -94,9 +91,9 @@
this.fieldModifer = fieldModifer;
}
- public String toSolr(Restriction restriction) {
+ /*public String toSolr(Restriction restriction) {
return toSolr(restriction, null);
- }
+ }*/
public String toSolr(Restriction restriction, SolrServer solr)
throws WikittyException {
@@ -108,22 +105,16 @@
return false2solr();
case NOT:
Not not = (Not) restriction;
- return not2solr(not);
+ return not2solr(not, solr);
case AND:
And and = (And) restriction;
- return and2solr(and);
+ return and2solr(and, solr);
case OR:
Or or = (Or) restriction;
- return or2solr(or);
+ return or2solr(or, solr);
case EQUALS:
Equals eq = (Equals) restriction;
return eq2solr(eq);
- case LIKE:
- Like like = (Like) restriction;
- return like2solr(like);
- case UNLIKE:
- Unlike unlike = (Unlike) restriction;
- return unlike2solr(unlike);
case NOT_EQUALS:
NotEquals neq = (NotEquals) restriction;
return neq2solr(neq);
@@ -199,7 +190,7 @@
}
private String associated2solr(AssociatedRestriction associated, SolrServer solr) throws WikittyException {
- String subQuery = toSolr( associated.getRestriction() );
+ String subQuery = toSolr( associated.getRestriction(), solr);
SolrQuery query = new SolrQuery(WikittySolrConstant.SOLR_QUERY_PARSER + subQuery);
query.setRows(MAX_SUBQUERY_RESULT);
QueryResponse resp = null;
@@ -210,12 +201,11 @@
}
SolrDocumentList solrResults = resp.getResults();
- Restriction generatedRestriction = null;
+ Restriction generatedRestriction;
long size = solrResults.size();
if ( size == 0 ) {
- throw new WikittyException("Associated " + associated.getElement().getName() + " do not retrieved any result");
- }
- if ( size == 1 ) {
+ generatedRestriction = RestrictionHelper.isFalse();
+ } else if ( size == 1 ) {
generatedRestriction = RestrictionHelper.eq( associated.getElement(),
(String) solrResults.get(0).getFieldValue(WikittySolrConstant.SOLR_ID) );
} else {
@@ -234,17 +224,17 @@
} else {
and = RestrictionHelper.and( Arrays.asList(new Restriction[]{ associated.getParentRestrictionDto(), generatedRestriction }) );
}
- return toSolr(and);
+ return toSolr(and, solr);
}
- private String not2solr(Not not) throws WikittyException {
+ private String not2solr(Not not, SolrServer solr) throws WikittyException {
if (not.getRestriction() == null) {
throw new WikittyException( "not.restriction" );
}
- return "( *:* - " + toSolr(not.getRestriction()) + " )";
+ return "( *:* - " + toSolr(not.getRestriction(), solr) + " )";
}
- private String and2solr(And and) throws WikittyException {
+ private String and2solr(And and, SolrServer solr) throws WikittyException {
if (and.getRestrictions() == null) {
throw new WikittyException( "and.restrictions is null" );
}
@@ -255,16 +245,16 @@
StringBuffer result = new StringBuffer();
for (Restriction restriction : and.getRestrictions()) {
if (first) {
- result.append("( ").append(toSolr(restriction));
+ result.append("( ").append(toSolr(restriction, solr));
first = false;
} else {
- result.append(" AND ").append(toSolr(restriction));
+ result.append(" AND ").append(toSolr(restriction, solr));
}
}
return result.append(" )").toString();
}
- private String or2solr(Or or) throws WikittyException {
+ private String or2solr(Or or, SolrServer solr) throws WikittyException {
if (or.getRestrictions() == null) {
throw new WikittyException("or.restrictions is null");
}
@@ -280,7 +270,7 @@
} else {
result.append(" OR ");
}
- result.append(toSolr(restriction));
+ result.append(toSolr(restriction, solr));
}
return result.append(" )").toString();
}
@@ -289,54 +279,6 @@
return element2solr(eq.getElement()) + ":" + value2solr(eq.getValue());
}
- private String like2solr(Like like) throws WikittyException {
- SearchAs searchAs = like.getSearchAs();
- String element2solr = element2solr(like.getElement());
- if(element2solr.endsWith(WikittySolrConstant.SUFFIX_STRING)) { // is string
- switch(searchAs) {
- case AsText:
- element2solr += WikittySolrConstant.SUFFIX_STRING_FULLTEXT;
- break;
- case ToLowerCase:
- element2solr += WikittySolrConstant.SUFFIX_STRING_LOWERCASE;
- break;
- }
- }
-
- // Warning if you need add searchAs, AsText and ToLowerCase need search
- // at lowercase
- String value2solr = value2solr(like.getValue());
- if(!element2solr.endsWith(WikittySolrConstant.SUFFIX_DATE)) { // is not date
- value2solr = value2solr.toLowerCase();
- }
-
- return element2solr + ":" + value2solr;
- }
-
- private String unlike2solr(Unlike unlike) throws WikittyException {
- SearchAs searchAs = unlike.getSearchAs();
- String element2solr = element2solr(unlike.getElement());
- if(element2solr.endsWith(WikittySolrConstant.SUFFIX_STRING)) { // is string
- switch(searchAs) {
- case AsText:
- element2solr += WikittySolrConstant.SUFFIX_STRING_FULLTEXT;
- break;
- case ToLowerCase:
- element2solr += WikittySolrConstant.SUFFIX_STRING_LOWERCASE;
- break;
- }
- }
-
- // Warning if you need add searchAs, AsText and ToLowerCase need search
- // at lowercase
- String value2solr = value2solr(unlike.getValue());
- if(!element2solr.endsWith(WikittySolrConstant.SUFFIX_DATE)) { // is not date
- value2solr = value2solr.toLowerCase();
- }
-
- return "-" + element2solr + ":" + value2solr;
- }
-
private String neq2solr(NotEquals neq)
throws WikittyException {
return "-" + element2solr(neq.getElement()) + ":"
Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java
===================================================================
--- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -695,7 +695,7 @@
if (facetCriteria != null) {
for (Criteria facet : facetCriteria) {
String queryFacet =
- restriction2Solr.toSolr(facet.getRestriction());
+ restriction2Solr.toSolr(facet.getRestriction(), solrServer);
facetQueryToName.put(queryFacet, facet.getName());
query.addFacetQuery(queryFacet);
}
Added: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java
===================================================================
--- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java (rev 0)
+++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -0,0 +1,27 @@
+package org.nuiton.wikitty.storage.solr;
+
+import org.nuiton.wikitty.WikittyConfig;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.api.AbstractSearchTest;
+
+/**
+ * User: couteau
+ * Date: 06/04/11
+ */
+public class SolrSearch2Test extends AbstractSearchTest {
+
+ WikittyService service;
+
+ @Override
+ public WikittyService getWikittyService() {
+
+ if (service == null) {
+ WikittyConfig config = new WikittyConfig();
+ service = new WikittyServiceSolr(config);
+ }
+
+ service.clear(null);
+
+ return service;
+ }
+}
\ No newline at end of file
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-04-07 15:53:15 UTC (rev 765)
+++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-04-08 09:43:14 UTC (rev 766)
@@ -49,7 +49,6 @@
import org.nuiton.wikitty.entities.WikittyGroup;
import org.nuiton.wikitty.entities.WikittyGroupImpl;
import org.nuiton.wikitty.search.operators.Element;
-import org.nuiton.wikitty.search.operators.Like.SearchAs;
import org.nuiton.wikitty.search.RestrictionHelper;
import org.nuiton.wikitty.search.Search;
@@ -351,33 +350,6 @@
}
@Test
- public void testSearchNonSensitive() throws Exception {
-
- Criteria criteria = Search.query()
- .like("Test.name_s", "cHaIsE", SearchAs.ToLowerCase)
- .criteria()
- .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
-
- PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
- List<String> list = result.getAll();
- assertEquals(1, list.size());
-
- Wikitty w = ws.restore(null, list.get(0));
- assertEquals("chaise", w.getFieldAsString("Test", "name"));
- assertEquals(113311, w.getFieldAsInt("Test", "amount"));
- assertEquals(AbstractTestConformance.parse("26/09/2009"), w.getFieldAsDate("Test", "buildDate"));
-
- criteria = Search.query()
- .unlike("Test.name_s", "cHaIsE", SearchAs.ToLowerCase)
- .criteria()
- .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
-
- result = ws.findAllByCriteria(null, criteria)[0];
- list = result.getAll();
- assertEquals(12, list.size());
- }
-
- @Test
public void testFindAllByExample() throws Exception {
Wikitty example = new WikittyImpl();
example.addExtension(extProduct);
@@ -463,7 +435,7 @@
// on ignore ce test car le like toLowercase devrait disparaitre et pour l'instant il ne marche pas :(
// @Ignore
- @Test
+ /*@Test
public void testLikeSearch() throws Exception {
Criteria criteria = Search.query().like("Category.name", "hArDwArE").criteria();
PagedResult<String> pagedResult = ws.findAllByCriteria(null, criteria)[0];
@@ -487,11 +459,11 @@
criteria = Search.query().like("Test.description", "helped").criteria();
pagedResult = ws.findAllByCriteria(null, criteria)[0];
assertEquals(1, pagedResult.getNumFound());
- }
+ }*/
// on ignore ce test car le like toLowercase devrait disparaitre et pour l'instant il ne marche pas :(
// @Ignore
- @Test
+/* @Test
public void testLikeStrict() throws Exception {
Criteria criteria = Search.query()
@@ -514,7 +486,7 @@
result = ws.findAllByCriteria(null, criteria)[0];
list = result.getAll();
assertEquals(5, list.size());
- }
+ }*/
/** test that doing a search with a date criteria is possible */
@Test
@@ -613,10 +585,10 @@
// avec accent specifiquement sur le champs name
// mais sans accent pour la recherche
// et et majuscule
- Criteria criteria = Search.query().like(
+ /*Criteria criteria = Search.query().like(
WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "CECA").criteria();
PagedResult<String> result = ws.findAllByCriteria(null, criteria)[0];
- Assert.assertEquals(1, result.size());
+ Assert.assertEquals(1, result.size());*/
}
}
}
1
0
r765 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 07 Apr '11
by mfortun@users.nuiton.org 07 Apr '11
07 Apr '11
Author: mfortun
Date: 2011-04-07 17:53:15 +0200 (Thu, 07 Apr 2011)
New Revision: 765
Url: http://nuiton.org/repositories/revision/wikitty/765
Log:
Static before visibility, method for operation delete.
Checkout and import complete with the basics, need to check error case.
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-07 12:29:34 UTC (rev 764)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-07 15:53:15 UTC (rev 765)
@@ -4,51 +4,71 @@
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Properties;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.ArgumentsParserException;
+import org.nuiton.util.StringUtil;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyLabel;
import org.nuiton.wikitty.publication.entities.WikittyPubData;
import org.nuiton.wikitty.publication.entities.WikittyPubText;
import org.nuiton.wikitty.search.Criteria;
-import org.nuiton.wikitty.search.PagedResult;
import org.nuiton.wikitty.search.Search;
-///XXX a faire avec applicationConfig faire des trucs et des machins
-/// objectif mercredi ça affiche les trucs depuis le repo
-/// et ça lit en local aussi
-
public class WikittyPublication {
/** to use log facility, just put in your code: log.info(\"...\"); */
final static private Log log = LogFactory.getLog(WikittyPublication.class);
- protected static WikittyPublicationFileSystem wikittyServiceFileSystem;
- protected static ApplicationConfig applicationConfig;
- protected static WikittyProxy proxyWS;
+ static protected WikittyPublicationFileSystem wikittyServiceFileSystem;
+ static protected ApplicationConfig applicationConfig;
+ static protected WikittyProxy proxyWS;
/*
* static string for allias, wrong named attribut TODO mfortun-2011-04-06
* need to set better name
*/
- public static String WITTY_SERVICE_KEY = "wikitty.service.server.url";
- public static String NO_RECURSION_KEY = "norecursion";
- public static String DIRECTORY_KEY = "directory";
- public static String HESSIAN_PROTOCOL_KEY = "hessian";
+ static public String WITTY_SERVICE_KEY = "wikitty.service.server.url";
+ static public String NO_RECURSION_KEY = "norecursion";
+ static public String DIRECTORY_KEY = "directory";
+ static public String HESSIAN_PROTOCOL_KEY = "hessian";
- public static String PROPERTY_DIRECTORY = ".wp";
- public static String WIKITTYPUBLICATION_PROPERTIES_FILE = "ws.properties";
+ static public String DEFAULT_PROPERTY_NAME_SEP = ".";
+ static public String PROPERTY_DIRECTORY = ".wp";
+ static public String WIKITTYPUBLICATION_PROPERTIES_FILE = "ws.properties";
+
+ /*
+ * Need a different file for id and meta information about wikittiesFiles
+ * because with this solution we can simply read the ids with props.keySet()
+ */
+ static public String WIKITTY_ID_PROPERTIES_FILE = "ids.properties";
+ static public String WIKITTY_FILE_META_PROPERTIES_FILE = "meta.properties";
+
+ /*
+ * in the WIKITTY_FILE_META_PROP ERTIES_FILE the keys for version are:
+ * filename + META_SUFFIX_KEY_VERSION we save the id too because with this
+ * solution un case of delete we can easily read the id and make operation
+ * on the wikitty
+ */
+ static public String META_SUFFIX_KEY_VERSION = "version";
+ static public String META_SUFFIX_KEY_CHECKSUM = "checksum";
+ static public String META_SUFFIX_KEY_ID = "id";
+
+ static public String META_CURRENT_LABEL = "current.label";
+ static public String META_SUB_LABEL = "sub.label";
+
/**
* @param args
* @throws ArgumentsParserException
*/
- public static void main(String[] args) throws Exception {
+ static public void main(String[] args) throws Exception {
/*
*
@@ -132,7 +152,7 @@
/**
* Method that import the content of a directory into a wikitty service
*/
- public static void importToWikitty() throws Exception {
+ static public void importToWikitty() throws Exception {
boolean noRecur = applicationConfig
.getOptionAsBoolean(NO_RECURSION_KEY);
@@ -167,7 +187,7 @@
* TODO mfortun-2011-04-05 just prototyping, remove when really implements
* the method linked: importToWikitty
*/
- public static void printDirectory(File dir, boolean recur) {
+ static public void printDirectory(File dir, boolean recur) {
System.out.println("<dir " + dir.getName() + ">");
for (File child : dir.listFiles()) {
@@ -191,7 +211,7 @@
* boolean id the directory have to be harvest
* @return list of harvested file
*/
- protected static List<File> listFile(File starts, boolean recursivly) {
+ static protected List<File> listFile(File starts, boolean recursivly) {
ArrayList<File> result = new ArrayList<File>();
result.add(starts);
for (File child : starts.listFiles()) {
@@ -210,7 +230,7 @@
* Method that checkout a label recursivly or not into a local directory
* from a wikitty service
*/
- public static void checkoutFromWikitty(String label) throws Exception {
+ static public void checkoutFromWikitty(String label) throws Exception {
boolean noRecur = applicationConfig
.getOptionAsBoolean(NO_RECURSION_KEY);
@@ -296,7 +316,7 @@
/**
* Relocate the default url of the wikitty service
*/
- public static void relocateWikitty() throws Exception {
+ static public void relocateWikitty() throws Exception {
/*
* log.info("checkout : wikittyservice: " + wikittyService +
@@ -349,12 +369,6 @@
props.store(new FileWriter(propertiesFile), "");
/*
- * Properties props=new Properties(); props.load(new FileReader(new
- * File("/home/Manou/temp.properties")));
- * applicationConfig.setOptions(props);
- */
-
- /*
* on va commencer par vérifier les arguments ''wp relocate [nouvelle
* url du WikittyService par defaut] [directory a relocaliser]'' on doit
* avoir trois string dans le unparsed: url et directory
@@ -365,7 +379,7 @@
/**
* commit the current wikittyworkspace into a wikitty service
*/
- public static void commitToWikitty() throws Exception {
+ static public void commitToWikitty() throws Exception {
File dir = applicationConfig.getOptionAsFile(DIRECTORY_KEY);
@@ -451,7 +465,7 @@
*
* @throws Exception
*/
- public static void deleteFromWikitty(File toDelete) throws Exception {
+ static public void deleteFromWikitty(File toDelete) throws Exception {
// check args
if (null == toDelete || !toDelete.exists()) {
@@ -518,7 +532,7 @@
/**
* update the current workspace from a wikitty
*/
- public static void updateFromWikitty() throws Exception {
+ static public void updateFromWikitty() throws Exception {
File dir = applicationConfig.getOptionAsFile(DIRECTORY_KEY);
@@ -583,7 +597,7 @@
* @return File the directory container of the master property file
* @throws Exception
*/
- protected static File searchWikittyPublicationHomeDir(File start)
+ static protected File searchWikittyPublicationHomeDir(File start)
throws Exception {
if (start != null && start.exists() && start.isDirectory()) {
@@ -610,4 +624,69 @@
}
}
+ static protected HashMap<String, String> deleteFile(File toDelete)
+ throws Exception {
+ HashMap<String, String> result = new HashMap<String, String>();
+
+ String pathToProperty = toDelete.getCanonicalFile() + File.separator
+ + PROPERTY_DIRECTORY + File.separator;
+ // load properties files
+ File metaFile = new File(pathToProperty
+ + WIKITTY_FILE_META_PROPERTIES_FILE);
+ Properties metaProperties = new Properties();
+ metaProperties.load(new FileReader(metaFile));
+
+ File idFile = new File(pathToProperty + WIKITTY_ID_PROPERTIES_FILE);
+ Properties idProperties = new Properties();
+ idProperties.load(new FileReader(idFile));
+
+ if (toDelete.isDirectory()) {
+ for (File child : toDelete.listFiles()) {
+ if (child.isDirectory()
+ && !child.getName().equals(PROPERTY_DIRECTORY)) {
+ result.putAll(deleteFile(child));
+ }
+ }
+ // remove label from current label list
+ /*
+ * TODO mfortun-2011-04-07 it's ugly change this, if we keep the
+ * property linked
+ */
+ String[] currents = StringUtil.split(
+ metaProperties.getProperty(META_SUB_LABEL), ",");
+ ArrayList<String> subLabel = new ArrayList<String>();
+ for (String sub : currents) {
+ if (!sub.endsWith(toDelete.getName())) {
+ subLabel.add(sub);
+ }
+ }
+ String subLabelResult = StringUtil.join(subLabel, ",", true);
+ metaProperties.put(META_SUB_LABEL, subLabelResult);
+
+ } else {
+
+ String id = metaProperties.getProperty(toDelete.getName()
+ + DEFAULT_PROPERTY_NAME_SEP + META_SUFFIX_KEY_ID);
+ String label = metaProperties.getProperty(META_CURRENT_LABEL);
+
+ result.put(id, label);
+ // remove from properties
+ idProperties.remove(id);
+
+ metaProperties.remove(toDelete.getName()
+ + DEFAULT_PROPERTY_NAME_SEP + META_SUFFIX_KEY_ID);
+ metaProperties.remove(toDelete.getName()
+ + DEFAULT_PROPERTY_NAME_SEP + META_SUFFIX_KEY_CHECKSUM);
+ metaProperties.remove(toDelete.getName()
+ + DEFAULT_PROPERTY_NAME_SEP + META_SUFFIX_KEY_VERSION);
+ }
+
+ metaProperties.store(new FileWriter(metaFile), "");
+ idProperties.store(new FileWriter(idFile), "");
+
+ toDelete.delete();
+ return result;
+
+ }
+
}
1
0
r764 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 07 Apr '11
by mfortun@users.nuiton.org 07 Apr '11
07 Apr '11
Author: mfortun
Date: 2011-04-07 14:29:34 +0200 (Thu, 07 Apr 2011)
New Revision: 764
Url: http://nuiton.org/repositories/revision/wikitty/764
Log:
change protyping code to real method in the 'main' class, add a method in my wikitty service to convert ObjectToWikitty
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-06 15:52:16 UTC (rev 763)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublication.java 2011-04-07 12:29:34 UTC (rev 764)
@@ -11,6 +11,13 @@
import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.ArgumentsParserException;
import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyLabel;
+import org.nuiton.wikitty.publication.entities.WikittyPubData;
+import org.nuiton.wikitty.publication.entities.WikittyPubText;
+import org.nuiton.wikitty.search.Criteria;
+import org.nuiton.wikitty.search.PagedResult;
+import org.nuiton.wikitty.search.Search;
///XXX a faire avec applicationConfig faire des trucs et des machins
/// objectif mercredi ça affiche les trucs depuis le repo
@@ -125,7 +132,7 @@
/**
* Method that import the content of a directory into a wikitty service
*/
- public static void importToWikitty() {
+ public static void importToWikitty() throws Exception {
boolean noRecur = applicationConfig
.getOptionAsBoolean(NO_RECURSION_KEY);
@@ -136,21 +143,24 @@
+ noRecur + " directory= " + dir.getAbsolutePath());
// usage: wp --norecursion --ws http://truc.com import --dir /home/Manou
- /*
- * Ici il y aura une moulinette pour la création des wikittys des
- * nouveaux fichiers. Possible de faire la même moulinette au niveau des
- * commits, update et tout ça puisque on pourra faire la différence des
- * fichiers envoyés, déclaré en tant que wikitty et ceux qui éxiste,
- * risque d'avoir une mauvaise cohésion ? cohérence ?
- */
+ // real code:
+ wikittyServiceFileSystem = new WikittyPublicationFileSystem(dir);
+ proxyWS = new WikittyProxy(applicationConfig);
- /*
- * TODO mfortun-2011-04-05 just prototyping, remove when really
- * implements the method
- */
- System.out.println("import :\n");
- printDirectory(dir, !noRecur);
+ // load the list of file
+ List<File> toTransfert = listFile(dir, !noRecur);
+ List<Wikitty> listWikitty = new ArrayList<Wikitty>();
+ // transform file into wikitties
+
+ for (File fileToTransform : toTransfert) {
+ listWikitty.add(wikittyServiceFileSystem
+ .objectToWikitty(fileToTransform));
+ }
+
+ // send the wikitties
+ proxyWS.storeWikitty(listWikitty);
+
}
/*
@@ -200,7 +210,7 @@
* Method that checkout a label recursivly or not into a local directory
* from a wikitty service
*/
- public static void checkoutFromWikitty(String label) {
+ public static void checkoutFromWikitty(String label) throws Exception {
boolean noRecur = applicationConfig
.getOptionAsBoolean(NO_RECURSION_KEY);
@@ -215,7 +225,37 @@
+ "HessianProtocol=" + hessianProtocole);
proxyWS = new WikittyProxy(applicationConfig);
+ wikittyServiceFileSystem = new WikittyPublicationFileSystem(dir);
+ // Construct the criteria
+ Criteria labelCriteria;
+ Search mainRequest = Search.query();
+ Search subRoqu = mainRequest.or();
+
+ // must have the type of wikittypubtext/wikittypubdata
+ subRoqu.exteq(WikittyPubText.EXT_WIKITTYPUBTEXT).exteq(
+ WikittyPubData.EXT_WIKITTYPUBDATA);
+ if (noRecur) {
+ // and extension with the name strictly equals to the label (no
+ // recursivity)
+ labelCriteria = mainRequest.exteq(WikittyLabel.EXT_WIKITTYLABEL)
+ .eq(WikittyLabel.FQ_FIELD_WIKITTYLABEL_LABELS, label)
+ .criteria();
+
+ } else {
+ // and extension with the name that containt the label (recursivity)
+ labelCriteria = mainRequest.exteq(WikittyLabel.EXT_WIKITTYLABEL)
+ .sw(WikittyLabel.FQ_FIELD_WIKITTYLABEL_LABELS, label)
+ .criteria();
+ }
+
+ // request to the proxy
+ List<Wikitty> wikittiesToWrite = proxyWS.findAllByCriteria(
+ labelCriteria).getAll();
+
+ // write the wikities
+ wikittyServiceFileSystem.store("", wikittiesToWrite, true);
+
/*
* obtain the list of wikittypub and write then in the file system with
* the appropriate wikittyservice !
@@ -232,6 +272,17 @@
"org.nuiton.wikitty.services.WikittyServiceCajoClient");
}
+ // create the properties directory
+ File wpDirectory = new File(dir.getCanonicalPath() + File.separator
+ + PROPERTY_DIRECTORY + File.separator);
+ if (!wpDirectory.exists()) {
+ wpDirectory.createNewFile();
+ }
+
+ File propertiesFiles = new File(wpDirectory.getCanonicalPath()
+ + File.separator + WIKITTYPUBLICATION_PROPERTIES_FILE);
+
+ props.store(new FileWriter(propertiesFiles), "");
/*
* on va commencer par vérifier les arguments ''wp checkout
* [--norecursion] [url du WikittyService] [Label à extraire] [directory
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-06 15:52:16 UTC (rev 763)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFileSystem.java 2011-04-07 12:29:34 UTC (rev 764)
@@ -1,5 +1,6 @@
package org.nuiton.wikitty.publication;
+import java.io.File;
import java.util.Collection;
import java.util.List;
@@ -14,19 +15,37 @@
import org.nuiton.wikitty.services.WikittyEvent;
import org.nuiton.wikitty.services.WikittyListener;
-
public class WikittyPublicationFileSystem implements WikittyService {
/** to use log facility, just put in your code: log.info(\"...\"); */
- final static private Log log = LogFactory.getLog(WikittyPublicationFileSystem.class);
+ final static private Log log = LogFactory
+ .getLog(WikittyPublicationFileSystem.class);
+ protected File homeFile;
+
+ /**
+ * Constructor with the working directory
+ * @param home the home directory
+ */
+ public WikittyPublicationFileSystem(File home){
+ this.setHomeFile(home);
+ }
+
+ public File getHomeFile() {
+ return homeFile;
+ }
+ public void setHomeFile(File homeFile) {
+ this.homeFile = homeFile;
+ }
+
+
@Override
public void addWikittyServiceListener(WikittyListener listener,
ServiceListenerType type) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
//
-
+
}
@Override
@@ -35,15 +54,15 @@
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
//
-
+
}
@Override
public String login(String login, String password) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -51,55 +70,55 @@
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
//
-
+
}
@Override
public WikittyEvent clear(String securityToken) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
public boolean canWrite(String securityToken, Wikitty wikitty) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return false;
-
+ // return false;
+
}
@Override
public boolean canDelete(String securityToken, String wikittyId) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return false;
-
+ // return false;
+
}
@Override
public boolean canRead(String securityToken, String wikittyId) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return false;
-
+ // return false;
+
}
@Override
public boolean exists(String securityToken, String wikittyId) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return false;
-
+ // return false;
+
}
@Override
public boolean isDeleted(String securityToken, String wikittyId) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return false;
-
+ // return false;
+
}
@Override
@@ -107,8 +126,8 @@
boolean force) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -116,16 +135,16 @@
Collection<Wikitty> wikitties, boolean force) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
public List<String> getAllExtensionIds(String securityToken) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -133,8 +152,8 @@
String extensionName) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -142,8 +161,8 @@
Collection<WikittyExtension> exts) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -151,8 +170,8 @@
Collection<String> extNames) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -160,8 +179,8 @@
String extensionId) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -169,24 +188,29 @@
String name) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
public List<Wikitty> restore(String securityToken, List<String> id) {
// TODO mfortun-2011-04-05
+
+ /*
+ *
+ */
+
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
public WikittyEvent delete(String securityToken, Collection<String> ids) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -194,24 +218,24 @@
Criteria... criteria) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
public String[] findByCriteria(String securityToken, Criteria... criteria) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
public WikittyEvent deleteTree(String securityToken, String treeNodeId) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -219,8 +243,8 @@
String wikittyId, int depth, boolean count, Criteria filter) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -228,8 +252,8 @@
String version) {
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
- //return null;
-
+ // return null;
+
}
@Override
@@ -237,11 +261,27 @@
// TODO mfortun-2011-04-05
throw new UnsupportedOperationException("not yet implemented");
//
-
+
}
-
-
+ /**
+ * Transform an object into a wikitty object
+ * in this case a File into a wikittyPubText/Data
+ * @param object the objet to transform
+ * @return the wikitty
+ * @throws Exception
+ */
+ /*
+ * TODO mfortun-2011-04-07 correct the Exception's type
+ */
+ public Wikitty objectToWikitty(Object object) throws Exception {
+ if (object instanceof File) {
+
+ return null;
+ } else {
+ throw new Exception();
+ }
+ }
}
1
0