KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > portlets > banners > action > EditBannerAction


1 package com.dotmarketing.portlets.banners.action;
2
3 import java.net.URLDecoder JavaDoc;
4
5 import javax.portlet.ActionRequest;
6 import javax.portlet.ActionResponse;
7 import javax.portlet.PortletConfig;
8 import javax.servlet.http.HttpServletRequest JavaDoc;
9
10 import org.apache.commons.beanutils.BeanUtils;
11 import org.apache.struts.action.ActionForm;
12 import org.apache.struts.action.ActionMapping;
13
14 import com.dotmarketing.beans.Host;
15 import com.dotmarketing.beans.Identifier;
16 import com.dotmarketing.cache.BannerCache;
17 import com.dotmarketing.factories.HostFactory;
18 import com.dotmarketing.factories.IdentifierFactory;
19 import com.dotmarketing.factories.InodeFactory;
20 import com.dotmarketing.portal.struts.DotPortletAction;
21 import com.dotmarketing.portlets.banners.model.Banner;
22 import com.dotmarketing.portlets.banners.struts.BannerForm;
23 import com.dotmarketing.portlets.categories.model.Category;
24 import com.dotmarketing.portlets.files.model.File;
25 import com.dotmarketing.portlets.folders.model.Folder;
26 import com.dotmarketing.portlets.htmlpages.model.HTMLPage;
27 import com.dotmarketing.services.BannerServices;
28 import com.dotmarketing.util.Logger;
29 import com.dotmarketing.util.UtilMethods;
30 import com.dotmarketing.util.Validator;
31 import com.dotmarketing.util.WebKeys;
32 import com.liferay.portlet.ActionRequestImpl;
33 import com.liferay.util.servlet.SessionMessages;
34
35
36 public class EditBannerAction extends DotPortletAction {
37     public void processAction(ActionMapping mapping, ActionForm form, PortletConfig config, ActionRequest req,
38             ActionResponse res) throws Exception JavaDoc {
39         String JavaDoc cmd = req.getParameter(com.liferay.portal.util.Constants.CMD);
40         
41         //wraps request to get session object
42
ActionRequestImpl reqImpl = (ActionRequestImpl) req;
43         HttpServletRequest JavaDoc httpReq = reqImpl.getHttpServletRequest();
44         
45         String JavaDoc referer = req.getParameter("referer");
46         if (referer!=null) {
47             referer = URLDecoder.decode(referer,"UTF-8");
48         }
49         
50         //get Banner from inode
51
_retrieveBanner(form, req, res);
52         
53         // edit a Banner
54
if (com.liferay.portal.util.Constants.EDIT.equals(cmd)) {
55             Logger.debug(this, "Banner: Editing Banner");
56             
57             try {
58                 _editBanner(form, req, res);
59             } catch (Exception JavaDoc e) {
60                 _handleException(e, req);
61             }
62         }
63         
64         // Save / Update a Banner
65
else if (com.liferay.portal.util.Constants.ADD.equals(cmd)) {
66             Logger.debug(this, "Banner: Saving Banner");
67             
68             ///Validate Banner
69
if (!Validator.validate(req, form, mapping)) {
70                 Logger.debug(this, "Banner: Validation Banner Failed");
71                 setForward(req, mapping.getInput());
72                 
73                 return;
74             } else {
75                 try {
76                     _saveBanner(form, req, res);
77                 } catch (Exception JavaDoc e) {
78                     _handleException(e, req);
79                 }
80                 
81                 _sendToReferral(req, res, referer);
82                 
83                 return;
84             }
85         }
86         // Delete a Banner
87
else if (com.liferay.portal.util.Constants.DELETE.equals(cmd)) {
88             Logger.debug(this, "Banner: Deleting Banner");
89             
90             try {
91                 _deleteBanner(form, req, res);
92             } catch (Exception JavaDoc e) {
93                 _handleException(e, req);
94             }
95             _sendToReferral(req, res, referer);
96             
97             return;
98         }
99         
100         BeanUtils.copyProperties(form, req.getAttribute(WebKeys.BANNER_EDIT));
101         setForward(req, "portlet.ext.banners.edit_banner");
102     }
103     
104     /*Private Methods*/
105     
106     //save Banner
107
private void _saveBanner(ActionForm form, ActionRequest req, ActionResponse res)
108     throws Exception JavaDoc {
109         
110         BeanUtils.copyProperties(req.getAttribute(WebKeys.BANNER_EDIT), form);
111         Banner b = ( Banner) req.getAttribute(WebKeys.BANNER_EDIT);
112         InodeFactory.saveInode(b);
113  
114         //wipe out the old categories
115
java.util.List JavaDoc _cats = InodeFactory.getParentsOfClass(b, Category.class);
116         java.util.Iterator JavaDoc it = _cats.iterator();
117         boolean delChild = true;
118         while (it.hasNext()) {
119             Category cat = ( Category ) it.next();
120             delChild = cat.deleteChild(b);
121         }
122
123         String JavaDoc placement = "";
124
125         //add the new categories
126
String JavaDoc[] arr = b.getCategories();
127         if (arr != null) {
128             for (int i = 0; i < arr.length; i++) {
129                 Category node = ( Category ) InodeFactory.getInode(arr[i], Category.class);
130                 node.addChild(b);
131                 if (node.getKey()!=null) {
132                     placement += node.getKey() + ",";
133                 }
134                 else {
135                     placement += node.getCategoryName() + ",";
136                 }
137             }
138         }
139         
140         String JavaDoc path = "";
141         
142         //gets current parent folder
143
Folder currParentFolder = (Folder) InodeFactory.getParentOfClass(b,Folder.class);
144         //only remove from the current folder if the new folder is different.
145
if (currParentFolder.getInode()!=b.getParent()) {
146             if (currParentFolder.getInode()>0) {
147                 currParentFolder.deleteChild(b);
148             }
149             //adds the parent folder
150
Folder parentFolder = (Folder) InodeFactory.getInode(b.getParent(),Folder.class);
151             if (parentFolder.getInode()>0) {
152                 parentFolder.addChild(b);
153                 currParentFolder = parentFolder;
154             }
155         }
156         //gets folder path
157
if (currParentFolder.getInode()>0) {
158             Host host = HostFactory.getParentHost(currParentFolder);
159             path = host.getHostname() + currParentFolder.getPath();
160         }
161
162         //gets parent identifier -- for the html page
163
Identifier parentHTMLPageId = (Identifier) IdentifierFactory.getIdentifierByInode(b);
164
165         HTMLPage parentHTMLPage = (HTMLPage) InodeFactory.getInode(b.getHtmlpage(),HTMLPage.class);
166         Identifier newParentHTMLPageId = IdentifierFactory.getIdentifierByInode(parentHTMLPage);
167         if (parentHTMLPageId.getInode()!=newParentHTMLPageId.getInode()) {
168             //remove from the current page identifier
169
if (parentHTMLPageId.getInode()!=0) {
170                 parentHTMLPageId.deleteChild(b);
171             }
172             if (newParentHTMLPageId.getInode()>0) {
173                 newParentHTMLPageId.addChild(b);
174                 parentHTMLPageId = newParentHTMLPageId;
175             }
176         }
177         //gets page path with folder included
178
if (parentHTMLPageId.getInode() > 0) {
179             parentHTMLPage = (HTMLPage) IdentifierFactory.getWorkingChildOfClass(parentHTMLPageId,HTMLPage.class);
180             Folder parentFolder = (Folder) InodeFactory.getParentOfClass(parentHTMLPage,Folder.class);
181             Host host = HostFactory.getParentHost(parentFolder);
182             path = host.getHostname() + parentFolder.getPath() + parentHTMLPage.getPageUrl();
183         }
184             
185         //sets placement and path for easier searches...
186
String JavaDoc previousPath = b.getPath();
187         String JavaDoc previousPlacement = b.getPlacement();
188
189         b.setPlacement(placement);
190         b.setPath(path);
191         InodeFactory.saveInode(b);
192         
193         //writes file with banners to file
194
BannerServices.writeBannerToFile(b, currParentFolder, parentHTMLPage);
195
196         //updates cache
197
BannerCache.updateBannerCache(previousPath, previousPlacement,path,placement,b);
198
199         //For messages to be displayed on messages page
200
SessionMessages.add(req, "message", "message.banner.save");
201     
202     }
203     
204     //delete Banner
205
private void _deleteBanner(ActionForm form, ActionRequest req, ActionResponse res)
206     throws Exception JavaDoc {
207         Banner b = ( Banner ) req.getAttribute(WebKeys.BANNER_EDIT);
208         InodeFactory.deleteInode(b);
209         //For messages to be displayed on messages page
210
SessionMessages.add(req, "message", "message.banner.delete");
211     
212     }
213     
214     //view Banner for Action request
215
private void _retrieveBanner(ActionForm form, ActionRequest req, ActionResponse res)
216     throws Exception JavaDoc {
217
218         Banner banner = (Banner) InodeFactory.getInode(req.getParameter("inode"), Banner.class);
219         req.setAttribute(WebKeys.BANNER_EDIT, banner);
220     }
221     //view Banner for Action request
222
private void _editBanner(ActionForm form, ActionRequest req, ActionResponse res)
223     throws Exception JavaDoc {
224
225         Banner banner = (Banner) req.getAttribute(WebKeys.BANNER_EDIT);
226         BannerForm bf = (BannerForm) form;
227         
228         //gets the parent folder
229
Folder parentFolder = (Folder) InodeFactory.getParentOfClass(banner,Folder.class);
230         //gets parent identifier -- for the html page
231
Identifier parentHTMLPageId = (Identifier) IdentifierFactory.getIdentifierByInode(banner);
232         HTMLPage parentHTMLPage = (HTMLPage) IdentifierFactory.getWorkingChildOfClass(parentHTMLPageId,HTMLPage.class);
233
234         if (parentFolder.getInode()>0) {
235             bf.setParent(parentFolder.getInode());
236             banner.setParent(parentFolder.getInode());
237             bf.setSelectedparent(parentFolder.getPath());
238             bf.setSelectedparentPath(parentFolder.getPath());
239         }
240         if (parentHTMLPage.getInode()>0) {
241             banner.setHtmlpage(parentHTMLPage.getInode());
242             bf.setHtmlpage(parentHTMLPage.getInode());
243             bf.setSelectedhtmlpage(parentHTMLPage.getPageUrl());
244         }
245         File image = (File) InodeFactory.getInode(banner.getImage(),File.class);
246         bf.setSelectedimage(image.getFileName());
247         bf.setImageExtension(UtilMethods.getFileExtension(image.getFileName()));
248         
249         req.setAttribute(WebKeys.BANNER_EDIT, banner);
250     }
251 }
252
Popular Tags