KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > portlets > links > factories > LinkFactory


1 package com.dotmarketing.portlets.links.factories;
2
3 import java.util.List JavaDoc;
4
5 import javax.portlet.ActionRequest;
6 import javax.portlet.ActionResponse;
7 import javax.portlet.PortletConfig;
8 import javax.servlet.http.HttpServletRequest JavaDoc;
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 /**
45  *
46  * @author will
47  */

48 public class LinkFactory {
49     
50     public static java.util.List JavaDoc 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 JavaDoc 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 JavaDoc getLinksByOrderAndParent(String JavaDoc 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 JavaDoc getLinksByOrder(String JavaDoc 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 JavaDoc getLinkChildrenByCondition(Inode o,String JavaDoc 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 JavaDoc e) {
93             Logger.error(LinkFactory.class, "getLinkChildrenByCondition failed:" + e, e);
94         }
95
96         return new java.util.ArrayList JavaDoc();
97     }
98
99     public static java.util.List JavaDoc getLinkByCondition(String JavaDoc 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 JavaDoc 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 JavaDoc e) {
114             Logger.error(LinkFactory.class, "getLinkChildren failed:" + e, e);
115         }
116
117         return new java.util.ArrayList JavaDoc();
118     }
119
120     public static Link getLinkByLiveAndFolderAndTitle(Inode parent , String JavaDoc 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 JavaDoc e) {
128             Logger.error(LinkFactory.class, "getLinkByLiveAndFolderAndTitle failed:" + e, e);
129         }
130
131         return new Link();
132     }
133     
134     public static java.util.List JavaDoc getLinksPerRoleAndCondition(Host host, Role[] roles,String JavaDoc condition) {
135         return getLinksPerRoleAndCondition (host.getInode(), roles, condition);
136     }
137     
138     public static java.util.List JavaDoc getLinksPerRoleAndCondition(long hostId, Role[] roles,String JavaDoc condition) {
139         java.util.List JavaDoc entries = new java.util.ArrayList JavaDoc();
140         java.util.List JavaDoc 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 JavaDoc getLinksPerRole(Host host, Role[] roles) {
145         return getLinksPerRole (host.getInode(), roles);
146     }
147     
148     public static java.util.List JavaDoc getLinksPerRole(long hostId, Role[] roles) {
149         java.util.List JavaDoc entries = new java.util.ArrayList JavaDoc();
150         java.util.List JavaDoc 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 /*
154     public static java.util.List getLinksAndPermissionsPerRole(Role[] roles) {
155
156         java.util.List entries = new java.util.ArrayList();
157         com.dotmarketing.portlets.folders.model.Folder rootFolder = com.dotmarketing.portlets.folders.factories.FolderFactory.getRootFolder();
158         java.util.List folders = com.dotmarketing.portlets.folders.factories.FolderFactory.getFoldersByParent(rootFolder.getInode());
159         return com.dotmarketing.portlets.folders.factories.FolderFactory.getFoldersAndEntriesAndPermissionsByRoles(folders,entries,roles,Link.class);
160     }
161 */

162     public static java.util.List JavaDoc getLinksAndPermissionsPerRoleAndCondition(Role[] roles,String JavaDoc condition, int limit, int offset, String JavaDoc orderby) {
163
164         java.util.List JavaDoc<PermissionAsset> entries = new java.util.ArrayList JavaDoc<PermissionAsset>();
165         orderby = "links." + orderby;
166         java.util.List JavaDoc elements = WebAssetFactory.getAssetsPerConditionWithPermission(condition, Link.class, roles, limit, offset, orderby,0);
167         java.util.Iterator JavaDoc 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 JavaDoc 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 JavaDoc existsLink(String JavaDoc 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 JavaDoc) dh.list());
192     }
193     
194     
195     public static Link getLinkByFriendlyName(String JavaDoc 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 JavaDoc strInode, String JavaDoc 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 JavaDoc userId) {
227         Logger.debug(LinkFactory.class, "running getLinkFromFile(File inFile, String userId)");
228
229         com.dotmarketing.beans.Identifier identifier = IdentifierFactory.getIdentifierByInode(inFile);
230         StringBuffer JavaDoc url = new StringBuffer JavaDoc();
231         
232         String JavaDoc 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 JavaDoc 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             // WebAssetFactory.createAsset(link,userId,parentFolder);
255
return ((Link) link);
256         }
257     }
258     
259     public static Link getLinkFromHTMLPage(HTMLPage inHTMLPage, String JavaDoc 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 JavaDoc url = new java.lang.StringBuffer JavaDoc();
265         
266         
267         String JavaDoc 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 JavaDoc 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         //persists the webasset
317
InodeFactory.saveInode(newLink);
318
319         //adding to the parent folder
320
parent.addChild(newLink);
321
322         //creates new identifier for this webasset and persists it
323
com.dotmarketing.factories.IdentifierFactory.createNewIdentifier(newLink, parent);
324
325         //Copy permissions
326
PermissionFactory.copyPermissions(currentLink, newLink);
327         
328         return newLink;
329
330     }
331
332     /**
333      * Method used to move a link from folder
334      * @param currentLink link to move
335      * @param parent new parent folder
336      * @return true if the move succeced, false if another link with the same name exists on the destination
337      */

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         // gets working container
346
WebAsset workingWebAsset = (WebAsset) IdentifierFactory.getWorkingChildOfClass(identifier, Link.class);
347         // gets live container
348
WebAsset liveWebAsset = (WebAsset) IdentifierFactory.getLiveChildOfClass(identifier, Link.class);
349
350         // gets old parent
351
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         // Adding to new parent
358
parent.addChild(workingWebAsset);
359         if ((liveWebAsset != null) && (liveWebAsset.getInode() > 0)) {
360             parent.addChild(liveWebAsset);
361         }
362
363         // gets identifier for this webasset and changes the uri and
364
// persists it
365
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 JavaDoc 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 JavaDoc newName, User user) throws Exception JavaDoc {
380
381         // Checking permissions
382
if (!PermissionFactory.doesUserHavePermission(link, Config.getIntProperty("PERMISSION_WRITE"), user))
383             throw new ActionException(WebKeys.USER_PERMISSIONS_EXCEPTION);
384
385         //getting old file properties
386
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         // sets filename for this new file
393
newLinkVersion.setTitle(newName);
394         newLinkVersion.setFriendlyName(newName);
395
396         if(existsLinkWithTitleInFolder(newName, folder) || link.isLocked())
397             return false;
398
399         List JavaDoc<Link> versions = IdentifierFactory.getVersionsandLiveandWorkingChildrenOfClass(ident, Link.class);
400         
401         for (Link version : versions) {
402
403             // sets filename for this new file
404
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