Wikitty-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- 1653 discussions
r866 - in trunk/wikitty-publication/src/main: java/org/nuiton/wikitty/publication java/org/nuiton/wikitty/publication/action resources webapp webapp/WEB-INF webapp/WEB-INF/jsp
by mfortun@users.nuiton.org 06 May '11
by mfortun@users.nuiton.org 06 May '11
06 May '11
Author: mfortun
Date: 2011-05-06 17:59:36 +0200 (Fri, 06 May 2011)
New Revision: 866
Url: http://nuiton.org/repositories/revision/wikitty/866
Log:
* little change in packaging
* View action basically implemented, it only list all the wikitty
Added:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionView.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java
Removed:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java
trunk/wikitty-publication/src/main/resources/struts.xml
trunk/wikitty-publication/src/main/webapp/WEB-INF/
trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/view.jsp
trunk/wikitty-publication/src/main/webapp/index.jsp
Deleted: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java 2011-05-06 10:17:02 UTC (rev 865)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java 2011-05-06 15:59:36 UTC (rev 866)
@@ -1,38 +0,0 @@
-package org.nuiton.wikitty.publication;
-
-import java.util.Map;
-
-import org.apache.struts2.interceptor.SessionAware;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-
-/**
- * Base action that wikitty publication will extend, needed to work within
- * a struts architecture.
- *
- * @author mfortun
- *
- */
-public class BaseAction extends ActionSupport implements SessionAware {
-
- /**
- *
- */
- private static final long serialVersionUID = 1865905051843413141L;
-
- @Override
- public void setSession(Map<String, Object> arg0) {
- // TODO mfortun
- throw new UnsupportedOperationException("not yet implemented");
- //
-
- }
-
-
- public WikittyPublicationProxy getPublicationProxy(){
- //TODO mfortun-2011-05-05
- return null;
- }
-
-}
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-06 10:17:02 UTC (rev 865)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-06 15:59:36 UTC (rev 866)
@@ -1,5 +1,7 @@
package org.nuiton.wikitty.publication;
+import java.io.Serializable;
+
import org.nuiton.util.ApplicationConfig;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.WikittyService;
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionView.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionView.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionView.java 2011-05-06 15:59:36 UTC (rev 866)
@@ -0,0 +1,66 @@
+package org.nuiton.wikitty.publication.action;
+
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.search.Criteria;
+import org.nuiton.wikitty.search.PagedResult;
+import org.nuiton.wikitty.search.Search;
+
+import com.opensymphony.xwork2.ActionContext;
+
+public class PublicationActionView extends PublicationBaseAction {
+
+ protected PagedResult<Wikitty> pagedResult;
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4927699544115089591L;
+
+ static public PublicationActionView getAction() {
+ return (PublicationActionView) ActionContext.getContext().get(
+ CONTEXT_ACTION_KEY);
+ }
+
+ @Override
+ public String execute() throws Exception {
+
+ System.out.println("ponay");
+
+ System.out.println(ActionContext.getContext().getParameters());
+
+ SearchForAllWikitty();
+
+ return SUCCESS;
+ }
+
+ protected void SearchForAllWikitty() {
+
+ String r = "*";
+
+ int firstIndex = 0;
+ int endIndex = 100;
+
+ Criteria criteria = Search.query().keyword(r).criteria();
+ criteria.setFirstIndex(firstIndex);
+ criteria.setEndIndex(endIndex);
+
+ pagedResult = getWikittyPublicationProxy().findAllByCriteria(criteria);
+
+ }
+
+ public PagedResult<Wikitty> getPagedResult() {
+ return pagedResult;
+ }
+
+ public void setPagedResult(PagedResult<Wikitty> pagedResult) {
+ this.pagedResult = pagedResult;
+ }
+
+
+ public String getArgument(String key, String defaultValue){
+
+
+ return defaultValue;
+ }
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionView.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Copied: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java (from rev 862, trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java)
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java 2011-05-06 15:59:36 UTC (rev 866)
@@ -0,0 +1,46 @@
+package org.nuiton.wikitty.publication.action;
+
+import java.util.Map;
+
+import org.apache.struts2.interceptor.SessionAware;
+import org.nuiton.wikitty.publication.WikittyPublicationProxy;
+import org.nuiton.wikitty.publication.WikittyPublicationSession;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * Base action that wikitty publication will extend, needed to work within a
+ * struts architecture.
+ *
+ * @author mfortun
+ *
+ */
+public class PublicationBaseAction extends ActionSupport implements SessionAware {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1865905051843413141L;
+
+ final static protected String CONTEXT_ACTION_KEY = "action";
+
+ protected Map<String, Object> session;
+
+ public WikittyPublicationSession getWikittyPublicationSession() {
+ WikittyPublicationSession result = WikittyPublicationSession
+ .getWikittyPublicationSession(session);
+ return result;
+ }
+
+ public WikittyPublicationProxy getWikittyPublicationProxy() {
+ WikittyPublicationProxy result = getWikittyPublicationSession()
+ .getProxy();
+ return result;
+ }
+
+ @Override
+ public void setSession(Map<String, Object> sess) {
+ this.session = sess;
+ }
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/wikitty-publication/src/main/resources/struts.xml
===================================================================
--- trunk/wikitty-publication/src/main/resources/struts.xml 2011-05-06 10:17:02 UTC (rev 865)
+++ trunk/wikitty-publication/src/main/resources/struts.xml 2011-05-06 15:59:36 UTC (rev 866)
@@ -17,8 +17,10 @@
<result>/WEB-INF/jsp/edit.jsp</result>
</action>
- <action name="viewPage">
+ <action name="*/view/*" class="org.nuiton.wikitty.publication.action.PublicationActionView">
+ <param name="context">{1}</param>
+ <param name="args">{2}</param>
<result>/WEB-INF/jsp/view.jsp</result>
</action>
@@ -26,6 +28,8 @@
+
+
<!--
<package name="wikitty-publication" namespace="/" extends="struts-default">
Property changes on: trunk/wikitty-publication/src/main/webapp/WEB-INF
___________________________________________________________________
Added: svn:ignore
+ tempo
Modified: trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/view.jsp
===================================================================
--- trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/view.jsp 2011-05-06 10:17:02 UTC (rev 865)
+++ trunk/wikitty-publication/src/main/webapp/WEB-INF/jsp/view.jsp 2011-05-06 15:59:36 UTC (rev 866)
@@ -28,49 +28,74 @@
Author : poussin
--%>
+<%@page import="org.nuiton.wikitty.publication.action.PublicationActionView"%>
+<%@page import="org.nuiton.util.StringUtil"%>
+<%@page import="org.nuiton.wikitty.search.Criteria"%>
+<%@page import="org.nuiton.wikitty.search.Search"%>
+<%@page
+ import="org.nuiton.wikitty.publication.WikittyPublicationSession"%>
<%@page import="org.nuiton.wikitty.publication.ActionEval"%>
<%@page import="org.nuiton.wikitty.publication.ActionEdit"%>
-<%@page import="org.nuiton.wikitty.publication.WikittyPublicationContext"%>
+<%@page
+ import="org.nuiton.wikitty.publication.WikittyPublicationContext"%>
<%@page import="org.nuiton.wikitty.search.PagedResult"%>
<%@page import="org.nuiton.wikitty.entities.Wikitty"%>
<h1>Wikitty View</h1>
<%
-WikittyPublicationContext context = (WikittyPublicationContext)
- request.getAttribute(ActionEval.CONTEXT_VAR);
-PagedResult<Wikitty> pagedResult = (PagedResult<Wikitty>)request.getAttribute("pagedResult");
-Wikitty wikitty = (Wikitty)request.getAttribute(ActionEval.WIKITTY_VAR);
+ WikittyPublicationSession wpSession = WikittyPublicationSession
+ .getWikittyPublicationSession(session);
-ActionEdit actionEdit = context.getAction(ActionEdit.class);
+
+
+
+PublicationActionView action = PublicationActionView.getAction();
+
+
+
+out.println( action.getPagedResult().size());
+
+/*
+ WikittyPublicationContext context = (WikittyPublicationContext) request
+ .getAttribute(ActionEval.CONTEXT_VAR);
+ PagedResult<Wikitty> pagedResult = (PagedResult<Wikitty>) request
+ .getAttribute("pagedResult");
+ Wikitty wikitty = (Wikitty) request
+ .getAttribute(ActionEval.WIKITTY_VAR);
+
+ ActionEdit actionEdit = context.getAction(ActionEdit.class);
+ */
+
+
%>
-<form action="" method="post">
- <div>
- <textarea name="r" rows="4" cols="20"><%=context.getArgument("r", "*")%></textarea>
- </div>
- <label for="first">First</label> <input type="text" name="first" value="<%=context.getArgument("first", "0")%>" />
- <label for="first">First</label> <input type="text" name="end" value="<%=context.getArgument("end", "100")%>" />
- <input type="submit" name="id" value="Search"/>
+<form action="view" method="post">
+ <div>
+ <textarea name="r" rows="4" cols="20"><%=action.getArgument("r", "*")%></textarea>
+ </div>
+ <label for="first">First</label> <input type="text" name="first"
+ value="<%=action.getArgument("first", "0")%>" /> <label for="first">First</label>
+ <input type="text" name="end"
+ value="<%=action.getArgument("end", "100")%>" /> <input
+ type="submit" name="id" value="Search" />
+ <pre>
-<pre>
-<%=wikitty%>
</pre>
- <%=pagedResult.getFirstIndice()%>-<%=pagedResult.getFirstIndice() + pagedResult.size()%>/${pagedResult.numFound}
- <table>
- <%
-
- for (Wikitty w : pagedResult.getAll()) {
- %>
- <tr>
- <td><a href="<%=actionEdit.makeUrl(context, w)%>">edit</a></td>
- <td><input type="submit" name="id" value="<%=w.getId()%>"/></td>
- <td><%=w.getExtensionNames()%></td>
- </tr>
- <%
- }
- %>
- </table>
+ <table>
+ <%
+ for (Wikitty w : action.getPagedResult().getAll()) {
+ %>
+ <tr>
+ <td><a ">edit</a>
+ </td>
+ <td><input type="submit" name="id" value="<%=w.getId()%>" />
+ </td>
+ <td><%=w.getExtensionNames()%></td>
+ </tr>
+ <%
+ }
+ %>
+ </table>
</form>
-
\ No newline at end of file
Modified: trunk/wikitty-publication/src/main/webapp/index.jsp
===================================================================
--- trunk/wikitty-publication/src/main/webapp/index.jsp 2011-05-06 10:17:02 UTC (rev 865)
+++ trunk/wikitty-publication/src/main/webapp/index.jsp 2011-05-06 15:59:36 UTC (rev 866)
@@ -1,20 +1,29 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<% out.println("hello !"); %>
- <s:url var="regenPermToken" action="viewPage"/>
- <s:a href="%{regenPermToken}" id="regenPermToken">
- <s:text name="view"/>
- </s:a>
+<%@page
+ import="org.nuiton.wikitty.publication.WikittyPublicationSession"%>
+<%@ taglib prefix="s" uri="/struts-tags"%>
+<%
+ out.println("hello !");
-<s:url var="regenPermToken" action="editPage"/>
- <s:a href="%{regenPermToken}" id="regenPermToken">
- <s:text name="edit"/>
- </s:a>
+ WikittyPublicationSession wpSession = WikittyPublicationSession
+ .getWikittyPublicationSession(session);
+%>
+<s:url var="regenPermToken" action="wiki/view" />
+<s:a href="%{regenPermToken}" id="regenPermToken">
+ <s:text name="view" />
+</s:a>
+<s:url var="regenPermToken" action="edit" />
+<s:a href="%{regenPermToken}" id="regenPermToken">
+ <s:text name="edit" />
+</s:a>
+
+
+
<!--
<s:url var="regenPermToken" action="regenPermToken"/>
<s:a href="%{regenPermToken}" id="regenPermToken">
1
0
r865 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 06 May '11
by mfortun@users.nuiton.org 06 May '11
06 May '11
Author: mfortun
Date: 2011-05-06 12:17:02 +0200 (Fri, 06 May 2011)
New Revision: 865
Url: http://nuiton.org/repositories/revision/wikitty/865
Log:
* correct method's name, copy/past accident
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java 2011-05-06 10:01:02 UTC (rev 864)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java 2011-05-06 10:17:02 UTC (rev 865)
@@ -30,14 +30,14 @@
session.remove(WIKITTY_PUBLICATION_SESSION_KEY);
}
- static public WikittyPublicationSession getBowSession(
+ static public WikittyPublicationSession getWikittyPublicationSession(
HttpServletRequest request) {
HttpSession session = request.getSession();
- WikittyPublicationSession result = getBowSession(session);
+ WikittyPublicationSession result = getWikittyPublicationSession(session);
return result;
}
- static public WikittyPublicationSession getBowSession(
+ static public WikittyPublicationSession getWikittyPublicationSession(
HttpSession httpSession) {
WikittyPublicationSession result = (WikittyPublicationSession) httpSession
.getAttribute(WIKITTY_PUBLICATION_SESSION_KEY);
@@ -48,7 +48,7 @@
return result;
}
- static public WikittyPublicationSession getBowSession(
+ static public WikittyPublicationSession getWikittyPublicationSession(
Map<String, Object> session) {
WikittyPublicationSession result = (WikittyPublicationSession) session
.get(WIKITTY_PUBLICATION_SESSION_KEY);
1
0
r864 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 06 May '11
by mfortun@users.nuiton.org 06 May '11
06 May '11
Author: mfortun
Date: 2011-05-06 12:01:02 +0200 (Fri, 06 May 2011)
New Revision: 864
Url: http://nuiton.org/repositories/revision/wikitty/864
Log:
* Proxy, Session and config for wikitty publication on struts
Added:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java 2011-05-06 10:01:02 UTC (rev 864)
@@ -0,0 +1,117 @@
+package org.nuiton.wikitty.publication;
+
+
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.ArgumentsParserException;
+import static org.nuiton.i18n.I18n._;
+
+public class WikittyPublicationConfig {
+
+
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyPublicationConfig.class);
+
+ static protected ApplicationConfig instance = null;
+
+ private WikittyPublicationConfig() {
+ }
+
+ static public ApplicationConfig getConfig() {
+ return getConfig(null, null);
+ }
+
+ static public ApplicationConfig getConfig(
+ Properties props, String configFilename, String ... args) {
+ ApplicationConfig conf = new ApplicationConfig(
+ Option.class, null, props, configFilename);
+
+ try {
+ conf.parse(args);
+ } catch (ArgumentsParserException eee) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't load Wikitty Publication configuration", eee);
+ }
+ }
+ return conf;
+ }
+
+
+ public static ApplicationConfig getInstance() {
+ if (instance == null) {
+ synchronized(WikittyPublicationConfig.class) {
+ if (instance == null) {
+ instance = WikittyPublicationConfig.getConfig();
+ }
+ }
+ }
+ return instance;
+ }
+
+
+ public enum Option implements ApplicationConfig.OptionDef {
+ CONFIG_FILE(
+ ApplicationConfig.CONFIG_FILE_NAME,
+ _("wikitty-publication.config.configFileName.description"),
+ "wikitty-publication-ws-default.properties", String.class, false, false);
+
+ public final String key;
+ public final String description;
+ public String defaultValue;
+ public final Class<?> type;
+ public boolean isTransient;
+ public boolean isFinal;
+
+ Option(String key, String description, String defaultValue,
+ Class<?> type, boolean isTransient, boolean isFinal) {
+ this.key = key;
+ this.description = description;
+ this.defaultValue = defaultValue;
+ this.type = type;
+ this.isFinal = isFinal;
+ this.isTransient = isTransient;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public Class<?> getType() {
+ return type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ public boolean isTransient() {
+ return isTransient;
+ }
+
+ public boolean isFinal() {
+ return isFinal;
+ }
+
+ public void setDefaultValue(String defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ public void setTransient(boolean isTransient) {
+ this.isTransient = isTransient;
+ }
+
+ public void setFinal(boolean isFinal) {
+ this.isFinal = isFinal;
+ }
+ }
+
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-06 02:09:38 UTC (rev 863)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-06 10:01:02 UTC (rev 864)
@@ -1,15 +1,48 @@
package org.nuiton.wikitty.publication;
+import org.nuiton.util.ApplicationConfig;
import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyServiceFactory;
/**
* Proxy use by action in wikitty publication
- *
+ *
* @author mfortun
- *
+ *
*/
-public class WikittyPublicationProxy extends WikittyProxy{
+public class WikittyPublicationProxy extends WikittyProxy {
-
-
+ /*
+ * TODO mfortun-2011-05-06 in this class add multicontexte supportby
+ * overiding wikitty proxy method
+ */
+
+ static protected WikittyService ws = null;
+
+ protected WikittyPublicationProxy(ApplicationConfig config,
+ WikittyService ws) {
+ super(config, ws);
+ }
+
+ static public WikittyPublicationProxy getInstance(String token) {
+ ApplicationConfig config = WikittyPublicationConfig.getInstance();
+ WikittyService ws = getWikittyService(config);
+ WikittyPublicationProxy result = new WikittyPublicationProxy(config, ws);
+ result.setSecurityToken(token);
+
+ return result;
+ }
+
+ static protected WikittyService getWikittyService(ApplicationConfig config) {
+ if (ws == null) {
+ synchronized (WikittyPublicationProxy.class) {
+ if (ws == null) {
+ ws = WikittyServiceFactory.buildWikittyService(config);
+ }
+ }
+ }
+ return ws;
+ }
+
}
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java 2011-05-06 10:01:02 UTC (rev 864)
@@ -0,0 +1,66 @@
+package org.nuiton.wikitty.publication;
+
+import java.io.Serializable;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class WikittyPublicationSession implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3092501094068386098L;
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyPublicationSession.class);
+
+ static final private String WIKITTY_PUBLICATION_SESSION_KEY = WikittyPublicationSession.class
+ .getSimpleName();
+
+ protected WikittyPublicationProxy proxy;
+
+ public WikittyPublicationSession() {
+ proxy = WikittyPublicationProxy.getInstance(null);
+ }
+
+ static public void invalidate(Map<String, Object> session) {
+ session.remove(WIKITTY_PUBLICATION_SESSION_KEY);
+ }
+
+ static public WikittyPublicationSession getBowSession(
+ HttpServletRequest request) {
+ HttpSession session = request.getSession();
+ WikittyPublicationSession result = getBowSession(session);
+ return result;
+ }
+
+ static public WikittyPublicationSession getBowSession(
+ HttpSession httpSession) {
+ WikittyPublicationSession result = (WikittyPublicationSession) httpSession
+ .getAttribute(WIKITTY_PUBLICATION_SESSION_KEY);
+ if (result == null) {
+ result = new WikittyPublicationSession();
+ httpSession.setAttribute(WIKITTY_PUBLICATION_SESSION_KEY, result);
+ }
+ return result;
+ }
+
+ static public WikittyPublicationSession getBowSession(
+ Map<String, Object> session) {
+ WikittyPublicationSession result = (WikittyPublicationSession) session
+ .get(WIKITTY_PUBLICATION_SESSION_KEY);
+ if (result == null) {
+ result = new WikittyPublicationSession();
+ session.put(WIKITTY_PUBLICATION_SESSION_KEY, result);
+ }
+ return result;
+ }
+
+ public WikittyPublicationProxy getProxy() {
+ return proxy;
+ }
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationSession.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
1
0
r863 - in trunk: wikitty-api/src/test/java/org/nuiton/wikitty/api wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr wikitty-solr/src/main/resources
by bpoussin@users.nuiton.org 06 May '11
by bpoussin@users.nuiton.org 06 May '11
06 May '11
Author: bpoussin
Date: 2011-05-06 04:09:38 +0200 (Fri, 06 May 2011)
New Revision: 863
Url: http://nuiton.org/repositories/revision/wikitty/863
Log:
retour en arriere, tous les champs sont indexes en multivalued, et on ajoute un champs supplementaire _sortable utilise pour trier.
Les champs reellement multivalued sont tries par rapport a leur 1er element.
Modified:
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/AttachmentInTree.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/SolrUtil.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryParser.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java
trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.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 16:08:19 UTC (rev 862)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -45,6 +45,7 @@
import org.nuiton.wikitty.search.operators.Like;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
@@ -740,6 +741,8 @@
@Test
public void testSearchAllLowerCase() {
+ // FIXME implement it in memory
+ assumeNotYetImplementedInMemory();
{
Criteria criteria = Search.query().eq("Category.name", "HardWare").criteria();
PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria);
@@ -774,12 +777,15 @@
@Test
public void testSearchWithSort() {
+ // FIXME implement it in memory
+ assumeNotYetImplementedInMemory();
{
- Criteria criteria = Search.query().like("name", "*").criteria();
- criteria.setSortAscending(new String[]{"name"});
+ Criteria criteria = Search.query().like("*.name", "*").criteria();
+ criteria.setSortAscending(new String[]{"*.name"});
try {
proxy.findAllByCriteria(criteria);
} catch (Exception eee) {
+ eee.printStackTrace();
Assert.fail();
}
}
@@ -791,28 +797,31 @@
.extension();
proxy.storeExtension(sortable);
+ List<Integer> expected = new ArrayList<Integer>();
+ expected.add(10);
+ expected.add(1);
+ expected.add(7);
+
//Create wikitty sortable
- Wikitty sortable10 = new WikittyImpl();
- sortable10.addExtension(sortable);
- sortable10.setField(sortableExtName, numFieldName, 10);
+ for (Integer i : expected) {
+ Wikitty w = new WikittyImpl();
+ w.addExtension(sortable);
+ w.setField(sortableExtName, numFieldName, i);
+ proxy.store(w);
- 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);
+ }
+ Collections.sort(expected);
{
Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, sortableExtName).criteria();
- criteria.setSortAscending(new String[]{numFieldName});
+ criteria.setSortAscending(new String[]{
+ WikittyUtil.getFQFieldName(sortableExtName, numFieldName)});
PagedResult<Wikitty> result = proxy.findAllByCriteria(criteria);
- int firstNum = result.get(0).getFieldAsInt(sortableExtName, numFieldName);
- assertEquals(1, firstNum);
+
+ List<Integer> resulted = new ArrayList<Integer>();
+ for (Wikitty w : result) {
+ resulted.add(w.getFieldAsInt(sortableExtName, numFieldName));
+ }
+ assertEquals(expected, resulted);
}
}
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/AttachmentInTree.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/AttachmentInTree.java 2011-05-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/AttachmentInTree.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -124,11 +124,11 @@
* @param doc TreeNode document representation
*/
public void remove(SolrDocument doc) {
- String id = (String)doc.getFieldValue(WikittySolrConstant.SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(doc, WikittySolrConstant.SOLR_ID);
- Collection att = doc.getFieldValues(SolrUtil.getSolrFieldName(
+ Collection<String> att = SolrUtil.getStringFieldValues(doc,
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT,
- TYPE.WIKITTY));
+ TYPE.WIKITTY);
remove(id, att);
}
@@ -136,11 +136,11 @@
* @param doc TreeNode document representation
*/
public void remove(SolrInputDocument doc) {
- String id = (String)doc.getFieldValue(WikittySolrConstant.SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(doc, WikittySolrConstant.SOLR_ID);
- Collection att = doc.getFieldValues(SolrUtil.getSolrFieldName(
+ Collection<String> att = SolrUtil.getStringFieldValues(doc,
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT,
- TYPE.WIKITTY));
+ TYPE.WIKITTY);
remove(id, att);
}
@@ -176,11 +176,11 @@
* @param doc TreeNode document representation
*/
public void add(SolrDocument doc) {
- String id = (String)doc.getFieldValue(WikittySolrConstant.SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(doc, WikittySolrConstant.SOLR_ID);
- Collection att = doc.getFieldValues(SolrUtil.getSolrFieldName(
+ Collection<String> att = SolrUtil.getStringFieldValues(doc,
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT,
- TYPE.WIKITTY));
+ TYPE.WIKITTY);
add(id, att);
}
@@ -193,15 +193,15 @@
* @since 3.0.5
*/
public void add(SolrDocument doc, Set<String> restriction) {
- String id = (String)doc.getFieldValue(WikittySolrConstant.SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(doc, WikittySolrConstant.SOLR_ID);
- Collection att = doc.getFieldValues(SolrUtil.getSolrFieldName(
+ Collection<String> att = SolrUtil.getStringFieldValues(doc,
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT,
- TYPE.WIKITTY));
+ TYPE.WIKITTY);
if (att != null) {
- for (Object attId : att) {
+ for (String attId : att) {
if (restriction.contains(attId)) {
- add(id, (String)attId);
+ add(id, attId);
}
}
}
@@ -212,11 +212,11 @@
* @param doc TreeNode document representation
*/
public void add(SolrInputDocument doc) {
- String id = (String)doc.getFieldValue(WikittySolrConstant.SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(doc, WikittySolrConstant.SOLR_ID);
- Collection att = doc.getFieldValues(SolrUtil.getSolrFieldName(
+ Collection<String> att = SolrUtil.getStringFieldValues(doc,
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT,
- TYPE.WIKITTY));
+ TYPE.WIKITTY);
add(id, att);
}
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-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -35,23 +35,7 @@
import org.nuiton.wikitty.services.WikittyTransaction;
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;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY_MULTIVALUED;
+import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.*;
/**
*
@@ -107,12 +91,17 @@
// 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);
+ // Ajout du pattern solr pour discriminer le champs ex : _s, _dt, _w, ...
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// result = SolrUtil.getSolrCollectionFieldName(result, type);
+ result = SolrUtil.getSolrFieldName(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 + result;
+ if (log.isDebugEnabled()) {
+ log.debug("Search on multi extentions (*) without field"
+ + " type, fallback search in fulltext");
+ }
+ result = SOLR_FULLTEXT_ALL_EXTENSIONS
+ + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName;
}
} else {
result = extName + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName;
@@ -130,11 +119,12 @@
}
if (fieldType != null) { // type can be null if extension version differ
TYPE type = fieldType.getType();
- if (fieldType.isCollection()) {
- result = SolrUtil.getSolrCollectionFieldName(result, type);
- } else {
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// if (fieldType.isCollection()) {
+// result = SolrUtil.getSolrCollectionFieldName(result, type);
+// } else {
result = SolrUtil.getSolrFieldName(result, type);
- }
+// }
}
}
}
@@ -151,12 +141,15 @@
+ "|(" + SUFFIX_STRING + "$)"
+ "|(" + SUFFIX_WIKITTY + "$)"
+ "|(" + SUFFIX_NUMERIC + "$)"
- + "|(" + SUFFIX_BINARY_MULTIVALUED + "$)"
- + "|(" + SUFFIX_BOOLEAN_MULTIVALUED + "$)"
- + "|(" + SUFFIX_DATE_MULTIVALUED + "$)"
- + "|(" + SUFFIX_STRING_MULTIVALUED + "$)"
- + "|(" + SUFFIX_WIKITTY_MULTIVALUED + "$)"
- + "|(" + SUFFIX_NUMERIC_MULTIVALUED + "$)", "");
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// + "|(" + SUFFIX_BINARY_MULTIVALUED + "$)"
+// + "|(" + SUFFIX_BOOLEAN_MULTIVALUED + "$)"
+// + "|(" + SUFFIX_DATE_MULTIVALUED + "$)"
+// + "|(" + SUFFIX_STRING_MULTIVALUED + "$)"
+// + "|(" + SUFFIX_WIKITTY_MULTIVALUED + "$)"
+// + "|(" + SUFFIX_NUMERIC_MULTIVALUED + "$)"
+ + "|(" + SUFFIX_SORTABLE + "$)"
+ , "");
if (SOLR_EXTENSIONS.equals(fieldName)) {
fieldName = Element.ELT_EXTENSION;
}
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-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -193,7 +193,8 @@
try {
resp = SolrUtil.executeQuery(solr, query);
} catch (SolrServerException e) {
- throw new WikittyException("Unable to execute associative query on " + associated.getElement().getName(), e);
+ throw new WikittyException("Unable to execute associative query on "
+ + associated.getElement().getName(), e);
}
SolrDocumentList solrResults = resp.getResults();
@@ -202,12 +203,13 @@
if ( size == 0 ) {
generatedRestriction = RestrictionHelper.rFalse();
} else if ( size == 1 ) {
- generatedRestriction = RestrictionHelper.eq( associated.getElement(),
- (String) solrResults.get(0).getFieldValue(WikittySolrConstant.SOLR_ID) );
+ String id = SolrUtil.getStringFieldValue(
+ solrResults.get(0), WikittySolrConstant.SOLR_ID);
+ generatedRestriction = RestrictionHelper.eq(associated.getElement(), id);
} else {
List<String> ids = new ArrayList<String>(solrResults.size());
for (SolrDocument doc : solrResults) {
- String id = (String) doc.getFieldValue(WikittySolrConstant.SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(doc, WikittySolrConstant.SOLR_ID);
ids.add(id);
}
generatedRestriction = new In(associated.getElement(), ids);
@@ -408,18 +410,20 @@
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;
- }
}
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// 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
String value2solr = value2solr(like.getValue());
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2011-05-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -42,15 +42,17 @@
import java.util.Map;
import java.util.Set;
import org.nuiton.util.TimeLog;
+import org.nuiton.wikitty.entities.FieldType;
import org.nuiton.wikitty.entities.WikittyTreeNode;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ID;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING_MULTIVALUED;
-import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY_MULTIVALUED;
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+//import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY_MULTIVALUED;
+//import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN_MULTIVALUED;
+//import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE_MULTIVALUED;
+//import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC_MULTIVALUED;
+//import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING_MULTIVALUED;
+//import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY_MULTIVALUED;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.TREENODE_PARENTS;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.TREENODE_ATTACHED;
import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY;
@@ -192,7 +194,7 @@
SolrDocumentList results = response.getResults();
for (SolrDocument doc : results) {
- String id = (String) doc.getFieldValue(SOLR_ID);
+ String id = getStringFieldValue(doc, SOLR_ID);
result.put(id, doc);
}
} catch (SolrServerException eee) {
@@ -238,51 +240,61 @@
* @return field name
*/
static public String getSolrFieldName(String fqfieldName, TYPE type) {
- switch (type) {
- case BINARY:
- return fqfieldName + SUFFIX_BINARY;
- case BOOLEAN:
- return fqfieldName + SUFFIX_BOOLEAN;
- case DATE:
- return fqfieldName + SUFFIX_DATE;
- case STRING:
- return fqfieldName + SUFFIX_STRING;
- case NUMERIC:
- return fqfieldName + SUFFIX_NUMERIC;
- case WIKITTY:
- return fqfieldName + SUFFIX_WIKITTY;
- default:
- return fqfieldName;
+ String result = fqfieldName;
+ if (type != null) {
+ switch (type) {
+ case BINARY:
+ result = fqfieldName + SUFFIX_BINARY;
+ break;
+ case BOOLEAN:
+ result = fqfieldName + SUFFIX_BOOLEAN;
+ break;
+ case DATE:
+ result = fqfieldName + SUFFIX_DATE;
+ break;
+ case STRING:
+ result = fqfieldName + SUFFIX_STRING;
+ break;
+ case NUMERIC:
+ result = fqfieldName + SUFFIX_NUMERIC;
+ break;
+ case WIKITTY:
+ result = fqfieldName + SUFFIX_WIKITTY;
+ break;
+ default:
+ result = fqfieldName;
+ }
}
+ return result;
}
- /**
- * if you change this method, change
- * {@link FieldModifier#convertToField(org.nuiton.wikitty.services.WikittyTransaction, java.lang.String)}
- * too
- *
- * @param fqfieldName FQ field name
- * @param type of field
- * @return field name
- */
- static public String getSolrCollectionFieldName(String fqfieldName, TYPE type) {
- switch (type) {
- case BINARY:
- return fqfieldName + SUFFIX_BINARY_MULTIVALUED;
- case BOOLEAN:
- return fqfieldName + SUFFIX_BOOLEAN_MULTIVALUED;
- case DATE:
- return fqfieldName + SUFFIX_DATE_MULTIVALUED;
- case STRING:
- return fqfieldName + SUFFIX_STRING_MULTIVALUED;
- case NUMERIC:
- return fqfieldName + SUFFIX_NUMERIC_MULTIVALUED;
- case WIKITTY:
- return fqfieldName + SUFFIX_WIKITTY_MULTIVALUED;
- default:
- return fqfieldName;
- }
- }
+// /**
+// * if you change this method, change
+// * {@link FieldModifier#convertToField(org.nuiton.wikitty.services.WikittyTransaction, java.lang.String)}
+// * too
+// *
+// * @param fqfieldName FQ field name
+// * @param type of field
+// * @return field name
+// */
+// static public String getSolrCollectionFieldName(String fqfieldName, TYPE type) {
+// switch (type) {
+// case BINARY:
+// return fqfieldName + SUFFIX_BINARY_MULTIVALUED;
+// case BOOLEAN:
+// return fqfieldName + SUFFIX_BOOLEAN_MULTIVALUED;
+// case DATE:
+// return fqfieldName + SUFFIX_DATE_MULTIVALUED;
+// case STRING:
+// return fqfieldName + SUFFIX_STRING_MULTIVALUED;
+// case NUMERIC:
+// return fqfieldName + SUFFIX_NUMERIC_MULTIVALUED;
+// case WIKITTY:
+// return fqfieldName + SUFFIX_WIKITTY_MULTIVALUED;
+// default:
+// return fqfieldName;
+// }
+// }
/**
* Copy solr document
@@ -363,7 +375,236 @@
copySolrDocument(source, dest, null, fieldToExclude);
}
+ static public Collection<String> getStringFieldValues (SolrDocument d, String fieldname) {
+ Collection<String> result = getStringFieldValues(d, fieldname, null);
+ return result;
+ }
+
+ static public Collection<String> getStringFieldValues (SolrInputDocument d, String fieldname) {
+ Collection<String> result = getStringFieldValues(d, fieldname, null);
+ return result;
+ }
+
+ static public Collection<String> getStringFieldValues (
+ SolrDocument d, String fieldname, FieldType.TYPE type) {
+ // petit hack, car la methode retourne un Collection<Object> alors
+ // qu'il sagit en fait d'un Collection<String>, de cette facon on force
+ // la conversion en passant par une colleciton non typee
+ String solrFieldName = SolrUtil.getSolrFieldName(fieldname, type);
+ Collection tmp = d.getFieldValues(solrFieldName);
+ Collection<String> result = (Collection<String>)tmp;
+ return result;
+ }
+
+ static public Collection<String> getStringFieldValues (
+ SolrInputDocument d, String fieldname, FieldType.TYPE type) {
+ // petit hack, car la methode retourne un Collection<Object> alors
+ // qu'il sagit en fait d'un Collection<String>, de cette facon on force
+ // la conversion en passant par une colleciton non typee
+ String solrFieldName = SolrUtil.getSolrFieldName(fieldname, type);
+ Collection tmp = d.getFieldValues(solrFieldName);
+ Collection<String> result = (Collection<String>)tmp;
+ return result;
+ }
+
/**
+ * get value of field in SolrDocument, field must have only one value
+ * @param d
+ * @param fieldname
+ * @param type
+ * @return
+ */
+ static public String getStringFieldValue(SolrInputDocument d, String fieldname) {
+ String result = getStringFieldValue(d, fieldname, null);
+ return result;
+ }
+
+ /**
+ * get value of field in SolrDocument, field must have only one value
+ * @param d
+ * @param fieldname
+ * @param type optional type to generate solr field name
+ * @return
+ */
+ static public String getStringFieldValue(
+ SolrInputDocument d, String fieldname, FieldType.TYPE type) {
+ String solrFieldName = SolrUtil.getSolrFieldName(fieldname, type);
+
+ Object value = d.getFieldValue(solrFieldName);
+ String result = convertToString(value, solrFieldName);
+ return result;
+ }
+
+ /**
+ * get value of field in SolrDocument, field must have only one value
+ * @param d
+ * @param fieldname
+ * @param type
+ * @return
+ */
+ static public String getStringFieldValue(SolrDocument d, String fieldname) {
+ String result = getStringFieldValue(d, fieldname, null);
+ return result;
+ }
+
+ /**
+ * get value of field in SolrDocument, field must have only one value
+ * @param d
+ * @param fieldname
+ * @param type optional type to generate solr field name
+ * @return
+ */
+ static public String getStringFieldValue(SolrDocument d, String fieldname, FieldType.TYPE type) {
+ String solrFieldName = SolrUtil.getSolrFieldName(fieldname, type);
+
+ Object value = d.getFieldValue(solrFieldName);
+ String result = convertToString(value, solrFieldName);
+ return result;
+ }
+
+ /**
+ * get value of field in SolrDocument, field must have only one value
+ * @param d
+ * @param fieldname
+ * @param type
+ * @return
+ */
+ static public Integer getIntFieldValue(SolrDocument d, String fieldname) {
+ Integer result = getIntFieldValue(d, fieldname, null);
+ return result;
+ }
+
+ /**
+ * get value of field in SolrDocument, field must have only one value
+ * @param d
+ * @param fieldname
+ * @param type optional type to generate solr field name
+ * @return
+ */
+ static public Integer getIntFieldValue(SolrDocument d, String fieldname, FieldType.TYPE type) {
+ String solrFieldName = SolrUtil.getSolrFieldName(fieldname, type);
+
+ Object value = d.getFieldValue(solrFieldName);
+ Integer result = convertToInteger(value, solrFieldName);
+ return result;
+ }
+
+ /**
+ * Converti un Object en String, si l'objet est de type String un simple
+ * cast est fait, si l'objet est un tableau, on prend le 1er element, si
+ * le tableau contient plus de 1 element une exception est levee
+ *
+ * @param value
+ * @return une string ou null si value est null ou est un tableau vide
+ */
+ static public String convertToString(Object value, String solrFieldName) {
+ String result;
+ if (value == null) {
+ result = null;
+ } else if (value instanceof String) {
+ // c'est un champs monovalue
+ result = (String)value;
+ } else if (value instanceof String[]) {
+ // c'est un champs multivalue
+ String[] values = (String[])value;
+ if (values.length == 0) {
+ result = null;
+ } else if (values.length == 1) {
+ result = values[0];
+ } else {
+ throw new WikittyException(String.format(
+ "You can't get one value from field (%s) with many (%s) value",
+ solrFieldName, values.length));
+ }
+ } else if (value instanceof Collection) {
+ Collection c = (Collection)value;
+ if (c.isEmpty()) {
+ result = null;
+ } else if (c.size() == 1){
+ Object o = c.iterator().next();
+ result = convertToString(o, solrFieldName);
+ } else {
+ throw new WikittyException(String.format(
+ "You can't get one value from field (%s) with many (%s) value",
+ solrFieldName, c.size()));
+ }
+ } else {
+ throw new WikittyException(String.format(
+ "Field (%s) is not an String but %s",
+ solrFieldName, value.getClass().getName()));
+ }
+ return result;
+ }
+
+ /**
+ * Converti un Object en String, si l'objet est de type String un simple
+ * cast est fait, si l'objet est un tableau, on prend le 1er element, si
+ * le tableau contient plus de 1 element une exception est levee
+ *
+ * @param value
+ * @return une string ou null si value est null ou est un tableau vide
+ */
+ static public Integer convertToInteger(Object value, String solrFieldName) {
+ Integer result;
+ if (value == null) {
+ result = null;
+ } else if (value instanceof Integer) {
+ // c'est un champs monovalue
+ result = (Integer)value;
+ } else if (value instanceof Integer[]){
+ // c'est un champs multivalue
+ Integer[] values = (Integer[])value;
+ if (values.length == 0) {
+ result = null;
+ } else if (values.length == 1) {
+ result = values[0];
+ } else {
+ throw new WikittyException(String.format(
+ "You can't get one value from field (%s) with many (%s) value",
+ solrFieldName, values.length));
+ }
+ } else {
+ throw new WikittyException(String.format(
+ "Field (%s) is not an Integer but %s",
+ solrFieldName, value.getClass().getName()));
+ }
+ return result;
+ }
+
+ /**
+ * If value is collection or array get only the first element, else
+ * juste return value.
+ *
+ * @param o
+ * @return
+ */
+ static public Object getOneValue(Object value) {
+ Object result;
+ if (value == null) {
+ result = null;
+ } else if (value instanceof Object[]) {
+ // c'est un champs multivalue
+ Object[] values = (Object[])value;
+ if (values.length == 0) {
+ result = null;
+ } else {
+ result = values[0];
+ }
+ } else if (value instanceof Collection) {
+ Collection c = (Collection)value;
+ if (c.isEmpty()) {
+ result = null;
+ } else {
+ Object o = c.iterator().next();
+ result = getOneValue(o);
+ }
+ } else {
+ result = value;
+ }
+ return result;
+ }
+
+ /**
* Quote s for solr. Currently only ':' is escaped
* @param s to quote
* @return new string solr compliant
Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryParser.java
===================================================================
--- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryParser.java 2011-05-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryParser.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -76,7 +76,7 @@
// valeur dans la config. Mais en fait a chaque fois on passe
// ici car defaultField est null :( alors que dans schema.xml
// on a bien defini le defaultField :(
- defaultField = WikittySolrConstant.SOLR_DEFAULT_FIELD;
+ defaultField = WikittySolrConstant.SOLR_FULLTEXT;
}
lparser = new SolrQueryParser(this, defaultField);
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-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -239,9 +239,11 @@
// pour les autres les attachments seront traites dans
// la phase suivante
Set<String> newAtt = WikittyTreeNodeHelper.getAttachment(w);
- Collection oldAtt = oldDoc.getFieldValues(SolrUtil.getSolrFieldName(
+
+ Collection<String> oldAtt = SolrUtil.getStringFieldValues(
+ oldDoc,
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT,
- TYPE.WIKITTY));
+ TYPE.WIKITTY);
// il faut supprimer l'indexation arbre des noeuds
// qui sont dans old, mais pas dans new
Set<String> toRemove = new HashSet<String>();
@@ -410,7 +412,7 @@
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT,
TYPE.WIKITTY);
SolrUtil.copySolrDocumentExcludeSomeField(doc, newDoc, field);
- Collection atts = doc.getFieldValues(field);
+ Collection<String> atts = SolrUtil.getStringFieldValues(doc, field);
// remove deleted attachment
Set<String> newAtts = new HashSet<String>(atts);
newAtts.removeAll(ids);
@@ -491,7 +493,7 @@
SolrInputDocument doc, Map<String, SolrDocument> tree) {
Set<String> parents = new HashSet<String>();
String root = null;
- String treeNodeId = (String)doc.getFieldValue(SOLR_ID);
+ String treeNodeId = SolrUtil.getStringFieldValue(doc, WikittySolrConstant.SOLR_ID);
String parentId = treeNodeId;
if (parentId == null) {
throw new WikittyException("parentId is null, but this must be impossible");
@@ -504,13 +506,14 @@
// si parentDoc a deja ete indexe pour l'arbre, on peut reutiliser
// directement les valeurs et sortir de la boucle
if (parentDoc.containsKey(TREENODE_ROOT)) {
- root = (String) parentDoc.getFieldValue(TREENODE_ROOT);
- Collection p = parentDoc.getFieldValues(TREENODE_PARENTS);
+ root = SolrUtil.getStringFieldValue(parentDoc, TREENODE_ROOT);
+ Collection<String> p = SolrUtil.getStringFieldValues(parentDoc, TREENODE_PARENTS);
parents.addAll(p);
break;
} else {
- nextParentId = (String) parentDoc.getFieldValue(SolrUtil.getSolrFieldName(
- WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, TYPE.WIKITTY));
+ nextParentId = SolrUtil.getStringFieldValue(parentDoc,
+ WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT,
+ TYPE.WIKITTY);
}
} else {
SolrDocument oldParentDoc = tree.get(parentId);
@@ -518,13 +521,14 @@
// si parentDoc a deja ete indexe pour l'arbre, on peut reutiliser
// directement les valeurs et sortir de la boucle
if (oldParentDoc.containsKey(TREENODE_ROOT)) {
- root = (String) oldParentDoc.getFieldValue(TREENODE_ROOT);
- Collection p = oldParentDoc.getFieldValues(TREENODE_PARENTS);
+ root = SolrUtil.getStringFieldValue(oldParentDoc,TREENODE_ROOT);
+ Collection<String> p = SolrUtil.getStringFieldValues(oldParentDoc, TREENODE_PARENTS);
parents.addAll(p);
break;
} else {
- nextParentId = (String) oldParentDoc.getFieldValue(SolrUtil.getSolrFieldName(
- WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, TYPE.WIKITTY));
+ nextParentId = SolrUtil.getStringFieldValue(oldParentDoc,
+ WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT,
+ TYPE.WIKITTY);
}
}
}
@@ -585,13 +589,15 @@
}
}
for (String treeNodeId : attachmentInTree.getAdded().keySet()) {
- Collection treeNodeParents = null;
+ Collection<String> treeNodeParents = null;
SolrInputDocument treeNodeDoc = solrResource.getAddedDoc(treeNodeId);
if (treeNodeDoc != null) {
- treeNodeParents = treeNodeDoc.getFieldValues(TREENODE_PARENTS);
+ treeNodeParents = SolrUtil.getStringFieldValues(
+ treeNodeDoc, TREENODE_PARENTS);
} else if (tree != null) {
SolrDocument doc = tree.get(treeNodeId);
- treeNodeParents = doc.getFieldValues(TREENODE_PARENTS);
+ treeNodeParents = SolrUtil.getStringFieldValues(
+ doc, TREENODE_PARENTS);
} else {
log.error("SolR doc not found in Transaction or in tree."
+ "This is a bug !!!");
@@ -658,6 +664,7 @@
if(sortAscending != null) {
for (String sort : sortAscending) {
String tranform = fieldModifier.convertToSolr(transaction, sort);
+ tranform += WikittySolrConstant.SUFFIX_SORTABLE;
query.addSortField(tranform, SolrQuery.ORDER.asc);
}
}
@@ -666,6 +673,7 @@
if(sortDescending != null) {
for (String sort : sortDescending) {
String tranform = fieldModifier.convertToSolr(transaction, sort);
+ tranform += WikittySolrConstant.SUFFIX_SORTABLE;
query.addSortField(tranform, SolrQuery.ORDER.desc);
}
}
@@ -738,7 +746,7 @@
List<String> ids = new ArrayList<String>(solrResults.size());
for (SolrDocument doc : solrResults) {
- String id = (String) doc.getFieldValue(SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(doc, SOLR_ID);
ids.add(id);
}
@@ -778,7 +786,7 @@
Search treeSearch = Search.query().and().eq(TREENODE_PARENTS, wikittyId);
if (depth >= 0) {
- Integer d = (Integer) doc.getFieldValue(TREENODE_DEPTH);
+ Integer d = SolrUtil.getIntFieldValue(doc, TREENODE_DEPTH);
treeSearch = treeSearch.bw(TREENODE_DEPTH,
String.valueOf(d),
String.valueOf(d + depth));
@@ -827,11 +835,11 @@
// construction de tous les TreeNodeResult qui permettront
// de construire l'arbre
for (SolrDocument d : solrResults) {
- String id = (String) d.getFieldValue(SOLR_ID);
+ String id = SolrUtil.getStringFieldValue(d, SOLR_ID);
- String parentId = (String) d.getFieldValue(SolrUtil.getSolrFieldName(
+ String parentId = SolrUtil.getStringFieldValue(d,
WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT,
- TYPE.WIKITTY));
+ TYPE.WIKITTY);
int nb = counts.containsKey(id) ? counts.get(id) : 0;
TreeNodeResult<String> child = new TreeNodeResult<String>(id, nb);
allTreeNodeResult.put(id, child);
@@ -863,6 +871,9 @@
}
+ /**
+ * Ajoute un champs dans un document a indexer
+ */
protected void addToIndexDocument(SolrInputDocument doc,
TYPE type, String fqfieldName, Object fieldValue,
boolean collection) {
@@ -872,31 +883,48 @@
} else {
String solrFqFieldName;
- if (collection) {
- solrFqFieldName = SolrUtil.getSolrCollectionFieldName(fqfieldName, type);
- } else {
- solrFqFieldName = SolrUtil.getSolrFieldName(fqfieldName, type);
- }
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// if (collection) {
+// solrFqFieldName = SolrUtil.getSolrCollectionFieldName(fqfieldName, type);
+// } else {
+ // add suffix like _s for string type ex: myExt.myField_s
+ solrFqFieldName = SolrUtil.getSolrFieldName(fqfieldName, type);
+// }
// #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);
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// String solrAllFqFieldName = SolrUtil.getSolrCollectionFieldName(fqfieldName, type);
String solrAllFieldName = SOLR_ALL_EXTENSIONS
+ WikittyUtil.FQ_FIELD_NAME_SEPARATOR
- + WikittyUtil.getFieldNameFromFQFieldName(solrAllFqFieldName);
+ + WikittyUtil.getFieldNameFromFQFieldName(solrFqFieldName);
+ // idem mais un champs sur plusieurs extension peut avoir des types
+ // different, on ajoute donc un champs pour la recherche fulltext
+ String solrFulltextAllFieldName = SOLR_FULLTEXT_ALL_EXTENSIONS
+ + WikittyUtil.FQ_FIELD_NAME_SEPARATOR
+ + WikittyUtil.getFieldNameFromFQFieldName(fqfieldName);
+
String solrNullFieldFqFieldName = SOLR_NULL_FIELD + fqfieldName;
- doc.remove(solrFqFieldName);
- doc.remove(solrNullFieldFqFieldName);
- doc.remove(solrAllFieldName);
+ // sortable solr field name for this field ex: myExt.myField_s_sortable
+ String solrFqFieldNameSortable = solrFqFieldName + SUFFIX_SORTABLE;
+ doc.remove(solrFqFieldName); // myExt.myField_s
+ doc.remove(solrNullFieldFqFieldName); // #null_field-myExt.myField
+ doc.remove(solrAllFieldName); // #all.myField_s
+ doc.remove(solrFulltextAllFieldName); // #fulltext.all.myField
+ doc.remove(solrFqFieldNameSortable); // myExt.myField_s_sortable
+
String solrNullFieldFqFieldNameValue = "true";
if(fieldValue != null) {
doc.addField(solrFqFieldName, fieldValue);
doc.addField(solrAllFieldName, fieldValue);
+ doc.addField(solrFulltextAllFieldName, fieldValue);
+ Object oneFieldValue = SolrUtil.getOneValue(fieldValue);
+ doc.addField(solrFqFieldNameSortable, oneFieldValue);
solrNullFieldFqFieldNameValue = "false";
if (log.isTraceEnabled()) {
log.trace(String.format("index field '%s' with value '%s'",
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-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2011-05-06 02:09:38 UTC (rev 863)
@@ -39,6 +39,9 @@
*/
public class WikittySolrConstant {
+ /** Precise the query parser to use, is allow leading wildcard */
+ static final public String SOLR_QUERY_PARSER = "{!wikitty}";
+
/**
* Prefix utiliser pour les champs ajouter lors de l'indexation. Ce prefix
* evite d'avoir des conflits entre un nom d'extension et un champs ajoute
@@ -49,21 +52,20 @@
static final public String SOLR_ID = SOLR_WIKITTY_PREFIX + "id";
/** if field is null, this extra field is set to true otherwize is set to false */
- static final public String SOLR_NULL_FIELD =
- SOLR_WIKITTY_PREFIX + "null_field-";
+ static final public String SOLR_NULL_FIELD = SOLR_WIKITTY_PREFIX + "null_field-";
/** extensions field name in solr */
static final public String SOLR_EXTENSIONS = SOLR_WIKITTY_PREFIX + "extensions";
- /** extension use to store field without extension to search on all extesnion */
+ /** default field to fulltext search */
+ static final public String SOLR_FULLTEXT = SOLR_WIKITTY_PREFIX + "fulltext";
+
+ /** extension use to store field without extension to search on all extension */
static final public String SOLR_ALL_EXTENSIONS = SOLR_WIKITTY_PREFIX + "all";
- /** default field to fulltext search */
- static final public String SOLR_DEFAULT_FIELD = SOLR_WIKITTY_PREFIX + "fulltext";
+ /** extension use to store field without extension to search on all extension in fulltext mode*/
+ static final public String SOLR_FULLTEXT_ALL_EXTENSIONS = SOLR_WIKITTY_PREFIX + "ft.all";
- /** Precise the query parser to use, is allow leading wildcard */
- static final public String SOLR_QUERY_PARSER = "{!wikitty}";
-
/** Use for indexation tree node */
static final public String TREENODE_PREFIX = SOLR_WIKITTY_PREFIX + "tree.";
/** Use as field on TreeNode */
@@ -85,16 +87,20 @@
static final public String SUFFIX_STRING = "_s";
static final public String SUFFIX_WIKITTY = "_w";
- static final public String SUFFIX_BINARY_MULTIVALUED = "_bim";
- static final public String SUFFIX_BOOLEAN_MULTIVALUED = "_bm";
- static final public String SUFFIX_NUMERIC_MULTIVALUED = "_dm";
- static final public String SUFFIX_DATE_MULTIVALUED = "_dtm";
- static final public String SUFFIX_STRING_MULTIVALUED = "_sm";
- static final public String SUFFIX_WIKITTY_MULTIVALUED = "_wm";
+ static final public String SUFFIX_SORTABLE = "_sortable";
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// static final public String SUFFIX_BINARY_MULTIVALUED = "_bim";
+// static final public String SUFFIX_BOOLEAN_MULTIVALUED = "_bm";
+// static final public String SUFFIX_NUMERIC_MULTIVALUED = "_dm";
+// static final public String SUFFIX_DATE_MULTIVALUED = "_dtm";
+// static final public String SUFFIX_STRING_MULTIVALUED = "_sm";
+// static final public String SUFFIX_WIKITTY_MULTIVALUED = "_wm";
+
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";
+// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field
+// public static final String SUFFIX_STRING_FULLTEXT_LOWERCASE = "_cm";
+// public static final String SUFFIX_STRING_FULLTEXT_MULTIVALUED = "_tm";
}
Modified: trunk/wikitty-solr/src/main/resources/schema.xml
===================================================================
--- trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-05 16:08:19 UTC (rev 862)
+++ trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-06 02:09:38 UTC (rev 863)
@@ -162,8 +162,11 @@
<fields>
- <!-- WARNING ALL DATA MUST BE STORED, WE MUST BE ABLE TO REINDEX WIKITTY WITH
- INDEXED BECAUSE OF HIERARCHICAL FACET, THERE ARE COPY OF DOCUMENT -->
+ <!--
+ | WARNING ALL DATA MUST BE STORED (except copied fields), WE MUST BE ABLE
+ | TO REINDEX WIKITTY WITH INDEXED BECAUSE OF HIERARCHICAL FACET, THERE
+ | ARE COPY OF DOCUMENT
+ +-->
<field name="#id" type="string" required="true" indexed="true" stored="true" multiValued="false"/>
<field name="#extensions" type="string" indexed="true" stored="true" multiValued="true"/>
@@ -171,35 +174,42 @@
<field name="#tree.parents" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="#tree.depth" type="int" indexed="true" stored="true" multiValued="false"/>
<field name="#tree.attached-all" type="string" indexed="true" stored="false" multiValued="true"/>
- <dynamicfield name="#tree.attached.*" type="string" indexed="true" stored="true" multiValued="true"/>
- <dynamicfield name="#null_field-*" type="boolean" indexed="true" stored="true" multiValued="false"/>
-
<!-- copy all field (except binary) in '#fulltext' field for fulltext search -->
<field name="#fulltext" 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"/>
+ <!-- to prevent error if we try to sort on no sortable field (multivalued)
+ ATTENTION: solr ne prend pas l'ordre de definition, mais tri sur la longueur du
+ nom des champs dynamique. Donc il faut que _sortable soit plus long que #ft_all -->
+ <dynamicField name="*_sortable" type="string" indexed="true" stored="false" multiValued="false"/>
+
+ <dynamicField name="#tree.attached.*" type="string" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="#null_field-*" type="boolean" indexed="true" stored="true" multiValued="false"/>
+
+ <!-- pour tous les champs on les indexes aussi en fulltext -->
+ <dynamicField name="#ft.all.*" 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"/>
+
<!-- on indexe pas les binary field -->
- <dynamicField name="*_bi" type="binary" indexed="false" stored="false" multiValued="false"/>
- <dynamicField name="*_b" type="boolean" indexed="true" stored="true" multiValued="false"/>
- <dynamicField name="*_d" type="numeric" indexed="true" stored="true" multiValued="false"/>
- <dynamicField name="*_dt" type="date" indexed="true" stored="true" multiValued="false"/>
- <dynamicField name="*_s" type="string" indexed="true" stored="true" multiValued="false"/>
- <dynamicField name="*_w" type="wikitty" indexed="true" stored="true" multiValued="false"/>
- <dynamicField name="*_bim" type="binary" indexed="false" stored="false" multiValued="true"/>
- <dynamicField name="*_bm" type="boolean" indexed="true" stored="true" multiValued="true"/>
- <dynamicField name="*_dm" type="numeric" indexed="true" stored="true" multiValued="true"/>
- <dynamicField name="*_dtm" type="date" indexed="true" stored="true" multiValued="true"/>
- <dynamicField name="*_sm" type="string" indexed="true" stored="true" multiValued="true"/>
- <dynamicField name="*_wm" type="wikitty" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_bi" type="binary" indexed="false" stored="false" multiValued="true"/>
+ <dynamicField name="*_b" type="boolean" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_d" type="numeric" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_dt" type="date" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_s" type="string" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_w" type="wikitty" indexed="true" stored="true" multiValued="true"/>
+ <dynamicField name="*_bi_sortable" type="binary" indexed="false" stored="false" multiValued="false"/>
+ <dynamicField name="*_b_sortable" type="boolean" indexed="true" stored="true" multiValued="false"/>
+ <dynamicField name="*_d_sortable" type="numeric" indexed="true" stored="true" multiValued="false"/>
+ <dynamicField name="*_dt_sortable" type="date" indexed="true" stored="true" multiValued="false"/>
+ <dynamicField name="*_s_sortable" type="string" indexed="true" stored="true" multiValued="false"/>
+ <dynamicField name="*_w_sortable" type="wikitty" indexed="true" stored="true" multiValued="false"/>
+
<!-- all other field, needed if we do query with unregistered extension.
No result is returned but is the right behavior -->
- <dynamicField name="*" type="string" indexed="true" stored="false" multiValued="true"/>
+ <dynamicField name="*" type="string" indexed="true" stored="false" multiValued="false"/>
</fields>
@@ -221,31 +231,18 @@
<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"/>
- <copyField source="*_b" dest="#fulltext.*"/>
+<!-- <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.*"/>
+ <copyField source="*_w" dest="#fulltext.*"/>-->
+<!-- <copyField source="#all.*" dest="#fulltext.all.*"/>-->
+
<!-- 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
r862 - in trunk/wikitty-publication/src/main: java/org/nuiton/wikitty/publication resources webapp
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 18:08:19 +0200 (Thu, 05 May 2011)
New Revision: 862
Url: http://nuiton.org/repositories/revision/wikitty/862
Log:
* continue migration to struts
Added:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java
trunk/wikitty-publication/src/main/resources/struts.properties
trunk/wikitty-publication/src/main/resources/struts.xml
Modified:
trunk/wikitty-publication/src/main/webapp/index.jsp
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java 2011-05-05 16:08:19 UTC (rev 862)
@@ -0,0 +1,38 @@
+package org.nuiton.wikitty.publication;
+
+import java.util.Map;
+
+import org.apache.struts2.interceptor.SessionAware;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+
+/**
+ * Base action that wikitty publication will extend, needed to work within
+ * a struts architecture.
+ *
+ * @author mfortun
+ *
+ */
+public class BaseAction extends ActionSupport implements SessionAware {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1865905051843413141L;
+
+ @Override
+ public void setSession(Map<String, Object> arg0) {
+ // TODO mfortun
+ throw new UnsupportedOperationException("not yet implemented");
+ //
+
+ }
+
+
+ public WikittyPublicationProxy getPublicationProxy(){
+ //TODO mfortun-2011-05-05
+ return null;
+ }
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/BaseAction.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-05 16:08:19 UTC (rev 862)
@@ -0,0 +1,15 @@
+package org.nuiton.wikitty.publication;
+
+import org.nuiton.wikitty.WikittyProxy;
+
+/**
+ * Proxy use by action in wikitty publication
+ *
+ * @author mfortun
+ *
+ */
+public class WikittyPublicationProxy extends WikittyProxy{
+
+
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/wikitty-publication/src/main/resources/struts.properties
===================================================================
--- trunk/wikitty-publication/src/main/resources/struts.properties (rev 0)
+++ trunk/wikitty-publication/src/main/resources/struts.properties 2011-05-05 16:08:19 UTC (rev 862)
@@ -0,0 +1,50 @@
+struts.locale=fr_FR
+struts.i18n.encoding=UTF-8
+
+
+struts.objectFactory.spring.autoWire=name
+
+struts.objectFactory.spring.useClassCache=true
+
+# struts.multipart.parser=cos
+# struts.multipart.parser=pell
+struts.multipart.parser=jakarta
+# uses javax.servlet.context.tempdir by default
+struts.multipart.saveDir=
+struts.multipart.maxSize=2097152
+
+# struts.custom.properties=application,com/webwork/extension/custom
+
+struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
+
+struts.action.extension=action
+
+struts.serve.static=true
+
+struts.serve.static.browserCache=true
+
+struts.tag.altSyntax=true
+
+struts.devMode=true
+
+struts.i18n.reload=true
+
+struts.ui.theme=xhtml
+struts.ui.templateDir=template
+#sets the default template type. Either ftl, vm, or jsp
+struts.ui.templateSuffix=ftl
+
+struts.configuration.xml.reload=false
+
+struts.url.http.port=80
+struts.url.https.port=443
+
+struts.custom.i18n.resources=chorem-i18n
+
+struts.dispatcher.parametersWorkaround=false
+
+#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
+
+struts.freemarker.wrapper.altMap=true
+
+struts.xslt.nocache=false
Property changes on: trunk/wikitty-publication/src/main/resources/struts.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/wikitty-publication/src/main/resources/struts.xml
===================================================================
--- trunk/wikitty-publication/src/main/resources/struts.xml (rev 0)
+++ trunk/wikitty-publication/src/main/resources/struts.xml 2011-05-05 16:08:19 UTC (rev 862)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts PUBLIC
+ "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+ "http://struts.apache.org/dtds/struts-2.0.dtd">
+<struts>
+
+
+ <constant name="struts.devMode" value="true" />
+ <constant name="struts.ognl.allowStaticMethodAccess" value="true" />
+ <constant name="struts.enable.SlashesInActionNames" value="true" />
+
+
+
+ <package name="test" extends="struts-default">
+
+ <action name="editPage">
+
+ <result>/WEB-INF/jsp/edit.jsp</result>
+ </action>
+ <action name="viewPage">
+
+ <result>/WEB-INF/jsp/view.jsp</result>
+ </action>
+
+ </package>
+
+
+
+<!--
+
+ <package name="wikitty-publication" namespace="/" extends="struts-default">
+ <default-action-ref name="home" />
+ <action name="*/action/*" class="org.nuiton.nospamweb.action.CheckAction">
+ <param name="context">{1}</param>
+ <param name="args">{1}</param>
+ <result name="input">WEB-INF/jsp/captcha.jsp</result>
+ <result name="success" type="redirect">${redirectTo}</result>
+ </action>
+ </package>
+
+ code base for action
+<action name="*/action/*" class="org.nuiton.nospamweb.action.CheckAction">
+ <param name="context">{1}</param>
+ <param name="args">{1}</param>
+ <result name="input">WEB-INF/jsp/captcha.jsp</result>
+ <result name="success" type="redirect">${redirectTo}</result>
+ </action>
+-->
+
+</struts>
Property changes on: trunk/wikitty-publication/src/main/resources/struts.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/wikitty-publication/src/main/webapp/index.jsp
===================================================================
--- trunk/wikitty-publication/src/main/webapp/index.jsp 2011-05-05 16:08:09 UTC (rev 861)
+++ trunk/wikitty-publication/src/main/webapp/index.jsp 2011-05-05 16:08:19 UTC (rev 862)
@@ -1 +1,32 @@
-<% out.println("hello !"); %>
\ No newline at end of file
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<% out.println("hello !"); %>
+
+ <s:url var="regenPermToken" action="viewPage"/>
+ <s:a href="%{regenPermToken}" id="regenPermToken">
+ <s:text name="view"/>
+ </s:a>
+
+
+<s:url var="regenPermToken" action="editPage"/>
+ <s:a href="%{regenPermToken}" id="regenPermToken">
+ <s:text name="edit"/>
+ </s:a>
+
+
+
+<!--
+ <s:url var="regenPermToken" action="regenPermToken"/>
+ <s:a href="%{regenPermToken}" id="regenPermToken">
+ <s:text name="bow.preferences.regenPermToken"/>
+ </s:a>
+(17:06:03) blabla(a)conference.im.codelutin.com/sletellier:
+ <s:url var="homeToken" action="home">
+ <s:param name="token"><s:property value="%{#session.BowSession.getPermanentToken()}" /></s:param>
+ </s:url>
+
+
+
+ -->
+
+
1
0
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