KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jahia > taglibs > form > FormContentMapperHandlerTag


1 package org.jahia.taglibs.form;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Enumeration JavaDoc;
5 import java.util.HashSet JavaDoc;
6 import java.util.Locale JavaDoc;
7 import java.util.Vector JavaDoc;
8
9 import javax.servlet.ServletRequest JavaDoc;
10 import javax.servlet.jsp.JspException JavaDoc;
11 import javax.servlet.jsp.tagext.BodyTagSupport JavaDoc;
12
13 import org.jahia.content.ContentPageKey;
14 import org.jahia.data.JahiaData;
15 import org.jahia.data.beans.ContainerListBean;
16 import org.jahia.data.containers.JahiaContainer;
17 import org.jahia.data.containers.JahiaContainerDefinition;
18 import org.jahia.data.containers.JahiaContainerList;
19 import org.jahia.data.containers.JahiaContainerStructure;
20 import org.jahia.data.fields.JahiaField;
21 import org.jahia.data.fields.JahiaFieldDefinition;
22 import org.jahia.exceptions.JahiaException;
23 import org.jahia.registries.ServicesRegistry;
24 import org.jahia.services.acl.JahiaACLEntry;
25 import org.jahia.services.acl.JahiaBaseACL;
26 import org.jahia.services.containers.ContentContainer;
27 import org.jahia.services.pages.ContentPage;
28 import org.jahia.services.usermanager.JahiaGroup;
29 import org.jahia.services.usermanager.JahiaGroupManagerService;
30 import org.jahia.services.usermanager.JahiaUser;
31 import org.jahia.services.usermanager.JahiaUserManagerService;
32 import org.jahia.services.version.StateModificationContext;
33
34 /**
35  * <p>Title: Form handler that maps to Content objects </p>
36  * <p>Description: This is a very powerful tag that allows to map a form
37  * submission to a container to be added in a container list.</p>
38  * <p>Copyright: Copyright (c) 2002</p>
39  * <p>Company: Jahia Ltd</p>
40  * @author Serge Huber
41  * @version 1.0
42  */

43
44 public class FormContentMapperHandlerTag extends BodyTagSupport JavaDoc {
45
46     private static org.apache.log4j.Logger logger =
47         org.apache.log4j.Logger.getLogger(FormContentMapperHandlerTag.class);
48
49     private boolean immediatePublication = false;
50     private String JavaDoc listName = null;
51     private String JavaDoc storeAsUserName = JahiaUserManagerService.GUEST_USERNAME;
52     private String JavaDoc storeAsGroupName = JahiaGroupManagerService.GUEST_GROUPNAME;
53     private String JavaDoc submitMarker = null;
54
55     public boolean isImmediatePublication () {
56         return immediatePublication;
57     }
58
59     public void setImmediatePublication (boolean immediatePublication) {
60         this.immediatePublication = immediatePublication;
61     }
62
63     public String JavaDoc getListName () {
64         return listName;
65     }
66
67     public void setListName (String JavaDoc listName) {
68         this.listName = listName;
69     }
70
71     public String JavaDoc getStoreAsUserName () {
72         return storeAsUserName;
73     }
74
75     public void setStoreAsUserName (String JavaDoc storeAsUserName) {
76         this.storeAsUserName = storeAsUserName;
77     }
78     public String JavaDoc getStoreAsGroupName() {
79         return storeAsGroupName;
80     }
81     public void setStoreAsGroupName(String JavaDoc storeAsGroupName) {
82         this.storeAsGroupName = storeAsGroupName;
83     }
84     public String JavaDoc getSubmitMarker() {
85         return submitMarker;
86     }
87     public void setSubmitMarker(String JavaDoc submitMarker) {
88         this.submitMarker = submitMarker;
89     }
90
91     private void storeForm (JahiaContainerList containerList,
92                             JahiaData jData)
93         throws JahiaException {
94         ServicesRegistry servicesRegistry = ServicesRegistry.getInstance();
95         if (containerList != null) {
96             if (containerList.getID() <= 0) {
97                 // first let's resolve parent ACL ID
98
int parentAclID = 0;
99                 if (containerList.getParentEntryID() != 0) {
100                     ContentContainer contentContainer = ContentContainer.getContainer(containerList.getParentEntryID());
101                     parentAclID = contentContainer.getAclID();
102                 } else {
103                     parentAclID = jData.params().getPage().getAclID();
104                 }
105                 servicesRegistry.getJahiaContainersService().saveContainerListInfo(containerList, parentAclID);
106             }
107             JahiaBaseACL acl = new JahiaBaseACL(containerList.getAclID());
108             JahiaACLEntry aclEntry = new JahiaACLEntry(
109                     JahiaBaseACL.ALL_RIGHTS, JahiaACLEntry.ACL_YES);
110             JahiaUser guest = servicesRegistry.
111                     getJahiaUserManagerService().
112                     lookupUser(jData.params().getSiteID(),
113                                storeAsUserName);
114             JahiaGroup guestGroup = servicesRegistry.
115                     getJahiaGroupManagerService().
116                     lookupGroup(jData.params().getSiteID(),
117                                 storeAsGroupName);
118
119             acl.setUserEntry(guest, aclEntry);
120             acl.setGroupEntry(guestGroup, aclEntry);
121             JahiaContainer container = new JahiaContainer(0,
122                                                           jData.params().getJahiaID(),
123                                                           jData.params().getPageID(),
124                                                           containerList.getID(),
125                                                           0, /* rank */
126                                                           containerList.getAclID(),
127                                                           containerList.getctndefid(),
128                                                           0, 2);
129             JahiaContainerDefinition containerDef = container.getDefinition();
130             servicesRegistry.getJahiaContainersService().
131                     saveContainer(container, containerList.getID(), jData.params());
132             container.setLanguageCode(jData.params().getLocale().toString());
133             container.fieldsStructureCheck(jData.params());
134
135             Enumeration JavaDoc fieldDefEnum = containerDef.getStructure(null, jData.params().getPage().getPageTemplateID(),
136                                                                  JahiaContainerStructure.JAHIA_FIELD);
137             while (fieldDefEnum.hasMoreElements()) {
138                 JahiaContainerStructure curStructureElem = (JahiaContainerStructure) fieldDefEnum.nextElement();
139                 JahiaFieldDefinition curFieldDef = (JahiaFieldDefinition) curStructureElem.getObjectDef();
140                 String JavaDoc curFieldName = curFieldDef.getName();
141                 String JavaDoc curFieldValue = jData.params().getRequest().getParameter(curFieldName);
142                 JahiaField curField = container.getField(curFieldName);
143                 if ((curFieldValue != null) && (!"".equals(curFieldValue)) && (curField != null)) {
144                     curField.setValue(curFieldValue);
145                     curField.setObject(curFieldValue);
146                     curField.save(jData.params());
147                 }
148             }
149
150             ContentPage currentPage = jData.params().getContentPage();
151             ArrayList JavaDoc locales = jData.params().getSite().
152                     getLanguageSettingsAsLocales(true);
153             Vector JavaDoc languageCodes = new Vector JavaDoc();
154             for (int i = 0; i < locales.size(); i++) {
155                 Locale JavaDoc loc = (Locale JavaDoc) locales.get(i);
156                 languageCodes.add(loc.toString());
157             }
158             if (isImmediatePublication()) {
159                 currentPage.activeStagingEntries(
160                         new HashSet JavaDoc(languageCodes), // languageCodes
161
true, //versioningActive,
162
servicesRegistry.getJahiaVersionService().
163                                 getSiteSaveVersion(jData.params().getSiteID()), // saveVersion
164
jData.params().getUser(),
165                                                                                 jData.params(),
166                                                                                 new StateModificationContext(
167                                                                                         new ContentPageKey(currentPage.
168                                                                                                 getID()),
169                                                                                         new HashSet JavaDoc(languageCodes))
170                                                                                 //stateModifContext
171
);
172             }
173         }
174     }
175
176     public int doStartTag () {
177         // Form submit handling
178

179         ServletRequest JavaDoc request = pageContext.getRequest();
180         JahiaData jData = (JahiaData) request.getAttribute(
181             "org.jahia.data.JahiaData");
182
183         String JavaDoc submitMarkerParam = request.getParameter(getSubmitMarker());
184         if (submitMarkerParam == null) {
185             // this means we do not process the form as the submit marker is
186
// not present in the request.
187
return SKIP_BODY;
188         }
189
190         if (getListName() != null) {
191             ContainerListBean containerListBean = (ContainerListBean) pageContext.findAttribute(getListName());
192             if (containerListBean == null) {
193                 logger.error("Couldn't find any ContainerListBean object in context name=[" + getListName() + "]");
194                 return SKIP_BODY;
195             }
196             try {
197                 storeForm(containerListBean.getJahiaContainerList(), jData);
198             } catch (JahiaException je) {
199                 logger.error("Error while processing form content mapper handler:", je);
200             }
201         }
202
203         return SKIP_BODY;
204     }
205
206     public int doEndTag ()
207         throws JspException JavaDoc {
208         // let's reinitialize the tag variables to allow tag object reuse in
209
// pooling.
210
immediatePublication = false;
211         listName = null;
212         storeAsUserName = JahiaUserManagerService.GUEST_USERNAME;
213         storeAsGroupName = JahiaGroupManagerService.GUEST_GROUPNAME;
214         submitMarker = null;
215         return EVAL_PAGE;
216     }
217
218 }
219
Popular Tags