1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kim.service.impl;
17
18 import java.util.Collections;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22
23 import org.kuali.rice.core.util.MaxAgeSoftReference;
24 import org.kuali.rice.kew.service.KEWServiceLocator;
25 import org.kuali.rice.kim.bo.role.dto.KimPermissionInfo;
26 import org.kuali.rice.kim.bo.role.impl.RoleMemberAttributeDataImpl;
27 import org.kuali.rice.kim.service.support.KimPermissionTypeService;
28 import org.kuali.rice.kim.util.KimConstants;
29 import org.kuali.rice.kns.service.BusinessObjectService;
30 import org.kuali.rice.kns.service.KNSServiceLocator;
31 import org.kuali.rice.kns.service.SequenceAccessorService;
32 import org.kuali.rice.ksb.cache.RiceCacheAdministrator;
33
34
35
36
37
38
39
40 public class PermissionServiceBase {
41 protected static final String PERMISSION_IMPL_CACHE_PREFIX = "PermissionImpl-Template-";
42 protected static final String PERMISSION_IMPL_NAME_CACHE_PREFIX = "PermissionImpl-Name-";
43 protected static final String PERMISSION_IMPL_ID_CACHE_PREFIX = "PermissionImpl-Id-";
44 protected static final String PERMISSION_IMPL_CACHE_GROUP = "PermissionImpl";
45
46 protected static final String DEFAULT_PERMISSION_TYPE_SERVICE = "defaultPermissionTypeService";
47
48 private BusinessObjectService businessObjectService;
49 private SequenceAccessorService sequenceAccessorService;
50 private RiceCacheAdministrator cacheAdministrator;
51
52 private Map<List<KimPermissionInfo>,MaxAgeSoftReference<List<String>>> permissionToRoleCache = Collections.synchronizedMap( new HashMap<List<KimPermissionInfo>,MaxAgeSoftReference<List<String>>>() );
53
54
55 private Map<String,KimPermissionTypeService> permissionTypeServiceByNameCache = Collections.synchronizedMap( new HashMap<String, KimPermissionTypeService>() );
56
57
58 private static final long CACHE_MAX_AGE_SECONDS = 60L;
59
60 protected BusinessObjectService getBusinessObjectService() {
61 if ( businessObjectService == null ) {
62 businessObjectService = KNSServiceLocator.getBusinessObjectService();
63 }
64 return businessObjectService;
65 }
66
67 public void flushPermissionImplCache() {
68 getCacheAdministrator().flushGroup(PERMISSION_IMPL_CACHE_GROUP);
69 }
70
71
72
73
74 protected Map<String, KimPermissionTypeService> getPermissionTypeServiceByNameCache() {
75 return this.permissionTypeServiceByNameCache;
76 }
77
78 protected void addRolesForPermissionsToCache( List<KimPermissionInfo> key, List<String> roleIds ) {
79 permissionToRoleCache.put( key, new MaxAgeSoftReference<List<String>>( CACHE_MAX_AGE_SECONDS, roleIds ) );
80 }
81
82 protected List<String> getRolesForPermissionsFromCache( List<KimPermissionInfo> key ) {
83 List<String> roleIds = null;
84 MaxAgeSoftReference<List<String>> cacheRef = permissionToRoleCache.get( key );
85 if ( cacheRef != null ) {
86 roleIds = cacheRef.get();
87 }
88 return roleIds;
89 }
90
91 protected String getPermissionImplByTemplateNameCacheKey( String namespaceCode, String permissionTemplateName ) {
92 return PERMISSION_IMPL_CACHE_PREFIX + namespaceCode + "-" + permissionTemplateName;
93 }
94 protected String getPermissionImplByNameCacheKey( String namespaceCode, String permissionName ) {
95 return PERMISSION_IMPL_NAME_CACHE_PREFIX + namespaceCode + "-" + permissionName;
96 }
97 protected String getPermissionImplByIdCacheKey( String permissionId ) {
98 return PERMISSION_IMPL_ID_CACHE_PREFIX + permissionId;
99 }
100
101 protected String getNewAttributeDataId(){
102 SequenceAccessorService sas = getSequenceAccessorService();
103 Long nextSeq = sas.getNextAvailableSequenceNumber(
104 KimConstants.SequenceNames.KRIM_ATTR_DATA_ID_S,
105 RoleMemberAttributeDataImpl.class );
106 return nextSeq.toString();
107 }
108
109 protected SequenceAccessorService getSequenceAccessorService() {
110 if ( sequenceAccessorService == null ) {
111 sequenceAccessorService = KNSServiceLocator.getSequenceAccessorService();
112 }
113 return sequenceAccessorService;
114 }
115
116 protected RiceCacheAdministrator getCacheAdministrator() {
117 if ( cacheAdministrator == null ) {
118 cacheAdministrator = KEWServiceLocator.getCacheAdministrator();
119 }
120 return cacheAdministrator;
121 }
122 }