-
Notifications
You must be signed in to change notification settings - Fork 1
/
QueueMailController.groovy
249 lines (224 loc) · 7.14 KB
/
QueueMailController.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
package org.grails.plugin.queuemail
import org.grails.plugin.queuemail.enums.QueueTypes
import org.grails.plugin.queuemail.validation.ChangeServiceConfigBean
import static org.grails.plugin.queuemail.enums.QueueTypes.*
import org.grails.plugin.queuemail.validation.ChangeConfigBean
import org.grails.plugin.queuemail.validation.ChangePriorityBean
import org.grails.plugin.queuemail.validation.EmailQueueBean
import org.grails.plugin.queuemail.validation.QueueMailBean
import org.grails.plugin.queuemail.validation.QueueMailLists
import org.springframework.dao.DataIntegrityViolationException
/**
* Main controller that provides a visible front end
* to your reports queues.
*
* Control report output, extend QueuekitUserService
* and define actual userId, userName, user.locale
* + authority ->
* superUser can view all user reports + deleted records
* normalUser -> only interacts with own reports + no deleted record history
*
* With correct output from overridden QueuekitUserService
* the results of this report then matches returned service calls
* i.e : bean.userId = queueMailUserService.currentuser
*
* @author Vahid Hedayati
*
*/
class QueueMailController {
static defaultAction = 'listQueue'
static allowedMethods = [save: 'POST']
def queueMailApiService
def queueMailUserService
def emailExecutor
def basicExecutor
/**
* Display a given report Queue record
* @return
*/
def display() {
if (params.id) {
def queue
switch (params?.queueType) {
case BASIC:
queue = EmailQueue.load(params.long('id'))
break
default:
queue = EmailQueue.load(params.long('id'))
}
EmailQueueBean bean = new EmailQueueBean().formatBean(queue)
if (request.xhr) {
render template:'showContent',model:[instance:bean]
} else {
render view:'show',model:[instance:bean]
}
return
}
render status:response.SC_NOT_FOUND
}
/*
* Default action returns reports produced
* for current userId
*/
def listQueue(QueueMailBean bean) {
bean.userId = queueMailUserService.currentuser
if (bean.userId) {
def results=queueMailApiService.list(bean)
def search = bean.search
results.search=search
//session.queueMailSearch=search
if (!results.instanceList.results) {
flash.message = message(code: 'queuemail.noRecordsFound.message')
}
if (request.xhr) {
render template:'list', model:results, status: response.SC_OK
return
}
render view:'main',model:results
return
}
render status:response.SC_NOT_FOUND
}
/**
* Deletes a given record ID - front end queueMail listing delete button action
* @param bean
* @return
*/
def delRecord(QueueMailBean bean) {
try {
flash.message = message(code: 'deletion.failure.message')
bean.userId = queueMailUserService.currentuser
boolean authorizeduser=bean.superUser ? true : false
def deleted=queueMailApiService.delete(params.id as Long,bean.userId,authorizeduser,bean.safeDel)
if (deleted) {
flash.message = message(code: 'default.deleted.message', args: [message(code: 'queuemail.record.label'), params.id])
redirect(action: "listQueue",params:bean.search)
return
}
} catch (DataIntegrityViolationException e) {
} catch (Throwable t) {
flash.message= t.toString()
}
listQueue()
}
/**
* Cancel action from queueMail listing screen
* @return
*/
def cancel() {
// id is the id of the queue entry
boolean success=queueMailApiService.cancel(params.long('id'),params)
response.status=success ? response.SC_CREATED : response.SC_CONFLICT
listQueue()
}
/**
* Main queueMail listing deletAll button action
* @param bean
* @return
*/
def deleteAll(QueueMailBean bean) {
bean.userId = queueMailUserService.currentuser
boolean success
if (QueueMailLists.deleteList.contains(bean.deleteBy)) {
success = queueMailApiService.clearUserReports(bean,bean.deleteBy)
}
response.status=success ? response.SC_CREATED : response.SC_CONFLICT
listQueue()
}
/**
*
* ADMIN / SUPERUSER RELATED TASKS
*
*
*
*/
def changePriority(ChangePriorityBean bean) {
if (queueMailUserService.isSuperUser(queueMailUserService.currentuser)) {
if (request.xhr && bean.queue) {
bean.priority = bean.queue.priority ?: bean.queue.defaultPriority
render template:'/queueMail/changePriority',model:[instance:bean]
return
}
}
render status:response.SC_NOT_FOUND
}
def modifyPriority(ChangePriorityBean bean) {
if (queueMailUserService.isSuperUser(queueMailUserService.currentuser)) {
if (bean.validate()) {
queueMailApiService.changeQueuePriority(bean.queue, bean.priority)
response.status=response.SC_CREATED
return
}
response.status=response.SC_CONFLICT
listQueue()
return
}
response.status=response.SC_CONFLICT
}
def changeConfig(ChangeConfigBean bean) {
if (queueMailUserService.isSuperUser(queueMailUserService.currentuser) && request.xhr) {
bean.formatBean()
render template:'/queueMail/changeConfig',model:[instance:bean]
return
}
flash.message = bean?.errors?.allErrors.collect{message(error : it)}
render status:response.SC_NOT_FOUND
return
}
def modifyConfig(ChangeConfigBean bean) {
if (queueMailUserService.isSuperUser(queueMailUserService.currentuser) &&bean.validate()) {
queueMailApiService.modifyConfiguration(bean.queueType?:bean.queue,bean.changeValue, bean.changeType,bean.priority, bean.defaultComparator)
response.status=response.SC_CREATED
listQueue()
return
}
flash.message = bean?.errors?.allErrors.collect{message(error : it)}
response.status=response.SC_CONFLICT
}
def loadConfig(ChangeConfigBean bean) {
if (queueMailUserService.isSuperUser(queueMailUserService.currentuser) && bean.validate()) {
render bean.loadConfig()
return
}
response.status=response.SC_CONFLICT
}
def changeServiceConfig(ChangeServiceConfigBean bean) {
if (queueMailUserService.isSuperUser(queueMailUserService.currentuser) && request.xhr) {
bean=formatServiceConfigBean(bean)
render template:bean.template,model:[instance: bean]
return
}
render status:response.SC_NOT_FOUND
return
}
protected ChangeServiceConfigBean formatServiceConfigBean(ChangeServiceConfigBean bean) {
if (bean.queueType) {
def executor = emailExecutor
if (bean.queueType==QueueTypes.BASIC) {
executor = basicExecutor
}
bean.classes = queueMailApiService.listServiceClasses(executor)
if (bean.serviceClazz) {
bean.serviceConfigs = queueMailApiService.listServiceConfigurations(executor,bean.serviceClazz)
bean.template = '/queueMail/changeServiceConfigListing'
} else {
bean.template = '/queueMail/changeServiceConfigTop'
}
}
return bean
}
def modifyServiceConfig(ChangeServiceConfigBean bean) {
if (queueMailUserService.isSuperUser(queueMailUserService.currentuser) && request.xhr) {
def executor = emailExecutor
if (bean.queueType==QueueTypes.BASIC) {
executor = basicExecutor
}
queueMailApiService.modifyJob(executor,bean.serviceClazz,bean.jobName,bean.limit,bean.active,bean.currentException)
bean=formatServiceConfigBean(bean)
render template:bean.template,model:[instance: bean]
return
}
render status:response.SC_NOT_FOUND
return
}
}