Clover Coverage Report - Kuali Student 1.2-M3-SNAPSHOT (Aggregated)
Coverage timestamp: Mon Jun 6 2011 05:02:46 EDT
../../../../../../img/srcFileCovDistChart0.png 52% of files have more coverage
70   231   35   5
30   158   0.5   7
14     2.5  
2    
 
  BaseAssembler       Line # 37 64 0% 31 103 0% 0.0
  BaseAssembler.Permission       Line # 43 6 0% 4 11 0% 0.0
 
No Tests
 
1    /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10    * software distributed under the License is distributed on an "AS IS"
11    * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12    * or implied. See the License for the specific language governing
13    * permissions and limitations under the License.
14    */
15   
16    package org.kuali.student.common.assembly.old;
17   
18    import java.util.HashMap;
19    import java.util.List;
20    import java.util.Map;
21   
22    import org.apache.commons.lang.StringUtils;
23    import org.apache.log4j.Logger;
24    import org.kuali.rice.kim.bo.role.dto.KimPermissionInfo;
25    import org.kuali.rice.kim.bo.types.dto.AttributeSet;
26    import org.kuali.rice.kim.service.IdentityManagementService;
27    import org.kuali.student.common.assembly.data.AssemblyException;
28    import org.kuali.student.common.assembly.data.Data;
29    import org.kuali.student.common.assembly.data.Metadata;
30    import org.kuali.student.common.assembly.dictionary.old.MetadataServiceImpl;
31    import org.kuali.student.common.rice.authorization.PermissionType;
32    import org.kuali.student.common.util.security.SecurityUtils;
33    import org.kuali.student.common.validation.dto.ValidationResultInfo;
34    import org.kuali.student.common.validation.dto.ValidationResultInfo.ErrorLevel;
35   
36    @Deprecated
 
37    public abstract class BaseAssembler<TargetType, SourceType> implements Assembler<TargetType, SourceType> {
38    protected final Logger LOG = Logger.getLogger(getClass());
39   
40    protected IdentityManagementService permissionService;
41    protected MetadataServiceImpl metadataService;
42   
 
43    public enum Permission {
44    EDIT("edit"), READ_ONLY("readonly"), UNMASK("unmask");
45    final String kimName;
 
46  0 toggle private Permission(String kimName) {
47  0 this.kimName = kimName;
48    }
 
49  0 toggle @Override
50    public String toString() {
51  0 return kimName;
52    }
 
53  0 toggle public static Permission kimValueOf(String kimName) {
54  0 for(Permission p : values()) {
55  0 if(p.kimName.equals(kimName)) {
56  0 return p;
57    }
58    }
59    //fall through
60  0 throw new IllegalArgumentException("The value " + kimName + " is not enumerated in Permission");
61    }
62    }
63   
64   
65    // TODO: Below must be changed to use constants from KualiStudentKimAttributes class (class is currently in LUM)
 
66  0 toggle protected Map<String, String> getFieldAccessPermissions(String dtoName, String idType, String id) {
67  0 try {
68    //get permissions and turn into a map of fieldName=>access
69  0 String principalId = SecurityUtils.getCurrentUserId();
70  0 AttributeSet qualification = getQualification(idType, id);
71  0 AttributeSet permissionDetails = new AttributeSet("dtoName", dtoName);
72  0 List<? extends KimPermissionInfo> permissions = permissionService.getAuthorizedPermissionsByTemplateName(principalId,
73    PermissionType.FIELD_ACCESS.getPermissionNamespace(), PermissionType.FIELD_ACCESS.getPermissionTemplateName(), permissionDetails, qualification);
74  0 Map<String, String> permMap = new HashMap<String, String>();
75  0 if (permissions != null) {
76  0 for (KimPermissionInfo permission : permissions) {
77  0 String dtoFieldKey = permission.getDetails().get("dtoFieldKey");
78  0 String fieldAccessLevel = permission.getDetails().get("fieldAccessLevel");
79  0 permMap.put(dtoFieldKey, fieldAccessLevel);
80    }
81    }
82  0 return permMap;
83    } catch (Exception e) {
84  0 LOG.warn("Error calling permission service.", e);
85    }
86  0 return null;
87    }
88   
89    /* protected Map<String, String> getScreenComponentAccessPermissions(List<SectionViewInfo> sectionViewInfo) {
90    return null;
91    }*/
92   
 
93  0 toggle private void setReadOnly(Metadata metadata, boolean readOnly) {
94  0 metadata.setCanEdit(!readOnly);
95  0 Map<String, Metadata> childProperties = metadata.getProperties();
96  0 if (childProperties != null && childProperties.size() > 0) {
97  0 for (Metadata child : childProperties.values()) {
98  0 setReadOnly(child, readOnly);
99    }
100    }
101    }
102   
 
103  0 toggle @Override
104    public Metadata getMetadata(String idType, String id, String type, String state) throws AssemblyException {
105  0 Metadata metadata = metadataService.getMetadata(getDataType(), type, state);
106  0 applyPermissionsToMetadata(metadata,idType, id);
107  0 return metadata;
108    }
109   
 
110  0 toggle protected void applyPermissionsToMetadata(Metadata metadata, String idType, String id){
111  0 Boolean authorized = null;
112  0 if (StringUtils.isNotBlank(id) && checkDocumentLevelPermissions()) {
113  0 AttributeSet qualification = getQualification(idType, id);
114  0 String currentUser = SecurityUtils.getCurrentUserId();
115  0 authorized = Boolean.valueOf(permissionService.isAuthorizedByTemplateName(currentUser, PermissionType.EDIT.getPermissionNamespace(),
116    PermissionType.EDIT.getPermissionTemplateName(), null, qualification));
117  0 LOG.info("Permission '" + PermissionType.EDIT.getPermissionNamespace() + "/" + PermissionType.EDIT.getPermissionTemplateName()
118    + "' for user '" + currentUser + "': " + authorized);
119  0 metadata.setCanEdit(authorized.booleanValue());
120    }
121  0 if(metadata != null && metadata.getProperties() != null) {
122  0 for(Metadata child : metadata.getProperties().values()) {
123  0 if(!child.isCanEdit()) {
124  0 setReadOnly(child, true);
125    }
126    }
127    }
128    // if we're checking doc level perms and user does not have "Edit Document" perm set metadata as readonly
129  0 if (checkDocumentLevelPermissions() && Boolean.FALSE.equals(authorized)) {
130  0 setReadOnly(metadata, true);
131    }
132    // if not checking doc level perms or user does have "Edit Document" perm check field level authZ
133    else {
134  0 Map<String, String> permissions = getFieldAccessPermissions(getDtoName(),idType,id);
135  0 if (permissions != null) {
136  0 for (Map.Entry<String, String> permission : permissions.entrySet()) {
137  0 String dtoFieldPath = permission.getKey();
138  0 String fieldAccessLevel = permission.getValue();
139  0 String[] fieldPathTokens = getPathTokens(dtoFieldPath);
140  0 Metadata fieldMetadata = metadata.getProperties().get(fieldPathTokens[0]);
141  0 for(int i = 1; i < fieldPathTokens.length; i++) {
142  0 if(fieldMetadata == null) {
143  0 break;
144    }
145  0 fieldMetadata = fieldMetadata.getProperties().get(fieldPathTokens[i]);
146    }
147  0 if (fieldMetadata != null) {
148  0 Permission perm = Permission.kimValueOf(fieldAccessLevel);
149  0 if (Permission.EDIT.equals(perm)) {
150  0 setReadOnly(fieldMetadata, false);
151    //fieldMetadata.setCanEdit(true);
152    }
153    }
154    }
155    }
156    }
157   
158    }
159   
 
160  0 toggle public Metadata getDefaultMetadata() {
161  0 return metadataService.getMetadata(getDataType(), null, null);
162    }
163   
 
164  0 toggle protected boolean hasValidationErrors(List<ValidationResultInfo> validationResults) {
165  0 boolean result = false;
166  0 if (validationResults != null) {
167  0 for (ValidationResultInfo validationResult : validationResults) {
168  0 if (validationResult.getLevel() == ErrorLevel.ERROR) {
169  0 result = true;
170  0 break;
171    }
172    }
173    }
174  0 return result;
175    }
176   
 
177  0 toggle public List<ValidationResultInfo> validate(Data data) throws AssemblyException {
178  0 List<ValidationResultInfo> validationResults = null;
179   
180  0 return validationResults;
181    }
182   
 
183  0 toggle private static String[] getPathTokens(String fieldPath) {
184  0 return (fieldPath != null && fieldPath.contains(".") ? fieldPath.split("\\.") : new String[]{fieldPath});
185    }
186   
 
187  0 toggle public boolean checkDocumentLevelPermissions() {
188  0 return false;
189    }
190   
191    /**
192    *
193    * This method should return the data type of the implementing assembler
194    *
195    * @return the data type, i.e. "CreditCourseProposal" from the CreditCourseProposalAssembler
196    */
197    protected abstract String getDataType();
198   
199    /**
200    *
201    * This method should return the DTO name of the implementing assembler
202    *
203    * @return the DTO name, i.e. "kuali.lu.type.CreditCourse" from the CreditCourseProposalAssembler
204    */
205    protected abstract String getDtoName();
206   
207    /**
208    *
209    * This method should return the root document property name
210    *
211    * @return the document property name, i.e. "course" from the CreditCourseProposalAssembler
212    */
213    protected abstract String getDocumentPropertyName();
214   
215    /**
216    *
217    * This method should return the qualification name for the document type
218    *
219    * @return the qualifications in at AttributeSet
220    */
221    protected abstract AttributeSet getQualification(String idType, String id);
222   
 
223  0 toggle public void setPermissionService(IdentityManagementService permissionService) {
224  0 this.permissionService = permissionService;
225    }
226   
 
227  0 toggle public void setMetadataService(MetadataServiceImpl metadataService) {
228  0 this.metadataService = metadataService;
229    }
230   
231    }