View Javadoc
1   /*
2    * Copyright 2007-2008 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kim.util;
17  
18  import java.util.Map;
19  import java.util.Set;
20  
21  import org.apache.commons.beanutils.PropertyUtils;
22  import org.apache.commons.lang.StringUtils;
23  import org.kuali.ole.sys.context.SpringContext;
24  import org.kuali.rice.core.api.config.property.ConfigurationService;
25  import org.kuali.rice.kew.api.KewApiServiceLocator;
26  import org.kuali.rice.kew.api.doctype.DocumentType;
27  import org.kuali.rice.kim.api.KimConstants;
28  
29  /**
30   * This is a description of what this class does - bhargavp don't forget to fill
31   * this in.
32   *
33   * @author Kuali Rice Team (rice.collab@kuali.org)
34   *
35   */
36  public class KimCommonUtils {
37      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(KimCommonUtils.class);
38  
39      public static String getClosestParentDocumentTypeName( DocumentType documentType, Set<String> potentialParentDocumentTypeNames) {
40          if ( potentialParentDocumentTypeNames == null || documentType == null ) {
41              return null;
42          }
43          if (potentialParentDocumentTypeNames.contains(documentType.getName())) {
44              return documentType.getName();
45          } else {
46              if ( StringUtils.isBlank(documentType.getParentId())
47                      || StringUtils.equals( documentType.getParentId(), documentType.getId() ) ) {
48                  return null;
49              } else {
50                  return getClosestParentDocumentTypeName(KewApiServiceLocator.getDocumentTypeService().getDocumentTypeById(documentType.getParentId()), potentialParentDocumentTypeNames);
51              }
52          }
53      }
54  
55      public static boolean storedValueNotSpecifiedOrInputValueMatches(Map<String,String> storedValues, Map<String,String> inputValues, String attributeName) {
56          return ((storedValues == null) || (inputValues == null)) || !storedValues.containsKey(attributeName) || StringUtils.equals( storedValues.get(attributeName), inputValues.get(attributeName));
57      }
58  
59      public static boolean doesPropertyNameMatch(
60              String requestedDetailsPropertyName,
61              String permissionDetailsPropertyName) {
62          if (StringUtils.isBlank(permissionDetailsPropertyName)) {
63              return true;
64          }
65          return StringUtils.equals(requestedDetailsPropertyName, permissionDetailsPropertyName)
66                  || (StringUtils.startsWith(requestedDetailsPropertyName,permissionDetailsPropertyName+"."));
67      }
68  
69  //    public static Map<String,String> getNamespaceAndComponentSimpleName( Class<? extends Object> clazz) {
70  //        Map<String,String> attributeSet = new HashMap<String,String>();
71  //        attributeSet.put(KimConstants.AttributeConstants.NAMESPACE_CODE, getNamespaceCode(clazz));
72  //        attributeSet.put(KimConstants.AttributeConstants.COMPONENT_NAME, getComponentSimpleName(clazz));
73  //        return attributeSet;
74  //    }
75  //
76  //    public static Map<String,String> getNamespaceAndComponentFullName( Class<? extends Object> clazz) {
77  //        Map<String,String> attributeSet = new HashMap<String,String>();
78  //        attributeSet.put(KimConstants.AttributeConstants.NAMESPACE_CODE, getNamespaceCode(clazz));
79  //        attributeSet.put(KimConstants.AttributeConstants.COMPONENT_NAME, getComponentFullName(clazz));
80  //        return attributeSet;
81  //    }
82  //
83  //    public static Map<String,String> getNamespaceAndActionClass( Class<? extends Object> clazz) {
84  //        Map<String,String> attributeSet = new HashMap<String,String>();
85  //        attributeSet.put(KimConstants.AttributeConstants.NAMESPACE_CODE, getNamespaceCode(clazz));
86  //        attributeSet.put(KimConstants.AttributeConstants.ACTION_CLASS, clazz.getName());
87  //        return attributeSet;
88  //    }
89  //
90  //    public static String getNamespaceCode(Class<? extends Object> clazz) {
91  //        ModuleService moduleService = getKualiModuleService().getResponsibleModuleService(clazz);
92  //        if (moduleService == null) {
93  //            return KimApiConstants.KIM_TYPE_DEFAULT_NAMESPACE;
94  //        }
95  //        return moduleService.getModuleConfiguration().getNamespaceCode();
96  //    }
97  
98      public static String getComponentSimpleName(Class<? extends Object> clazz) {
99          return clazz.getSimpleName();
100     }
101 
102     public static String getComponentFullName(Class<? extends Object> clazz) {
103         return clazz.getName();
104     }
105 
106 //    public static boolean isAttributeSetEntryEquals( Map<String,String> map1, Map<String,String> map2, String key ) {
107 //        return StringUtils.equals( map1.get( key ), map2.get( key ) );
108 //    }
109 
110     public static void copyProperties(Object targetToCopyTo, Object sourceToCopyFrom){
111         if(targetToCopyTo!=null && sourceToCopyFrom!=null)
112         try{
113             PropertyUtils.copyProperties(targetToCopyTo, sourceToCopyFrom);
114         } catch(Exception ex){
115             throw new RuntimeException("Failed to copy from source object: "+sourceToCopyFrom.getClass()+" to target object: "+targetToCopyTo,ex);
116         }
117     }
118 
119     public static String getKimBasePath(){
120         String kimBaseUrl = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KimConstants.KimUIConstants.KIM_URL_KEY);
121         if (!kimBaseUrl.endsWith(KimConstants.KimUIConstants.URL_SEPARATOR)) {
122             kimBaseUrl = kimBaseUrl + KimConstants.KimUIConstants.URL_SEPARATOR;
123         }
124         return kimBaseUrl;
125     }
126 
127     public static String getPathWithKimContext(String path, String kimActionName){
128         String kimContext = KimConstants.KimUIConstants.KIM_APPLICATION+KimConstants.KimUIConstants.URL_SEPARATOR;
129         String kimContextParameterized = KimConstants.KimUIConstants.KIM_APPLICATION+KimConstants.KimUIConstants.PARAMETERIZED_URL_SEPARATOR;
130         if(path.contains(kimActionName) && !path.contains(kimContext + kimActionName)
131                 && !path.contains(kimContextParameterized + kimActionName))
132             path = path.replace(kimActionName, kimContext+kimActionName);
133         return path;
134     }
135 
136 //    protected static boolean canOverrideEntityPrivacyPreferences( String principalId ){
137 //        return getIdentityManagementService().isAuthorized(
138 //                GlobalVariables.getUserSession().getPrincipalId(),
139 //                KimConstants.NAMESPACE_CODE,
140 //                KimApiConstants.PermissionNames.OVERRIDE_ENTITY_PRIVACY_PREFERENCES,
141 //                null,
142 //                new HashMap<String,String>(KimConstants.AttributeConstants.PRINCIPAL_ID, principalId) );
143 //    }
144 //
145 //    public static boolean isSuppressName(String entityId) {
146 //        EntityPrivacyPreferences privacy = null;
147 //        EntityDefaultInfo entityInfo = getIdentityManagementService().getEntityDefaultInfo(entityId);
148 //        if (entityInfo != null) {
149 //            privacy = entityInfo.getPrivacyPreferences();
150 //        }
151 //        UserSession userSession = GlobalVariables.getUserSession();
152 //
153 //        boolean suppressName = false;
154 //        if (privacy != null) {
155 //            suppressName = privacy.isSuppressName();
156 //        }
157 //        return suppressName
158 //                && userSession != null
159 //                && !StringUtils.equals(userSession.getPerson().getEntityId(), entityId)
160 //                && !canOverrideEntityPrivacyPreferences(entityInfo.getPrincipals().get(0).getPrincipalId());
161 //    }
162 //
163 //    public static boolean isSuppressEmail(String entityId) {
164 //        EntityPrivacyPreferences privacy = null;
165 //        EntityDefaultInfo entityInfo = getIdentityManagementService().getEntityDefaultInfo(entityId);
166 //        if (entityInfo != null) {
167 //            privacy = entityInfo.getPrivacyPreferences();
168 //        }
169 //        UserSession userSession = GlobalVariables.getUserSession();
170 //
171 //        boolean suppressEmail = false;
172 //        if (privacy != null) {
173 //            suppressEmail = privacy.isSuppressEmail();
174 //        }
175 //        return suppressEmail
176 //                && userSession != null
177 //                && !StringUtils.equals(userSession.getPerson().getEntityId(), entityId)
178 //                && !canOverrideEntityPrivacyPreferences(entityInfo.getPrincipals().get(0).getPrincipalId());
179 //    }
180 //
181 //    public static boolean isSuppressAddress(String entityId) {
182 //        EntityPrivacyPreferences privacy = null;
183 //        EntityDefaultInfo entityInfo = getIdentityManagementService().getEntityDefaultInfo(entityId);
184 //        if (entityInfo != null) {
185 //            privacy = entityInfo.getPrivacyPreferences();
186 //        }
187 //        UserSession userSession = GlobalVariables.getUserSession();
188 //
189 //        boolean suppressAddress = false;
190 //        if (privacy != null) {
191 //            suppressAddress = privacy.isSuppressAddress();
192 //        }
193 //        return suppressAddress
194 //                && userSession != null
195 //                && !StringUtils.equals(userSession.getPerson().getEntityId(), entityId)
196 //                && !canOverrideEntityPrivacyPreferences(entityInfo.getPrincipals().get(0).getPrincipalId());
197 //    }
198 //
199 //    public static boolean isSuppressPhone(String entityId) {
200 //        EntityPrivacyPreferences privacy = null;
201 //        EntityDefaultInfo entityInfo = getIdentityManagementService().getEntityDefaultInfo(entityId);
202 //        if (entityInfo != null) {
203 //            privacy = entityInfo.getPrivacyPreferences();
204 //        }
205 //        UserSession userSession = GlobalVariables.getUserSession();
206 //
207 //        boolean suppressPhone = false;
208 //        if (privacy != null) {
209 //            suppressPhone = privacy.isSuppressPhone();
210 //        }
211 //        return suppressPhone
212 //                && userSession != null
213 //                && !StringUtils.equals(userSession.getPerson().getEntityId(), entityId)
214 //                && !canOverrideEntityPrivacyPreferences(entityInfo.getPrincipals().get(0).getPrincipalId());
215 //    }
216 //
217 //    public static boolean isSuppressPersonal(String entityId) {
218 //        EntityPrivacyPreferences privacy = null;
219 //        EntityDefaultInfo entityInfo = getIdentityManagementService().getEntityDefaultInfo(entityId);
220 //        if (entityInfo != null) {
221 //            privacy = entityInfo.getPrivacyPreferences();
222 //        }
223 //        UserSession userSession = GlobalVariables.getUserSession();
224 //
225 //        boolean suppressPersonal = false;
226 //        if (privacy != null) {
227 //            suppressPersonal = privacy.isSuppressPersonal();
228 //        }
229 //        return suppressPersonal
230 //                && userSession != null
231 //                && !StringUtils.equals(userSession.getPerson().getEntityId(), entityId)
232 //                && !canOverrideEntityPrivacyPreferences(entityInfo.getPrincipals().get(0).getPrincipalId());
233 //    }
234 //
235 //    public static String encryptExternalIdentifier(String externalIdentifier, String externalIdentifierType){
236 //        Map<String, String> criteria = new HashMap<String, String>();
237 //        criteria.put(KimConstants.PrimaryKeyConstants.KIM_TYPE_CODE, externalIdentifierType);
238 //        ExternalIdentifierType externalIdentifierTypeObject = (ExternalIdentifierType) KNSServiceLocator.getBusinessObjectService().findByPrimaryKey(ExternalIdentifierTypeImpl.class, criteria);
239 //        if( externalIdentifierTypeObject!= null && externalIdentifierTypeObject.isEncryptionRequired()){
240 //            if(StringUtils.isNotEmpty(externalIdentifier)){
241 //                try{
242 //                    return SpringContext.getBean(EncryptionService.class).encrypt(externalIdentifier);
243 //                }catch (GeneralSecurityException e) {
244 //                    LOG.info("Unable to encrypt value : " + e.getMessage() + " or it is already encrypted");
245 //                }
246 //            }
247 //        }
248 //        return externalIdentifier;
249 //    }
250 //
251 //    public static String decryptExternalIdentifier(String externalIdentifier, String externalIdentifierType){
252 //        Map<String, String> criteria = new HashMap<String, String>();
253 //        criteria.put(KimConstants.PrimaryKeyConstants.KIM_TYPE_CODE, externalIdentifierType);
254 //        ExternalIdentifierType externalIdentifierTypeObject = (ExternalIdentifierType) KNSServiceLocator.getBusinessObjectService().findByPrimaryKey(ExternalIdentifierTypeImpl.class, criteria);
255 //        if( externalIdentifierTypeObject!= null && externalIdentifierTypeObject.isEncryptionRequired()){
256 //            if(StringUtils.isNotEmpty(externalIdentifier)){
257 //                try{
258 //                    return SpringContext.getBean(EncryptionService.class).decrypt(externalIdentifier);
259 //                }catch (GeneralSecurityException e) {
260 //                    LOG.info("Unable to decrypt value : " + e.getMessage() + " or it is already decrypted");
261 //                }
262 //            }
263 //        }
264 //        return externalIdentifier;
265 //    }
266 //
267 //    public static IdentityManagementService getIdentityManagementService() {
268 //        if ( identityManagementService == null ) {
269 //            identityManagementService = SpringContext.getBean(IdentityManagementService.class);
270 //        }
271 //        return identityManagementService;
272 //    }
273 //
274 //
275 //    public static GroupImpl copyInfoToGroup(Group info, GroupImpl group) {
276 //        group.setActive(info.isActive());
277 //        group.setGroupDescription(info.getGroupDescription());
278 //        group.setGroupId(info.getGroupId());
279 //        group.setGroupName(info.getGroupName());
280 //        group.setKimTypeId(info.getKimTypeId());
281 //        group.setNamespaceCode(info.getNamespaceCode());
282 //
283 //        return group;
284 //    }
285 //
286 //    /**
287 //     *
288 //     * @param infoMap Containing the Info Attribute objects.
289 //     * @param groupId for the group of attributes
290 //     * @param kimTypeId for the group of attributes
291 //     * @return a list of group attributes
292 //     */
293 //
294 //    public static List<GroupAttributeDataImpl> copyInfoAttributesToGroupAttributes(Map<String, String> infoMap, String groupId, String kimTypeId) {
295 //        List<GroupAttributeDataImpl> attrList = new ArrayList<GroupAttributeDataImpl>(infoMap.size());
296 //        List<KimTypeAttribute> attributeInfoList = SpringContext.getBean(KimTypeInfoService.class).getKimType(kimTypeId).getAttributeDefinitions();
297 //
298 //        for (String key : infoMap.keySet()) {
299 //            KimTypeAttribute typeAttributeInfo = getAttributeInfo(attributeInfoList, key);
300 //
301 //            if (typeAttributeInfo != null) {
302 //                GroupAttributeDataImpl groupAttribute = new GroupAttributeDataImpl();
303 //                groupAttribute.setKimAttributeId(typeAttributeInfo.getKimAttributeId());
304 //                groupAttribute.setAttributeValue(infoMap.get(typeAttributeInfo.getAttributeName()));
305 //                groupAttribute.setGroupId(groupId);
306 //                groupAttribute.setKimTypeId(kimTypeId);
307 //                attrList.add(groupAttribute);
308 //            } else {
309 //                throw new IllegalArgumentException("KimAttribute not found: " + key);
310 //            }
311 //        }
312 //        return attrList;
313 //    }
314 //
315 //    private static KimTypeAttribute getAttributeInfo(List<KimTypeAttribute> attributeInfoList, String attributeName) {
316 //        KimTypeAttribute kRet = null;
317 //        for (KimTypeAttribute attributeInfo : attributeInfoList) {
318 //            if (attributeInfo.getAttributeName().equals(attributeName)) {
319 //                kRet = attributeInfo;
320 //                break;
321 //            }
322 //        }
323 //        return kRet;
324 //    }
325 
326 }