source: trunk/grails-app/controllers/AssetDetailedController.groovy @ 278

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

Add AssetTreeTagLib and asset overview.
Complete asset copy function with link and copy choices.

File size: 10.0 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2import org.codehaus.groovy.grails.commons.ConfigurationHolder
3
4class AssetDetailedController extends BaseController {
5
6    def csvService
7    def filterService
8    def exportService
9    def assetService
10
11    def index = { redirect(action:overview,params:params) }
12
13    // the delete, save and update actions only accept POST requests
14    static allowedMethods = [delete:'POST', save:'POST', update:'POST', saveCopy:'POST']
15
16    def importAssetTree = {
17    }
18    def overview = {
19    }
20
21    def importAssetTreeSave = {
22        def result = csvService.importAssetTree(request)
23
24        if(!result.error)
25            flash.message = g.message(code: "asset.tree.import.success")
26        else
27            flash.warning = g.message(code: result.error.code, args: result.error.args)
28
29        redirect(action: importAssetTree)
30    }
31
32    /**
33    * Export a csv template.
34    * NOTE: IE has a 'validating' bug in dev mode that causes the export to take a long time!
35    * This does not appear to be a problem once deployed to Tomcat.
36    */
37    def exportAssetTreeTemplate = {
38        response.contentType = ConfigurationHolder.config.grails.mime.types["csv"]
39        response.setHeader("Content-disposition", "attachment; filename=AssetTreeTemplate.csv")
40        def s = csvService.buildAssetTreeTemplate()
41        render s
42    }
43
44    def exportAssetTree = {
45
46        def assetList = Asset.list()
47
48        response.contentType = ConfigurationHolder.config.grails.mime.types["csv"]
49        response.setHeader("Content-disposition", "attachment; filename=AssetTree.csv")
50        def s = csvService.buildAssetTree(assetList)
51        render s
52    }
53
54    def list = {
55        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
56        [ assetInstanceList: Asset.list( params ), assetInstanceTotal: Asset.count() ]
57    }
58
59    def search = {
60
61        if(session.taskSearchParamsMax)
62            params.max = session.taskSearchParamsMax
63
64        params.max = Math.min( params.max ? params.max.toInteger() : 10,  1000)
65
66        def assetInstanceList = []
67        def assetInstanceTotal
68        def filterParams = [:]
69
70        // Quick Search:
71        if(!params.filter) {
72            assetInstanceList = Asset.list( params )
73            assetInstanceTotal = Asset.count()
74            filterParams.quickSearch = params.quickSearch
75        }
76        else {
77        // filterPane:
78            assetInstanceList = filterService.filter( params, Asset )
79            assetInstanceTotal = filterService.count( params, Asset )
80            filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params)
81        }
82
83        // export plugin:
84        if(params?.format && params.format != "html") {
85
86            def dateFmt = { date ->
87                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
88            }
89
90//             def fmtAsset = { m ->
91//                     def r = ''
92//                     def assetInstance = Asset.findByName(m)
93//
94//                     r +=  assetInstance
95//                     r += ", "
96//
97//                     def  lastSubAsset = assetInstance.subAssets.size() - 1
98//                     assetInstance.subAssets.eachWithIndex() { obj, i ->
99//                         r += "\"" + obj + "\""
100//                         if( i < lastSubAsset )
101//                             r += ", "
102//                     }
103//                     return r
104//             }
105
106//             def fmtSubAsset = { m ->
107//                     def r = ''
108//                     m.each() {
109//                         def machine = Machine.findByName(it)
110//                         def assemblies = machine.assemblies
111//                         r += machine.name
112//                         r += " "
113//                         r += assemblies
114//                         r += " "
115//                     }
116//                     return r
117//             }
118
119            String title = "Asset List."
120
121            response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
122            response.setHeader("Content-disposition", "attachment; filename=tasks.${params.extension}")
123            List fields = ["section.site",
124                                "section",
125                                "name",
126                                "description"]
127            Map labels = ["section.site": "Site",
128                                "section": "Section",
129                                "name": "Asset",
130                                "description": "Description"]
131//             Map labels
132//             Map formatters = ["subAsset.name": fmtSubAsset]
133            Map formatters = [:]
134            Map parameters = [title: title, separator: ","]
135
136            exportService.export(params.format,
137                                                response.outputStream,
138                                                assetInstanceList.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) },
139                                                fields,
140                                                labels,
141                                                formatters,
142                                                parameters)
143        }
144
145        // Add some basic params to filterParams.
146        filterParams.max = params.max
147        filterParams.offset = params.offset?.toInteger() ?: 0
148        filterParams.sort = params.sort ?: "id"
149        filterParams.order = params.order ?: "desc"
150
151        return[ assetInstanceList: assetInstanceList,
152                assetInstanceTotal: assetInstanceTotal,
153                filterParams: filterParams ]
154
155    } // end search()
156
157    def show = {
158       
159        // In the case of an actionSubmit button, rewrite action name from 'index'.
160        if(params._action_Show)
161        { params.action='show' }
162       
163        def assetInstance = Asset.get( params.id )
164
165        if(!assetInstance) {
166            flash.message = "Asset not found with id ${params.id}"
167            redirect(action:search)
168        }
169        else { return [ assetInstance : assetInstance ] }
170    }
171
172    def delete = {
173        def assetInstance = Asset.get( params.id )
174        if(assetInstance) {
175            try {
176                assetInstance.delete(flush:true)
177                flash.message = "Asset ${params.id} deleted"
178                redirect(action:search)
179            }
180            catch(org.springframework.dao.DataIntegrityViolationException e) {
181                flash.message = "Asset ${params.id} could not be deleted"
182                redirect(action:show,id:params.id)
183            }
184        }
185        else {
186            flash.message = "Asset not found with id ${params.id}"
187            redirect(action:search)
188        }
189    }
190
191    def edit = {
192       
193        // In the case of an actionSubmit button, rewrite action name from 'index'.
194        if(params._action_Edit)
195        { params.action='edit' }
196       
197        def assetInstance = Asset.get( params.id )
198
199        if(!assetInstance) {
200            flash.message = "Asset not found with id ${params.id}"
201            redirect(action:search)
202        }
203        else {
204            return [ assetInstance : assetInstance ]
205        }
206    }
207
208    def update = {
209        def assetInstance = Asset.get( params.id )
210        if(assetInstance) {
211            if(params.version) {
212                def version = params.version.toLong()
213                if(assetInstance.version > version) {
214                   
215                    assetInstance.errors.rejectValue("version", "asset.optimistic.locking.failure", "Another user has updated this Asset while you were editing.")
216                    render(view:'edit',model:[assetInstance:assetInstance])
217                    return
218                }
219            }
220            assetInstance.properties = params
221            if(!assetInstance.hasErrors() && assetInstance.save(flush: true)) {
222                flash.message = "Asset ${params.id} updated"
223                redirect(action:show,id:assetInstance.id)
224            }
225            else {
226                render(view:'edit',model:[assetInstance:assetInstance])
227            }
228        }
229        else {
230            flash.message = "Asset not found with id ${params.id}"
231            redirect(action:list)
232        }
233    }
234
235    def create = {
236        def assetInstance = new Asset()
237        assetInstance.properties = params
238        return ['assetInstance':assetInstance]
239    }
240
241    def copy = {
242        def assetToCopy = Asset.get(params.asset.id)
243
244        if(!assetToCopy) {
245            flash.message = "Please select an asset to copy."
246            redirect(action: list)
247            return
248        }
249
250        def assetInstance = new Asset(name: assetToCopy.name,
251                                                            description: assetToCopy.description,
252                                                            section: assetToCopy.section)
253        assetInstance.properties = params
254        return ['assetInstance':assetInstance, assetToCopy: assetToCopy]
255    }
256
257    def save = {
258        def assetInstance = new Asset(params)
259        if(!assetInstance.hasErrors() && assetInstance.save(flush: true)) {
260            flash.message = "Asset ${assetInstance.id} created"
261            redirect(action:show,id:assetInstance.id)
262        }
263        else {
264            render(view:'create',model:[assetInstance:assetInstance])
265        }
266    }
267
268    def saveCopy = {
269        def result = assetService.saveCopy(params)
270
271        if(!result.error) {
272            flash.message = g.message(code: "default.create.success", args: ["Asset", result.assetInstance.id])
273            redirect(action:show, id: result.assetInstance.id)
274            return
275        }
276
277        if(result.error.code == "default.not.found") {
278            flash.message = g.message(code: result.error.code, args: ["Asset", params.assetToCopy?.id])
279            redirect(action: list)
280            return
281        }
282
283        if(result.error.code != "default.create.failure") {
284            flash.warning = g.message(code: result.error.code, args: ["Asset"])
285        }
286
287        render(view:'copy', model:[assetInstance: result.assetInstance, assetToCopy: result.assetToCopy])
288    }
289
290} // end class
Note: See TracBrowser for help on using the repository browser.