Index: trunk/grails-app/controllers/AssetDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/AssetDetailedController.groovy	(revision 283)
+++ trunk/grails-app/controllers/AssetDetailedController.groovy	(revision 284)
@@ -234,38 +234,25 @@
 
     def create = {
-        def assetInstance = new Asset()
-        assetInstance.properties = params
-        return ['assetInstance':assetInstance]
+        def result = assetService.create(params)
+
+        if(!result.error)
+            return [assetInstance: result.assetInstance]
+
+        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
+        redirect(action: search)
     }
 
     def copy = {
-        def assetToCopy = Asset.get(params.asset.id)
-
-        if(!assetToCopy) {
-            flash.message = "Please select an asset to copy."
-            redirect(action: list)
-            return
-        }
-
-        def assetInstance = new Asset(name: assetToCopy.name,
-                                                            description: assetToCopy.description,
-                                                            section: assetToCopy.section)
-        assetInstance.properties = params
-        return ['assetInstance':assetInstance, assetToCopy: assetToCopy]
+        def result = assetService.copy(params)
+
+        if(!result.error)
+            return [assetInstance: result.assetInstance, assetToCopy: result.assetToCopy]
+
+        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
+        redirect(action: search)
     }
 
     def save = {
-        def assetInstance = new Asset(params)
-        if(!assetInstance.hasErrors() && assetInstance.save(flush: true)) {
-            flash.message = "Asset ${assetInstance.id} created"
-            redirect(action:show,id:assetInstance.id)
-        }
-        else {
-            render(view:'create',model:[assetInstance:assetInstance])
-        }
-    }
-
-    def saveCopy = {
-        def result = assetService.saveCopy(params)
+        def result = assetService.save(params)
 
         if(!result.error) {
@@ -275,4 +262,17 @@
         }
 
+        render(view:'create', model:[assetInstance: result.assetInstance])
+    }
+
+
+    def saveCopy = {
+        def result = assetService.saveCopy(params)
+
+        if(!result.error) {
+            flash.message = g.message(code: "default.create.success", args: ["Asset", result.assetInstance.id])
+            redirect(action:show, id: result.assetInstance.id)
+            return
+        }
+
         if(result.error.code == "default.not.found") {
             flash.message = g.message(code: result.error.code, args: ["Asset", params.assetToCopy?.id])
