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
January 2012
- 4 participants
- 128 discussions
r1289 - trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator
by echatellier@users.nuiton.org 06 Jan '12
by echatellier@users.nuiton.org 06 Jan '12
06 Jan '12
Author: echatellier
Date: 2012-01-06 17:53:56 +0100 (Fri, 06 Jan 2012)
New Revision: 1289
Url: http://nuiton.org/repositories/revision/wikitty/1289
Log:
Generated code format
Modified:
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2012-01-06 14:46:27 UTC (rev 1288)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2012-01-06 16:53:56 UTC (rev 1289)
@@ -284,13 +284,12 @@
WikittyTransformerUtil.classToExtensionVariableName(businessEntity, false);
String staticInitializationBody = ""
/*{
- extension<%=businessEntity.getName()%> =
- new WikittyExtension(<%=extensionVariableName%>,
- "<%=extensionVersion%>", // version
- WikittyUtil.tagValuesToMap("<%=tagValues%>"), // tag/values
- <%= requires %>,
- WikittyUtil.buildFieldMapExtension( // building field map
-<%=buildFieldMapExtensionParametersInLine%>));
+ extension<%=businessEntity.getName()%> = new WikittyExtension(<%=extensionVariableName%>,
+ "<%=extensionVersion%>", // version
+ WikittyUtil.tagValuesToMap("<%=tagValues%>"), // tag/values
+ <%= requires %>,
+ WikittyUtil.buildFieldMapExtension( // building field map
+ <%=buildFieldMapExtensionParametersInLine%>));
// init extensions
List<WikittyExtension> exts = new ArrayList<WikittyExtension>();
@@ -594,7 +593,6 @@
addAnnotation(abstractClass, toString, "Override");
setOperationBody(toString, ""
/*{
-
return <%=helperClassName%>.toString(getWikitty());
}*/);
}
1
0
Author: jcouteau
Date: 2012-01-06 15:46:27 +0100 (Fri, 06 Jan 2012)
New Revision: 1288
Url: http://nuiton.org/repositories/revision/wikitty/1288
Log:
Corrections de doc
Modified:
trunk/src/site/rst/user/query.rst
Modified: trunk/src/site/rst/user/query.rst
===================================================================
--- trunk/src/site/rst/user/query.rst 2012-01-06 14:19:35 UTC (rev 1287)
+++ trunk/src/site/rst/user/query.rst 2012-01-06 14:46:27 UTC (rev 1288)
@@ -5,10 +5,10 @@
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 WikittyQueryMaker ou de façon
-textuel en utilisant WikittyQueryParser.
+textuelle en utilisant WikittyQueryParser.
-Au final vous obtenez dans les deux cas un WikittyQuery utilisable pour vos
-recherche pour les méthodes WikittyClient.findXXXX.
+Au final, vous obtenez dans les deux cas un WikittyQuery utilisable pour vos
+recherche par les méthodes WikittyClient.findXXXX.
Utilisation via WikittyClient
-----------------------------
@@ -20,13 +20,13 @@
- findAllByQuery(Class<E>, Query): WikittyQueryResult<E>
- findByQuery(Class<E>, Query): E
-Dans les deux premières méthodes les résultats seront retournés de façon brut
+Dans les deux premières méthodes les résultats seront retournés de façon brute
sous forme de String. Si le résultat représente une entité, le String sera son
id. Si le résultat représente une Date, la date sera la valeur tel que retournée
-par la la méthode WikittyUtil.toString(Date)
+par la méthode WikittyUtil.toString(Date)
Les deux dernières méthodes essaient de convertir le résultat en objet de la
-classe passée en paramètre. Par exemple si vous savez que le résultat sont des
+classe passée en paramètre. Par exemple si vous savez que les résultats sont des
valeurs numeriques vous pouvez passer Number.class en argument.
@@ -51,7 +51,7 @@
.eq(User.ELEMENT_FIELD_USER_FIRSTNAME, "benjamin")
.end();
-Le end() indique que la condition est fini et que l'on souhaite la query
+Le end() indique que la condition est finie et que l'on souhaite la query
Vous pouvez aussi utiliser WikittyQueryParser pour faire le même travail, mais
il est plus sûr d'utiliser le WikittyQueryMaker tant que vous le pouvez::
@@ -59,7 +59,7 @@
WikittyQueryParser parser = WikittyQueryParser.parse(
"User.lastname=poussin User.firstname=benjamin");
-S'il n'y a pas d'opérateur entre deux contrainte un AND est automatiquement
+S'il n'y a pas d'opérateur entre deux contraintes un AND est automatiquement
ajouté.
Les contraintes disponibles
@@ -71,7 +71,7 @@
champs texte, il est possible d'ajouter des "*" en début et en fin de la
chaîne de recherche pour faire l'équivalent d'un startsWith ou endsWith. Si
vous utilisez WikittyQueryMaker les méthodes sw (startsWith) et ew (endsWith)
- font se travail pour vous.::
+ font ce travail pour vous.::
WikittyQuery q = new WikittyQueryMaker().eq(User.ELEMENT_FIELD_USER_LASTNAME, "poussin").end();
WikittyQuery q = new WikittyQueryMaker().eq(User.ELEMENT_FIELD_USER_LASTNAME, "*ssin").end();
@@ -116,7 +116,7 @@
WikittyQuery q = WikittyQueryParser.parse("extension!=User");
-* ContainsAll d'extension : extContainsAll - Vérifie si un Wikitty possède tous
+* ContainsAll d'extension : extContainsAll - Vérifie si un Wikitty possède toutes
les extensions::
WikittyQuery q = new WikittyQueryMaker()
@@ -124,7 +124,7 @@
WikittyQuery q = WikittyQueryParser.parse("extension=[User, Employee]");
-* Égalité d'extension : ideq - Vérifie qu'un Wikitty porte l'identifiant::
+* Égalité d'identifiant : ideq - Vérifie qu'un Wikitty porte l'identifiant::
WikittyQuery q = new WikittyQueryMaker()
.ideq(User.EXT_USER).end();
@@ -140,7 +140,7 @@
WikittyQuery q = WikittyQueryParser.parse("id!=1234567-1234-1234567");
* Similitude : like - Vérifie qu'une chaîne de caractère est égale à une autre
- sans tenir compte de la case ni des accents. Cette opérateur ne recherche que
+ sans tenir compte de la casse ni des accents. Cette opérateur ne recherche que
de façon textuelle, vous pouvez ajouter des '*' en début et fin de d'expression::
WikittyQuery q = new WikittyQueryMaker()
@@ -152,7 +152,7 @@
WikittyQuery q = WikittyQueryParser.parse("User.fistname LIKE *lene");
* Non similitude : unlike - Vérifie qu'une chaîne de caractère n'est pas égale à une autre
- sans tenir compte de la case ni des accents. Cette opérateur ne recherche que
+ sans tenir compte de la casse ni des accents. Cette opérateur ne recherche que
de façon textuelle, vous pouvez ajouter des '*' en début et fin de d'expression::
WikittyQuery q = new WikittyQueryMaker()
@@ -235,7 +235,7 @@
* Mot-clé : keyword - Vérifie si la valeur est présente dans n'importe quel
champ de n'importe quelle extension en fulltext (pas de prise en compte de la
- case out des accents).::
+ casse ou des accents).::
WikittyQuery q = new WikittyQueryMaker()
.keyword("partout").end();
@@ -277,11 +277,12 @@
* Les noeuds à sous requêtes permettent de faire des requêtes complexes.
* Non : not - Résultat inverse de la sous-requête. Permet de faire la négation
- d'une condition. On ne peut ajouter qu'un condition dans un not, il faut
- donc ajouter en premier un or ou un and pour mettre plusieurs condition::
+ d'une condition. On ne peut ajouter qu'une condition dans un not, il faut
+ donc ajouter en premier soit un or, soit un and pour mettre plusieurs
+ conditions::
WikittyQuery q = new WikittyQueryMaker()
- .not().rFalse().end(); // condition toujours vrai
+ .not().rFalse().end(); // condition toujours vraie
WikittyQuery q = WikittyQueryParser.parse("NOT(FALSE)");
@@ -311,7 +312,7 @@
* Requête associée : in - Permet d'effectuer des jointures. Cette opérateur lie
deux requêtes entres elle. Le résultat d'un requête est utilisé comme un
- containsOne dans l'autre. La requête suivante recherche tous les employers
+ containsOne dans l'autre. La requête suivante recherche tous les employés
en CDI, mais seulement ceux dont le nom de leur entreprise contient 'lutin'.::
WikittyQuery q = new WikittyQueryMaker()
@@ -400,7 +401,7 @@
Pour la recherche sur les arbres 3 pseudos champs sont utilisables
-- rootNode: champs contenant l'id de la racinde du nom
+- rootNode: champs contenant l'id de la racine du noeud
- pathNode: champs contenant tous les id de noeuds pour atteindre un noeud (du root au noeud lui même inclus)
- depthNode: entier indiquant la profondeur d'un noeud (root=1)
@@ -461,10 +462,10 @@
* Fermeture d'un noeud: close. Lorsqu'on ouvre un element a sous noeud comme
or, and, not, in, select, il faut pouvoir le fermer pour continuer la
construction de la condition. Pour cela on utilise close(), qui ferme la
- derniere condition non terminal.::
+ dernière condition non terminale.::
WikittyQuery q = new WikittyQueryMaker()
- .and().or()....close(/*fermeture du or*/).close(/*fermeture du or*/)
+ .and().or()....close(/*fermeture du or*/).close(/*fermeture du and*/)
.not().and().....end(/*fermeture de tous les elements non ferme (and, not)*/);
* conversion de type: Il est possible de passer en argument des méthodes des
@@ -480,9 +481,9 @@
WikittyQuery q = new WikittyQueryMaker()
.wikitty(monWikitty).end();
-* Condition: Il est aussi possible d'ajouter toutes une condition déjà
+* Condition: Il est aussi possible d'ajouter toute une condition déjà
construite pour l'intégrer à une nouvelle. Dans ce cas cette condition est
- prise comme une boîte noir, c'est dire comme une condition terminal.::
+ prise comme une boîte noire, c'est à dire comme une condition terminale.::
WikittyQuery qold = ...
@@ -492,7 +493,7 @@
Spécificité de WikittyQueryParser
---------------------------------
-Vous pouvez ajouter des alias pour simplifier l'écriture de certain requête.
+Vous pouvez ajouter des alias pour simplifier l'écriture de certaines requêtes.
Par exemple si vous utilisez souvent une longue requête comme::
@@ -513,7 +514,7 @@
WikittyQuery q = parser.parseQuery(
"MyExt.field=toto AND MyAlias");
-Elle sera transformée avant d'être parser en::
+Elle sera transformée avant d'être parsée en::
WikittyQuery q = parser.parseQuery(
"MyExt.field=toto AND id IN (SELECT WikittyTreeNode.attachment"
@@ -533,7 +534,7 @@
WikittyQuery q = parser.parseQuery(
"MyExt.field=toto AND MyAlias(OtherTree, OtherBranch)");
-Elle sera transformée avant d'être parser en::
+Elle sera transformée avant d'être parsée en::
WikittyQuery q = parser.parseQuery(
"MyExt.field=toto AND id IN (SELECT WikittyTreeNode.attachment"
@@ -549,16 +550,16 @@
WikittyQuery q = WikittyQueryParser.parse("simple OR \"la jolie chaine que je recherche\"");
Il est possible de faire une recherche sur un nom de champs qui peut⁻être utilisé
-par différente extension. Pour cela on remplace le nom d'extension par '*'::
+par différentes extensions. Pour cela on remplace le nom d'extension par '*'::
WikittyQuery q = new WikittyQueryMaker()
.eq(new ElementField(ElementField.ALL_EXTENSION, "name"), "poussin").end();
WikittyQuery q = WikittyQueryParser.parse("*.name==poussin");
-Dans ce cas la recherche est une recherche fulltext qui peut-être utilisé
-quelque soit le type du champs. Mais si vous souhaitez restrainte la recherche
-au champs d'un certain type vous pouvez ajouter le type à la fin.::
+Dans ce cas la recherche est une recherche fulltext qui peut-être utilisée
+quel que soit le type du champs. Mais si vous souhaitez restraindre la recherche
+aux champs d'un certain type vous pouvez ajouter le type à la fin.::
Date _1950 = new Date(...);
Date _1960 = new Date(...);
@@ -581,7 +582,7 @@
Les autres paramètres d'une requête
-----------------------------------
-* Nom : name - Nommage de la requêtes.
+* Nom : name - Nommage de la requête.
* Premier index : first - Permet de définir le premier index à retourner.
Principalement utilisé pour la pagination.
@@ -592,10 +593,10 @@
* facetMinCount: les topics des facettes ayant moins d'occurence que cette valeur
ne sont pas retournés
-* facetLimit: les facettes ramenent au plus se nombre de topics
+* facetLimit: les facettes ramènent au plus ce nombre de topics
-* facetSort: determine l'ordre de tri des topics, il est possible de trier sur
- le nombre d'occurence du topic ou le nom du topic
+* facetSort: détermine l'ordre de tri des topics. Il est possible de trier sur
+ le nombre d'occurences du topic ou le nom du topic
* facetExtension indique de créer une facette sur les extensions des wikitties
@@ -603,7 +604,7 @@
* facetQuery indique de créer une facette grace a une condition. Par exemple au
lieu de creer une facette sur Product.price qui retournerait trop de topics
- il est préférable de créer plusieur facetQuery pour regrouper des prix::
+ il est préférable de créer plusieurs facetQuery pour regrouper des prix::
query.addFacetQuery("0-5", new WikittyQueryMaker().bw("Product.price", 0, 5));
query.addFacetQuery("5-10", new WikittyQueryMaker().bw("Product.price", 5, 10));
1
0
r1287 - in trunk: wikitty-api wikitty-api/src/it/generation wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities4 wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities5 wikitty-api/src/test/java/org/nuiton/wikitty/api wikitty-api/src/test/xmi wikitty-generators/src/main/java/org/nuiton/wikitty/generator
by echatellier@users.nuiton.org 06 Jan '12
by echatellier@users.nuiton.org 06 Jan '12
06 Jan '12
Author: echatellier
Date: 2012-01-06 15:19:35 +0100 (Fri, 06 Jan 2012)
New Revision: 1287
Url: http://nuiton.org/repositories/revision/wikitty/1287
Log:
#1160 : Integration test 2 in fail
#1619 : Add multiple inheritance support
Added:
trunk/wikitty-api/src/test/xmi/multiinheritance.zargo
Modified:
trunk/wikitty-api/pom.xml
trunk/wikitty-api/src/it/generation/pom.xml
trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities4/TestEntities.java
trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities5/TestEntities.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
trunk/wikitty-api/src/test/xmi/wikittytest.zargo
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java
Modified: trunk/wikitty-api/pom.xml
===================================================================
--- trunk/wikitty-api/pom.xml 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-api/pom.xml 2012-01-06 14:19:35 UTC (rev 1287)
@@ -194,10 +194,12 @@
<configuration>
<inputs>
<input>zargo</input>
+ <input>classpath:model:/:wikitty.objectmodel</input>
</inputs>
- <fullPackagePath>org.nuiton.wikitty.entities</fullPackagePath>
- <defaultPackage>org.nuiton.wikitty.entities</defaultPackage>
- <extractedPackages>org.nuiton.wikitty.entities</extractedPackages>
+ <fullPackagePath>org.nuiton.wikitty.test</fullPackagePath>
+ <defaultPackage>org.nuiton.wikitty.test</defaultPackage>
+ <generatedPackages>org.nuiton.wikitty.test</generatedPackages>
+ <extractedPackages>org.nuiton.wikitty</extractedPackages>
<templates>org.nuiton.wikitty.generator.WikittyMetaGenerator</templates>
<outputDirectory>target/generated-test-sources</outputDirectory>
<testPhase>true</testPhase>
@@ -276,12 +278,12 @@
<profile>
<id>run-its</id>
- <!--activation>
+ <activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
- </activation-->
+ </activation>
<build>
<defaultGoal>integration-test</defaultGoal>
<plugins>
Modified: trunk/wikitty-api/src/it/generation/pom.xml
===================================================================
--- trunk/wikitty-api/src/it/generation/pom.xml 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-api/src/it/generation/pom.xml 2012-01-06 14:19:35 UTC (rev 1287)
@@ -6,7 +6,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2006 - 2010 CodeLutin
+ Copyright (C) 2006 - 2012 CodeLutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
@@ -45,7 +45,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>4.8.2</version>
+ <version>4.10</version>
</dependency>
</dependencies>
@@ -97,8 +97,6 @@
</goals>
</execution>
- <!-- FIXME sletellier 23/12/10 : Test in fail (http://www.nuiton.org/issues/show/1160) -->
-
<execution>
<id>entities2 generator</id>
<phase>generate-sources</phase>
@@ -127,8 +125,6 @@
</goals>
</execution>
- <!-- FIXME sletellier 23/12/10 : Test in fail (http://www.nuiton.org/issues/show/1161) -->
-
<execution>
<id>entities4 generator</id>
<phase>generate-sources</phase>
@@ -143,6 +139,8 @@
</goals>
</execution>
+ <!-- fail because of getLogin() et getPassword() method
+ are not inherited from wikittyUser, but in work outside IT
<execution>
<id>entities5 generator</id>
<phase>generate-sources</phase>
@@ -155,8 +153,9 @@
<goals>
<goal>smart-generate</goal>
</goals>
- </execution>
+ </execution> -->
</executions>
+
<dependencies>
<dependency>
<groupId>org.nuiton.wikitty</groupId>
@@ -170,5 +169,3 @@
</build>
</project>
-
-
Modified: trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities4/TestEntities.java
===================================================================
--- trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities4/TestEntities.java 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities4/TestEntities.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -48,8 +48,10 @@
public void testUser2() {
User2 u = new User2Impl();
- u.getLastName();
- u.setLastName("lastName");
+ // wrong code, renamed to "toto"
+ // lastName do not exists anymore
+ //u.getLastName();
+ //u.setLastName("lastName");
u.getToto();
u.setToto("toto");
Modified: trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities5/TestEntities.java
===================================================================
--- trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities5/TestEntities.java 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-api/src/it/generation/src/test/java/org/nuiton/wikitty/test/entities5/TestEntities.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 CodeLutin
+ * Copyright (C) 2009 - 2012 CodeLutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -24,6 +24,7 @@
*/
package org.nuiton.wikitty.test.entities5;
+import org.junit.Ignore;
import org.junit.Test;
/**
@@ -32,19 +33,20 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 3.0
*/
+@Ignore
public class TestEntities {
@Test
public void testUser() {
- User u = new UserImpl();
+ /*User u = new UserImpl();
u.getLastName();
- u.setLastName("lastName");
+ u.setLastName("lastName");*/
}
@Test
public void testAgent() {
- Agent a = new AgentImpl();
+ /*Agent a = new AgentImpl();
a.getLastName();
a.setLastName("lastName");
@@ -56,6 +58,6 @@
a.setLogin("login");
a.getPassword();
- a.setPassword("password");
+ a.setPassword("password");*/
}
}
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 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 CodeLutin
+ * Copyright (C) 2009 - 2012 CodeLutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -33,12 +33,12 @@
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.WikittyUtil;
-import org.nuiton.wikitty.entities.CategoryEntity;
-import org.nuiton.wikitty.entities.CategoryEntityImpl;
+import org.nuiton.wikitty.test.CategoryEntity;
+import org.nuiton.wikitty.test.CategoryEntityImpl;
import org.nuiton.wikitty.entities.ExtensionFactory;
import org.nuiton.wikitty.entities.FieldType;
-import org.nuiton.wikitty.entities.ProductEntity;
-import org.nuiton.wikitty.entities.ProductEntityImpl;
+import org.nuiton.wikitty.test.ProductEntity;
+import org.nuiton.wikitty.test.ProductEntityImpl;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.entities.WikittyImpl;
Added: trunk/wikitty-api/src/test/xmi/multiinheritance.zargo
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-api/src/test/xmi/multiinheritance.zargo
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/wikitty-api/src/test/xmi/wikittytest.zargo
===================================================================
(Binary files differ)
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
+ * Copyright (C) 2009 - 2012 CodeLutin, Benjamin Poussin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -315,137 +315,155 @@
}
protected void addOperations(ObjectModelClass businessEntity, ObjectModelClass abstractClass) {
- String extensionVariableName = WikittyTransformerUtil.classToExtensionVariableName(businessEntity, true);
+
String helperClassName = WikittyTransformerUtil.businessEntityToHelperName(businessEntity);
-
+
// generating operations with bodies to realize contract
for (ObjectModelAttribute attribute : businessEntity.getAttributes()) {
if (attribute.isNavigable()) {
- // needed below, in templates
- String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true);
- String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
-
- String attributeName = attribute.getName();
- if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
- // there is a conflict, purifier transformer give as the right name to use
+
+ // there is a conflict, purifier transformer give as the right name to use
+ String attributeName;
+ if (businessEntity.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + businessEntity.getName() + "." + attribute.getName())) {
+ attributeName = businessEntity.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + businessEntity.getName() + "." + attribute.getName());
+ } else if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
attributeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
+ } else {
+ attributeName = attribute.getName();
}
- String capitalizedAttributeName = StringUtils.capitalize(attributeName);
+ addOperationWithName(businessEntity, abstractClass, attribute, attributeName, helperClassName, attributeName);
+ }
+ }
+ }
- String getterName;
+ protected void addOperationWithName(ObjectModelClass businessEntity, ObjectModelClass abstractClass,
+ ObjectModelAttribute attribute, String getterSetterName, String helperClassName, String helperGetterSetterName) {
+
+ String extensionVariableName = WikittyTransformerUtil.classToExtensionVariableName(businessEntity, true);
- if (WikittyTransformerUtil.isAttributeCollection(attribute)) {
- // attributed is a collection, we will generate operations get, add, remove and clear
+ // needed below, in templates
+ String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true);
+ String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
- String attributeTypeCollectionStrict =
- WikittyTransformerUtil.generateResultType(attribute, true);
- String attributeTypeCollectionGeneric =
- "Collection<" + attributeType + ">";
- String attributeTypeVarargs = attributeType + "...";
-
- String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
+ // getter can have a different name than attribute.getName()
+ // but attribute.getName() must styll be used to access to helper getter method
+ String attributeName = attributeName = attribute.getName();
+ String capitalizedAttributeName = StringUtils.capitalize(attributeName);
+ String capitalizedHelperGetterSetterName= StringUtils.capitalize(helperGetterSetterName);
+ String capitalizedGetterSetterName = StringUtils.capitalize(getterSetterName);
+
+ String getterName;
- // now, for this attribute, we will generate add, remove and clear methods
- // adding operations to contract
- getterName = "get" + StringUtils.capitalize(attributeName);
- ObjectModelOperation getter = addOperation(
- abstractClass, getterName, attributeTypeCollectionStrict);
- addAnnotation(abstractClass, getter, "Override");
- String getterBody = ""
+ if (WikittyTransformerUtil.isAttributeCollection(attribute)) {
+ // attributed is a collection, we will generate operations get, add, remove and clear
+
+ String attributeTypeCollectionStrict =
+ WikittyTransformerUtil.generateResultType(attribute, true);
+ String attributeTypeCollectionGeneric =
+ "Collection<" + attributeType + ">";
+ String attributeTypeVarargs = attributeType + "...";
+
+ String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
+
+ // now, for this attribute, we will generate add, remove and clear methods
+ // adding operations to contract
+ getterName = "get" + capitalizedGetterSetterName;
+ ObjectModelOperation getter = addOperation(
+ abstractClass, getterName, attributeTypeCollectionStrict);
+ addAnnotation(abstractClass, getter, "Override");
+ String getterBody = ""
/*{
- <%=attributeTypeCollectionStrict%> result = <%=helperClassName%>.<%=getterName%>(getWikitty());
- return result;
+<%=attributeTypeCollectionStrict%> result = <%=helperClassName%>.get<%=capitalizedAttributeName%>(getWikitty());
+return result;
}*/;
- setOperationBody(getter, getterBody);
+ setOperationBody(getter, getterBody);
- String setterName = "set" + capitalizedAttributeName;
- ObjectModelOperation setter = addOperation(abstractClass, setterName, "void");
- addAnnotation(abstractClass, setter, "Override");
- addParameter(setter, attributeTypeCollectionStrict, attributeName);
- String setterBody = ""
+ String setterName = "set" + capitalizedGetterSetterName;
+ ObjectModelOperation setter = addOperation(abstractClass, setterName, "void");
+ addAnnotation(abstractClass, setter, "Override");
+ addParameter(setter, attributeTypeCollectionStrict, getterSetterName);
+ String setterBody = ""
/*{
- <%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
- <%=helperClassName%>.<%=setterName%>(getWikitty(), <%=attributeName%>);
- getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>());
+<%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
+<%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>(getWikitty(), <%=attributeName%>);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>());
}*/;
- setOperationBody(setter, setterBody);
+ setOperationBody(setter, setterBody);
- String addAllName = "addAll" + capitalizedAttributeName;
- ObjectModelOperation addAll = addOperation(abstractClass, addAllName, "void");
- addAnnotation(abstractClass, addAll, "Override");
- addParameter(addAll, attributeTypeCollectionGeneric, attributeName);
- String addAllBody = ""
+ String addAllName = "addAll" + capitalizedGetterSetterName;
+ ObjectModelOperation addAll = addOperation(abstractClass, addAllName, "void");
+ addAnnotation(abstractClass, addAll, "Override");
+ addParameter(addAll, attributeTypeCollectionGeneric, attributeName);
+ String addAllBody = ""
/*{
- <%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
- <%=helperClassName%>.<%=addAllName%>(getWikitty(), <%=attributeName%>);
- getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>());
+<%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
+<%=helperClassName%>.addAll<%=capitalizedHelperGetterSetterName%>(getWikitty(), <%=attributeName%>);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>());
}*/;
- setOperationBody(addAll, addAllBody);
+ setOperationBody(addAll, addAllBody);
- String addName = "add" + capitalizedAttributeName;
- ObjectModelOperation adder = addOperation(abstractClass, addName, "void");
- addAnnotation(abstractClass, adder, "Override");
- addParameter(adder, attributeTypeVarargs, "element");
- String adderBody = ""
+ String addName = "add" + capitalizedGetterSetterName;
+ ObjectModelOperation adder = addOperation(abstractClass, addName, "void");
+ addAnnotation(abstractClass, adder, "Override");
+ addParameter(adder, attributeTypeVarargs, "element");
+ String adderBody = ""
/*{
- <%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
- <%=helperClassName%>.<%=addName%>(getWikitty(), element);
- getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>());
+<%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
+<%=helperClassName%>.add<%=capitalizedHelperGetterSetterName%>(getWikitty(), element);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%= getter.getName() %>());
}*/;
- setOperationBody(adder, adderBody);
+ setOperationBody(adder, adderBody);
- String removeName = "remove" + StringUtils.capitalize(attributeName);
- ObjectModelOperation remover = addOperation(abstractClass, removeName, "void");
- addAnnotation(abstractClass, remover, "Override");
- addParameter(remover, attributeTypeVarargs, "element");
- String removerBody = ""
+ String removeName = "remove" + capitalizedGetterSetterName;
+ ObjectModelOperation remover = addOperation(abstractClass, removeName, "void");
+ addAnnotation(abstractClass, remover, "Override");
+ addParameter(remover, attributeTypeVarargs, "element");
+ String removerBody = ""
/*{
- <%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
- <%=helperClassName%>.<%=removeName%>(getWikitty(), element);
- getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getter.getName()%>());
+<%=attributeTypeCollectionStrict%> oldValue = get<%=capitalizedAttributeName%>();
+<%=helperClassName%>.remove<%=capitalizedHelperGetterSetterName%>(getWikitty(), element);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getter.getName()%>());
}*/;
- setOperationBody(remover, removerBody);
+ setOperationBody(remover, removerBody);
- String clearName = "clear" + StringUtils.capitalize(attributeName);
- ObjectModelOperation clear = addOperation(abstractClass, clearName, "void");
- addAnnotation(abstractClass, clear, "Override");
- String clearBody = ""
+ String clearName = "clear" + capitalizedGetterSetterName;
+ ObjectModelOperation clear = addOperation(abstractClass, clearName, "void");
+ addAnnotation(abstractClass, clear, "Override");
+ String clearBody = ""
/*{
- <%=helperClassName%>.<%=clearName%>(getWikitty());
- getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%=getter.getName()%>());
+<%=helperClassName%>.clear<%=capitalizedHelperGetterSetterName%>(getWikitty());
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%=getter.getName()%>());
}*/;
- setOperationBody(clear, clearBody);
+ setOperationBody(clear, clearBody);
- } else {
- String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
-
- // adding getter and setter to contract
- getterName = "get" + StringUtils.capitalize(attributeName);
- ObjectModelOperation getter = addOperation(abstractClass, getterName, attributeType);
- addAnnotation(abstractClass, getter, "Override");
- setOperationBody(getter, ""
+ } else {
+ String getFieldMethodName = WikittyTransformerUtil.generateGetFieldAsCall(attribute);
+
+ // adding getter and setter to contract
+ getterName = "get" + capitalizedGetterSetterName;
+ ObjectModelOperation getter = addOperation(abstractClass, getterName, attributeType);
+ addAnnotation(abstractClass, getter, "Override");
+ setOperationBody(getter, ""
/*{
- <%=attributeType%> value = <%=helperClassName%>.<%=getterName%>(getWikitty());
- return value;
+<%=attributeType%> value = <%=helperClassName%>.get<%=capitalizedHelperGetterSetterName%>(getWikitty());
+return value;
}*/);
- String setterName = "set" + StringUtils.capitalize(attributeName);
- ObjectModelOperation setter = addOperation(abstractClass, setterName, "void");
- addAnnotation(abstractClass, setter, "Override");
- addParameter(setter, attributeType, attributeName);
- setOperationBody(setter, ""
+ String setterName = "set" + capitalizedGetterSetterName;
+ ObjectModelOperation setter = addOperation(abstractClass, setterName, "void");
+ addAnnotation(abstractClass, setter, "Override");
+ addParameter(setter, attributeType, attributeName);
+ setOperationBody(setter, ""
/*{
- <%=attributeType%> oldValue = <%=getterName%>();
- <%=helperClassName%>.<%=setterName%>(getWikitty(), <%=attributeName%>);
- getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getter.getName()%>());
+<%=attributeType%> oldValue = <%=getterName%>();
+<%=helperClassName%>.set<%=capitalizedHelperGetterSetterName%>(getWikitty(), <%=attributeName%>);
+getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=getter.getName()%>());
}*/);
- }
+ }
- // save the getter name for this attribute
- attributeToGetterName.put(businessEntity.getName() + "." + attributeName, getterName);
- }
- }
+ // save the getter name for this attribute
+ attributeToGetterName.put(businessEntity.getName() + "." + attributeName, getterName);
}
/** Add inherited operations to the abstract generated from an entity.
@@ -467,7 +485,13 @@
// now, add to this abstract all operation due to inheritence from
// other business entities
- for (ObjectModelClass superClass : businessEntity.getSuperclasses()) {
+ List<ObjectModelClass> superClasses = WikittyTransformerUtil.getAllSuperClasses(businessEntity);
+ for (ObjectModelClass superClass : superClasses) {
+
+ // FIXME echatellier 20120106 it an eugene bug
+ // super class are not same instance as model classes
+ superClass = model.getClass(superClass.getQualifiedName());
+
// this list will contains all imports we do due to inheritence
List<String> imports = requiredDependencyImports.get(businessEntity);
if (imports == null) {
@@ -511,13 +535,32 @@
if (WikittyTransformerUtil.isBusinessEntity(superClass)) {
- // getting the signatures and bodies of those operations
- for (ObjectModelOperation operation : processedClasses.get(superClass).getOperations()) {
+ String helperClassName = WikittyTransformerUtil.businessEntityToHelperName(superClass);
- ObjectModelOperation operationClone = cloneOperationSignature(operation, abstractClass, true);
- setOperationBody(operationClone, operation.getBodyCode());
+ // il ne faut pas copier les operations, mais les regenerer
+ // en ayant la possibilité de changer le nom
+ for (ObjectModelAttribute attribute : superClass.getAttributes()) {
- // XXX 20100816 bleny should be a call to cloneOperation(operation, abstractClass, true);
+ if (attribute.isNavigable()) {
+ // there is a conflict, purifier transformer give as the right name to use
+ String attributeName;
+ if (businessEntity.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + superClass.getName() + "." + attribute.getName())) {
+ attributeName = businessEntity.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + superClass.getName() + "." + attribute.getName());
+ } else if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
+ attributeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
+ } else {
+ attributeName = attribute.getName();
+ }
+
+ // le nom du getter peut avoir été renommé pour toute la hierarchie
+ String helperGetterSetterName;
+ if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
+ helperGetterSetterName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
+ } else {
+ helperGetterSetterName = attribute.getName();
+ }
+ addOperationWithName(businessEntity, abstractClass, attribute, attributeName, helperClassName, helperGetterSetterName);
+ }
}
}
}
@@ -531,12 +574,12 @@
* if a toString is tagValue is attached to businessEntity, it will be used
* to generate a toString as this :
* <pre>
- * given "hello %Person.name|unknow$s"
+ * given "hello %Person.name|unknown$s"
* </pre>
* will try to replace field name by field value for extension Person.
* if this information is not available, will do unknow.
* <p>
- * use same syntaxe that {@link http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html#synta…
+ * use same syntax as {@link http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html#synta…
*
* @param businessEntity
* @param abstractClass
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 CodeLutin, Benjamin Poussin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 CodeLutin, Benjamin Poussin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -57,11 +57,6 @@
private static final Log log = LogFactory.getLog(WikittyContractGenerator.class);
-// @Override
-// protected Transformer<ObjectModel, ObjectModel> initPreviousTransformer() {
-// return new WikittyPurifierTransformer();
-// }
-
/**
* Will permet to get the result of a processed class
* it is useful for dealing with inheritence : when an extension depend
@@ -176,7 +171,7 @@
// add all method describe in model in contract interfaces
// this method must be writed by developer in Impl
for (ObjectModelOperation operation : businessEntity.getOperations()) {
- //FIXME echatellier 20110705 mayb fix it to eugene
+ //FIXME echatellier 20110705 http://www.nuiton.org/issues/1617
if (operation.getReturnType() == null || operation.getReturnType().isEmpty()) {
addOperation(contract, operation.getName(), "void");
} else {
@@ -213,90 +208,102 @@
ObjectModelModifier.PUBLIC);
}
}
-
+
for (ObjectModelAttribute attribute : businessEntity.getAttributes()) {
if (attribute.isNavigable()) {
- // needed below, in templates
- //String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute, true);
- String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
-
- String attributeName = attribute.getName();
- if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
- // there is a conflict, purifier transformer give as the right name to use
+ // there is a conflict, purifier transformer give as the right name to use
+ String attributeName;
+ if (businessEntity.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + businessEntity.getName() + "." + attribute.getName())) {
+ attributeName = businessEntity.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + businessEntity.getName() + "." + attribute.getName());
+ } else if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
+
attributeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
- }
-
- ObjectModelOperation getter;
-
- if (attribute.getMaxMultiplicity() > 1 || attribute.getMaxMultiplicity() == -1) {
- // attributed is a collection, we will generate operations get, add, remove and clear
-
- String attributeTypeCollectionStrict = WikittyTransformerUtil.generateResultType(attribute, true);
- String attributeTypeCollectionGeneric = "Collection<" + attributeType + ">";
- String attributeTypeVarargs = attributeType + "...";
-
- // now, for this attribute, we will generate add, remove and clear methods
- // adding operations to contract
- String getterName = "get" + StringUtils.capitalize(attributeName);
- getter = addOperation(contract, getterName, attributeTypeCollectionStrict);
-
- String setterName = "set" + StringUtils.capitalize(attributeName);
- ObjectModelOperation setter = addOperation(contract, setterName, "void");
- addParameter(setter, attributeTypeCollectionStrict, attributeName);
-
- String addAllName = "addAll" + StringUtils.capitalize(attributeName);
- ObjectModelOperation addAll = addOperation(contract, addAllName, "void");
- addParameter(addAll, attributeTypeCollectionGeneric, attributeName);
-
- String addName = "add" + StringUtils.capitalize(attributeName);
- ObjectModelOperation adder = addOperation(contract, addName, "void");
- addParameter(adder, attributeTypeVarargs, "element");
-
- String removeName = "remove" + StringUtils.capitalize(attributeName);
- ObjectModelOperation remover = addOperation(contract, removeName, "void");
- addParameter(remover, attributeTypeVarargs, "element");
-
- String clearName = "clear" + StringUtils.capitalize(attributeName);
- addOperation(contract, clearName, "void");
-
} else {
- // attribute is not a collection, we generate a getter and a setter
- String getterName = "get" + StringUtils.capitalize(attributeName);
- getter = addOperation(contract, getterName, attributeType);
-
- String setterName = "set" + StringUtils.capitalize(attributeName);
- ObjectModelOperation setter = addOperation(contract, setterName, "void");
- addParameter(setter, attributeType, attributeName);
+ attributeName = attribute.getName();
}
- setDocumentation(getter, attribute.getDocumentation());
+ addOperationWithName(contract, attribute, attributeName);
}
}
-
+
// now, add to this contract all operation due to inheritence from
// other business entities
+ // FIXME echatellier 20120106 single inheritance level here
Collection<ObjectModelClass> superClasses = businessEntity.getSuperclasses();
for (ObjectModelClass superClass : superClasses) {
+
+ // FIXME echatellier 20120106 it an eugene bug
+ // super class are not same instance as model classes
+ superClass = model.getClass(superClass.getQualifiedName());
+
addInterface(contract, superClass.getQualifiedName());
+
if (WikittyTransformerUtil.isBusinessEntity(superClass)) {
- // superclass must have been processed first to have its operations set
- if ( !processedEntities.contains(superClass)) {
- log.debug(businessEntity.getName() + " require to process " +
- superClass.getName() + " first");
- processEntity(superClass);
+ // il ne faut pas copier les operations, mais les regenerer
+ // en ayant la possibilité de changer le nom
+ for (ObjectModelAttribute attribute : superClass.getAttributes()) {
+ // there is a conflict, purifier transformer give as the right name to use
+ String attributeName;
+ if (businessEntity.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + superClass.getName() + "." + attribute.getName())) {
+ attributeName = businessEntity.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + "." + superClass.getName() + "." + attribute.getName());
+ addOperationWithName(contract, attribute, attributeName);
+ }
+ // sinon, on ne génère rien, on herite de la methode
+ // par heritage des interface
}
-
- // getting the signatures of those operations
- for (ObjectModelOperation operation : processedClasses.get(superClass).getOperations()) {
- cloneOperationSignature(operation, contract, true);
- }
}
}
processedEntities.add(businessEntity);
}
+
+ protected void addOperationWithName(ObjectModelInterface contract, ObjectModelAttribute attribute, String attributeName) {
+ String attributeType = WikittyTransformerUtil.generateResultType(attribute, false);
+ if (attribute.getMaxMultiplicity() > 1 || attribute.getMaxMultiplicity() == -1) {
+ // attributed is a collection, we will generate operations get, add, remove and clear
+
+ String attributeTypeCollectionStrict = WikittyTransformerUtil.generateResultType(attribute, true);
+ String attributeTypeCollectionGeneric = "Collection<" + attributeType + ">";
+ String attributeTypeVarargs = attributeType + "...";
+ // now, for this attribute, we will generate add, remove and clear methods
+ // adding operations to contract
+ String getterName = "get" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation getter = addOperation(contract, getterName, attributeTypeCollectionStrict);
+ setDocumentation(getter, attribute.getDocumentation());
+
+ String setterName = "set" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation setter = addOperation(contract, setterName, "void");
+ addParameter(setter, attributeTypeCollectionStrict, attributeName);
+
+ String addAllName = "addAll" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation addAll = addOperation(contract, addAllName, "void");
+ addParameter(addAll, attributeTypeCollectionGeneric, attributeName);
+
+ String addName = "add" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation adder = addOperation(contract, addName, "void");
+ addParameter(adder, attributeTypeVarargs, "element");
+
+ String removeName = "remove" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation remover = addOperation(contract, removeName, "void");
+ addParameter(remover, attributeTypeVarargs, "element");
+
+ String clearName = "clear" + StringUtils.capitalize(attributeName);
+ addOperation(contract, clearName, "void");
+
+ } else {
+ // attribute is not a collection, we generate a getter and a setter
+ String getterName = "get" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation getter = addOperation(contract, getterName, attributeType);
+ setDocumentation(getter, attribute.getDocumentation());
+
+ String setterName = "set" + StringUtils.capitalize(attributeName);
+ ObjectModelOperation setter = addOperation(contract, setterName, "void");
+ addParameter(setter, attributeType, attributeName);
+ }
+ }
+
/**
* Add stuff if input model element is stereotyped as "meta".
*
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
+ * Copyright (C) 2009 - 2012 CodeLutin, Benjamin Poussin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -58,23 +58,12 @@
private static final Log log = LogFactory.getLog(WikittyMetaTransformer.class);
public WikittyMetaTransformer() {
+ setTransformerTypes(WikittyPurifierTransformer.class);
-// super(WikittyContractGenerator.class,
-// WikittyAbstractGenerator.class,
-// WikittyImplementationGenerator.class,
-// WikittyHelperGenerator.class
-// );
-
- //FIXME tchemit 2010-11-28 : still does not work with superclass inheritance, will not generate operation in Abstract classes
-
- //setTransformerTypes(WikittyPurifierTransformer.class);
- setTemplateTypes(
- WikittyContractGenerator.class,
+ setTemplateTypes(WikittyContractGenerator.class,
WikittyAbstractGenerator.class,
WikittyImplementationGenerator.class,
- WikittyHelperGenerator.class
- );
-
+ WikittyHelperGenerator.class);
}
@Override
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 CodeLutin, Benjamin Poussin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 CodeLutin, Benjamin Poussin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -72,110 +72,46 @@
/** Generated model builder. */
protected ObjectModelBuilder builder;
- /**
- * for a given, class read all attributes name and try to find conflicts
- * with parent classes attributes names.
- *
- * If a conflict is found, we try to solve the conflict by adding an
- * tagValue to the conflicting attribute for others transformers
- * to consider it as a new name. To choose a new name, we look for
- * an alternative name provided by the user through a tagValue on this
- * attribute. If no alternative provided, we try to generate an alternative
- * name by adding "From<className>" to the attribute name.
- *
- * @param clazz the class to process
- */
- protected void processClass(ObjectModelClass clazz) {
+ protected void processClass(ObjectModel model, ObjectModelClass clazz) {
- if (processedClasses.contains(clazz)) {
-
- // clazz has already been processed, do nothing
- return;
- }
-
if (isVerbose()) {
log.info("will purify " + clazz.getQualifiedName());
}
-
- List<String> allUsedNames = new ArrayList<String>();
+ // liste des noms deja utilisé dans la hierarchie de la
+ // classe courante
+ List<String> attributeNames = new ArrayList<String>();
- // first, we have to get all names used by the super classes and
- // its superclasses. So they must have been processed before
- // current class. Thus, we recursively call processClass on
- // superClass.
+ List<ObjectModelClass> allClasses = WikittyTransformerUtil.getAllSuperClasses(clazz);
+ allClasses.add(clazz); // also manage current class (last one)
- // process superclass first
- for (ObjectModelClass superClasses : clazz.getSuperclasses()) {
- if (WikittyTransformerUtil.isBusinessEntity(superClasses)) {
- if (!processedClasses.contains(superClasses)) {
- processClass(superClasses);
- allUsedNames.addAll(namesUsedByClass.get(superClasses));
- }
- }
- }
+ for (ObjectModelClass superClass : allClasses) {
- // now, allUsedNames contains all names used by superClass, we
- // have to check current class attributes names for conflict.
- // allUsedNames contains name that we
- // can't use without generating a conflict
- for (ObjectModelAttribute attribute : clazz.getAttributes()) {
+ // FIXME echatellier 20120106 it an eugene bug
+ // super class are not same instance as model classes
+ superClass = model.getClass(superClass.getQualifiedName());
- // will be null as long as a non-conflicting name is found
- String attributeName = null;
+ for (ObjectModelAttribute attribute : superClass.getAttributes()) {
+ String attributeName;
- if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
- attributeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
- if (allUsedNames.contains(attributeName)) {
- // using alternative name lead to a conflict
- attribute.getTagValues().remove(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
- attributeName = null;
- }
- }
-
- if (attributeName == null) {
- attributeName = attribute.getName();
- if (allUsedNames.contains(attributeName)) {
- // using alternative name lead to a conflict
- attributeName = null;
- }
- }
-
- if (attributeName == null) {
- attributeName = attribute.getName() + "From" + clazz.getName();
- if (allUsedNames.contains(attributeName)) {
- // using alternative name lead to a conflict
- attributeName = null;
+ // tag value définie par le developpeur
+ if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) {
+ attributeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME);
} else {
- builder.addTagValue(attribute, WikittyTransformerUtil.TAG_ALTERNATIVE_NAME, attributeName);
+ attributeName = attribute.getName();
}
- }
- // finally
- if (attributeName == null) {
- // still no alternative :-(
- log.error("no way to resolve conflict with attribute" +
- attribute.getName() + " from class " + clazz
- + ". You should add or change a tagValue \"" +
- WikittyTransformerUtil.TAG_ALTERNATIVE_NAME +
- "\" on this attribute");
- } else {
-
- if (isVerbose()) {
- if (!attributeName.equals(attribute.getName())) {
- log.info("attribute " + attribute.getName() + " purified to " + attributeName);
- }
+ // check conflics
+ if (attributeNames.contains(attributeName)) {
+ attributeName += "From" + superClass.getName();
+ builder.addTagValue(clazz, WikittyTransformerUtil.TAG_ALTERNATIVE_NAME
+ + "." + superClass.getName() + "." + attribute.getName(), attributeName);
}
- allUsedNames.add(attributeName);
+ // remember new getter name
+ attributeNames.add(attributeName);
}
-
-
}
-
- // saving all names we used in current class will permit to sub classes
- // to know what names it must not use
- namesUsedByClass.put(clazz, allUsedNames);
}
@Override
@@ -185,8 +121,8 @@
log.debug("Will clone " + clazz.getQualifiedName());
}
ObjectModelClass clone = cloneClass(clazz, true);
- if (WikittyTransformerUtil.isBusinessEntity(clazz)) {
- processClass(clone);
+ if (WikittyTransformerUtil.isBusinessEntity(clone)) {
+ processClass(model, clone);
}
}
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2012-01-05 16:56:09 UTC (rev 1286)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2012-01-06 14:19:35 UTC (rev 1287)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
+ * Copyright (C) 2009 - 2012 CodeLutin, Benjamin Poussin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -24,6 +24,7 @@
*/
package org.nuiton.wikitty.generator;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -277,4 +278,20 @@
}
return result;
}
+
+ /**
+ * Get all super class of class (recursively) ordered from top class to
+ * bottom classes.
+ *
+ * @param clazz class to get super classes
+ * @return all class super classes
+ */
+ public static List<ObjectModelClass> getAllSuperClasses(ObjectModelClass clazz) {
+ List<ObjectModelClass> superClasses = new ArrayList<ObjectModelClass>();
+ for (ObjectModelClass superClass : clazz.getSuperclasses()) {
+ superClasses.addAll(getAllSuperClasses(superClass));
+ superClasses.add(superClass);
+ }
+ return superClasses;
+ }
}
1
0
Author: bpoussin
Date: 2012-01-05 17:56:09 +0100 (Thu, 05 Jan 2012)
New Revision: 1286
Url: http://nuiton.org/repositories/revision/wikitty/1286
Log:
ajout de la documentation sur les d'agregats dans le select (AVG, COUNT, MAX, MIN, SUM)
Modified:
trunk/src/site/rst/user/query.rst
Modified: trunk/src/site/rst/user/query.rst
===================================================================
--- trunk/src/site/rst/user/query.rst 2012-01-05 11:18:10 UTC (rev 1285)
+++ trunk/src/site/rst/user/query.rst 2012-01-05 16:56:09 UTC (rev 1286)
@@ -326,7 +326,7 @@
lieu de l'id. Le select doit toujours être le premier élément de la condition
ou du in. Dans l'exemple suivant au lieu de retourner l'id des employés
en CDI, on retourne leur nom. Si deux personnes avait le même nom, ce nom
- ne serait retourné qu'une seul fois.::
+ ne serait retourné qu'une seule fois.::
WikittyQuery q = new WikittyQueryMaker()
select("Employee.name").eq("Employee.contract", "CDI").end();
@@ -344,6 +344,57 @@
WikittyQuery q = WikittyQueryParser.parse(
"Person.birthday IN (SELECT Event.date WHERE Event.country LIKE france)");
+Il est possible d'ajouter des fonctions d'aggrégats dans le Select. Dans ce cas
+le résultat retourné ne contient qu'un seul élément. L'aggrégat est fait les élements
+retournés (de first à first+Limit)
+
+* AVG fait la moyenne des valeurs, il faut donc que le champs sélectionnés soit
+ un Numeric::
+
+ WikittyQuery q = new WikittyQueryMaker()
+ .select("Person.age", Aggregate.AVG).eq("Person.firstname", "Jean").end();
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "SELECT AVG Person.age WHERE Person.firstname=Jean");
+
+* COUNT retourne le nombre d'élément retourné::
+
+ WikittyQuery q = new WikittyQueryMaker()
+ .select("Person.age", Aggregate.COUNT).eq("Person.firstname", "Jean").end();
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "SELECT COUNT Person.age WHERE Person.firstname=Jean");
+
+* MAX retourne la plus grande valeur. MAX peut-etre utilisé sur tout type de champs
+ mais il est plus pertinant sur les champs: Numeric, Date, String::
+
+ // on recherche le plus jeune (plus grande date) des personnes s'appelant Jean
+ WikittyQuery q = new WikittyQueryMaker()
+ .select("Person.birthday", Aggregate.MAX).eq("Person.firstname", "Jean").end();
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "SELECT MAX Person.birthday WHERE Person.firstname=Jean");
+
+* MIN retourne la plus petite valeur. MIN peut-etre utilisé sur tout type de champs
+ mais il est plus pertinant sur les champs: Numeric, Date, String::
+
+ // on recherche le plus agé (plus petite date) des personnes s'appelant Jean
+ WikittyQuery q = new WikittyQueryMaker()
+ .select("Person.birthday", Aggregate.MIN).eq("Person.firstname", "Jean").end();
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "SELECT MIN Person.birthday WHERE Person.firstname=Jean");
+
+* SUM retourne la somme de tous les nombres. Il faut donc que le champs sélectionné
+ soit un Numeric::
+
+ // fait la somme des facture depuis le début d'année
+ WikittyQuery q = new WikittyQueryMaker()
+ .select("Invoice.amount", Aggregate.SUM).ge("Invoice.date", "01/01/2012").end();
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "SELECT SUM Invoice.amount WHERE Invoice.date>=01/01/2012");
+
Recherche sur les arbres
------------------------
1
0
Author: echatellier
Date: 2012-01-05 12:18:10 +0100 (Thu, 05 Jan 2012)
New Revision: 1285
Url: http://nuiton.org/repositories/revision/wikitty/1285
Log:
Update nuiton-utils
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-01-05 11:16:22 UTC (rev 1284)
+++ trunk/pom.xml 2012-01-05 11:18:10 UTC (rev 1285)
@@ -53,7 +53,7 @@
<!-- common versions used in sub-poms -->
<eugeneVersion>2.4.2</eugeneVersion>
- <nuitonUtilsVersion>2.2</nuitonUtilsVersion>
+ <nuitonUtilsVersion>2.4.1</nuitonUtilsVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
<processPluginVersion>1.1</processPluginVersion>
<jettyVersion>7.4.2.v20110526</jettyVersion>
1
0
Author: echatellier
Date: 2012-01-05 12:16:22 +0100 (Thu, 05 Jan 2012)
New Revision: 1284
Url: http://nuiton.org/repositories/revision/wikitty/1284
Log:
Update eugene
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-01-05 11:15:51 UTC (rev 1283)
+++ trunk/pom.xml 2012-01-05 11:16:22 UTC (rev 1284)
@@ -52,7 +52,7 @@
<maven3Version>3.0.3</maven3Version>
<!-- common versions used in sub-poms -->
- <eugeneVersion>2.4.1</eugeneVersion>
+ <eugeneVersion>2.4.2</eugeneVersion>
<nuitonUtilsVersion>2.2</nuitonUtilsVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
<processPluginVersion>1.1</processPluginVersion>
1
0
Author: echatellier
Date: 2012-01-05 12:15:51 +0100 (Thu, 05 Jan 2012)
New Revision: 1283
Url: http://nuiton.org/repositories/revision/wikitty/1283
Log:
Fix eugene version in it
Modified:
trunk/wikitty-api/src/it/generation/pom.xml
Modified: trunk/wikitty-api/src/it/generation/pom.xml
===================================================================
--- trunk/wikitty-api/src/it/generation/pom.xml 2012-01-05 11:05:28 UTC (rev 1282)
+++ trunk/wikitty-api/src/it/generation/pom.xml 2012-01-05 11:15:51 UTC (rev 1283)
@@ -53,7 +53,7 @@
<properties>
- <eugeneVersion>2.3</eugeneVersion>
+ <eugeneVersion>2.4.2</eugeneVersion>
<!-- default encoding -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1
0
r1282 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-api/src/main/java/org/nuiton/wikitty/query wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions wikitty-api/src/main/java/org/nuiton/wikitty/storage wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr
by bpoussin@users.nuiton.org 05 Jan '12
by bpoussin@users.nuiton.org 05 Jan '12
05 Jan '12
Author: bpoussin
Date: 2012-01-05 12:05:28 +0100 (Thu, 05 Jan 2012)
New Revision: 1282
Url: http://nuiton.org/repositories/revision/wikitty/1282
Log:
- ajout du support d'agregat dans le select (AVG, COUNT, MAX, MIN, SUM)
ex: select max Person.age
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Aggregate.java
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java
trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -117,6 +117,7 @@
new SimpleDateFormat().toPattern(),
"dd/MM/yy",
"dd/MM/yy hh:mm",
+ "yyyyMMdd",
};
public static final String FQ_FIELD_NAME_SEPARATOR = ".";
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -14,6 +14,7 @@
import org.nuiton.wikitty.entities.BusinessEntityImpl;
import org.nuiton.wikitty.entities.FieldType;
import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.query.conditions.Aggregate;
import org.nuiton.wikitty.query.conditions.And;
import org.nuiton.wikitty.query.conditions.Between;
import org.nuiton.wikitty.query.conditions.Condition;
@@ -851,7 +852,7 @@
}
/**
- * Add {@link Select}, this condition must be first or
+ * Add {@link Select}, this condition must be first or
* @param element le champs dont il faut extraire les donnees
* @return {@code this}
* @see {@link Select}
@@ -860,11 +861,28 @@
return select(new ElementField(element));
}
+ /**
+ * Add {@link Select}, this condition must be first or
+ * @param element le champs dont il faut extraire les donnees
+ * @return {@code this}
+ * @see {@link Select}
+ */
+ public WikittyQueryMaker select(String element, Aggregate aggregate) {
+ return select(new ElementField(element), aggregate);
+ }
+
/*
* @see {@link Select}
*/
public WikittyQueryMaker select(ElementField element) {
- Condition child = new Select(element);
+ return select(element, null);
+ }
+
+ /*
+ * @see {@link Select}
+ */
+ public WikittyQueryMaker select(ElementField element, Aggregate aggregate) {
+ Condition child = new Select(element, aggregate);
addOnStack(child);
return this;
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -7,13 +7,13 @@
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.query.conditions.Aggregate;
import org.nuiton.wikitty.query.conditions.And;
import org.nuiton.wikitty.query.conditions.Between;
import org.nuiton.wikitty.query.conditions.Condition;
import org.nuiton.wikitty.query.conditions.ContainsAll;
import org.nuiton.wikitty.query.conditions.ContainsOne;
import org.nuiton.wikitty.query.conditions.Element;
-import org.nuiton.wikitty.query.conditions.ElementExtension;
import org.nuiton.wikitty.query.conditions.ElementField;
import org.nuiton.wikitty.query.conditions.Equals;
import org.nuiton.wikitty.query.conditions.False;
@@ -59,7 +59,12 @@
*/
@BuildParseTree
public class WikittyQueryParser extends BaseParser<Object> {
-
+
+ public static final String AVG = "AVG";
+ public static final String COUNT = "COUNT";
+ public static final String MAX = "MAX";
+ public static final String MIN = "MIN";
+ public static final String SUM = "SUM";
public static final String SELECT = "SELECT";
public static final String WHERE = "WHERE";
public static final String IN = "IN";
@@ -93,6 +98,11 @@
public Rule icNOT = IgnoreCase(NOT);
public Rule icAND = IgnoreCase(AND);
public Rule icOR = IgnoreCase(OR);
+ public Rule icAVG = IgnoreCase(AVG);
+ public Rule icCOUNT = IgnoreCase(COUNT);
+ public Rule icMAX = IgnoreCase(MAX);
+ public Rule icMIN = IgnoreCase(MIN);
+ public Rule icSUM = IgnoreCase(SUM);
public Rule icSELECT = IgnoreCase(SELECT);
public Rule icWHERE = IgnoreCase(WHERE);
public Rule icIN = IgnoreCase(IN);
@@ -355,9 +365,34 @@
push(new In(toElement(pop(1).toString()), (Condition)pop())));
}
Rule select() {
- return Sequence(icSELECT, space(), field(), push(match()), space(), icWHERE, space(), term(),
- push(new Select(new ElementField(pop(1).toString()), (Condition)pop())));
+ Var<Aggregate> aggregate = new Var<Aggregate>();
+ return Sequence(icSELECT, space(), Optional(aggregate(aggregate)), space(), field(), push(match()), space(), icWHERE, space(), term(),
+ push(new Select(new ElementField(pop(1).toString()), aggregate.get(), (Condition)pop())));
}
+ Rule aggregate(Var<Aggregate> aggregate) {
+ return FirstOf(avg(aggregate), count(aggregate), max(aggregate), min(aggregate), sum(aggregate));
+ }
+
+ Rule avg(Var<Aggregate> aggregate) {
+ return Sequence(icAVG, aggregate.set(Aggregate.AVG));
+ }
+
+ Rule count(Var<Aggregate> aggregate) {
+ return Sequence(icCOUNT, aggregate.set(Aggregate.COUNT));
+ }
+
+ Rule max(Var<Aggregate> aggregate) {
+ return Sequence(icMAX, aggregate.set(Aggregate.MAX));
+ }
+
+ Rule min(Var<Aggregate> aggregate) {
+ return Sequence(icMIN, aggregate.set(Aggregate.MIN));
+ }
+
+ Rule sum(Var<Aggregate> aggregate) {
+ return Sequence(icSUM, aggregate.set(Aggregate.SUM));
+ }
+
Rule keyword() {
return Sequence(value(), push(new Keyword(removeQuote(match()))));
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -32,7 +32,7 @@
/** nom du critere qui a ete uitilise (peut-etre null) si le critete n'avait pas de nom */
protected String queryName;
- /** indice element in global search result */
+ /** indice of first result in global search result */
protected int first;
/** total number of result if we call the query for all possible result */
protected int totalResult;
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -123,7 +123,7 @@
@Override
public boolean visitEnter(Select o) {
- getQueryMaker().select(o.getElement());
+ getQueryMaker().select(o.getElement(), o.getAggregate());
return true;
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -91,7 +91,11 @@
@Override
public boolean visitEnter(Select o) {
- text += WikittyQueryParser.SELECT + " " + o.getElement().getValue()
+ String agg = "";
+ if (o.getAggregate() != null) {
+ agg = o.getAggregate().name() + " ";
+ }
+ text += WikittyQueryParser.SELECT + " " + agg + o.getElement().getValue()
+ " " + WikittyQueryParser.WHERE + " " + WikittyQueryParser.BRACKET_OPEN;
return true;
}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Aggregate.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Aggregate.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Aggregate.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -0,0 +1,14 @@
+package org.nuiton.wikitty.query.conditions;
+
+/**
+ * Use to aggregate result in Select condition.
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public enum Aggregate {
+ AVG, COUNT, MAX, MIN, SUM
+}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -1,8 +1,6 @@
package org.nuiton.wikitty.query.conditions;
import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* Cette condition n'accept pas d'etre utilise dans une autre condition.
@@ -27,17 +25,33 @@
private static final long serialVersionUID = 1L;
+ protected Aggregate aggregate;
protected ElementField element;
public Select(ElementField element) {
this.element = element;
}
+ public Select(ElementField element, Aggregate aggregate) {
+ this.element = element;
+ this.aggregate = aggregate;
+ }
+
public Select(ElementField element, Condition restriction) {
super(restriction);
this.element = element;
}
+ public Select(ElementField element, Aggregate aggregate, Condition restriction) {
+ super(restriction);
+ this.element = element;
+ this.aggregate = aggregate;
+ }
+
+ public Aggregate getAggregate() {
+ return aggregate;
+ }
+
public ElementField getElement() {
return element;
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -1,10 +1,14 @@
package org.nuiton.wikitty.storage;
+import java.math.BigDecimal;
+import java.math.MathContext;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.WikittyUtil;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.query.FacetSortType;
import org.nuiton.wikitty.query.FacetTopic;
@@ -66,10 +70,13 @@
// on part de facet qui a deja la bonne condition
WikittyQuery querySelect = queryFacet.copy();
querySelect.setLimit(0);
+ // ne surtout pas mettre 0, sinon toutes les valeurs possibles sont
+ // retournee pas seulement celle qui satisfont la contrainte
querySelect.setFacetMinCount(1);
querySelect.setFacetLimit(Integer.MAX_VALUE);
// on force le sort pour toujours utiliser le meme
- querySelect.setFacetSort(FacetSortType.count);
+ querySelect.setFacetSort(FacetSortType.name);
+ // on supprime toutes les facettes, et on ajoute la notre
querySelect.setFacetQuery();
querySelect.setFacetField(select.getElement());
@@ -82,13 +89,89 @@
// creation des resultats via la facette select
List<FacetTopic> topics = resultSelect.getFacets().get(select.getElement().getValue());
- List<String> selectList = new ArrayList<String>(
- Math.min(topics.size(), query.getLimit()));
+ List<String> selectList = new ArrayList<String>(topics.size());
if (query.getFirst() < topics.size()) {
+ // il faut que le premier demande soit inferieur a la taille,
+ // sinon on ne fait rien
+ for (FacetTopic topic : topics) {
+ selectList.add(topic.getTopicName());
+ }
+ }
+
+ boolean sortDesc = query.getSortDescending().contains(select.getElement());
+ // tri selon l'ordre demande
+ if (sortDesc) {
+ // par defaut la facette est deja trie par ordre alphabetique
+ // donc il n'y a qu'a l'inverser pour avoir l'ordre inverse
+ Collections.reverse(selectList);
+ }
+
+ // on ne garde que ce qui est demande
+ if (query.getFirst() < topics.size()) {
int first = query.getFirst();
int last = Math.min(topics.size(), query.getFirst() + query.getLimit());
- for (FacetTopic topic : topics.subList(first, last)) {
- selectList.add(topic.getTopicName());
+ selectList = selectList.subList(first, last);
+ }
+
+ // gestion des agregats
+ if (select.getAggregate() != null) {
+ switch(select.getAggregate()) {
+ case AVG: {
+ // convert all to number
+ BigDecimal result = new BigDecimal(0);
+ for (String s : selectList) {
+ BigDecimal v = WikittyUtil.toBigDecimal(s);
+ result = result.add(v);
+ }
+ result = result.divide(new BigDecimal(selectList.size()));
+ selectList = new ArrayList<String>();
+ selectList.add(WikittyUtil.toString(result));
+ }
+ break;
+ case COUNT: {
+ // convert all to number
+ BigDecimal result = new BigDecimal(selectList.size());
+ selectList = new ArrayList<String>();
+ selectList.add(WikittyUtil.toString(result));
+ }
+ break;
+ case MAX: {
+ if (!selectList.isEmpty()) {
+ String result;
+ if (sortDesc) {
+ result = selectList.get(0);
+ } else {
+ result = selectList.get(selectList.size()-1);
+ }
+ selectList = new ArrayList<String>();
+ selectList.add(WikittyUtil.toString(result));
+ }
+ }
+ break;
+ case MIN: {
+ if (!selectList.isEmpty()) {
+ String result;
+ if (sortDesc) {
+ result = selectList.get(selectList.size()-1);
+ } else {
+ result = selectList.get(0);
+ }
+ selectList = new ArrayList<String>();
+ selectList.add(WikittyUtil.toString(result));
+ }
+ }
+ break;
+ case SUM: {
+ // convert all to number
+ BigDecimal result = new BigDecimal(0);
+ for (String s : selectList) {
+ BigDecimal v = WikittyUtil.toBigDecimal(s);
+ result = result.add(v);
+ }
+ selectList = new ArrayList<String>();
+ selectList.add(WikittyUtil.toString(result));
+ }
+ break;
}
}
Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java
===================================================================
--- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java 2012-01-05 01:39:15 UTC (rev 1281)
+++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java 2012-01-05 11:05:28 UTC (rev 1282)
@@ -1,6 +1,10 @@
package org.nuiton.wikitty.storage.solr;
+import java.util.Calendar;
import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import org.apache.commons.lang.time.DateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
@@ -10,6 +14,9 @@
import org.nuiton.util.ApplicationConfig;
import org.nuiton.wikitty.WikittyClient;
import org.nuiton.wikitty.WikittyConfig;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.entities.WikittyGroup;
import org.nuiton.wikitty.entities.WikittyGroupImpl;
import org.nuiton.wikitty.entities.WikittyImpl;
@@ -21,7 +28,9 @@
import org.nuiton.wikitty.query.WikittyQueryMaker;
import org.nuiton.wikitty.query.WikittyQueryParser;
import org.nuiton.wikitty.query.WikittyQueryResult;
+import org.nuiton.wikitty.query.conditions.Aggregate;
import org.nuiton.wikitty.query.conditions.Element;
+import org.nuiton.wikitty.query.conditions.ElementField;
/**
*
@@ -57,8 +66,116 @@
}
@Test
+ public void testSelectSortAndAggregate() throws Exception {
+ WikittyExtension ext = new WikittyExtension("Test",
+ "1.0", // version
+ WikittyUtil.tagValuesToMap(" version=\"1.0\""), // tag/values
+ (List)null,
+ WikittyUtil.buildFieldMapExtension( // building field map
+ "Numeric number",
+ "String string",
+ "Date date"));
+ Wikitty w1 = new WikittyImpl();
+ w1.addExtension(ext);
+ w1.setField("Test", "number", 5);
+ w1.setField("Test", "date", WikittyUtil.parseDate("02/05/1975"));
+
+ Wikitty w2 = new WikittyImpl();
+ w2.addExtension(ext);
+ w2.setField("Test", "number", -4);
+ w2.setField("Test", "date", WikittyUtil.parseDate("19830606"));
+
+ Wikitty w3 = new WikittyImpl();
+ w3.addExtension(ext);
+ w3.setField("Test", "number", 10);
+ w3.setField("Test", "date", WikittyUtil.parseDate("21/05/2002"));
+
+ Wikitty w4 = new WikittyImpl();
+ w4.addExtension(ext);
+ w4.setField("Test", "number", 1);
+ w4.setField("Test", "date", WikittyUtil.parseDate("05/01/2012"));
+
+ client.store(w1, w2, w3, w4);
+
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number").end();
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number").end()
+ .addSortDescending(new ElementField("Test", "number"));
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.date").end();
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.date").end()
+ .addSortDescending(new ElementField("Test", "date"));
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ }
+
+ // test aggregate
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.AVG).end();
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ Assert.assertEquals("3.0", result.peek());
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.COUNT).end();
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ Assert.assertEquals("4", result.peek());
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MAX).end();
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ Assert.assertEquals("10.0", result.peek());
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MAX).end()
+ .addSortDescending(new ElementField("Test", "number"));
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ Assert.assertEquals("10.0", result.peek());
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MIN).end();
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ Assert.assertEquals("-4.0", result.peek());
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MIN).end()
+ .addSortDescending(new ElementField("Test", "number"));
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ Assert.assertEquals("-4.0", result.peek());
+ }
+ {
+ WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.SUM).end();
+ WikittyQueryResult<String> result = client.findAllByQuery(q);
+ System.out.println("q: " + result);
+ Assert.assertEquals("12.0", result.peek());
+ }
+
+ }
+
+ @Test
+ public void testSelectAggregate() throws Exception {
+
+ }
+
+ @Test
public void testFacet() throws Exception {
- // for id for easy debugging
+ // for id for easy debugging
WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1"));
g1.setName("Group1");
WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2"));
1
0
Author: bpoussin
Date: 2012-01-05 02:39:15 +0100 (Thu, 05 Jan 2012)
New Revision: 1281
Url: http://nuiton.org/repositories/revision/wikitty/1281
Log:
- ajout d'element pour permettre la recherche dans les arbres
- ajout du support des alias dans le Parser
- maj documentation query
- quelques tests sur solr pour l'api query
- suppression des log solr inferieur a warn dans les tests
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementNode.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrQueryParser.java
Modified:
trunk/src/site/rst/user/query.rst
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/And.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/query/WikittyQueryTest.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java
trunk/wikitty-solr/src/main/resources/solrconfig.xml
trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java
trunk/wikitty-solr/src/test/resources/log4j.properties
Modified: trunk/src/site/rst/user/query.rst
===================================================================
--- trunk/src/site/rst/user/query.rst 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/src/site/rst/user/query.rst 2012-01-05 01:39:15 UTC (rev 1281)
@@ -344,6 +344,66 @@
WikittyQuery q = WikittyQueryParser.parse(
"Person.birthday IN (SELECT Event.date WHERE Event.country LIKE france)");
+Recherche sur les arbres
+------------------------
+
+Pour la recherche sur les arbres 3 pseudos champs sont utilisables
+
+- rootNode: champs contenant l'id de la racinde du nom
+- pathNode: champs contenant tous les id de noeuds pour atteindre un noeud (du root au noeud lui même inclus)
+- depthNode: entier indiquant la profondeur d'un noeud (root=1)
+
+* Pour avoir tous les attachments de tous les noeuds de tous les arbres::
+
+ WikittyQuery q = new WikittyQueryMaker()
+ .in(Element.ID)
+ .select(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT).end();
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "id IN (SELECT WikittyTreeNode.attachment)");
+
+* Pour avoir tous les attachments de tous les noeuds d'un arbre ayant le nom 'MyTree'::
+
+ WikittyQuery q = new WikittyQueryMaker()
+ .in(Element.ID)
+ .select(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT)
+ .in(Element.ROOT_NODE)
+ .eq(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_NAME, "MyTree").end();
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "id IN (SELECT WikittyTreeNode.attachment WHERE rootNode IN (WikittyTreeNode.name=MyTree))");
+
+* Pour avoir tous les attachments d'un sous arbre commencant à un noeud ayant
+ le nom "MyBranch" d'un arbre ayant le nom 'MyTree'::
+
+ WikittyQuery q = new WikittyQueryMaker()
+ .in(Element.ID)
+ .select(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT)
+ .and()
+ .in(Element.ROOT_NODE)
+ .eq(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_NAME, "MyTree")
+ .close();
+ .in(Element.PATH_NODE)
+ .eq(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_NAME, "MyBranch").end();
+
+ WikittyQuery q = WikittyQueryParser.parse("id IN (SELECT WikittyTreeNode.attachment WHERE
+ + " rootNode IN (WikittyTreeNode.name=MyTree) AND pathNode IN (WikittyTreeNode.name=MyBranch))");
+
+* Pour avoir tous les attachments d'un arbre ayant le nom 'MyTree' jusqu'à une
+ profondeur de 3 (root, fils, sous fils)::
+
+ WikittyQuery q = new WikittyQueryMaker()
+ .in(Element.ID)
+ .select(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT)
+ .and()
+ .in(Element.ROOT_NODE)
+ .eq(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_NAME, "MyTree")
+ .close();
+ .le(Element.PATH_NODE, 3).end();
+
+ WikittyQuery q = WikittyQueryParser.parse("id IN (SELECT WikittyTreeNode.attachment WHERE
+ + " rootNode IN (WikittyTreeNode.name=MyTree) AND pathNode<=3)");
+
Spécificité de WikittyQueryMaker
--------------------------------
@@ -378,6 +438,57 @@
WikittyQuery q = new WikittyQueryMaker()
.and().condition(qold).eq(...).end();
+Spécificité de WikittyQueryParser
+---------------------------------
+
+Vous pouvez ajouter des alias pour simplifier l'écriture de certain requête.
+
+Par exemple si vous utilisez souvent une longue requête comme::
+
+ WikittyQuery q = WikittyQueryParser.parse(
+ "id IN (SELECT WikittyTreeNode.attachment WHERE"
+ + " rootNode IN (WikittyTreeNode.name=MyTree)"
+ + " AND pathNode IN (WikittyTreeNode.name=MyBranch))");
+
+Vous pouvez faire::
+
+ WikittyQueryParser parser = new WikittyQueryParser();
+ parser.addAlias("MyAlias", "id IN (SELECT WikittyTreeNode.attachment WHERE"
+ + " rootNode IN (WikittyTreeNode.name=MyTree) AND"
+ + " pathNode IN (WikittyTreeNode.name=MyBranch))");
+
+Si maintenant votre requête est::
+
+ WikittyQuery q = parser.parseQuery(
+ "MyExt.field=toto AND MyAlias");
+
+Elle sera transformée avant d'être parser en::
+
+ WikittyQuery q = parser.parseQuery(
+ "MyExt.field=toto AND id IN (SELECT WikittyTreeNode.attachment"
+ + " WHERE rootNode IN (WikittyTreeNode.name=MyTree)"
+ + " AND pathNode IN (WikittyTreeNode.name=MyBranch))");
+
+Vous pouvez aussi paramètrer vos alias, par exemple si le nom de l'arbre et de
+la branche doivent varier vous pouvez faire::
+
+ WikittyQueryParser parser = new WikittyQueryParser();
+ parser.addAlias("MyAlias\(.*, .*\)", "id IN (SELECT WikittyTreeNode.attachment"
+ + " WHERE rootNode IN (WikittyTreeNode.name=$1)"
+ + " AND pathNode IN (WikittyTreeNode.name=$2))");
+
+Vous pourrez donc ensuite écrire::
+
+ WikittyQuery q = parser.parseQuery(
+ "MyExt.field=toto AND MyAlias(OtherTree, OtherBranch)");
+
+Elle sera transformée avant d'être parser en::
+
+ WikittyQuery q = parser.parseQuery(
+ "MyExt.field=toto AND id IN (SELECT WikittyTreeNode.attachment"
+ + " WHERE rootNode IN (WikittyTreeNode.name=OtherTree)"
+ + " AND pathNode IN (WikittyTreeNode.name=OtherBranch))");
+
Recherche avancée
-----------------
@@ -416,8 +527,8 @@
WikittyQuery q = WikittyQueryParser.parse("*=poussin");
-Les autres valeurs d'une requête
---------------------------------
+Les autres paramètres d'une requête
+-----------------------------------
* Nom : name - Nommage de la requêtes.
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -99,14 +99,6 @@
// #1386 sletellier 20110309 : solr date is return like 2011-03-09T08:06:27.593Z
public static final String SOLR_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
- public static final String[] DATE_FORMAT_ALLOWED = {
- DATE_FORMAT,
- SOLR_DATE_FORMAT,
- new SimpleDateFormat().toPattern(),
- "dd/MM/yy",
- "dd/MM/yy hh:mm",
- };
-
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyUtil.class);
@@ -118,6 +110,15 @@
static final protected FastDateFormat solrDateFormat = FastDateFormat.getInstance(
DATE_FORMAT, CANONICAL_TZ, CANONICAL_LOCALE);
+ public static final String[] DATE_FORMAT_ALLOWED = {
+ solrDateFormat.getPattern(),
+ DATE_FORMAT,
+ SOLR_DATE_FORMAT,
+ new SimpleDateFormat().toPattern(),
+ "dd/MM/yy",
+ "dd/MM/yy hh:mm",
+ };
+
public static final String FQ_FIELD_NAME_SEPARATOR = ".";
public static final String FQ_FIELD_NAME_SEPARATOR_REGEX = "\\.";
public static final String FQ_META_EXTENSION_SEPARATOR = ":";
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -1,6 +1,6 @@
package org.nuiton.wikitty.query;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -15,7 +15,6 @@
import org.nuiton.wikitty.query.conditions.Element;
import org.nuiton.wikitty.query.conditions.ElementExtension;
import org.nuiton.wikitty.query.conditions.ElementField;
-import org.nuiton.wikitty.query.conditions.ElementId;
import org.nuiton.wikitty.query.conditions.Equals;
import org.nuiton.wikitty.query.conditions.False;
import org.nuiton.wikitty.query.conditions.Greater;
@@ -48,6 +47,9 @@
* Cette classe permet d'interpreter une requete faite textuellement en la
* convertisant en sa representation objet.
*
+ * Pour plus d'information reportez-vous à la
+ * <a href="http://maven-site.nuiton.org/wikitty/user/query.html">documentation</a>
+ *
* @author poussin
* @version $Revision$
* @since 3.3
@@ -57,14 +59,6 @@
*/
@BuildParseTree
public class WikittyQueryParser extends BaseParser<Object> {
- /**
- * type de champs pour indique qu'on fait une condition sur le nom
- * d'une extension. Ce champs est aussi utilise comme valeur pour
- * {@link ElementExtension} et comme nom de facet pour les extensions
- */
- public static final String EXTENSION = "extension";
- public static final String FALSE = "FALSE";
- public static final String ID = "id";
public static final String SELECT = "SELECT";
public static final String WHERE = "WHERE";
@@ -73,6 +67,7 @@
public static final String LITERAL_OPEN = "\"";
public static final String NULL = "NULL";
public static final String TO = "TO";
+ public static final String FALSE = "FALSE";
public static final String TRUE = "TRUE";
public static final String UNLIKE = "UNLIKE";
public static final String AND = "AND";
@@ -93,8 +88,8 @@
public static final String SQUARE_BRACKET_CLOSE = "]";
public static final String SQUARE_BRACKET_OPEN = "[";
- public Rule icEXTENSION = IgnoreCase(EXTENSION);
- public Rule icID = IgnoreCase(ID);
+ public Rule icEXTENSION = IgnoreCase(Element.EXTENSION.getValue());
+ public Rule icID = IgnoreCase(Element.ID.getValue());
public Rule icNOT = IgnoreCase(NOT);
public Rule icAND = IgnoreCase(AND);
public Rule icOR = IgnoreCase(OR);
@@ -111,13 +106,67 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyQueryParser.class);
- protected Map<String, String> fieldAlias = new HashMap<String, String>();
- protected Map<String, String> valueAlias = new HashMap<String, String>();
+ protected Map<String, String> alias = new LinkedHashMap<String, String>();
public WikittyQueryParser() {
}
+ public Map<String, String> getAlias() {
+ return alias;
+ }
+
+ public WikittyQueryParser setAlias(Map<String, String> alias) {
+ this.alias = alias;
+ return this;
+ }
+
+ public WikittyQueryParser addAlias(String aliasName, String aliasValue) {
+ alias.put(aliasName, aliasValue);
+ return this;
+ }
+
+ /**
+ * Parse query and use alias added with {@link #addAlias} or {@link #setAlias}
+ *
+ * @param queryString query to parse
+ * @return
+ */
+ public WikittyQuery parseQuery(String queryString) {
+ WikittyQuery result = parse(queryString, alias);
+ return result;
+ }
+
+ /**
+ * Parse query without alias
+ *
+ * @param queryString query to parse
+ * @return
+ */
static public WikittyQuery parse(String queryString) {
+ WikittyQuery result = parse(queryString, null);
+ return result;
+ }
+
+ /**
+ * Parse query and use alias in argument
+ *
+ * @param queryString query to parse
+ * @param alias alias to used to change query
+ * @return
+ */
+ static public WikittyQuery parse(String queryString, Map<String, String> alias) {
+ if (alias != null) {
+ String queryStringInit = queryString;
+ // first replace alias in queryString
+ for (Map.Entry<String, String> a : alias.entrySet()) {
+ queryString = queryString.replaceAll(a.getKey(), a.getValue());
+ }
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("QueryString \n'%s' become after alias \n'%s'\naliases are %s",
+ queryStringInit, queryString, alias));
+ }
+ }
+
WikittyQueryParser parser = Parboiled.createParser(WikittyQueryParser.class);
// ParsingResult<?> result = new RecoveringParseRunner(parser.start()).run(query);
@@ -145,10 +194,16 @@
*/
protected Element toElement(String v) {
Element result;
- if (ID.equals(v)) {
+ if (Element.ID.getValue().equalsIgnoreCase(v)) {
result = Element.ID;
- } else if (EXTENSION.equals(v)) {
+ } else if (Element.EXTENSION.getValue().equalsIgnoreCase(v)) {
result = Element.EXTENSION;
+ } else if (Element.NODE_ROOT.getValue().equalsIgnoreCase(v)) {
+ result = Element.NODE_ROOT;
+ } else if (Element.NODE_PATH.getValue().equalsIgnoreCase(v)) {
+ result = Element.NODE_PATH;
+ } else if (Element.NODE_DEPTH.getValue().equalsIgnoreCase(v)) {
+ result = Element.NODE_DEPTH;
} else {
result = new ElementField(v);
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -219,4 +219,14 @@
Iterator<T> result = getAll().iterator();
return result;
}
+
+ @Override
+ public String toString() {
+ String result = getQueryString() + " results " + getAll();
+ if (!getFacetNames().isEmpty()) {
+ result += "\nfacets " + getFacets();
+ }
+ return result;
+ }
+
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -91,8 +91,8 @@
@Override
public boolean visitEnter(Select o) {
- text += WikittyQueryParser.SELECT + o.getElement().getValue()
- + WikittyQueryParser.WHERE + WikittyQueryParser.BRACKET_OPEN;
+ text += WikittyQueryParser.SELECT + " " + o.getElement().getValue()
+ + " " + WikittyQueryParser.WHERE + " " + WikittyQueryParser.BRACKET_OPEN;
return true;
}
@@ -103,7 +103,7 @@
@Override
public boolean visitEnter(In o) {
- text += o.getElement().getValue() + WikittyQueryParser.IN + WikittyQueryParser.BRACKET_OPEN;
+ text += o.getElement().getValue() + " " + WikittyQueryParser.IN + WikittyQueryParser.BRACKET_OPEN;
return true;
}
@@ -152,7 +152,7 @@
@Override
public void visit(ContainsOne o) {
text += o.getElement().getValue()
- + WikittyQueryParser.EQUALS + WikittyQueryParser.CURLY_BRACKET_CLOSE;
+ + WikittyQueryParser.EQUALS + WikittyQueryParser.CURLY_BRACKET_OPEN;
String sep = "";
for(String e : o.getValues()) {
text += sep + WikittyQueryParser.LITERAL_OPEN + e + WikittyQueryParser.LITERAL_CLOSE;
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/And.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/And.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/And.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -21,7 +21,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class And extends ConditionNary{
+public class And extends ConditionNary {
private static final long serialVersionUID = 1L;
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -21,6 +21,13 @@
// serialVersionUID is used for serialization.
private static final long serialVersionUID = 1L;
+ /** utilise pour creer une condition sur le noeud root de l'arbre */
+ public static final ElementNode NODE_ROOT = new ElementNode(ElementNode.FIELD_NODE_ROOT);
+ /** utilise pour creer une condition sur un noeud ou un de ses peres (le chemin d'acces a un noeud)*/
+ public static final ElementNode NODE_PATH = new ElementNode(ElementNode.FIELD_NODE_PATH);
+ /** utilise pour creer une condition sur la profondeur d'un noeud (root=1) */
+ public static final ElementNode NODE_DEPTH = new ElementNode(ElementNode.FIELD_NODE_DEPTH);
+
public static final ElementId ID = new ElementId();
public static final ElementExtension EXTENSION = new ElementExtension();
public static final ElementField ALL_FIELD =
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -2,7 +2,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.query.WikittyQueryParser;
/**
* Un element qui represente les extensions, vous devez utiliser l'instance
@@ -22,8 +21,10 @@
private static final long serialVersionUID = 1L;
+ public static final String FIELD_EXTENSION = "EXTENSION";
+
protected ElementExtension() {
- super(WikittyQueryParser.EXTENSION);
+ super(FIELD_EXTENSION);
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -2,7 +2,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.query.WikittyQueryParser;
/**
* Element qui represente l'Id, vous devez utiliser l'instance
@@ -22,8 +21,10 @@
private static final long serialVersionUID = 1L;
+ public static final String FIELD_ID = "ID";
+
protected ElementId() {
- super(WikittyQueryParser.ID);
+ super(FIELD_ID);
}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementNode.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementNode.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementNode.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -0,0 +1,36 @@
+package org.nuiton.wikitty.query.conditions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Represente un element pour les recherches sur les arbres. Vous devez utiliser
+ * <li> {@link Element#NODE_BRANCH} utilise pour savoir si un objet est attache a un noeud ou un sous noeud
+ * <li> {@link Element#NODE_ROOT} utilise pour creer une condition sur le noeud root de l'arbre
+ * <li> {@link Element#NODE_PARENTS} utilise pour creer une condition sur un noeud ou un de ses peres
+ * <li> {@link Element#NODE_DEPTH} utilise pour creer une condition sur la profondeur d'un noeud (root=1)
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class ElementNode extends Element {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(ElementNode.class);
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String FIELD_NODE_ROOT = "rootNode";
+ public static final String FIELD_NODE_PATH = "pathNode";
+ public static final String FIELD_NODE_DEPTH = "depthNode";
+
+
+ /** protected because you must used constant defined in {@link Element} */
+ protected ElementNode(String v) {
+ super(v);
+ }
+
+
+}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Select.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -46,7 +46,7 @@
boolean equalsDeep(Object other) {
boolean result = super.equalsDeep(other);
if (result) {
- In op = (In)other;
+ Select op = (Select)other;
result = ObjectUtils.equals(this.getElement(), op.getElement());
}
return result;
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -66,7 +66,7 @@
// on part de facet qui a deja la bonne condition
WikittyQuery querySelect = queryFacet.copy();
querySelect.setLimit(0);
- querySelect.setFacetMinCount(0);
+ querySelect.setFacetMinCount(1);
querySelect.setFacetLimit(Integer.MAX_VALUE);
// on force le sort pour toujours utiliser le meme
querySelect.setFacetSort(FacetSortType.count);
Added: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java (rev 0)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyUtilTest.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -0,0 +1,32 @@
+package org.nuiton.wikitty;
+
+import java.util.Date;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyUtilTest {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyUtilTest.class);
+
+ @Test
+ public void testToDate() throws Exception {
+ Date d = new Date();
+ System.out.println("Date: " + d);
+ String ds = WikittyUtil.toString(d);
+ System.out.println("Date format: " + ds);
+ Date d2 = WikittyUtil.toDate(ds);
+ System.out.println("Date parsed: " + d2);
+ Assert.assertEquals(d, d2);
+ }
+}
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/query/WikittyQueryTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/query/WikittyQueryTest.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/query/WikittyQueryTest.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -22,7 +22,29 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyQueryTest.class);
+
@Test
+ public void testParseAliasAndTree() throws Exception {
+ WikittyQueryParser parser = new WikittyQueryParser();
+ parser.addAlias("MyAlias\\((.*), (.*)\\)",
+ "id IN (SELECT WikittyTreeNode.attachment"
+ + " WHERE rootNode IN (WikittyTreeNode.name=$1)"
+ + " AND pathNode IN (WikittyTreeNode.name=$2))");
+
+ WikittyQuery q1 = parser.parseQuery(
+ "WikittyGroup.name=Group* AND MyAlias(OtherTree, OtherBranch)");
+
+ WikittyQuery q2 = parser.parseQuery(
+ "WikittyGroup.name=Group* AND id IN (SELECT WikittyTreeNode.attachment"
+ + " WHERE rootNode IN (WikittyTreeNode.name=OtherTree)"
+ + " AND pathNode IN (WikittyTreeNode.name=OtherBranch))");
+
+ System.out.println("Q1:" + q1);
+ System.out.println("Q2:" + q2);
+ Assert.assertEquals(q2, q1);
+ }
+
+ @Test
public void testParseEachElement() throws Exception {
Wikitty w = new WikittyImpl();
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -13,6 +13,7 @@
import org.nuiton.wikitty.query.conditions.ElementExtension;
import org.nuiton.wikitty.query.conditions.ElementField;
import org.nuiton.wikitty.query.conditions.ElementId;
+import org.nuiton.wikitty.query.conditions.ElementNode;
import org.nuiton.wikitty.services.WikittyTransaction;
import org.nuiton.wikitty.storage.WikittyExtensionStorage;
@@ -50,6 +51,12 @@
* final 'monfield' n'est pas de ce type alors on ne retrouvera rien car
* on recherchera sur un champs inexistant
* <li> *.* ou * = recherche fulltext
+ * <li> id = recherche sur les id
+ * <li> extension = recherche sur les extensions
+ * <li> node = recherche sur les attachment d'un noeud
+ * <li> nodeOrSubNode = recherche sur les attachment d'un noeud ou sous noeud
+ * <li> root = recherche sur les noeud root
+ * <li> parents = recherche sur un noeud ou ses parents
* <li> #..... = un champs special force par l'utilisateur
*
* @param tx
@@ -57,11 +64,24 @@
* @return
*/
public String convertToSolr(WikittyTransaction tx, Element element) {
+ if (log.isDebugEnabled()) {
+ log.debug("Element: " + element.getValue() + "(" + element.getClass() + ")");
+ }
String result;
if (element instanceof ElementId) {
result = SOLR_ID;
} else if (element instanceof ElementExtension) {
result = SOLR_EXTENSIONS;
+ } else if (element instanceof ElementNode) {
+ if (element.equals(Element.NODE_ROOT)) {
+ result = TREENODE_ROOT;
+ } else if (element.equals(Element.NODE_PATH)) {
+ result = TREENODE_PARENTS;
+ } else if (element.equals(Element.NODE_DEPTH)) {
+ result = TREENODE_DEPTH;
+ } else {
+ throw new WikittyException("Unknow ElementNode: " + element.getValue());
+ }
} else if (element instanceof ElementField) {
String fieldValue = element.getValue();
if (StringUtils.startsWith(fieldValue, WikittySolrConstant.SOLR_WIKITTY_PREFIX)) {
@@ -131,8 +151,13 @@
// cela arrive si le framework genere des requetes
// si des extensions non enregistrer en base
// cela est possible par exemple sur les WikittyTreeNode
- log.info(String.format(
- "Can't find extension '%s'", extName));
+ // S'il ne sont pas en base, c'est qu'aucun objet
+ // ne les utilisent, et donc leur absence n'est pas
+ // grave
+ if (log.isDebugEnabled()) {
+ log.debug(String.format(
+ "Can't find extension '%s'", extName));
+ }
} else {
WikittyExtension ext = extensionStorage.restore(
tx, extName, version);
@@ -182,8 +207,16 @@
+ "|(" + SUFFIX_NUMERIC + "$)"
+ "|(" + SUFFIX_SORTABLE + "$)"
, "");
- if (SOLR_EXTENSIONS.equals(fieldName)) {
+ if (SOLR_ID.equals(fieldName)) {
+ fieldName = Element.ID.getValue();
+ } else if (SOLR_EXTENSIONS.equals(fieldName)) {
fieldName = Element.EXTENSION.getValue();
+ } else if (TREENODE_ROOT.equals(fieldName)) {
+ fieldName = Element.NODE_ROOT.getValue();
+ } else if (TREENODE_PARENTS.equals(fieldName)) {
+ fieldName = Element.NODE_PATH.getValue();
+ } else if (TREENODE_DEPTH.equals(fieldName)) {
+ fieldName = Element.NODE_DEPTH.getValue();
}
return fieldName;
}
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -1,6 +1,7 @@
package org.nuiton.wikitty.storage.solr;
import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.wikitty.WikittyException;
@@ -76,10 +77,16 @@
private String value2solr(String value) {
String result;
if (value != null) {
- result = "\"" + StringEscapeUtils.escapeJava(value) + "\"";
+ final String LUCENE_REPLACE_PATTERN = "\\+" + "|-" + "|&&" + "|\\|"
+ + "|!" + "|\\(|\\)" + "|\\[|\\]" + "|\\{|\\}" + "|\"" + "|:";
+ result = value.replaceAll(LUCENE_REPLACE_PATTERN, "\\\\$0");
} else {
throw new WikittyException("Parse error, value must be not empty");
}
+
+ if (result.contains(" ")) {
+ result = "\"" + result + "\"";
+ }
return result;
}
@@ -145,14 +152,26 @@
WikittyQuery q = new WikittyQuery(o.getSubCondition()).setLimit(Integer.MAX_VALUE);
WikittyQueryResult<String> result = solrServer.findAllByQuery(tx, q);
- solrQuery += element2solr(o.getElement())
- + ":(";
- String sep = "";
- for(String e : result) {
- solrQuery += sep + value2solr(e);
- sep = " OR ";
+ if (log.isDebugEnabled()) {
+ log.debug("In result: " + result);
}
- solrQuery += ")";
+ if (result.size() == 0) {
+ // si on a pas de resultat, on met false
+ solrQuery += "( *:* - *:* )";
+ } else if (result.size() == 1) {
+ // si on a qu'un resultat sans parenthese
+ solrQuery +=
+ element2solr(o.getElement()) + ":" + value2solr(result.peek());
+ } else {
+ solrQuery += element2solr(o.getElement())
+ + ":(";
+ String sep = "";
+ for(String e : result) {
+ solrQuery += sep + value2solr(e);
+ sep = " OR ";
+ }
+ solrQuery += ")";
+ }
return false;
}
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -77,7 +77,7 @@
/** Use as field on Wikitty object attached on TreeNode, TreeNodeId is added at end */
static final public String TREENODE_ATTACHED = TREENODE_PREFIX + "attached.";
/** Use as field on Wikitty object attached on TreeNode, TreeNodeId is added at end
- used for facetisation */
+ used for facetisation. Le champs est cree dynamiquement par solr via schema.xml */
static final public String TREENODE_ATTACHED_ALL = TREENODE_PREFIX + "attached-all";
static final public String SUFFIX_BINARY = "_bi";
Added: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrQueryParser.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrQueryParser.java (rev 0)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrQueryParser.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -0,0 +1,102 @@
+/*
+ * #%L
+ * Wikitty :: wikitty-solr-impl
+ *
+ * $Id: WikittyQueryParser.java 1136 2011-08-12 14:24:03Z tchemit $
+ * $HeadURL: http://svn.nuiton.org/svn/wikitty/trunk/wikitty-solr/src/main/java/org/nuit… $
+ * %%
+ * Copyright (C) 2009 - 2010 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+package org.nuiton.wikitty.storage.solr;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Query;
+import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.search.LuceneQParserPlugin;
+import org.apache.solr.search.QParser;
+import org.apache.solr.search.QueryParsing;
+import org.apache.solr.search.SolrQueryParser;
+
+/**
+ * Add allow leading wildcard
+ * setAllowLeadingWildcard(true);
+ * <br>Example: <code>{!wikitty q.op=AND df=text sort='price asc'}myfield:foo +bar -baz</code>
+ * More information @see LuceneQParserPlugin
+ */
+public class WikittySolrQueryParser extends LuceneQParserPlugin {
+
+ public static String NAME = "wikitty";
+
+ @Override
+ public void init(NamedList args) {
+ }
+
+ @Override
+ public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
+ return new SolrQParser(qstr, localParams, params, req);
+ }
+
+ static public class SolrQParser extends QParser {
+
+ static private Log log = LogFactory.getLog(SolrQParser.class);
+ String sortStr;
+ SolrQueryParser lparser;
+
+ public SolrQParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
+ super(qstr, localParams, params, req);
+ }
+
+ @Override
+ public Query parse() throws ParseException {
+
+ String defaultField = getParam(CommonParams.DF);
+ if (defaultField == null) {
+ // TODO poussin 20101216 normalement on devrait retrouver cette
+ // valeur dans la config. Mais en fait a chaque fois on passe
+ // ici car defaultField est null :( alors que dans schema.xml
+ // on a bien defini le defaultField :(
+ defaultField = WikittySolrConstant.SOLR_FULLTEXT;
+ }
+
+ lparser = new SolrQueryParser(this, defaultField);
+ lparser.setAllowLeadingWildcard(true);
+
+ String opParam = getParam(QueryParsing.OP);
+ if (opParam != null) {
+ lparser.setDefaultOperator("AND".equals(opParam) ? QueryParser.Operator.AND : QueryParser.Operator.OR);
+ }
+
+ String qstr = getString();
+ if (log.isDebugEnabled()) {
+ log.debug("Query parse : " + qstr);
+ }
+ return lparser.parse(qstr);
+ }
+
+ @Override
+ public String[] getDefaultHighlightFields() {
+ return new String[]{lparser.getField()};
+ }
+ }
+}
Modified: trunk/wikitty-solr/src/main/resources/solrconfig.xml
===================================================================
--- trunk/wikitty-solr/src/main/resources/solrconfig.xml 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-solr/src/main/resources/solrconfig.xml 2012-01-05 01:39:15 UTC (rev 1281)
@@ -542,8 +542,8 @@
</fragmenter>
</highlighting>-->
- <queryParser name="lucene" class="org.nuiton.wikitty.storage.solr.WikittyQueryParser"/>
- <queryParser name="wikitty" class="org.nuiton.wikitty.storage.solr.WikittyQueryParser"/>
+ <queryParser name="lucene" class="org.nuiton.wikitty.storage.solr.WikittySolrQueryParser"/>
+ <queryParser name="wikitty" class="org.nuiton.wikitty.storage.solr.WikittySolrQueryParser"/>
<!-- example of registering a query parser
<queryParser name="lucene" class="org.apache.solr.search.LuceneQParserPlugin"/>
Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java
===================================================================
--- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java 2012-01-05 01:39:15 UTC (rev 1281)
@@ -1,6 +1,6 @@
package org.nuiton.wikitty.storage.solr;
-import java.util.List;
+import java.util.Collections;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
@@ -15,8 +15,11 @@
import org.nuiton.wikitty.entities.WikittyImpl;
import org.nuiton.wikitty.entities.WikittyLabel;
import org.nuiton.wikitty.entities.WikittyLabelImpl;
+import org.nuiton.wikitty.entities.WikittyTreeNode;
+import org.nuiton.wikitty.entities.WikittyTreeNodeImpl;
import org.nuiton.wikitty.query.WikittyQuery;
import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryParser;
import org.nuiton.wikitty.query.WikittyQueryResult;
import org.nuiton.wikitty.query.conditions.Element;
@@ -54,6 +57,107 @@
}
@Test
+ public void testFacet() throws Exception {
+ // for id for easy debugging
+ WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1"));
+ g1.setName("Group1");
+ WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2"));
+ g2.setName("GROUP");
+ WikittyGroupImpl g3 = new WikittyGroupImpl(new WikittyImpl("g3"));
+ g3.setName("Group3");
+ WikittyGroupImpl g4 = new WikittyGroupImpl(new WikittyImpl("g4"));
+ g4.setName("GROUP");
+
+ client.store(g1, g2, g3, g4);
+
+ {
+ WikittyQuery query = new WikittyQueryMaker()
+ .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group*")
+ .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME);
+
+ WikittyQueryResult<String> result = client.findAllByQuery(query);
+
+ System.out.println("testFacet" + result);
+ Assert.assertEquals(2, result.size());
+ Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size());
+ }
+ {
+ WikittyQuery query = new WikittyQueryMaker()
+ .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "GROUP")
+ .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME);
+
+ WikittyQueryResult<String> result = client.findAllByQuery(query);
+
+ System.out.println("testFacet" + result);
+ Assert.assertEquals(2, result.size());
+ Assert.assertEquals(1, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size());
+ Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).get(0).getCount());
+ }
+ {
+ WikittyQuery query = new WikittyQueryMaker()
+ .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "GROUP")
+ .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME)
+ .setLimit(0);
+
+ WikittyQueryResult<String> result = client.findAllByQuery(query);
+
+ System.out.println("testFacet" + result);
+ Assert.assertEquals(0, result.size());
+ Assert.assertEquals(1, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size());
+ Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).get(0).getCount());
+ }
+ }
+
+ @Test
+ public void testEq() throws Exception {
+ // for id for easy debugging
+ WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1"));
+ g1.setName("Group1");
+ WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2"));
+ g2.setName("GROUP2");
+
+ client.store(g1, g2);
+
+ {
+ WikittyQuery query = new WikittyQueryMaker()
+ .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group1")
+ .end();
+
+ WikittyQueryResult<String> result = client.findAllByQuery(query);
+
+ System.out.println("testEq" + result.getAll());
+ Assert.assertEquals(1, result.size());
+ Assert.assertEquals(g1.getWikittyId(), result.peek());
+ }
+
+ {
+ WikittyQuery query = new WikittyQueryMaker()
+ .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group*")
+ .end();
+
+ WikittyQueryResult<String> result = client.findAllByQuery(query);
+
+ System.out.println("testEq" + result.getAll());
+ Assert.assertEquals(1, result.size());
+ Assert.assertEquals(g1.getWikittyId(), result.peek());
+ }
+
+ {
+ WikittyQuery query = new WikittyQueryMaker()
+ .like(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group*")
+ .end();
+
+ WikittyQueryResult<String> result = client.findAllByQuery(query);
+
+ System.out.println("testEq" + result.getAll());
+ // FIXME test fail :(. But solr request look like good
+ // WikittyGroup.name_s_t:Group*
+// Assert.assertEquals(2, result.size());
+ }
+
+ }
+
+ @Test
public void testSelect() throws Exception {
// for id for easy debugging
WikittyImpl w = new WikittyImpl("g1");
@@ -94,4 +198,108 @@
Assert.assertEquals(1, result.getTotalResult());
}
}
+
+ @Test
+ public void testQueryOnTree() throws Exception {
+ WikittyQueryParser parser = new WikittyQueryParser();
+ parser.addAlias("MyAlias\\((.*), (.*)\\)",
+ "id IN (SELECT WikittyTreeNode.attachment"
+ + " WHERE (rootNode IN (WikittyTreeNode.name=$1)"
+ + " AND pathNode IN (WikittyTreeNode.name=$2)))");
+
+ WikittyQuery q1 = parser.parseQuery(
+ "WikittyGroup.name=Group* AND MyAlias(OtherTree, OtherBranch)");
+
+ WikittyQuery q2 = parser.parseQuery(
+ "WikittyGroup.name=Group* AND id IN (SELECT WikittyTreeNode.attachment"
+ + " WHERE (rootNode IN (WikittyTreeNode.name=OtherTree)"
+ + " AND pathNode IN (WikittyTreeNode.name=OtherBranch)))");
+
+ System.out.println("Q1:" + q1);
+ System.out.println("Q2:" + q2);
+ Assert.assertEquals(q2, q1);
+
+ WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1"));
+ g1.setName("Group1");
+ WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2"));
+ g2.setName("GROUP2");
+ WikittyGroupImpl g3 = new WikittyGroupImpl(new WikittyImpl("g3"));
+ g3.setName("Group3");
+ WikittyGroupImpl g4 = new WikittyGroupImpl(new WikittyImpl("g4"));
+ g4.setName("group4");
+
+ WikittyTreeNode root = new WikittyTreeNodeImpl(new WikittyImpl("root"));
+ root.setName("OtherTree");
+
+ WikittyTreeNode node = new WikittyTreeNodeImpl(new WikittyImpl("node1"));
+ node.setName("node1");
+ node.setParent(root.getWikittyId());
+ node.addAttachment(g1.getWikittyId(), g2.getWikittyId());
+
+ WikittyTreeNode branch = new WikittyTreeNodeImpl(new WikittyImpl("branch"));
+ branch.setName("OtherBranch");
+ branch.setParent(node.getWikittyId());
+
+ WikittyTreeNode leaf = new WikittyTreeNodeImpl(new WikittyImpl("leaf"));
+ leaf.setName("leaf");
+ leaf.setParent(branch.getWikittyId());
+ leaf.addAttachment(g3.getWikittyId(), g4.getWikittyId());
+
+ client.store(g1, g2, g3, g4, root, node, branch, leaf);
+
+ {
+ WikittyQuery q0 = parser.parseQuery(
+ "rootNode IN (WikittyTreeNode.name=OtherTree) AND pathNode IN (WikittyTreeNode.name=OtherBranch)");
+ System.out.println("qO: " + q0);
+ WikittyQueryResult<String> q0Result = client.findAllByQuery(q0);
+ System.out.println("q0Result:" + q0Result);
+ }
+ {
+ WikittyQuery q0 = parser.parseQuery(
+ "SELECT WikittyTreeNode.attachment WHERE (rootNode IN (WikittyTreeNode.name=OtherTree) AND pathNode IN (WikittyTreeNode.name=OtherBranch))")
+ .addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT);
+ System.out.println("qO: " + q0);
+ WikittyQueryResult<String> q0Result = client.findAllByQuery(q0);
+ System.out.println("q0Result:" + q0Result);
+ }
+ {
+ WikittyQuery q0 = parser.parseQuery(
+ "rootNode IN (WikittyTreeNode.name=OtherTree) AND pathNode IN (WikittyTreeNode.name=OtherBranch)")
+ .addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT);
+ System.out.println("qO: " + q0);
+ WikittyQueryResult<String> q0Result = client.findAllByQuery(q0);
+ System.out.println("q0Result:" + q0Result);
+ }
+ {
+ WikittyQuery q0 = parser.parseQuery(
+ "SELECT WikittyTreeNode.attachment WHERE (ID={branch, leaf})")
+ .addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT);
+ System.out.println("qO: " + q0);
+ WikittyQueryResult<String> q0Result = client.findAllByQuery(q0);
+ System.out.println("q0Result:" + q0Result);
+ }
+ {
+ WikittyQuery q0 = parser.parseQuery(
+ "ID={branch, leaf}").addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT);
+ System.out.println("qO: " + q0);
+ WikittyQueryResult<String> q0Result = client.findAllByQuery(q0);
+ System.out.println("q0Result:" + q0Result);
+ }
+ {
+ WikittyQuery q0 = parser.parseQuery(
+ "WikittyGroup.name=Group*");
+ System.out.println("q0: " + q0);
+ WikittyQueryResult<String> q0Result = client.findAllByQuery(q0);
+ System.out.println("q0Result:" + q0Result);
+ }
+
+ WikittyQueryResult<String> q1Result = client.findAllByQuery(q1);
+ WikittyQueryResult<String> q2Result = client.findAllByQuery(q2);
+
+ System.out.println("q2Result: " + q2Result);
+
+ Assert.assertEquals(q2Result.getAll(), q1Result.getAll());
+ Assert.assertEquals(1, q2Result.size());
+ Assert.assertEquals(Collections.singletonList(g3.getWikittyId()), q2Result.getAll());
+ }
}
Modified: trunk/wikitty-solr/src/test/resources/log4j.properties
===================================================================
--- trunk/wikitty-solr/src/test/resources/log4j.properties 2012-01-04 17:20:23 UTC (rev 1280)
+++ trunk/wikitty-solr/src/test/resources/log4j.properties 2012-01-05 01:39:15 UTC (rev 1281)
@@ -28,6 +28,6 @@
log4j.appender.logConsole.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
# Configuration by components
-log4j.rootLogger=WARN, logConsole
-log4j.category.org.nuiton.wikitty=WARN
-#log4j.category.org.apache.solr=DEBUG
+log4j.rootLogger=INFO, logConsole
+log4j.category.org.nuiton.wikitty.solr=DEBUG
+log4j.category.org.apache.solr=WARN
1
0
Author: maven-release
Date: 2012-01-04 18:20:23 +0100 (Wed, 04 Jan 2012)
New Revision: 1280
Url: http://nuiton.org/repositories/revision/wikitty/1280
Log:
Update mavenpom4redmine to 3.0.7.
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-01-03 18:04:34 UTC (rev 1279)
+++ trunk/pom.xml 2012-01-04 17:20:23 UTC (rev 1280)
@@ -6,7 +6,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>3.0.6</version>
+ <version>3.0.7</version>
</parent>
<!-- ************************************************************* -->
1
0