1 package com.dotmarketing.portlets.folders.action; 2 3 import java.util.HashSet ; 4 import java.util.Iterator ; 5 import java.util.List ; 6 import java.util.Set ; 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 ; 13 import javax.servlet.http.HttpSession ; 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 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 { 53 54 ActionRequestImpl reqImpl = (ActionRequestImpl) req; 56 HttpServletRequest httpReq = reqImpl.getHttpServletRequest(); 57 58 String cmd = req.getParameter(Constants.CMD); 59 60 User user = _getUser(req); 61 62 String referer = ""; 64 if (UtilMethods.isSet(req.getParameter("referer"))) { 65 referer = req.getParameter("referer"); 66 } else { 67 java.util.Map <String , String []> params = new java.util.HashMap <String , String []>(); 68 params.put("struts_action", 69 new String [] { "/ext/folders/view_folders" }); 70 params.put("openNodes", new String [] { req.getParameter("openNodes") }); 71 params.put("view", new String [] { req.getParameter("view") }); 72 params.put("content", new String [] { 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 forward = "portlet.ext.folders.edit_folder"; 81 82 DotHibernate.startTransaction(); 83 84 try { 85 _editFolder(req, res, config, form); 86 87 } catch (Exception ae) { 88 _handleException(ae, req); 89 return; 90 } 91 92 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 ae) { 103 _handleException(ae, req); 104 return; 105 } 106 } 107 108 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 ae) { 118 _handleException(ae, req); 119 return; 120 } 121 return; 122 } 123 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 ae) { 133 _handleException(ae, req); 134 } 135 _sendToReferral(req, res, referer); 136 return; 137 } 138 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 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 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 169 public void _editFolder(ActionRequest req, ActionResponse res, 170 PortletConfig config, ActionForm form) throws Exception { 171 172 Folder f = (Folder) InodeFactory.getInode(req.getParameter("inode"), 173 Folder.class); 174 req.setAttribute(WebKeys.FOLDER_EDIT, f); 175 176 User user = PortalUtil.getUser(req); 178 _checkUserPermissions(f, user, Config.getIntProperty("PERMISSION_READ")); 179 180 if (f.getInode() == 0) { 182 String 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 req.setAttribute(WebKeys.FOLDER_SHOWMENU, new Boolean (f.isShowOnMenu())); 200 201 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 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 <String > reservedFolderNames = new java.util.ArrayList <String >(); 226 reservedFolderNames.add("WEB-INF"); 227 reservedFolderNames.add("META-INF"); 228 229 if (reservedFolderNames.contains(f.getName())) { 230 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 SessionMessages.add(req, "message", 250 "message.folder.alreadyexists"); 251 return false; 252 } else { 253 boolean previousShowMenu = ((Boolean ) 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 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 f.setHostInode(host.getInode()); 277 278 if (previousShowMenu) { 279 RefreshMenus.deleteMenus(); 281 } else if (previousShowMenu != f.isShowOnMenu()) { 282 RefreshMenus.deleteMenus(); 285 } 286 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 { 296 297 Folder f = (Folder) req.getAttribute(WebKeys.FOLDER_EDIT); 298 299 ActionRequestImpl reqImpl = (ActionRequestImpl) req; 301 HttpServletRequest httpReq = reqImpl.getHttpServletRequest(); 302 HttpSession session = httpReq.getSession(); 304 305 String selectedFolder = ((String ) session 306 .getAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED) != null) ? (String ) 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 SessionMessages.add(req, "message", "message.folder.delete"); 323 324 } 325 326 private void _deleteFolders(Folder folder, String selectedFolder, 327 HttpSession session) { 328 Set <Inode> objectsToRemove = new HashSet <Inode>(); 329 objectsToRemove.add(folder); 330 331 List children = InodeFactory.getChildrenClass(folder, Folder.class); 332 Iterator 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 _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 <Inode> objectsList) { 353 List <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 versions = IdentifierFactory 361 .getVersionsandLiveChildrenOfClass(asset, asset 362 .getClass()); 363 Iterator 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 public boolean _copyFolder(ActionRequest req, ActionResponse res, 376 PortletConfig config, ActionForm form, User user) throws Exception { 377 String parentInode = req.getParameter("parent"); 378 String 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 public boolean _moveFolder(ActionRequest req, ActionResponse res, 395 PortletConfig config, ActionForm form, User user) throws Exception { 396 String parentInode = req.getParameter("parent"); 397 String 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 |