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.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 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 { 54 55 ActionRequestImpl reqImpl = (ActionRequestImpl)req; 57 HttpServletRequest httpReq = reqImpl.getHttpServletRequest(); 58 59 String cmd = req.getParameter(Constants.CMD); 60 61 String referer = ""; 63 if (UtilMethods.isSet(req.getParameter("referer"))) { 64 referer = req.getParameter("referer"); 65 } else { 66 java.util.Map <String , String []> params = new java.util.HashMap <String , String []>(); 67 params.put("struts_action", 68 new String [] { "/ext/folders/view_folders" }); 69 params.put("openNodes", new String [] { req.getParameter("openNodes") }); 70 params.put("view", new String [] { req.getParameter("view") }); 71 params.put("content", new String [] { 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 forward = "portlet.ext.folders.edit_host"; 80 81 DotHibernate.startTransaction(); 82 83 try { 84 _editHost(req, res, config, form); 85 86 } catch (Exception ae) { 87 _handleException(ae, req); 88 return; 89 } 90 91 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 ae) { 107 _handleException(ae, req); 108 return; 109 } 110 } 111 112 113 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 ae) { 124 _handleException(ae, req); 125 return; 126 } 127 } 128 129 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 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 152 public void _editHost(ActionRequest req, ActionResponse res,PortletConfig config,ActionForm form) 153 throws Exception { 154 Host host = (Host) InodeFactory.getInode(req.getParameter("inode"),Host.class); 155 req.setAttribute(WebKeys.HOST_EDIT, host); 156 157 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 { 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 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 defaultHost.setDefault(false); 183 InodeFactory.saveInode(defaultHost); 184 HostCache.setDefaultHost(host); 186 } 187 } 188 InodeFactory.saveInode(host); 190 191 _applyPermissions(req, WebKeys.HOST_EDIT); 193 194 HostCache.clearCache(); 196 197 SessionMessages.add(req, "message", "message.host.save"); 199 } 200 201 public void _setDefaultHost(ActionRequest req, ActionResponse res,PortletConfig config,ActionForm form) 202 throws Exception { 203 Host host = ( Host ) req.getAttribute(WebKeys.HOST_EDIT); 204 if (host.isDefault()) { 206 SessionMessages.add(req, "message", "message.host.already.default"); 207 return; 208 } 209 Host defaultHost = HostFactory.getDefaultHost(); 211 if (defaultHost.getInode()>0) { 212 defaultHost.setDefault(false); 214 InodeFactory.saveInode(defaultHost); 216 } 217 host.setDefault(true); 219 InodeFactory.saveInode(host); 221 HostCache.setDefaultHost(host); 223 } 224 225 public void _deleteHost(ActionRequest req, ActionResponse res,PortletConfig config,ActionForm form) 226 throws Exception { 227 228 Host host = ( Host ) req.getAttribute(WebKeys.HOST_EDIT); 229 if (host.isDefault()) { 231 SessionMessages.add(req, "message", "message.host.cannot.delete.default"); 232 return; 233 } 234 List hosts = HostFactory.getAllHosts(); 236 if (hosts.size()==1) { 238 SessionMessages.add(req, "message", "message.host.cannot.delete.last"); 240 return; 241 } 242 243 ActionRequestImpl reqImpl = (ActionRequestImpl)req; 245 HttpServletRequest httpReq = reqImpl.getHttpServletRequest(); 246 HttpSession session = httpReq.getSession(); 248 249 String selectedFolder = ((String )session.getAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED)!=null) ? (String )session.getAttribute(com.dotmarketing.util.WebKeys.FOLDER_SELECTED) : ""; 250 251 List folders = InodeFactory.getChildrenClass(host, Folder.class); 253 Iterator it = folders.iterator(); 254 255 Set toDelete = new HashSet (); 256 257 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 _getFoldersAndAssetsToDelete(toDelete, f, selectedFolder,session); 265 toDelete.add(f); 266 } 267 268 it = toDelete.iterator(); 270 while (it.hasNext()) { 271 Inode in = (Inode) it.next(); 272 InodeFactory.deleteInode(in); 273 } 274 275 InodeFactory.deleteInode(host); 277 278 HostCache.clearCache(); 280 281 SessionMessages.add(req, "message", "message.host.delete"); 283 284 } 285 286 287 private void _getFoldersAndAssetsToDelete(Set toDelete, Folder parent, String selectedFolder,HttpSession session) { 288 _getChildrenAssetsToDelete (toDelete, parent); 290 291 List children = InodeFactory.getChildrenClass(parent,Folder.class); 293 Iterator 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 toDelete, Folder folder) { 302 Set children = new HashSet (InodeFactory.getChildrenClass(folder, HTMLPage.class)); 304 Iterator it = children.iterator(); 305 while (it.hasNext()) { 306 Object 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 allversions = InodeFactory.getChildrenClass(id, asset.getClass()); 312 Iterator childrenversions = allversions.iterator(); 313 while (childrenversions.hasNext()) { 314 WebAsset version = (WebAsset) childrenversions.next(); 315 toDelete.add(version); 316 } 317 } 318 } 319 children = new HashSet (InodeFactory.getChildrenClass(folder, Container.class)); 321 it = children.iterator(); 322 while (it.hasNext()) { 323 Object 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 allversions = InodeFactory.getChildrenClass(id, asset.getClass()); 329 Iterator childrenversions = allversions.iterator(); 330 while (childrenversions.hasNext()) { 331 WebAsset version = (WebAsset) childrenversions.next(); 332 toDelete.add(version); 333 } 334 } 335 } 336 children = new HashSet (InodeFactory.getChildrenClass(folder, Contentlet.class)); 338 it = children.iterator(); 339 while (it.hasNext()) { 340 Object 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 allversions = InodeFactory.getChildrenClass(id, asset.getClass()); 346 Iterator childrenversions = allversions.iterator(); 347 while (childrenversions.hasNext()) { 348 WebAsset version = (WebAsset) childrenversions.next(); 349 toDelete.add(version); 350 } 351 } 352 } 353 children = new HashSet (InodeFactory.getChildrenClass(folder, Link.class)); 355 it = children.iterator(); 356 while (it.hasNext()) { 357 Object 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 allversions = InodeFactory.getChildrenClass(id, asset.getClass()); 363 Iterator childrenversions = allversions.iterator(); 364 while (childrenversions.hasNext()) { 365 WebAsset version = (WebAsset) childrenversions.next(); 366 toDelete.add(version); 367 } 368 } 369 } 370 children = new HashSet (InodeFactory.getChildrenClass(folder, Template.class)); 372 it = children.iterator(); 373 while (it.hasNext()) { 374 Object 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 allversions = InodeFactory.getChildrenClass(id, asset.getClass()); 380 Iterator childrenversions = allversions.iterator(); 381 while (childrenversions.hasNext()) { 382 WebAsset version = (WebAsset) childrenversions.next(); 383 toDelete.add(version); 384 } 385 } 386 } 387 children = new HashSet (InodeFactory.getChildrenClass(folder, File.class)); 389 it = children.iterator(); 390 while (it.hasNext()) { 391 Object 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 allversions = InodeFactory.getChildrenClass(id, asset.getClass()); 397 Iterator 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 |