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
r1359 - trunk/wikitty-api/src/test/java/org/nuiton/wikitty
by echatellier@users.nuiton.org 25 Jan '12
by echatellier@users.nuiton.org 25 Jan '12
25 Jan '12
Author: echatellier
Date: 2012-01-25 10:08:33 +0100 (Wed, 25 Jan 2012)
New Revision: 1359
Url: http://nuiton.org/repositories/revision/wikitty/1359
Log:
Fix used queries
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-25 09:07:21 UTC (rev 1358)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-25 09:08:33 UTC (rev 1359)
@@ -341,13 +341,13 @@
//Test using pattern matching
WikittyQuery query2 = new WikittyQueryMaker().eq(Product.ELEMENT_FIELD_PRODUCT_NAME, "Indign*").end();
- WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query);
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query2);
Assert.assertEquals(1, results2.getTotalResult());
Assert.assertEquals(1, results2.getAll().size());
//Test using pattern matching
WikittyQuery query3 = new WikittyQueryMaker().eq(Product.ELEMENT_FIELD_PRODUCT_NAME, "Indign*").end();
- WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query);
+ WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query3);
Assert.assertEquals(1, results3.getTotalResult());
Assert.assertEquals(1, results3.getAll().size());
}
@@ -371,13 +371,13 @@
//Test using pattern matching
WikittyQuery query2 = new WikittyQueryMaker().eq(Product.FQ_FIELD_PRODUCT_NAME, "Indign*").end();
- WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query);
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query2);
Assert.assertEquals(1, results2.getTotalResult());
Assert.assertEquals(1, results2.getAll().size());
//Test using pattern matching
WikittyQuery query3 = new WikittyQueryMaker().eq(Product.FQ_FIELD_PRODUCT_NAME, "Indign*").end();
- WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query);
+ WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query3);
Assert.assertEquals(1, results3.getTotalResult());
Assert.assertEquals(1, results3.getAll().size());
}
1
0
r1358 - trunk/wikitty-api/src/test/java/org/nuiton/wikitty
by echatellier@users.nuiton.org 25 Jan '12
by echatellier@users.nuiton.org 25 Jan '12
25 Jan '12
Author: echatellier
Date: 2012-01-25 10:07:21 +0100 (Wed, 25 Jan 2012)
New Revision: 1358
Url: http://nuiton.org/repositories/revision/wikitty/1358
Log:
Fix assert count with default data count set with @Before methods
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java 2012-01-24 17:56:29 UTC (rev 1357)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java 2012-01-25 09:07:21 UTC (rev 1358)
@@ -112,14 +112,24 @@
/**
* Clear all data and add some test data for all tests.
+ *
+ * After data init, there is in wikitty storage:
+ * <ul>
+ * <li>5 categories
+ * <li>4 books
+ * <li>6 catalog node
+ * <li>3 movies
+ * <li>total = 18 wikitties
+ * </ul>
+ *
* @throws ParseException
*/
@Before
public void setUpTestData() throws ParseException {
wikittyClient = getWikittyClient();
wikittyClient.clear();
- addTestDataInClient(wikittyClient);
- addManualExtension(wikittyClient);
+ addTestDataInClient(wikittyClient); // add 15
+ addManualExtension(wikittyClient); // add 3
}
/**
@@ -227,11 +237,11 @@
dnrMovie.addToField("Movies", "author", "Nolan");
dnrMovie.addToField("Movies", "year", "2012");
- client.store(dieHardMovie, edgarMovie);
+ client.store(dieHardMovie, edgarMovie, dnrMovie);
}
/**
- * Import books from csv files.
+ * Import books from csv files (13 books)
*
* @throws IOException
*/
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-24 17:56:29 UTC (rev 1357)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-25 09:07:21 UTC (rev 1358)
@@ -136,7 +136,7 @@
public void testFindQueryOnMovies() {
// The Dark Knight Rises
// Die hard 4
- WikittyQuery query = new WikittyQueryMaker().eq("Movies.name", "*ar*").end();
+ WikittyQuery query = new WikittyQueryMaker().eq("Movies.name", "*ar?*").end();
WikittyQueryResult<String> results = wikittyClient.findAllByQuery(query);
Assert.assertEquals(2, results.getAll().size());
}
@@ -387,11 +387,13 @@
*/
@Test
public void testQueryMakerNeq() {
+ // 18 wikitty in init
+ // only one with price == 42
// test strict equals
WikittyQuery query = new WikittyQueryMaker().ne(Product.FQ_FIELD_PRODUCT_PRICE, 42).end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(3, results.getTotalResult());
- Assert.assertEquals(3, results.getAll().size());
+ Assert.assertEquals(17, results.getTotalResult());
+ Assert.assertEquals(17, results.getAll().size());
}
/**
@@ -506,34 +508,42 @@
@Test
public void testQueryMakerIdneq() throws IOException {
- importBooks(); // 4 + 13 importé = 17
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -1 avec cet id
WikittyQuery query = new WikittyQueryMaker().idne("db9dc782-e650-4fd4-83ac-3c1c5c136cde").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(16, results.getTotalResult()); // 17 livre en base
+ Assert.assertEquals(30, results.getTotalResult());
}
@Test
public void testQueryParserIdneq() throws IOException {
- importBooks(); // 4 + 13 importé = 17
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -1 avec cet id
WikittyQuery query = WikittyQueryParser.parse("id!=db9dc782-e650-4fd4-83ac-3c1c5c136cde");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(16, results.getTotalResult()); // 17 livre en base
+ Assert.assertEquals(30, results.getTotalResult());
}
@Test
public void testQueryMakerUnlike() throws IOException {
- importBooks(); // 4 + 13 importé = 17
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -6 HP
WikittyQuery query = new WikittyQueryMaker().unlike(Product.ELEMENT_FIELD_PRODUCT_NAME, "*Potter*").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
+ Assert.assertEquals(25, results.getTotalResult()); // -6 HP = 11
}
@Test
public void testQueryParserUnlike() throws IOException {
- importBooks(); // 4 + 13 importé = 17
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -6 HP
WikittyQuery query = WikittyQueryParser.parse("Product.name UNLIKE *Potter*");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
+ Assert.assertEquals(25, results.getTotalResult()); // -6 HP = 11
}
@Test
@@ -570,38 +580,46 @@
@Test
public void testQueryMakerNotsw() throws IOException {
- importBooks();
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -6 HP
WikittyQuery query = new WikittyQueryMaker().notsw(Product.ELEMENT_FIELD_PRODUCT_NAME, "Harry").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
+ Assert.assertEquals(25, results.getTotalResult());
}
@Test
public void testQueryParserNotsw() throws IOException {
- importBooks();
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -6 HP
WikittyQuery query = WikittyQueryParser.parse("Product.name!=Harry*");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
+ Assert.assertEquals(25, results.getTotalResult());
}
@Test
public void testQueryMakerNotew() throws IOException {
- importBooks();
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -1 sorciers
WikittyQuery query = new WikittyQueryMaker().notew(Product.ELEMENT_FIELD_PRODUCT_NAME, "sorciers").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(11, results.getTotalResult());
+ Assert.assertEquals(30, results.getTotalResult());
}
@Test
public void testQueryParserNotew() throws IOException {
- importBooks();
+ // + 18 in init db
+ importBooks(); // 13 importé = 31
+ // -1 sorciers
WikittyQuery query = WikittyQueryParser.parse("Product.name!=*sorciers");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(16, results.getTotalResult());
+ Assert.assertEquals(30, results.getTotalResult());
}
@Test
- public void testQuerymakerKeyword() throws IOException {
+ public void testQueryMakerKeyword() throws IOException {
importBooks();
WikittyQuery query = new WikittyQueryMaker().keyword("potter").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
@@ -665,16 +683,18 @@
@Test
public void testQueryMakerTrue() {
+ // 18 in init db
WikittyQuery query = new WikittyQueryMaker().rTrue().end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(4, results.getTotalResult());
+ Assert.assertEquals(18, results.getTotalResult());
}
@Test
public void testQueryParseTrue() {
+ // 18 in init db
WikittyQuery query = WikittyQueryParser.parse("TRUE");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(4, results.getTotalResult());
+ Assert.assertEquals(18, results.getTotalResult());
}
@Test
@@ -722,9 +742,10 @@
@Test
public void testQueryMakerNot() {
+ // 18 in db (4 products)
WikittyQuery query = new WikittyQueryMaker().not().exteq(Product.EXT_PRODUCT).end();
WikittyQueryResult<String> results = wikittyClient.findAllByQuery(query);
- Assert.assertEquals(13, results.getTotalResult());
+ Assert.assertEquals(14, results.getTotalResult());
}
/**
1
0
r1357 - trunk/wikitty-api/src/test/java/org/nuiton/wikitty
by echatellier@users.nuiton.org 24 Jan '12
by echatellier@users.nuiton.org 24 Jan '12
24 Jan '12
Author: echatellier
Date: 2012-01-24 18:56:29 +0100 (Tue, 24 Jan 2012)
New Revision: 1357
Url: http://nuiton.org/repositories/revision/wikitty/1357
Log:
Fix tests
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-24 12:02:00 UTC (rev 1356)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-24 17:56:29 UTC (rev 1357)
@@ -26,10 +26,7 @@
package org.nuiton.wikitty;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
import org.junit.Assert;
import org.junit.Test;
@@ -52,10 +49,6 @@
import org.nuiton.wikitty.query.WikittyQueryMaker;
import org.nuiton.wikitty.query.WikittyQueryParser;
import org.nuiton.wikitty.query.WikittyQueryResult;
-import org.nuiton.wikitty.search.Criteria;
-import org.nuiton.wikitty.search.PagedResult;
-import org.nuiton.wikitty.search.Search;
-import org.nuiton.wikitty.search.operators.Like;
import org.nuiton.wikitty.test.Category;
import org.nuiton.wikitty.test.Product;
@@ -177,7 +170,7 @@
WikittyImportExportService ieService = new WikittyImportExportService(wikittyClient);
WikittyQuery query = new WikittyQueryMaker().eq(Element.EXTENSION, WikittyTreeNode.EXT_WIKITTYTREENODE).end();
String csvExport = ieService.syncExportAllByQuery(FORMAT.CSV, query);
-
+
// extension definition is present in xml export
Assert.assertTrue(csvExport.startsWith("\"Wikitty.Id\",\"Wikitty.Ext\",\"WikittyTreeNode.attachment\",\"WikittyTreeNode.name\",\"WikittyTreeNode.parent\""));
// some data too
@@ -251,18 +244,31 @@
Assert.assertEquals(1, results4.getTotalResult());
WikittyTreeNode mySubNode = results4.get(0);
Assert.assertEquals("MySubNode", mySubNode.getName());
- System.out.println(mySubNode.getName());
}
/**
- * Test que faire l'import 2 fois de suite cause une wikitty obselete
- * exception.
+ * Test que faire l'import après avoir modifier un des wikitty ecrase les
+ * données.
+ *
* @throws IOException
*/
- @Test(expected=WikittyException.class)
+ @Test
public void testImportTwice() throws IOException {
+ // first import
importClients();
+
+ // modify one
+ Wikitty w = wikittyClient.restore("fbcc8aed-7f67-4e3c-a9aa-221373765f8d");
+ Assert.assertNotNull("Erreur d'import de fichier csv", w);
+ w.setField("Client", "name", "titi");
+ wikittyClient.store(w);
+
+ // second import sould fail
importClients();
+
+ // aa
+ w = wikittyClient.restore("fbcc8aed-7f67-4e3c-a9aa-221373765f8d");
+ Assert.assertEquals("Toto", w.getFieldAsString("Client", "name"));
}
/**
@@ -500,34 +506,34 @@
@Test
public void testQueryMakerIdneq() throws IOException {
- importBooks(); // pour un wid connu
+ importBooks(); // 4 + 13 importé = 17
WikittyQuery query = new WikittyQueryMaker().idne("db9dc782-e650-4fd4-83ac-3c1c5c136cde").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(28, results.getTotalResult());
+ Assert.assertEquals(16, results.getTotalResult()); // 17 livre en base
}
@Test
public void testQueryParserIdneq() throws IOException {
- importBooks(); // pour un wid connu
+ importBooks(); // 4 + 13 importé = 17
WikittyQuery query = WikittyQueryParser.parse("id!=db9dc782-e650-4fd4-83ac-3c1c5c136cde");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(16, results.getTotalResult());
+ Assert.assertEquals(16, results.getTotalResult()); // 17 livre en base
}
@Test
public void testQueryMakerUnlike() throws IOException {
- importBooks();
- WikittyQuery query = new WikittyQueryMaker().unlike(Product.ELEMENT_FIELD_PRODUCT_NAME, "*potter*").end();
+ importBooks(); // 4 + 13 importé = 17
+ WikittyQuery query = new WikittyQueryMaker().unlike(Product.ELEMENT_FIELD_PRODUCT_NAME, "*Potter*").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(11, results.getTotalResult());
+ Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
}
@Test
public void testQueryParserUnlike() throws IOException {
- importBooks();
- WikittyQuery query = WikittyQueryParser.parse("Product.name UNLIKE *potter*");
+ importBooks(); // 4 + 13 importé = 17
+ WikittyQuery query = WikittyQueryParser.parse("Product.name UNLIKE *Potter*");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(11, results.getTotalResult());
+ Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
}
@Test
@@ -567,6 +573,22 @@
importBooks();
WikittyQuery query = new WikittyQueryMaker().notsw(Product.ELEMENT_FIELD_PRODUCT_NAME, "Harry").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
+ }
+
+ @Test
+ public void testQueryParserNotsw() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Product.name!=Harry*");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(11, results.getTotalResult()); // -6 HP = 11
+ }
+
+ @Test
+ public void testQueryMakerNotew() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().notew(Product.ELEMENT_FIELD_PRODUCT_NAME, "sorciers").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
Assert.assertEquals(11, results.getTotalResult());
}
@@ -613,9 +635,9 @@
@Test
public void testQueryParserIsNull() throws IOException {
importBooks();
- WikittyQuery query = WikittyQueryParser.parse("Produit.category=NULL");
+ WikittyQuery query = WikittyQueryParser.parse("Product.category=NULL");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(1, results.getTotalResult());
+ Assert.assertEquals(2, results.getTotalResult());
}
@Test
@@ -629,7 +651,7 @@
@Test
public void testQueryParserIsNotNull() throws IOException {
importBooks();
- WikittyQuery query = WikittyQueryParser.parse("Produit.category!=NULL");
+ WikittyQuery query = WikittyQueryParser.parse("Product.category!=NULL");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
Assert.assertEquals(15, results.getTotalResult());
}
@@ -640,20 +662,34 @@
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
Assert.assertEquals(0, results.getTotalResult());
}
+
+ @Test
+ public void testQueryMakerTrue() {
+ WikittyQuery query = new WikittyQueryMaker().rTrue().end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(4, results.getTotalResult());
+ }
@Test
public void testQueryParseTrue() {
WikittyQuery query = WikittyQueryParser.parse("TRUE");
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
- Assert.assertEquals(1, results.getTotalResult());
+ Assert.assertEquals(4, results.getTotalResult());
}
+
+ @Test
+ public void testQueryParseFalse() {
+ WikittyQuery query = WikittyQueryParser.parse("FALSE");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(0, results.getTotalResult());
+ }
@Test
public void testQueryMakerAnd() throws IOException {
importBooks();
WikittyQuery query = new WikittyQueryMaker().and()
.sw(Product.FQ_FIELD_PRODUCT_NAME, "Harry")
- .notew(Product.ELEMENT_FIELD_PRODUCT_NAME, "sorcier").end();
+ .notew(Product.ELEMENT_FIELD_PRODUCT_NAME, "sorciers").end();
WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
Assert.assertEquals(5, results.getTotalResult());
}
@@ -704,10 +740,11 @@
// et qui appartiennet a une catégory nommé "history"
WikittyQuery query = new WikittyQueryMaker().and()
.bw(Product.ELEMENT_FIELD_PRODUCT_PRICE, 0, 75)
- .select(Product.ELEMENT_FIELD_PRODUCT_CATEGORY)
- .eq(Category.FQ_FIELD_CATEGORY_CODE, "history").end();
+ .containsOne(Product.ELEMENT_FIELD_PRODUCT_CATEGORY)
+ .select(Element.ID)
+ .eq(Category.FQ_FIELD_CATEGORY_CODE, "history").end();
WikittyQueryResult<String> results = wikittyClient.findAllByQuery(query);
- Assert.assertEquals(9, results.getTotalResult());
+ Assert.assertEquals(3, results.getTotalResult());
}
/**
1
0
r1356 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query
by bpoussin@users.nuiton.org 24 Jan '12
by bpoussin@users.nuiton.org 24 Jan '12
24 Jan '12
Author: bpoussin
Date: 2012-01-24 13:02:00 +0100 (Tue, 24 Jan 2012)
New Revision: 1356
Url: http://nuiton.org/repositories/revision/wikitty/1356
Log:
Anomalie #1914: Query parser can't parse quey using id
- change string value pattern in parser
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java
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-24 11:11:47 UTC (rev 1355)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-01-24 12:02:00 UTC (rev 1356)
@@ -40,7 +40,6 @@
import org.nuiton.wikitty.query.conditions.ContainsAll;
import org.nuiton.wikitty.query.conditions.ContainsOne;
import org.nuiton.wikitty.entities.Element;
-import org.nuiton.wikitty.entities.ElementField;
import org.nuiton.wikitty.query.conditions.Equals;
import org.nuiton.wikitty.query.conditions.False;
import org.nuiton.wikitty.query.conditions.Greater;
@@ -287,10 +286,12 @@
}
Rule condition() {
+ // ATTENTION l'ordre est important par exemple le '>' doit etre apres le '>='
return FirstOf(
not(), isNull(), isNotNull(), select(),
- eq(), neq(), less(), lesseq(), greater(), greatereq(), like(), notlike(),
+ greatereq(), lesseq(),
between(), containsAll(), containsOne(),
+ eq(), neq(), less(), greater(), like(), notlike(),
rTrue(), rFalse(), keyword()
);
}
@@ -430,10 +431,27 @@
}
Rule valueText() {
- return Sequence(FirstOf(field(), StringLiteral()),
+ return Sequence(FirstOf(StringLiteral(), SimpleString()),
push(new ConditionValueString(removeQuote(match()))));
}
+ /**
+ * Une chaine simple sans espace, parenthese, retour chariot, tabulation,
+ * accolade, crochet
+ * @return
+ */
+ Rule SimpleString() {
+ return OneOrMore(FirstOf(
+ Escape(),
+ Sequence(TestNot(AnyOf(" \t\r\n\\"
+ +COMMA
+ +LITERAL_OPEN+LITERAL_CLOSE
+ +BRACKET_OPEN+BRACKET_CLOSE
+ +CURLY_BRACKET_OPEN+CURLY_BRACKET_CLOSE
+ +SQUARE_BRACKET_OPEN+SQUARE_BRACKET_CLOSE)), ANY)
+ )).suppressSubnodes();
+ }
+
Rule StringLiteral() {
return Sequence(
LITERAL_OPEN,
1
0
r1355 - in trunk/wikitty-api/src: main/java/org/nuiton/wikitty main/java/org/nuiton/wikitty/services main/resources test/java/org/nuiton/wikitty/services
by bpoussin@users.nuiton.org 24 Jan '12
by bpoussin@users.nuiton.org 24 Jan '12
24 Jan '12
Author: bpoussin
Date: 2012-01-24 12:11:47 +0100 (Tue, 24 Jan 2012)
New Revision: 1355
Url: http://nuiton.org/repositories/revision/wikitty/1355
Log:
Evolution #1916: Split WikittyServiceSecurity in two service Authentication and Authorization
- remove WikittyServiceSecurity in sample properties files and replace it with WikittyServiceAuthorization and WikittyServiceAuthentication
- remove WikittyServiceSecurity in other java class
Removed:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceSecurityTest.java
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java
trunk/wikitty-api/src/main/resources/wikitty-config-sample-client.properties
trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties
trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties
trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties
trunk/wikitty-api/src/main/resources/wikitty-config-sample-standalone.properties
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-01-24 11:11:47 UTC (rev 1355)
@@ -71,9 +71,9 @@
* It is used to transform wikitty object used by {@link WikittyService}
* into business objects used by applications.
*
- * It also manage {@link #securityToken} for {@link org.nuiton.wikitty.services.WikittyServiceSecurity}.
+ * It also manage {@link #securityToken} for {@link org.nuiton.wikitty.services.WikittyService}.
*
- * All method that need {@link #securityToken} and {@link org.nuiton.wikitty.services.WikittyServiceSecurity}
+ * All method that need {@link #securityToken} and {@link org.nuiton.wikitty.services.WikittyService}
* must be in this class and not in {@link WikittyUtil}
*
* @author poussin
@@ -96,7 +96,7 @@
/**
* Security token.
*
- * @see org.nuiton.wikitty.services.WikittyServiceSecurity#login(String, String)
+ * @see org.nuiton.wikitty.services.WikittyServiceAuthentication#login(String, String)
*/
protected String securityToken;
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java 2012-01-24 11:11:47 UTC (rev 1355)
@@ -130,7 +130,8 @@
"wikitty.WikittyService.components",
n_("WikittyService to use (list must be in right order. "
+ "ex: org.nuiton.wikitty.WikittyServiceStorage,org.nuiton.wikitty.WikittyServiceNotifier,"
- + "org.nuiton.wikitty.WikittyServiceCached,org.nuiton.wikitty.WikittyServiceSecurity)"),
+ + "org.nuiton.wikitty.WikittyServiceCached,org.nuiton.wikitty.WikittyServiceAuthentication,"
+ + "org.nuiton.wikitty.WikittyServiceAuthorization)"),
WikittyServiceInMemory.class.getName(),
String.class, false, false),
WIKITTY_WIKITTYSERVICEINMEMORY_PERSISTENCE(
@@ -191,6 +192,7 @@
n_("Indique la liste d'extension dont il faut monitorer l'acces"),
"WikittyPubText,WikittyPubData",
String.class, false, false),
+ @Deprecated
WIKITTY_WIKITTYSERVICESECURITY_COMPONENTS(
"wikitty.WikittyServiceSecurity.components",
n_("Indique le composant a utiliser pour l'authentification externe"
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2012-01-24 11:11:47 UTC (rev 1355)
@@ -33,7 +33,6 @@
import org.nuiton.wikitty.services.WikittyListener;
import org.nuiton.wikitty.services.WikittyServiceCached;
import org.nuiton.wikitty.services.WikittyServiceNotifier;
-import org.nuiton.wikitty.services.WikittyServiceSecurity;
import org.nuiton.wikitty.services.WikittyServiceStorage;
import java.util.Collection;
@@ -54,8 +53,10 @@
* <dl>
* <dt>{@link WikittyServiceCached}</dt>
* <dd>add a cache for wikitties</dd>
- * <dt>{@link WikittyServiceSecurity}</dt>
- * <dd>add user authentication support and right management</dd>
+ * <dt>{@link WikittyServiceAuthentication}</dt>
+ * <dd>add user authentication support</dd>
+ * <dt>{@link WikittyServiceAuthorization}</dt>
+ * <dd>add right management</dd>
* <dt>{@link WikittyServiceNotifier}</dt>
* <dd>add notifications between client of the same wikitty service</dd>
* </dl>
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyExtensionMigrationRename.java 2012-01-24 11:11:47 UTC (rev 1355)
@@ -53,7 +53,7 @@
/**
* Recursively add extension with requires ones (orderer).
- * WikittyService used in this method must not have WikittyServiceSecurity
+ * WikittyService used in this method must not have WikittyServiceAuthorization
* in stack because we pass null as secuirtyToken to method. (TODO poussin
* 2010 verify this assertion, when we use Migration, we don't need
* Security)
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java 2012-01-24 11:11:47 UTC (rev 1355)
@@ -2,8 +2,8 @@
* #%L
* Wikitty :: api
*
- * $Id: WikittyServiceSecurity.java 1311 2012-01-09 19:03:18Z bpoussin $
- * $HeadURL: http://svn.nuiton.org/svn/wikitty/trunk/wikitty-api/src/main/java/org/nuito… $
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2009 - 2010 CodeLutin
* %%
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-client.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-client.properties 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-client.properties 2012-01-24 11:11:47 UTC (rev 1355)
@@ -25,7 +25,7 @@
wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceHessianClient,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
-org.nuiton.wikitty.services.WikittyServiceSecurity
+org.nuiton.wikitty.services.WikittyServiceAuthorization
wikitty.WikittyServiceNotifier.components=org.nuiton.wikitty.services.XMPPNotifierTransporter
wikitty.WikittyServiceCached.components=org.nuiton.wikitty.services.WikittyCacheJCS
wikitty.service.cache.allwaysRestoreCopies=false
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-inmemory.properties 2012-01-24 11:11:47 UTC (rev 1355)
@@ -35,7 +35,8 @@
wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
-org.nuiton.wikitty.services.WikittyServiceSecurity
+org.nuiton.wikitty.services.WikittyServiceAuthentication,\
+org.nuiton.wikitty.services.WikittyServiceAuthorization
wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-server-slave.properties 2012-01-24 11:11:47 UTC (rev 1355)
@@ -38,7 +38,7 @@
org.nuiton.wikitty.services.WikittyServiceSlave,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
-org.nuiton.wikitty.services.WikittyServiceSecurity,\
+org.nuiton.wikitty.services.WikittyServiceAuthorization,\
org.nuiton.wikitty.services.WikittyServiceHessianServer
wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-server.properties 2012-01-24 11:11:47 UTC (rev 1355)
@@ -37,7 +37,8 @@
wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
-org.nuiton.wikitty.services.WikittyServiceSecurity,\
+org.nuiton.wikitty.services.WikittyServiceAuthentication,\
+org.nuiton.wikitty.services.WikittyServiceAuthorization,\
org.nuiton.wikitty.services.WikittyServiceHessianServer
wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
Modified: trunk/wikitty-api/src/main/resources/wikitty-config-sample-standalone.properties
===================================================================
--- trunk/wikitty-api/src/main/resources/wikitty-config-sample-standalone.properties 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/main/resources/wikitty-config-sample-standalone.properties 2012-01-24 11:11:47 UTC (rev 1355)
@@ -37,7 +37,8 @@
wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\
org.nuiton.wikitty.services.WikittyServiceNotifier,\
org.nuiton.wikitty.services.WikittyServiceCached,\
-org.nuiton.wikitty.services.WikittyServiceSecurity
+org.nuiton.wikitty.services.WikittyServiceAuthentication,\
+org.nuiton.wikitty.services.WikittyServiceAuthorization
wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\
org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\
org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java 2012-01-24 11:11:47 UTC (rev 1355)
@@ -80,8 +80,10 @@
+ "," + WikittySearchEngineInMemory.class.getName());
WikittyService ws = WikittyServiceFactory.buildWikittyService(config);
- Assert.assertEquals(WikittyServiceSecurity.class, ws.getClass());
- ws = ((WikittyServiceSecurity) ws).getDelegate();
+ Assert.assertEquals(WikittyServiceAuthorization.class, ws.getClass());
+ ws = ((WikittyServiceAuthorization) ws).getDelegate();
+ Assert.assertEquals(WikittyServiceAuthentication.class, ws.getClass());
+ ws = ((WikittyServiceAuthentication) ws).getDelegate();
Assert.assertEquals(WikittyServiceCached.class, ws.getClass());
ws = ((WikittyServiceCached) ws).getDelegate();
Assert.assertEquals(WikittyServiceNotifier.class, ws.getClass());
Deleted: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceSecurityTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceSecurityTest.java 2012-01-24 10:39:11 UTC (rev 1354)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceSecurityTest.java 2012-01-24 11:11:47 UTC (rev 1355)
@@ -1,51 +0,0 @@
-package org.nuiton.wikitty.services;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.nuiton.util.ApplicationConfig;
-import org.nuiton.wikitty.WikittyClient;
-import org.nuiton.wikitty.WikittyConfig;
-import org.nuiton.wikitty.WikittyConfigOption;
-
-/**
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class WikittyServiceSecurityTest {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(WikittyServiceSecurityTest.class);
-
- @Test
- @Ignore // on l'ignore car il faut avoir accept a un LDAP et mettre en clair un mot de passe :(
- public void testLDAP() throws Exception {
- ApplicationConfig config = WikittyConfig.getConfig();
-
- String services = config.getOption(WikittyConfigOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey());
- services += "," + WikittyServiceSecurity.class.getName();
- config.setOption(WikittyConfigOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey(),
- services);
- config.setOption(WikittyConfigOption.WIKITTY_WIKITTYSERVICESECURITY_COMPONENTS.getKey(),
- WikittyServiceSecurityExternalAuthenticationLDAP.class.getName());
-
- config.setOption(WikittyConfigOption
- .WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_SERVER.getKey(),
- "ldap://intranet:389");
- config.setOption(WikittyConfigOption
- .WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_LOGIN_PATTERN.getKey(),
- "uid=%s,ou=People,dc=codelutin,dc=home");
- WikittyClient client = new WikittyClient(config);
- client.login("poussin", "xxxx");
- System.out.println("token:" + client.getSecurityToken());
- System.out.println("user: " + client.getUser());
-
- System.out.println("config: " + config.getFlatOptions());
-
- }
-}
1
0
r1354 - trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services
by bpoussin@users.nuiton.org 24 Jan '12
by bpoussin@users.nuiton.org 24 Jan '12
24 Jan '12
Author: bpoussin
Date: 2012-01-24 11:39:11 +0100 (Tue, 24 Jan 2012)
New Revision: 1354
Url: http://nuiton.org/repositories/revision/wikitty/1354
Log:
Evolution #1916: Split WikittyServiceSecurity in two service Authentication and Authorization
- remove login/logout method from WikittyServiceAuthorization this methods are now in WikittyServiceAuthentication
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java 2012-01-23 18:51:14 UTC (rev 1353)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java 2012-01-24 10:39:11 UTC (rev 1354)
@@ -27,13 +27,10 @@
import static org.nuiton.i18n.I18n._;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
import java.util.Set;
-import java.util.UUID;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
@@ -47,19 +44,22 @@
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.entities.WikittyGroup;
import org.nuiton.wikitty.entities.WikittyGroupHelper;
-import org.nuiton.wikitty.entities.WikittyImpl;
import org.nuiton.wikitty.entities.WikittyMetaExtensionUtil;
import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.entities.WikittyTokenHelper;
import org.nuiton.wikitty.entities.WikittyTreeNode;
-import org.nuiton.wikitty.entities.WikittyUser;
-import org.nuiton.wikitty.entities.WikittyUserHelper;
import org.nuiton.wikitty.WikittyUtil;
import org.nuiton.wikitty.query.WikittyQuery;
import org.nuiton.wikitty.query.WikittyQueryMaker;
/**
+ * Cette classe gere les autorisations d'acces en utilisant les
+ * WikittyAuthorization, il faut donc que la personne soit loggue et donc
+ * qu'il y ait un WikittyServiceAuthentication dans la pile des services, le
+ * plus souvent avant le WikittyServiceAuthorization pour que la methode de
+ * login ne but pas sur les autorisations.
*
+ *
* FIXME add security policy level two on wikittyAuthorisation to prevent writing
*
* @author poussin
@@ -79,10 +79,6 @@
/** cache de l'id du groupe AppAdmin */
transient protected String appAdminGroupId = null;
- /** si non null alors un mecanisme d'authentification externe est utilise */
- protected WikittyServiceSecurityExternalAuthentication auth;
- protected boolean externalAuthOnly = false;
-
/**
*
* @param config
@@ -90,17 +86,13 @@
* @param auth si non null alors un mecanisme d'authentification externe est
* utilise
*/
- public WikittyServiceAuthorization(ApplicationConfig config, WikittyService ws,
- WikittyServiceSecurityExternalAuthentication auth) {
+ public WikittyServiceAuthorization(ApplicationConfig config, WikittyService ws) {
super(ws);
- this.auth = auth;
if (config != null) {
- externalAuthOnly = config.getOptionAsBoolean(WikittyConfigOption.
- WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_ONLY.getKey());
long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption.
- WIKITTY_SECURITY_TIME_TO_LOG_INFO.getKey());
+ WIKITTY_SERVICE_TIME_TO_LOG_INFO.getKey());
long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption.
- WIKITTY_SECURITY_TIME_TO_LOG_WARN.getKey());
+ WIKITTY_SERVICE_TIME_TO_LOG_WARN.getKey());
timeLog.setTimeToLogInfo(timeToLogInfo);
timeLog.setTimeToLogWarn(timeToLogWarn);
}
@@ -117,91 +109,6 @@
}
@Override
- public String login(String login, String password) {
- long start = TimeLog.getTime();
-
- Wikitty user = null;
- String tokenId;
-
- WikittyQuery criteria = new WikittyQueryMaker()
- .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).end();
- String userId = getDelegate().findByQuery(null,
- Collections.singletonList(criteria)).get(0);
-
- boolean authenticated = false;
- if (auth != null) {
- // on a un moyen externe d'authentification, on l'utilise en 1er
- authenticated = auth.login(login, password);
- if (authenticated) {
- log.info(String.format(
- "External authentication success for account '%s'", login));
- // authentification reussi
- // si l'utilisateur n'existe pas encore on le cree
- if (userId == null) {
- user = new WikittyImpl();
- WikittyUserHelper.addExtension(user);
- WikittyUserHelper.setLogin(user, login);
- // on met un mot de passe genere car l'authentification
- // est faite par un moyen externe. Si pour une raison
- // celui-ci n'est pas active, il ne faut pas que l'utilisateur
- // puisse se loguer avec une mot de passe reel (trouvable facilement)
- String generatedPassword = "external-" + UUID.randomUUID();
- WikittyUserHelper.setPassword(user, generatedPassword);
- getDelegate().store(null, Collections.singletonList(user), false);
- log.info(String.format(
- "Automatic user creation for account '%s'", login));
- } else {
- // sinon on le charge
- user = WikittyServiceEnhanced.restore(
- getDelegate(), null, userId);
- }
- }
- }
-
- // si pas authentification externe ou l'authentification n'a pas reussi
- // c'est peut-etre un utilisateur local, et qu'on authorise l'authentification
- // local
- if (!authenticated && !externalAuthOnly) {
- if (userId == null) {
- log.info(String.format("no such account '%s'", login));
- } else {
- user = WikittyServiceEnhanced.restore(
- getDelegate(), null, userId);
- // check password is valid
- authenticated = WikittyUserHelper.getPassword(user).equals(password);
- }
- }
-
- if (authenticated) {
- tokenId = WikittyUtil.genSecurityTokenId();
- Wikitty wikittyToken = new WikittyImpl(tokenId);
- // force add extension to wikitty
- WikittyTokenHelper.addExtension(wikittyToken);
- WikittyTokenHelper.setUser(wikittyToken, user.getId());
- WikittyTokenHelper.setDate(wikittyToken, new Date());
- getDelegate().store(null, Arrays.asList(wikittyToken), false);
- if (log.isDebugEnabled()) {
- log.debug(String.format("token '%s' is for login '%s'",
- tokenId, login));
- }
- } else {
- throw new SecurityException("bad login or password");
- }
-
- timeLog.log(start, "login");
- return tokenId;
- }
-
- @Override
- public void logout(String securityToken) {
- long start = TimeLog.getTime();
- if (securityToken != null) {
- getDelegate().delete(securityToken, Arrays.asList(securityToken));
- }
- timeLog.log(start, "logout");
- }
-
- @Override
public WikittyEvent clear(String securityToken) {
String userId = getUserId(securityToken);
if (isAppAdmin(securityToken, userId)) {
1
0
r1353 - in trunk/wikitty-api/src: main/java/org/nuiton/wikitty main/java/org/nuiton/wikitty/services test/java/org/nuiton/wikitty/services
by bpoussin@users.nuiton.org 23 Jan '12
by bpoussin@users.nuiton.org 23 Jan '12
23 Jan '12
Author: bpoussin
Date: 2012-01-23 19:51:14 +0100 (Mon, 23 Jan 2012)
New Revision: 1353
Url: http://nuiton.org/repositories/revision/wikitty/1353
Log:
Evolution #1916: Split WikittyServiceSecurity in two service Authentication and Authorization
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthentication.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationAbstract.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAP.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAPTest.java
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittySecurityUtil.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthentication.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthenticationLDAP.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java 2012-01-20 17:11:12 UTC (rev 1352)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -197,6 +197,7 @@
+ " ex:WikittyServiceSecurityExternalAuthenticationLDAP"),
null,
String.class, false, false),
+ @Deprecated // not used any more with new split of authentification and authorization
WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_ONLY(
"wikitty.security.externalAuthenticationOnly",
n_("Indique si on doit utiliser que le composant d'authentification externe"
@@ -204,6 +205,7 @@
+ " etre configurer, sinon aucun utilisateur ne pourra se logguer"),
"false",
Boolean.class, false, false),
+ @Deprecated // not used any more with new split of authentification and authorization
WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_JNDI(
"wikitty.security.externalAuthentication.ldap.jndi.",
n_("Prefix a utiliser pour ajouter n'importe quelle option supporte par le"
@@ -211,6 +213,7 @@
+ " se prefixe la cle jndi ex: '<prefix>java.naming.security.protocol"),
null,
String.class, false, false),
+ @Deprecated // not used any more with new split of authentification and authorization
WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_JNDI_INITIAL_CONTEXT_FACTORY(
WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_JNDI.getKey() + "java.naming.factory.initial",
n_("Indique l'initial context factory a utiliser par defaut 'com.sun.jndi.ldap.LdapCtxFactory'"),
@@ -223,12 +226,14 @@
"simple",
String.class, false, false),
// LDAP serveur n'est pas en prefix JNDI, car pourrait servir ailleur que pour JNDI
+ @Deprecated // not used any more with new split of authentification and authorization
WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_SERVER(
"wikitty.security.externalAuthentication.ldap.server",
n_("Indique l'url du serveur LDAP (obligatoire)"),
null,
String.class, false, false),
// LDAP login pattern n'est pas en prefix JNDI, car pourrait servir ailleur que pour JNDI
+ @Deprecated // not used any more with new split of authentification and authorization
WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_LOGIN_PATTERN(
"wikitty.security.externalAuthentication.ldap.loginPattern",
n_("Le pattern utilise pour generer le DN de l'utilisateur. le '%s' est"
@@ -340,16 +345,75 @@
+ "wikitty.migration.class.WikittyUser=org.nuiton.wikitty.entities.MigrationUser"),
"",
Class.class, false, false),
+ @Deprecated // use WIKITTY_SERVICE_TIME_TO_LOG_INFO
WIKITTY_SECURITY_TIME_TO_LOG_INFO(
"wikitty.security.timeToLog.info",
n_("maximum time before send log info with time consumed"),
"100",
Integer.class, false, false),
+ @Deprecated // use WIKITTY_SERVICE_TIME_TO_LOG_WARN
WIKITTY_SECURITY_TIME_TO_LOG_WARN(
"wikitty.security.timeToLog.warn",
n_("maximum time before send log warn with time consumed"),
"500",
Integer.class, false, false),
+ WIKITTY_SERVICE_TIME_TO_LOG_INFO(
+ "wikitty.service.timeToLog.info",
+ n_("maximum time before send log info with time consumed"),
+ "100",
+ Integer.class, false, false),
+ WIKITTY_SERVICE_TIME_TO_LOG_WARN(
+ "wikitty.service.timeToLog.warn",
+ n_("maximum time before send log warn with time consumed"),
+ "500",
+ Integer.class, false, false),
+ WIKITTY_SERVICE_AUTHENTICATION_TIMEOUT(
+ "wikitty.WikittyServiceAuthentication.timeout",
+ n_("maximum time in seconde before remove authentication token in database,"
+ + " by default never timeout"),
+ "0",
+ Integer.class, false, false),
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_AUTOCREATE_USER(
+ "wikitty.WikittyServiceAuthenticationLDAP.autoCreateUser",
+ n_("Si vrai et que l'utilisateur n'est que dans le LDAP, lors de sa premiere"
+ + " authentification il sera automatiquement creer dans la base"
+ + " Wikitty. Si faux et que l'utilisateur n'existe pas,"
+ + " l'authentification echouera toujours tant que l'utilisateur ne"
+ + " sera pas cree manuellement dans la base Wikitty"),
+ "true",
+ Boolean.class, false, false),
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI(
+ "wikitty.WikittyServiceAuthenticationLDAP.jndi.",
+ n_("Prefix a utiliser pour ajouter n'importe quelle option supporte par le"
+ + " jndi pour la creation du initialContext. Vous ajoutez derriere"
+ + " se prefixe la cle jndi ex: '<prefix>java.naming.security.protocol"),
+ null,
+ String.class, false, false),
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI_INITIAL_CONTEXT_FACTORY(
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI.getKey() + "java.naming.factory.initial",
+ n_("Indique l'initial context factory a utiliser par defaut 'com.sun.jndi.ldap.LdapCtxFactory'"),
+ "com.sun.jndi.ldap.LdapCtxFactory",
+ String.class, false, false),
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI_SECURITY_AUTHENTICATION(
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI.getKey() + "java.naming.security.authentication",
+ n_("Indique le mode d'authentification a utiliser par defaut 'simple'."
+ + " Les modes possibles sont 'simple', 'SSL', 'SASL'"),
+ "simple",
+ String.class, false, false),
+ // LDAP serveur n'est pas en prefix JNDI, car pourrait servir ailleur que pour JNDI
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_SERVER(
+ "wikitty.WikittyServiceAuthenticationLDAP.server",
+ n_("Indique l'url du serveur LDAP (obligatoire)"),
+ null,
+ String.class, false, false),
+ // LDAP login pattern n'est pas en prefix JNDI, car pourrait servir ailleur que pour JNDI
+ WIKITTY_SERVICE_AUTHENTICATION_LDAP_LOGIN_PATTERN(
+ "wikitty.WikittyServiceAuthenticationLDAP.loginPattern",
+ n_("Le pattern utilise pour generer le DN de l'utilisateur. le '%s' est"
+ + " remplace par le login (obligatoire)."
+ + " Par exemple: 'uid=%s,ou=People,dc=codelutin,dc=com'"),
+ null,
+ String.class, false, false),
JCS_DEFAULT("jcs.default",
n_("jcs auxiliares to use"),
"",
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittySecurityUtil.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittySecurityUtil.java 2012-01-20 17:11:12 UTC (rev 1352)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittySecurityUtil.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -24,7 +24,11 @@
*/
package org.nuiton.wikitty.services;
+import java.util.Collections;
+import java.util.Date;
import java.util.Set;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.wikitty.WikittyConfigOption;
import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyGroup;
@@ -48,6 +52,40 @@
static final public String WIKITTY_APPADMIN_GROUP_NAME = "WikittyAppAdmin";
/**
+ * Verifie si la date du token depasse le temps authorise pour un token
+ * Si l'option n'est pas presente dans la config retourne toujours false
+ * (donc le token a une validite permanente)
+ *
+ * @param date la date a verifier
+ * @return vrai si la date est depassee
+ */
+ public static boolean isOutdated(
+ ApplicationConfig config, WikittyService ws, String tokenId) {
+ boolean result = false;
+
+ if (config != null) {
+ // TODO poussin 20120123 prevoir un timeout dans la config
+ // qui invaliderait le vieux token et en recreerait un nouveau
+ long timeout = 1000 * config.getOptionAsLong(
+ WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_TIMEOUT.getKey());
+ if (timeout > 0) {
+ Wikitty token = ws.restore(
+ null, Collections.singletonList(tokenId)).get(0);
+ Date date = WikittyTokenHelper.getDate(token);
+
+ Date now = new Date();
+ long nowMillis = now.getTime();
+ long dateMillis = date.getTime();
+ long delta = nowMillis - dateMillis;
+
+ result = delta > timeout;
+ }
+ }
+
+ return result;
+ }
+
+ /**
* Check on a WikittyService if a user is member of a group. A
* SecurityException might be thrown at runtime if the securityToken has
* expired.
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthentication.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthentication.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthentication.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -0,0 +1,83 @@
+package org.nuiton.wikitty.services;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.TimeLog;
+import org.nuiton.wikitty.WikittyConfigOption;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyImpl;
+import org.nuiton.wikitty.entities.WikittyTokenHelper;
+import org.nuiton.wikitty.entities.WikittyUser;
+import org.nuiton.wikitty.entities.WikittyUserHelper;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+
+/**
+ * Implantation de base de l'authentification sur Wikitty lui même.
+ * Cherche a authentifier l'utilisateur sur un objet WikittyUser via son
+ * login et mot de passe. Ce service doit retourne un token valide si
+ * l'authorisation a fonctionne.
+ *
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyServiceAuthentication extends WikittyServiceAuthenticationAbstract {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceAuthentication.class);
+
+ /** use to trace time of security code, timelog must not include delegator
+ * time in this class */
+ final static private TimeLog timeLog = new TimeLog(WikittyServiceAuthentication.class);
+
+ public WikittyServiceAuthentication(ApplicationConfig config, WikittyService ws) {
+ super(config, ws);
+ if (config != null) {
+ long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SECURITY_TIME_TO_LOG_INFO.getKey());
+ long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SECURITY_TIME_TO_LOG_WARN.getKey());
+ timeLog.setTimeToLogInfo(timeToLogInfo);
+ timeLog.setTimeToLogWarn(timeToLogWarn);
+ }
+ }
+
+ @Override
+ public String login(String login, String password) {
+ long start = TimeLog.getTime();
+
+ String tokenId;
+
+ WikittyQuery criteria = new WikittyQueryMaker()
+ .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).end();
+ String userId = getDelegate().findByQuery(null,
+ Collections.singletonList(criteria)).get(0);
+
+ if (userId == null) {
+ throw new SecurityException(String.format("no such account '%s'", login));
+ } else {
+ Wikitty user = WikittyServiceEnhanced.restore(
+ getDelegate(), null, userId);
+ // check password is valid
+ if (WikittyUserHelper.getPassword(user).equals(password)) {
+ tokenId = getToken(user);
+ } else {
+ throw new SecurityException("bad login or password");
+ }
+ }
+
+ timeLog.log(start, "login");
+ return tokenId;
+ }
+
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationAbstract.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationAbstract.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationAbstract.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -0,0 +1,122 @@
+package org.nuiton.wikitty.services;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.TimeLog;
+import org.nuiton.wikitty.WikittyConfigOption;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyImpl;
+import org.nuiton.wikitty.entities.WikittyToken;
+import org.nuiton.wikitty.entities.WikittyTokenHelper;
+import org.nuiton.wikitty.entities.WikittyUserHelper;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+
+/**
+ * Classe abstraite pour simplifier l'implantation d'autre methode
+ * d'authentification. Ce serivce surcharge logout qui supprime le token
+ * et la methode getToken qui recupere ou genere un token.
+ *
+ * Pour implanter une nouveau service, il faut faire l'authentification de la
+ * personne si elle reussi, on retourne l'id du token retourne par getToken
+ * si l'authentification echoue il faut lever une exception.
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public abstract class WikittyServiceAuthenticationAbstract extends WikittyServiceDelegator {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceAuthenticationAbstract.class);
+
+ /** use to trace time of security code, timelog must not include delegator
+ * time in this class */
+ final static private TimeLog timeLog = new TimeLog(WikittyServiceAuthenticationAbstract.class);
+
+ protected ApplicationConfig config;
+
+ public WikittyServiceAuthenticationAbstract(WikittyService delegate) {
+ this(null, delegate);
+ }
+
+ public WikittyServiceAuthenticationAbstract(
+ ApplicationConfig config, WikittyService delegate) {
+ super(delegate);
+ this.config = config;
+
+ if (config != null) {
+ long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SERVICE_TIME_TO_LOG_INFO.getKey());
+ long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SERVICE_TIME_TO_LOG_WARN.getKey());
+ timeLog.setTimeToLogInfo(timeToLogInfo);
+ timeLog.setTimeToLogWarn(timeToLogWarn);
+ }
+ }
+
+ @Override
+ abstract public String login(String login, String password);
+
+ /**
+ * Recherche si l'utilisateur n'a pas deja un token, et dans ce cas on
+ * retourne le meme token. Sinon on en cree un nouveau
+ *
+ * @param user l'utilisateur pour l'equel il faut recherche/creer le token
+ * @return le token de l'utilisateur
+ */
+ protected String getToken(Wikitty user) {
+ // on recherche si l'utilisateur n'est pas deja authentifier.
+ // s'il l'est on lui retourne le meme token.
+ WikittyQuery query = new WikittyQueryMaker()
+ .eq(WikittyToken.ELEMENT_FIELD_WIKITTYTOKEN_USER, user.getId())
+ .end()
+ .setLimit(1);
+
+ String tokenId = getDelegate().findByQuery(
+ null, Collections.singletonList(query)).get(0);
+
+ // on a retrouve un ancien token, on le reutilise peut-etre
+ if (tokenId != null) {
+ if (WikittySecurityUtil.isOutdated(config, getDelegate(), tokenId)) {
+ getDelegate().delete(tokenId, Arrays.asList(tokenId));
+ tokenId = null;
+ }
+ }
+
+ if (tokenId == null) {
+ // generation d'un nouveau token
+ tokenId = WikittyUtil.genSecurityTokenId();
+ Wikitty wikittyToken = new WikittyImpl(tokenId);
+ // force add extension to wikitty
+ WikittyTokenHelper.addExtension(wikittyToken);
+ WikittyTokenHelper.setUser(wikittyToken, user.getId());
+ WikittyTokenHelper.setDate(wikittyToken, new Date());
+ getDelegate().store(null, Arrays.asList(wikittyToken), false);
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("token '%s' is for login '%s'",
+ tokenId, WikittyUserHelper.getLogin(user)));
+ }
+ }
+ return tokenId;
+ }
+
+ @Override
+ public void logout(String securityToken) {
+ long start = TimeLog.getTime();
+ if (securityToken != null) {
+ getDelegate().delete(securityToken, Arrays.asList(securityToken));
+ }
+ timeLog.log(start, "logout");
+ }
+
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAP.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAP.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAP.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -0,0 +1,163 @@
+package org.nuiton.wikitty.services;
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Properties;
+import java.util.UUID;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.TimeLog;
+import org.nuiton.wikitty.WikittyConfigOption;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyImpl;
+import org.nuiton.wikitty.entities.WikittyUser;
+import org.nuiton.wikitty.entities.WikittyUserHelper;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+
+/**
+ * Permet de faire une authentification sur un serveur LDAP. Il faut pour cela
+ * fournir les informations pour se connecter au LDAP (url du serveur, pattern
+ * des DN des utilisateurs et toutes autres informations utiles).
+ *
+ * Il est possible d'indiquer de creer automatiquement l'objet WikittyUser
+ * associe au compte LDAP si celui-ci n'existe pas. Si le WikittyUser n'existe
+ * pas et qu'on a pas le droit de le creer, l'authentification echoue forcement
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyServiceAuthenticationLDAP extends WikittyServiceAuthenticationAbstract {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceAuthenticationLDAP.class);
+ /** use to trace time of security code, timelog must not include delegator
+ * time in this class */
+ final static private TimeLog timeLog = new TimeLog(WikittyServiceAuthenticationLDAP.class);
+
+ protected Properties jndiProp;
+ protected String ldapLoginPattern;
+
+ public WikittyServiceAuthenticationLDAP(ApplicationConfig config, WikittyService ws) {
+ super(config, ws);
+
+ long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SERVICE_TIME_TO_LOG_INFO.getKey());
+ long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SERVICE_TIME_TO_LOG_WARN.getKey());
+ timeLog.setTimeToLogInfo(timeToLogInfo);
+ timeLog.setTimeToLogWarn(timeToLogWarn);
+
+ // on charge toutes les options jndi
+ Properties jndiPropTmp = config.getOptionStartsWith(WikittyConfigOption
+ .WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI.getKey());
+
+ jndiProp = new Properties();
+ for (Enumeration<String> e=(Enumeration<String>)jndiPropTmp.propertyNames(); e.hasMoreElements();) {
+ String key = e.nextElement();
+ String value = jndiPropTmp.getProperty(key);
+ int debut = WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI.getKey().length();
+ key = key.substring(debut);
+ jndiProp.setProperty(key, value);
+ }
+
+ // on charge l'url du serveur ldap
+ String serverUrl = config.getOption(
+ WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_LDAP_SERVER.getKey());
+ jndiProp.put(Context.PROVIDER_URL, serverUrl);
+
+ // on charge le pattern des logins (DN)
+ ldapLoginPattern = config.getOption(
+ WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_LDAP_LOGIN_PATTERN.getKey());
+ }
+
+ protected boolean canCreateUser() {
+ boolean result = config.getOptionAsBoolean(
+ WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_LDAP_AUTOCREATE_USER.getKey());
+ return result;
+ }
+
+ @Override
+ public String login(String login, String password) {
+ long start = TimeLog.getTime();
+
+ Wikitty user = null;
+ String tokenId;
+
+ WikittyQuery criteria = new WikittyQueryMaker()
+ .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).end();
+ String userId = getDelegate().findByQuery(null,
+ Collections.singletonList(criteria)).get(0);
+
+ boolean authenticated = false;
+
+ // si l'utilisateur existe deja ou qu'on pourra le creer alors on va
+ // plus loin dans l'authentification
+ if (canCreateUser() || userId != null) {
+
+ String ldapLogin = String.format(ldapLoginPattern, login);
+
+ // on fait une copie pour etre thread safe (si plusieurs thread appele
+ // cette methode en meme temps
+ Hashtable<String, String> env = new Hashtable(jndiProp);
+ env.put(Context.SECURITY_PRINCIPAL, ldapLogin);
+ env.put(Context.SECURITY_CREDENTIALS, password);
+
+ try {
+ DirContext dirContext = new InitialDirContext(env);
+ dirContext.close();
+ authenticated = true;
+ } catch (NamingException eee) {
+ log.debug(String.format(
+ "Erreur lors de l'acces au serveur LDAP pour l'utilisateur %s -> %s",
+ login, ldapLogin), eee);
+ }
+
+ if (authenticated) {
+ log.info(String.format(
+ "External authentication success for account '%s'", login));
+ // authentification reussi
+ // si l'utilisateur n'existe pas encore on le cree si autorise par la config
+ if (userId == null) {
+ user = new WikittyImpl();
+ WikittyUserHelper.addExtension(user);
+ WikittyUserHelper.setLogin(user, login);
+ // on met un mot de passe genere car l'authentification
+ // est faite par un moyen externe. Si pour une raison
+ // celui-ci n'est pas active, il ne faut pas que l'utilisateur
+ // puisse se loguer avec une mot de passe reel (trouvable facilement)
+ String generatedPassword = "external-" + UUID.randomUUID();
+ WikittyUserHelper.setPassword(user, generatedPassword);
+ getDelegate().store(null, Collections.singletonList(user), false);
+ log.info(String.format(
+ "Automatic user creation for account '%s'", login));
+ } else {
+ // sinon on le charge
+ user = WikittyServiceEnhanced.restore(
+ getDelegate(), null, userId);
+ }
+ }
+ }
+
+ if (authenticated) {
+ tokenId = getToken(user);
+ } else {
+ throw new SecurityException("bad login or password");
+ }
+
+ timeLog.log(start, "login");
+ return tokenId;
+ }
+
+
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAuthorization.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -0,0 +1,903 @@
+/*
+ * #%L
+ * Wikitty :: api
+ *
+ * $Id: WikittyServiceSecurity.java 1311 2012-01-09 19:03:18Z bpoussin $
+ * $HeadURL: http://svn.nuiton.org/svn/wikitty/trunk/wikitty-api/src/main/java/org/nuito… $
+ * %%
+ * 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.services;
+
+import static org.nuiton.i18n.I18n._;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+import org.apache.commons.lang.StringUtils;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.TimeLog;
+import org.nuiton.wikitty.WikittyConfigOption;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyAuthorisation;
+import org.nuiton.wikitty.entities.WikittyAuthorisationHelper;
+import org.nuiton.wikitty.entities.WikittyExtension;
+import org.nuiton.wikitty.entities.WikittyGroup;
+import org.nuiton.wikitty.entities.WikittyGroupHelper;
+import org.nuiton.wikitty.entities.WikittyImpl;
+import org.nuiton.wikitty.entities.WikittyMetaExtensionUtil;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.entities.WikittyTokenHelper;
+import org.nuiton.wikitty.entities.WikittyTreeNode;
+import org.nuiton.wikitty.entities.WikittyUser;
+import org.nuiton.wikitty.entities.WikittyUserHelper;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+
+/**
+ *
+ * FIXME add security policy level two on wikittyAuthorisation to prevent writing
+ *
+ * @author poussin
+ * @version $Revision: 1311 $
+ *
+ * Last update: $Date: 2012-01-09 20:03:18 +0100 (Mon, 09 Jan 2012) $
+ * by : $Author: bpoussin $
+ */
+public class WikittyServiceAuthorization extends WikittyServiceDelegator {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ final static private Log log = LogFactory.getLog(WikittyServiceAuthorization.class);
+ /** use to trace time of security code, timelog must not include delegator
+ * time in this class */
+ final static private TimeLog timeLog = new TimeLog(WikittyServiceAuthorization.class);
+
+ /** cache de l'id du groupe AppAdmin */
+ transient protected String appAdminGroupId = null;
+
+ /** si non null alors un mecanisme d'authentification externe est utilise */
+ protected WikittyServiceSecurityExternalAuthentication auth;
+ protected boolean externalAuthOnly = false;
+
+ /**
+ *
+ * @param config
+ * @param ws
+ * @param auth si non null alors un mecanisme d'authentification externe est
+ * utilise
+ */
+ public WikittyServiceAuthorization(ApplicationConfig config, WikittyService ws,
+ WikittyServiceSecurityExternalAuthentication auth) {
+ super(ws);
+ this.auth = auth;
+ if (config != null) {
+ externalAuthOnly = config.getOptionAsBoolean(WikittyConfigOption.
+ WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_ONLY.getKey());
+ long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SECURITY_TIME_TO_LOG_INFO.getKey());
+ long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption.
+ WIKITTY_SECURITY_TIME_TO_LOG_WARN.getKey());
+ timeLog.setTimeToLogInfo(timeToLogInfo);
+ timeLog.setTimeToLogWarn(timeToLogWarn);
+ }
+ }
+
+ @Override
+ public void addWikittyServiceListener(WikittyListener listener, ServiceListenerType type) {
+ getDelegate().addWikittyServiceListener(listener, type);
+ }
+
+ @Override
+ public void removeWikittyServiceListener(WikittyListener listener, ServiceListenerType type) {
+ getDelegate().addWikittyServiceListener(listener, type);
+ }
+
+ @Override
+ public String login(String login, String password) {
+ long start = TimeLog.getTime();
+
+ Wikitty user = null;
+ String tokenId;
+
+ WikittyQuery criteria = new WikittyQueryMaker()
+ .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).end();
+ String userId = getDelegate().findByQuery(null,
+ Collections.singletonList(criteria)).get(0);
+
+ boolean authenticated = false;
+ if (auth != null) {
+ // on a un moyen externe d'authentification, on l'utilise en 1er
+ authenticated = auth.login(login, password);
+ if (authenticated) {
+ log.info(String.format(
+ "External authentication success for account '%s'", login));
+ // authentification reussi
+ // si l'utilisateur n'existe pas encore on le cree
+ if (userId == null) {
+ user = new WikittyImpl();
+ WikittyUserHelper.addExtension(user);
+ WikittyUserHelper.setLogin(user, login);
+ // on met un mot de passe genere car l'authentification
+ // est faite par un moyen externe. Si pour une raison
+ // celui-ci n'est pas active, il ne faut pas que l'utilisateur
+ // puisse se loguer avec une mot de passe reel (trouvable facilement)
+ String generatedPassword = "external-" + UUID.randomUUID();
+ WikittyUserHelper.setPassword(user, generatedPassword);
+ getDelegate().store(null, Collections.singletonList(user), false);
+ log.info(String.format(
+ "Automatic user creation for account '%s'", login));
+ } else {
+ // sinon on le charge
+ user = WikittyServiceEnhanced.restore(
+ getDelegate(), null, userId);
+ }
+ }
+ }
+
+ // si pas authentification externe ou l'authentification n'a pas reussi
+ // c'est peut-etre un utilisateur local, et qu'on authorise l'authentification
+ // local
+ if (!authenticated && !externalAuthOnly) {
+ if (userId == null) {
+ log.info(String.format("no such account '%s'", login));
+ } else {
+ user = WikittyServiceEnhanced.restore(
+ getDelegate(), null, userId);
+ // check password is valid
+ authenticated = WikittyUserHelper.getPassword(user).equals(password);
+ }
+ }
+
+ if (authenticated) {
+ tokenId = WikittyUtil.genSecurityTokenId();
+ Wikitty wikittyToken = new WikittyImpl(tokenId);
+ // force add extension to wikitty
+ WikittyTokenHelper.addExtension(wikittyToken);
+ WikittyTokenHelper.setUser(wikittyToken, user.getId());
+ WikittyTokenHelper.setDate(wikittyToken, new Date());
+ getDelegate().store(null, Arrays.asList(wikittyToken), false);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("token '%s' is for login '%s'",
+ tokenId, login));
+ }
+ } else {
+ throw new SecurityException("bad login or password");
+ }
+
+ timeLog.log(start, "login");
+ return tokenId;
+ }
+
+ @Override
+ public void logout(String securityToken) {
+ long start = TimeLog.getTime();
+ if (securityToken != null) {
+ getDelegate().delete(securityToken, Arrays.asList(securityToken));
+ }
+ timeLog.log(start, "logout");
+ }
+
+ @Override
+ public WikittyEvent clear(String securityToken) {
+ String userId = getUserId(securityToken);
+ if (isAppAdmin(securityToken, userId)) {
+ // seul les AppAdmin on le droit a cette method
+ WikittyEvent result = getDelegate().clear(securityToken);
+ return result;
+ } else {
+ throw new SecurityException(_("user %s can't clear data", userId));
+ }
+ }
+
+ @Override
+ public WikittyEvent replay(
+ String securityToken, List<WikittyEvent> events, boolean force) {
+ long start = TimeLog.getTime();
+
+ String userId = getUserId(securityToken);
+ for (WikittyEvent e : events) {
+ if (e.getType().contains(
+ WikittyEvent.WikittyEventType.CLEAR_WIKITTY)
+ || e.getType().contains(
+ WikittyEvent.WikittyEventType.CLEAR_EXTENSION)) {
+ if (isAppAdmin(securityToken, userId)) {
+ // seul les AppAdmin on le droit a cette method
+ // les AppAdmin on meme le droit de tout faire, donc on
+ // peut sortir de la boucle
+ break;
+ } else {
+ throw new SecurityException(_("user %s can't clear data", userId));
+ }
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.PUT_WIKITTY)) {
+ checkStore(securityToken, e.getWikitties().values());
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.REMOVE_WIKITTY)) {
+ checkDelete(securityToken, e.getRemoveDate().keySet());
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.PUT_EXTENSION)) {
+ checkStoreExtension(securityToken, e.getExtensions().values());
+ }
+ if (e.getType().contains(WikittyEvent.WikittyEventType.REMOVE_EXTENSION)) {
+ checkDeleteExtension(securityToken, e.getDeletedExtensions());
+ }
+ }
+
+ timeLog.log(start, "replay");
+ WikittyEvent result = getDelegate().replay(securityToken, events, force);
+ return result;
+ }
+
+
+ /**
+ * if app-admin group exists, return true if given userId is app-admin
+ * if app-admin group doesn't exists, return true if user is anonymous
+ */
+ protected boolean userIsAnonymousOrAppAdmin(String securityToken, String userId) {
+ boolean userIsAnonymousOrAppAdmin = false;
+
+ if (getAppAdminGroup(securityToken) == null) {
+ if (securityToken == null) {
+ // user is anonymous
+ userIsAnonymousOrAppAdmin = true;
+ }
+ } else {
+ if (isAppAdmin(securityToken, userId)) {
+ // user is appAdmin
+ userIsAnonymousOrAppAdmin = true;
+ }
+ }
+
+ return userIsAnonymousOrAppAdmin;
+ }
+
+ @Override
+ public WikittyEvent store(String securityToken,
+ Collection<Wikitty> wikitties, boolean force) {
+ long start = TimeLog.getTime();
+ checkStore(securityToken, wikitties);
+ timeLog.log(start, "store");
+ WikittyEvent result = getDelegate().store(securityToken, wikitties, force);
+ return result;
+ }
+
+ /**
+ * Indique si on a bien le droit d'enregistrer tout les wikitties de la
+ * collection. Des que pour un wikitty on a pas les droits, une exception
+ * est levee.
+ *
+ * @param securityToken
+ * @param wikitties
+ * @return
+ */
+ protected void checkStore(String securityToken, Collection<Wikitty> wikitties) {
+ String userId = getUserId(securityToken);
+ for (Wikitty wikitty : wikitties) {
+ if (wikitty == null) {
+ continue;
+ }
+ // usual case, a user want to store a wikitty
+ Wikitty oldVersion = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, wikitty.getId());
+
+ Collection<String> newExtensions = new ArrayList<String>(
+ wikitty.getExtensionNames());
+ if (oldVersion != null) {
+ // we already checked the rights for those extension
+ // re-do the check has too much cost, avoid it
+ newExtensions.removeAll(oldVersion.getExtensionNames());
+ }
+
+ // check that **reader** right on Security for all extension
+ for (String extensionName: newExtensions) {
+
+ Wikitty extensionRights = restoreExtensionAuthorisation(
+ securityToken, extensionName);
+ boolean canCreate = extensionRights == null ||
+ canRead(securityToken, userId, null, extensionRights);
+ if ( ! canCreate ) {
+ throw new SecurityException(_(
+ "user %s can't create instance of extension %s",
+ userId, extensionRights));
+ }
+ }
+
+ if (oldVersion != null) { // it's an update
+
+ for (String fqFieldDirtyName : wikitty.getDirty()) {
+
+ String concernedExtensionName = WikittyUtil
+ .getExtensionNameFromFQFieldName(fqFieldDirtyName);
+
+ if (log.isTraceEnabled()) {
+ log.trace(String.format(
+ "will update field %s from extension %s",
+ fqFieldDirtyName, concernedExtensionName));
+ }
+
+ boolean fieldRequireAdminRights = // true if field is a field of WikittyAuthorisation
+ // concerned extension is "WikittyAuthorisation"
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION.equals(
+ concernedExtensionName)
+ // or concerned extension is something like "AnyExtension:WikittyAuthorisation"
+ || WikittyAuthorisation.EXT_WIKITTYAUTHORISATION.equals(
+ WikittyUtil.getMetaExtensionNameFromFQMetaExtensionName(
+ concernedExtensionName));
+
+ boolean canChange; // will be true if user can modify the value of this field
+ // according to his level of rights
+ if (fieldRequireAdminRights) {
+ canChange = canAdmin(securityToken,
+ userId, concernedExtensionName, wikitty);
+ } else {
+ canChange = canWrite(securityToken,
+ userId, concernedExtensionName, wikitty);
+ }
+
+ // TODO poussin 20101208 quel est l'interet de faire cette copie ?
+ // surtout quelle ne fonctionne pas car le oldVersion n'a pas
+ // forcement toutes les extensions du nouveau wikitty
+ // Code supprime et remplace
+// if (canChange) {
+// Object newValue = wikitty.getFqField(fqFieldDirtyName);
+// oldVersion.setFqField(fqFieldDirtyName, newValue);
+// } else {
+// throw new SecurityException(_("user %s can't write field %s on wikitty %s",
+// userId, fqFieldDirtyName, wikitty));
+// }
+ if (!canChange) {
+ throw new SecurityException(_("user %s can't write field %s on wikitty %s",
+ userId, fqFieldDirtyName, wikitty));
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public List<Wikitty> restore(String securityToken, List<String> ids) {
+ String userId = getUserId(securityToken);
+ List<Wikitty> wikitties = getDelegate().restore(securityToken, ids);
+
+ long start = TimeLog.getTime();
+ for (Wikitty wikitty : wikitties) {
+ if (wikitty != null) {
+ refuseUnauthorizedRead(securityToken, userId, wikitty);
+ }
+ }
+ timeLog.log(start, "restore");
+ return wikitties;
+ }
+
+ /** throw an exception if read is not allowed */
+ protected void refuseUnauthorizedRead( String securityToken,
+ String userId,
+ Wikitty wikitty) {
+ if (wikitty != null) {
+ for (String extensionName : wikitty.getExtensionNames()) {
+ if ( ! canRead(securityToken, userId, extensionName, wikitty)) {
+ throw new SecurityException(_(
+ "user %s can't read extension %s on wikitty %s,"
+ + " it may be due to a global policy on the wikitty",
+ userId, extensionName, wikitty));
+ }
+ }
+ }
+ }
+
+ protected boolean canRead(String securityToken, String userId,
+ String extensionName, Wikitty wikitty) {
+
+ boolean canRead = false;
+
+ // first, check per-extension rights
+ if (wikitty.hasMetaExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION,
+ extensionName)) {
+ // there is a policy on the extension
+ canRead = isReader(securityToken, userId, wikitty, extensionName)
+ || canWrite(securityToken, userId, extensionName, wikitty);
+ }
+
+ if ( ! canRead &&
+ wikitty.hasExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION) ) {
+ // there is no policy for this extension
+ // but there is a policy for all extension of wikitty
+ canRead = isReader(securityToken, userId, wikitty, null)
+ || canWrite(securityToken, userId, extensionName, wikitty);
+ } else {
+ // no security policy, everything is allowed
+ canRead = true;
+ }
+
+ return canRead;
+ }
+
+ protected boolean canWrite(String securityToken, String userId,
+ String extensionName, Wikitty wikitty) {
+ boolean canWrite = false;
+
+ // first, check per-extension rights
+ if (wikitty.hasMetaExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION,
+ extensionName)) {
+ // there is a policy on the extension of fqFieldDirtyName
+ canWrite = isWriter(securityToken, userId, wikitty, extensionName)
+ || canAdmin(securityToken, userId, extensionName, wikitty);
+ }
+
+ if ( ! canWrite &&
+ wikitty.hasExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION) ) {
+ // there is no policy for this extension
+ // but there is a policy for all extension of wikitty
+ canWrite = isWriter(securityToken, userId, wikitty, null)
+ || canAdmin(securityToken, userId, extensionName, wikitty);
+ } else {
+ // no security policy, everything is allowed
+ canWrite = true;
+ }
+
+ return canWrite;
+ }
+
+ protected boolean canAdmin(String securityToken, String userId,
+ String extensionName, Wikitty wikitty) {
+
+ boolean canAdmin = false;
+
+ // first, check per-extension rights
+ if (wikitty.hasMetaExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION,
+ extensionName)) {
+ // there is a policy on the extension of fqFieldDirtyName
+ canAdmin = isAdmin(securityToken, userId, wikitty, extensionName)
+ || isOwner(securityToken, userId, wikitty, extensionName);
+ }
+ if ( ! canAdmin &&
+ wikitty.hasExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION) ) {
+ // there is no policy for this extension
+ // but there is a policy for all extension of wikitty
+ canAdmin = isAdmin(securityToken, userId, wikitty, null)
+ || isOwner(securityToken, userId, wikitty, null);
+ }
+ if ( ! canAdmin ) {
+ // still not admin, check appAdmin
+ canAdmin = isAppAdmin(securityToken, userId);
+ }
+
+ return canAdmin;
+ }
+
+ @Override
+ public WikittyEvent delete(String securityToken, Collection<String> ids) {
+ long start = TimeLog.getTime();
+ checkDelete(securityToken, ids);
+ timeLog.log(start, "delete");
+ WikittyEvent result = getDelegate().delete(securityToken, ids);
+ return result;
+ }
+
+ /**
+ * Check if we can delete all id passed in argument
+ * @param securityToken
+ * @param ids
+ */
+ public void checkDelete(String securityToken, Collection<String> ids) {
+ String userId = getUserId(securityToken);
+ List<String> idsAsList = new ArrayList<String>(ids);
+ List<Wikitty> wikitties = getDelegate().restore(securityToken, idsAsList);
+ for (Wikitty wikitty : wikitties) {
+ if (wikitty != null) {
+ for (String extensionName : wikitty.getExtensionNames()) {
+ if ( ! canWrite(securityToken, userId, extensionName, wikitty)) {
+ throw new SecurityException(_(
+ "user %s doesn't have rights on extension %s on wikitty %s",
+ userId, extensionName, wikitty));
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean canWrite(String securityToken, Wikitty wikitty) {
+ boolean result = true;
+ String userId = getUserId(securityToken);
+ for (String extName : wikitty.getExtensionNames()) {
+ result = result && isWriter(securityToken, userId, wikitty, extName);
+ if (!result) {
+ break;
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public boolean canDelete(String securityToken, String wikittyId) {
+ boolean result = true;
+ Wikitty wikitty = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, wikittyId);
+ if (wikitty != null) {
+ String userId = getUserId(securityToken);
+ for (String extName : wikitty.getExtensionNames()) {
+ result = result && isWriter(securityToken, userId, wikitty, extName);
+ if (!result) {
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public boolean canRead(String securityToken, String wikittyId) {
+ boolean result = true;
+ String userId = getUserId(securityToken);
+ Wikitty wikitty = WikittyServiceEnhanced.restore(getDelegate(), securityToken, wikittyId);
+ if (wikitty == null) {
+ result = false;
+ } else {
+ for (String extName : wikitty.getExtensionNames()) {
+ result = result && isReader(securityToken, userId, wikitty, extName);
+ if (!result) {
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ /* *** storing and restoring extensions ***/
+
+ protected void checkStoreExtension(String securityToken,
+ Collection<WikittyExtension> exts) {
+ String userId = getUserId(securityToken);
+ if ( ! isAppAdmin(securityToken, userId)) {
+ for (WikittyExtension extension : exts) {
+ Wikitty extensionAuthorisation = restoreExtensionAuthorisation(securityToken, extension.getName());
+ if (extensionAuthorisation != null) {
+ // canWrite is true if this user can modify the field for this extension
+ boolean canWrite = canWrite(securityToken, userId, null, extensionAuthorisation);
+ if ( ! canWrite) {
+ throw new SecurityException(_("user %s don't have write right for extension %s", userId, extension));
+ }
+ }
+ }
+ }
+ }
+
+ protected void checkDeleteExtension (String securityToken, Collection<String> extNames) {
+ // FIXME 20101115 poussin check security for extension deletion
+ }
+
+ @Override
+ public WikittyEvent storeExtension(String securityToken,
+ Collection<WikittyExtension> exts) {
+ long start = TimeLog.getTime();
+ checkStoreExtension(securityToken, exts);
+ timeLog.log(start, "storeExtension");
+ return getDelegate().storeExtension(securityToken, exts);
+ }
+
+ @Override
+ public WikittyEvent deleteExtension(
+ String securityToken, Collection<String> extNames) {
+ long start = TimeLog.getTime();
+ checkDeleteExtension(securityToken, extNames);
+ timeLog.log(start, "deleteExtension");
+ return getDelegate().deleteExtension(securityToken, extNames);
+ }
+
+ private void checkRestoreTreeNode(String securityToken, String userId, WikittyTreeNode treeNode) {
+ Wikitty treeNodeWikitty = WikittyUtil.getWikitty(getDelegate(), securityToken, treeNode);
+ refuseUnauthorizedRead(securityToken, userId, treeNodeWikitty);
+ }
+
+ @Override
+ public WikittyEvent deleteTree(String securityToken, String treeNodeId) {
+ Wikitty treeNodeWikitty = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, treeNodeId);
+
+ long start = TimeLog.getTime();
+ Collection<Wikitty> wikitties = Collections.singletonList(treeNodeWikitty);
+ // TODO poussin 20101222 perhaps we must check deletion authorization
+ // for all children ?
+ checkStore(securityToken, wikitties);
+ timeLog.log(start, "deleteTree");
+ return getDelegate().deleteTree(securityToken, treeNodeId);
+ }
+
+ @Override
+ public Wikitty restoreVersion(String securityToken, String wikittyId, String version) {
+ Wikitty wikitty = getDelegate().restoreVersion(securityToken, wikittyId, version);
+ long start = TimeLog.getTime();
+ String userId = getUserId(securityToken);
+ refuseUnauthorizedRead(securityToken, userId, wikitty);
+ timeLog.log(start, "restoreVersion");
+ return wikitty;
+ }
+
+ @Override
+ public void syncSearchEngine(String securityToken) {
+ long start = TimeLog.getTime();
+ String userId = getUserId(securityToken);
+ if (isAppAdmin(securityToken, userId)) {
+ timeLog.log(start, "syncSearchEngine");
+ // seul les AppAdmin on le droit a cette method
+ getDelegate().syncSearchEngine(securityToken);
+ } else {
+ throw new SecurityException(_("user %s can't sync search engine",
+ getUserId(securityToken)));
+ }
+ }
+
+ //
+ // Method helper to check right
+ //
+
+ /** tell who own a token (who got this token after login).
+ * @param securityToken the token whose owner will be returned
+ * @return a wikitty Id (wikitty has extension WikittyUser)
+ */
+ protected String getUserId(String securityToken) {
+ String result = null;
+ // recuperation de l'utilisateur associe au securityToken
+ // le securityToken est aussi l'id de l'objet
+ if (securityToken != null) {
+ Wikitty securityTokenWikitty = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, securityToken);
+ if (securityTokenWikitty == null) {
+ throw new SecurityException("bad (obsolete ?) token");
+ } else {
+ result = WikittyTokenHelper.getUser(securityTokenWikitty);
+ }
+ }
+ return result;
+ }
+
+ /**
+ *
+ * @param securityToken
+ * @param userId
+ * @param wikitty
+ * @param extensionName may be null
+ * @return
+ */
+ protected boolean isReader(String securityToken, String userId, Wikitty wikitty, String extensionName) {
+ boolean result;
+ String metaFieldName = WikittyUtil.getMetaFieldName(
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, extensionName,
+ WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_READER);
+ result = isMember(securityToken, userId, wikitty, metaFieldName, true);
+ return result;
+ }
+
+ /**
+ *
+ * @param securityToken
+ * @param userId
+ * @param wikitty
+ * @param extensionName may be null
+ * @return
+ */
+ protected boolean isWriter(String securityToken, String userId, Wikitty wikitty, String extensionName) {
+ boolean result;
+ String metaFieldName = WikittyUtil.getMetaFieldName(
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, extensionName,
+ WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_WRITER);
+ log.trace("meta field name " + metaFieldName);
+ result = isMember(securityToken, userId, wikitty, metaFieldName);
+ return result;
+ }
+
+ /**
+ *
+ * @param securityToken
+ * @param userId
+ * @param wikitty
+ * @param extensionName may be null
+ * @return
+ */
+ protected boolean isAdmin(String securityToken, String userId, Wikitty wikitty, String extensionName) {
+ boolean result;
+ String metaFieldName = WikittyUtil.getMetaFieldName(
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, extensionName,
+ WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_ADMIN);
+ result = isMember(securityToken, userId, wikitty, metaFieldName);
+ return result;
+ }
+
+ /** true if given user is owner
+ *
+ * @param securityToken
+ * @param userId
+ * @param wikitty
+ * @param extensionName may be null
+ * @return
+ */
+ protected boolean isOwner(String securityToken, String userId, Wikitty wikitty, String extensionName) {
+
+ String metaFieldName = WikittyUtil.getMetaFieldName(
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, extensionName,
+ WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_OWNER);
+
+ String actualExtensionName = WikittyUtil.getExtensionNameFromFQFieldName(metaFieldName);
+ String fieldName = WikittyUtil.getFieldNameFromFQFieldName(metaFieldName);
+
+ String owner = wikitty.getFieldAsString(actualExtensionName, fieldName);
+
+ boolean isOwner;
+ if (owner == null) {
+ isOwner = false;
+ } else {
+ isOwner = owner.equals(userId);
+ }
+ return isOwner;
+ }
+
+ /** {@link #isMember(String, String, Wikitty, String, boolean)} with default value */
+ protected boolean isMember(String securityToken, String userId, Wikitty extensionRights, String fqFieldName) {
+ // by default, user is considered not member if he is not in the group, so passing "false"
+ return isMember(securityToken, userId, extensionRights, fqFieldName, false);
+ }
+
+ /** check if a user is listed in a level of rights
+ *
+ * @param securityToken
+ * @param userId the userId to look for
+ * @param extensionRights a wikitty with WikittyAuthorisation as extension <strong>OR</strong> meta-extension
+ * @param fqFieldName the field to look into, it should be one of the field of extension WikittyAuthorisation
+ * it has to be a FQN and may contain an extension-name if using meta-extension
+ * @param considerEmptyGroupAsMembership if true, an empty field value will be considered as
+ * "every-one is in the group". Most of the time, it will be false but true should be
+ * passed for "reader" level because user has right to read if he belongs to "reader" OR
+ * if reader is empty
+ * @return true if userId appear in the single/list of group/user of given field
+ */
+ protected boolean isMember(String securityToken, String userId,
+ Wikitty extensionRights, String fqFieldName, boolean considerEmptyGroupAsMembership) {
+
+ String extensionName = WikittyUtil.getExtensionNameFromFQFieldName(fqFieldName);
+ String fieldName = WikittyUtil.getFieldNameFromFQFieldName(fqFieldName);
+
+ Set<String> groupOrUser = extensionRights.getFieldAsSet(extensionName,
+ fieldName,
+ String.class);
+
+ boolean isMember;
+ if (groupOrUser == null || groupOrUser.isEmpty()) {
+ isMember = considerEmptyGroupAsMembership;
+ } else {
+ isMember = isMember(securityToken, userId, groupOrUser);
+ }
+
+ if ( ! isMember) {
+ // user don't have right on current object, check parent right
+ String parentId = WikittyAuthorisationHelper.getParent(extensionRights);
+ if (parentId != null) {
+ Wikitty parent = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, parentId);
+ if (parent != null) {
+ isMember = isMember(securityToken, userId, parent, fqFieldName);
+ }
+ }
+ }
+ return isMember;
+ }
+
+ /** check if a given user belong to the group of app-admins. */
+ protected boolean isAppAdmin(String securityToken, String userId) {
+ // si le group n'existe pas alors tout le monde est admin
+ boolean result = true;
+ Wikitty group = getAppAdminGroup(securityToken);
+ if (group != null) {
+ Set<String> ids = WikittyGroupHelper.getMembers(group);
+ result = isMember(securityToken, userId, ids);
+ }
+ return result;
+ }
+
+ /** get the wikitty with extension WikittyGroup that contains all app-admin. */
+ protected Wikitty getAppAdminGroup(String securityToken) {
+ // on a deja fait la recherche precedement, on essaie de reutilise
+ // le meme id
+ Wikitty group = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, appAdminGroupId);
+ if (group == null) {
+ // 1er fois, on le recherche
+ WikittyQuery criteria = new WikittyQueryMaker()
+ .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME,
+ WikittySecurityHelper.WIKITTY_APPADMIN_GROUP_NAME).end();
+ String groupId = getDelegate().findByQuery(
+ securityToken, Collections.singletonList(criteria)).get(0);
+ appAdminGroupId = groupId;
+ group = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, appAdminGroupId);
+ }
+
+ return group;
+ }
+
+ /**
+ * Verifie recursivement si un utilisateur est dans un groupe qui peut etre
+ * constitue d'autre groupe ou d'utilisateur
+ *
+ * @param userId l'utilisateur recherche
+ * @param groupOrUser la liste des id d'utilisateurs ou d'autres groupes
+ * @return vrai si userId est retrouve, false sinon
+ */
+ protected boolean isMember(
+ String securityToken, String userId, Set<String> groupOrUser) {
+ if (groupOrUser != null) {
+ for (String id : groupOrUser) {
+ if (StringUtils.equals(id, userId)) {
+ // on a l'id du user, on l'autorise
+ return true;
+ } else {
+ // sinon, on charge l'objet car ca pourrait etre un groupe
+ // dans lequel il faut cherche le user
+ Wikitty groupWikitty = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, id);
+ if (groupWikitty != null &&
+ WikittyGroupHelper.hasExtension(groupWikitty)) {
+ Set<String> members =
+ WikittyGroupHelper.getMembers(groupWikitty);
+ return isMember(securityToken, userId, members);
+ }
+ }
+ }
+ }
+ return false; // not found in groupOrUser
+ }
+
+ /**
+ * restore the wikitty authorisation attached to given extension.
+ *
+ * @return a wikitty with WikittyAuthorisation extension, or null if given
+ * extension has no security policy attached
+ */
+ protected Wikitty restoreExtensionAuthorisation(String securityToken,
+ WikittyExtension extension) {
+ return restoreExtensionAuthorisation(securityToken, extension.getName());
+ }
+
+ /**
+ * restore the wikitty authorisation attached to given extension.
+ *
+ * @return a wikitty with WikittyAuthorisation extension, or null if given
+ * extension has no security policy attached
+ */
+ protected Wikitty restoreExtensionAuthorisation(String securityToken,
+ String extensionName) {
+ String wikittyAuthorisationId = WikittyMetaExtensionUtil.generateId(
+ WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, extensionName);
+ Wikitty wikittyAuthorisation = WikittyServiceEnhanced.restore(
+ getDelegate(), securityToken, wikittyAuthorisationId);
+ if (wikittyAuthorisation == null) {
+ log.debug(extensionName + " has no authorization attached");
+ }
+ return wikittyAuthorisation;
+ }
+
+}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2012-01-20 17:11:12 UTC (rev 1352)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -67,7 +67,9 @@
*
* Last update: $Date$
* by : $Author$
+ * @deprecated since 3.4 use WikittyServiceAuthentication and WikittyServiceAuthorization
*/
+@Deprecated
public class WikittyServiceSecurity extends WikittyServiceDelegator {
/** to use log facility, just put in your code: log.info(\"...\"); */
@@ -98,9 +100,9 @@
externalAuthOnly = config.getOptionAsBoolean(WikittyConfigOption.
WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_ONLY.getKey());
long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption.
- WIKITTY_SECURITY_TIME_TO_LOG_INFO.getKey());
+ WIKITTY_SERVICE_TIME_TO_LOG_INFO.getKey());
long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption.
- WIKITTY_SECURITY_TIME_TO_LOG_WARN.getKey());
+ WIKITTY_SERVICE_TIME_TO_LOG_WARN.getKey());
timeLog.setTimeToLogInfo(timeToLogInfo);
timeLog.setTimeToLogWarn(timeToLogWarn);
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthentication.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthentication.java 2012-01-20 17:11:12 UTC (rev 1352)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthentication.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -10,7 +10,9 @@
*
* Last update: $Date$
* by : $Author$
+ * @deprecated since 3.4 use WikittyServiceAuthentication and WikittyServiceAuthorization
*/
+@Deprecated
public interface WikittyServiceSecurityExternalAuthentication {
/**
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthenticationLDAP.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthenticationLDAP.java 2012-01-20 17:11:12 UTC (rev 1352)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurityExternalAuthenticationLDAP.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -19,7 +19,9 @@
*
* Last update: $Date$
* by : $Author$
+ * @deprecated since 3.4 use WikittyServiceAuthenticationLDAP and WikittyServiceAuthorization
*/
+@Deprecated
public class WikittyServiceSecurityExternalAuthenticationLDAP
implements WikittyServiceSecurityExternalAuthentication{
@@ -35,25 +37,25 @@
// on charge toutes les options jndi
Properties jndiPropTmp = config.getOptionStartsWith(WikittyConfigOption
- .WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_JNDI.getKey());
+ .WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI.getKey());
jndiProp = new Properties();
for (Enumeration<String> e=(Enumeration<String>)jndiPropTmp.propertyNames(); e.hasMoreElements();) {
String key = e.nextElement();
String value = jndiPropTmp.getProperty(key);
- int debut = WikittyConfigOption.WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_JNDI.getKey().length();
+ int debut = WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_LDAP_JNDI.getKey().length();
key = key.substring(debut);
jndiProp.setProperty(key, value);
}
// on charge l'url du serveur ldap
String serverUrl = config.getOption(
- WikittyConfigOption.WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_SERVER.getKey());
+ WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_LDAP_SERVER.getKey());
jndiProp.put(Context.PROVIDER_URL, serverUrl);
// on charge le pattern des logins (DN)
ldapLoginPattern = config.getOption(
- WikittyConfigOption.WIKITTY_SECURITY_EXTERNAL_AUTHENTICATION_LDAP_LOGIN_PATTERN.getKey());
+ WikittyConfigOption.WIKITTY_SERVICE_AUTHENTICATION_LDAP_LOGIN_PATTERN.getKey());
}
public boolean login(String login, String password) {
Added: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAPTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAPTest.java (rev 0)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceAuthenticationLDAPTest.java 2012-01-23 18:51:14 UTC (rev 1353)
@@ -0,0 +1,49 @@
+package org.nuiton.wikitty.services;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.wikitty.WikittyClient;
+import org.nuiton.wikitty.WikittyConfig;
+import org.nuiton.wikitty.WikittyConfigOption;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyServiceAuthenticationLDAPTest {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceAuthenticationLDAPTest.class);
+
+ @Test
+ @Ignore // on l'ignore car il faut avoir accept a un LDAP et mettre en clair un mot de passe :(
+ public void testLDAP() throws Exception {
+ ApplicationConfig config = WikittyConfig.getConfig();
+
+ String services = config.getOption(WikittyConfigOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey());
+ services += "," + WikittyServiceAuthenticationLDAP.class.getName();
+ config.setOption(WikittyConfigOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey(),
+ services);
+
+ config.setOption(WikittyConfigOption
+ .WIKITTY_SERVICE_AUTHENTICATION_LDAP_SERVER.getKey(),
+ "ldap://intranet:389");
+ config.setOption(WikittyConfigOption
+ .WIKITTY_SERVICE_AUTHENTICATION_LDAP_LOGIN_PATTERN.getKey(),
+ "uid=%s,ou=People,dc=codelutin,dc=home");
+ WikittyClient client = new WikittyClient(config);
+ client.login("poussin", "xxxxxxxx");
+ System.out.println("token:" + client.getSecurityToken());
+// System.out.println("user: " + client.getUser());
+
+ System.out.println("config: " + config.getFlatOptions());
+
+ }
+}
1
0
r1352 - in trunk/wikitty-api/src/test: java/org/nuiton/wikitty java/org/nuiton/wikitty/api resources/csv
by echatellier@users.nuiton.org 20 Jan '12
by echatellier@users.nuiton.org 20 Jan '12
20 Jan '12
Author: echatellier
Date: 2012-01-20 18:11:12 +0100 (Fri, 20 Jan 2012)
New Revision: 1352
Url: http://nuiton.org/repositories/revision/wikitty/1352
Log:
Move almost operators test in wikitty client test.
Removed:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
trunk/wikitty-api/src/test/resources/csv/importbooks.csv
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java 2012-01-20 16:28:12 UTC (rev 1351)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientAbstractTest.java 2012-01-20 17:11:12 UTC (rev 1352)
@@ -169,7 +169,7 @@
Product bookLan = new ProductImpl("Lanfeust");
bookLan.setPrice(0);
bookLan.setPicturePrice(5);
- bookLan.setPriceFromProduct(14);
+ bookLan.setPriceFromProduct(13);
bookLan.setCategory(fantastic.getWikittyId());
bookLan.addColors("red", "yellow");
bookLan.setDate(df.parse("January 12, 2002"));
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-20 16:28:12 UTC (rev 1351)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-20 17:11:12 UTC (rev 1352)
@@ -26,6 +26,10 @@
package org.nuiton.wikitty;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import org.junit.Assert;
import org.junit.Test;
@@ -48,6 +52,10 @@
import org.nuiton.wikitty.query.WikittyQueryMaker;
import org.nuiton.wikitty.query.WikittyQueryParser;
import org.nuiton.wikitty.query.WikittyQueryResult;
+import org.nuiton.wikitty.search.Criteria;
+import org.nuiton.wikitty.search.PagedResult;
+import org.nuiton.wikitty.search.Search;
+import org.nuiton.wikitty.search.operators.Like;
import org.nuiton.wikitty.test.Category;
import org.nuiton.wikitty.test.Product;
@@ -307,4 +315,456 @@
WikittyQueryResult<Wikitty> wikitties = WikittyLabelUtil.findAllByLabel(wikittyClient, "hello", 0, 1);
Assert.assertEquals(wikitties.get(0), w);
}
+
+ /**
+ * Test eq() operator.
+ */
+ @Test
+ public void testQueryMakerEq() {
+ assumeTrueSearchEngineCanRunTest(); // ant like patterns
+
+ // test strict equals
+ WikittyQuery query = new WikittyQueryMaker().eq(Product.ELEMENT_FIELD_PRODUCT_PRICE, 42).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results.getTotalResult());
+ Assert.assertEquals(1, results.getAll().size());
+
+ Product resultP = results.peek();
+ Assert.assertEquals("Answer to life the universe and everything", resultP.getName());
+ Assert.assertEquals(42, resultP.getPriceFromProduct());
+
+ //Test using pattern matching
+ WikittyQuery query2 = new WikittyQueryMaker().eq(Product.ELEMENT_FIELD_PRODUCT_NAME, "Indign*").end();
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results2.getTotalResult());
+ Assert.assertEquals(1, results2.getAll().size());
+
+ //Test using pattern matching
+ WikittyQuery query3 = new WikittyQueryMaker().eq(Product.ELEMENT_FIELD_PRODUCT_NAME, "Indign*").end();
+ WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results3.getTotalResult());
+ Assert.assertEquals(1, results3.getAll().size());
+ }
+
+ /**
+ * Test eq() operator.
+ */
+ @Test
+ public void testQueryMakerEqFqf() {
+ assumeTrueSearchEngineCanRunTest(); // ant like patterns
+
+ // test strict equals
+ WikittyQuery query = new WikittyQueryMaker().eq(Product.FQ_FIELD_PRODUCT_PRICE, 42).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results.getTotalResult());
+ Assert.assertEquals(1, results.getAll().size());
+
+ Product resultP = results.peek();
+ Assert.assertEquals("Answer to life the universe and everything", resultP.getName());
+ Assert.assertEquals(42, resultP.getPriceFromProduct());
+
+ //Test using pattern matching
+ WikittyQuery query2 = new WikittyQueryMaker().eq(Product.FQ_FIELD_PRODUCT_NAME, "Indign*").end();
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results2.getTotalResult());
+ Assert.assertEquals(1, results2.getAll().size());
+
+ //Test using pattern matching
+ WikittyQuery query3 = new WikittyQueryMaker().eq(Product.FQ_FIELD_PRODUCT_NAME, "Indign*").end();
+ WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results3.getTotalResult());
+ Assert.assertEquals(1, results3.getAll().size());
+ }
+
+ /**
+ * Test neq() operator.
+ */
+ @Test
+ public void testQueryMakerNeq() {
+ // test strict equals
+ WikittyQuery query = new WikittyQueryMaker().ne(Product.FQ_FIELD_PRODUCT_PRICE, 42).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(3, results.getTotalResult());
+ Assert.assertEquals(3, results.getAll().size());
+ }
+
+ /**
+ * Test between.
+ */
+ @Test
+ public void testQueryMakerBw() {
+
+ // test strict equals
+ WikittyQuery query = new WikittyQueryMaker().bw(Product.FQ_FIELD_PRODUCT_PRICE, 14, 99).end();
+ query.setLimit(-1);
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(2, results.getTotalResult());
+ Assert.assertEquals(0, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryMakerLt() {
+ WikittyQuery query = new WikittyQueryMaker().lt(Product.FQ_FIELD_PRODUCT_PRICE, 15).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results.getTotalResult());
+ Assert.assertEquals(1, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryParserLe() {
+ WikittyQuery query = WikittyQueryParser.parse("Product.price <= 15");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(2, results.getTotalResult());
+ Assert.assertEquals(2, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryMakerGt() {
+ WikittyQuery query = new WikittyQueryMaker().gt(Product.FQ_FIELD_PRODUCT_PRICE, 15).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(2, results.getTotalResult());
+ Assert.assertEquals(2, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryParserGe() {
+ WikittyQuery query = WikittyQueryParser.parse("Product.price >= 15");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(3, results.getTotalResult());
+ Assert.assertEquals(3, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryMakerContainsAll() throws IOException {
+ importBooks(); // add 13 livres
+ WikittyQuery query = new WikittyQueryMaker()
+ .containsAll(Product.ELEMENT_FIELD_PRODUCT_COLORS, Arrays.asList("white", "black")).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(2, results.getTotalResult());
+ Assert.assertEquals(2, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryParserContainsAll() throws IOException {
+ importBooks(); // add 13 livres
+ WikittyQuery query = WikittyQueryParser.parse("Product.colors=[white, black]");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(2, results.getTotalResult());
+ Assert.assertEquals(2, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryMakerContainsOne() throws IOException {
+ importBooks(); // add 13 livres
+ WikittyQuery query = new WikittyQueryMaker()
+ .containsOne(Product.ELEMENT_FIELD_PRODUCT_COLORS, Arrays.asList("white", "black")).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(9, results.getTotalResult());
+ Assert.assertEquals(9, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryParserContainsOne() throws IOException {
+ importBooks(); // add 13 livres
+ WikittyQuery query = WikittyQueryParser.parse("Product.colors={white, black}");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ // FIXME mais la doc de [] correspond a contains one
+ Assert.assertEquals(9, results.getTotalResult());
+ Assert.assertEquals(9, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryParserExteq() throws IOException {
+ importBooks(); // add 13 livres
+ WikittyQuery query = WikittyQueryParser.parse("extension=Product");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(17, results.getTotalResult());
+ Assert.assertEquals(17, results.getAll().size());
+ }
+
+ @Test
+ public void testQueryMakerIdeq() throws IOException {
+ importBooks(); // pour un wid connu
+ WikittyQuery query = new WikittyQueryMaker().ideq("db9dc782-e650-4fd4-83ac-3c1c5c136cde").end();
+ Product p = wikittyClient.findByQuery(Product.class, query);
+ Assert.assertEquals("Da vinci code", p.getName());
+ }
+
+ @Test
+ public void testQueryParserIdeq() throws IOException {
+ importBooks(); // pour un wid connu
+ WikittyQuery query = WikittyQueryParser.parse("id=db9dc782-e650-4fd4-83ac-3c1c5c136cde");
+ Product p = wikittyClient.findByQuery(Product.class, query);
+ Assert.assertEquals("Da vinci code", p.getName());
+ }
+
+ @Test
+ public void testQueryMakerIdneq() throws IOException {
+ importBooks(); // pour un wid connu
+ WikittyQuery query = new WikittyQueryMaker().idne("db9dc782-e650-4fd4-83ac-3c1c5c136cde").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(28, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserIdneq() throws IOException {
+ importBooks(); // pour un wid connu
+ WikittyQuery query = WikittyQueryParser.parse("id!=db9dc782-e650-4fd4-83ac-3c1c5c136cde");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(16, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerUnlike() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().unlike(Product.ELEMENT_FIELD_PRODUCT_NAME, "*potter*").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(11, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserUnlike() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Product.name UNLIKE *potter*");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(11, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerLike() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().like(Product.ELEMENT_FIELD_PRODUCT_NAME, "*potter*").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(6, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserLike() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Product.name LIKE *potter*");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(6, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerSw() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().sw(Product.ELEMENT_FIELD_PRODUCT_NAME, "Harry").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(6, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserEw() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Product.name=*sorciers");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerNotsw() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().notsw(Product.ELEMENT_FIELD_PRODUCT_NAME, "Harry").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(11, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserNotew() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Product.name!=*sorciers");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(16, results.getTotalResult());
+ }
+
+ @Test
+ public void testQuerymakerKeyword() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().keyword("potter").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(6, results.getTotalResult());
+
+ WikittyQuery query2 = new WikittyQueryMaker().keyword("yellow").end();
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query2);
+ Assert.assertEquals(2, results2.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserKeyword() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("potter");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(6, results.getTotalResult());
+
+ WikittyQuery query2 = WikittyQueryParser.parse("yellow");
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query2);
+ Assert.assertEquals(2, results2.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerIsNull() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().isNull(Product.ELEMENT_FIELD_PRODUCT_CATEGORY).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(2, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserIsNull() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Produit.category=NULL");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerIsNotNull() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().isNotNull(Product.ELEMENT_FIELD_PRODUCT_CATEGORY).end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(15, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserIsNotNull() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Produit.category!=NULL");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(15, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerFalse() {
+ WikittyQuery query = new WikittyQueryMaker().rFalse().end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(0, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParseTrue() {
+ WikittyQuery query = WikittyQueryParser.parse("TRUE");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(1, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerAnd() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().and()
+ .sw(Product.FQ_FIELD_PRODUCT_NAME, "Harry")
+ .notew(Product.ELEMENT_FIELD_PRODUCT_NAME, "sorcier").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(5, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserAnd() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Product.name=Harry* Product.name!=*sorciers");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(5, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerOr() throws IOException {
+ importBooks();
+ WikittyQuery query = new WikittyQueryMaker().or()
+ .sw(Product.FQ_FIELD_PRODUCT_NAME, "Harry")
+ .like(Product.ELEMENT_FIELD_PRODUCT_NAME, "*code*").end();
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(7, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserOr() throws IOException {
+ importBooks();
+ WikittyQuery query = WikittyQueryParser.parse("Product.name=Harry* OR Product.name LIKE *code*");
+ WikittyQueryResult<Product> results = wikittyClient.findAllByQuery(Product.class, query);
+ Assert.assertEquals(7, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMakerNot() {
+ WikittyQuery query = new WikittyQueryMaker().not().exteq(Product.EXT_PRODUCT).end();
+ WikittyQueryResult<String> results = wikittyClient.findAllByQuery(query);
+ Assert.assertEquals(13, results.getTotalResult());
+ }
+
+ /**
+ * Test avec des requettes imbriquées.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testQueryMakerSelect() throws IOException {
+ importBooks();
+
+ // les livres dont le prix est entre 0 et 75
+ // et qui appartiennet a une catégory nommé "history"
+ WikittyQuery query = new WikittyQueryMaker().and()
+ .bw(Product.ELEMENT_FIELD_PRODUCT_PRICE, 0, 75)
+ .select(Product.ELEMENT_FIELD_PRODUCT_CATEGORY)
+ .eq(Category.FQ_FIELD_CATEGORY_CODE, "history").end();
+ WikittyQueryResult<String> results = wikittyClient.findAllByQuery(query);
+ Assert.assertEquals(9, results.getTotalResult());
+ }
+
+ /**
+ * Test avec des requettes imbriquées.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testQueryParserSelect() throws IOException {
+ importBooks();
+
+ // les livres dont le prix est entre 0 et 75
+ // et qui appartiennet a une catégory nommé "history"
+ WikittyQuery query = WikittyQueryParser.parse("Product.price=[0 TO 75] AND Product.category={SELECT id WHERE Category.code = history}");
+ WikittyQueryResult<String> results = wikittyClient.findAllByQuery(query);
+ Assert.assertEquals(3, results.getTotalResult());
+ }
+
+ @Test
+ public void testQueryMarkerWilcardEquals() {
+ WikittyQuery query1 = new WikittyQueryMaker().eq(Product.FQ_FIELD_PRODUCT_NAME, "Lanfeust").end();
+ WikittyQueryResult<Product> results1 = wikittyClient.findAllByQuery(Product.class, query1);
+ Assert.assertEquals(1, results1.getTotalResult());
+
+ WikittyQuery query2 = new WikittyQueryMaker().eq("*" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + Product.FIELD_PRODUCT_NAME, "Lanfeust").end();
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query2);
+ Assert.assertEquals(1, results2.getTotalResult());
+
+ // ???
+ WikittyQuery query3 = new WikittyQueryMaker().eq("Product.name." + WikittyTypes.STRING, "Lanfeust").end();
+ WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query3);
+ Assert.assertEquals(1, results3.getTotalResult());
+
+ // ???
+ WikittyQuery query4 = new WikittyQueryMaker().eq("*.name." + WikittyTypes.STRING, "Lanfeust").end();
+ WikittyQueryResult<Product> results4 = wikittyClient.findAllByQuery(Product.class, query4);
+ Assert.assertEquals(1, results4.getTotalResult());
+ }
+
+ @Test
+ public void testQueryParserWilcardEquals() {
+ WikittyQuery query1 = WikittyQueryParser.parse("Product.name=Lanfeust");
+ WikittyQueryResult<Product> results1 = wikittyClient.findAllByQuery(Product.class, query1);
+ Assert.assertEquals(1, results1.getTotalResult());
+
+ WikittyQuery query2 = WikittyQueryParser.parse("*.name=Lanfeust");
+ WikittyQueryResult<Product> results2 = wikittyClient.findAllByQuery(Product.class, query2);
+ Assert.assertEquals(1, results2.getTotalResult());
+
+ // ???
+ WikittyQuery query3 = WikittyQueryParser.parse("Product.name.STRING=Lanfeust");
+ WikittyQueryResult<Product> results3 = wikittyClient.findAllByQuery(Product.class, query3);
+ Assert.assertEquals(1, results3.getTotalResult());
+
+ // ???
+ WikittyQuery query4 = WikittyQueryParser.parse("*.name.STRING=Lanfeust");
+ WikittyQueryResult<Product> results4 = wikittyClient.findAllByQuery(Product.class, query4);
+ Assert.assertEquals(1, results4.getTotalResult());
+ }
}
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-20 16:28:12 UTC (rev 1351)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2012-01-20 17:11:12 UTC (rev 1352)
@@ -203,7 +203,7 @@
}
protected void assumeNotYetImplementedInMemory() {
- boolean isInMomory = this instanceof InMemorySearchTest;
+ boolean isInMomory = true;
if (isInMomory) {
log.warn("Not yet implemented in memory, skipping");
}
@@ -211,1126 +211,6 @@
}
@Test
- public void testEq() throws Exception {
-
- Search query = Search.query().eq("Product.price", "3");
-
- Criteria eqCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(eqCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
-
- //Test using pattern matching
- Search query2 = Search.query().eq("Product.name", "*dri*");
-
- Criteria eqCriteria2 = query2.criteria();
-
- PagedResult<Wikitty> results2 = proxy.findAllByCriteria(eqCriteria2);
-
- assertPagedResultSizeEquals(1, results2);
-
- Wikitty resultW2 = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW2.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW2.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
- //Test using pattern matching
- Search query3 = Search.query().eq("Product.name", "*dri?er");
-
- Criteria eqCriteria3 = query3.criteria();
-
- PagedResult<Wikitty> results3 = proxy.findAllByCriteria(eqCriteria3);
-
- assertPagedResultSizeEquals(1, results3);
-
- Wikitty resultW3 = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW3.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW3.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
- }
-
- @Test
- public void testEntitiesEq() throws Exception {
-
- Search query = Search.query().eq(Product.FQ_FIELD_PRODUCT_PRICE, "3");
-
- Criteria eqCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, eqCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getName());
- Assert.assertEquals(3, resultW.getPriceFromProduct());
-
-
- //Test using pattern matching
- Search query2 = Search.query().eq(Product.FQ_FIELD_PRODUCT_NAME, "*dri*");
-
- Criteria eqCriteria2 = query2.criteria();
-
- PagedResult<Product> results2 = proxy.findAllByCriteria(Product.class, eqCriteria2);
-
- assertPagedResultSizeEquals(1, results2);
-
- Product resultW2 = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW2.getName());
- Assert.assertEquals(3, resultW2.getPriceFromProduct());
-
- //Test using pattern matching
- Search query3 = Search.query().eq(Product.FQ_FIELD_PRODUCT_NAME, "*dri?er");
-
- Criteria eqCriteria3 = query3.criteria();
-
- PagedResult<Product> results3 = proxy.findAllByCriteria(Product.class, eqCriteria3);
-
- assertPagedResultSizeEquals(1, results3);
-
- Product resultW3 = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW3.getName());
- Assert.assertEquals(3, resultW3.getPriceFromProduct());
- }
-
- @Test
- public void testNeq() throws Exception {
- Search query = Search.query().exteq(EXT_PRODUCT).neq("Product.price", "3");
-
- Criteria neqCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(neqCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testEntitiesNeq() throws Exception {
- Search query = Search.query().exteq(Product.EXT_PRODUCT).neq(Product.FQ_FIELD_PRODUCT_PRICE, "3");
-
- Criteria neqCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, neqCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testBw() throws Exception {
-
- Search query = Search.query().bw("Product.price", "3", "5");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
- }
-
- @Test
- public void testEntitiesBw() throws Exception {
-
- Search query = Search.query().bw(Product.FQ_FIELD_PRODUCT_PRICE, "3", "5");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getName());
- Assert.assertEquals(3, resultW.getPriceFromProduct());
- }
-
- @Test
- public void testLt() throws Exception {
-
- Search query = Search.query().lt("Product.price", "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
- }
-
- @Test
- public void testEntitiesLt() throws Exception {
-
- Search query = Search.query().lt(Product.FQ_FIELD_PRODUCT_PRICE, "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getName());
- Assert.assertEquals(3, resultW.getPriceFromProduct());
-
- }
-
- @Test
- public void testLe() throws Exception {
-
- Search query = Search.query().le("Product.price", "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testEntitiesLe() throws Exception {
-
- Search query = Search.query().le(Product.FQ_FIELD_PRODUCT_PRICE, "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, bwCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testGt() throws Exception {
-
- Search query = Search.query().gt("Product.price", "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Paint Blue", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(22, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
- }
-
- @Test
- public void testEntitiesGt() throws Exception {
-
- Search query = Search.query().gt(Product.FQ_FIELD_PRODUCT_PRICE, "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Paint Blue", resultW.getName());
- Assert.assertEquals(22, resultW.getPriceFromProduct());
-
- }
-
- @Test
- public void testGe() throws Exception {
-
- Search query = Search.query().ge("Product.price", "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testEntitiesGe() throws Exception {
-
- Search query = Search.query().ge(Product.FQ_FIELD_PRODUCT_PRICE, "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, bwCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testContains() throws Exception {
-
- Search query = Search.query().contains("Product.price", "3");
-
- Criteria inCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(inCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
- //TODO JC-07-04-2011 do a test with multi-valued field
-
- }
-
- @Test
- public void testEntitiesContains() throws Exception {
-
- Search query = Search.query().contains(Product.FQ_FIELD_PRODUCT_PRICE, "3");
-
- Criteria inCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, inCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getName());
- Assert.assertEquals(3, resultW.getPriceFromProduct());
-
- //TODO JC-07-04-2011 do a test with multi-valued field
-
- }
-
- @Test
- public void testIn() throws Exception {
-
- Search query = Search.query().in("Product.price", "1", "2", "3", "4", "5");
-
- Criteria inCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(inCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
- }
-
- @Test
- public void testEntitiesIn() throws Exception {
-
- Search query = Search.query().in(Product.FQ_FIELD_PRODUCT_PRICE, "1", "2", "3", "4", "5");
-
- Criteria inCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, inCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getName());
- Assert.assertEquals(3, resultW.getPriceFromProduct());
- }
-
- @Test
- public void testExteq() throws Exception {
- Search query = Search.query().exteq(EXT_PRODUCT);
-
- Criteria exteqCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(exteqCriteria);
-
- assertPagedResultSizeEquals(3, results);
- }
-
- @Test
- public void testEntitiesExteq() throws Exception {
- Search query = Search.query().exteq(Product.EXT_PRODUCT);
-
- Criteria exteqCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, exteqCriteria);
-
- assertPagedResultSizeEquals(3, results);
- }
-
- @Test
- public void testExtneq() throws Exception {
- Search query = Search.query().extneq(EXT_PRODUCT);
-
- Criteria extneqCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(extneqCriteria);
-
- assertPagedResultSizeEquals(7, results);
-
- }
-
- @Test
- public void testIdeq() throws Exception {
- Search query = Search.query().ideq(W_ID);
-
- Criteria ideqCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(ideqCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Paint Blue", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(22, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
- }
-
- @Test
- public void testEntitiesIdeq() throws Exception {
- Search query = Search.query().ideq(W_ENTITY_ID);
-
- Criteria ideqCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, ideqCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Paint Blue", resultW.getName());
- Assert.assertEquals(22, resultW.getPriceFromProduct());
-
- }
-
- @Test
- public void testIdneq() throws Exception {
-
- Search query = Search.query().exteq(EXT_PRODUCT).idneq(W_ID);
-
- Criteria idneqCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(idneqCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testEntitiesIdneq() throws Exception {
-
- Search query = Search.query().idneq(W_ENTITY_ID);
-
- Criteria idneqCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, idneqCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testUnlike() throws Exception {
-
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
-
- Search query = Search.query().exteq(EXT_PRODUCT).unlike("Product.name", "*dri*");
-
- Criteria likeCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(likeCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testEntitiesUnlike() throws Exception {
-
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
-
- Search query = Search.query().unlike(Product.FQ_FIELD_PRODUCT_NAME, "*dri*");
-
- Criteria likeCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, likeCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testLike() throws Exception {
-
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
-
- Search query = Search.query().like("Product.name", "*dri*");
-
- Criteria likeCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(likeCriteria);
-
- assertPagedResultSizeEquals(1, results);
- }
-
- @Test
- public void testEntitiesLike() throws Exception {
-
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
-
- Search query = Search.query().like(Product.FQ_FIELD_PRODUCT_NAME, "*dri*");
-
- Criteria likeCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, likeCriteria);
-
- assertPagedResultSizeEquals(1, results);
- }
-
- @Test
- public void testSw() throws Exception {
- Search query = Search.query().sw("Product.name", "Scre");
-
- Criteria swCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(swCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
- }
-
- @Test
- public void testEntitiesSw() throws Exception {
- Search query = Search.query().sw(Product.FQ_FIELD_PRODUCT_NAME, "Scre");
-
- Criteria swCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, swCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getName());
- Assert.assertEquals(3, resultW.getPriceFromProduct());
-
- }
-
- @Test
- public void testNsw() throws Exception {
-
- Search query = Search.query().exteq(EXT_PRODUCT).nsw("Product.name", "Scre");
-
- Criteria nswCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(nswCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testEntitiesNsw() throws Exception {
-
- Search query = Search.query().nsw(Product.FQ_FIELD_PRODUCT_NAME, "Scre");
-
- Criteria nswCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, nswCriteria);
-
- assertPagedResultSizeEquals(2, results);
- }
-
- @Test
- public void testEw() throws Exception {
-
- Search query = Search.query().ew("Product.name", "ver");
-
- Criteria ewCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(ewCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getFieldAsString(EXT_PRODUCT,
- PRODUCT_NAME));
- Assert.assertEquals(3, resultW.getFieldAsInt(EXT_PRODUCT,
- PRODUCT_PRICE));
-
- }
-
- @Test
- public void testEntitiesEw() throws Exception {
-
- Search query = Search.query().ew(Product.FQ_FIELD_PRODUCT_NAME, "ver");
-
- Criteria ewCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, ewCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Screwdriver", resultW.getName());
- Assert.assertEquals(3, resultW.getPriceFromProduct());
-
- }
-
- @Test
- public void testNotew() throws Exception {
-
- Search query = Search.query().exteq(EXT_PRODUCT).notew("Product.name", "ver");
-
- Criteria notewCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(notewCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testEntitiesNotew() throws Exception {
-
- Search query = Search.query().notew(Product.FQ_FIELD_PRODUCT_NAME, "ver");
-
- Criteria notewCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, notewCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testKeyword() throws Exception {
-
- Search query = Search.query().exteq(EXT_PRODUCT).keyword("Paint");
-
- Criteria keywordCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(keywordCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testEntitiesKeyword() throws Exception {
-
- Search query = Search.query().exteq(Product.EXT_PRODUCT).keyword("Paint");
-
- Criteria keywordCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, keywordCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testIsNull() throws Exception {
-
- Search query = Search.query().isNull("Product.name");
-
- Criteria isNull = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(isNull);
-
- assertPagedResultSizeEquals(0, results);
-
- }
-
- @Test
- public void testEntitiesIsNull() throws Exception {
-
- Search query = Search.query().isNull(Product.FQ_FIELD_PRODUCT_NAME);
-
- Criteria isNull = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, isNull);
-
- assertPagedResultSizeEquals(0, results);
-
- }
-
- @Test
- public void testIsNotNull() throws Exception {
-
- Search query = Search.query().isNotNull("Product.name");
-
- Criteria isNotNull = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(isNotNull);
-
- assertPagedResultSizeEquals(3, results);
-
- }
-
- @Test
- public void testEntitiesIsNotNull() throws Exception {
-
- Search query = Search.query().isNotNull(Product.FQ_FIELD_PRODUCT_NAME);
-
- Criteria isNotNull = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, isNotNull);
-
- assertPagedResultSizeEquals(3, results);
-
- }
-
- @Test
- public void testFalse() throws Exception {
-
- Search query = Search.query().rFalse();
-
- Criteria rFalse = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(rFalse);
-
- assertPagedResultSizeEquals(0, results);
-
- }
-
- @Test
- public void testEntitiesFalse() throws Exception {
-
- Search query = Search.query().rFalse();
-
- Criteria rFalse = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, rFalse);
-
- assertPagedResultSizeEquals(0, results);
-
- }
-
- @Test
- public void testTrue() throws Exception {
-
- Search query = Search.query().exteq(EXT_PRODUCT).rTrue();
-
- Criteria rTrue = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(rTrue);
-
- assertPagedResultSizeEquals(3, results);
-
- }
-
- @Test
- public void testEntitiesTrue() throws Exception {
-
- Search query = Search.query().exteq(Product.EXT_PRODUCT).rTrue();
-
- Criteria rTrue = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, rTrue);
-
- assertPagedResultSizeEquals(3, results);
-
- }
-
- @Test
- public void testAnd() throws Exception {
-
- Search query = Search.query().and().bw("Product.price", "15", "25")
- .sw("Product.name", "Paint");
-
- Criteria andCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(andCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testEntitiesAnd() throws Exception {
-
- Search query = Search.query().and().bw(Product.FQ_FIELD_PRODUCT_PRICE, "15", "25")
- .sw(Product.FQ_FIELD_PRODUCT_NAME, "Paint");
-
- Criteria andCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, andCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testOr() throws Exception {
-
- Search query = Search.query();
-
- query.or().gt("Product.price", "20").sw("Product.name", "Screw");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testEntitiesOr() throws Exception {
-
- Search query = Search.query();
-
- query.or().gt(Product.FQ_FIELD_PRODUCT_PRICE, "20").sw(Product.FQ_FIELD_PRODUCT_NAME, "Screw");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, bwCriteria);
-
- assertPagedResultSizeEquals(2, results);
-
- }
-
- @Test
- public void testNot() throws Exception {
-
- Search query = Search.query();
-
- query.exteq(EXT_PRODUCT).not().ge("Product.price", "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
- }
-
- @Test
- public void testEntitiesNot() throws Exception {
-
- Search query = Search.query();
-
- query.exteq(Product.EXT_PRODUCT).not().ge(Product.FQ_FIELD_PRODUCT_PRICE, "20");
-
- Criteria bwCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, bwCriteria);
-
- assertPagedResultSizeEquals(1, results);
- }
-
- @Test
- public void testAssociated() throws Exception {
-
- /* Following request mean is :
- * Looking for any product which price is between 15 and 25,
- * and name starts with 'Paint',
- * and with an associated category which name is 'Hardware'
- */
-
- Search query = Search.query().bw("Product.price", "15", "25")
- .sw("Product.name", "Paint").associated("Product.category")
- .eq("Category.name", "HardWare");
-
- Criteria associatedCriteria = query.criteria();
-
- PagedResult<Wikitty> results = proxy.findAllByCriteria(associatedCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Wikitty resultW = results.getFirst();
-
- Assert.assertEquals("Paint", resultW.getFieldAsString(EXT_PRODUCT, PRODUCT_NAME));
- Assert.assertEquals(20, resultW.getFieldAsInt(EXT_PRODUCT, PRODUCT_PRICE));
-
- //Test with an associated search that returns nothing
- query = Search.query().bw("Product.price", "15", "25")
- .sw("Product.name", "Paint").associated("Product.category")
- .eq("Category.name", "don't return anything");
-
- associatedCriteria = query.criteria();
-
- results = proxy.findAllByCriteria(associatedCriteria);
-
- assertPagedResultSizeEquals(0, results);
- }
-
- @Test
- public void testEntitiesAssociated() throws Exception {
-
- /* Following request mean is :
- * Looking for any product which price is between 15 and 25,
- * and name starts with 'Paint',
- * and with an associated category which name is 'Hardware'
- */
-
- Search query = Search.query().bw(Product.FQ_FIELD_PRODUCT_PRICE, "15", "25")
- .sw(Product.FQ_FIELD_PRODUCT_NAME, "Paint").associated(Product.FQ_FIELD_PRODUCT_CATEGORY)
- .eq(Category.FQ_FIELD_CATEGORY_NAME, "HardWare");
-
- Criteria associatedCriteria = query.criteria();
-
- PagedResult<Product> results = proxy.findAllByCriteria(Product.class, associatedCriteria);
-
- assertPagedResultSizeEquals(1, results);
-
- Product resultW = results.getFirst();
-
- Assert.assertEquals("Paint", resultW.getName());
- Assert.assertEquals(20, resultW.getPriceFromProduct());
-
- //Test with an associated search that returns nothing
- query = Search.query().bw(Product.FQ_FIELD_PRODUCT_PRICE, "15", "25")
- .sw(Product.FQ_FIELD_PRODUCT_NAME, "Paint").associated(Product.FQ_FIELD_PRODUCT_CATEGORY)
- .eq(Category.FQ_FIELD_CATEGORY_NAME, "don't return anything");
-
- associatedCriteria = query.criteria();
-
- results = proxy.findAllByCriteria(Product.class, associatedCriteria);
-
- assertPagedResultSizeEquals(0, results);
- }
-
- /**
- * <li> monext.monfield
- * <li> *.monfield
- * <li> monext.monfield.NUMERIC
- * <li> *.monfield.NUMERIC
- **/
- @Test
- public void testSearchAllEquals() {
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
- {
- Criteria criteria = Search.query().eq("Category.name", "HardWare").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().eq("*.name", "HardWare").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(2, pagedResult);
- }
- {
- Criteria criteria = Search.query().eq("Category.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "HardWare").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "HardWare").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(2, pagedResult);
- }
- }
-
- /**
- * <li> monext.monfield
- * <li> *.monfield
- * <li> monext.monfield.NUMERIC
- * <li> *.monfield.NUMERIC
- **/
- @Test
- public void testEntitiesSearchAllEquals() {
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
- {
- Criteria criteria = Search.query().eq(Category.FQ_FIELD_CATEGORY_NAME, "HardWare").criteria();
- PagedResult<Category> pagedResult = proxy.findAllByCriteria(Category.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().eq("*.name", "HardWare").criteria();
- PagedResult<Category> pagedResult = proxy.findAllByCriteria(Category.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().eq(Category.FQ_FIELD_CATEGORY_NAME + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "HardWare").criteria();
- PagedResult<Category> pagedResult = proxy.findAllByCriteria(Category.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "HardWare").criteria();
- PagedResult<Category> pagedResult = proxy.findAllByCriteria(Category.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- }
-
- /**
- * <li> monext.monfield
- * <li> *.monfield
- * <li> monext.monfield.NUMERIC
- * <li> *.monfield.NUMERIC
- **/
- @Test
- public void testSearchAllContains() {
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
- {
- Criteria criteria = Search.query().contains("Product.colors", "Red").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().contains("*.colors", "Red").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(2, pagedResult);
- }
- {
- Criteria criteria = Search.query().contains("Product.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "Red").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().contains("*.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "Red").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(2, pagedResult);
- }
- }
-
- /**
- * <li> monext.monfield
- * <li> *.monfield
- * <li> monext.monfield.NUMERIC
- * <li> *.monfield.NUMERIC
- **/
- @Test
- public void testEntitiesSearchAllContains() {
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
- {
- Criteria criteria = Search.query().contains(Product.FQ_FIELD_PRODUCT_COLORS, "Red").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().contains("*.colors", "Red").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().contains(Product.FQ_FIELD_PRODUCT_COLORS + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "Red").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().contains("*.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "Red").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- }
-
- /**
- * <li> monext.monfield
- * <li> *.monfield
- * <li> monext.monfield.NUMERIC
- * <li> *.monfield.NUMERIC
- **/
- @Test
- public void testSearchAllLike() {
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
- {
- Criteria criteria = Search.query().like("Product.name", "*Blue").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().like("*.name", "*Blue").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(2, pagedResult);
- }
- {
- Criteria criteria = Search.query().like("Product.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "*Blue").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().like("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "*Blue").criteria();
- PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
- assertPagedResultSizeEquals(2, pagedResult);
- }
- }
-
- /**
- * <li> monext.monfield
- * <li> *.monfield
- * <li> monext.monfield.NUMERIC
- * <li> *.monfield.NUMERIC
- **/
- @Test
- public void testEntitiesSearchAllLike() {
- // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
- assumeNotYetImplementedInMemory();
- {
- Criteria criteria = Search.query().like(Product.FQ_FIELD_PRODUCT_NAME, "*Blue").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().like("*.name", "*Blue").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().like(Product.FQ_FIELD_PRODUCT_NAME + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "*Blue").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- {
- Criteria criteria = Search.query().like("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + WikittyTypes.STRING, "*Blue").criteria();
- PagedResult<Product> pagedResult = proxy.findAllByCriteria(Product.class, criteria);
- assertPagedResultSizeEquals(1, pagedResult);
- }
- }
-
- @Test
public void testSearchAllLowerCase() {
// FIXME implement it in memory
assumeNotYetImplementedInMemory();
Deleted: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java 2012-01-20 16:28:12 UTC (rev 1351)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/InMemorySearchTest.java 2012-01-20 17:11:12 UTC (rev 1352)
@@ -1,51 +0,0 @@
-/*
- * #%L
- * Wikitty :: api
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2011 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.api;
-
-import org.junit.Ignore;
-import org.nuiton.util.ApplicationConfig;
-import org.nuiton.wikitty.WikittyConfig;
-import org.nuiton.wikitty.WikittyService;
-import org.nuiton.wikitty.services.WikittyServiceInMemory;
-
-/**
- * User: couteau
- * Date: 05/04/11
- */
-public class InMemorySearchTest extends AbstractSearchTest {
-
- WikittyService service;
-
- @Override
- public WikittyService getWikittyService() {
-
- if (service == null) {
- ApplicationConfig config = WikittyConfig.getConfig();
- service = new WikittyServiceInMemory(config);
- }
-
- return service;
- }
-}
Modified: trunk/wikitty-api/src/test/resources/csv/importbooks.csv
===================================================================
--- trunk/wikitty-api/src/test/resources/csv/importbooks.csv 2012-01-20 16:28:12 UTC (rev 1351)
+++ trunk/wikitty-api/src/test/resources/csv/importbooks.csv 2012-01-20 17:11:12 UTC (rev 1352)
@@ -4,7 +4,7 @@
"36b8e47d-5d38-4818-b915-6a318f7b74d8","ProductPicture,ProductDocumentation,Product","Category.code=history","(white),(black)","1983-12-24T23:00:00.000+0000Z","Oliver Twist","42",,"2",,"5"
"94f4c6ca-49cd-4e4f-954f-cee8654582be","ProductPicture,ProductDocumentation,Product","Category.code=history","(white)","2011-04-11T22:00:00.000+0000Z","Guerre et Paix","15",,"1",,"2"
"aa3dc36f-cb12-4bad-a405-ae1146975567","ProductPicture,ProductDocumentation,Product","Category.code=history","(pink)","2011-04-11T22:00:00.000+0000Z","Les Quatre filles du Dr March","15",,"1",,"2"
-"6ee97a12-0f2b-4d6f-8d28-ad40e8d4e178","ProductPicture,ProductDocumentation,Product","Category.code=history","(white)","2011-04-11T22:00:00.000+0000Z","Les Chevaliers de La Table Ronde","15",,"1",,"2"
+"6ee97a12-0f2b-4d6f-8d28-ad40e8d4e178","ProductPicture,ProductDocumentation,Product",,"(white)","2011-04-11T22:00:00.000+0000Z","Les Chevaliers de La Table Ronde","15",,"1",,"2"
"db9dc782-e650-4fd4-83ac-3c1c5c136cde","ProductPicture,ProductDocumentation,Product","Category.code=sf","(white)","2011-04-08T22:00:00.000+0000Z","Da vinci code","49",,"1",,"2"
"584adc1e-726d-4348-9a57-77153d245b34","ProductPicture,ProductDocumentation,Product","Category.code=sf","(red)","2011-02-11T22:00:00.000+0000Z","Le Symbole perdu","49",,"0",,"2"
"0f30c93f-7ad5-4f03-8714-b2e62f2446af","ProductPicture,ProductDocumentation,Product","Category.code=sf","(blue)","1998-05-27T22:00:00.000+0000Z","Harry Potter et la Chambre des secrets","30",,"0",,"10"
1
0
Author: echatellier
Date: 2012-01-20 17:28:12 +0100 (Fri, 20 Jan 2012)
New Revision: 1351
Url: http://nuiton.org/repositories/revision/wikitty/1351
Log:
Erreur, in() n'existe pas.
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-20 15:32:31 UTC (rev 1350)
+++ trunk/src/site/rst/user/query.rst 2012-01-20 16:28:12 UTC (rev 1351)
@@ -516,6 +516,8 @@
Quelques exemples
+++++++++++++++++
+.. FIXME wrong doc, in doesn't exists anymore
+
Pour avoir tous les attachments de tous les noeuds de tous les arbres::
WikittyQuery q = new WikittyQueryMaker()
1
0
Author: echatellier
Date: 2012-01-20 16:32:31 +0100 (Fri, 20 Jan 2012)
New Revision: 1350
Url: http://nuiton.org/repositories/revision/wikitty/1350
Log:
Query errors
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-20 15:09:01 UTC (rev 1349)
+++ trunk/src/site/rst/user/query.rst 2012-01-20 15:32:31 UTC (rev 1350)
@@ -294,7 +294,7 @@
WikittyQuery q = new WikittyQueryMaker()
.ew(User.ELEMENT_FIELD_USER_LASTNAME, "sin").end();
- WikittyQuery q = WikittyQueryParser.parse("User.lastname=sin*");
+ WikittyQuery q = WikittyQueryParser.parse("User.lastname=*sin");
Ne termine pas par : notew
++++++++++++++++++++++++++
@@ -304,7 +304,7 @@
WikittyQuery q = new WikittyQueryMaker()
.notew(User.ELEMENT_FIELD_USER_LASTNAME, "pous").end();
- WikittyQuery q = WikittyQueryParser.parse("User.lastname!=pous*");
+ WikittyQuery q = WikittyQueryParser.parse("User.lastname!=*pous");
Mot-clé : keyword
+++++++++++++++++
1
0