source: trunk/grails-app/controllers/AssetSubItemDetailedController.groovy @ 658

Last change on this file since 658 was 658, checked in by gav, 9 years ago

Show AssetSubItem after update, since returning to an Asset makes no sense.

File size: 8.8 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2import org.codehaus.groovy.grails.commons.ConfigurationHolder
3import org.apache.commons.lang.WordUtils
4
5@Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager'])
6class AssetSubItemDetailedController extends BaseController {
7
8    def filterService
9    def exportService
10    def assetSubItemService
11
12    // the delete, save and update actions only accept POST requests
13    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
14
15    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager', 'ROLE_AssetUser'])
16    def index = { redirect(action:search,params:params) }
17
18    /**
19    * Set session.assetSubItemSearchParamsMax
20    */
21    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager', 'ROLE_AssetUser'])
22    def setSearchParamsMax = {
23        def max = 1000
24        if(params.newMax?.isInteger()) {
25            def i = params.newMax.toInteger()
26            if(i > 0 && i <= max)
27                session.assetSubItemSearchParamsMax = params.newMax
28            if(i > max)
29                session.assetSubItemSearchParamsMax = max
30        }
31        forward(action: 'search', params: params)
32    }
33
34    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager', 'ROLE_AssetUser'])
35    def search = {
36
37        if(session.assetSubItemSearchParamsMax)
38            params.max = session.assetSubItemSearchParamsMax
39
40        params.max = Math.min( params.max ? params.max.toInteger() : 10,  1000)
41
42        def assetSubItemInstanceList = []
43        def assetSubItemInstanceTotal
44        def filterParams = [:]
45
46        // Quick Search:
47        if(!params.filter) {
48            assetSubItemInstanceList = AssetSubItem.list( params )
49            assetSubItemInstanceTotal = AssetSubItem.count()
50            filterParams.quickSearch = params.quickSearch
51        }
52        else {
53        // filterPane:
54            assetSubItemInstanceList = filterService.filter( params, AssetSubItem )
55            assetSubItemInstanceTotal = filterService.count( params, AssetSubItem )
56            filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params)
57        }
58
59        // export plugin:
60        if(params?.format && params.format != "html") {
61
62            def dateFmt = { date ->
63                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
64            }
65
66            String title = "AssetSubItem List."
67
68            response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
69            response.setHeader("Content-disposition", "attachment; filename=assets.${params.extension}")
70            List fields = ["name",
71                                "description"]
72            Map labels = ["name": "AssetSubItem",
73                                "description": "Description"]
74
75            Map formatters = [:]
76            Map parameters = [title: title, separator: ","]
77
78            exportService.export(params.format,
79                                                response.outputStream,
80                                                assetSubItemInstanceList.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) },
81                                                fields,
82                                                labels,
83                                                formatters,
84                                                parameters)
85        }
86
87        // Add some basic params to filterParams.
88        filterParams.max = params.max
89        filterParams.offset = params.offset?.toInteger() ?: 0
90        filterParams.sort = params.sort ?: "id"
91        filterParams.order = params.order ?: "desc"
92
93        return[ assetSubItemInstanceList: assetSubItemInstanceList,
94                assetSubItemInstanceTotal: assetSubItemInstanceTotal,
95                filterParams: filterParams ]
96
97    } // end search()
98
99    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager', 'ROLE_AssetUser'])
100    def show = {
101
102        // In the case of an actionSubmit button, rewrite action name from 'index'.
103        if(params._action_Show)
104            params.action='show'
105
106        def assetSubItemInstance = AssetSubItem.get( params.id )
107
108        if(!assetSubItemInstance) {
109            flash.message = "AssetSubItem not found with id ${params.id}"
110            redirect(action: "search")
111        }
112        else { return [ assetSubItemInstance : assetSubItemInstance ] }
113    }
114
115    def delete = {
116        def result = assetSubItemService.delete(params)
117
118        if(!result.error) {
119            flash.message = g.message(code: "default.delete.success", args: ["AssetSubItem", params.id])
120            redirect(action: search)
121            return
122        }
123
124        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
125
126        if(result.error.code == "default.not.found") {
127            redirect(action: search)
128            return
129        }
130
131        redirect(action:show, id: params.id)
132    }
133
134    def edit = {
135
136        // In the case of an actionSubmit button, rewrite action name from 'index'.
137        if(params._action_Edit)
138            params.action='edit'
139
140        def assetSubItemInstance = AssetSubItem.get( params.id )
141
142        if(!assetSubItemInstance) {
143            flash.message = "AssetSubItem not found with id ${params.id}"
144            redirect(action: "search")
145            return
146        }
147
148        def possibleParentItems = assetSubItemService.possibleParentItems(assetSubItemInstance)
149
150        return [ assetSubItemInstance : assetSubItemInstance, possibleParentItems: possibleParentItems ]
151    }
152
153    def update = {
154        def assetSubItemInstance = AssetSubItem.get( params.id )
155        if(assetSubItemInstance) {
156            if(params.version) {
157                def version = params.version.toLong()
158                if(assetSubItemInstance.version > version) {
159
160                    assetSubItemInstance.errors.rejectValue("version", "default.optimistic.locking.failure")
161                    render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
162                    return
163                }
164            }
165
166            assetSubItemInstance.properties = params
167
168            use(WordUtils) {
169                assetSubItemInstance.name = assetSubItemInstance.name.capitalize()
170                assetSubItemInstance.description = assetSubItemInstance.description.capitalize()
171            }
172
173            if(assetSubItemInstance.assets) {
174                assetSubItemInstance.parentItem = null
175            }
176
177            if(!assetSubItemInstance.hasErrors() && assetSubItemInstance.save(flush: true)) {
178                flash.message = "Sub Item '${assetSubItemInstance.name}' updated"
179                redirect(action:"show", id: assetSubItemInstance.id)
180            }
181            else {
182                render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
183            }
184        }
185        else {
186            flash.message = "AssetSubItem not found with id ${params.id}"
187            redirect(action: "search")
188        }
189    } // update
190
191    def create = {
192        def result = assetSubItemService.create(params)
193
194        if(!result.error)
195            return [assetSubItemInstance: result.assetSubItemInstance, assetInstance: result.assetInstance]
196
197        flash.message = g.message(code: result.error.code, args: result.error.args)
198        redirect(controller: 'assetDetailed', action: 'search')
199    }
200
201    def save = {
202        def result = assetSubItemService.save(params)
203
204        if(!result.error) {
205            // Success.
206            flash.message = g.message(code: "default.create.success", args: ["Sub Item", "'${result.assetSubItemInstance.name}'"])
207
208            /// @todo: This just grabs the first parent in an unsorted list and needs improving.
209            if(result.assetSubItemInstance.assets)
210                redirect(controller: "assetDetailed", action:"show", id: result.assetSubItemInstance.assets.toArray()[0].id)
211            else {
212                //Get the top parentItem.
213                def parentItem = result.assetSubItemInstance.parentItem
214                def i = 0
215                while(parentItem?.parentItem) {
216                    parentItem = parentItem.parentItem
217                    // Protect against infinite recurrsion.
218                    i++
219                    if(i > 100)
220                        break
221                }
222
223                if(parentItem?.assets)
224                    redirect(controller: "assetDetailed", action:"show", id: parentItem.assets.toArray()[0].id)
225                else
226                    redirect(action:"show", id: result.assetSubItemInstance.id) // End stop if all else fails.
227            }
228            return
229        }
230
231        if(result.error.code == "assetSubItem.asset.not.found")
232            flash.errorMessage = g.message(code: "default.create.success")
233
234        render(view:'create', model:[assetSubItemInstance: result.assetSubItemInstance, assetInstance: result.assetInstance])
235    }
236
237} // end class
Note: See TracBrowser for help on using the repository browser.