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
May 2011
- 5 participants
- 78 discussions
r861 - trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api
by sletellier@users.nuiton.org 05 May '11
by sletellier@users.nuiton.org 05 May '11
05 May '11
Author: sletellier
Date: 2011-05-05 18:08:09 +0200 (Thu, 05 May 2011)
New Revision: 861
Url: http://nuiton.org/repositories/revision/wikitty/861
Log:
Add test in fail on sorting on multivalued field
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-05 15:26:00 UTC (rev 860)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-05 16:08:09 UTC (rev 861)
@@ -41,6 +41,7 @@
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.PagedResult;
import org.nuiton.wikitty.search.Search;
+import org.nuiton.wikitty.search.operators.Element;
import org.nuiton.wikitty.search.operators.Like;
import java.util.ArrayList;
@@ -771,6 +772,51 @@
}
}
+ @Test
+ public void testSearchWithSort() {
+ {
+ Criteria criteria = Search.query().like("name", "*").criteria();
+ criteria.setSortAscending(new String[]{"name"});
+ try {
+ proxy.findAllByCriteria(criteria);
+ } catch (Exception eee) {
+ Assert.fail();
+ }
+ }
+ //Create ext sortable
+ String sortableExtName = "sortable";
+ String numFieldName = "num";
+ WikittyExtension sortable = ExtensionFactory.create(sortableExtName, "1.0")
+ .addField(numFieldName, FieldType.TYPE.NUMERIC)
+ .extension();
+ proxy.storeExtension(sortable);
+
+ //Create wikitty sortable
+ Wikitty sortable10 = new WikittyImpl();
+ sortable10.addExtension(sortable);
+ sortable10.setField(sortableExtName, numFieldName, 10);
+
+ Wikitty sortable1 = new WikittyImpl();
+ sortable1.addExtension(sortable);
+ sortable1.setField(sortableExtName, numFieldName, 1);
+
+ Wikitty sortable7 = new WikittyImpl();
+ sortable7.addExtension(sortable);
+ sortable7.setField(sortableExtName, numFieldName, 7);
+
+ proxy.store(sortable10);
+ proxy.store(sortable1);
+ proxy.store(sortable7);
+ {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, sortableExtName).criteria();
+ criteria.setSortAscending(new String[]{numFieldName});
+ PagedResult<Wikitty> result = proxy.findAllByCriteria(criteria);
+ int firstNum = result.get(0).getFieldAsInt(sortableExtName, numFieldName);
+ assertEquals(1, firstNum);
+ }
+ }
+
+
@Test
public void testComplexQueries() throws Exception {
//TODO JC-07-04-2011 Write test
1
0
r860 - in trunk: wikitty-api/src/test/java/org/nuiton/wikitty/api wikitty-solr/src/main/resources
by sletellier@users.nuiton.org 05 May '11
by sletellier@users.nuiton.org 05 May '11
05 May '11
Author: sletellier
Date: 2011-05-05 17:26:00 +0200 (Thu, 05 May 2011)
New Revision: 860
Url: http://nuiton.org/repositories/revision/wikitty/860
Log:
- Fix like search with lower case
- Add tests
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
trunk/wikitty-solr/src/main/resources/schema.xml
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-05 10:29:44 UTC (rev 859)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-05 15:26:00 UTC (rev 860)
@@ -41,6 +41,7 @@
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 java.util.ArrayList;
import java.util.List;
@@ -96,7 +97,7 @@
//Create wikitty category named "Hardware"
Wikitty category1 = new WikittyImpl();
category1.addExtension(category);
- category1.setField(EXT_CATEGORY, CATEGORY_NAME, "Hardware");
+ category1.setField(EXT_CATEGORY, CATEGORY_NAME, "HardWare");
proxy.store(category1);
//Create wikitty category named "Wrong category"
@@ -612,7 +613,7 @@
Search query = Search.query().bw("Product.price", "15", "25")
.sw("Product.name", "Paint").associated("Product.category")
- .eq("Category.name", "Hardware");
+ .eq("Category.name", "HardWare");
Criteria associatedCriteria = query.criteria();
@@ -651,22 +652,22 @@
// FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
assumeNotYetImplementedInMemory();
{
- Criteria criteria = Search.query().eq("Category.name", "Hardware").criteria();
+ Criteria criteria = Search.query().eq("Category.name", "HardWare").criteria();
PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
assertEquals(1, pagedResult.size());
}
{
- Criteria criteria = Search.query().eq("*.name", "Hardware").criteria();
+ Criteria criteria = Search.query().eq("*.name", "HardWare").criteria();
PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
assertEquals(1, pagedResult.size());
}
{
- Criteria criteria = Search.query().eq("Category.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Hardware").criteria();
+ Criteria criteria = Search.query().eq("Category.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "HardWare").criteria();
PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
assertEquals(1, pagedResult.size());
}
{
- Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Hardware").criteria();
+ Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "HardWare").criteria();
PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
assertEquals(1, pagedResult.size());
}
@@ -736,6 +737,40 @@
}
}
+ @Test
+ public void testSearchAllLowerCase() {
+ {
+ Criteria criteria = Search.query().eq("Category.name", "HardWare").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().eq("Category.name", "hardware").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(0, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().like("Category.name", "HardWare", Like.SearchAs.ToLowerCase).criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().like("Category.name", "hardware", Like.SearchAs.ToLowerCase).criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().like("Category.name", "HardWare", Like.SearchAs.AsText).criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().like("Category.name", "hardware", Like.SearchAs.AsText).criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ }
+
@Test
public void testComplexQueries() throws Exception {
//TODO JC-07-04-2011 Write test
Modified: trunk/wikitty-solr/src/main/resources/schema.xml
===================================================================
--- trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-05 10:29:44 UTC (rev 859)
+++ trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-05 15:26:00 UTC (rev 860)
@@ -58,14 +58,14 @@
sortMissingLast="true" omitNorms="true"/>
<!-- STRING type copy: type to string all text is lower cased -->
- <fieldType name="string_lc" class="solr.StrField"
+ <fieldType name="string_lc" class="solr.TextField"
compressThreshold="1000"
sortMissingLast="true">
- <!--analyzer!--> <!-- no type to indicated that used it for both type: index and query -->
- <!--<tokenizer class="solr.StandardTokenizerFactory"/>
+ <analyzer> <!-- no type to indicated that used it for both type: index and query -->
+ <tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
- </analyzer>-->
+ </analyzer>
</fieldType>
<!-- STRING type copy
1
0
05 May '11
Author: mfortun
Date: 2011-05-05 12:29:44 +0200 (Thu, 05 May 2011)
New Revision: 859
Url: http://nuiton.org/repositories/revision/wikitty/859
Log:
* remove useless lines
Removed:
trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml
Modified:
trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml
Deleted: trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml
===================================================================
--- trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml 2011-05-05 09:55:52 UTC (rev 858)
+++ trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml 2011-05-05 10:29:44 UTC (rev 859)
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-
-
-<sitemesh>
- <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
- <excludes file="${decorators-file}"/>
-
- <page-parsers>
- <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
- </page-parsers>
-
- <decorator-mappers>
-
- <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
- <param name="property.1" value="meta.decorator"/>
- <param name="property.2" value="decorator"/>
- </mapper>
-
- <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
- </mapper>
-
- <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
- <param name="match.MSIE" value="ie"/>
- <param name="match.Mozilla [" value="ns"/>
- <param name="match.Opera" value="opera"/>
- <param name="match.Lynx" value="lynx"/>
- </mapper>
-
- <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
- <param name="decorator" value="printable"/>
- <param name="parameter.name" value="printable"/>
- <param name="parameter.value" value="true"/>
- </mapper>
-
- <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
- <param name="decorator" value="robot"/>
- </mapper>
-
- <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
- <param name="decorator.parameter" value="decorator"/>
- <param name="parameter.name" value="confirm"/>
- <param name="parameter.value" value="true"/>
- </mapper>
-
- <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
- <param name="config" value="${decorators-file}"/>
- </mapper>
-
- </decorator-mappers>
-
-</sitemesh>
Modified: trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml 2011-05-05 09:55:52 UTC (rev 858)
+++ trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml 2011-05-05 10:29:44 UTC (rev 859)
@@ -1,83 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--
- #%L
- Wikitty :: publication
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2010 CodeLutin, Benjamin Poussin
- %%
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Lesser Public License for more details.
-
- You should have received a copy of the GNU General Lesser Public
- License along with this program. If not, see
- <http://www.gnu.org/licenses/lgpl-3.0.html>.
- #L%
- -->
-<web-app id="wikitty-publication" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
- <!-- SERVLET -->
- <display-name>Wikitty Publication</display-name>
-
-
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:applicationContext*.xml</param-value>
- </context-param>
-
- <!-- Filters -->
- <filter>
- <filter-name>action2-cleanup</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
- </filter>
- <filter>
- <filter-name>sitemesh</filter-name>
- <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
- </filter>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>action2-cleanup</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>sitemesh</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <!-- Servlets -->
- <servlet>
- <servlet-name>jspSupportServlet</servlet-name>
- <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
- <load-on-startup>5</load-on-startup>
- </servlet>
- <!-- Welcome file lists -->
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <jsp-config>
- <jsp-property-group>
- <url-pattern>*.jsp</url-pattern>
- <trim-directive-whitespaces>true</trim-directive-whitespaces>
- </jsp-property-group>
- </jsp-config>
+
+<web-app id="Wikitty-publication" version="2.5"
+ xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+
+ <!-- Filters -->
+ <filter>
+ <filter-name>action2-cleanup</filter-name>
+ <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
+ </filter>
+ <filter>
+ <filter-name>sitemesh</filter-name>
+ <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
+ </filter>
+ <filter>
+ <filter-name>struts2</filter-name>
+ <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>action2-cleanup</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>sitemesh</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>struts2</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <!-- Servlets -->
+
+
+ <!-- Welcome file lists -->
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ </welcome-file-list>
+
+
</web-app>
\ No newline at end of file
1
0
r858 - in trunk/wikitty-publication: . src/main/java/org/nuiton/wikitty/publication src/main/resources src/main/webapp src/main/webapp/WEB-INF
by mfortun@users.nuiton.org 05 May '11
by mfortun@users.nuiton.org 05 May '11
05 May '11
Author: mfortun
Date: 2011-05-05 11:55:52 +0200 (Thu, 05 May 2011)
New Revision: 858
Url: http://nuiton.org/repositories/revision/wikitty/858
Log:
* struts migration beginning
Added:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionLogin.java
trunk/wikitty-publication/src/main/webapp/WEB-INF/decorators.xml
trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml
trunk/wikitty-publication/src/main/webapp/index.jsp
Modified:
trunk/wikitty-publication/pom.xml
trunk/wikitty-publication/src/main/resources/wikitty-publication.properties
trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml
Modified: trunk/wikitty-publication/pom.xml
===================================================================
--- trunk/wikitty-publication/pom.xml 2011-05-04 15:13:33 UTC (rev 857)
+++ trunk/wikitty-publication/pom.xml 2011-05-05 09:55:52 UTC (rev 858)
@@ -71,11 +71,31 @@
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-core</artifactId>
+ <version>${struts2Version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.struts</groupId>
+ <artifactId>struts2-sitemesh-plugin</artifactId>
+ <version>${struts2Version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.8.0.GA</version>
+ <scope>runtime</scope>
+ </dependency>
</dependencies>
<!-- ************************************************************* -->
@@ -136,4 +156,7 @@
</build>
+ <properties>
+ <struts2Version>2.2.1.1</struts2Version>
+ </properties>
</project>
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionLogin.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionLogin.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionLogin.java 2011-05-05 09:55:52 UTC (rev 858)
@@ -0,0 +1,122 @@
+package org.nuiton.wikitty.publication;
+
+import javax.servlet.http.Cookie;
+
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyUser;
+import org.nuiton.wikitty.entities.WikittyUserHelper;
+import org.nuiton.wikitty.search.Criteria;
+import org.nuiton.wikitty.search.Search;
+
+/**
+ * Class for the login action.
+ *
+ * @author mfortun
+ *
+ */
+public class ActionLogin extends AbstractActionOnWikitty {
+
+ static public String COOKIE_NAME = "wikittypublication";
+
+ static final protected String exampleUsage = "";
+
+ protected ApplicationConfig appConfig;
+
+ public ActionLogin(ApplicationConfig appConfig) {
+ this.appConfig = appConfig;
+ }
+
+ @Override
+ public Object doAction(WikittyPublicationContext context) {
+
+ /*
+ * /login?login=moi&password=xxxx&succes=/eval/Wiki/WikiHello
+
+ *
+ * /login?logout&succes=/eval/Wiki/WikiHello
+ */
+
+ String result = "";
+ Wikitty w;
+ WikittyProxy proxy = context.getWikittyProxy();
+ Cookie loginCookie = null;
+
+ context.getRequest().getCookies();
+
+
+ /*
+ *if logout option, remove our cookie.
+ */
+ if (context.getArguments().containsKey("logout")) {
+ loginCookie = new Cookie(COOKIE_NAME, "");
+ loginCookie.setMaxAge(0);
+ context.getResponse().addCookie(loginCookie);
+ }
+
+
+
+
+ if (context.getArguments().containsKey("login")) {
+ String login = context.getArguments().get("login");
+ String password = context.getArguments().get("password");
+
+ String idUser = proxy.findIdByCriteria(this
+ .constructCriteriaOnUser(login));
+
+ result = login + idUser;
+ w = proxy.restore(idUser);
+
+ boolean loginSucces = WikittyUserHelper.getPassword(w).equals(password);
+
+ if (loginSucces){
+ Cookie cook = new Cookie(COOKIE_NAME, "roger");
+ // cook.setMaxAge(0)
+
+ context.getResponse().addCookie(cook);
+
+ }
+
+ }
+
+
+
+
+
+
+ if (context.getArguments().containsKey("succes")) {
+ // faire un truc avec la chaine succes
+ }
+
+
+ /*
+ * verification de la présence d'un cookie si présence ok
+ *
+ * sinon proposer de loger sinon info de log on va créer cookie
+ *
+ * créer une session ?
+ */
+ return result;
+ }
+
+ @Override
+ protected String getExampleUsage() {
+ return exampleUsage;
+
+ }
+
+ protected Criteria constructCriteriaOnUser(String loginName) {
+
+ Criteria criteriaOnLogin;
+ Search mainRequest = Search.query();
+
+ // wikitty user with the loginName
+ criteriaOnLogin = mainRequest.exteq(WikittyUser.EXT_WIKITTYUSER)
+ .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, loginName)
+ .criteria();
+
+ return criteriaOnLogin;
+ }
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionLogin.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/wikitty-publication/src/main/resources/wikitty-publication.properties
===================================================================
--- trunk/wikitty-publication/src/main/resources/wikitty-publication.properties 2011-05-04 15:13:33 UTC (rev 857)
+++ trunk/wikitty-publication/src/main/resources/wikitty-publication.properties 2011-05-05 09:55:52 UTC (rev 858)
@@ -27,3 +27,4 @@
wikitty.publication.action.eval=org.nuiton.wikitty.publication.ActionEval
wikitty.publication.action.raw=org.nuiton.wikitty.publication.ActionRaw
wikitty.publication.action.view=org.nuiton.wikitty.publication.ActionView
+wikitty.publication.action.login=org.nuiton.wikitty.publication.ActionLogin
Added: trunk/wikitty-publication/src/main/webapp/WEB-INF/decorators.xml
===================================================================
--- trunk/wikitty-publication/src/main/webapp/WEB-INF/decorators.xml (rev 0)
+++ trunk/wikitty-publication/src/main/webapp/WEB-INF/decorators.xml 2011-05-05 09:55:52 UTC (rev 858)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+
+<decorators defaultdir="/WEB-INF/decorators">
+ <!-- Any urls that are excluded will never be decorated by Sitemesh -->
+ <excludes>
+ <pattern>/nodecorate/*</pattern>
+ <pattern>index.jsp</pattern>
+ </excludes>
+
+
+
+</decorators>
Property changes on: trunk/wikitty-publication/src/main/webapp/WEB-INF/decorators.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml
===================================================================
--- trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml (rev 0)
+++ trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml 2011-05-05 09:55:52 UTC (rev 858)
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+
+
+<sitemesh>
+ <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
+ <excludes file="${decorators-file}"/>
+
+ <page-parsers>
+ <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
+ </page-parsers>
+
+ <decorator-mappers>
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
+ <param name="property.1" value="meta.decorator"/>
+ <param name="property.2" value="decorator"/>
+ </mapper>
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
+ </mapper>
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
+ <param name="match.MSIE" value="ie"/>
+ <param name="match.Mozilla [" value="ns"/>
+ <param name="match.Opera" value="opera"/>
+ <param name="match.Lynx" value="lynx"/>
+ </mapper>
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
+ <param name="decorator" value="printable"/>
+ <param name="parameter.name" value="printable"/>
+ <param name="parameter.value" value="true"/>
+ </mapper>
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
+ <param name="decorator" value="robot"/>
+ </mapper>
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
+ <param name="decorator.parameter" value="decorator"/>
+ <param name="parameter.name" value="confirm"/>
+ <param name="parameter.value" value="true"/>
+ </mapper>
+
+ <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
+ <param name="config" value="${decorators-file}"/>
+ </mapper>
+
+ </decorator-mappers>
+
+</sitemesh>
Property changes on: trunk/wikitty-publication/src/main/webapp/WEB-INF/sitemesh.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml 2011-05-04 15:13:33 UTC (rev 857)
+++ trunk/wikitty-publication/src/main/webapp/WEB-INF/web.xml 2011-05-05 09:55:52 UTC (rev 858)
@@ -24,32 +24,60 @@
#L%
-->
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
+<web-app id="wikitty-publication" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
<!-- SERVLET -->
<display-name>Wikitty Publication</display-name>
- <servlet>
- <servlet-class>org.nuiton.wikitty.publication.WikittyPublicationServlet</servlet-class>
- <servlet-name>Controller</servlet-name>
- </servlet>
- <welcome-file-list>
- <welcome-file>/</welcome-file>
- </welcome-file-list>
- <!-- SERVLET MAPPING -->
- <servlet-mapping>
- <servlet-name>Controller</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>/css/*</url-pattern>
- </servlet-mapping>
- <jsp-config>
- <jsp-property-group>
- <description>JSP page location</description>
- <display-name>jsp</display-name>
- <url-pattern>/WEB-INF/jsp/*</url-pattern>
- <include-prelude>/WEB-INF/jsp/header.jsp</include-prelude>
- <include-coda>/WEB-INF/jsp/footer.jsp</include-coda>
- </jsp-property-group>
- </jsp-config>
+
+
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>classpath*:applicationContext*.xml</param-value>
+ </context-param>
+
+ <!-- Filters -->
+ <filter>
+ <filter-name>action2-cleanup</filter-name>
+ <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
+ </filter>
+ <filter>
+ <filter-name>sitemesh</filter-name>
+ <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
+ </filter>
+ <filter>
+ <filter-name>struts2</filter-name>
+ <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>action2-cleanup</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>sitemesh</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>struts2</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <!-- Servlets -->
+ <servlet>
+ <servlet-name>jspSupportServlet</servlet-name>
+ <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
+ <load-on-startup>5</load-on-startup>
+ </servlet>
+
+ <!-- Welcome file lists -->
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ </welcome-file-list>
+
+ <jsp-config>
+ <jsp-property-group>
+ <url-pattern>*.jsp</url-pattern>
+ <trim-directive-whitespaces>true</trim-directive-whitespaces>
+ </jsp-property-group>
+ </jsp-config>
</web-app>
+
\ No newline at end of file
Added: trunk/wikitty-publication/src/main/webapp/index.jsp
===================================================================
--- trunk/wikitty-publication/src/main/webapp/index.jsp (rev 0)
+++ trunk/wikitty-publication/src/main/webapp/index.jsp 2011-05-05 09:55:52 UTC (rev 858)
@@ -0,0 +1 @@
+<% out.println("hello !"); %>
\ No newline at end of file
Property changes on: trunk/wikitty-publication/src/main/webapp/index.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
1
0
r857 - in trunk: wikitty-api/src/test/java/org/nuiton/wikitty/api wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr
by sletellier@users.nuiton.org 04 May '11
by sletellier@users.nuiton.org 04 May '11
04 May '11
Author: sletellier
Date: 2011-05-04 17:13:33 +0200 (Wed, 04 May 2011)
New Revision: 857
Url: http://nuiton.org/repositories/revision/wikitty/857
Log:
- Search on #fulltext.#all.field on search on multiextentions without field type
- Like searcg also on multivalued fields
- Add multivalued constants
- Add test for eq, contains, like for search like ext.field, *.field, ext.field.TYPE, *.field.TYPE
Added:
trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java
trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java
trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-04 10:12:53 UTC (rev 856)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-04 15:13:33 UTC (rev 857)
@@ -24,12 +24,15 @@
*/
package org.nuiton.wikitty.api;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
+import org.junit.Assume;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyUtil;
import org.nuiton.wikitty.entities.ExtensionFactory;
import org.nuiton.wikitty.entities.FieldType;
import org.nuiton.wikitty.entities.Wikitty;
@@ -39,19 +42,27 @@
import org.nuiton.wikitty.search.PagedResult;
import org.nuiton.wikitty.search.Search;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
/**
* User: couteau
* Date: 05/04/11
*/
public abstract class AbstractSearchTest {
+ protected final static Log log = LogFactory.getLog(AbstractSearchTest.class);
+
public static final String EXT_PRODUCT = "Product";
public static final String EXT_CATEGORY = "Category";
public static final String PRODUCT_PRICE = "price";
public static final String PRODUCT_NAME = "name";
public static final String PRODUCT_CATEGORY = "category";
+ public static final String PRODUCT_COLOR = "colors";
public static final String CATEGORY_NAME = "name";
- public static final String VERSION = "1.0";
+ public static final String VERSION = "3.0";
public static String W_ID ="";
protected WikittyProxy proxy = new WikittyProxy(getWikittyService());
@@ -68,6 +79,7 @@
.addField(PRODUCT_PRICE, FieldType.TYPE.NUMERIC)
.addField(PRODUCT_NAME, FieldType.TYPE.STRING)
.addField(PRODUCT_CATEGORY, FieldType.TYPE.WIKITTY)
+ .addField(PRODUCT_COLOR, FieldType.TYPE.STRING).maxOccur(Integer.MAX_VALUE)
.extension();
proxy.storeExtension(product);
@@ -103,6 +115,10 @@
product1.setField(EXT_PRODUCT, PRODUCT_NAME, "Paint");
product1.setField(EXT_PRODUCT, PRODUCT_PRICE, 20);
product1.setField(EXT_PRODUCT, PRODUCT_CATEGORY, category1.getId());
+ List<String> colors1 = new ArrayList<String>();
+ colors1.add("Blue");
+ colors1.add("Black");
+ product1.setField(EXT_PRODUCT, PRODUCT_COLOR, colors1);
proxy.store(product1);
//Create product named Screwdriver, price is 3, category is category2
@@ -111,6 +127,10 @@
product2.setField(EXT_PRODUCT, PRODUCT_NAME, "Screwdriver");
product2.setField(EXT_PRODUCT, PRODUCT_PRICE, 3);
product2.setField(EXT_PRODUCT, PRODUCT_CATEGORY, category2.getId());
+ List<String> colors2 = new ArrayList<String>();
+ colors2.add("Red");
+ colors2.add("Black");
+ product2.setField(EXT_PRODUCT, PRODUCT_COLOR, colors2);
proxy.store(product2);
//Create product named Paint Blue, price is 22, category is category2
@@ -119,12 +139,23 @@
product3.setField(EXT_PRODUCT, PRODUCT_NAME, "Paint Blue");
product3.setField(EXT_PRODUCT, PRODUCT_PRICE, 22);
product3.setField(EXT_PRODUCT, PRODUCT_CATEGORY, category2.getId());
+ List<String> colors3 = new ArrayList<String>();
+ colors3.add("Blue");
+ product3.setField(EXT_PRODUCT, PRODUCT_COLOR, colors3);
proxy.store(product3);
W_ID = product3.getId();
}
+ protected void assumeNotYetImplementedInMemory() {
+ boolean isInMomory = this instanceof InMemorySearchTest;
+ if (isInMomory) {
+ log.warn("Not yet implemented in memory, skipping");
+ }
+ Assume.assumeTrue(!isInMomory);
+ }
+
@Test
public void testEq() throws Exception {
@@ -298,7 +329,7 @@
@Test
public void testIn() throws Exception {
- Search query = Search.query().in("Product.price","1","2","3","4","5");
+ Search query = Search.query().in("Product.price", "1", "2", "3", "4", "5");
Criteria inCriteria = query.criteria();
@@ -368,9 +399,12 @@
Assert.assertEquals(4, results.getAll().size());
}
- @Ignore
@Test
public void testUnlike() throws Exception {
+
+ // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming
+ assumeNotYetImplementedInMemory();
+
Search query = Search.query().unlike("Product.name", "*dri*");
Criteria likeCriteria = query.criteria();
@@ -380,9 +414,12 @@
Assert.assertEquals(4, results.getAll().size());
}
- @Ignore
@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();
@@ -602,6 +639,103 @@
Assert.assertEquals(0, results.getAll().size());
}
+
+ /**
+ * <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);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().eq("*.name", "Hardware").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().eq("Category.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Hardware").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Hardware").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ }
+
+ /**
+ * <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);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().contains("*.colors", "Red").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().contains("Product.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().contains("*.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ }
+
+ /**
+ * <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);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().like("*.name", "*Blue").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().like("Product.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ {
+ Criteria criteria = Search.query().like("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria();
+ PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
+ assertEquals(1, pagedResult.size());
+ }
+ }
+
@Test
public void testComplexQueries() throws Exception {
//TODO JC-07-04-2011 Write test
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-04 10:12:53 UTC (rev 856)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-04 15:13:33 UTC (rev 857)
@@ -112,7 +112,7 @@
} else {
log.error("Search on multi extentions (*) without field type, fallback search in fulltext");
result = SOLR_DEFAULT_FIELD
- + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName;
+ + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + result;
}
} else {
result = extName + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName;
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-05-04 10:12:53 UTC (rev 856)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-05-04 15:13:33 UTC (rev 857)
@@ -408,6 +408,17 @@
element2solr += WikittySolrConstant.SUFFIX_STRING_LOWERCASE;
break;
}
+ } else if (element2solr.endsWith(WikittySolrConstant.SUFFIX_STRING_MULTIVALUED)) { // is multivalued string
+ // Remove _s*m*
+ element2solr = element2solr.substring(0, element2solr.length() - 1);
+ switch (searchAs) {
+ case AsText:
+ element2solr += WikittySolrConstant.SUFFIX_STRING_FULLTEXT_MULTIVALUED;
+ break;
+ case ToLowerCase:
+ element2solr += WikittySolrConstant.SUFFIX_STRING_FULLTEXT_LOWERCASE;
+ break;
+ }
}
// Warning if you need add searchAs, AsText and ToLowerCase need search
// at lowercase
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2011-05-04 10:12:53 UTC (rev 856)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2011-05-04 15:13:33 UTC (rev 857)
@@ -95,4 +95,6 @@
static final public String SUFFIX_STRING_LOWERCASE = "_c";
static final public String SUFFIX_STRING_FULLTEXT = "_t";
+ public static final String SUFFIX_STRING_FULLTEXT_LOWERCASE = "_cm";
+ public static final String SUFFIX_STRING_FULLTEXT_MULTIVALUED = "_tm";
}
Added: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java
===================================================================
--- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java (rev 0)
+++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java 2011-05-04 15:13:33 UTC (rev 857)
@@ -0,0 +1,34 @@
+package org.nuiton.wikitty.storage.solr;
+
+import org.junit.BeforeClass;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.wikitty.WikittyConfig;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.api.AbstractSearchTest;
+
+/**
+ * @author sletellier
+ */
+public class SolrSearch3Test extends AbstractSearchTest {
+
+ WikittyService service;
+
+ static protected ApplicationConfig config = WikittyConfig.getConfig("wikitty-config-sample-server.properties");
+
+ @BeforeClass
+ public static void initTests() {
+ SolrTestHelper.initTests(config);
+ }
+
+ @Override
+ public WikittyService getWikittyService() {
+
+ if (service == null) {
+ service = new WikittyServiceSolr(config);
+ }
+
+ service.clear(null);
+
+ return service;
+ }
+}
\ No newline at end of file
Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java
===================================================================
--- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-05-04 10:12:53 UTC (rev 856)
+++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-05-04 15:13:33 UTC (rev 857)
@@ -28,14 +28,11 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import com.arjuna.ats.internal.jdbc.drivers.modifiers.list;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
@@ -43,7 +40,7 @@
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
-import org.nuiton.util.CollectionUtil;
+import org.nuiton.wikitty.entities.FieldType;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.FacetTopic;
import org.nuiton.wikitty.search.PagedResult;
Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java
===================================================================
--- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java 2011-05-04 10:12:53 UTC (rev 856)
+++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java 2011-05-04 15:13:33 UTC (rev 857)
@@ -28,7 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.ApplicationConfig;
-import org.nuiton.wikitty.WikittyConfig;
import org.nuiton.wikitty.WikittyConfigOption;
/**
1
0
r856 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 04 May '11
by mfortun@users.nuiton.org 04 May '11
04 May '11
Author: mfortun
Date: 2011-05-04 12:12:53 +0200 (Wed, 04 May 2011)
New Revision: 856
Url: http://nuiton.org/repositories/revision/wikitty/856
Log:
* String collection can be edited with edit page
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java 2011-05-03 17:55:52 UTC (rev 855)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java 2011-05-04 10:12:53 UTC (rev 856)
@@ -27,9 +27,12 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.CollectionUtil;
import org.nuiton.util.StringUtil;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.FieldType;
+import org.nuiton.wikitty.entities.FieldType.TYPE;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.entities.WikittyImpl;
@@ -38,24 +41,25 @@
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.operators.Element;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
- *
+ *
* @author poussin
* @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
+ *
+ * Last update: $Date$
+ * by : $Author$
*/
public class ActionEdit extends AbstractActionOnWikitty {
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(ActionError.class);
- static final protected String exampleUsage =
- "edit/WikittyPubText.name=Wiki\n"
+ static final protected String exampleUsage = "edit/WikittyPubText.name=Wiki\n"
+ "edit/Tuto\n"
+ "edit/WikittyPubText.name=Tuto\n"
+ "edit/Command.id=df\n";
@@ -70,7 +74,7 @@
public Object doAction(WikittyPublicationContext context) {
String result;
Wikitty w;
-
+
WikittyProxy proxy = context.getWikittyProxy();
if (context.getArguments().containsKey("delete")) {
@@ -78,10 +82,12 @@
// affichera un wikitty vide
String id = context.getArguments().get("id");
proxy.delete(id);
- // apres un effacement on reprend l'edition d'un tout nouveau wikitty
+ // apres un effacement on reprend l'edition d'un tout nouveau
+ // wikitty
w = new WikittyImpl();
} else {
- // recherche du Wikitty a editer ou creation d'un nouveau si necessaire
+ // recherche du Wikitty a editer ou creation d'un nouveau si
+ // necessaire
Criteria criteria = searchCriteria(context.getMandatoryArguments());
if (criteria == null) {
w = new WikittyImpl();
@@ -91,8 +97,10 @@
// si on ne retrouve pas le wikitty, mais qu'il vient d'etre cree
// pour l'edition, on recree un wikitty avec ce meme identifiant
- if (w == null && "0.0".equals(context.getArguments().get("version"))) {
- // c'est un nouvel objet, il n'a pas encore ete sauve, mais on veut le faire
+ if (w == null
+ && "0.0".equals(context.getArguments().get("version"))) {
+ // c'est un nouvel objet, il n'a pas encore ete sauve, mais on
+ // veut le faire
String id = context.getArguments().get("id");
w = new WikittyImpl(id);
}
@@ -109,10 +117,11 @@
// ajout des extensions deja existante si necessaire
String extensions = context.getArgument("extensions", null);
if (extensions != null) {
- String[] exts = StringUtil.split(
- extensions.replace("[", "").replace("]", ""), ",");
+ String[] exts = StringUtil.split(extensions
+ .replace("[", "").replace("]", ""), ",");
for (String extName : exts) {
- WikittyExtension ext = proxy.restoreExtensionLastVersion(extName);
+ WikittyExtension ext = proxy
+ .restoreExtensionLastVersion(extName);
if (ext != null) {
w.addExtension(ext);
}
@@ -122,14 +131,13 @@
// ajout de l'extension demande par l'utilisateur
String extName = context.getArgument("newExtension", null);
if (extName != null && !"".equals(extName)) {
- WikittyExtension ext = proxy.restoreExtensionLastVersion(extName);
+ WikittyExtension ext = proxy
+ .restoreExtensionLastVersion(extName);
if (ext != null) {
w.addExtension(ext);
}
}
-
-
Map<String, Object> args = new HashMap<String, Object>();
args.putAll(context.getArguments());
args.putAll(context.getArgumentFiles());
@@ -138,25 +146,57 @@
Object value = null;
if (key.contains(WikittyUtil.FQ_FIELD_NAME_SEPARATOR)) {
String ext = WikittyExtension.extractExtensionName(key);
- String fieldName = WikittyExtension.extractFieldName(key);
+ String fieldName = WikittyExtension
+ .extractFieldName(key);
if (w.hasField(ext, fieldName)) {
- if (!"true".equals(context.getArgument("isNull-" + key, "false"))) {
+ if (!"true".equals(context.getArgument("isNull-"
+ + key, "false"))) {
+
value = field.getValue();
}
- w.setField(ext, fieldName, value);
-
+
+ FieldType extFieldType = w.getExtension(ext)
+ .getFieldType(fieldName);
+ if (extFieldType.isCollection()
+ && extFieldType.getType() == TYPE.STRING
+ && value != null) {
+
+ String valueString = value.toString();
+
+ valueString = new String(valueString.substring(
+ 1, valueString.length() - 1));
+
+ Collection<String> list = new ArrayList<String>();
+
+ String[] valuesString = StringUtil.split(
+ valueString, ",");
+
+ for (String element : valuesString) {
+ list.add(element.trim());
+ }
+
+ w.setField(ext, fieldName, list);
+
+ } else {
+ w.setField(ext, fieldName, value);
+ }
// si w est un WikittyPubData on essai de mettre a
// jour si besoin les champs mimetype et name
if (ext.equals(WikittyPubData.EXT_WIKITTYPUBDATA)
- && fieldName.equals(WikittyPubData.FIELD_WIKITTYPUBDATA_CONTENT)) {
+ && fieldName
+ .equals(WikittyPubData.FIELD_WIKITTYPUBDATA_CONTENT)) {
if (null == WikittyPubDataHelper.getName(w)) {
- WikittyPubDataHelper.setName(w,
- String.valueOf(args.get(key + "-filename")));
+ WikittyPubDataHelper.setName(
+ w,
+ String.valueOf(args.get(key
+ + "-filename")));
}
if (null == WikittyPubDataHelper.getMimeType(w)) {
- WikittyPubDataHelper.setMimeType(w,
- String.valueOf(args.get(key + "-contentType")));
+ WikittyPubDataHelper.setMimeType(
+ w,
+ String.valueOf(args.get(key
+ + "-contentType")));
}
}
}
@@ -169,11 +209,10 @@
}
}
}
-
+
// forward l'affichage de la page vers la jsp d'edition
context.setContentType("forward/jsp");
- context.getRequest().setAttribute(
- ActionEval.CONTEXT_VAR, context);
+ context.getRequest().setAttribute(ActionEval.CONTEXT_VAR, context);
context.getRequest().setAttribute(ActionEval.WIKITTY_VAR, w);
result = "/WEB-INF/jsp/edit.jsp";
@@ -181,16 +220,16 @@
}
/**
- * create url to edit wikitty object, assume that edition already start
- * add context.getActionName() return edit action name.
+ * create url to edit wikitty object, assume that edition already start add
+ * context.getActionName() return edit action name.
*
* @param context
* @param w
* @return
*/
public String makeUrl(WikittyPublicationContext context, Wikitty w) {
- String url = getMapping() + "/"
- + Element.ELT_ID + SEARCH_SEPARATOR + w.getId();
+ String url = getMapping() + "/" + Element.ELT_ID + SEARCH_SEPARATOR
+ + w.getId();
url = context.makeUrl(url);
return url;
}
1
0
r855 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr wikitty-solr/src/main/resources
by sletellier@users.nuiton.org 03 May '11
by sletellier@users.nuiton.org 03 May '11
03 May '11
Author: sletellier
Date: 2011-05-03 19:55:52 +0200 (Tue, 03 May 2011)
New Revision: 855
Url: http://nuiton.org/repositories/revision/wikitty/855
Log:
- Creation of solr field #fulltext to search without type
- Refactor FieldModifier to allow to force type to use on search
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java
trunk/wikitty-solr/src/main/resources/schema.xml
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2011-05-02 14:52:21 UTC (rev 854)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2011-05-03 17:55:52 UTC (rev 855)
@@ -55,7 +55,7 @@
*
* @author poussin
* @version $Revision$
- *
+ * extends ApplicationConfig
* Last update: $Date$
* by : $Author$
*/
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-02 14:52:21 UTC (rev 854)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-03 17:55:52 UTC (rev 855)
@@ -36,8 +36,10 @@
import org.nuiton.wikitty.storage.WikittyExtensionStorage;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ALL_EXTENSIONS;
+import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_DEFAULT_FIELD;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_EXTENSIONS;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ID;
+import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_WIKITTY_PREFIX;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY_MULTIVALUED;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN;
@@ -70,6 +72,17 @@
this.extensionStorage = extensionStorage;
}
+ /**
+ * Different cas d'entree
+ * <li> monext.monfield
+ * <li> *.monfield
+ * <li> monext.monfield.NUMERIC
+ * <li> *.monfield.NUMERIC
+ *
+ * @param transaction
+ * @param fqfieldname
+ * @return
+ */
public String convertToSolr(WikittyTransaction transaction, String fqfieldname) {
String result = fqfieldname;
String[] searchField = fqfieldname.split(WikittyUtil.FQ_FIELD_NAME_SEPARATOR_REGEX);
@@ -85,36 +98,44 @@
String fieldName = searchField[1];
if (Criteria.ALL_EXTENSIONS.equals(extName)) {
- fqfieldname = SOLR_ALL_EXTENSIONS
+ result = SOLR_ALL_EXTENSIONS
+ WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName;
- }
+ // en #all le seul moyen d'avoir le type est qu'il soit donne dans le champs, sinon on ne peut pas le
+ // trouver
+ if (searchField.length >= 3) {
+ // On passe ici, si on indique dans le champs son type (ex: *.monfield.NUMERIC)
+ // utile pour force la recherche sur les bons champs lorsqu'on demande une recherche sur * == #all
+ String fieldNameType = searchField[2];
+ TYPE type = FieldType.TYPE.valueOf(fieldNameType);
+ // Ajout du pattern solr pour discriminer le champs ex : _s, _sm, _wm ...
+ result = SolrUtil.getSolrCollectionFieldName(result, type);
+ } else {
+ log.error("Search on multi extentions (*) without field type, fallback search in fulltext");
+ result = SOLR_DEFAULT_FIELD
+ + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName;
+ }
+ } else {
+ result = extName + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName;
- if (searchField.length >= 3) {
- // TODO poussin 20101209 je ne vois pas dans quel cas on passe ici
- String fieldNameType = searchField[2];
- TYPE type = FieldType.TYPE.valueOf(fieldNameType);
- result = SolrUtil.getSolrFieldName(fqfieldname, type);
- return result;
- }
-
- // Search type of field in extension
- String version =
- extensionStorage.getLastVersion(transaction, extName);
- if (version != null) { // not valid extension if version == null
- WikittyExtension ext = extensionStorage.restore(
- transaction, extName, version);
- FieldType fieldType = ext.getFieldType(fieldName);
- if (log.isDebugEnabled()) {
- log.debug(ext.toDefinition() + " for " + fieldName);
- }
- if (fieldType != null) { // type can be null if extension version differ
- TYPE type = fieldType.getType();
- if (fieldType.isCollection()) {
- result = SolrUtil.getSolrCollectionFieldName(fqfieldname, type);
- } else {
- result = SolrUtil.getSolrFieldName(fqfieldname, type);
+ // Ajout du pattern solr pour discriminer le champs ex : _s, _sm, _wm ...
+ // Search type of field in extension
+ String version =
+ extensionStorage.getLastVersion(transaction, extName);
+ if (version != null) { // not valid extension if version == null
+ WikittyExtension ext = extensionStorage.restore(
+ transaction, extName, version);
+ FieldType fieldType = ext.getFieldType(fieldName);
+ if (log.isDebugEnabled()) {
+ log.debug(ext.toDefinition() + " for " + fieldName);
}
- return result;
+ if (fieldType != null) { // type can be null if extension version differ
+ TYPE type = fieldType.getType();
+ if (fieldType.isCollection()) {
+ result = SolrUtil.getSolrCollectionFieldName(result, type);
+ } else {
+ result = SolrUtil.getSolrFieldName(result, type);
+ }
+ }
}
}
}
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-05-02 14:52:21 UTC (rev 854)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-05-03 17:55:52 UTC (rev 855)
@@ -881,9 +881,11 @@
// #all.<fieldname>
// permet de faire des recherches inter extension sur un champs ayant
// le meme nom. ex:Person.name et User.name
+ // Quoi qu'il arrive pour le #all on utilise du multivalue
+ String solrAllFqFieldName = SolrUtil.getSolrCollectionFieldName(fqfieldName, type);
String solrAllFieldName = SOLR_ALL_EXTENSIONS
+ WikittyUtil.FQ_FIELD_NAME_SEPARATOR
- + WikittyUtil.getFieldNameFromFQFieldName(solrFqFieldName);
+ + WikittyUtil.getFieldNameFromFQFieldName(solrAllFqFieldName);
String solrNullFieldFqFieldName = SOLR_NULL_FIELD + fqfieldName;
Modified: trunk/wikitty-solr/src/main/resources/schema.xml
===================================================================
--- trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-02 14:52:21 UTC (rev 854)
+++ trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-03 17:55:52 UTC (rev 855)
@@ -176,9 +176,12 @@
<!-- copy all field (except binary) in '#fulltext' field for fulltext search -->
<field name="#fulltext" type="text" indexed="true" stored="false" multiValued="true"/>
- <!-- copied field not stored -->
- <dynamicField name="*_s_c" type="string_lc" indexed="true" stored="false" multiValued="true"/>
- <dynamicField name="*_s_t" type="text" indexed="true" stored="false" multiValued="true"/>
+ <dynamicField name="#fulltext.*" type="text" indexed="true" stored="false" multiValued="true"/>
+ <!-- copied field not stored -->
+ <dynamicField name="*_s_c" type="string_lc" indexed="true" stored="false" multiValued="false"/>
+ <dynamicField name="*_s_t" type="text" indexed="true" stored="false" multiValued="false"/>
+ <dynamicField name="*_s_cm" type="string_lc" indexed="true" stored="false" multiValued="true"/>
+ <dynamicField name="*_s_tm" type="text" indexed="true" stored="false" multiValued="true"/>
<!-- on indexe pas les binary field -->
<dynamicField name="*_bi" type="binary" indexed="false" stored="false" multiValued="false"/>
@@ -224,10 +227,25 @@
<copyField source="*_sm" dest="#fulltext"/>
<copyField source="*_wm" dest="#fulltext"/>
- <!-- copy String field for to lower case version -->
- <copyField source="*_s" dest="*_s_c"/>
- <!-- copy String field for text indexed format version -->
- <copyField source="*_s" dest="*_s_t"/>
+ <copyField source="*_b" dest="#fulltext.*"/>
+ <copyField source="*_d" dest="#fulltext.*"/>
+ <copyField source="*_dt" dest="#fulltext.*"/>
+ <copyField source="*_s" dest="#fulltext.*"/>
+ <copyField source="*_w" dest="#fulltext.*"/>
+ <copyField source="*_bm" dest="#fulltext.*"/>
+ <copyField source="*_dm" dest="#fulltext.*"/>
+ <copyField source="*_dtm" dest="#fulltext.*"/>
+ <copyField source="*_sm" dest="#fulltext.*"/>
+ <copyField source="*_wm" dest="#fulltext.*"/>
+ <!-- copy String field for to lower case version -->
+ <copyField source="*_s" dest="*_s_c"/>
+ <!-- copy String field for text indexed format version -->
+ <copyField source="*_s" dest="*_s_t"/>
+ <!-- copy String field for to lower case version -->
+ <copyField source="*_sm" dest="*_s_cm"/>
+ <!-- copy String field for text indexed format version -->
+ <copyField source="*_sm" dest="*_s_tm"/>
+
</schema>
1
0
Author: mfortun
Date: 2011-05-02 16:52:21 +0200 (Mon, 02 May 2011)
New Revision: 854
Url: http://nuiton.org/repositories/revision/wikitty/854
Log:
* correct analyse
* add specifications for the site publication part of wikitty publication
Added:
trunk/wikitty-publication/src/site/rst/site-publication.rst
Modified:
trunk/wikitty-publication/src/site/rst/wp-analyse.rst
Added: trunk/wikitty-publication/src/site/rst/site-publication.rst
===================================================================
--- trunk/wikitty-publication/src/site/rst/site-publication.rst (rev 0)
+++ trunk/wikitty-publication/src/site/rst/site-publication.rst 2011-05-02 14:52:21 UTC (rev 854)
@@ -0,0 +1,128 @@
+Spécifications wikitty publication site
+=======================================
+:Authors: Manoël Fortun
+
+
+Contexte, Intérêt
+*****************
+
+Wikitty publication permet de construire une application et de la stocker dans
+un wikitty, ensuite via l'interface web de wikitty publication l'application
+peut s'éxécuter. Actuellement cette partie de publication permet de "publier"
+des pages qui contiennent du javascript et wikitty publication permet
+leur affichage et exécution des javascript.
+
+Le travail sur cette partie de wikitty publication consiste donc à compléter
+les fonctionnalités existantes, corriger les bugs présents, et enrichir
+le nombre de langage supportés à l'interprétation.
+
+
+Fonctionnalités
+***************
+
+Login/logout
+------------
+
+L'interface web doit pouvoir gérer un système de login avec sauvegarde
+de cookie pour la navigation. Le token de sécurité sera contenu dans le
+cookie. En cas de succès si dans les arguments on retrouve les actions
+à faire on les faits sinon on affiche simplement le résultat.
+
+L'action à éxécuter en cas d'erreur du login ou du logout, ne doit pas
+se retrouver dans l'url. Ce doit être paramètrable dans un fichier de propriété.
+
+ /login?login=moi&password=xxxx&succes=/eval/Wiki/WikiHello
+
+Si on a l'argument logout de présent dans les paramètres alors un
+logout est forcé. Par défaut si on demande un login et que
+l'utilisateur était déjà loggué alors un logout est aussi fait avant
+la nouvelle authentification.
+
+ /login?logout&succes=/eval/Wiki/WikiHello
+
+Il faudra demander à l'utilisateur de se loguer si l'action qu'il essaye
+d'entreprendre à besoin de droits. On pourra alors se retrouver dans la
+situation ou l'action à éxécuter après le login se trouve dans l'url.
+
+
+
+Gestion des droits
+------------------
+
+En sus d'une gestion d'authentification, il faudrait mettre en place un système
+permettant de gérer des droits utilisateurs sur les différents wikitty
+stocker au sein de wikitty publication, ainsi que les actions qu'un utilisateur
+peut faire sur un wikitty.
+
+Une solution envisageable est la création d'un objet wikitty, qui autoriserait
+des actions nommés à sur des wikittys d'un certain label, cet objet wikitty
+posséderais aussi un label, permettant de définir les droits sur cet objet
+et donc qui pourrait modifier ces droits. Cet objet wikitty posséderait un
+wikittyGroup qui lui même posséderait des wikittyUsers ou directement des
+wikittyUser.
+
+* WikittyAuth
+ * users: WikittyGroup //groupe des users possédant les droits
+ * target: WikittyLabel //les labels concerné par les droit
+ * action: Collection // action autorisé par ce droit
+ * label:String // le label permettant de déterminer qui à les droit sur
+ // ce wikitty
+
+On pourrait même penser à la possibilité de sync de ces wikitty avec la partie
+synchronisation de wikitty publication, et donc les transmettrent à un autre
+wikitty service.
+
+La vérification de la légitimité d'une action d'un user se ferais en
+recherchant le wikittyAuth qui autorise l'action sur le lable concerné
+et vérifier si l'utilisateur appartiens au groupe concerné.
+
+Le fait de mettre un label sur le wikittyAuth permet de créer plusieurs
+classes de droit et d'utilisateur. On pourra avoir le "super" droit
+donc le label target serait "." le "père" de tout les labels, dont le label
+serait aussi ".".
+
+Celà permettra la gestion des droits par récursion sur les labels.
+
+Gestion multicontexte
+---------------------
+
+Les applications que wikitty publication va pouvoir éxécuter peuvent être
+amené à manipuler des donnés, il doit être possible de définir que les
+données manipulée soit stocker dans un autre wikitty service.
+
+La solution pourrait être un nouvel objet de type wikitty définissant
+que pour les applications possédant un certain label, les données
+devront être stocké sur un autre wikitty service.
+
+On pourrait avoir cette objet qui contiendrais un wikitty label, un attribut
+avec l'adresse du wikitty service pour les datas.
+
+Et les données de toutes les applications sous ces labels seront sur le wikitty
+service désigné.
+
+* WikittyContexteHandler
+ * wikittyServiceDataUrl: String // adresse du wikitty pour les données
+ * labels: WikittyLabel // label concernés
+
+Il est possible que se baser sur les labels soit une entreprise périlleuse,
+mais celà permettrais de donner une seconde utilité, en plus de celle permettant
+de déterminer le path d'un fichier.
+
+Il sera nécessaire qu'au plus un wikittyContexteHandler existe pour un label
+donné, sinon le problème de quels wikittyService utiliser pour les données
+sera indécidable. Par défaut si ce wikitty n'existe pas les données seront
+manipulé sur le même wikitty service que l'application.
+
+L'avantage de stocker la configuration pour le "multicontexte" dans un objet
+wikitty permet ensuite d'avoir l'information facilement et de exporter vers
+un autre wikitty service avec la partie sync de wikitty publication si besoin.
+
+
+Moteur de script
+----------------
+
+Ajouter plus de langage supporté à l'interprétation par wikitty publication,
+en rajouter le plus possible, en fonction de ce qui est disponible pour java
+en librairie libre.
+
+
Modified: trunk/wikitty-publication/src/site/rst/wp-analyse.rst
===================================================================
--- trunk/wikitty-publication/src/site/rst/wp-analyse.rst 2011-04-30 12:23:38 UTC (rev 853)
+++ trunk/wikitty-publication/src/site/rst/wp-analyse.rst 2011-05-02 14:52:21 UTC (rev 854)
@@ -94,12 +94,14 @@
* name: String unique=true notNull=true
* content: String multiline=true
* mimetype: String
+ * extension: String
* WikittyPubData: pour les contenues binaires
* name: String unique=true notNull=true
* content: Binary
* mimetype: String
+ * extension: String
Ensuite grâce à ces actions de bases on peut construire des
applications complètement contenu dans le WikittyService (code,
@@ -200,7 +202,7 @@
en même temps.
Développement d'application
-============================
+===========================
Le but est de pouvoir facilement développer des applications avec ces
outils abituels (editor, svn, ...). Pour cela on utilise
1
0