Author: xlawrence
Date: Fri Jun  1 15:07:31 2007
New Revision: 17444

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D17444&repname=
=3Djahia
Log:
backport multipart fix and handling of FileFields

Modified:
    trunk/core/src/java/org/jahia/taglibs/form/FormContentMapperHandlerTag.=
java

Modified: trunk/core/src/java/org/jahia/taglibs/form/FormContentMapperHandl=
erTag.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/taglibs/form/FormContentMapperHandlerTag.java&rev=3D17444&repname=
=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/taglibs/form/FormContentMapperHandlerTag.=
java (original)
+++ trunk/core/src/java/org/jahia/taglibs/form/FormContentMapperHandlerTag.=
java Fri Jun  1 15:07:31 2007
@@ -1,28 +1,24 @@
 /*
  * Copyright 2002-2006 Jahia Ltd
  *
- * Licensed under the JAHIA COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (J=
CDDL), =

- * Version 1.0 (the "License"), or (at your option) any later version; you=
 may =

- * not use this file except in compliance with the License. You should hav=
e =

- * received a copy of the License along with this program; if not, you may=
 obtain =

- * a copy of the License at =

+ * Licensed under the JAHIA COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (J=
CDDL),
+ * Version 1.0 (the "License"), or (at your option) any later version; you=
 may
+ * not use this file except in compliance with the License. You should have
+ * received a copy of the License along with this program; if not, you may=
 obtain
+ * a copy of the License at
  *
  *  http://www.jahia.org/license/
  *
- * Unless required by applicable law or agreed to in writing, software =

- * distributed under the License is distributed on an "AS IS" BASIS, =

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied=
. =

- * See the License for the specific language governing permissions and =

+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
  * limitations under the License.
- */package org.jahia.taglibs.form;
-
-import java.util.Enumeration;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyTagSupport;
+ */
+package org.jahia.taglibs.form;
 =

 import org.jahia.data.JahiaData;
+import org.jahia.data.files.JahiaFileField;
 import org.jahia.data.beans.ContainerListBean;
 import org.jahia.data.containers.JahiaContainer;
 import org.jahia.data.containers.JahiaContainerDefinition;
@@ -30,17 +26,26 @@
 import org.jahia.data.containers.JahiaContainerStructure;
 import org.jahia.data.fields.JahiaField;
 import org.jahia.data.fields.JahiaFieldDefinition;
+import org.jahia.data.fields.FieldTypes;
 import org.jahia.exceptions.JahiaException;
 import org.jahia.hibernate.model.JahiaAclEntry;
+import org.jahia.params.ProcessingContext;
+import org.jahia.params.ParamBean;
 import org.jahia.registries.ServicesRegistry;
-import org.jahia.services.acl.JahiaACLEntry;
 import org.jahia.services.acl.JahiaBaseACL;
 import org.jahia.services.containers.ContentContainer;
-import org.jahia.services.usermanager.JahiaGroup;
-import org.jahia.services.usermanager.JahiaGroupManagerService;
-import org.jahia.services.usermanager.JahiaUser;
-import org.jahia.services.usermanager.JahiaUserManagerService;
+import org.jahia.services.usermanager.*;
 import org.jahia.services.workflow.WorkflowService;
+import org.jahia.services.webdav.DAVFileAccess;
+import org.jahia.services.webdav.JahiaWebdavBaseService;
+import org.jahia.tools.files.FileUpload;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.BodyTagSupport;
+import java.util.Enumeration;
+import java.util.Set;
+import java.util.HashSet;
 =

 /**
  * <p>Title: Form handler that maps to Content objects </p>
@@ -48,78 +53,76 @@
  * submission to a container to be added in a container list.</p>
  * <p>Copyright: Copyright (c) 2002</p>
  * <p>Company: Jahia Ltd</p>
+ *
  * @author Serge Huber
  * @version 1.0
- *
- *
  * @jsp:tag name=3D"formContentMapperHandler" body-content=3D"empty"
  * description=3D"Processes a submitted form and maps the parameters to fi=
elds in a container and adds the container
  * to the specified container list.
- *
+ * <p/>
  * <p><attriInfo>In the example below, the formContentMapperHandler tag de=
fines the mapping between the submitToTestContainerList form and
  * its associated container list testContainerList. The attribute 'submitM=
arker'  specifies which form on the page to link to
  * and 'listName' the associated container list. Its value can be set to a=
ny &lt;input&gt; tag of the form with a
  * unique name (to the page) such as submitToTestContainerList in this cas=
e. If the 'submitMarker' attribute is undefined,
  * the form will not be processed.
- *
- *<p>Given the fields in the submitToTestContainerList form, the formConte=
ntMapperHandler tag expects to find the fields named
+ * <p/>
+ * <p>Given the fields in the submitToTestContainerList form, the formCont=
entMapperHandler tag expects to find the fields named
  * title, content and bookformat in the container list testContainerList  =
on the current page.
  * If this isn't the case, an error is generated.
- *
+ * <p/>
  * <p><b>Example :</b>
- * <p>
- ...<br>
- &nbsp;&lt;content:declareContainerList name=3D\"testContainerList\" title=
=3D\"Content Container list\"&gt;<br>
- &nbsp;&nbsp;&nbsp;&lt;content:declareContainer&gt;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content:declareField name=3D\"title\" t=
itle=3D\"Title\" type=3D\"SmallText\" value=3D\"Lord of the Flies\"/&gt;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content:declareField name=3D\"bookforma=
t\" title=3D\"BookFormat\" type=3D\"SharedSmallText\" /&gt;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content:declareField name=3D\"content\"=
 title=3D\"Content\" type=3D\"BigText\" /&gt;<br>
- &nbsp;&nbsp;&nbsp;&lt;/content:declareContainer&gt;<br>
- &nbsp;    &lt;/content:declareContainerList&gt;<br>
- &nbsp;   &lt;%<br>
- &nbsp;   ...<br>
- &nbsp;   String bypassUrl =3D jParams.composePageUrl(jData.page().getID()=
);<br>
- &nbsp;   ...<br>
- &nbsp;   %&gt;<br>
- &nbsp;&lt;/head&gt;<br>
- &nbsp;&lt;body&gt;<br>
- ...<br>
- <br>
- &nbsp;&lt;h1&gt;Add container with form&lt;/h1&gt;<br>
- <br>
- &nbsp;&lt;content:containerList name=3D\"testContainerList\" id=3D\"testC=
ontainerList\"&gt;<br>
- <br>
- &nbsp;    &lt;content:container id=3D\"testContainer\"&gt;<br>
- &nbsp;&nbsp;&nbsp;&lt;h2&gt;&lt;content:textField name=3D\"title\" defaul=
tValue=3D\"\"/&gt;<br>
- &nbsp;&lt;content:textField name=3D\"bookformat\" defaultValue=3D\"\"/&gt=
;&lt;/h2&gt;<br>
- &nbsp;&nbsp;&nbsp;&lt;content:bigTextField name=3D\"content\" defaultValu=
e=3D\"\"/&gt;<br>
- &nbsp;&nbsp;&nbsp;&lt;br/&gt;<br>
- &nbsp;    &lt;/content:container&gt;<br>
- <br>
- &nbsp;    &lt;hr/&gt;<br>
- &nbsp;<br>
- &nbsp;&lt;/content:containerList&gt;<br>
- <br>
- &nbsp;&lt;content:formContentMapperHandler listName=3D\"testContainerList=
\" submitMarker=3D\"submitToTestContainerList\" /&gt;<br>
- &nbsp;&lt;form action=3D\"&lt;%=3DbypassUrl%&gt;\" name=3D\"submitToConta=
inerList\" method=3D\"post\"&gt;<br>
- &nbsp;    &lt;input type=3D\"text\" name=3D\"title\" value=3D\"Lord of th=
e Flies\"/&gt;&lt;br/&gt;<br>
- &nbsp;    &lt;input type=3D\"text\" name=3D\"bookformat\"/&gt;&lt;br/&gt;=
<br>
-     &lt;textarea name=3D\"content\"&gt;&lt;/textarea&gt;&lt;br/&gt;<br>
-     &lt;input type=3D\"submit\" name=3D\"submitToTestContainerList\" valu=
e=3D\"Submit\"/&gt;<br>
- &nbsp;&lt;/form&gt;<br>
- ...<br>
-
-
- *
- *
+ * <p/>
+ * ...<br>
+ * &nbsp;&lt;content:declareContainerList name=3D\"testContainerList\" tit=
le=3D\"Content Container list\"&gt;<br>
+ * &nbsp;&nbsp;&nbsp;&lt;content:declareContainer&gt;<br>
+ * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content:declareField name=3D\"title\"=
 title=3D\"Title\" type=3D\"SmallText\" value=3D\"Lord of the Flies\"/&gt;<=
br>
+ * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content:declareField name=3D\"bookfor=
mat\" title=3D\"BookFormat\" type=3D\"SharedSmallText\" /&gt;<br>
+ * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;content:declareField name=3D\"content=
\" title=3D\"Content\" type=3D\"BigText\" /&gt;<br>
+ * &nbsp;&nbsp;&nbsp;&lt;/content:declareContainer&gt;<br>
+ * &nbsp;    &lt;/content:declareContainerList&gt;<br>
+ * &nbsp;   &lt;%<br>
+ * &nbsp;   ...<br>
+ * &nbsp;   String bypassUrl =3D jParams.composePageUrl(jData.page().getID=
());<br>
+ * &nbsp;   ...<br>
+ * &nbsp;   %&gt;<br>
+ * &nbsp;&lt;/head&gt;<br>
+ * &nbsp;&lt;body&gt;<br>
+ * ...<br>
+ * <br>
+ * &nbsp;&lt;h1&gt;Add container with form&lt;/h1&gt;<br>
+ * <br>
+ * &nbsp;&lt;content:containerList name=3D\"testContainerList\" id=3D\"tes=
tContainerList\"&gt;<br>
+ * <br>
+ * &nbsp;    &lt;content:container id=3D\"testContainer\"&gt;<br>
+ * &nbsp;&nbsp;&nbsp;&lt;h2&gt;&lt;content:textField name=3D\"title\" defa=
ultValue=3D\"\"/&gt;<br>
+ * &nbsp;&lt;content:textField name=3D\"bookformat\" defaultValue=3D\"\"/&=
gt;&lt;/h2&gt;<br>
+ * &nbsp;&nbsp;&nbsp;&lt;content:bigTextField name=3D\"content\" defaultVa=
lue=3D\"\"/&gt;<br>
+ * &nbsp;&nbsp;&nbsp;&lt;br/&gt;<br>
+ * &nbsp;    &lt;/content:container&gt;<br>
+ * <br>
+ * &nbsp;    &lt;hr/&gt;<br>
+ * &nbsp;<br>
+ * &nbsp;&lt;/content:containerList&gt;<br>
+ * <br>
+ * &nbsp;&lt;content:formContentMapperHandler listName=3D\"testContainerLi=
st\" submitMarker=3D\"submitToTestContainerList\" /&gt;<br>
+ * &nbsp;&lt;form action=3D\"&lt;%=3DbypassUrl%&gt;\" name=3D\"submitToCon=
tainerList\" method=3D\"post\"&gt;<br>
+ * &nbsp;    &lt;input type=3D\"text\" name=3D\"title\" value=3D\"Lord of =
the Flies\"/&gt;&lt;br/&gt;<br>
+ * &nbsp;    &lt;input type=3D\"text\" name=3D\"bookformat\"/&gt;&lt;br/&g=
t;<br>
+ * &lt;textarea name=3D\"content\"&gt;&lt;/textarea&gt;&lt;br/&gt;<br>
+ * &lt;input type=3D\"submit\" name=3D\"submitToTestContainerList\" value=
=3D\"Submit\"/&gt;<br>
+ * &nbsp;&lt;/form&gt;<br>
+ * ...<br>
+ * <p/>
+ * <p/>
+ * <p/>
+ * <p/>
  * </attriInfo>"
- *
  */
 =

 public class FormContentMapperHandlerTag extends BodyTagSupport {
 =

     private static org.apache.log4j.Logger logger =3D
-        org.apache.log4j.Logger.getLogger(FormContentMapperHandlerTag.clas=
s);
+            org.apache.log4j.Logger.getLogger(FormContentMapperHandlerTag.=
class);
 =

     private boolean immediatePublication =3D false;
     private String listName =3D null;
@@ -128,154 +131,189 @@
     private String submitMarker =3D null;
 =

     /**
-      * @jsp:attribute name=3D"immediatePublication" required=3D"false" rt=
exprvalue=3D"true" type=3D"Boolean"
-      * description=3D"This attribute specifies whether user-submitted con=
tainers should be immediately
-      * validated or left in staging mode.
-      * <p><attriInfo> The default value is 'false' i.e. it is saved in th=
e staging mode
-      * only.  The language is not specified so the content is automatical=
ly added in the browser's current
-      * language. If necessary, you can get around this by declaring the f=
ields as shared type in the
-      * container (i.e. type=3D\"SharedSmallText\") so that the value will=
 be independent of the browser's language.
-      * </attriInfo>"
+     * @jsp:attribute name=3D"immediatePublication" required=3D"false" rte=
xprvalue=3D"true" type=3D"Boolean"
+     * description=3D"This attribute specifies whether user-submitted cont=
ainers should be immediately
+     * validated or left in staging mode.
+     * <p><attriInfo> The default value is 'false' i.e. it is saved in the=
 staging mode
+     * only.  The language is not specified so the content is automaticall=
y added in the browser's current
+     * language. If necessary, you can get around this by declaring the fi=
elds as shared type in the
+     * container (i.e. type=3D\"SharedSmallText\") so that the value will =
be independent of the browser's language.
+     * </attriInfo>"
      */
-    public boolean isImmediatePublication () {
+    public boolean isImmediatePublication() {
         return immediatePublication;
     }
 =

-    public void setImmediatePublication (boolean immediatePublication) {
+    public void setImmediatePublication(boolean immediatePublication) {
         this.immediatePublication =3D immediatePublication;
     }
 =

     /**
-      * @jsp:attribute name=3D"listName" required=3D"false" rtexprvalue=3D=
"true"
-      * description=3D"the name of the container list where to create and =
store user-submitted containers.
-      * <p><attriInfo>
-      * </attriInfo>"
+     * @jsp:attribute name=3D"listName" required=3D"false" rtexprvalue=3D"=
true"
+     * description=3D"the name of the container list where to create and s=
tore user-submitted containers.
+     * <p><attriInfo>
+     * </attriInfo>"
      */
-    public String getListName () {
+    public String getListName() {
         return listName;
     }
 =

-    public void setListName (String listName) {
+    public void setListName(String listName) {
         this.listName =3D listName;
     }
 =

     /**
-      * @jsp:attribute name=3D"storeAsUserName" required=3D"false" rtexprv=
alue=3D"true"
-      * description=3D"give ACL rights to stored containers to the specifi=
ed user only.
-      *
-      * <p><attriInfo>By default, the ACL on the stored containers will gi=
ve Read/Write and Admin rights to user Guest,
-      * it is wise to restrict this level of access to only a single user.
-      * </attriInfo>"
+     * @jsp:attribute name=3D"storeAsUserName" required=3D"false" rtexprva=
lue=3D"true"
+     * description=3D"give ACL rights to stored containers to the specifie=
d user only.
+     * <p/>
+     * <p><attriInfo>By default, the ACL on the stored containers will giv=
e Read/Write and Admin rights to user Guest,
+     * it is wise to restrict this level of access to only a single user.
+     * </attriInfo>"
      */
-    public String getStoreAsUserName () {
+    public String getStoreAsUserName() {
         return storeAsUserName;
     }
 =

-    public void setStoreAsUserName (String storeAsUserName) {
+    public void setStoreAsUserName(String storeAsUserName) {
         this.storeAsUserName =3D storeAsUserName;
     }
 =

     /**
-      * @jsp:attribute name=3D"storeAsGroupName" required=3D"false" rtexpr=
value=3D"true" type=3D"Boolean"
-      * description=3D"give ACL rights to stored containers to the specifi=
ed user only.
-      * <p><attriInfo>
-      * </attriInfo>"
+     * @jsp:attribute name=3D"storeAsGroupName" required=3D"false" rtexprv=
alue=3D"true" type=3D"Boolean"
+     * description=3D"give ACL rights to stored containers to the specifie=
d user only.
+     * <p><attriInfo>
+     * </attriInfo>"
      */
-    public String getStoreAsGroupName () {
+    public String getStoreAsGroupName() {
         return storeAsGroupName;
     }
 =

-    public void setStoreAsGroupName (String storeAsGroupName) {
+    public void setStoreAsGroupName(String storeAsGroupName) {
         this.storeAsGroupName =3D storeAsGroupName;
     }
 =

     /**
-      * @jsp:attribute name=3D"submitMarker" required=3D"false" rtexprvalu=
e=3D"true" type=3D"Boolean"
-      * description=3D"The attribute submitMarker  specifies which form on=
 the page to link to.
-      * <p><attriInfo>Its value can be set to any &lt;input&gt; tag of the=
 form with a unique name (to the page).
-      * </attriInfo>"
+     * @jsp:attribute name=3D"submitMarker" required=3D"false" rtexprvalue=
=3D"true" type=3D"Boolean"
+     * description=3D"The attribute submitMarker  specifies which form on =
the page to link to.
+     * <p><attriInfo>Its value can be set to any &lt;input&gt; tag of the =
form with a unique name (to the page).
+     * </attriInfo>"
      */
-    public String getSubmitMarker () {
+    public String getSubmitMarker() {
         return submitMarker;
     }
 =

-    public void setSubmitMarker (String submitMarker) {
+    public void setSubmitMarker(String submitMarker) {
         this.submitMarker =3D submitMarker;
     }
 =

-    private void storeForm (JahiaContainerList containerList,
-                            JahiaData jData)
-        throws JahiaException {
-        if (containerList !=3D null && containerList.getID() =3D=3D 0) {
+    private void storeForm(final JahiaContainerList containerList,
+                           final JahiaData jData)
+            throws JahiaException {
+        if (containerList =3D=3D null) {
+            logger.warn("storeForm -> null containerList passed.... Exitin=
g");
+            return;
+        }
+        if (containerList.getID() =3D=3D 0) {
             // first let's resolve parent ACL ID
-            int parentAclID =3D 0;
+            final int parentAclID;
             if (containerList.getParentEntryID() !=3D 0) {
                 ContentContainer contentContainer =3D ContentContainer.
-                    getContainer(containerList.getParentEntryID());
+                        getContainer(containerList.getParentEntryID());
                 parentAclID =3D contentContainer.getAclID();
             } else {
                 parentAclID =3D jData.getProcessingContext().getPage().get=
AclID();
             }
 =

             ServicesRegistry.getInstance().getJahiaContainersService().
-                saveContainerListInfo(containerList, parentAclID,
-                                      jData.getProcessingContext());
-            JahiaBaseACL acl =3D containerList.getACL();
-            JahiaAclEntry aclEntry =3D new JahiaAclEntry(JahiaBaseACL.ALL_=
RIGHTS, JahiaACLEntry.ACL_YES); // READ & WRITE & ADMIN, 0 =3D ACL YES
-            JahiaUser guest =3D ServicesRegistry.getInstance().
-                              getJahiaUserManagerService().
-                              lookupUser(jData.getProcessingContext().getS=
iteID(),
-                                         storeAsUserName);
-            JahiaGroup guestGroup =3D ServicesRegistry.getInstance().
-                                    getJahiaGroupManagerService().
-                                    lookupGroup(jData.getProcessingContext=
().getSiteID(),
-                                                storeAsGroupName);
+                    saveContainerListInfo(containerList, parentAclID,
+                            jData.getProcessingContext());
+            final JahiaBaseACL acl =3D containerList.getACL();
+            final JahiaAclEntry aclEntry =3D new JahiaAclEntry(1, 0); // R=
EAD only, 0 =3D ACL YES
+            final JahiaUser guest =3D ServicesRegistry.getInstance().
+                    getJahiaUserManagerService().
+                    lookupUser(jData.getProcessingContext().getSiteID(),
+                            storeAsUserName);
+            final JahiaGroup guestGroup =3D ServicesRegistry.getInstance().
+                    getJahiaGroupManagerService().
+                    lookupGroup(jData.getProcessingContext().getSiteID(),
+                            storeAsGroupName);
 =

             acl.setUserEntry(guest, aclEntry);
             acl.setGroupEntry(guestGroup, aclEntry);
         }
-        JahiaContainer container =3D new JahiaContainer(0,
-            jData.getProcessingContext().getJahiaID(),
-            jData.getProcessingContext().getPageID(),
-            containerList.getID(),
-            0, /* rank */
-            containerList.getAclID(),
-            containerList.getctndefid(),
-            0, 2);
-        JahiaContainerDefinition containerDef =3D container.getDefinition(=
);
+        final JahiaContainer container =3D new JahiaContainer(0,
+                jData.getProcessingContext().getJahiaID(),
+                jData.getProcessingContext().getPageID(),
+                containerList.getID(),
+                0, /* rank */
+                containerList.getAclID(),
+                containerList.getctndefid(),
+                0, 2);
+        final JahiaContainerDefinition containerDef =3D container.getDefin=
ition();
         ServicesRegistry.getInstance().getJahiaContainersService().
-            saveContainer(container, containerList.getID(), jData.getProce=
ssingContext());
+                saveContainer(container, containerList.getID(), jData.getP=
rocessingContext());
         container.setLanguageCode(jData.getProcessingContext().getLocale()=
.toString());
         container.fieldsStructureCheck(jData.getProcessingContext());
 =

-        Enumeration fieldDefEnum =3D containerDef.getStructure(null,
-            jData.getProcessingContext().getPage().getPageTemplateID(),
-            JahiaContainerStructure.JAHIA_FIELD);
+        final Enumeration fieldDefEnum =3D containerDef.getStructure(null,
+                jData.getProcessingContext().getPage().getPageTemplateID(),
+                JahiaContainerStructure.JAHIA_FIELD);
         while (fieldDefEnum.hasMoreElements()) {
-            JahiaContainerStructure curStructureElem =3D (JahiaContainerSt=
ructure)
-                fieldDefEnum.nextElement();
-            JahiaFieldDefinition curFieldDef =3D (JahiaFieldDefinition)
-                                               curStructureElem.getObjectD=
ef();
-            String curFieldName =3D curFieldDef.getName();
-            String[] curFieldValues =3D jData.getProcessingContext().getPa=
rameterValues(
-                curFieldName);
-            JahiaField curField =3D container.getField(curFieldName);
-            StringBuffer curFieldValueBuf =3D new StringBuffer();
-            if (curFieldValues !=3D null) {
-                for (int i=3D0; i < curFieldValues.length; i++) {
-                    curFieldValueBuf.append(curFieldValues[i]);
-                    if (i < (curFieldValues.length - 1)) {
-                        curFieldValueBuf.append("$$$");
+            final JahiaContainerStructure curStructureElem =3D (JahiaConta=
inerStructure) fieldDefEnum.nextElement();
+            final JahiaFieldDefinition curFieldDef =3D (JahiaFieldDefiniti=
on) curStructureElem.getObjectDef();
+            final String curFieldName =3D curFieldDef.getName();
+
+            final String[] curFieldValues;
+
+            curFieldValues =3D jData.getProcessingContext().getParameterVa=
lues(curFieldName);
+
+            final JahiaField curField =3D container.getField(curFieldName);
+            if (curField !=3D null) {
+                if (curField.getType() =3D=3D FieldTypes.FILE) {
+                    if (curFieldValues !=3D null && curFieldValues.length =
> 0) {
+                        final String path =3D curFieldValues[0];
+                        final DAVFileAccess objectDav =3D JahiaWebdavBaseS=
ervice.getInstance().getDAVFileAccess(
+                                jData.params(),
+                                jData.getProcessingContext().getSite(),
+                                JahiaAdminUser.getAdminUser(jData.getProce=
ssingContext().getSiteID()),
+                                path);
+                        final JahiaFileField fField =3D objectDav.getJahia=
FileField();
+                        curField.setValue(path);
+                        curField.setObject(fField);
+
+                        final Set uris =3D new HashSet();
+                        final String[] users =3D jData.getProcessingContex=
t().getParameterValues("user");
+                        if (users !=3D null) {
+                            for (int i =3D 0; i < users.length; i++) {
+                                uris.add(users[i]);
+                            }
+                        }
+                        if (!uris.isEmpty()) {
+                            objectDav.beginTransaction();
+                            objectDav.alignPermsWithField(curField, uris);
+                            objectDav.commitTransaction();
+                        }
+
+                        curField.save(jData.getProcessingContext());
+                    }
+                } else {
+                    final StringBuffer curFieldValueBuf =3D new StringBuff=
er();
+                    if (curFieldValues !=3D null) {
+                        for (int i =3D 0; i < curFieldValues.length; i++) {
+                            curFieldValueBuf.append(curFieldValues[i]);
+                            if (i < (curFieldValues.length - 1)) {
+                                curFieldValueBuf.append("$$$");
+                            }
+                        }
+                    }
+                    final String curFieldValue =3D curFieldValueBuf.toStri=
ng();
+                    if ((curFieldValues !=3D null) && (!"".equals(curField=
Value))) {
+                        curField.setValue(curFieldValue);
+                        curField.setObject(curFieldValue);
+                        curField.save(jData.getProcessingContext());
                     }
                 }
             }
-            String curFieldValue =3D curFieldValueBuf.toString();
-            if ( (curFieldValues !=3D null) && (!"".equals(curFieldValue))=
 &&
-                (curField !=3D null)) {
-                curField.setValue(curFieldValue);
-                curField.setObject(curFieldValue);
-                curField.save(jData.getProcessingContext());
-            }
         }
         if (isImmediatePublication()) {
             if (ServicesRegistry.getInstance().getWorkflowService().getWor=
kflowMode(
@@ -284,19 +322,35 @@
                         containerList.getContentContainerList(), WorkflowS=
ervice.INACTIVE,
                         null, null,
                         jData.getProcessingContext());
+        } else {
+            try {
+                ServicesRegistry.getInstance().getCacheService().getHtmlCa=
cheInstance().flush();
+            } catch (final Throwable t) {
+                logger.error("Error while trying to flush HTML cache", t);
+            }
         }
         ServicesRegistry.getInstance().getJahiaEventService().fireAggregat=
edEvents();
     }
 =

-    public int doStartTag () {
+    public int doStartTag() {
         // Form submit handling
 =

-        ServletRequest request =3D pageContext.getRequest();
-        JahiaData jData =3D (JahiaData) request.getAttribute(
-            "org.jahia.data.JahiaData");
+        HttpServletRequest request =3D (HttpServletRequest) pageContext.ge=
tRequest();
+        JahiaData jData =3D (JahiaData) request.getAttribute("org.jahia.da=
ta.JahiaData");
+
+        final String submitMarkerParam;
+        if (ProcessingContext.isMultipartRequest(request)) {
+            final FileUpload fupload =3D ((ParamBean) jData.getProcessingC=
ontext()).getFileUpload();
+            final String[] values =3D fupload.getParameterValues(getSubmit=
Marker());
+            if (values !=3D null && values.length > 0) {
+                submitMarkerParam =3D fupload.getParameterValues(getSubmit=
Marker())[0];
+            } else {
+                submitMarkerParam =3D null;
+            }
+        } else {
+            submitMarkerParam =3D request.getParameter(getSubmitMarker());
+        }
 =

-        String submitMarkerParam =3D jData.getProcessingContext().getParam=
eter(
-                               getSubmitMarker());
         if (submitMarkerParam =3D=3D null) {
             // this means we do not process the form as the submit marker =
is
             // not present in the request.
@@ -304,28 +358,26 @@
         }
 =

         if (getListName() !=3D null) {
-            ContainerListBean containerListBean =3D (ContainerListBean)
-                                                  pageContext.findAttribut=
e(
-                getListName());
+            ContainerListBean containerListBean =3D (ContainerListBean) pa=
geContext.findAttribute(getListName());
             if (containerListBean =3D=3D null) {
                 logger.error(
-                    "Couldn't find any ContainerListBean object in context=
 name=3D[" +
-                    getListName() + "]");
+                        "Couldn't find any ContainerListBean object in con=
text name=3D[" +
+                                getListName() + "]");
                 return SKIP_BODY;
             }
             try {
                 storeForm(containerListBean.getJahiaContainerList(), jData=
);
             } catch (JahiaException je) {
                 logger.error(
-                    "Error while processing form content mapper handler:",=
 je);
+                        "Error while processing form content mapper handle=
r:", je);
             }
         }
 =

         return SKIP_BODY;
     }
 =

-    public int doEndTag ()
-        throws JspException {
+    public int doEndTag()
+            throws JspException {
         // let's reinitialize the tag variables to allow tag object reuse =
in
         // pooling.
         immediatePublication =3D false;

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to