Wikitty-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
May 2011
- 5 participants
- 78 discussions
r871 - in trunk/wikitty-publication/src/main: java/org/nuiton/wikitty/publication/action resources
by mfortun@users.nuiton.org 09 May '11
by mfortun@users.nuiton.org 09 May '11
09 May '11
Author: mfortun
Date: 2011-05-09 16:07:29 +0200 (Mon, 09 May 2011)
New Revision: 871
Url: http://nuiton.org/repositories/revision/wikitty/871
Log:
* correct action raw
* add action eval
Added:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionEval.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationContext.java
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java
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
trunk/wikitty-publication/src/main/resources/struts.xml
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionEval.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionEval.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionEval.java 2011-05-09 14:07:29 UTC (rev 871)
@@ -0,0 +1,277 @@
+package org.nuiton.wikitty.publication.action;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts2.interceptor.ServletRequestAware;
+import org.apache.struts2.interceptor.ServletResponseAware;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.ObjectUtil;
+import org.nuiton.util.StringUtil;
+import org.nuiton.wikitty.ScriptEvaluator;
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyExtension;
+import org.nuiton.wikitty.publication.AbstractActionOnWikitty;
+import org.nuiton.wikitty.publication.WikittyPublicationAction;
+import org.nuiton.wikitty.publication.WikittyPublicationConfig;
+import org.nuiton.wikitty.publication.WikittyPublicationProxy;
+import org.nuiton.wikitty.publication.entities.WikittyPubText;
+import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper;
+import org.nuiton.wikitty.search.Criteria;
+
+import com.opensymphony.xwork2.ActionContext;
+
+public class PublicationActionEval extends PublicationBaseAction implements
+ ServletResponseAware, ServletRequestAware, PublicationContext {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7649132751822833474L;
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(PublicationActionEval.class);
+
+ protected String contentType;
+ protected HttpServletResponse response;
+ protected HttpServletRequest request;
+ protected InputStream inputStream;
+
+ /** variable contenant l'instance de la classe ActionEval */
+ static final public String EVAL_VAR = "wpEval";
+ /** variable name use to put context in script and jsp */
+ static final public String CONTEXT_VAR = "wpContext";
+ /** contient la liste des arguments mandatory non encore utilise */
+ static final public String SUBCONTEXT_VAR = "wpSubContext";
+ /**
+ * contient le nom de la page WikittyPubText (ex: Wiki) ou la requete ayant
+ * permis de trouver la page (ex: MyScript.name=df)
+ */
+ static final public String PAGE_NAME_VAR = "wpPage";
+ /**
+ * contient le wikitty utilise comme script
+ */
+ static final public String WIKITTY_VAR = "wpWikitty";
+
+ @Override
+ public void setServletResponse(HttpServletResponse arg0) {
+ this.response = arg0;
+ }
+
+ @Override
+ public void setServletRequest(HttpServletRequest arg0) {
+ this.request = arg0;
+
+ }
+
+ @Override
+ public String execute() throws Exception {
+ List<String> argsString = new ArrayList<String>();
+ String args = ActionContext.getContext().getParameters().get(ARGS_KEY)
+ .toString();
+ String[] argsTab = StringUtil.split(args, SEPARATOR);
+
+ for (String arg : argsTab) {
+ argsString.add(arg);
+ }
+
+ inputStream = new ByteArrayInputStream(doAction(this, argsString)
+ .toString().getBytes());
+
+ return SUCCESS;
+ }
+
+ public Object doAction(PublicationContext context, List<String> subContext) {
+ log.info("path " + subContext);
+
+ Object result;
+
+ Criteria criteria = searchCriteria(subContext);
+
+ if (criteria == null) {
+ // rien a evaluer, on retourne une chaine vide
+ result = "";
+ } else {
+ WikittyProxy proxy = context.getWikittyProxy();
+ Wikitty w = proxy.findByCriteria(criteria);
+
+ if (w == null || !w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) {
+ context.setContentType("text/plain");
+ result = String.format("no data found for criteria '%s'",
+ criteria);
+ } else {
+ String content = WikittyPubTextHelper.getContent(w);
+
+ if (content == null) {
+ result = getError(context);
+ } else {
+
+ String mimetype = WikittyPubTextHelper.getMimeType(w);
+
+ // supprime de subcontext ce qui a ete utilise dans cette
+ // methode
+ subContext = new ArrayList<String>(subContext.subList(1,
+ subContext.size()));
+
+ Map<String, Object> bindings = new HashMap<String, Object>();
+ bindings.put(PAGE_NAME_VAR, criteria.getName());
+ bindings.put(CONTEXT_VAR, context);
+ bindings.put(SUBCONTEXT_VAR, subContext);
+ bindings.put(WIKITTY_VAR, w);
+ bindings.put(EVAL_VAR, this);
+
+ result = ScriptEvaluator.eval(null, criteria.getName(),
+ content, mimetype, bindings);
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public Object doAction(PublicationContext context, String subContextAsText) {
+ Object result;
+ if (subContextAsText == null || "".equals(subContextAsText)) {
+ result = getError(context);
+ } else {
+ if (subContextAsText.startsWith("/")) {
+ subContextAsText = subContextAsText.substring(1);
+ }
+ String[] subContextArray = StringUtil.split(subContextAsText, "/");
+ List<String> subContext = Arrays.asList(subContextArray);
+ result = doAction(context, subContext);
+ }
+ return result;
+ }
+
+ public Object doAction(PublicationContext context) {
+ Object result;
+ if (context.getMandatoryArguments().size() <= 0) {
+ result = getError(context);
+ } else {
+ result = doAction(context, context.getMandatoryArguments());
+ }
+ return result;
+ }
+
+ public String getMimeType() {
+ return contentType;
+ }
+
+ public void setMimeType(String mimeType) {
+ this.contentType = mimeType;
+ }
+
+ public HttpServletResponse getResponse() {
+ return response;
+ }
+
+ public void setResponse(HttpServletResponse response) {
+ this.response = response;
+ }
+
+ public InputStream getInputStream() {
+ return inputStream;
+ }
+
+ public void setInputStream(InputStream inputStream) {
+ this.inputStream = inputStream;
+ }
+
+
+ @Override
+ public HttpServletRequest getRequest() {
+ return request;
+ }
+
+ @Override
+ public ApplicationConfig getAppConfig() {
+ return WikittyPublicationConfig.getConfig();
+ }
+
+ @Override
+ public String getActionName() {
+ // TODO mfortun
+ throw new UnsupportedOperationException("not yet implemented");
+ // return null;
+
+ }
+
+
+
+ @Override
+ public String makeUrl(String url) {
+ String finalUrl = url;
+ if (!finalUrl.startsWith("/")) {
+ finalUrl = "/" + finalUrl;
+ }
+ //TODO mforun-2011-05-09 rework on this method
+
+ finalUrl = getRequest().getContextPath() + "/" + getArgument(CONTEXT_KEY, "") + finalUrl;
+ finalUrl = getResponse().encodeURL(finalUrl)+".action";
+ if (log.isInfoEnabled()) {
+ log.info(String.format("transforme url from '%s' to '%s'", url,
+ finalUrl));
+ }
+ return finalUrl;
+ }
+
+ @Override
+ public WikittyService getWikittyService() {
+ return getWikittyPublicationProxy().getWikittyService();
+
+ }
+
+ @Override
+ public List<String> getMandatoryArguments() {
+ // TODO mfortun
+ throw new UnsupportedOperationException("not yet implemented");
+ // return null;
+
+ }
+
+ @Override
+ public Map<String, String> getArguments() {
+ // TODO mfortun
+ throw new UnsupportedOperationException("not yet implemented");
+ // return null;
+
+ }
+
+ @Override
+ public Map<String, byte[]> getArgumentFiles() {
+ // TODO mfortun
+ throw new UnsupportedOperationException("not yet implemented");
+ // return null;
+
+ }
+
+
+
+
+ public String getContentType() {
+ return contentType;
+ }
+
+ public void setContentType(String contentType) {
+ this.contentType = contentType;
+ }
+
+ @Override
+ public WikittyProxy getWikittyProxy() {
+ return getWikittyPublicationProxy();
+ }
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionEval.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java 2011-05-09 14:05:52 UTC (rev 870)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java 2011-05-09 14:07:29 UTC (rev 871)
@@ -1,24 +1,13 @@
package org.nuiton.wikitty.publication.action;
-import java.io.BufferedInputStream;
-import java.io.BufferedWriter;
+
import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
import java.io.InputStream;
-import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
-
import javax.servlet.http.HttpServletResponse;
-
import org.apache.struts2.interceptor.ServletResponseAware;
-import org.jivesoftware.smackx.packet.Bytestream;
-import org.nuiton.util.FileUtil;
import org.nuiton.util.StringUtil;
-import org.nuiton.wikitty.WikittyProxy;
-import org.nuiton.wikitty.WikittyUtil;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.publication.WikittyPublicationProxy;
import org.nuiton.wikitty.publication.entities.WikittyPubData;
@@ -36,7 +25,6 @@
*
*/
private static final long serialVersionUID = -2570662656931216123L;
- protected Object pageObject;
protected String mimeType;
protected HttpServletResponse response;
protected InputStream inputStream;
Modified: 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 2011-05-09 14:05:52 UTC (rev 870)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionView.java 2011-05-09 14:07:29 UTC (rev 871)
@@ -55,10 +55,6 @@
}
- public String getArgument(String key, String defaultValue){
-
-
- return defaultValue;
- }
+
}
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java 2011-05-09 14:05:52 UTC (rev 870)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java 2011-05-09 14:07:29 UTC (rev 871)
@@ -17,6 +17,7 @@
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.Search;
+import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
@@ -26,7 +27,8 @@
* @author mfortun
*
*/
-public class PublicationBaseAction extends ActionSupport implements SessionAware {
+public class PublicationBaseAction extends ActionSupport implements
+ SessionAware {
/**
*
@@ -38,7 +40,7 @@
static final public String ARG_CONTENT_FIELD = "contentField";
static final public String SEARCH_SEPARATOR = ":";
final static protected String CONTEXT_ACTION_KEY = "action";
-
+
static public String SEPARATOR = "/";
static public String CONTEXT_KEY = "context";
static public String ARGS_KEY = "args";
@@ -62,55 +64,44 @@
this.session = sess;
}
-
/**
- * Recherche le type mime dont on a besoin.
- * Par defaut recherche dans les arguments si on a dans l'ordre de preference
- * <li> ARG_MIMETYPE + SEARCH_SEPARATOR + name
- * (ex: mimetype:MyCommand.name:df=text/plain)
- * <li> ARG_MIMETYPE
- * (ex: mimetype=MyCommand.mimetype)
- * <li> si w a l'extension WikittyPubText alors on prend la valeur du champs mimetype
- * <li> si w a l'extension WikittyPubData alors on prend la valeur du champs mimetype
- * <li> on retourne null
- *
+ * Recherche le type mime dont on a besoin. Par defaut recherche dans les
+ * arguments si on a dans l'ordre de preference <li>ARG_MIMETYPE +
+ * SEARCH_SEPARATOR + name (ex: mimetype:MyCommand.name:df=text/plain) <li>
+ * ARG_MIMETYPE (ex: mimetype=MyCommand.mimetype) <li>si w a l'extension
+ * WikittyPubText alors on prend la valeur du champs mimetype <li>si w a
+ * l'extension WikittyPubData alors on prend la valeur du champs mimetype
+ * <li>on retourne null
+ *
* @param context
- * @param name la chaine utilise pour faire la recherche du wikitty
- * @param w le wikitty trouve grace a name
+ * @param name
+ * la chaine utilise pour faire la recherche du wikitty
+ * @param w
+ * le wikitty trouve grace a name
* @return le mimetype ou null
- *
- protected String getMimeType(
- String name, Wikitty w) {
- // looking for mimetype field
- String mimetype = context.getArgument(
- ARG_MIMETYPE + SEARCH_SEPARATOR + name, null);
- if (mimetype == null) {
- mimetype = context.getArgument(ARG_MIMETYPE, null);
- }
- if (mimetype != null) {
- int i = mimetype.indexOf(WikittyUtil.FQ_FIELD_NAME_SEPARATOR);
- if (i > 0) { // perhaps fully qualified field
- String extName = WikittyExtension.extractExtensionName(mimetype);
- String fieldName = WikittyExtension.extractFieldName(mimetype);
- if (w.hasField(extName, fieldName)) {
- // mimetype target field in wikitty
- // replace with field value
- mimetype = w.getFieldAsString(extName, fieldName);
- }
- }
- } else if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) {
- mimetype = WikittyPubTextHelper.getMimeType(w);
- } else if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) {
- mimetype = WikittyPubDataHelper.getMimeType(w);
- }
- return mimetype;
- }
-*/
+ *
+ * protected String getMimeType( String name, Wikitty w) { //
+ * looking for mimetype field String mimetype = context.getArgument(
+ * ARG_MIMETYPE + SEARCH_SEPARATOR + name, null); if (mimetype ==
+ * null) { mimetype = context.getArgument(ARG_MIMETYPE, null); } if
+ * (mimetype != null) { int i =
+ * mimetype.indexOf(WikittyUtil.FQ_FIELD_NAME_SEPARATOR); if (i > 0)
+ * { // perhaps fully qualified field String extName =
+ * WikittyExtension.extractExtensionName(mimetype); String fieldName
+ * = WikittyExtension.extractFieldName(mimetype); if
+ * (w.hasField(extName, fieldName)) { // mimetype target field in
+ * wikitty // replace with field value mimetype =
+ * w.getFieldAsString(extName, fieldName); } } } else if
+ * (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) { mimetype =
+ * WikittyPubTextHelper.getMimeType(w); } else if
+ * (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) { mimetype =
+ * WikittyPubDataHelper.getMimeType(w); } return mimetype; }
+ */
/**
- * Retourne le critere pour recherche l'objet sur lequel faire l'action.
- * Le nom du critere doit etre convenablement positionné avec la chaine
- * qui a permit la recherche
- *
+ * Retourne le critere pour recherche l'objet sur lequel faire l'action. Le
+ * nom du critere doit etre convenablement positionné avec la chaine qui a
+ * permit la recherche
+ *
* @param context
* @return
*/
@@ -123,52 +114,65 @@
if (searchString.contains(SEARCH_SEPARATOR)) {
// on a un field=value
String[] arg = searchString.split(SEARCH_SEPARATOR);
- result = Search.query().eq(arg[0], arg[1]).criteria(searchString);
+ result = Search.query().eq(arg[0], arg[1])
+ .criteria(searchString);
} else {
// on a pas le champs, alors par defaut on recherche dans
// WikittyPubText.name et WikittyPubData.name
- result = Search.query().or()
- .eq(WikittyPubText.FQ_FIELD_WIKITTYPUBTEXT_NAME, searchString)
- .eq(WikittyPubData.FQ_FIELD_WIKITTYPUBDATA_NAME, searchString)
- .criteria(searchString);
+ result = Search
+ .query()
+ .or()
+ .eq(WikittyPubText.FQ_FIELD_WIKITTYPUBTEXT_NAME,
+ searchString)
+ .eq(WikittyPubData.FQ_FIELD_WIKITTYPUBDATA_NAME,
+ searchString).criteria(searchString);
}
}
return result;
}
/**
- * Recherche le champs contenant le content dont on a besoin.
- * Par defaut recherche dans les arguments si on a dans l'ordre de preference
- * <li> ARG_CONTENT_FIELD + SEARCH_SEPARATOR + name
- * (ex: contentField:MyCommand.name:df=MyCommand.script)
- * <li> ARG_CONTENT_FIELD
- * (ex: contentField=MyCommand.script)
- * <li> si w a l'extension WikittyPubText alors on prend le champs content
- * <li> si w a l'extension WikittyPubData alors on prend le champs content
- * <li> on retourne null
- *
+ * Recherche le champs contenant le content dont on a besoin. Par defaut
+ * recherche dans les arguments si on a dans l'ordre de preference <li>
+ * ARG_CONTENT_FIELD + SEARCH_SEPARATOR + name (ex:
+ * contentField:MyCommand.name:df=MyCommand.script) <li>ARG_CONTENT_FIELD
+ * (ex: contentField=MyCommand.script) <li>si w a l'extension WikittyPubText
+ * alors on prend le champs content <li>si w a l'extension WikittyPubData
+ * alors on prend le champs content <li>on retourne null
+ *
* @param context
- * @param name la chaine utilise pour faire la recherche du wikitty
- * @param w le wikitty trouve grace a name
+ * @param name
+ * la chaine utilise pour faire la recherche du wikitty
+ * @param w
+ * le wikitty trouve grace a name
* @return le champs contenant le content ou null
- *
- protected String getContentFieldName(WikittyPublicationContext context,
- String name, Wikitty w) {
- String contentField = context.getArgument(
- ARG_CONTENT_FIELD + SEARCH_SEPARATOR + name, null);
- if (contentField == null) {
- contentField = context.getArgument(ARG_CONTENT_FIELD, null);
+ *
+ * protected String getContentFieldName(WikittyPublicationContext
+ * context, String name, Wikitty w) { String contentField =
+ * context.getArgument( ARG_CONTENT_FIELD + SEARCH_SEPARATOR + name,
+ * null); if (contentField == null) { contentField =
+ * context.getArgument(ARG_CONTENT_FIELD, null); } if (contentField
+ * == null) { if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT))
+ * { contentField = WikittyPubText.FQ_FIELD_WIKITTYPUBTEXT_CONTENT;
+ * } else if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) {
+ * contentField = WikittyPubData.FQ_FIELD_WIKITTYPUBDATA_CONTENT; }
+ * } return contentField; }
+ */
+
+ protected String getError(PublicationContext context) {
+ context.setContentType("text/html");
+ String result = String.format("<h1>bad query %s</h1>");
+ return result;
+ }
+
+ public String getArgument(String key, String defaultValue) {
+ String result = ActionContext.getContext().getParameters().get(key)
+ .toString();
+
+ if (result == null) {
+ result = defaultValue;
}
- if (contentField == null) {
- if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) {
- contentField = WikittyPubText.FQ_FIELD_WIKITTYPUBTEXT_CONTENT;
- } else if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) {
- contentField = WikittyPubData.FQ_FIELD_WIKITTYPUBDATA_CONTENT;
- }
- }
- return contentField;
+ return result;
}
-*/
-
}
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationContext.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationContext.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationContext.java 2011-05-09 14:07:29 UTC (rev 871)
@@ -0,0 +1,67 @@
+package org.nuiton.wikitty.publication.action;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.publication.WikittyPublicationAction;
+
+public interface PublicationContext {
+
+
+ /**
+ * set attributes:
+ * <li> req
+ * <li> wsContext
+ * <li> actionName
+ * <li> mandatoryArguments
+ * <li> arguments
+ *
+ * @param req
+ */
+
+
+ public abstract HttpServletRequest getRequest();
+
+ public abstract HttpServletResponse getResponse();
+
+ public abstract ApplicationConfig getAppConfig();
+
+ /**
+ * le nom de l'action a faire
+ * @return
+ */
+ public abstract String getActionName();
+
+
+ public abstract WikittyProxy getWikittyProxy();
+
+ /**
+ * add context to the url and parameter if necessary
+ * @param url
+ * @return
+ */
+ public abstract String makeUrl(String url);
+
+ public abstract WikittyService getWikittyService();
+
+ public abstract List<String> getMandatoryArguments();
+
+ public abstract Map<String, String> getArguments();
+
+ public abstract Map<String, byte[]> getArgumentFiles();
+
+ public abstract String getArgument(String name, String defaultValue);
+
+ public abstract String getContentType();
+
+ public abstract void setContentType(String contentType);
+
+ public abstract String toString();
+
+}
\ No newline at end of file
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationContext.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-09 14:05:52 UTC (rev 870)
+++ trunk/wikitty-publication/src/main/resources/struts.xml 2011-05-09 14:07:29 UTC (rev 871)
@@ -35,6 +35,17 @@
</result>
</action>
+
+
+ <action name="*/eval/*"
+ class="org.nuiton.wikitty.publication.action.PublicationActionEval">
+ <param name="context">{1}</param>
+ <param name="args">{2}</param>
+ <result type="stream">
+ <param name="contentType">mimeType</param>
+ <param name="inputName">inputStream</param>
+ </result>
+ </action>
</package>
1
0
r870 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 09 May '11
by mfortun@users.nuiton.org 09 May '11
09 May '11
Author: mfortun
Date: 2011-05-09 16:05:52 +0200 (Mon, 09 May 2011)
New Revision: 870
Url: http://nuiton.org/repositories/revision/wikitty/870
Log:
* remove old file/action
Removed:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionRaw.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationServlet.java
Deleted: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionRaw.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionRaw.java 2011-05-09 12:39:54 UTC (rev 869)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionRaw.java 2011-05-09 14:05:52 UTC (rev 870)
@@ -1,123 +0,0 @@
-/*
- * #%L
- * Wikitty :: publication
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2010 CodeLutin, Benjamin Poussin, 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%
- */
-package org.nuiton.wikitty.publication;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.util.ApplicationConfig;
-import org.nuiton.wikitty.WikittyProxy;
-import org.nuiton.wikitty.entities.Wikitty;
-import org.nuiton.wikitty.entities.WikittyExtension;
-import org.nuiton.wikitty.search.Criteria;
-
-/**
- * Action permettant de retourner la valeur d'un champs d'un object.
- * Elle peut-etre utilisee pour retourner une image ou un document stocke dans
- * un champs d'un wikitty
- *
- * Cette action prend deux arguments obligatoires (si pas WikittyPub(Text|Data)
- * <li> l'argument de recherche du wikitty
- * <li> le champs qu'il faut retourner en raw
- *
- * et un argument optionnel
- * <li> le type mime du contenu qui peut-etre un champs de l'objet
- *
- * exemple
- * <pre>
- * ram/WikittyPubData.name=MonImage.jpg
- * ram/WikittyPubText.name=Tuto
- * ram/WikittyPubData.name=MonImage.jpg/WikittyPubData.content?mimetype=WikittyPubData.mimetype
- * ram/WikittyPubData.name=MonImage.jpg/WikittyPubData.mimetype?mimetype=text/plain
- * ram/WikittyPubText.name=Tuto/WikittyPubText.content?mimetype=WikittyPubText.mimetype
- * ram/WikittyUser.login=admin/WikittyUser.password?mimetype=text/plain
- * </pre>
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class ActionRaw extends AbstractActionOnWikitty {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(ActionError.class);
-
- static final protected String exampleUsage =
- "ram/WikittyPubData.name=MonImage.jpg/WikittyPubData.content?mimetype=WikittyPubData.mimetype\n"
- + "ram/Tuto\n"
- + "ram/Tuto/WikittyPubText.content\n"
- + "ram/WikittyPubText.name=Tuto/WikittyPubText.content\n"
- + "ram/WikittyPubText.name=Tuto/WikittyPubText.content?mimetype=WikittyPubText.mimetype\n"
- + "ram/WikittyUser.login=admin/WikittyUser.password?mimetype=text/plain\n";
-
- protected ApplicationConfig appConfig;
-
- public ActionRaw(ApplicationConfig appConfig) {
- this.appConfig = appConfig;
- }
-
- protected String getExampleUsage() {
- return exampleUsage;
- }
-
- @Override
- public Object doAction(WikittyPublicationContext context) {
-
- log.info("args " + context.getMandatoryArguments());
-
- Object result;
- Criteria criteria = searchCriteria(context.getMandatoryArguments());
-
- if (criteria == null) {
- result = getError(context);
- } else {
- WikittyProxy proxy = context.getWikittyProxy();
- Wikitty w = proxy.findByCriteria(criteria);
-
- if (w == null) {
- context.setContentType("text/plain");
- result = String.format(
- "no data found for criteria %s", criteria);
- } else {
- String contentField = getContentFieldName(context, criteria.getName(), w);
-
- if (contentField == null) {
- result = getError(context);
- } else {
- String extName = WikittyExtension.extractExtensionName(contentField);
- String fieldName = WikittyExtension.extractFieldName(contentField);
-
- String mimetype = getMimeType(context, criteria.getName(), w);
- context.setContentType(mimetype);
- result = w.getFieldAsObject(extName, fieldName);
- }
- }
- }
-
- return result;
- }
-
-}
Deleted: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationServlet.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationServlet.java 2011-05-09 12:39:54 UTC (rev 869)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationServlet.java 2011-05-09 14:05:52 UTC (rev 870)
@@ -1,131 +0,0 @@
-/*
- * #%L
- * Wikitty :: publication
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2010 CodeLutin, Benjamin Poussin, 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%
- */
-package org.nuiton.wikitty.publication;
-
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.util.ApplicationConfig;
-import org.nuiton.util.ArgumentsParserException;
-
-/**
- * url:
- * <pre>
- * /[context]/[action]/[action argument]?[action argument]#[fragment]
- * </pre>
- *
- * example:
- * <pre>
- * /codelutin/raw/WikittyPubData.name=lutin.jpg/WikittyPubData.content?mimetype=WikittyPubData.mimetype
- * </pre>
- *
- * <li>la config du WikittyService sera lu dans la config
- * wikitty.publication.config.pattern en remplacant %s par 'default'
- * la valeur de 'wikitty.data.directory' est modifier pour lui ajouter le
- * context par defaut en plus, puis le fichier de config specifique au context est lu
- * qui peut alors ecraser 'wikitty.data.directory' et toutes les autres valeurs
- * par defaut
- * <li>l'action executee sera 'raw' la classe associee sera trouve dans le fichier
- * de config WikittyPublication.
- * <li> le reste sont des arguments specifique a l'action que l'action pourra
- * trouver dans: {@link WikittyPublicationContext#getMandatoryArguments()} et
- * {@link WikittyPublicationContext#getArguments()}.
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class WikittyPublicationServlet extends HttpServlet {
-
- static public ApplicationConfig appConfig;
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(WikittyPublicationServlet.class);
-
- public void init() throws ServletException {
- try {
- appConfig = new ApplicationConfig();
- appConfig.setConfigFileName("wikitty-publication.properties");
- appConfig.parse(null);
- } catch(ArgumentsParserException eee) {
- throw new ServletException("Can't get filename config prefix", eee);
- }
- }
-
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doPost(req, resp);
- }
-
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
-
- Object result;
- WikittyPublicationContext context = new WikittyPublicationContext(appConfig);
- try {
- context.parse(req, resp);
-
- if ("true".equals(context.getArguments().get("debug"))) {
- // debug asked, not do action, but show context
- result = context.toString();
- context.setContentType("text/plain");
- } else {
- WikittyPublicationAction action = context.getAction();
- result = action.doAction(context);
- }
- } catch (Throwable eee) {
- WikittyPublicationAction action = new ActionError(eee);
- result = action.doAction(context);
- }
-
- String contentType = context.getContentType();
- if (contentType != null && contentType.startsWith("forward")) {
- req.getRequestDispatcher(String.valueOf(result)).forward(req, resp);
- } else {
- if (contentType != null) {
- resp.setContentType(contentType);
- }
- if (result instanceof byte[]) {
- ServletOutputStream out = resp.getOutputStream();
- out.write((byte[]) result);
- out.flush();
- } else {
- PrintWriter out = resp.getWriter();
- out.write(String.valueOf(result));
- out.flush();
- }
- }
- }
-
-}
1
0
r869 - trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc
by sletellier@users.nuiton.org 09 May '11
by sletellier@users.nuiton.org 09 May '11
09 May '11
Author: sletellier
Date: 2011-05-09 14:39:54 +0200 (Mon, 09 May 2011)
New Revision: 869
Url: http://nuiton.org/repositories/revision/wikitty/869
Log:
Fix tests : tables columns are in upper case in H2
Modified:
trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java
Modified: trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java
===================================================================
--- trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2011-05-09 10:33:48 UTC (rev 868)
+++ trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2011-05-09 12:39:54 UTC (rev 869)
@@ -363,11 +363,14 @@
}
public static boolean tableExist(Connection connection, String tableName) throws SQLException {
+
+ // In postgres, tablenames are in lower case, in H2, is in upper case, so we test both
DatabaseMetaData metaData = connection.getMetaData();
- ResultSet tables = metaData.getTables(null, null, tableName, null);
+ boolean existInLowerCase = metaData.getTables(null, null, tableName, null).next();
+ boolean existInUpperCase = metaData.getTables(null, null, tableName.toUpperCase(), null).next();
- return tables.next();
+ return existInLowerCase || existInUpperCase;
}
public static String getSupportedBinaryType(Connection connection) throws SQLException {
1
0
r868 - in trunk/wikitty-publication/src/main: java/org/nuiton/wikitty/publication/action resources
by mfortun@users.nuiton.org 09 May '11
by mfortun@users.nuiton.org 09 May '11
09 May '11
Author: mfortun
Date: 2011-05-09 12:33:48 +0200 (Mon, 09 May 2011)
New Revision: 868
Url: http://nuiton.org/repositories/revision/wikitty/868
Log:
* add raw action
Added:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java
Modified:
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
trunk/wikitty-publication/src/main/resources/struts.xml
Added: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java (rev 0)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java 2011-05-09 10:33:48 UTC (rev 868)
@@ -0,0 +1,109 @@
+package org.nuiton.wikitty.publication.action;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts2.interceptor.ServletResponseAware;
+import org.jivesoftware.smackx.packet.Bytestream;
+import org.nuiton.util.FileUtil;
+import org.nuiton.util.StringUtil;
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.publication.WikittyPublicationProxy;
+import org.nuiton.wikitty.publication.entities.WikittyPubData;
+import org.nuiton.wikitty.publication.entities.WikittyPubDataHelper;
+import org.nuiton.wikitty.publication.entities.WikittyPubText;
+import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper;
+import org.nuiton.wikitty.search.Criteria;
+
+import com.opensymphony.xwork2.ActionContext;
+
+public class PublicationActionRaw extends PublicationBaseAction implements
+ ServletResponseAware {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2570662656931216123L;
+ protected Object pageObject;
+ protected String mimeType;
+ protected HttpServletResponse response;
+ protected InputStream inputStream;
+
+ static public PublicationActionRaw getAction() {
+ return (PublicationActionRaw) ActionContext.getContext().get(
+ CONTEXT_ACTION_KEY);
+ }
+
+ @Override
+ public String execute() throws Exception {
+ constructResult();
+ return SUCCESS;
+ }
+
+ public void constructResult() {
+
+ List<String> argsString = new ArrayList<String>();
+ String args = ActionContext.getContext().getParameters().get(ARGS_KEY)
+ .toString();
+ String[] argsTab = StringUtil.split(args, SEPARATOR);
+
+ for (String arg : argsTab) {
+ argsString.add(arg);
+ }
+
+ Criteria criteria = searchCriteria(argsString);
+
+ WikittyPublicationProxy proxy = getWikittyPublicationProxy();
+
+ Wikitty w = proxy.findByCriteria(criteria);
+
+ try {
+
+ if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) {
+ mimeType = WikittyPubDataHelper.getMimeType(w);
+ inputStream = new ByteArrayInputStream(
+ WikittyPubDataHelper.getContent(w));
+
+ } else if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) {
+ mimeType = WikittyPubTextHelper.getMimeType(w);
+ inputStream = new ByteArrayInputStream(WikittyPubTextHelper
+ .getContent(w).getBytes());
+ }
+
+ } catch (Exception e) {
+ // TODO mfortun-2011-05-09 really handle exception
+ e.printStackTrace();
+ }
+
+ }
+
+ public String getMimeType() {
+ return mimeType;
+ }
+
+ public void setMimeType(String mimeType) {
+ this.mimeType = mimeType;
+ }
+
+ @Override
+ public void setServletResponse(HttpServletResponse arg0) {
+ this.response = arg0;
+ }
+
+ public InputStream getInputStream() {
+ return inputStream;
+ }
+
+}
Property changes on: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionRaw.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: 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 2011-05-06 16:37:24 UTC (rev 867)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationActionView.java 2011-05-09 10:33:48 UTC (rev 868)
@@ -24,8 +24,6 @@
@Override
public String execute() throws Exception {
- System.out.println("ponay");
-
System.out.println(ActionContext.getContext().getParameters());
SearchForAllWikitty();
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java 2011-05-06 16:37:24 UTC (rev 867)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/action/PublicationBaseAction.java 2011-05-09 10:33:48 UTC (rev 868)
@@ -1,10 +1,21 @@
package org.nuiton.wikitty.publication.action;
+import java.util.List;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.entities.WikittyExtension;
+
import org.nuiton.wikitty.publication.WikittyPublicationProxy;
import org.nuiton.wikitty.publication.WikittyPublicationSession;
+import org.nuiton.wikitty.publication.entities.WikittyPubData;
+import org.nuiton.wikitty.publication.entities.WikittyPubDataHelper;
+import org.nuiton.wikitty.publication.entities.WikittyPubText;
+import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper;
+import org.nuiton.wikitty.search.Criteria;
+import org.nuiton.wikitty.search.Search;
import com.opensymphony.xwork2.ActionSupport;
@@ -22,7 +33,15 @@
*/
private static final long serialVersionUID = 1865905051843413141L;
+ static final public int ARG_QUERY = 0;
+ static final public String ARG_MIMETYPE = "mimetype";
+ static final public String ARG_CONTENT_FIELD = "contentField";
+ static final public String SEARCH_SEPARATOR = ":";
final static protected String CONTEXT_ACTION_KEY = "action";
+
+ static public String SEPARATOR = "/";
+ static public String CONTEXT_KEY = "context";
+ static public String ARGS_KEY = "args";
protected Map<String, Object> session;
@@ -43,4 +62,113 @@
this.session = sess;
}
+
+ /**
+ * Recherche le type mime dont on a besoin.
+ * Par defaut recherche dans les arguments si on a dans l'ordre de preference
+ * <li> ARG_MIMETYPE + SEARCH_SEPARATOR + name
+ * (ex: mimetype:MyCommand.name:df=text/plain)
+ * <li> ARG_MIMETYPE
+ * (ex: mimetype=MyCommand.mimetype)
+ * <li> si w a l'extension WikittyPubText alors on prend la valeur du champs mimetype
+ * <li> si w a l'extension WikittyPubData alors on prend la valeur du champs mimetype
+ * <li> on retourne null
+ *
+ * @param context
+ * @param name la chaine utilise pour faire la recherche du wikitty
+ * @param w le wikitty trouve grace a name
+ * @return le mimetype ou null
+ *
+ protected String getMimeType(
+ String name, Wikitty w) {
+ // looking for mimetype field
+ String mimetype = context.getArgument(
+ ARG_MIMETYPE + SEARCH_SEPARATOR + name, null);
+ if (mimetype == null) {
+ mimetype = context.getArgument(ARG_MIMETYPE, null);
+ }
+ if (mimetype != null) {
+ int i = mimetype.indexOf(WikittyUtil.FQ_FIELD_NAME_SEPARATOR);
+ if (i > 0) { // perhaps fully qualified field
+ String extName = WikittyExtension.extractExtensionName(mimetype);
+ String fieldName = WikittyExtension.extractFieldName(mimetype);
+ if (w.hasField(extName, fieldName)) {
+ // mimetype target field in wikitty
+ // replace with field value
+ mimetype = w.getFieldAsString(extName, fieldName);
+ }
+ }
+ } else if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) {
+ mimetype = WikittyPubTextHelper.getMimeType(w);
+ } else if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) {
+ mimetype = WikittyPubDataHelper.getMimeType(w);
+ }
+ return mimetype;
+ }
+*/
+ /**
+ * Retourne le critere pour recherche l'objet sur lequel faire l'action.
+ * Le nom du critere doit etre convenablement positionné avec la chaine
+ * qui a permit la recherche
+ *
+ * @param context
+ * @return
+ */
+ protected Criteria searchCriteria(List<String> subContext) {
+ Criteria result;
+ if (subContext.size() <= 0) {
+ result = null;
+ } else {
+ String searchString = subContext.get(ARG_QUERY);
+ if (searchString.contains(SEARCH_SEPARATOR)) {
+ // on a un field=value
+ String[] arg = searchString.split(SEARCH_SEPARATOR);
+ result = Search.query().eq(arg[0], arg[1]).criteria(searchString);
+ } else {
+ // on a pas le champs, alors par defaut on recherche dans
+ // WikittyPubText.name et WikittyPubData.name
+ result = Search.query().or()
+ .eq(WikittyPubText.FQ_FIELD_WIKITTYPUBTEXT_NAME, searchString)
+ .eq(WikittyPubData.FQ_FIELD_WIKITTYPUBDATA_NAME, searchString)
+ .criteria(searchString);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Recherche le champs contenant le content dont on a besoin.
+ * Par defaut recherche dans les arguments si on a dans l'ordre de preference
+ * <li> ARG_CONTENT_FIELD + SEARCH_SEPARATOR + name
+ * (ex: contentField:MyCommand.name:df=MyCommand.script)
+ * <li> ARG_CONTENT_FIELD
+ * (ex: contentField=MyCommand.script)
+ * <li> si w a l'extension WikittyPubText alors on prend le champs content
+ * <li> si w a l'extension WikittyPubData alors on prend le champs content
+ * <li> on retourne null
+ *
+ * @param context
+ * @param name la chaine utilise pour faire la recherche du wikitty
+ * @param w le wikitty trouve grace a name
+ * @return le champs contenant le content ou null
+ *
+ protected String getContentFieldName(WikittyPublicationContext context,
+ String name, Wikitty w) {
+ String contentField = context.getArgument(
+ ARG_CONTENT_FIELD + SEARCH_SEPARATOR + name, null);
+ if (contentField == null) {
+ contentField = context.getArgument(ARG_CONTENT_FIELD, null);
+ }
+ if (contentField == null) {
+ if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)) {
+ contentField = WikittyPubText.FQ_FIELD_WIKITTYPUBTEXT_CONTENT;
+ } else if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) {
+ contentField = WikittyPubData.FQ_FIELD_WIKITTYPUBDATA_CONTENT;
+ }
+ }
+ return contentField;
+ }
+*/
+
+
}
Modified: trunk/wikitty-publication/src/main/resources/struts.xml
===================================================================
--- trunk/wikitty-publication/src/main/resources/struts.xml 2011-05-06 16:37:24 UTC (rev 867)
+++ trunk/wikitty-publication/src/main/resources/struts.xml 2011-05-09 10:33:48 UTC (rev 868)
@@ -17,38 +17,37 @@
<result>/WEB-INF/jsp/edit.jsp</result>
</action>
- <action name="*/view/*" class="org.nuiton.wikitty.publication.action.PublicationActionView">
+ <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>
+ <action name="*/raw/*"
+ class="org.nuiton.wikitty.publication.action.PublicationActionRaw">
+ <param name="context">{1}</param>
+ <param name="args">{2}</param>
+ <result type="stream">
+ <param name="contentType">mimeType</param>
+ <param name="inputName">inputStream</param>
+ </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>
--->
+ <!-- <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>
1
0
r867 - in trunk/wikitty-jdbc/src/main: java/org/nuiton/wikitty/jdbc resources
by sletellier@users.nuiton.org 06 May '11
by sletellier@users.nuiton.org 06 May '11
06 May '11
Author: sletellier
Date: 2011-05-06 18:37:24 +0200 (Fri, 06 May 2011)
New Revision: 867
Url: http://nuiton.org/repositories/revision/wikitty/867
Log:
#1510 Automatique binary type support by bd on table creation
Removed:
trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query-mysql.properties
Modified:
trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java
trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java
trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java
trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query.properties
Modified: trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java
===================================================================
--- trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2011-05-06 15:59:36 UTC (rev 866)
+++ trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2011-05-06 16:37:24 UTC (rev 867)
@@ -33,9 +33,7 @@
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CLEAR_EXTENSION;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_DELETE_EXTENSION_ADMIN;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_DELETE_EXTENSION_DATA;
-import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_EXTENSION_ADMIN_TEST;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_EXTENSION_ADMIN;
-import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_EXTENSION_DATA_TEST;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_EXTENSION_DATA;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_INSERT_EXTENSION_ADMIN;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_INSERT_EXTENSION_DATA;
@@ -119,32 +117,25 @@
}
protected void createDatabase(WikittyTransaction tx) {
- Connection connectionTest = WikittyJDBCUtil.getConnection(tx, config);
+ Connection connection = WikittyJDBCUtil.getConnection(tx, config);
try {
- // If test of existance work, no exception and do nothing
- // if exception try to create databse
- Statement statementTest = connectionTest.createStatement();
- statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_ADMIN_TEST));
- statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_DATA_TEST));
- } catch(Exception silentError) {
- if (log.isInfoEnabled()) {
- log.info("try to create extension database");
- }
- Connection connection = WikittyJDBCUtil.getConnection(tx, config);
- try {
- Statement statement = connection.createStatement();
+ Statement statement = connection.createStatement();
+ if (!WikittyJDBCUtil.tableExist(connection, TABLE_EXTENSION_ADMIN)) {
+ if (log.isInfoEnabled()) {
+ log.info("try to create extension database");
+ }
statement.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_ADMIN));
- statement.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_DATA));
- } catch (Exception eee) {
- throw new WikittyException("Can't create table for extension storage", eee);
- } finally {
- WikittyJDBCUtil.closeQuietly(connection);
}
+ if (!WikittyJDBCUtil.tableExist(connection, TABLE_EXTENSION_DATA)) {
+ statement.execute(jdbcQuery.getProperty(QUERY_CREATION_EXTENSION_DATA));
+ }
+ } catch (Exception eee) {
+ throw new WikittyException("Can't create table for extension storage", eee);
} finally {
- WikittyJDBCUtil.closeQuietly(connectionTest);
+ WikittyJDBCUtil.closeQuietly(connection);
}
}
-
+
@Override
public WikittyEvent store(WikittyTransaction tx,
Collection<WikittyExtension> extensions)
Modified: trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java
===================================================================
--- trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2011-05-06 15:59:36 UTC (rev 866)
+++ trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyJDBCUtil.java 2011-05-06 16:37:24 UTC (rev 867)
@@ -29,10 +29,14 @@
import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;
+import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -47,6 +51,7 @@
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -68,6 +73,10 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyJDBCUtil.class);
+ /** TODO sletellier 20110506 : reference all binary types existing */
+ /** reference all binary type known for bd, wikitty will search if type is supported for using it */
+ static final public String[] BINARY_TYPES = new String[]{"bytea", "blob"};
+
/** extension list column in the wikitty_admin table */
static final public String COL_EXTENSION = "extension_list";
/** version column in the admin tables */
@@ -113,8 +122,6 @@
static final public String QUERY_SELECT_WHERE_NOTDELETED = "jdbc.queries.select.where.notdeleted";
/** wikitty_admin table creation query property name */
- static final public String QUERY_CREATION_WIKITTY_ADMIN_TEST =
- "jdbc.queries.creation.wikitty.admin.test";
static final public String QUERY_CREATION_WIKITTY_ADMIN =
"jdbc.queries.creation.wikitty.admin";
/** wikitty_data column binary test exits query property name */
@@ -123,12 +130,11 @@
/** wikitty_data column binary creation with alter query property name */
static final public String QUERY_CREATION_WIKITTY_DATA_ALTER_BINARY =
"jdbc.queries.creation.wikitty.data.alter.binary";
- /** wikitty_data table test exists query property name */
- static final public String QUERY_CREATION_WIKITTY_DATA_TEST =
- "jdbc.queries.creation.wikitty.data.test";
/** wikitty_data table creation query property name */
static final public String QUERY_CREATION_WIKITTY_DATA =
"jdbc.queries.creation.wikitty.data";
+ static final public String QUERY_CREATION_WIKITTY_DATA_NO_BINARY =
+ "jdbc.queries.creation.wikitty.data.no.binary";
/** insertion in the admin table query property name */
static final public String QUERY_INSERT_WIKITTY_ADMIN = "jdbc.queries.insert.wikitty.admin";
/** update in the admin table query property name */
@@ -151,13 +157,9 @@
static final public String QUERY_DELETE_EXTENSION_DATA = "jdbc.queries.delete.extension.data";
/** extension_admin table creation query property name */
- static final public String QUERY_CREATION_EXTENSION_ADMIN_TEST =
- "jdbc.queries.creation.extension.admin.test";
static final public String QUERY_CREATION_EXTENSION_ADMIN =
"jdbc.queries.creation.extension.admin";
/** extension_data table creation query property name */
- static final public String QUERY_CREATION_EXTENSION_DATA_TEST =
- "jdbc.queries.creation.extension.data.test";
static final public String QUERY_CREATION_EXTENSION_DATA =
"jdbc.queries.creation.extension.data";
/** insertion in the admin table query property name */
@@ -360,6 +362,26 @@
}
}
+ public static boolean tableExist(Connection connection, String tableName) throws SQLException {
+ DatabaseMetaData metaData = connection.getMetaData();
+
+ ResultSet tables = metaData.getTables(null, null, tableName, null);
+
+ return tables.next();
+ }
+
+ public static String getSupportedBinaryType(Connection connection) throws SQLException {
+
+ ResultSet typeInfo = connection.getMetaData().getTypeInfo();
+ while (typeInfo.next()) {
+ String type = typeInfo.getString("TYPE_NAME");
+ if (ArrayUtils.contains(BINARY_TYPES, type)) {
+ return type;
+ }
+ }
+ return null;
+ }
+
// REMOVED because, we must used WikittyTransaction with jta management
// /**
// * Closes a connection (i.e. transaction) and commit data.
@@ -401,7 +423,7 @@
/**
* Execute query.
- *
+ *
* @param connection connection to use
* @param query sql query to do
* @param args arguments for the query
@@ -419,5 +441,4 @@
}
sta.execute();
}
-
}
Modified: trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java
===================================================================
--- trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2011-05-06 15:59:36 UTC (rev 866)
+++ trunk/wikitty-jdbc/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2011-05-06 16:37:24 UTC (rev 867)
@@ -38,11 +38,10 @@
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.COL_VERSION;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CLEAR_WIKITTY;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_ADMIN;
-import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_ADMIN_TEST;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_DATA_ALTER_BINARY;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_DATA_TEST_BINARY;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_DATA;
-import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_DATA_TEST;
+import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_CREATION_WIKITTY_DATA_NO_BINARY;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_DELETE_WIKITTY_ADMIN;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_DELETE_WIKITTY_DATA;
import static org.nuiton.wikitty.jdbc.WikittyJDBCUtil.QUERY_INSERT_WIKITTY_ADMIN;
@@ -62,6 +61,7 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -129,13 +129,10 @@
checkTableOrCreation(tx);
- // all time use alter after creation for binaryValue column because
- // this datatype is not portable
- checkColumnBinaryOrAlter(tx);
-
if (txBeginHere) {
tx.commit();
}
+
} catch (WikittyException eee) {
if (tx != null && tx.isStarted()) {
tx.rollback();
@@ -148,61 +145,34 @@
* test table existance or create them if necessary
*/
protected void checkTableOrCreation(WikittyTransaction tx) {
- Connection connectionTest = WikittyJDBCUtil.getConnection(tx, config);
+ Connection connection = WikittyJDBCUtil.getConnection(tx, config);
try {
- // If test of existance work, no exception and do nothing
- // if exception try to create databse
- Statement statementTest = connectionTest.createStatement();
- statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_ADMIN_TEST));
- statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA_TEST));
- } catch (Exception silentError) {
- if (log.isInfoEnabled()) {
- log.info("try to create wikitty database");
- }
- Connection connection = WikittyJDBCUtil.getConnection(tx, config);
- try {
- Statement statement = connection.createStatement();
+ Statement statement = connection.createStatement();
+ if (!WikittyJDBCUtil.tableExist(connection, WikittyJDBCUtil.TABLE_WIKITTY_ADMIN)) {
+ if (log.isInfoEnabled()) {
+ log.info("try to create wikitty database");
+ }
statement.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_ADMIN));
- statement.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA));
- } catch (Exception eee) {
- throw new WikittyException("Can't create table for wikitty storage", eee);
- } finally {
- WikittyJDBCUtil.closeQuietly(connection);
}
- } finally {
- WikittyJDBCUtil.closeQuietly(connectionTest);
- }
- }
+ if (!WikittyJDBCUtil.tableExist(connection, WikittyJDBCUtil.TABLE_WIKITTY_DATA)) {
- /**
- * Add binary column if necessary
- * If add can be done, wikitty work for all, except binary type
- */
- protected void checkColumnBinaryOrAlter(WikittyTransaction tx) {
- Connection connectionTest = WikittyJDBCUtil.getConnection(tx, config);
- try {
- // If test of existance work, no exception and do nothing
- // if exception try to create binary column
- Statement statementTest = connectionTest.createStatement();
- statementTest.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA_TEST_BINARY));
- } catch (Exception silentError) {
- if (log.isInfoEnabled()) {
- log.info("try to alter wikitty database to add binary column");
+ // Check if database support blob
+ String supportedBinaryType = WikittyJDBCUtil.getSupportedBinaryType(connection);
+ if (supportedBinaryType == null) {
+ log.fatal("Can add column to store binary field. You can't use binary");
+ statement.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA_NO_BINARY));
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Creating wikitty data with '" + supportedBinaryType + "' type for binary");
+ }
+ String request = String.format(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA), supportedBinaryType);
+ statement.execute(request);
+ }
}
- Connection connection = WikittyJDBCUtil.getConnection(tx, config);
- try {
- Statement statement = connection.createStatement();
- statement.execute(jdbcQuery.getProperty(QUERY_CREATION_WIKITTY_DATA_ALTER_BINARY));
- } catch (Exception eee) {
- // no exception just log fatal, wikitty can work without this
- // column but can't store binary. If binary is not used there is
- // no probleme
- log.fatal("Can add column to store binary field. You can't use binary", eee);
- } finally {
- WikittyJDBCUtil.closeQuietly(connection);
- }
+ } catch (Exception eee) {
+ throw new WikittyException("Can't create table for wikitty storage", eee);
} finally {
- WikittyJDBCUtil.closeQuietly(connectionTest);
+ WikittyJDBCUtil.closeQuietly(connection);
}
}
Deleted: trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query-mysql.properties
===================================================================
--- trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query-mysql.properties 2011-05-06 15:59:36 UTC (rev 866)
+++ trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query-mysql.properties 2011-05-06 16:37:24 UTC (rev 867)
@@ -1,31 +0,0 @@
-###
-# #%L
-# Wikitty :: wikitty-jdbc-impl
-#
-# $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%
-###
-#
-# ce fichier surcharge la requete d'ajout de la column binaryValue pour mysql
-# il doit etre charge apres le fichier par defaut dans la sequence de fichier
-#
-
-#table wikitty_data creation query
-jdbc.queries.creation.wikitty.data.alter.binary=ALTER TABLE wikitty_data ADD COLUMN binaryValue blob;
Modified: trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query.properties
===================================================================
--- trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query.properties 2011-05-06 15:59:36 UTC (rev 866)
+++ trunk/wikitty-jdbc/src/main/resources/wikitty-jdbc-query.properties 2011-05-06 16:37:24 UTC (rev 867)
@@ -31,7 +31,6 @@
#
#table extension_admin creation query
-jdbc.queries.creation.extension.admin.test=SELECT * FROM extension_admin LIMIT 1;
jdbc.queries.creation.extension.admin=CREATE TABLE extension_admin (\
id text NOT NULL,\
name text NOT NULL,\
@@ -41,7 +40,6 @@
PRIMARY KEY (id));
#table extension_data creation query
-jdbc.queries.creation.extension.data.test=SELECT * FROM extension_data LIMIT 1;
jdbc.queries.creation.extension.data=CREATE TABLE extension_data (\
id text NOT NULL,\
fieldName text NOT NULL,\
@@ -50,7 +48,6 @@
FOREIGN KEY (id) REFERENCES extension_admin (id));
#table wikitty_admin creation query
-jdbc.queries.creation.wikitty.admin.test=SELECT * FROM wikitty_admin LIMIT 1;
jdbc.queries.creation.wikitty.admin=CREATE TABLE wikitty_admin (\
id varchar(64) NOT NULL,\
version varchar(8) NOT NULL,\
@@ -60,9 +57,6 @@
#table wikitty_data creation query
# all time use alter after creation for binaryValue column because this datatype is not portable
-jdbc.queries.creation.wikitty.data.test.binary=SELECT binaryValue FROM wikitty_data LIMIT 1;
-jdbc.queries.creation.wikitty.data.alter.binary=ALTER TABLE wikitty_data ADD COLUMN binaryValue bytea;
-jdbc.queries.creation.wikitty.data.test=SELECT * FROM wikitty_data LIMIT 1;
jdbc.queries.creation.wikitty.data=CREATE TABLE wikitty_data (\
id varchar(64) NOT NULL,\
fieldName text NOT NULL,\
@@ -70,9 +64,20 @@
dateValue timestamp,\
textValue text,\
booleanValue boolean,\
+binaryValue %s,\
PRIMARY KEY (id,fieldName),\
FOREIGN KEY (id) REFERENCES wikitty_admin (id));
+jdbc.queries.creation.wikitty.data.no.binary=CREATE TABLE wikitty_data (\
+id varchar(64) NOT NULL,\
+fieldName text NOT NULL,\
+numberValue numeric,\
+dateValue timestamp,\
+textValue text,\
+booleanValue boolean,\
+PRIMARY KEY (id,fieldName),\
+FOREIGN KEY (id) REFERENCES wikitty_admin (id));
+
#basic selection query without where clause
jdbc.queries.select=SELECT %s FROM %s;
#not deleted data selection query without where clause
1
0
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