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

Last change on this file since 359 was 359, checked in by gav, 14 years ago

Add options div to AssetSubItem? search view, part 2.

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