1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.document;
17
18 import org.kuali.rice.kim.api.identity.Person;
19 import org.kuali.rice.krad.datadictionary.DocumentEntry;
20 import org.kuali.rice.krad.document.authorization.PessimisticLock;
21 import org.kuali.rice.krad.service.DataDictionaryService;
22 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
23
24
25
26
27
28
29 public class TransactionalDocumentAuthorizerBase extends DocumentAuthorizerBase implements TransactionalDocumentAuthorizer {
30
31 private static final long serialVersionUID = 3255133642834256283L;
32
33 private DataDictionaryService dataDictionaryService;
34
35
36
37
38
39
40
41
42 @Override
43 public boolean canClose(Document document, Person user) {
44 return true;
45 }
46
47
48
49
50
51
52
53
54
55 @Override
56 public boolean canSave(Document document, Person user) {
57 boolean canSave = super.canSave(document, user);
58
59 if (!isUsingPessimisticLocking(document)) {
60 return canSave;
61 }
62
63 return canSave && canEstablishPessimisticLock(document, user);
64 }
65
66
67
68
69
70
71
72
73
74 @Override
75 public boolean canRoute(Document document, Person user) {
76 boolean canRoute = super.canRoute(document, user);
77
78 if (!isUsingPessimisticLocking(document)) {
79 return canRoute;
80 }
81
82 return canRoute && canEstablishPessimisticLock(document, user);
83 }
84
85
86
87
88
89
90
91
92
93 @Override
94 public boolean canCancel(Document document, Person user) {
95 boolean canCancel = super.canCancel(document, user);
96
97 if (!isUsingPessimisticLocking(document)) {
98 return canCancel;
99 }
100
101 return canCancel && canEstablishPessimisticLock(document, user);
102 }
103
104
105
106
107
108
109
110
111
112 @Override
113 public boolean canBlanketApprove(Document document, Person user) {
114 boolean canBlanketApprove = super.canBlanketApprove(document, user);
115
116 if (!isUsingPessimisticLocking(document)) {
117 return canBlanketApprove;
118 }
119
120 return canBlanketApprove && canEstablishPessimisticLock(document, user);
121 }
122
123
124
125
126
127
128
129
130 protected boolean isUsingPessimisticLocking(Document document) {
131 String documentClassName = document.getClass().getName();
132 DocumentEntry documentEntry = getDataDictionaryService().getDataDictionary().getDocumentEntry(documentClassName);
133
134 return documentEntry.getUsePessimisticLocking();
135 }
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150 protected boolean canEstablishPessimisticLock(Document document, Person user) {
151 if (document.getPessimisticLocks().isEmpty()) {
152 return true;
153 }
154
155 for (PessimisticLock pessimisticLock : document.getPessimisticLocks()) {
156 if (pessimisticLock.isOwnedByUser(user)) {
157 return true;
158 }
159 }
160
161 return false;
162 }
163
164 protected DataDictionaryService getDataDictionaryService() {
165 if (dataDictionaryService == null) {
166 dataDictionaryService = KRADServiceLocatorWeb.getDataDictionaryService();
167 }
168
169 return dataDictionaryService;
170 }
171
172 protected void setDataDictionaryService(DataDictionaryService dataDictionaryService) {
173 this.dataDictionaryService = dataDictionaryService;
174 }
175
176 }