r868 - in trunk/wikitty-publication/src/main: java/org/nuiton/wikitty/publication/action resources
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>
participants (1)
-
mfortun@users.nuiton.org