KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > webapp > action > core > mailTemplate > UpdateMailTemplateAction


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package com.blandware.atleap.webapp.action.core.mailTemplate;
17
18 import com.blandware.atleap.common.Constants;
19 import com.blandware.atleap.common.parsers.html.HTMLPlainTextExtractor;
20 import com.blandware.atleap.common.util.ConvertUtil;
21 import com.blandware.atleap.model.core.MailTemplate;
22 import com.blandware.atleap.service.core.MailTemplateManager;
23 import com.blandware.atleap.webapp.action.core.BaseAction;
24 import com.blandware.atleap.webapp.form.MailTemplateForm;
25 import com.blandware.atleap.webapp.util.core.MergeUtil;
26 import com.blandware.atleap.webapp.util.core.WebappConstants;
27 import com.blandware.atleap.webapp.util.core.WebappUtil;
28 import com.blandware.atleap.webapp.util.core.LocaleUtil;
29 import org.apache.commons.validator.GenericValidator;
30 import org.apache.struts.action.ActionForm;
31 import org.apache.struts.action.ActionForward;
32 import org.apache.struts.action.ActionMapping;
33 import org.apache.struts.action.ActionMessage;
34 import org.apache.struts.action.ActionMessages;
35 import org.springframework.orm.ObjectOptimisticLockingFailureException;
36
37 import javax.servlet.http.HttpServletRequest JavaDoc;
38 import javax.servlet.http.HttpServletResponse JavaDoc;
39 import java.io.ByteArrayInputStream JavaDoc;
40 import java.io.InputStream JavaDoc;
41 import java.util.*;
42
43 /**
44  * <p>Updates mail template
45  * </p>
46  * <p><a HREF="UpdateMailTemplateAction.java.htm"><i>View Source</i></a></p>
47  * <p/>
48  *
49  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
50  * @author Andrey Grebnev <a HREF="mailto:andrey.grebnev@blandware.com">&lt;andrey.grebnev@blandware.com&gt;</a>
51  * @version $Revision: 1.14 $ $Date: 2006/03/10 17:10:27 $
52  * @struts.action name="mailTemplateForm"
53  * path="/core/mailTemplate/update"
54  * scope="request"
55  * input="inputForward"
56  * validate="true"
57  * roles="core-mailTemplate-update"
58  * @struts.action-forward name="inputForward"
59  * path=".core.mailTemplate.updateBody"
60  * @struts.action-forward name="viewMailTemplate"
61  * path="/core/mailTemplate/view.do"
62  * redirect="true"
63  * @struts.action-forward name="listMailTemplates"
64  * path="/core/mailTemplate/list.do"
65  * redirect="true"
66  * @struts.action-forward name="callUpdateTemplate"
67  * path=".core.mailTemplate.update"
68  * @struts.action-forward name="callUpdateMailTemplate"
69  * path="/core/mailTemplate/callUpdate.do"
70  * redirect="false"
71  */

72 public final class UpdateMailTemplateAction extends BaseAction {
73     /**
74      * @param mapping The ActionMapping used to select this instance
75      * @param form The optional ActionForm bean for this request (if any)
76      * @param request The HTTP request we are proceeding
77      * @param response The HTTP response we are creating
78      * @return an ActionForward instance describing where and how
79      * control should be forwarded, or null if response
80      * has already been completed
81      */

82     public ActionForward execute(ActionMapping mapping, ActionForm form,
83                                  HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
84
85         if ( isBackPressed(request) ) {
86             // First check, may be session has been invalidated and we need to
87
// fill content locales again
88
if (request.getSession().getAttribute(WebappConstants.CONTENT_LOCALES_COLLECTION_KEY) == null) {
89                 List contentLocales = LocaleUtil.getInstance(servlet.getServletContext()).getAvailableLocales();
90                 request.getSession().setAttribute(WebappConstants.CONTENT_LOCALES_COLLECTION_KEY, contentLocales);
91             }
92             return mapping.findForward("callUpdateTemplate");
93         }
94
95         if ( isCancelled(request) ) {
96             return mapping.findForward("listMailTemplates");
97         }
98
99         if ( request.getSession().getAttribute(WebappConstants.MAIL_TEMPLATE_SUBMITTED_ACTION_KEY) == null ) {
100
101             request.getSession().setAttribute(WebappConstants.MAIL_TEMPLATE_SUBMITTED_ACTION_KEY, "update");
102
103             MailTemplateForm mailTemplateForm = (MailTemplateForm) form;
104
105             Long JavaDoc mailTemplateId = null;
106             if ( !GenericValidator.isBlankOrNull(mailTemplateForm.getId()) ) {
107                 mailTemplateId = Long.valueOf(mailTemplateForm.getId());
108             } else {
109                 if ( log.isWarnEnabled() ) {
110                     log.warn("Missing mail template ID. Returning to list...");
111                 }
112                 return mapping.findForward("listMailTemplates");
113             }
114
115             request.getSession().setAttribute(WebappConstants.MAIL_TEMPLATE_ID_KEY, mailTemplateId);
116
117             MailTemplateManager mailTemplateManager = (MailTemplateManager) getBean(Constants.MAIL_TEMPLATE_MANAGER_BEAN);
118             MailTemplate mailTemplate = mailTemplateManager.retrieveMailTemplate(mailTemplateId);
119
120             if ( mailTemplate == null ) {
121                 // mail template not found. it might be deleted by someone else
122
ActionMessages errors = new ActionMessages();
123                 errors.add("mailTemplateNotFound", new ActionMessage("core.mailTemplate.errors.notFound"));
124                 saveErrors(request, errors);
125                 return mapping.findForward("listMailTemplates");
126             }
127
128             // HTML plain text extractor instance
129
HTMLPlainTextExtractor extractor = new HTMLPlainTextExtractor();
130
131             Map newBody = mailTemplate.getBody();
132
133             WebappUtil.copyProperties(mailTemplate, mailTemplateForm, request);
134             mailTemplate.setFrom(mailTemplateForm.getFromMap());
135             mailTemplate.setSubject(mailTemplateForm.getSubjectMap());
136             mailTemplate.setBody(mailTemplateForm.getBodyMap());
137             mailTemplate.setCharset(mailTemplateForm.getCharsetMap());
138
139             boolean isPlain = mailTemplate.isPlain();
140
141             Map linkedObjects = new HashMap();
142             if ( !isPlain ) {
143                 // get all refs
144
Set refs = new HashSet();
145                 for ( Iterator i = mailTemplateForm.getBodyMap().values().iterator(); i.hasNext(); ) {
146                     String JavaDoc body = (String JavaDoc) i.next();
147                     if ( !GenericValidator.isBlankOrNull(body) ) {
148                         InputStream JavaDoc bodyIS = new ByteArrayInputStream JavaDoc(ConvertUtil.convertToByteArray(body));
149                         refs.addAll(extractor.extractAllRefs(bodyIS, Constants.DEFAULT_ENCODING));
150                     }
151                 }
152                 linkedObjects = WebappUtil.mapObjectsToRefs(refs, request.getSession().getServletContext(), request.getContextPath());
153             }
154
155             try {
156                 mailTemplateManager.updateMailTemplate(mailTemplate, linkedObjects);
157             } catch ( ObjectOptimisticLockingFailureException e ) {
158                 // mail template was updated or deleted by another transaction
159
ActionMessages errors = new ActionMessages();
160                 errors.add("updateFailed", new ActionMessage("core.mailTemplate.errors.updateFailed"));
161                 saveErrors(request, errors);
162
163                 // merge text
164
Map oldBody = mailTemplateForm.getBodyMap();
165                 Map mergedBody = new HashMap();
166                 for ( Iterator i = oldBody.entrySet().iterator(); i.hasNext(); ) {
167                     Map.Entry entry = (Map.Entry) i.next();
168                     String JavaDoc locale = (String JavaDoc) entry.getKey();
169                     String JavaDoc oldValue = (String JavaDoc) entry.getValue();
170                     String JavaDoc newValue = (String JavaDoc) newBody.get(locale);
171                     String JavaDoc mergedValue = MergeUtil.mergeText(oldValue, newValue);
172                     mergedBody.put(locale, mergedValue);
173                 }
174
175                 request.setAttribute(WebappConstants.MAIL_TEMPLATE_MERGED_BODY_KEY, mergedBody);
176
177                 return mapping.findForward("callUpdateMailTemplate");
178             } finally {
179                 request.getSession().removeAttribute(WebappConstants.MAIL_TEMPLATE_SUBMITTED_ACTION_KEY);
180             }
181         }
182         return mapping.findForward("listMailTemplates");
183     }
184 }
Popular Tags