1 package com.dotmarketing.portlets.links.factories; 2 3 import java.util.List ; 4 5 import javax.portlet.ActionRequest; 6 import javax.portlet.ActionResponse; 7 import javax.portlet.PortletConfig; 8 import javax.servlet.http.HttpServletRequest ; 9 10 import org.apache.struts.action.ActionForm; 11 12 import com.dotmarketing.beans.Host; 13 import com.dotmarketing.beans.Identifier; 14 import com.dotmarketing.beans.Inode; 15 import com.dotmarketing.beans.PermissionAsset; 16 import com.dotmarketing.beans.Tree; 17 import com.dotmarketing.beans.WebAsset; 18 import com.dotmarketing.cache.LiveCache; 19 import com.dotmarketing.cache.PermissionCache; 20 import com.dotmarketing.cache.WorkingCache; 21 import com.dotmarketing.db.DotHibernate; 22 import com.dotmarketing.factories.HostFactory; 23 import com.dotmarketing.factories.IdentifierFactory; 24 import com.dotmarketing.factories.InodeFactory; 25 import com.dotmarketing.factories.PermissionFactory; 26 import com.dotmarketing.factories.TreeFactory; 27 import com.dotmarketing.factories.WebAssetFactory; 28 import com.dotmarketing.menubuilders.RefreshMenus; 29 import com.dotmarketing.portlets.files.model.File; 30 import com.dotmarketing.portlets.folders.model.Folder; 31 import com.dotmarketing.portlets.htmlpages.model.HTMLPage; 32 import com.dotmarketing.portlets.links.model.Link; 33 import com.dotmarketing.util.Config; 34 import com.dotmarketing.util.Logger; 35 import com.dotmarketing.util.WebKeys; 36 import com.liferay.portal.model.Role; 37 import com.liferay.portal.model.User; 38 import com.liferay.portal.struts.ActionException; 39 import com.liferay.portlet.ActionRequestImpl; 40 import com.liferay.util.servlet.SessionMessages; 41 42 43 44 48 public class LinkFactory { 49 50 public static java.util.List getChildrenLinkByOrder(Inode i) { 51 DotHibernate dh = new DotHibernate(Link.class); 52 dh.setQuery( 53 "from inode in class com.dotmarketing.portlets.links.model.Link where ? in inode.parents.elements order by sort_order"); 54 dh.setParam(i.getInode()); 55 return dh.list(); 56 } 57 58 public static java.util.List getActiveLinks() { 59 DotHibernate dh = new DotHibernate(Link.class); 60 dh.setQuery( 61 "from inode in class com.dotmarketing.portlets.links.model.Link"); 62 63 return dh.list(); 64 } 65 66 public static java.util.List getLinksByOrderAndParent(String orderby,Inode o) { 67 DotHibernate dh = new DotHibernate(Link.class); 68 dh.setQuery( 69 "from inode in class com.dotmarketing.portlets.links.model.Link where ? in inode.parents.elements and working = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() + " or live = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() + " order by " + orderby); 70 dh.setParam(o.getInode()); 71 return dh.list(); 72 } 73 74 public static java.util.List getLinksByOrder(String orderby) { 75 DotHibernate dh = new DotHibernate(Link.class); 76 dh.setQuery( 77 "from inode in class com.dotmarketing.portlets.links.model.Link where working = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() + " or live = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue() + " order by " + orderby); 78 79 return dh.list(); 80 } 81 82 public static java.util.List getLinkChildrenByCondition(Inode o,String condition) { 83 try { 84 DotHibernate dh = new DotHibernate(Link.class); 85 dh.setSQLQuery( 86 "SELECT {links.*} from links links, tree tree, inode links_1_ where tree.parent = ? and tree.child = links.inode and links_1_.inode = links.inode and " 87 + condition + " order by url, sort_order"); 88 89 dh.setParam(o.getInode()); 90 91 return dh.list(); 92 } catch (Exception e) { 93 Logger.error(LinkFactory.class, "getLinkChildrenByCondition failed:" + e, e); 94 } 95 96 return new java.util.ArrayList (); 97 } 98 99 public static java.util.List getLinkByCondition(String condition) { 100 DotHibernate dh = new DotHibernate(Link.class); 101 dh.setQuery("from inode in class com.dotmarketing.portlets.links.model.Link where " + condition + " order by url, sort_order"); 102 return dh.list(); 103 } 104 105 106 public static java.util.List getLinkChildren(Inode o) { 107 try { 108 DotHibernate dh = new DotHibernate(Link.class); 109 dh.setQuery("from inode in class com.dotmarketing.portlets.links.model.Link where ? in inode.parents.elements order by inode, sort_order"); 110 dh.setParam(o.getInode()); 111 112 return dh.list(); 113 } catch (Exception e) { 114 Logger.error(LinkFactory.class, "getLinkChildren failed:" + e, e); 115 } 116 117 return new java.util.ArrayList (); 118 } 119 120 public static Link getLinkByLiveAndFolderAndTitle(Inode parent , String title) { 121 try { 122 DotHibernate dh = new DotHibernate(Link.class); 123 dh.setQuery("from inode in class com.dotmarketing.portlets.links.model.Link where ? in inode.parents.elements and title = ? and live = " + com.dotmarketing.db.DbConnectionFactory.getDBTrue()); 124 dh.setParam(parent.getInode()); 125 dh.setParam(title); 126 return (Link) dh.load(); 127 } catch (Exception e) { 128 Logger.error(LinkFactory.class, "getLinkByLiveAndFolderAndTitle failed:" + e, e); 129 } 130 131 return new Link(); 132 } 133 134 public static java.util.List getLinksPerRoleAndCondition(Host host, Role[] roles,String condition) { 135 return getLinksPerRoleAndCondition (host.getInode(), roles, condition); 136 } 137 138 public static java.util.List getLinksPerRoleAndCondition(long hostId, Role[] roles,String condition) { 139 java.util.List entries = new java.util.ArrayList (); 140 java.util.List folders = com.dotmarketing.portlets.folders.factories.FolderFactory.getFoldersByParent(hostId); 141 return com.dotmarketing.portlets.folders.factories.FolderFactory.getFoldersAndEntriesByRoles(folders,entries,roles,Link.class,condition); 142 } 143 144 public static java.util.List getLinksPerRole(Host host, Role[] roles) { 145 return getLinksPerRole (host.getInode(), roles); 146 } 147 148 public static java.util.List getLinksPerRole(long hostId, Role[] roles) { 149 java.util.List entries = new java.util.ArrayList (); 150 java.util.List folders = com.dotmarketing.portlets.folders.factories.FolderFactory.getFoldersByParent(hostId); 151 return com.dotmarketing.portlets.folders.factories.FolderFactory.getFoldersAndEntriesByRoles(folders,entries,roles,Link.class); 152 } 153 162 public static java.util.List getLinksAndPermissionsPerRoleAndCondition(Role[] roles,String condition, int limit, int offset, String orderby) { 163 164 java.util.List <PermissionAsset> entries = new java.util.ArrayList <PermissionAsset>(); 165 orderby = "links." + orderby; 166 java.util.List elements = WebAssetFactory.getAssetsPerConditionWithPermission(condition, Link.class, roles, limit, offset, orderby,0); 167 java.util.Iterator elementsIter = elements.iterator(); 168 169 while (elementsIter.hasNext()) { 170 171 Link link = (Link) elementsIter.next(); 172 Folder folderParent = (Folder) InodeFactory.getParentOfClass(link,Folder.class); 173 174 java.util.List permissions = PermissionCache.getPermissionIdsByRolesFromCache(link,roles); 175 176 PermissionAsset permAsset = new PermissionAsset(); 177 permAsset.setPathToMe(folderParent.getPath()); 178 permAsset.setPermissions(permissions); 179 permAsset.setAsset(link); 180 entries.add(permAsset); 181 } 182 183 return entries; 184 } 185 186 187 public static java.util.List existsLink(String uri) { 188 DotHibernate dh = new DotHibernate(Link.class); 189 dh.setQuery("from identifier in class com.dotmarketing.beans.Identifier where uri = ?"); 190 dh.setParam(uri); 191 return ((java.util.List ) dh.list()); 192 } 193 194 195 public static Link getLinkByFriendlyName(String friendlyName) { 196 DotHibernate dh = new DotHibernate(Link.class); 197 dh.setQuery("from inode in class com.dotmarketing.portlets.links.model.Link where friendly_name = ? and live=" + com.dotmarketing.db.DbConnectionFactory.getDBTrue()); 198 dh.setParam(friendlyName); 199 return (Link) dh.load(); 200 } 201 202 public static com.dotmarketing.portlets.links.model.Link getLinkFromInode(String strInode, String userId) { 203 204 Logger.debug(LinkFactory.class, "running getLinkFromInode(String strInode, String userId)"); 205 206 com.dotmarketing.beans.Inode inode = (com.dotmarketing.beans.Inode) com.dotmarketing.factories.InodeFactory.getInode(strInode, com.dotmarketing.beans.Inode.class); 207 208 if(inode instanceof Link){ 209 210 return ((com.dotmarketing.portlets.links.model.Link) inode); 211 } 212 213 if(inode instanceof File){ 214 return ((com.dotmarketing.portlets.links.model.Link) LinkFactory.getLinkFromFile((File) inode, userId)); 215 } 216 217 if(inode instanceof HTMLPage){ 218 return ((com.dotmarketing.portlets.links.model.Link) LinkFactory.getLinkFromHTMLPage((HTMLPage) inode, userId)); 219 } 220 221 return (new Link()); 222 223 224 } 225 226 public static Link getLinkFromFile(File inFile, String userId) { 227 Logger.debug(LinkFactory.class, "running getLinkFromFile(File inFile, String userId)"); 228 229 com.dotmarketing.beans.Identifier identifier = IdentifierFactory.getIdentifierByInode(inFile); 230 StringBuffer url = new StringBuffer (); 231 232 String protocol = "http://"; 233 Host host = HostFactory.getParentHost(inFile); 234 url.append(host.getHostname()); 235 url.append(identifier.getURI()); 236 237 Logger.debug(LinkFactory.class, "Identifier is " + protocol + url.toString() + "_self"); 238 239 java.util.List linkURIs = LinkFactory.existsLink(protocol + url.toString() + "_self"); 240 241 if(linkURIs.size() > 0){ 242 Identifier linkIdentifier = (Identifier) linkURIs.get(0); 243 return ((Link) IdentifierFactory.getWorkingChildOfClass(linkIdentifier, Link.class)); 244 }else{ 245 Link link = new Link(); 246 247 link.setTitle(inFile.getTitle()); 248 link.setFriendlyName(inFile.getFriendlyName()); 249 link.setProtocal(protocol); 250 link.setUrl(url.toString()); 251 link.setTarget("_self"); 252 link.setInternal(true); 253 254 return ((Link) link); 256 } 257 } 258 259 public static Link getLinkFromHTMLPage(HTMLPage inHTMLPage, String userId){ 260 261 Logger.debug(LinkFactory.class, "running getLinkFromHTMLPage(HTMLPage inHTMLPage String userId)"); 262 263 com.dotmarketing.beans.Identifier identifier = IdentifierFactory.getIdentifierByInode(inHTMLPage); 264 java.lang.StringBuffer url = new java.lang.StringBuffer (); 265 266 267 String protocol = null; 268 if(inHTMLPage.isHttpsRequired()){ 269 protocol = "https://"; 270 }else{ 271 protocol = "http://"; 272 } 273 Host host = HostFactory.getParentHost(inHTMLPage); 274 url.append(host.getHostname()); 275 url.append(identifier.getURI()); 276 277 278 java.util.List linkURIs = LinkFactory.existsLink(protocol + url.toString() + "_self"); 279 if(linkURIs.size() > 0){ 280 Identifier linkIdentifier = (Identifier) linkURIs.get(0); 281 282 283 return ((Link) IdentifierFactory.getWorkingChildOfClass(linkIdentifier, Link.class)); 284 }else{ 285 Link link = new Link(); 286 Folder parentFolder = (Folder) InodeFactory.getParentOfClass(inHTMLPage,Folder.class); 287 288 link.setTitle(inHTMLPage.getTitle()); 289 link.setFriendlyName(inHTMLPage.getFriendlyName()); 290 link.setProtocal(protocol); 291 link.setUrl(url.toString()); 292 link.setTarget("_self"); 293 link.setInternal(true); 294 295 WebAssetFactory.createAsset(link,userId,parentFolder); 296 return ((Link) link); 297 } 298 } 299 300 public static Link copyLink (Link currentLink, Folder parent) { 301 302 Link newLink = new Link(); 303 304 newLink.copy(currentLink); 305 newLink.setLocked(false); 306 newLink.setLive(false); 307 if (existsLinkWithTitleInFolder(currentLink.getTitle(), parent)) { 308 newLink.setFriendlyName(currentLink.getFriendlyName() + " (COPY) "); 309 newLink.setTitle(currentLink.getTitle() + " (COPY) "); 310 } else { 311 newLink.setFriendlyName(currentLink.getFriendlyName()); 312 newLink.setTitle(currentLink.getTitle()); 313 } 314 newLink.setProtocal(currentLink.getProtocal()); 315 316 InodeFactory.saveInode(newLink); 318 319 parent.addChild(newLink); 321 322 com.dotmarketing.factories.IdentifierFactory.createNewIdentifier(newLink, parent); 324 325 PermissionFactory.copyPermissions(currentLink, newLink); 327 328 return newLink; 329 330 } 331 332 338 public static boolean moveLink(Link currentLink, Folder parent) { 339 340 if (existsLinkWithTitleInFolder(currentLink.getTitle(), parent)) 341 return false; 342 343 Identifier identifier = com.dotmarketing.factories.IdentifierFactory.getParentIdentifier(currentLink); 344 345 WebAsset workingWebAsset = (WebAsset) IdentifierFactory.getWorkingChildOfClass(identifier, Link.class); 347 WebAsset liveWebAsset = (WebAsset) IdentifierFactory.getLiveChildOfClass(identifier, Link.class); 349 350 Folder oldParent = (Folder) InodeFactory.getParentOfClass(workingWebAsset, Folder.class); 352 oldParent.deleteChild(workingWebAsset); 353 if ((liveWebAsset != null) && (liveWebAsset.getInode() > 0)) { 354 oldParent.deleteChild(liveWebAsset); 355 } 356 357 parent.addChild(workingWebAsset); 359 if ((liveWebAsset != null) && (liveWebAsset.getInode() > 0)) { 360 parent.addChild(liveWebAsset); 361 } 362 363 Host newHost = HostFactory.getParentHost(parent); 366 identifier.setHostInode(newHost.getInode()); 367 identifier.setURI(workingWebAsset.getURI(parent)); 368 InodeFactory.saveInode(identifier); 369 370 return true; 371 372 } 373 374 private static boolean existsLinkWithTitleInFolder(String title, Folder parent) { 375 Link link = (Link) InodeFactory.getChildOfClassbyCondition(parent, Link.class, "title like '" + title + "'"); 376 return (link.getInode() > 0); 377 } 378 379 public static boolean renameLink (Link link, String newName, User user) throws Exception { 380 381 if (!PermissionFactory.doesUserHavePermission(link, Config.getIntProperty("PERMISSION_WRITE"), user)) 383 throw new ActionException(WebKeys.USER_PERMISSIONS_EXCEPTION); 384 385 Folder folder = (Folder)InodeFactory.getParentOfClass(link, Folder.class); 387 388 Identifier ident = IdentifierFactory.getIdentifierByInode(link); 389 390 Link newLinkVersion = new Link(); 391 newLinkVersion.copy(link); 392 newLinkVersion.setTitle(newName); 394 newLinkVersion.setFriendlyName(newName); 395 396 if(existsLinkWithTitleInFolder(newName, folder) || link.isLocked()) 397 return false; 398 399 List <Link> versions = IdentifierFactory.getVersionsandLiveandWorkingChildrenOfClass(ident, Link.class); 400 401 for (Link version : versions) { 402 403 version.setTitle(newName); 405 version.setFriendlyName(newName); 406 407 if (version.isLive()) 408 LiveCache.addToLiveAssetToCache(version); 409 if (version.isWorking()) 410 WorkingCache.addToWorkingAssetToCache(version); 411 412 InodeFactory.saveInode(version); 413 414 } 415 416 ident.setURI(link.getURI(folder)); 417 InodeFactory.saveInode(ident); 418 419 RefreshMenus.deleteMenus(); 420 421 return true; 422 423 } 424 425 } 426 | Popular Tags |