1 package org.kuali.ole.deliver.service;
2
3 import org.apache.commons.lang.StringUtils;
4 import org.kuali.rice.kew.api.exception.WorkflowException;
5 import org.kuali.rice.krad.exception.DocumentTypeAuthorizationException;
6 import org.kuali.rice.krad.maintenance.MaintenanceDocument;
7 import org.kuali.rice.krad.service.impl.MaintenanceDocumentServiceImpl;
8 import org.kuali.rice.krad.util.GlobalVariables;
9 import org.kuali.rice.krad.util.KRADConstants;
10 import org.kuali.rice.krad.util.ObjectUtils;
11
12 import java.io.Serializable;
13 import java.util.Map;
14
15
16
17
18
19
20
21
22 public class OleDeliverRequestMaintenanceDocumentServiceImpl extends MaintenanceDocumentServiceImpl {
23 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OleDeliverRequestMaintenanceDocumentServiceImpl.class);
24
25
26
27
28
29
30
31
32
33 @Override
34 public MaintenanceDocument setupNewMaintenanceDocument(String objectClassName, String documentTypeName,
35 String maintenanceAction) {
36 if (StringUtils.isEmpty(objectClassName) && StringUtils.isEmpty(documentTypeName)) {
37 throw new IllegalArgumentException("Document type name or bo class not given!");
38 }
39
40
41 if (StringUtils.isEmpty(documentTypeName)) {
42 try {
43 documentTypeName =
44 getDocumentDictionaryService().getMaintenanceDocumentTypeName(Class.forName(objectClassName));
45 } catch (ClassNotFoundException e) {
46 LOG.error(e, e);
47 throw new RuntimeException(e);
48 }
49
50 if (StringUtils.isEmpty(documentTypeName)) {
51 throw new RuntimeException(
52 "documentTypeName is empty; does this Business Object have a maintenance document definition? " +
53 objectClassName);
54 }
55 }
56
57
58 if (KRADConstants.MAINTENANCE_NEW_ACTION.equals(maintenanceAction) ||
59 KRADConstants.MAINTENANCE_COPY_ACTION.equals(maintenanceAction)) {
60 Class<?> boClass =
61 getDocumentDictionaryService().getMaintenanceDataObjectClass(documentTypeName);
62 boolean allowsNewOrCopy = getDataObjectAuthorizationService()
63 .canCreate(boClass, GlobalVariables.getUserSession().getPerson(), documentTypeName);
64 if (!allowsNewOrCopy) {
65 LOG.error("Document type " + documentTypeName + " does not allow new or copy actions.");
66 throw new DocumentTypeAuthorizationException(
67 GlobalVariables.getUserSession().getPerson().getPrincipalId(), "newOrCopy", documentTypeName);
68 }
69 }
70
71
72 try {
73 return (MaintenanceDocument) getDocumentService().getNewDocument(documentTypeName);
74 } catch (WorkflowException e) {
75 LOG.error("Cannot get new maintenance document instance for doc type: " + documentTypeName, e);
76 throw new RuntimeException("Cannot get new maintenance document instance for doc type: " + documentTypeName,
77 e);
78 }
79 }
80
81
82
83
84
85
86
87
88
89
90
91 public void setupMaintenanceObjectForDelete(MaintenanceDocument document, String maintenanceAction,
92 Map<String, String[]> requestParameters) {
93 document.getNewMaintainableObject().setMaintenanceAction(maintenanceAction);
94 document.getOldMaintainableObject().setMaintenanceAction(maintenanceAction);
95
96 Object oldDataObject = retrieveObjectForMaintenance(document, requestParameters);
97 Object newDataObject = ObjectUtils.deepCopy((Serializable) oldDataObject);
98
99 document.getOldMaintainableObject().setDataObject(oldDataObject);
100 document.getNewMaintainableObject().setDataObject(newDataObject);
101 }
102
103 }