Author: bpoussin Date: 2011-05-24 02:15:14 +0200 (Tue, 24 May 2011) New Revision: 43 Url: http://chorem.org/repositories/revision/vradi/43 Log: - add edit action to directly modify some wikitty field (not work currently) - add wikitty-json respond in struts.xml to return wikitty objet in json format - begin to add ajax tabbed to view/edit rst text Added: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java Modified: trunk/pom.xml trunk/vradi-web/pom.xml trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormNoteAction.java trunk/vradi-web/src/main/resources/struts.xml trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNoteList.jsp Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-05-23 07:51:55 UTC (rev 42) +++ trunk/pom.xml 2011-05-24 00:15:14 UTC (rev 43) @@ -421,6 +421,18 @@ </dependency> <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-dojo-plugin</artifactId> + <version>${struts2Version}</version> + </dependency> + + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-json-plugin</artifactId> + <version>${struts2Version}</version> + </dependency> + + <dependency> <groupId>org.apache.struts.xwork</groupId> <artifactId>xwork-core</artifactId> <version>${struts2Version}</version> Modified: trunk/vradi-web/pom.xml =================================================================== --- trunk/vradi-web/pom.xml 2011-05-23 07:51:55 UTC (rev 42) +++ trunk/vradi-web/pom.xml 2011-05-24 00:15:14 UTC (rev 43) @@ -60,6 +60,11 @@ </dependency> <dependency> + <groupId>org.nuiton.jrst</groupId> + <artifactId>jrst</artifactId> + </dependency> + + <dependency> <groupId>org.nuiton.i18n</groupId> <artifactId>nuiton-i18n</artifactId> </dependency> @@ -75,6 +80,24 @@ </dependency> <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-config-browser-plugin</artifactId> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-dojo-plugin</artifactId> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-json-plugin</artifactId> + <scope>runtime</scope> + </dependency> + + <dependency> <groupId>org.apache.struts.xwork</groupId> <artifactId>xwork-core</artifactId> </dependency> @@ -148,11 +171,6 @@ </dependency> <dependency> - <groupId>org.nuiton.jrst</groupId> - <artifactId>jrst</artifactId> - </dependency> - - <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <scope>runtime</scope> @@ -171,12 +189,6 @@ </dependency> <dependency> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-config-browser-plugin</artifactId> - <scope>runtime</scope> - </dependency> - - <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <scope>compile</scope> Added: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java (rev 0) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java 2011-05-24 00:15:14 UTC (rev 43) @@ -0,0 +1,71 @@ +package org.chorem.vradi.actions; + +import com.opensymphony.xwork2.ActionContext; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.interceptor.RequestAware; +import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.entities.Wikitty; + +/** + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class EditAction extends VradiBaseAction implements RequestAware { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(EditAction.class); + + static public EditAction getAction() { + return (EditAction)ActionContext.getContext().get(CONTEXT_ACTION_KEY); + } + + protected Map<String,Object> request; + protected String id; + protected Wikitty wikitty; + + public void setRequest(Map<String,Object> request) { + this.request = request; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Wikitty getWikitty() { + return wikitty; + } + + @Override + public String execute() throws Exception { + String result = SUCCESS; + WikittyProxy proxy = getProxy(); + wikitty = proxy.restore(getId()); + if (wikitty != null) { + try { + for (String k : request.keySet()) { + if (wikitty.hasField(k)) { + Object v = request.get(k); + log.debug(String.format("Put value(%s) in field(%s)", v, k)); + wikitty.setFqField(k, v); + } + } + wikitty = proxy.store(wikitty); + } catch(Exception eee) { + log.error("Can't edit wikitty", eee); + result = ERROR; + } + } + return result; + } + +} Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormNoteAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormNoteAction.java 2011-05-23 07:51:55 UTC (rev 42) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormNoteAction.java 2011-05-24 00:15:14 UTC (rev 43) @@ -1,7 +1,9 @@ package org.chorem.vradi.actions; import com.opensymphony.xwork2.ActionContext; +import java.util.Date; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.vradi.entities.Attachment; @@ -74,10 +76,18 @@ return summary; } + public void setSummary(String summary) { + this.summary = summary; + } + public String getContent() { return content; } + public void setContent(String content) { + this.content = content; + } + public PagedResult<Attachment> getAttachments() { return attachments; } @@ -88,18 +98,34 @@ formNote = proxy.restore(FormNote.class, getFormNoteId()); if (formNote == null) { formNote = new FormNoteImpl(); + formNote.setCreationDate(new Date()); formNote.setForm(getFormId()); formNote.addPartners(proxy.getUser().getWikittyId()); + formNote.setSummary(StringUtils.trimToEmpty(summary)); + formNote.setContent(StringUtils.trimToEmpty(content)); + formNote.setSeekingPartner(false); + formNote.setState("Open"); + formNote.addHistory(String.format("%tF creation", + formNote.getCreationDate())); + proxy.store(formNote); } partners = proxy.restore(VradiUser.class, formNote.getPartners()); // TODO evolution JRST: permettre l'entre String/StringBuffer/Reader, et la sortie String/StringBuffer/Writer pour generate - summary = JRST.generate(JRST.TYPE_HTML, formNote.getSummary()); - content = JRST.generate(JRST.TYPE_HTML, formNote.getContent()); - summary = formNote.getSummary(); - content = formNote.getContent(); - + try { + summary = JRST.generate(JRST.TYPE_HTML, formNote.getSummary()); + } catch(Exception eee) { + log.info("Can't generate HTML from RST", eee); + summary = formNote.getSummary(); + } + try { + content = JRST.generate(JRST.TYPE_HTML, formNote.getContent()); + } catch(Exception eee) { + log.info("Can't generate HTML from RST", eee); + content = formNote.getContent(); + } + Criteria criteria = Search.query() .eq(Attachment.FQ_FIELD_ATTACHMENT_FORMNOTE, getFormNoteId()) .criteria().addSortDescending(Attachment.FQ_FIELD_ATTACHMENT_DATE); Modified: trunk/vradi-web/src/main/resources/struts.xml =================================================================== --- trunk/vradi-web/src/main/resources/struts.xml 2011-05-23 07:51:55 UTC (rev 42) +++ trunk/vradi-web/src/main/resources/struts.xml 2011-05-24 00:15:14 UTC (rev 43) @@ -13,9 +13,20 @@ | - surcharge de parametre de certain intercepteur +--> <package name="publicArea" extends="struts-default"> + <result-types> + <result-type name="json" class="org.apache.struts2.json.JSONResult"/> + <result-type name="wikitty-json" class="org.apache.struts2.json.JSONResult"> + <param name="includeProperties">id,extensionNames\[\d+\],fieldValue\..*\..*</param> + <param name="root">wikitty</param> + </result-type> + </result-types> <interceptors> + <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/> <interceptor-stack name="publicAreaStack"> <interceptor-ref name="defaultStack"/> + <interceptor-ref name="json"> + <param name="enableSMD">true</param> + </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="publicAreaStack"/> @@ -43,7 +54,7 @@ <package name="restrictedArea" extends="publicArea"> <interceptors> <interceptor name="login" class="org.chorem.vradi.interceptors.LoginInterceptor"> - <param name="loginRedirect">login.action</param> + <param name="loginRedirect">/login.action</param> </interceptor> <interceptor-stack name="restrictedAreaStack"> <interceptor-ref name="login"/> @@ -92,6 +103,14 @@ <param name="formNoteId">{1}</param> <result>/WEB-INF/jsp/formNote.jsp</result> </action> + <!-- + | Edit n'importe qu'elle objet en modifiant les valeurs des champs retrouve + | en parametre + +--> + <action name="edit/*" class="org.chorem.vradi.actions.EditAction"> + <param name="id">{1}</param> + <result type="wikitty-json"/> + </action> </package> </struts> Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp 2011-05-23 07:51:55 UTC (rev 42) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp 2011-05-24 00:15:14 UTC (rev 43) @@ -4,15 +4,22 @@ Author : poussin --%> +<%@page import="com.opensymphony.xwork2.ActionContext"%> <%@page import="org.chorem.vradi.entities.Attachment"%> <%@page import="org.chorem.vradi.entities.FormNote"%> <%@page import="org.chorem.vradi.actions.FormNoteAction"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> +<%@taglib prefix="sx" uri="/struts-dojo-tags"%> <% FormNoteAction action = FormNoteAction.getAction(); -FormNote note = action.getFormNote(); +FormNote formNote = action.getFormNote(); + +ActionContext.getContext().put("localNoteId", formNote.getWikittyId()); +ActionContext.getContext().put("localFieldSummary", FormNote.FQ_FIELD_FORMNOTE_SUMMARY); +ActionContext.getContext().put("localFieldContent", FormNote.FQ_FIELD_FORMNOTE_CONTENT); +ActionContext.getContext().put("localNote", formNote); %> <!DOCTYPE html> @@ -20,35 +27,56 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="vradi.formNote.title" /></title> + <sx:head /> </head> <body> <h1><s:text name="vradi.formNote.title" /></h1> <div> - <s:a action="formNoteEdit/<%=note.getWikittyId()%>?state=close"><s:text name="vradi.formNote.close" /></s:a> - <s:a action="delete/<%=note.getWikittyId()%>"><s:text name="vradi.delete" /></s:a> + <s:a action="formNoteEdit/%{localNoteId}?state=close"><s:text name="vradi.formNote.close" /></s:a> + <s:a action="delete/%{localNoteId}"><s:text name="vradi.delete" /></s:a> </div> <div> - <% for (String h : note.getHistory()) { %> + <% for (String h : formNote.getHistory()) { %> <div><%=h%></div> <% } %> </div> <div> - <s:select list="partners"/> - <s:a action="seekPartners/<%=note.getWikittyId()%>"><s:text name="vradi.formNote.seekPartners" /></s:a> - <s:checkbox label="seeking partners" fieldValue="note.seekingPartners"/> + <s:select size="5" list="partners" listKey="wikittyId" listValue="login"/> + <s:a action="seekPartners/%{localNoteId}"><s:text name="vradi.formNote.seekPartners" /></s:a> + <s:checkbox label="seeking partners" name="formNote.seekingPartners" + onchange="var xhr=new XMLHttpRequest(); xhr.open('GET', 'edit/%{localNoteId}.action?seekingPartners='+this.checked, true);xhr.send(null);"/> </div> <div> - <%=action.getSummary()%> - <div><s:a action="editText?id=<%=note.getWikittyId()%>&field=<%=FormNote.FQ_FIELD_FORMNOTE_SUMMARY%>" label="vradi.text.edit"/></div> + <sx:tabbedpanel id="tabContainer"> + <sx:div label="Summary" > + <iframe> + <%=action.getSummary()%> + </iframe> + </sx:div> + <sx:div label="Edit" > + <s:textarea><%=formNote.getSummary()%></s:textarea> + </sx:div> + </sx:tabbedpanel> + <div> + <s:a action="editText?id=%{localNoteId}&field=%{localFieldSummary}"> + <s:text name="vradi.text.edit"/> + </s:a> + </div> </div> <div> - <%=action.getContent()%> - <div><s:a action="editText?id=<%=note.getWikittyId()%>&field=<%=FormNote.FQ_FIELD_FORMNOTE_CONTENT%>" label="vradi.text.edit"/></div> + <iframe> + <%=action.getContent()%> + </iframe> + <div> + <s:a action="editText?id=%{localNoteId}&field=%{localFieldContent}"> + <s:text name="vradi.text.edit"/> + </s:a> + </div> </div> <div> Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNoteList.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNoteList.jsp 2011-05-23 07:51:55 UTC (rev 42) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNoteList.jsp 2011-05-24 00:15:14 UTC (rev 43) @@ -24,9 +24,9 @@ <ul> <% for (FormNote note : action.getFormNotes()) { %> - <li><s:a action="formNote/<%=note.getWikittyId()%>"><%=note.getCreationDate()%> <%=note.getSummary()%></s:a></li> + <li><s:a action="formNote/%{note.getWikittyId()}"><%=note.getCreationDate()%> <%=note.getSummary()%></s:a></li> <% } %> - <li><s:a action="formNote/new?formId=<%=action.getFormId()%>"><s:text name="vradi.new.formNote"/></s:a></li> + <li><s:a action="formNote/new?formId=%{formId}"><s:text name="vradi.new.formNote"/></s:a></li> </ul> </body> </html>