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

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

Add AssetSubItemService and start moving methods to it.

File size: 6.3 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2
3class AssetSubItemDetailedController extends BaseController {
4
5    def assetSubItemService
6
7    def index = { redirect(controller: "assetDetailed", params:params) }
8
9    // the delete, save and update actions only accept POST requests
10    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
11
12    def show = {
13        def assetSubItemInstance = AssetSubItem.get( params.id )
14
15        if(!assetSubItemInstance) {
16            flash.message = "AssetSubItem not found with id ${params.id}"
17            redirect(controller: "assetDetailed", action: "search")
18        }
19        else { return [ assetSubItemInstance : assetSubItemInstance ] }
20    }
21
22    def delete = {
23        def assetSubItemInstance = AssetSubItem.get( params.id )
24        if(assetSubItemInstance) {
25            try {
26                assetSubItemInstance.delete(flush:true)
27                flash.message = "AssetSubItem ${params.id} deleted"
28                redirect(controller: "assetDetailed", action: "search")
29            }
30            catch(org.springframework.dao.DataIntegrityViolationException e) {
31                flash.errorMessage = "AssetSubItem ${params.id} could not be deleted"
32                redirect(action:show,id:params.id)
33            }
34        }
35        else {
36            flash.message = "AssetSubItem not found with id ${params.id}"
37            redirect(controller: "assetDetailed", action: "search")
38        }
39    }
40
41    def edit = {
42        def assetSubItemInstance = AssetSubItem.get( params.id )
43
44        if(!assetSubItemInstance) {
45            flash.message = "AssetSubItem not found with id ${params.id}"
46            redirect(controller: "assetDetailed", action: "search")
47        }
48        else {
49            return [ assetSubItemInstance : assetSubItemInstance ]
50        }
51    }
52
53    def update = {
54        def assetSubItemInstance = AssetSubItem.get( params.id )
55        if(assetSubItemInstance) {
56            if(params.version) {
57                def version = params.version.toLong()
58                if(assetSubItemInstance.version > version) {
59
60                    assetSubItemInstance.errors.rejectValue("version", "assetSubItem.optimistic.locking.failure", "Another user has updated this AssetSubItem while you were editing.")
61                    render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
62                    return
63                }
64            }
65
66            assetSubItemInstance.properties = params
67
68//             if(!assetSubItemInstance.asset && !assetSubItemInstance.parentItem) {
69//                 flash.message = "Either an asset or parentItem is required."
70//                 render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
71//                 return
72//             }
73//
74//             if(assetSubItemInstance.asset && assetSubItemInstance.parentItem) {
75//             flash.message = "Both an asset and parentItem may not be specified at the same time."
76//                 render(view:'edit',model:[parentItem:parentItem])
77//                 return
78//             }
79
80            if(!assetSubItemInstance.hasErrors() && assetSubItemInstance.save(flush: true)) {
81                flash.message = "AssetSubItem ${params.id} updated"
82
83                if(assetSubItemInstance.assets)
84                    redirect(controller: "assetDetailed", action:"show", id: assetSubItemInstance.assets.toArray()[0].id)
85                else {
86                    //Get the top parentItem.
87                    def parentItem = assetSubItemInstance.parentItem
88                    def i = 0
89                    while(parentItem?.parentItem) {
90                        parentItem = parentItem.parentItem
91                        // Protect against infinite recurrsion.
92                        i++
93                        if(i > 100)
94                            break
95                    }
96
97                    if(parentItem?.assets)
98                        redirect(controller: "assetDetailed", action:"show", id: parentItem.assets.toArray()[0].id)
99                    else
100                        redirect(action:"show", id: assetSubItemInstance.id) // End stop if all else fails.
101                }
102            }
103            else {
104                render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
105            }
106        }
107        else {
108            flash.message = "AssetSubItem not found with id ${params.id}"
109            redirect(controller: "assetDetailed", action: "search")
110        }
111    }
112
113    def create = {
114        def result = assetSubItemService.create(params)
115
116        if(!result.error)
117            return [assetSubItemInstance: result.assetSubItemInstance, assetInstance: result.assetInstance]
118
119        flash.message = g.message(code: result.error.code, args: result.error.args)
120        redirect(controller: 'assetDetailed', action: 'search')
121    }
122
123    def save = {
124        def result = assetSubItemService.save(params)
125
126        if(!result.error) {
127            // Success.
128            flash.message = g.message(code: "default.create.success", args: ["AssetSubItem", result.assetSubItemInstance.name])
129
130            /// @todo: This just grabs the first parent in an unsorted list and needs improving.
131            if(result.assetSubItemInstance.assets)
132                redirect(controller: "assetDetailed", action:"show", id: result.assetSubItemInstance.assets.toArray()[0].id)
133            else {
134                //Get the top parentItem.
135                def parentItem = result.assetSubItemInstance.parentItem
136                def i = 0
137                while(parentItem?.parentItem) {
138                    parentItem = parentItem.parentItem
139                    // Protect against infinite recurrsion.
140                    i++
141                    if(i > 100)
142                        break
143                }
144
145                if(parentItem?.assets)
146                    redirect(controller: "assetDetailed", action:"show", id: parentItem.assets.toArray()[0].id)
147                else
148                    redirect(action:"show", id: result.assetSubItemInstance.id) // End stop if all else fails.
149            }
150            return
151        }
152
153        if(result.error.code == "assetSubItem.asset.not.found")
154            flash.errorMessage = g.message(code: "default.create.success")
155
156        render(view:'create', model:[assetSubItemInstance: result.assetSubItemInstance, assetInstance: result.assetInstance])
157    }
158
159} // end class
Note: See TracBrowser for help on using the repository browser.