1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.devtools.pdle;
17
18 import org.apache.commons.beanutils.PropertyUtils;
19 import org.apache.ojb.broker.accesslayer.conversions.FieldConversionDefaultImpl;
20 import org.apache.ojb.broker.metadata.ClassDescriptor;
21 import org.kuali.rice.core.api.encryption.EncryptionService;
22 import org.kuali.rice.core.framework.persistence.ojb.conversion.OjbKualiEncryptDecryptFieldConversion;
23 import org.kuali.rice.krad.bo.PersistableBusinessObject;
24 import org.kuali.rice.krad.exception.ClassNotPersistableException;
25 import org.kuali.rice.krad.service.BusinessObjectService;
26 import org.kuali.rice.krad.service.impl.PersistenceServiceImplBase;
27
28 import java.util.Collections;
29 import java.util.Set;
30
31 public class PostDataLoadEncryptionServiceImpl extends PersistenceServiceImplBase implements PostDataLoadEncryptionService {
32 private BusinessObjectService businessObjectService;
33 private EncryptionService encryptionService;
34 private PostDataLoadEncryptionDao postDataLoadEncryptionDao;
35
36 @Override
37 public void checkArguments(Class<? extends PersistableBusinessObject> businessObjectClass, Set<String> attributeNames) {
38 checkArguments(businessObjectClass, attributeNames, true);
39 }
40
41 @Override
42 public void checkArguments(Class<? extends PersistableBusinessObject> businessObjectClass, Set<String> attributeNames, boolean checkOjbEncryptConfig) {
43 if ((businessObjectClass == null) || (attributeNames == null)) {
44 throw new IllegalArgumentException(
45 "PostDataLoadEncryptionServiceImpl.encrypt does not allow a null business object Class or attributeNames Set");
46 }
47 final ClassDescriptor classDescriptor;
48 try {
49 classDescriptor = getClassDescriptor(businessObjectClass);
50 } catch (ClassNotPersistableException e) {
51 throw new IllegalArgumentException(
52 "PostDataLoadEncryptionServiceImpl.encrypt does not handle business object classes that do not have a corresponding ClassDescriptor defined in the OJB repository",
53 e);
54 }
55 for (String attributeName : attributeNames) {
56 if (classDescriptor.getFieldDescriptorByName(attributeName) == null) {
57 throw new IllegalArgumentException(
58 new StringBuffer("Attribute ")
59 .append(attributeName)
60 .append(
61 " specified to PostDataLoadEncryptionServiceImpl.encrypt is not in the OJB repository ClassDescriptor for Class ")
62 .append(businessObjectClass).toString());
63 }
64 if (checkOjbEncryptConfig && !(classDescriptor.getFieldDescriptorByName(attributeName).getFieldConversion() instanceof OjbKualiEncryptDecryptFieldConversion)) {
65 throw new IllegalArgumentException(
66 new StringBuffer("Attribute ")
67 .append(attributeName)
68 .append(" of business object Class ")
69 .append(businessObjectClass)
70 .append(
71 " specified to PostDataLoadEncryptionServiceImpl.encrypt is not configured for encryption in the OJB repository")
72 .toString());
73 }
74 }
75 }
76
77 @Override
78 public void createBackupTable(Class<? extends PersistableBusinessObject> businessObjectClass) {
79 postDataLoadEncryptionDao.createBackupTable(getClassDescriptor(businessObjectClass).getFullTableName());
80 }
81
82 @Override
83 public void prepClassDescriptor(Class<? extends PersistableBusinessObject> businessObjectClass, Set<String> attributeNames) {
84 ClassDescriptor classDescriptor = getClassDescriptor(businessObjectClass);
85 for (String attributeName : attributeNames) {
86 classDescriptor.getFieldDescriptorByName(attributeName).setFieldConversionClassName(
87 FieldConversionDefaultImpl.class.getName());
88 }
89 }
90
91 @Override
92 public void truncateTable(Class<? extends PersistableBusinessObject> businessObjectClass) {
93 postDataLoadEncryptionDao.truncateTable(getClassDescriptor(businessObjectClass).getFullTableName());
94 }
95
96 @Override
97 public void encrypt(PersistableBusinessObject businessObject, Set<String> attributeNames) {
98 for (String attributeName : attributeNames) {
99 try {
100 PropertyUtils.setProperty(businessObject, attributeName, encryptionService.encrypt(PropertyUtils
101 .getProperty(businessObject, attributeName)));
102 } catch (Exception e) {
103 throw new RuntimeException(new StringBuffer(
104 "PostDataLoadEncryptionServiceImpl caught exception while attempting to encrypt attribute ").append(
105 attributeName).append(" of Class ").append(businessObject.getClass()).toString(), e);
106 }
107 }
108 businessObjectService.save(businessObject);
109 }
110
111 @Override
112 public void restoreClassDescriptor(Class<? extends PersistableBusinessObject> businessObjectClass, Set<String> attributeNames) {
113 ClassDescriptor classDescriptor = getClassDescriptor(businessObjectClass);
114 for (String attributeName : attributeNames) {
115 classDescriptor.getFieldDescriptorByName(attributeName).setFieldConversionClassName(
116 OjbKualiEncryptDecryptFieldConversion.class.getName());
117 }
118 businessObjectService.countMatching(businessObjectClass, Collections.<String, Object>emptyMap());
119 }
120
121 @Override
122 public void restoreTableFromBackup(Class<? extends PersistableBusinessObject> businessObjectClass) {
123 postDataLoadEncryptionDao.restoreTableFromBackup(getClassDescriptor(businessObjectClass).getFullTableName());
124 }
125
126 @Override
127 public void dropBackupTable(Class<? extends PersistableBusinessObject> businessObjectClass) {
128 postDataLoadEncryptionDao.dropBackupTable(getClassDescriptor(businessObjectClass).getFullTableName());
129 }
130
131
132 public void setPostDataLoadEncryptionDao(PostDataLoadEncryptionDao postDataLoadEncryptionDao) {
133 this.postDataLoadEncryptionDao = postDataLoadEncryptionDao;
134 }
135
136 public void setEncryptionService(EncryptionService encryptionService) {
137 this.encryptionService = encryptionService;
138 }
139
140 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
141 this.businessObjectService = businessObjectService;
142 }
143 }