r942 - xwiki/trunk/src/main/java/com/xpn/xwiki/web
Phung Hai Nam
namphunghai at users.forge.objectweb.org
Mon Feb 27 10:00:27 CET 2006
Author: namphunghai
Date: 2006-02-27 10:00:26 +0100 (Mon, 27 Feb 2006)
New Revision: 942
Modified:
xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java
xwiki/trunk/src/main/java/com/xpn/xwiki/web/InlineAction.java
xwiki/trunk/src/main/java/com/xpn/xwiki/web/PrepareEditForm.java
xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java
Log:
Fix issue with lock a document #XWIKI-176
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java 2006-02-27 04:19:36 UTC (rev 941)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java 2006-02-27 09:00:26 UTC (rev 942)
@@ -1,6 +1,8 @@
package com.xpn.xwiki.web;
import org.apache.velocity.VelocityContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
@@ -9,77 +11,83 @@
import com.xpn.xwiki.doc.XWikiLock;
public class EditAction extends XWikiAction {
+ private static final Log log = LogFactory.getLog(EditAction.class);
+
public String render(XWikiContext context) throws XWikiException {
XWikiRequest request = context.getRequest();
XWikiDocument doc = context.getDoc();
XWikiForm form = context.getForm();
VelocityContext vcontext = (VelocityContext) context.get("vcontext");
- XWikiDocument tdoc = (XWikiDocument) context.get("tdoc");
- PrepareEditForm peform = (PrepareEditForm) form;
- String parent = peform.getParent();
- if (parent!=null)
- doc.setParent(parent);
- String creator = peform.getCreator();
- if (creator!=null)
- doc.setCreator(creator);
- String defaultTemplate = peform.getDefaultTemplate();
- if (defaultTemplate!=null)
- doc.setDefaultTemplate(defaultTemplate);
- String defaultLanguage = peform.getDefaultLanguage();
- if ((defaultLanguage!=null)&&!defaultLanguage.equals(""))
- doc.setDefaultLanguage(defaultLanguage);
- if (doc.getDefaultLanguage().equals(""))
- doc.setDefaultLanguage(context.getWiki().getLanguagePreference(context));
+ synchronized (doc) {
+ XWikiDocument tdoc = (XWikiDocument) context.get("tdoc");
+ PrepareEditForm peform = (PrepareEditForm) form;
+ String parent = peform.getParent();
+ if (parent!=null)
+ doc.setParent(parent);
+ String creator = peform.getCreator();
+ if (creator!=null)
+ doc.setCreator(creator);
+ String defaultTemplate = peform.getDefaultTemplate();
+ if (defaultTemplate!=null)
+ doc.setDefaultTemplate(defaultTemplate);
+ String defaultLanguage = peform.getDefaultLanguage();
+ if ((defaultLanguage!=null)&&!defaultLanguage.equals(""))
+ doc.setDefaultLanguage(defaultLanguage);
+ if (doc.getDefaultLanguage().equals(""))
+ doc.setDefaultLanguage(context.getWiki().getLanguagePreference(context));
- String language = context.getWiki().getLanguagePreference(context);
- String languagefromrequest = context.getRequest().getParameter("language");
- String languagetoedit = ((languagefromrequest==null)||(languagefromrequest.equals(""))) ?
- language : languagefromrequest;
+ String language = context.getWiki().getLanguagePreference(context);
+ String languagefromrequest = context.getRequest().getParameter("language");
+ String languagetoedit = ((languagefromrequest==null)||(languagefromrequest.equals(""))) ?
+ language : languagefromrequest;
- if ((languagetoedit==null)||(languagetoedit.equals("default")))
- languagetoedit = "";
- if (doc.isNew()||(doc.getDefaultLanguage().equals(languagetoedit)))
- languagetoedit = "";
+ if ((languagetoedit==null)||(languagetoedit.equals("default")))
+ languagetoedit = "";
+ if (doc.isNew()||(doc.getDefaultLanguage().equals(languagetoedit)))
+ languagetoedit = "";
- if (languagetoedit.equals("")) {
- // In this case the created document is going to be the default document
- tdoc = doc;
- context.put("tdoc", doc);
- vcontext.put("tdoc", vcontext.get("doc"));
- if (doc.isNew()) {
- doc.setDefaultLanguage(language);
- doc.setLanguage("");
+ if (languagetoedit.equals("")) {
+ // In this case the created document is going to be the default document
+ tdoc = doc;
+ context.put("tdoc", doc);
+ vcontext.put("tdoc", vcontext.get("doc"));
+ if (doc.isNew()) {
+ doc.setDefaultLanguage(language);
+ doc.setLanguage("");
+ }
+ } else {
+ // If the translated doc object is the same as the doc object
+ // this means the translated doc did not exists so we need to create it
+ if ((tdoc==doc)) {
+ tdoc = new XWikiDocument(doc.getWeb(), doc.getName());
+ tdoc.setLanguage(languagetoedit);
+ tdoc.setContent(doc.getContent());
+ tdoc.setAuthor(context.getUser());
+ tdoc.setStore(doc.getStore());
+ context.put("tdoc", tdoc);
+ vcontext.put("tdoc", new Document(tdoc, context));
+ }
}
- } else {
- // If the translated doc object is the same as the doc object
- // this means the translated doc did not exists so we need to create it
- if ((tdoc==doc)) {
- tdoc = new XWikiDocument(doc.getWeb(), doc.getName());
- tdoc.setLanguage(languagetoedit);
- tdoc.setContent(doc.getContent());
- tdoc.setAuthor(context.getUser());
- tdoc.setStore(doc.getStore());
- context.put("tdoc", tdoc);
- vcontext.put("tdoc", new Document(tdoc, context));
+
+ XWikiDocument tdoc2 = (XWikiDocument) tdoc.clone();
+ context.put("tdoc", tdoc2);
+ vcontext.put("tdoc", new Document(tdoc2, context));
+ tdoc2.readFromTemplate(peform, context);
+
+ /* Setup a lock */
+ try {
+ XWikiLock lock = tdoc.getLock(context);
+ if ((lock == null) || (lock.getUserName().equals(context.getUser())) || (peform.isLockForce()))
+ tdoc.setLock(context.getUser(),context);
+ } catch (Exception e) {
+ e.printStackTrace();
+ // Lock should never make XWiki fail
+ // But we should log any related information
+ log.error("Exception while setting up lock", e);
}
}
- /* Setup a lock */
- try {
- XWikiLock lock = tdoc.getLock(context);
- if (lock == null || lock.getUserName().equals(context.getUser()) || peform.isLockForce())
- tdoc.setLock(context.getUser(),context);
- } catch (Exception e) {
- // Lock should never make XWiki fail
- // But we should log any related information
- // log.error("Exception while setting up lock", e);
- }
-
- XWikiDocument tdoc2 = (XWikiDocument) tdoc.clone();
- context.put("tdoc", tdoc2);
- vcontext.put("tdoc", new Document(tdoc2, context));
- tdoc2.readFromTemplate(peform, context);
return "edit";
}
}
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/InlineAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/InlineAction.java 2006-02-27 04:19:36 UTC (rev 941)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/InlineAction.java 2006-02-27 09:00:26 UTC (rev 942)
@@ -1,50 +1,69 @@
package com.xpn.xwiki.web;
import org.apache.velocity.VelocityContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.api.Document;
import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.doc.XWikiLock;
public class InlineAction extends XWikiAction {
- public String render(XWikiContext context) throws XWikiException {
+ private static final Log log = LogFactory.getLog(InlineAction.class);
+
+ public String render(XWikiContext context) throws XWikiException {
XWikiDocument doc = context.getDoc();
- XWikiForm form = context.getForm();
- VelocityContext vcontext = (VelocityContext) context.get("vcontext");
- Document vdoc = (Document) vcontext.get("doc");
- Document vcdoc = (Document) vcontext.get("cdoc");
+ synchronized (doc) {
+ XWikiForm form = context.getForm();
+ VelocityContext vcontext = (VelocityContext) context.get("vcontext");
+ Document vdoc = (Document) vcontext.get("doc");
+ Document vcdoc = (Document) vcontext.get("cdoc");
+ PrepareEditForm peform = (PrepareEditForm) form;
- XWikiDocument doc2 = (XWikiDocument) doc.clone();
- Document vdoc2 = new Document(doc2, context);
- context.put("doc", doc2);
- vcontext.put("doc", vdoc2);
+ XWikiDocument doc2 = (XWikiDocument) doc.clone();
+ Document vdoc2 = new Document(doc2, context);
+ context.put("doc", doc2);
+ vcontext.put("doc", vdoc2);
- PrepareEditForm peform = (PrepareEditForm) form;
- String parent = peform.getParent();
- if (parent!=null)
- doc2.setParent(parent);
- String creator = peform.getCreator();
- if (creator!=null)
- doc2.setCreator(creator);
- String defaultLanguage = peform.getDefaultLanguage();
- if ((defaultLanguage!=null)&&!defaultLanguage.equals(""))
- doc2.setDefaultLanguage(defaultLanguage);
- if (doc2.getDefaultLanguage().equals(""))
- doc2.setDefaultLanguage(context.getWiki().getLanguagePreference(context));
+ String parent = peform.getParent();
+ if (parent!=null)
+ doc2.setParent(parent);
+ String creator = peform.getCreator();
+ if (creator!=null)
+ doc2.setCreator(creator);
+ String defaultLanguage = peform.getDefaultLanguage();
+ if ((defaultLanguage!=null)&&!defaultLanguage.equals(""))
+ doc2.setDefaultLanguage(defaultLanguage);
+ if (doc2.getDefaultLanguage().equals(""))
+ doc2.setDefaultLanguage(context.getWiki().getLanguagePreference(context));
- doc2.readFromTemplate(peform, context);
- if (vdoc==vcdoc) {
- vcontext.put("cdoc", vdoc2);
- } else {
- XWikiDocument cdoc = vcdoc.getDocument();
- XWikiDocument cdoc2 = (XWikiDocument) cdoc.clone();
- vcontext.put("cdoc", new Document(cdoc2, context));
- cdoc2.readFromTemplate(peform, context);
+ doc2.readFromTemplate(peform, context);
+ if (vdoc==vcdoc) {
+ vcontext.put("cdoc", vdoc2);
+ } else {
+ XWikiDocument cdoc = vcdoc.getDocument();
+ XWikiDocument cdoc2 = (XWikiDocument) cdoc.clone();
+ vcontext.put("cdoc", new Document(cdoc2, context));
+ cdoc2.readFromTemplate(peform, context);
+ }
+
+ /* Setup a lock */
+ try {
+ XWikiLock lock = doc.getLock(context);
+ if ((lock == null) || (lock.getUserName().equals(context.getUser())) || (peform.isLockForce()))
+ doc.setLock(context.getUser(),context);
+ } catch (Exception e) {
+ e.printStackTrace();
+ // Lock should never make XWiki fail
+ // But we should log any related information
+ log.error("Exception while setting up lock", e);
+ }
}
-
+
// Set display context to 'view'
context.put("display", "edit");
return "inline";
- }
+ }
}
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/PrepareEditForm.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/PrepareEditForm.java 2006-02-27 04:19:36 UTC (rev 941)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/PrepareEditForm.java 2006-02-27 09:00:26 UTC (rev 942)
@@ -17,7 +17,7 @@
* Created by
* User: Ludovic Dubost
- * Date: 30 déc. 2003
+ * Date: 30 d�c. 2003
* Time: 09:12:48
*/
package com.xpn.xwiki.web;
@@ -39,7 +39,7 @@
setCreator(request.getParameter("creator"));
setDefaultLanguage(request.getParameter("defaultLanguage"));
setDefaultTemplate(request.getParameter("defaultTemplate"));
- setLockForce("1".equals(request.getParameter("lockforce")));
+ setLockForce("1".equals(request.getParameter("force")));
}
public String getTemplate() {
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java 2006-02-27 04:19:36 UTC (rev 941)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java 2006-02-27 09:00:26 UTC (rev 942)
@@ -16,37 +16,40 @@
XWikiDocument doc = context.getDoc();
XWikiForm form = context.getForm();
- String language = ((EditForm)form).getLanguage();
- String defaultLanguage = ((EditForm)form).getDefaultLanguage();
- XWikiDocument tdoc;
+ synchronized (doc) {
+ String language = ((EditForm)form).getLanguage();
+ String defaultLanguage = ((EditForm)form).getDefaultLanguage();
+ XWikiDocument tdoc;
- if ((language==null)||(language.equals(""))||(language.equals("default"))||(language.equals(doc.getDefaultLanguage()))) {
- // Need to save parent and defaultLanguage if they have changed
- tdoc = doc;
- } else {
- tdoc = doc.getTranslatedDocument(language, context);
- if (tdoc == doc) {
- tdoc = new XWikiDocument(doc.getWeb(), doc.getName());
- tdoc.setLanguage(language);
- tdoc.setStore(doc.getStore());
+ if ((language==null)||(language.equals(""))||(language.equals("default"))||(language.equals(doc.getDefaultLanguage()))) {
+ // Need to save parent and defaultLanguage if they have changed
+ tdoc = doc;
+ } else {
+ tdoc = doc.getTranslatedDocument(language, context);
+ if (tdoc == doc) {
+ tdoc = new XWikiDocument(doc.getWeb(), doc.getName());
+ tdoc.setLanguage(language);
+ tdoc.setStore(doc.getStore());
+ }
+ tdoc.setTranslation(1);
}
- tdoc.setTranslation(1);
- }
- XWikiDocument olddoc = (XWikiDocument) tdoc.clone();
- tdoc.readFromTemplate(((EditForm)form).getTemplate(), context);
- tdoc.readFromForm((EditForm)form, context);
+ XWikiDocument olddoc = (XWikiDocument) tdoc.clone();
+ tdoc.readFromTemplate(((EditForm)form).getTemplate(), context);
+ tdoc.readFromForm((EditForm)form, context);
- // TODO: handle Author
- String username = context.getUser();
- tdoc.setAuthor(username);
- if (tdoc.isNew())
- tdoc.setCreator(username);
+ // TODO: handle Author
+ String username = context.getUser();
+ tdoc.setAuthor(username);
+ if (tdoc.isNew())
+ tdoc.setCreator(username);
- xwiki.saveDocument(tdoc, olddoc, context);
- XWikiLock lock = tdoc.getLock(context);
- if (lock != null && lock.getUserName().equals(username))
- tdoc.removeLock(context);
+ xwiki.saveDocument(tdoc, olddoc, context);
+ XWikiLock lock = tdoc.getLock(context);
+ if (lock != null )
+ tdoc.removeLock(context);
+ }
+
// forward to view
String redirect = Utils.getRedirect("view", context);
sendRedirect(response, redirect);
More information about the Xwiki-notifications
mailing list