KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > portlets > folders > action > EditHostAction


1 package com.dotmarketing.portlets.folders.action;
2
3 import java.util.HashSet JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Set JavaDoc;
7
8 import javax.portlet.ActionRequest;
9 import javax.portlet.ActionResponse;
10 import javax.portlet.PortletConfig;
11 import javax.portlet.WindowState;
12 import javax.servlet.http.HttpServletRequest JavaDoc;
13 import javax.servlet.http.HttpSession JavaDoc;
14
15 import org.apache.commons.beanutils.BeanUtils;
16 import org.apache.struts.action.ActionForm;
17 import org.apache.struts.action.ActionMapping;
18
19 import com.dotmarketing.beans.Host;
20 import com.dotmarketing.beans.Identifier;
21 import com.dotmarketing.beans.Inode;
22 import com.dotmarketing.beans.WebAsset;
23 import com.dotmarketing.cache.HostCache;
24 import com.dotmarketing.db.DotHibernate;
25 import com.dotmarketing.factories.HostFactory;
26 import com.dotmarketing.factories.IdentifierFactory;
27 import com.dotmarketing.factories.InodeFactory;
28 import com.dotmarketing.portal.struts.DotPortletAction;
29 import com.dotmarketing.portlets.containers.model.Container;
30 import com.dotmarketing.portlets.contentlet.model.Contentlet;
31 import com.dotmarketing.portlets.files.model.File;
32 import com.dotmarketing.portlets.folders.model.Folder;
33 import com.dotmarketing.portlets.htmlpages.model.HTMLPage;
34 import com.dotmarketing.portlets.links.model.Link;
35 import com.dotmarketing.portlets.templates.model.Template;
36 import com.dotmarketing.util.Logger;
37 import com.dotmarketing.util.UtilMethods;
38 import com.dotmarketing.util.WebKeys;
39 import com.liferay.portal.struts.ActionException;
40 import com.liferay.portal.util.Constants;
41 import com.liferay.portlet.ActionRequestImpl;
42 import com.liferay.util.servlet.SessionMessages;
43
44 /**
45  * @author David
46  */

47
48 public class EditHostAction extends DotPortletAction {
49     
50     public void processAction(
51             ActionMapping mapping, ActionForm form, PortletConfig config,
52             ActionRequest req, ActionResponse res)
53     throws Exception JavaDoc {
54         
55         //wraps request to get session object
56
ActionRequestImpl reqImpl = (ActionRequestImpl)req;
57         HttpServletRequest JavaDoc httpReq = reqImpl.getHttpServletRequest();
58         
59         String JavaDoc cmd = req.getParameter(Constants.CMD);
60         
61         //View Folders Page
62
String JavaDoc referer = "";
63         if (UtilMethods.isSet(req.getParameter("referer"))) {
64             referer = req.getParameter("referer");
65         } else {
66             java.util.Map JavaDoc<String JavaDoc, String JavaDoc[]> params = new java.util.HashMap JavaDoc<String JavaDoc, String JavaDoc[]>();
67             params.put("struts_action",
68                     new String JavaDoc[] { "/ext/folders/view_folders" });
69             params.put("openNodes", new String JavaDoc[] { req.getParameter("openNodes") });
70             params.put("view", new String JavaDoc[] { req.getParameter("view") });
71             params.put("content", new String JavaDoc[] { req.getParameter("content") });
72     
73             referer = com.dotmarketing.util.PortletURLUtil.getActionURL(
74                     httpReq, WindowState.MAXIMIZED.toString(), params);
75         }
76         
77         Logger.debug(this, "EditHostAction cmd=" + cmd);
78         
79         String JavaDoc forward = "portlet.ext.folders.edit_host";
80         
81         DotHibernate.startTransaction();
82         
83         try {
84             _editHost(req, res, config, form);
85             
86         } catch (Exception JavaDoc ae) {
87             _handleException(ae, req);
88             return;
89         }
90         
91         /*
92          * We are editing the host
93          */

94         if ((cmd != null) && cmd.equals(Constants.ADD)) {
95             try {
96                 _updateHost(req, res, config, form);
97                 _sendToReferral(req,res,referer);
98                 return;
99             } catch (ActionException ae) {
100                 _handleException(ae, req, false);
101                 if (ae.getMessage().equals("message.host.error.host.exists")) {
102                     setForward(req, forward);
103                     return;
104                 }
105                 return;
106             } catch (Exception JavaDoc ae) {
107                 _handleException(ae, req);
108                 return;
109             }
110         }
111         
112         
113         /*
114          * If we are deleteing the host,
115          * run the delete action and return to the list of folders
116          */

117         else if ((cmd != null) && cmd.equals(Constants.DELETE)) {
118             try {
119                 _deleteHost(req, res, config, form);
120                 
121                 _sendToReferral(req,res,referer);
122                 
123             } catch (Exception JavaDoc ae) {
124                 _handleException(ae, req);
125                 return;
126             }
127         }
128         
129         /*
130          * If we are deleteing the host,
131          * run the delete action and return to the list of folders
132          */

133         else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.SET_AS_DEFAULT)) {
134             try {
135                 _setDefaultHost(req, res, config, form);
136                 
137                 _sendToReferral(req,res,referer);
138                 
139             } catch (Exception JavaDoc ae) {
140                 _handleException(ae, req);
141                 return;
142             }
143         }
144         
145         BeanUtils.copyProperties(form,req.getAttribute(WebKeys.HOST_EDIT));
146         DotHibernate.commitTransaction();
147         setForward(req,forward);
148     }
149     
150     ///// ************** ALL METHODS HERE *************************** ////////
151

152     public void _editHost(ActionRequest req, ActionResponse res,PortletConfig config,ActionForm form)
153     throws Exception JavaDoc {
154         Host host = (Host) InodeFactory.getInode(req.getParameter("inode"),Host.class);
155         req.setAttribute(WebKeys.HOST_EDIT, host);
156         
157         //Setting permissions variable
158
req.setAttribute(WebKeys.PERMISSION_INODE_EDIT, host);
159         req.setAttribute(WebKeys.PERMISSION_SHOW_APPLY_TO_SUBFOLDERS, "true");
160     }
161     
162     public void _updateHost(ActionRequest req, ActionResponse res,PortletConfig config,ActionForm form)
163     throws Exception JavaDoc {
164         
165         BeanUtils.copyProperties(req.getAttribute(WebKeys.HOST_EDIT),form);
166         
167         Host host = (Host) req.getAttribute(WebKeys.HOST_EDIT);
168         
169         host.setAliases(host.getAliases().replaceAll("http://", ""));
170         host.setAliases(host.getAliases().replaceAll("https://", ""));
171         //Check it is the unique host with this url
172
long inode = HostFactory.getHostByHostName(host.getHostname().trim()).getInode();
173         if (inode > 0 && (host.getInode() != inode)) {
174             SessionMessages.add(req, "message", "message.host.already.exists");
175             throw new ActionException ("message.host.error.host.exists");
176         }
177         
178         if (host.isDefault()) {
179             Host defaultHost = HostFactory.getDefaultHost();
180             if (defaultHost.getInode()>0 && host.getInode()!=defaultHost.getInode()) {
181                 //sets the other default host as not default
182
defaultHost.setDefault(false);
183                 InodeFactory.saveInode(defaultHost);
184                 //sets this new host as the default one in the cache
185
HostCache.setDefaultHost(host);
186             }
187         }
188         //saves this host
189
InodeFactory.saveInode(host);
190         
191         //Updating permissions
192
_applyPermissions(req, WebKeys.HOST_EDIT);
193         
194         //clears the cache
195
HostCache.clearCache();
196         
197         //For messages to be displayed on messages page
198
SessionMessages.add(req, "message", "message.host.save");
199     }
200     
201     public void _setDefaultHost(ActionRequest req, ActionResponse res,PortletConfig config,ActionForm form)
202     throws Exception JavaDoc {
203         Host host = ( Host ) req.getAttribute(WebKeys.HOST_EDIT);
204         //checks if this host is already the default
205
if (host.isDefault()) {
206             SessionMessages.add(req, "message", "message.host.already.default");
207             return;
208         }
209         //gets default host
210
Host defaultHost = HostFactory.getDefaultHost();
211         if (defaultHost.getInode()>0) {
212             //if default host exists it sets default to false
213
defaultHost.setDefault(false);
214             //saves this host
215
InodeFactory.saveInode(defaultHost);
216         }
217         //sets new host to true
218
host.setDefault(true);
219         //saves new host
220
InodeFactory.saveInode(host);
221         //sets this host as the default one in the cache
222
HostCache.setDefaultHost(host);
223     }
224     
225     public void _deleteHost(ActionRequest req, ActionResponse res,PortletConfig config,ActionForm form)
226     throws Exception JavaDoc {
227         
228         Host host = ( Host ) req.getAttribute(WebKeys.HOST_EDIT);
229         //checks if the host the default host.
230
if (host.isDefault()) {
231             SessionMessages.add(req, "message", "message.host.cannot.delete.default");
232             return;
233         }
234         //gets all the hosts
235
List JavaDoc hosts = HostFactory.getAllHosts();
236         //check the number of hosts we have
237
if (hosts.size()==1) {
238             //we only have one host, we can't delete it
239
SessionMessages.add(req, "message", "message.host.cannot.delete.last");
240             return;
241         }
242         
243         //wraps request to get session object
244
ActionRequestImpl reqImpl = (ActionRequestImpl)req;
245         HttpServletRequest JavaDoc httpReq = reqImpl.getHttpServletRequest();
246         //gets the session object for the messages
247
HttpSession JavaDoc session = httpReq.getSession();
248         
249         String JavaDoc selectedFolder = ((String JavaDoc)session.getAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED)!=null) ? (String JavaDoc)session.getAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED) : "";
250         
251         //gets all the folders for this host
252
List JavaDoc folders = InodeFactory.getChildrenClass(host, Folder.class);
253         Iterator JavaDoc it = folders.iterator();
254
255         Set JavaDoc toDelete = new HashSet JavaDoc ();
256
257         //iterates through the children folders
258
while (it.hasNext()) {
259             Folder f = (Folder) it.next();
260             if (selectedFolder.equals(String.valueOf(f.getInode()))) {
261                 session.removeAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED);
262             }
263             //Retrieve folders and assets to delete
264
_getFoldersAndAssetsToDelete(toDelete, f, selectedFolder,session);
265             toDelete.add(f);
266         }
267         
268         //Deleting inodes
269
it = toDelete.iterator();
270         while (it.hasNext()) {
271             Inode in = (Inode) it.next();
272             InodeFactory.deleteInode(in);
273         }
274         
275         //deletes inode
276
InodeFactory.deleteInode(host);
277         
278         //clears the cache
279
HostCache.clearCache();
280         
281         //For messages to be displayed on messages page
282
SessionMessages.add(req, "message", "message.host.delete");
283         
284     }
285
286
287     private void _getFoldersAndAssetsToDelete(Set JavaDoc toDelete, Folder parent, String JavaDoc selectedFolder,HttpSession JavaDoc session) {
288         //Get children assets to delete
289
_getChildrenAssetsToDelete (toDelete, parent);
290             
291         //Iterate through the children folders
292
List JavaDoc children = InodeFactory.getChildrenClass(parent,Folder.class);
293         Iterator JavaDoc iter = children.iterator();
294         while (iter.hasNext()) {
295             Folder childFolder = (Folder) iter.next();
296             _getFoldersAndAssetsToDelete(toDelete, childFolder,selectedFolder,session);
297             toDelete.add(childFolder);
298         }
299     }
300     
301     private void _getChildrenAssetsToDelete (Set JavaDoc toDelete, Folder folder) {
302         //Removing HTMLPages
303
Set JavaDoc children = new HashSet JavaDoc(InodeFactory.getChildrenClass(folder, HTMLPage.class));
304         Iterator JavaDoc it = children.iterator();
305         while (it.hasNext()) {
306             Object JavaDoc child = it.next();
307             if (child instanceof WebAsset) {
308                 WebAsset asset = (WebAsset) child;
309                 Identifier id = IdentifierFactory.getIdentifierByInode(asset);
310                 toDelete.add(id);
311                 List JavaDoc allversions = InodeFactory.getChildrenClass(id, asset.getClass());
312                 Iterator JavaDoc childrenversions = allversions.iterator();
313                 while (childrenversions.hasNext()) {
314                     WebAsset version = (WebAsset) childrenversions.next();
315                     toDelete.add(version);
316                 }
317             }
318         }
319         //Removing Containers
320
children = new HashSet JavaDoc(InodeFactory.getChildrenClass(folder, Container.class));
321         it = children.iterator();
322         while (it.hasNext()) {
323             Object JavaDoc child = it.next();
324             if (child instanceof WebAsset) {
325                 WebAsset asset = (WebAsset) child;
326                 Identifier id = IdentifierFactory.getIdentifierByInode(asset);
327                 toDelete.add(id);
328                 List JavaDoc allversions = InodeFactory.getChildrenClass(id, asset.getClass());
329                 Iterator JavaDoc childrenversions = allversions.iterator();
330                 while (childrenversions.hasNext()) {
331                     WebAsset version = (WebAsset) childrenversions.next();
332                     toDelete.add(version);
333                 }
334             }
335         }
336         //Removing Contentlet
337
children = new HashSet JavaDoc(InodeFactory.getChildrenClass(folder, Contentlet.class));
338         it = children.iterator();
339         while (it.hasNext()) {
340             Object JavaDoc child = it.next();
341             if (child instanceof WebAsset) {
342                 WebAsset asset = (WebAsset) child;
343                 Identifier id = IdentifierFactory.getIdentifierByInode(asset);
344                 toDelete.add(id);
345                 List JavaDoc allversions = InodeFactory.getChildrenClass(id, asset.getClass());
346                 Iterator JavaDoc childrenversions = allversions.iterator();
347                 while (childrenversions.hasNext()) {
348                     WebAsset version = (WebAsset) childrenversions.next();
349                     toDelete.add(version);
350                 }
351             }
352         }
353         //Removing Links
354
children = new HashSet JavaDoc(InodeFactory.getChildrenClass(folder, Link.class));
355         it = children.iterator();
356         while (it.hasNext()) {
357             Object JavaDoc child = it.next();
358             if (child instanceof WebAsset) {
359                 WebAsset asset = (WebAsset) child;
360                 Identifier id = IdentifierFactory.getIdentifierByInode(asset);
361                 toDelete.add(id);
362                 List JavaDoc allversions = InodeFactory.getChildrenClass(id, asset.getClass());
363                 Iterator JavaDoc childrenversions = allversions.iterator();
364                 while (childrenversions.hasNext()) {
365                     WebAsset version = (WebAsset) childrenversions.next();
366                     toDelete.add(version);
367                 }
368             }
369         }
370         //Removing Templates
371
children = new HashSet JavaDoc(InodeFactory.getChildrenClass(folder, Template.class));
372         it = children.iterator();
373         while (it.hasNext()) {
374             Object JavaDoc child = it.next();
375             if (child instanceof WebAsset) {
376                 WebAsset asset = (WebAsset) child;
377                 Identifier id = IdentifierFactory.getIdentifierByInode(asset);
378                 toDelete.add(id);
379                 List JavaDoc allversions = InodeFactory.getChildrenClass(id, asset.getClass());
380                 Iterator JavaDoc childrenversions = allversions.iterator();
381                 while (childrenversions.hasNext()) {
382                     WebAsset version = (WebAsset) childrenversions.next();
383                     toDelete.add(version);
384                 }
385             }
386         }
387         //Removing Files
388
children = new HashSet JavaDoc(InodeFactory.getChildrenClass(folder, File.class));
389         it = children.iterator();
390         while (it.hasNext()) {
391             Object JavaDoc child = it.next();
392             if (child instanceof WebAsset) {
393                 WebAsset asset = (WebAsset) child;
394                 Identifier id = IdentifierFactory.getIdentifierByInode(asset);
395                 toDelete.add(id);
396                 List JavaDoc allversions = InodeFactory.getChildrenClass(id, asset.getClass());
397                 Iterator JavaDoc childrenversions = allversions.iterator();
398                 while (childrenversions.hasNext()) {
399                     WebAsset version = (WebAsset) childrenversions.next();
400                     toDelete.add(version);
401                 }
402             }
403         }
404     }
405     
406     
407 }
408
Popular Tags