KickJava   Java API By Example, From Geeks To Geeks.

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


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.Tree;
23 import com.dotmarketing.beans.WebAsset;
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.factories.TreeFactory;
29 import com.dotmarketing.menubuilders.RefreshMenus;
30 import com.dotmarketing.portal.struts.DotPortletAction;
31 import com.dotmarketing.portlets.folders.factories.FolderFactory;
32 import com.dotmarketing.portlets.folders.model.Folder;
33 import com.dotmarketing.portlets.folders.struts.FolderForm;
34 import com.dotmarketing.util.Config;
35 import com.dotmarketing.util.Logger;
36 import com.dotmarketing.util.UtilMethods;
37 import com.dotmarketing.util.WebKeys;
38 import com.liferay.portal.model.User;
39 import com.liferay.portal.util.Constants;
40 import com.liferay.portal.util.PortalUtil;
41 import com.liferay.portlet.ActionRequestImpl;
42 import com.liferay.util.servlet.SessionMessages;
43
44 /**
45  * @author Maria
46  */

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

95         if ((cmd != null) && cmd.equals(Constants.ADD)) {
96             try {
97                 if (_updateFolder(req, res, config, form)) {
98                     _sendToReferral(req, res, referer);
99                     return;
100                 }
101
102             } catch (Exception JavaDoc ae) {
103                 _handleException(ae, req);
104                 return;
105             }
106         }
107
108         /*
109          * If we are deleting the folder, run the delete action and return
110          * to the referer
111          *
112          */

113         else if ((cmd != null) && cmd.equals(Constants.DELETE)) {
114             try {
115                 _deleteFolder(req, res, config, form);
116                 _sendToReferral(req, res, referer);
117             } catch (Exception JavaDoc ae) {
118                 _handleException(ae, req);
119                 return;
120             }
121             return;
122         }
123         /*
124          * If we are copying the folder, run the copy action and return to the
125          * list
126          */

127         else if ((cmd != null)
128                 && cmd.equals(com.dotmarketing.util.Constants.COPY)) {
129             try {
130                 Logger.debug(this, "Calling Copy Method");
131                 _copyFolder(req, res, config, form, user);
132             } catch (Exception JavaDoc ae) {
133                 _handleException(ae, req);
134             }
135             _sendToReferral(req, res, referer);
136             return;
137         }
138         /*
139          * If we are moving the html page, run the copy action and return to the
140          * list
141          */

142         else if ((cmd != null)
143                 && cmd.equals(com.dotmarketing.util.Constants.MOVE)) {
144             try {
145                 Logger.debug(this, "Calling Move Method");
146                 _moveFolder(req, res, config, form, user);
147             } catch (Exception JavaDoc ae) {
148                 _handleException(ae, req);
149             }
150             _sendToReferral(req, res, referer);
151             return;
152         }
153         else if ((cmd != null) && cmd.equals(com.dotmarketing.util.Constants.RENAME))
154         {
155             String JavaDoc newName = "newRenameNew";
156             Folder folder = (Folder) InodeFactory.getInode(req.getParameter("inode"),Folder.class);
157             FolderFactory.renameFolder(folder,newName);
158             _sendToReferral(req, res, referer);
159             return;
160         }
161
162         BeanUtils.copyProperties(form, req.getAttribute(WebKeys.FOLDER_EDIT));
163         DotHibernate.commitTransaction();
164         setForward(req, forward);
165     }
166
167     // /// ************** ALL METHODS HERE *************************** ////////
168

169     public void _editFolder(ActionRequest req, ActionResponse res,
170             PortletConfig config, ActionForm form) throws Exception JavaDoc {
171
172         Folder f = (Folder) InodeFactory.getInode(req.getParameter("inode"),
173                 Folder.class);
174         req.setAttribute(WebKeys.FOLDER_EDIT, f);
175
176         // Checking permissions
177
User user = PortalUtil.getUser(req);
178         _checkUserPermissions(f, user, Config.getIntProperty("PERMISSION_READ"));
179
180         // parent folder
181
if (f.getInode() == 0) {
182             String JavaDoc parentInode = req.getParameter("pfolderId");
183             Folder parentFolder = (Folder) InodeFactory.getInode(parentInode, Folder.class);
184             req.setAttribute(WebKeys.FOLDER_PARENT, parentFolder);
185             if(parentFolder.getInode() == 0) {
186                 Host parentHost = (Host) InodeFactory.getInode(parentInode, Host.class);
187                 req.setAttribute(WebKeys.FOLDER_PARENT, parentHost);
188             }
189         } else {
190             Folder parentFolder = (Folder) InodeFactory.getParentOfClass(f, Folder.class);
191             req.setAttribute(WebKeys.FOLDER_PARENT, parentFolder);
192             if(parentFolder.getInode() == 0) {
193                 Host parentHost = (Host) InodeFactory.getParentOfClass(f, Host.class);
194                 req.setAttribute(WebKeys.FOLDER_PARENT, parentHost);
195             }
196         }
197                 
198         //show on menu
199
req.setAttribute(WebKeys.FOLDER_SHOWMENU, new Boolean JavaDoc(f.isShowOnMenu()));
200
201         // Setting permissions variable
202
if (f.getInode() > 0)
203             req.setAttribute(WebKeys.PERMISSION_INODE_EDIT, f);
204         else
205             req.setAttribute(WebKeys.PERMISSION_INODE_EDIT, req
206                     .getAttribute(WebKeys.FOLDER_PARENT));
207         req.setAttribute(WebKeys.PERMISSION_SHOW_APPLY_TO_SUBFOLDERS, "true");
208     }
209
210     public boolean _updateFolder(ActionRequest req, ActionResponse res,PortletConfig config, ActionForm form) throws Exception JavaDoc
211     {
212         
213         Folder f = (Folder) req.getAttribute(WebKeys.FOLDER_EDIT);
214         boolean changeName = false;
215         FolderForm folderForm = (FolderForm) form;
216         if(f.getInode() > 0 && !folderForm.getName().equals(f.getName()))
217         {
218             FolderFactory.renameFolder(f,folderForm.getName());
219         }
220         BeanUtils.copyProperties(f,form);
221         
222         
223         Inode parent = (Inode) req.getAttribute(WebKeys.FOLDER_PARENT);
224         
225         java.util.List JavaDoc<String JavaDoc> reservedFolderNames = new java.util.ArrayList JavaDoc<String JavaDoc>();
226         reservedFolderNames.add("WEB-INF");
227         reservedFolderNames.add("META-INF");
228         
229         if (reservedFolderNames.contains(f.getName())) {
230             // For messages to be displayed on messages page
231
SessionMessages.add(req, "message",
232             "message.folder.save.reservedName");
233         } else {
234             
235             Folder prevFolder = null;
236             if (parent instanceof Folder) {
237                 Folder parentFolder = (Folder) parent;
238                 Host host = HostFactory.getParentHost(parentFolder);
239                 prevFolder = FolderFactory.getFolderByPath(parentFolder
240                         .getPath()
241                         + f.getName() + "/", host);
242             } else {
243                 prevFolder = FolderFactory.getFolderByPath("/" + f.getName()
244                         + "/", (Host) parent);
245             }
246             
247             if (f.getInode() == 0 && prevFolder.getInode() > 0) {
248                 // For messages to be displayed on messages page
249
SessionMessages.add(req, "message",
250                 "message.folder.alreadyexists");
251                 return false;
252             } else {
253                 boolean previousShowMenu = ((Boolean JavaDoc) req
254                         .getAttribute(WebKeys.FOLDER_SHOWMENU)).booleanValue();
255                 
256                 if (parent instanceof Folder)
257                     f.setPath(((Folder) parent).getPath() + f.getName() + "/");
258                 else
259                     f.setPath("/" + f.getName() + "/");
260                 
261                 InodeFactory.saveInode(f);
262                 
263                 _applyPermissions(req, WebKeys.FOLDER_EDIT);
264                 
265                 // There is a parent folder
266
parent.addChild(f);
267                 InodeFactory.saveInode(parent);
268                 
269                 Host host = null;
270                 if (parent instanceof Folder)
271                     host = HostFactory.getParentHost((Folder) parent);
272                 else
273                     host = (Host) parent;
274                 
275                 // adding the host as a parent of the new folder on the Host Id
276
f.setHostInode(host.getInode());
277                 
278                 if (previousShowMenu) {
279                     // folder with show on menu... need to regenerate menu
280
RefreshMenus.deleteMenus();
281                 } else if (previousShowMenu != f.isShowOnMenu()) {
282                     // existing folder with different show on menu ... need to
283
// regenerate menu
284
RefreshMenus.deleteMenus();
285                 }
286                 // For messages to be displayed on messages page
287
SessionMessages.add(req, "message", "message.folder.save");
288                 return true;
289             }
290         }
291         return false;
292     }
293
294     public void _deleteFolder(ActionRequest req, ActionResponse res,
295             PortletConfig config, ActionForm form) throws Exception JavaDoc {
296
297         Folder f = (Folder) req.getAttribute(WebKeys.FOLDER_EDIT);
298
299         // wraps request to get session object
300
ActionRequestImpl reqImpl = (ActionRequestImpl) req;
301         HttpServletRequest JavaDoc httpReq = reqImpl.getHttpServletRequest();
302         // gets the session object for the messages
303
HttpSession JavaDoc session = httpReq.getSession();
304
305         String JavaDoc selectedFolder = ((String JavaDoc) session
306                 .getAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED) != null) ? (String JavaDoc) session
307                 .getAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED)
308                 : "";
309
310         if (selectedFolder.equals(String.valueOf(f.getInode()))) {
311             session
312                     .removeAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED);
313         }
314
315         _deleteFolders(f, selectedFolder, session);
316
317         if (f.isShowOnMenu()) {
318             RefreshMenus.deleteMenus();
319         }
320
321         // For messages to be displayed on messages page
322
SessionMessages.add(req, "message", "message.folder.delete");
323
324     }
325
326     private void _deleteFolders(Folder folder, String JavaDoc selectedFolder,
327             HttpSession JavaDoc session) {
328         Set JavaDoc<Inode> objectsToRemove = new HashSet JavaDoc<Inode>();
329         objectsToRemove.add(folder);
330
331         List JavaDoc children = InodeFactory.getChildrenClass(folder, Folder.class);
332         Iterator JavaDoc iter = children.iterator();
333         while (iter.hasNext()) {
334             Folder childFolder = (Folder) iter.next();
335
336             if (selectedFolder.equals(String.valueOf(childFolder.getInode()))) {
337                 session
338                         .removeAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED);
339             }
340
341             //_listChildrenAssetsFromFolder(childFolder, objectsToRemove);
342
_deleteFolders(childFolder, selectedFolder, session);
343         }
344
345         for (Inode obj : objectsToRemove) {
346             if (obj.getInode() > 0)
347                 InodeFactory.deleteInode(obj);
348         }
349     }
350
351     private void _listChildrenAssetsFromFolder(Folder folder,
352             Set JavaDoc<Inode> objectsList) {
353         List JavaDoc<Tree> childrenTrees = TreeFactory.getTreesByParent(folder);
354         for (Tree childTree : childrenTrees) {
355             Inode inode = InodeFactory.getInode(childTree.getChild(),
356                     Inode.class);
357             if (inode instanceof WebAsset) {
358                 WebAsset asset = (WebAsset) inode;
359                 Identifier id = IdentifierFactory.getIdentifierByInode(asset);
360                 List JavaDoc versions = IdentifierFactory
361                         .getVersionsandLiveChildrenOfClass(asset, asset
362                                 .getClass());
363                 Iterator JavaDoc childrenversions = versions.iterator();
364                 while (childrenversions.hasNext()) {
365                     WebAsset version = (WebAsset) childrenversions.next();
366                     objectsList.add(version);
367                 }
368                 objectsList.add(asset);
369                 objectsList.add(id);
370             }
371         }
372     }
373
374     // Copy action
375
public boolean _copyFolder(ActionRequest req, ActionResponse res,
376             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
377         String JavaDoc parentInode = req.getParameter("parent");
378         String JavaDoc inode = req.getParameter("inode");
379         Folder current = (Folder) InodeFactory.getInode(inode, Folder.class);
380
381         if (!FolderFactory.existsFolder(parentInode)) {
382             Host parentHost = (Host) InodeFactory.getInode(parentInode,
383                     Host.class);
384             FolderFactory.copyFolder(current, parentHost);
385         } else {
386             Folder parentFolder = (Folder) InodeFactory.getInode(parentInode,
387                     Folder.class);
388             FolderFactory.copyFolder(current, parentFolder);
389         }
390         return true;
391     }
392
393     // Move action
394
public boolean _moveFolder(ActionRequest req, ActionResponse res,
395             PortletConfig config, ActionForm form, User user) throws Exception JavaDoc {
396         String JavaDoc parentInode = req.getParameter("parent");
397         String JavaDoc inode = req.getParameter("inode");
398         Folder current = (Folder) InodeFactory.getInode(inode, Folder.class);
399
400         if (!FolderFactory.existsFolder(parentInode)) {
401             Host parentHost = (Host) InodeFactory.getInode(parentInode,
402                     Host.class);
403             if (!FolderFactory.moveFolder(current, parentHost)) {
404                 SessionMessages.add(req, "message",
405                         "message.folder.error.foldername.exists");
406                 return false;
407             }
408         } else {
409             Folder parentFolder = (Folder) InodeFactory.getInode(parentInode,
410                     Folder.class);
411             if (parentFolder.getInode() == current.getInode()) {
412                 SessionMessages.add(req, "message",
413                     "message.folder.isthesame");
414                 return false;
415             }
416             if (FolderFactory.isChildFolder(parentFolder, current)) {
417                 SessionMessages.add(req, "message",
418                         "message.folder.ischildfolder");
419                 return false;
420             }
421             if (!FolderFactory.moveFolder(current, parentFolder)) {
422                 SessionMessages.add(req, "message",
423                         "message.folder.error.foldername.exists");
424                 return false;
425             }
426         }
427         return true;
428     }
429
430 }
431
Popular Tags