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
- 1653 discussions
Author: jcouteau
Date: 2011-04-11 15:40:25 +0200 (Mon, 11 Apr 2011)
New Revision: 776
Url: http://nuiton.org/repositories/revision/wikitty/776
Log:
Add faq and search doc
Added:
trunk/src/site/rst/user/faq.rst
trunk/src/site/rst/user/search.rst
Added: trunk/src/site/rst/user/faq.rst
===================================================================
--- trunk/src/site/rst/user/faq.rst (rev 0)
+++ trunk/src/site/rst/user/faq.rst 2011-04-11 13:40:25 UTC (rev 776)
@@ -0,0 +1,41 @@
+=========================
+FAQ - Foire aux questions
+=========================
+
+Comment récupérer uniquement les objets que l'utilisateur peut lire ?
+=====================================================================
+
+Dans Wikitty, si vous gérez la sécurité et qu'un utilisateur n'a pas le droit de
+lire un objet que vous demandez, null sera retourné. Dans le cas de listes
+d'objets, cela peut vite devenir génant de devoir vérifier que l'objet retourné
+n'est pas nul. Une manière de contourner ceci est de limiter les résultats de
+recherche aux objets que l'utilisateur à le droit de lire.
+
+Exemple
+~~~~~~~
+
+Dans cet exemple, le droit de lecture est accordé au privateGroup. On vérifie
+donc que l'utilisateur authentifié fait soit partie du privateGroup soit on
+restreint les résultats aux objets dont le reader n'est pas le privateGroup::
+
+
+// Récupère le privateGroup (méthode métier)
+WikittyGroup privateGroup = getPrivateGroup();
+
+// Récupère l'utilisateur authentifié
+WikittyUser user = getLoggedInUser();
+
+// Récupère les membres du privateGroup
+Set<String> members = privateGroup.getMembers();
+
+// Vérifie si l'utilisateur fait partie du privateGroup
+if (members != null && user != null &&
+ members.contains(user.getWikittyId())) {
+ // L'utilisateur fait partie du privateGroup, on ne change rien à la
+ // requête.
+} else {
+ // L'utilisateur ne fait pas partie du privateGroup, on restreint
+ // donc les résultats de notre query.
+ query.neq(WikittyAuthorisation.FQ_FIELD_WIKITTYAUTHORISATION_READER,
+ privateGroup.getWikittyId());
+}
\ No newline at end of file
Added: trunk/src/site/rst/user/search.rst
===================================================================
--- trunk/src/site/rst/user/search.rst (rev 0)
+++ trunk/src/site/rst/user/search.rst 2011-04-11 13:40:25 UTC (rev 776)
@@ -0,0 +1,136 @@
+======================
+Recherche avec Wikitty
+======================
+
+Wikitty permet de rechercher parmis les entités enregistrées tout en fournissant
+les fonctionalités de pagination. Pour cela vous pouvez construire
+programmatiquement vos recherches en utilisant un système de Criteria.
+
+Structure d'une requête
+-----------------------
+
+Pour créer une recherche, vous commencez par initier un arbre de contrainte::
+
+Search myQuery = Search.query();
+
+La racine est un noeud ET. Vous pouvez ensuite rajouter des contraintes ou des
+sous-noeuds.
+
+Par exemple, la requette A ET (B OU C) se représente en arbre ::
+
+ET
+|- A
+`- OU
+ |- B
+ `- C
+
+Et de manière programmatique, nous aurons (les contraintes A, B et C sont
+représentées par des méthodes similaires. Elle devraient-être remplacées par les
+vraies méthodes de contrainte)::
+
+//Ajout de la contrainte A
+myQuery.A();
+
+//Ajout du node OU, on le récupère pour lui ajouter des fils
+Search orNode = myQuery.or();
+
+//Ajout des fils du OU
+orNode.B().C();
+
+Les contraintes disponibles
+---------------------------
+
+De nombreuses contraintes sont disponibles pour créer vos recherches :
+
+* Egalité : eq - Vérifie si un champ est égal a une valeur.
+
+* Non égalité : neq - Vérifie si un champ n'est pas égal a une valeur.
+
+* Contient : contains - Vérifie si un champ multivalué contient une valeur.
+
+* Dans : in - Vérifie si un champ est une valeur
+
+* Egalité d'extension : exteq - Vérifie si un Wikitty possède une extension
+
+* Non égalité d'extension : extneq - Vérifie qu'un Wikitty ne porte pas une
+extension.
+
+* Égalité d'extension : ideq - Vérifie qu'un Wikitty porte l'identifiant
+
+* Non égalité d'identifiant : idneq - Vérifie qu'un Wikitty ne porte pas
+l'identifiant.
+
+* Similitude : like - Vérifie qu'une chaîne de caractère est présente dans un
+champ (ex : "pit" est présent dans "chapiteau").
+
+* Non similitude : unlike - Vérifie qu'une chaîne de caractère n'est pas
+présente dans un champ.
+
+* Supérieur strictement : gt - Vérifie qu'un champ est strictement supérieur à
+une valeur.
+
+* Supérieur ou égal : ge - Vérifie si un champ est supérieur ou égal à une
+valeur.
+
+* Inférieur strictement : lt - Vérifie si un champ est strictement inférieur à
+une valeur.
+
+* Inférieur ou égal : le - Vérifie si un champ est inférieur ou égal à une
+valeur.
+
+* Entre : bw - Vérifie si un champ est compris entre deux valeurs.
+
+* Commence par : sw - Vérifie si un champ de type chaîne commence par une valeur.
+
+* Ne commence pas par : nsw - Vérifie si un champ de type chaîne ne commence pas
+par une valeur.
+
+* Termine par : ew - Vérifie si un champ de type chaîne termine par une valeur.
+
+* Ne termine pas par : notew - Vérifie si un champs de type chaîne ne termine
+pas par une valeur.
+
+* Mot-clé : keyword - Vérifie si la valeur est présente dans n'importe quel
+champ du Wikitty.
+
+* Nul : isNull - Vérifie si la valeur d'un champ est nulle.
+
+* Non nul : isNotNull - Vérifie si la valeur d'un champ n'est pas nulle.
+
+Les noeuds à sous-requête
+-------------------------
+
+Les noeuds à sous requêtes permettent de faire des requêtes complexes.
+
+Non : not - Résultat inverse de la sous-requête.
+
+Ou : or - Ou entre les différentes sous-requêtes.
+
+Et : and - Et entre les différentes sous-requêtes.
+
+Requête associée : associated - Permet d'effectuer des jointures.
+
+Les critères
+------------
+
+Les critères de recherches permettent d'ajouter un ordre ou des facettes,. On
+obtient le critère de recherche à partir de la requête en faisant ::
+
+mySearch.criteria();
+
+La recherche
+------------
+
+On effectue une recherche sur un proxy, en utilisant un criteria. Si on ne
+spécifie pas le type d'objet retourné, on obtiendra un Wikitty. Sinon, on
+obtiendra le type d'objet demandé. Cela permet de s'abstraire complètement de
+Wikitty et ne manipuler que des objets métiers.
+
+Les résultats
+-------------
+
+Lorsqu'on effectue une recherche, on obtient un PagedResult. En effet, les
+résultats étant paginés, on obtient tout ou partie des résultats.
+Un PagedResult contient le nombre total de résultats, les résultats de la page
+ainsi que le premier index, le nombre de résultats et les facettes si elles ont
+été utilisées pour la recherche.
\ No newline at end of file
1
0
r775 - 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/resources/org/nuiton wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr
by jcouteau@users.nuiton.org 11 Apr '11
by jcouteau@users.nuiton.org 11 Apr '11
11 Apr '11
Author: jcouteau
Date: 2011-04-11 15:39:40 +0200 (Mon, 11 Apr 2011)
New Revision: 775
Url: http://nuiton.org/repositories/revision/wikitty/775
Log:
Put back Like and Unlike search
Update GWT files
Added:
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/pom.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/resources/org/nuiton/WikittyAPI.gwt.xml
trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java
trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-04-11 09:49:21 UTC (rev 774)
+++ trunk/pom.xml 2011-04-11 13:39:40 UTC (rev 775)
@@ -508,7 +508,7 @@
<!-- common versions used in sub-poms -->
<eugeneVersion>2.3.1</eugeneVersion>
- <nuitonUtilsVersion>2.1-SNAPSHOT</nuitonUtilsVersion>
+ <nuitonUtilsVersion>2.1</nuitonUtilsVersion>
<nuitonI18nVersion>2.2</nuitonI18nVersion>
<processPluginVersion>1.1</processPluginVersion>
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-11 09:49:21 UTC (rev 774)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java 2011-04-11 13:39:40 UTC (rev 775)
@@ -25,6 +25,7 @@
package org.nuiton.wikitty.search;
import org.nuiton.wikitty.search.operators.False;
+import org.nuiton.wikitty.search.operators.Like;
import org.nuiton.wikitty.search.operators.RestrictionName;
import org.nuiton.wikitty.search.operators.Restriction;
import org.nuiton.wikitty.search.operators.StartsWith;
@@ -50,6 +51,7 @@
import java.util.TimeZone;
import org.nuiton.wikitty.search.operators.In;
import org.nuiton.wikitty.search.operators.True;
+import org.nuiton.wikitty.search.operators.Unlike;
/**
* @author "Nicolas Chapurlat" <nicolas.chapurlat(a)logica.com>
@@ -260,6 +262,31 @@
return isNotNull;
}
+ 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;
+
+ }
+
+
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-11 09:49:21 UTC (rev 774)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java 2011-04-11 13:39:40 UTC (rev 775)
@@ -24,6 +24,7 @@
*/
package org.nuiton.wikitty.search;
+import org.nuiton.wikitty.search.operators.Like;
import org.nuiton.wikitty.search.operators.Restriction;
import org.nuiton.wikitty.search.operators.SubSearch;
import org.nuiton.wikitty.search.operators.Element;
@@ -37,11 +38,11 @@
/**
* Helper to create a criteria with a restriction
- *
+ * <p/>
* Element :
* <extensionName>.<fieldName>[.<fieldType>] : search on an extension and field with specific type (optional)
* Criteria.ALL_EXTENSIONS.<fieldName>.<fieldType> : search on all extension and field name with specific type
- *
+ * <p/>
* <fieldType> specify search on field as NUMERIC, STRING, WIKITTY, BOOLEAN, DATE. Use Element.ElementType to specify type.
*/
public class Search {
@@ -456,6 +457,44 @@
}
/**
+ * 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 (sub query).
*
* @return sub query
Added: 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 (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Like.java 2011-04-11 13:39:40 UTC (rev 775)
@@ -0,0 +1,38 @@
+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-11 09:49:21 UTC (rev 774)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/RestrictionName.java 2011-04-11 13:39:40 UTC (rev 775)
@@ -33,6 +33,8 @@
public enum RestrictionName {
EQUALS,
NOT_EQUALS,
+ LIKE,
+ UNLIKE,
LESS,
LESS_OR_EQUAL,
GREATER,
Added: 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 (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/operators/Unlike.java 2011-04-11 13:39:40 UTC (rev 775)
@@ -0,0 +1,32 @@
+package org.nuiton.wikitty.search.operators;
+
+import java.io.Serializable;
+
+/**
+ * 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 Like.SearchAs searchAs;
+
+ public Unlike() {
+ }
+ public Like.SearchAs getSearchAs() {
+ return searchAs;
+ }
+
+ public void setSearchAs(Like.SearchAs searchAs) {
+ this.searchAs = searchAs;
+ }
+}
Modified: trunk/wikitty-api/src/main/resources/org/nuiton/WikittyAPI.gwt.xml
===================================================================
--- trunk/wikitty-api/src/main/resources/org/nuiton/WikittyAPI.gwt.xml 2011-04-11 09:49:21 UTC (rev 774)
+++ trunk/wikitty-api/src/main/resources/org/nuiton/WikittyAPI.gwt.xml 2011-04-11 13:39:40 UTC (rev 775)
@@ -29,6 +29,7 @@
<source path="wikitty">
<exclude name="WikittyConfig.java"/>
+ <exclude name="WikittyServerStart.java"/>
<exclude name="*Abstract.java"/>
<exclude name="*Impl.java"/>
<exclude name="*Helper.java"/>
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-11 09:49:21 UTC (rev 774)
+++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-04-11 13:39:40 UTC (rev 775)
@@ -35,6 +35,8 @@
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.search.operators.Like;
+import org.nuiton.wikitty.search.operators.Unlike;
import org.nuiton.wikitty.services.WikittyTransaction;
import org.nuiton.wikitty.search.operators.And;
import org.nuiton.wikitty.search.operators.AssociatedRestriction;
@@ -99,67 +101,74 @@
throws WikittyException {
// ParameterValidator.checkNullParameter(restriction, "restriction");
switch (restriction.getName()) {
- case TRUE:
- return true2solr();
- case FALSE:
- return false2solr();
- case NOT:
- Not not = (Not) restriction;
- return not2solr(not, solr);
- case AND:
- And and = (And) restriction;
- return and2solr(and, solr);
- case OR:
- Or or = (Or) restriction;
- return or2solr(or, solr);
- case EQUALS:
- Equals eq = (Equals) restriction;
- return eq2solr(eq);
- case NOT_EQUALS:
- NotEquals neq = (NotEquals) restriction;
- return neq2solr(neq);
- case LESS:
- Less less = (Less) restriction;
- return less2solr(less);
- case LESS_OR_EQUAL:
- LessOrEqual lessEq = (LessOrEqual) restriction;
- return lessEq2solr(lessEq);
- case GREATER:
- Greater great = (Greater) restriction;
- return great2solr(great);
- case GREATER_OR_EQUAL:
- GreaterOrEqual greatEq = (GreaterOrEqual) restriction;
- return greatEq2solr(greatEq);
- case BETWEEN:
- Between between = (Between) restriction;
- return between2solr(between);
- case CONTAINS:
- Contains contains = (Contains) restriction;
- return contains2solr(contains);
- case IN:
- In in = (In) restriction;
- return in2solr(in);
- case STARTS_WITH:
- StartsWith start = (StartsWith) restriction;
- return start2solr(start);
- case ENDS_WITH:
- EndsWith end = (EndsWith) restriction;
- return end2solr(end);
- case ASSOCIATED:
- AssociatedRestriction associated = (AssociatedRestriction) restriction;
- return associated2solr(associated, solr);
- case KEYWORD:
- Keyword keyword = (Keyword) restriction;
- return keyword2solr(keyword);
- case IS_NULL:
- Null isNull = (Null) restriction;
- return isNull2solr(isNull);
- case IS_NOT_NULL:
- Null isNotNull = (Null) restriction;
- return isNotNull2solr(isNotNull);
- default:
- throw new WikittyException("this kind of restriction is not supported : "
- + restriction.getName().toString());
+ case TRUE:
+ return true2solr();
+ case FALSE:
+ return false2solr();
+ case NOT:
+ Not not = (Not) restriction;
+ return not2solr(not, solr);
+ case AND:
+ And and = (And) restriction;
+ return and2solr(and, solr);
+ case OR:
+ Or or = (Or) restriction;
+ return or2solr(or, solr);
+ case EQUALS:
+ Equals eq = (Equals) restriction;
+ return eq2solr(eq);
+ case NOT_EQUALS:
+ NotEquals neq = (NotEquals) restriction;
+ return neq2solr(neq);
+ case LESS:
+ Less less = (Less) restriction;
+ return less2solr(less);
+ case LESS_OR_EQUAL:
+ LessOrEqual lessEq = (LessOrEqual) restriction;
+ return lessEq2solr(lessEq);
+ case GREATER:
+ Greater great = (Greater) restriction;
+ return great2solr(great);
+ case GREATER_OR_EQUAL:
+ GreaterOrEqual greatEq = (GreaterOrEqual) restriction;
+ return greatEq2solr(greatEq);
+ case BETWEEN:
+ Between between = (Between) restriction;
+ return between2solr(between);
+ case CONTAINS:
+ Contains contains = (Contains) restriction;
+ return contains2solr(contains);
+ case IN:
+ In in = (In) restriction;
+ return in2solr(in);
+ case STARTS_WITH:
+ StartsWith start = (StartsWith) restriction;
+ return start2solr(start);
+ case ENDS_WITH:
+ EndsWith end = (EndsWith) restriction;
+ return end2solr(end);
+ case LIKE:
+ Like like = (Like) restriction;
+ return like2solr(like);
+ case UNLIKE:
+ Unlike
+ unlike = (Unlike) restriction;
+ return unlike2solr(unlike);
+ case ASSOCIATED:
+ AssociatedRestriction associated = (AssociatedRestriction) restriction;
+ return associated2solr(associated, solr);
+ case KEYWORD:
+ Keyword keyword = (Keyword) restriction;
+ return keyword2solr(keyword);
+ case IS_NULL:
+ Null isNull = (Null) restriction;
+ return isNull2solr(isNull);
+ case IS_NOT_NULL:
+ Null isNotNull = (Null) restriction;
+ return isNotNull2solr(isNotNull);
+ default:
+ throw new WikittyException("this kind of restriction is not supported : "
+ + restriction.getName().toString());
}
}
@@ -400,6 +409,51 @@
return result;
}
+ private String like2solr(Like like) throws WikittyException {
+ Like.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 {
+ Like.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 static String escapeValue(String value) {
final String LUCENE_REPLACE_PATTERN = "\\+" + "|-" + "|&&" + "|\\|"
+ "|!" + "|\\(|\\)" + "|\\[|\\]" + "|\\{|\\}" + "|\"" + "|:";
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-11 09:49:21 UTC (rev 774)
+++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-04-11 13:39:40 UTC (rev 775)
@@ -28,6 +28,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.arjuna.ats.internal.jdbc.drivers.modifiers.list;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
@@ -52,6 +53,7 @@
import org.nuiton.wikitty.search.operators.Element;
import org.nuiton.wikitty.search.RestrictionHelper;
import org.nuiton.wikitty.search.Search;
+import org.nuiton.wikitty.search.operators.Like;
public class SolrSearchTest extends AbstractTestSolr {
@@ -436,7 +438,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, Collections.singletonList(criteria)).get(0);
@@ -460,11 +462,11 @@
criteria = Search.query().like("Test.description", "helped").criteria();
pagedResult = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(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()
@@ -487,7 +489,7 @@
result = ws.findAllByCriteria(null, Collections.singletonList(criteria)).get(0);
list = result.getAll();
assertEquals(5, list.size());
- }*/
+ }
/** test that doing a search with a date criteria is possible */
@Test
@@ -586,10 +588,34 @@
// 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, Collections.singletonList(criteria)).get(0);
- Assert.assertEquals(1, result.size());*/
+ Assert.assertEquals(1, result.size());
}
}
+
+ @Test
+ public void testSearchNonSensitive() throws Exception {
+ Criteria criteria = Search.query()
+ .like("Test.name_s", "cHaIsE", Like.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", Like.SearchAs.ToLowerCase)
+ .criteria()
+ .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
+ result = ws.findAllByCriteria(null, criteria)[0];
+ list = result.getAll();
+ assertEquals(12, list.size());
+ }
}
1
0
r774 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty
by echatellier@users.nuiton.org 11 Apr '11
by echatellier@users.nuiton.org 11 Apr '11
11 Apr '11
Author: echatellier
Date: 2011-04-11 11:49:21 +0200 (Mon, 11 Apr 2011)
New Revision: 774
Url: http://nuiton.org/repositories/revision/wikitty/774
Log:
Fix javadoc
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
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-11 08:46:53 UTC (rev 773)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2011-04-11 09:49:21 UTC (rev 774)
@@ -31,6 +31,11 @@
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.services.WikittyEvent;
import org.nuiton.wikitty.services.WikittyListener;
+import org.nuiton.wikitty.services.WikittyServiceCached;
+import org.nuiton.wikitty.services.WikittyServiceNotifier;
+import org.nuiton.wikitty.services.WikittyServiceSecurity;
+import org.nuiton.wikitty.services.WikittyServiceStorage;
+
import java.util.Collection;
import java.util.List;
import org.nuiton.wikitty.search.TreeNodeResult;
@@ -247,7 +252,7 @@
* extension name must be just the name (extName)
*
* @param securityToken security token
- * @param ids extension's ids to remove
+ * @param extNames extension's names to remove
*/
public WikittyEvent deleteExtension(
String securityToken, Collection<String> extNames);
1
0
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