KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > cache > PermissionCache


1 /*
2  * Created on May 30, 2005
3  *
4  * TODO To change the template for this generated file go to
5  * Window - Preferences - Java - Code Style - Code Templates
6  */

7 package com.dotmarketing.cache;
8
9 import java.io.FileInputStream JavaDoc;
10 import java.io.FileNotFoundException JavaDoc;
11 import java.io.IOException JavaDoc;
12 import java.util.ArrayList JavaDoc;
13 import java.util.Iterator JavaDoc;
14 import java.util.List JavaDoc;
15 import java.util.Properties JavaDoc;
16
17 import com.dotmarketing.beans.Host;
18 import com.dotmarketing.beans.Identifier;
19 import com.dotmarketing.beans.Inode;
20 import com.dotmarketing.beans.Permission;
21 import com.dotmarketing.beans.WebAsset;
22 import com.dotmarketing.cms.factories.PublicRoleFactory;
23 import com.dotmarketing.factories.HostFactory;
24 import com.dotmarketing.factories.IdentifierFactory;
25 import com.dotmarketing.factories.InodeFactory;
26 import com.dotmarketing.factories.PermissionFactory;
27 import com.dotmarketing.portlets.files.model.File;
28 import com.dotmarketing.portlets.folders.model.Folder;
29 import com.dotmarketing.portlets.htmlpages.model.HTMLPage;
30 import com.dotmarketing.util.Config;
31 import com.dotmarketing.util.Logger;
32 import com.dotmarketing.util.UtilMethods;
33 import com.liferay.portal.ejb.RoleLocalManagerUtil;
34 import com.liferay.portal.model.Role;
35
36 /**
37  *
38  * @author salvador & david
39  */

40 public class PermissionCache {
41     // Cache to store the data
42
private static DotCache cache;
43
44     // Name of the variable with the provider name
45
private static String JavaDoc providerEntry = "CACHE_PROVIDER";
46
47     // Name of the variable with the properties path
48
private static String JavaDoc propertiesEntry = "CACHE_PROPERTIES_FILE";
49
50     // region's name for the cache
51
private static String JavaDoc regionName = "PermissionCache";
52
53     static {
54         init();
55     }
56
57     public static List JavaDoc addToPermissionCache(String JavaDoc key, List JavaDoc permissions) {
58         // If the key is in the cache, first I remove it
59
if (cache.get(key) != null) {
60             cache.remove(String.valueOf(key));
61         }
62         // Add the key to the cache
63
cache.put(key, permissions);
64
65         return permissions;
66     }
67
68     public static List JavaDoc addToPermissionCache(Host host) {
69         // Obtain the read, write and publish permissions
70
List JavaDoc permissions = PermissionFactory.getPermissions(host);
71         String JavaDoc key = String.valueOf(host.getInode());
72         return addToPermissionCache(key, permissions);
73     }
74
75     public static List JavaDoc addToPermissionCache(Folder folder) {
76         List JavaDoc permissions = PermissionFactory.getPermissionsFromFolder(folder);
77         addToPermissionCache(String.valueOf(folder.getInode()), permissions);
78
79         List JavaDoc webPages = InodeFactory.getChildrenClass(folder, HTMLPage.class);
80         Iterator JavaDoc it = webPages.iterator();
81         while (it.hasNext()) {
82             HTMLPage page = (HTMLPage) it.next();
83             addToPermissionCache(page);
84         }
85         return permissions;
86     }
87
88     public static List JavaDoc addToPermissionCache(WebAsset webAsset) {
89         
90         long id = webAsset.getIdentifier();
91
92         if(id == 0){
93             id = IdentifierCache.getIdentifierByInodeFromCache(webAsset).getInode();
94         }
95
96
97         List JavaDoc permissions = PermissionFactory.getPermissionsFromWebAsset(webAsset);
98         if (webAsset instanceof HTMLPage) {
99             Folder parentFolder = (Folder) InodeFactory.getParentOfClass(webAsset, Folder.class);
100             Host parentHost = HostFactory.getParentHost(webAsset);
101             // Saving permissions from uri
102
addToPermissionCache(parentHost.getInode() + "-" + webAsset.getURI(parentFolder), permissions);
103             addToPermissionCache(String.valueOf(id), permissions);
104         } else {
105             addToPermissionCache(String.valueOf(id), permissions);
106         }
107
108         return permissions;
109     }
110
111     public static List JavaDoc addToPermissionCache(Identifier id) {
112         if (id == null || id.getInode() == 0) {
113             return new ArrayList JavaDoc();
114         }
115
116         List JavaDoc permissions = PermissionFactory.getPermissionsFromIdentifier(id);
117         addToPermissionCache(String.valueOf(id.getInode()), permissions);
118
119         return permissions;
120     }
121
122     public static List JavaDoc addToPermissionCache(long hostId, String JavaDoc URI) {
123         Identifier id = IdentifierFactory.getIdentifierByURI(URI, hostId);
124
125         if (id.getInode() == 0)
126             return new ArrayList JavaDoc();
127
128         WebAsset asset = null;
129
130         if (URI.endsWith("." + Config.getStringProperty("VELOCITY_PAGE_EXTENSION"))) {
131             asset = (WebAsset) IdentifierFactory.getWorkingChildOfClass(id, HTMLPage.class);
132         } else {
133             asset = (WebAsset) IdentifierFactory.getWorkingChildOfClass(id, File.class);
134         }
135
136         Folder parentFolder = (Folder) InodeFactory.getParentOfClass(asset, Folder.class);
137         List JavaDoc permissions = PermissionFactory.getPermissionsFromWebAsset(asset);
138
139         if (asset instanceof HTMLPage) {
140             Host parentHost = HostFactory.getParentHost(asset);
141             // Saving permissions from uri
142
PermissionCache.addToPermissionCache(parentHost.getInode() + "-" + asset.getURI(parentFolder), permissions);
143             addToPermissionCache(String.valueOf(id.getInode()), permissions);
144         } else {
145             PermissionCache.addToPermissionCache(String.valueOf(parentFolder.getInode()), permissions);
146         }
147
148         return permissions;
149     }
150
151     public static List JavaDoc getPermissionsFromCache(Host host) {
152         String JavaDoc key = String.valueOf(host.getInode());
153         List JavaDoc perms = (List JavaDoc) cache.get(key);
154         // If not in the cache, I load it
155
if (perms == null) {
156             // Populate the cache entry
157
perms = PermissionCache.addToPermissionCache(host);
158         }
159         return perms;
160     }
161
162     public static List JavaDoc getPermissionsFromCache(Folder folder) {
163         String JavaDoc key = String.valueOf(folder.getInode());
164         List JavaDoc perms = (List JavaDoc) cache.get(key);
165         // If not in the cache, I load it
166
if (perms == null) {
167             // Populate the cache entry
168
perms = PermissionCache.addToPermissionCache(folder);
169         }
170         return perms;
171     }
172
173     public static List JavaDoc getPermissionsFromCache(String JavaDoc URI, Host host) {
174         return getPermissionsFromCache(URI, host.getInode());
175     }
176
177     public static List JavaDoc getPermissionsFromCache(String JavaDoc URI, long hostId) {
178         String JavaDoc key = String.valueOf(hostId) + "-" + URI;
179         List JavaDoc perms = (List JavaDoc) cache.get(key);
180         if (perms == null) {
181             // Populate the cache entry
182
perms = addToPermissionCache(hostId, URI);
183         }
184         List JavaDoc emptyperms = new ArrayList JavaDoc();
185         return (perms == null ? emptyperms : perms);
186     }
187
188     /**
189      * It method retrieves a collection of set of roles for the parent folder of
190      * HTMLPages and Files Webassets. It method retrieves read, write and
191      * publish permissions sets.
192      *
193      * @param webAsset
194      * The HTML/File Asset
195      * @return An array of sets of roles that have read, write and publish
196      * permissions over this asset.<br>
197      * The array position 0 has the set of roles that has read
198      * permissions.<br>
199      * The array position 1 has the set of roles that has write
200      * permissions.<br>
201      * The array position 2 has the set of roles that has publish
202      * permissions.
203      */

204     @SuppressWarnings JavaDoc("unchecked")
205     public static List JavaDoc<Permission> getPermissionsFromCache(WebAsset webAsset) {
206         long id = webAsset.getIdentifier();
207
208         if(id == 0){
209             id = IdentifierCache.getIdentifierByInodeFromCache(webAsset).getInode();
210         }
211
212         // Return of no Permissions
213
if (id == 0) {
214             return new ArrayList JavaDoc<Permission>();
215         }
216
217         List JavaDoc<Permission> permissions = (List JavaDoc<Permission>) cache.get(String.valueOf(id));
218         if (permissions == null) {
219             permissions = addToPermissionCache(webAsset);
220         }
221
222         return permissions;
223     }
224
225     /**
226      * It method retrieves a collection of set of roles for the parent folder of
227      * HTMLPages and Files Webassets. It method retrieves read, write and
228      * publish permissions sets.
229      *
230      * @param webAsset
231      * The HTML/File Asset
232      * @return An array of sets of roles that have read, write and publish
233      * permissions over this asset.<br>
234      * The array position 0 has the set of roles that has read
235      * permissions.<br>
236      * The array position 1 has the set of roles that has write
237      * permissions.<br>
238      * The array position 2 has the set of roles that has publish
239      * permissions.
240      */

241     public static List JavaDoc getPermissionsFromCache(Identifier id) {
242
243         // Return of no Permissions
244
if (id.getInode() == 0) {
245             return new ArrayList JavaDoc();
246         }
247
248         List JavaDoc permissions = (List JavaDoc) cache.get(String.valueOf(id.getInode()));
249         if (permissions == null) {
250             permissions = addToPermissionCache(id);
251         }
252
253         return permissions;
254     }
255
256     public static List JavaDoc getRoleNamesWithReadPermissionFromCache(String JavaDoc URI, Host host) {
257         return getRoleNamesWithReadPermissionFromCache(URI, host.getInode());
258     }
259
260     public static List JavaDoc getRoleNamesWithReadPermissionFromCache(String JavaDoc URI, long hostId) {
261         List JavaDoc perms = getPermissionsFromCache(URI, hostId);
262         List JavaDoc<String JavaDoc> readPerms = new ArrayList JavaDoc<String JavaDoc>();
263         Iterator JavaDoc it = perms.iterator();
264         int permissionReadCode = Config.getIntProperty("PERMISSION_READ");
265         while (it.hasNext()) {
266             Permission perm = (Permission) it.next();
267             if (perm.getPermission() == permissionReadCode) {
268                 Role role;
269                 try {
270                     role = RoleLocalManagerUtil.getRoleById(String.valueOf(perm.getRoleId()));
271                     readPerms.add(role.getName());
272                 } catch (Exception JavaDoc e) {
273                 }
274             }
275         }
276         return readPerms;
277     }
278
279     /**
280      * It method retrieves a read permissions set of roles for the parent folder
281      * of HTMLPages and Files Webassets. It methods use and update (if
282      * necessary) the permissions cache.
283      *
284      * @param URI
285      * The HTML/File Asset URI
286      * @return A set of roles that have read permission over this asset
287      */

288     public static List JavaDoc getReadPermissionsFromCache(String JavaDoc URI, Host host) {
289         return getReadPermissionsFromCache(URI, host.getInode());
290     }
291
292     public static List JavaDoc getReadPermissionsFromCache(String JavaDoc URI, long hostId) {
293         List JavaDoc perms = getPermissionsFromCache(URI, hostId);
294         List JavaDoc<Permission> readPerms = new ArrayList JavaDoc<Permission>();
295         Iterator JavaDoc it = perms.iterator();
296         int permissionReadCode = Config.getIntProperty("PERMISSION_READ");
297         while (it.hasNext()) {
298             Permission perm = (Permission) it.next();
299             if (perm.getPermission() == permissionReadCode)
300                 readPerms.add(perm);
301         }
302         return readPerms;
303     }
304
305     public static List JavaDoc getWritePermissionsFromCache(String JavaDoc URI, Host host) {
306         return getWritePermissionsFromCache(URI, host.getInode());
307     }
308
309     public static List JavaDoc getWritePermissionsFromCache(String JavaDoc URI, long hostId) {
310         List JavaDoc perms = getPermissionsFromCache(URI, hostId);
311         List JavaDoc<Permission> readPerms = new ArrayList JavaDoc<Permission>();
312         Iterator JavaDoc it = perms.iterator();
313         int permissionReadCode = Config.getIntProperty("PERMISSION_WRITE");
314         while (it.hasNext()) {
315             Permission perm = (Permission) it.next();
316             if (perm.getPermission() == permissionReadCode)
317                 readPerms.add(perm);
318         }
319         return readPerms;
320     }
321
322     public static List JavaDoc getPublishPermissionsFromCache(String JavaDoc URI, Host host) {
323         return getPublishPermissionsFromCache(URI, host.getInode());
324     }
325
326     public static List JavaDoc getPublishPermissionsFromCache(String JavaDoc URI, long hostId) {
327         List JavaDoc perms = getPermissionsFromCache(URI, hostId);
328         List JavaDoc<Permission> readPerms = new ArrayList JavaDoc<Permission>();
329         Iterator JavaDoc it = perms.iterator();
330         int permissionReadCode = Config.getIntProperty("PERMISSION_PUBLISH");
331         while (it.hasNext()) {
332             Permission perm = (Permission) it.next();
333             if (perm.getPermission() == permissionReadCode)
334                 readPerms.add(perm);
335         }
336         return readPerms;
337     }
338
339     public static List JavaDoc getReadPermissionsFromCache(Host host) {
340         List JavaDoc perms = getPermissionsFromCache(host);
341         List JavaDoc readPerms = new ArrayList JavaDoc();
342         Iterator JavaDoc it = perms.iterator();
343         int permissionReadCode = Config.getIntProperty("PERMISSION_READ");
344         while (it.hasNext()) {
345             Permission perm = (Permission) it.next();
346             if (perm.getPermission() == permissionReadCode)
347                 readPerms.add(perm);
348         }
349         return readPerms;
350     }
351
352     public static List JavaDoc getWritePermissionsFromCache(Host host) {
353         List JavaDoc perms = getPermissionsFromCache(host);
354         List JavaDoc readPerms = new ArrayList JavaDoc();
355         Iterator JavaDoc it = perms.iterator();
356         int permissionReadCode = Config.getIntProperty("PERMISSION_WRITE");
357         while (it.hasNext()) {
358             Permission perm = (Permission) it.next();
359             if (perm.getPermission() == permissionReadCode)
360                 readPerms.add(perm);
361         }
362         return readPerms;
363     }
364
365     public static List JavaDoc getPublishPermissionsFromCache(Host host) {
366         List JavaDoc perms = getPermissionsFromCache(host);
367         List JavaDoc readPerms = new ArrayList JavaDoc();
368         Iterator JavaDoc it = perms.iterator();
369         int permissionReadCode = Config.getIntProperty("PERMISSION_PUBLISH");
370         while (it.hasNext()) {
371             Permission perm = (Permission) it.next();
372             if (perm.getPermission() == permissionReadCode)
373                 readPerms.add(perm);
374         }
375         return readPerms;
376     }
377
378     public static List JavaDoc getReadPermissionsFromCache(Folder folder) {
379         List JavaDoc perms = getPermissionsFromCache(folder);
380         List JavaDoc readPerms = new ArrayList JavaDoc();
381         Iterator JavaDoc it = perms.iterator();
382         int permissionReadCode = Config.getIntProperty("PERMISSION_READ");
383         while (it.hasNext()) {
384             Permission perm = (Permission) it.next();
385             if (perm.getPermission() == permissionReadCode)
386                 readPerms.add(perm);
387         }
388         return readPerms;
389     }
390
391     public static List JavaDoc getWritePermissionsFromCache(Folder folder) {
392         List JavaDoc perms = getPermissionsFromCache(folder);
393         List JavaDoc readPerms = new ArrayList JavaDoc();
394         Iterator JavaDoc it = perms.iterator();
395         int permissionReadCode = Config.getIntProperty("PERMISSION_WRITE");
396         while (it.hasNext()) {
397             Permission perm = (Permission) it.next();
398             if (perm.getPermission() == permissionReadCode)
399                 readPerms.add(perm);
400         }
401         return readPerms;
402     }
403
404     public static List JavaDoc getPublishPermissionsFromCache(Folder folder) {
405         List JavaDoc perms = getPermissionsFromCache(folder);
406         List JavaDoc readPerms = new ArrayList JavaDoc();
407         Iterator JavaDoc it = perms.iterator();
408         int permissionReadCode = Config.getIntProperty("PERMISSION_PUBLISH");
409         while (it.hasNext()) {
410             Permission perm = (Permission) it.next();
411             if (perm.getPermission() == permissionReadCode)
412                 readPerms.add(perm);
413         }
414         return readPerms;
415     }
416
417     public static List JavaDoc getReadPermissionsFromCache(WebAsset asset) {
418         List JavaDoc perms = getPermissionsFromCache(asset);
419         List JavaDoc readPerms = new ArrayList JavaDoc();
420         Iterator JavaDoc it = perms.iterator();
421         int permissionReadCode = Config.getIntProperty("PERMISSION_READ");
422         while (it.hasNext()) {
423             Permission perm = (Permission) it.next();
424             if (perm.getPermission() == permissionReadCode)
425                 readPerms.add(perm);
426         }
427         return readPerms;
428     }
429
430     public static List JavaDoc getWritePermissionsFromCache(WebAsset asset) {
431         List JavaDoc perms = getPermissionsFromCache(asset);
432         List JavaDoc readPerms = new ArrayList JavaDoc();
433         Iterator JavaDoc it = perms.iterator();
434         int permissionReadCode = Config.getIntProperty("PERMISSION_WRITE");
435         while (it.hasNext()) {
436             Permission perm = (Permission) it.next();
437             if (perm.getPermission() == permissionReadCode)
438                 readPerms.add(perm);
439         }
440         return readPerms;
441     }
442
443     public static List JavaDoc getPublishPermissionsFromCache(WebAsset asset) {
444         List JavaDoc perms = getPermissionsFromCache(asset);
445         List JavaDoc readPerms = new ArrayList JavaDoc();
446         Iterator JavaDoc it = perms.iterator();
447         int permissionReadCode = Config.getIntProperty("PERMISSION_PUBLISH");
448         while (it.hasNext()) {
449             Permission perm = (Permission) it.next();
450             if (perm.getPermission() == permissionReadCode)
451                 readPerms.add(perm);
452         }
453         return readPerms;
454     }
455
456     @SuppressWarnings JavaDoc("unchecked")
457     public static List JavaDoc<String JavaDoc> getPermissionIdsByRolesFromCache(Inode inode, Role[] roles) {
458         List JavaDoc permissions = new ArrayList JavaDoc();
459         List JavaDoc<Permission> assetsPermissions;
460         
461         for (int i = 0; i < roles.length; i++) {
462             /*
463              * If the user is a CMS Admin
464              * Return full priv
465              */

466             try {
467                 if (roles[i].getRoleId().equals(PublicRoleFactory.getCMSAdminRole().getRoleId())) {
468                     permissions.add(String.valueOf(Config.getIntProperty("PERMISSION_PUBLISH")));
469                     permissions.add(String.valueOf(Config.getIntProperty("PERMISSION_READ")));
470                     permissions.add(String.valueOf(Config.getIntProperty("PERMISSION_WRITE")));
471                     return permissions;
472                 }
473             } catch (Exception JavaDoc e) {
474
475             }
476         }
477         
478         
479
480         
481         if (inode instanceof Folder) {
482             assetsPermissions = getPermissionsFromCache((Folder) inode);
483         } else if (inode instanceof WebAsset) {
484             assetsPermissions = getPermissionsFromCache((WebAsset) inode);
485         } else if (inode instanceof Host) {
486             assetsPermissions = getPermissionsFromCache((Host) inode);
487         } else {
488             return permissions;
489         }
490
491         for (int i = 0; i < roles.length; i++)
492         {
493             Iterator JavaDoc it = assetsPermissions.iterator();
494             while (it.hasNext()) {
495                 Permission perm = (Permission) it.next();
496
497                 if (perm.getRoleId() == Long.parseLong(roles[i].getRoleId()))
498                 {
499                     permissions.add(String.valueOf(perm.getPermission()));
500                 }
501             }
502         }
503         return permissions;
504     }
505
506     public static void removeFolderFromPermissionCache(Folder folder) {
507         String JavaDoc key = String.valueOf(folder.getInode());
508         cache.remove(key);
509     }
510
511     // It method removes the parent folder of the WebPage/FileAsset URI from the
512
// permissions cache
513
public static void removeURIFromPermissionCache(String JavaDoc URI, Host host) {
514         removeURIFromPermissionCache(URI, host.getInode());
515     }
516
517     public static void removeURIFromPermissionCache(String JavaDoc URI, long hostId) {
518         String JavaDoc key = String.valueOf(hostId) + "-" + URI;
519         cache.remove(key);
520     }
521
522     // It method removes the parent folder of the webasset from the permissions
523
// cache
524
public static void removeAssetFromPermissionCache(WebAsset asset) {
525         Folder parentFolder = (Folder) InodeFactory.getParentOfClass(asset, Folder.class);
526         removeFolderFromPermissionCache(parentFolder);
527     }
528
529     public static void clearCache() {
530         // clear the cache
531
cache.clear();
532     }
533
534     private static void init() {
535         try {
536             Properties JavaDoc PermissionProperties = new Properties JavaDoc();
537             String JavaDoc cacheProviderClassName = com.dotmarketing.util.Config.getStringProperty(providerEntry);
538             try {
539                 String JavaDoc propertyFilePath = com.dotmarketing.util.Config.getStringProperty(propertiesEntry);
540                 if (UtilMethods.isSet(propertyFilePath)) {
541                     FileInputStream JavaDoc fileInputStream = new FileInputStream JavaDoc(propertyFilePath);
542                     PermissionProperties.load(fileInputStream);
543                 }
544             } catch (FileNotFoundException JavaDoc ex) {
545
546                 String JavaDoc propertyFileNotFound = "The property file has been no found \n";
547                 Logger.debug(PermissionCache.class, propertyFileNotFound + ex.getMessage());
548             } catch (IOException JavaDoc ex) {
549                 Logger.debug(PermissionCache.class, ex.getMessage());
550             } finally {
551                 cache = new DotCache(cacheProviderClassName, regionName, PermissionProperties);
552             }
553         } catch (Exception JavaDoc ex) {
554             Logger.error(PermissionCache.class, ex.toString());
555         }
556     }
557 }
558
Popular Tags