Index: trunk/src/grails-app/controllers/AssignedPersonController.groovy
===================================================================
--- trunk/src/grails-app/controllers/AssignedPersonController.groovy	(revision 96)
+++ trunk/src/grails-app/controllers/AssignedPersonController.groovy	(revision 96)
@@ -0,0 +1,99 @@
+import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+
+class AssignedPersonController extends BaseAppAdminController {
+    
+    def index = { redirect(action:list,params:params) }
+
+    // the delete, save and update actions only accept POST requests
+    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
+
+    def list = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+        [ assignedPersonInstanceList: AssignedPerson.list( params ), assignedPersonInstanceTotal: AssignedPerson.count() ]
+    }
+
+    def show = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+
+        if(!assignedPersonInstance) {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else { return [ assignedPersonInstance : assignedPersonInstance ] }
+    }
+
+    def delete = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+        if(assignedPersonInstance) {
+            try {
+                assignedPersonInstance.delete()
+                flash.message = "AssignedPerson ${params.id} deleted"
+                redirect(action:list)
+            }
+            catch(org.springframework.dao.DataIntegrityViolationException e) {
+                flash.message = "AssignedPerson ${params.id} could not be deleted"
+                redirect(action:show,id:params.id)
+            }
+        }
+        else {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:list)
+        }
+    }
+
+    def edit = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+
+        if(!assignedPersonInstance) {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else {
+            return [ assignedPersonInstance : assignedPersonInstance ]
+        }
+    }
+
+    def update = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+        if(assignedPersonInstance) {
+            if(params.version) {
+                def version = params.version.toLong()
+                if(assignedPersonInstance.version > version) {
+                    
+                    assignedPersonInstance.errors.rejectValue("version", "assignedPerson.optimistic.locking.failure", "Another user has updated this AssignedPerson while you were editing.")
+                    render(view:'edit',model:[assignedPersonInstance:assignedPersonInstance])
+                    return
+                }
+            }
+            assignedPersonInstance.properties = params
+            if(!assignedPersonInstance.hasErrors() && assignedPersonInstance.save()) {
+                flash.message = "AssignedPerson ${params.id} updated"
+                redirect(action:show,id:assignedPersonInstance.id)
+            }
+            else {
+                render(view:'edit',model:[assignedPersonInstance:assignedPersonInstance])
+            }
+        }
+        else {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:edit,id:params.id)
+        }
+    }
+
+    def create = {
+        def assignedPersonInstance = new AssignedPerson()
+        assignedPersonInstance.properties = params
+        return ['assignedPersonInstance':assignedPersonInstance]
+    }
+
+    def save = {
+        def assignedPersonInstance = new AssignedPerson(params)
+        if(!assignedPersonInstance.hasErrors() && assignedPersonInstance.save()) {
+            flash.message = "AssignedPerson ${assignedPersonInstance.id} created"
+            redirect(action:show,id:assignedPersonInstance.id)
+        }
+        else {
+            render(view:'create',model:[assignedPersonInstance:assignedPersonInstance])
+        }
+    }
+}
Index: trunk/src/grails-app/controllers/AssignedPersonDetailedController.groovy
===================================================================
--- trunk/src/grails-app/controllers/AssignedPersonDetailedController.groovy	(revision 96)
+++ trunk/src/grails-app/controllers/AssignedPersonDetailedController.groovy	(revision 96)
@@ -0,0 +1,99 @@
+import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+
+class AssignedPersonController extends BaseController {
+    
+    def index = { redirect(action:list,params:params) }
+
+    // the delete, save and update actions only accept POST requests
+    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
+
+    def list = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+        [ assignedPersonInstanceList: AssignedPerson.list( params ), assignedPersonInstanceTotal: AssignedPerson.count() ]
+    }
+
+    def show = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+
+        if(!assignedPersonInstance) {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else { return [ assignedPersonInstance : assignedPersonInstance ] }
+    }
+
+    def delete = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+        if(assignedPersonInstance) {
+            try {
+                assignedPersonInstance.delete()
+                flash.message = "AssignedPerson ${params.id} deleted"
+                redirect(action:list)
+            }
+            catch(org.springframework.dao.DataIntegrityViolationException e) {
+                flash.message = "AssignedPerson ${params.id} could not be deleted"
+                redirect(action:show,id:params.id)
+            }
+        }
+        else {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:list)
+        }
+    }
+
+    def edit = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+
+        if(!assignedPersonInstance) {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:list)
+        }
+        else {
+            return [ assignedPersonInstance : assignedPersonInstance ]
+        }
+    }
+
+    def update = {
+        def assignedPersonInstance = AssignedPerson.get( params.id )
+        if(assignedPersonInstance) {
+            if(params.version) {
+                def version = params.version.toLong()
+                if(assignedPersonInstance.version > version) {
+                    
+                    assignedPersonInstance.errors.rejectValue("version", "assignedPerson.optimistic.locking.failure", "Another user has updated this AssignedPerson while you were editing.")
+                    render(view:'edit',model:[assignedPersonInstance:assignedPersonInstance])
+                    return
+                }
+            }
+            assignedPersonInstance.properties = params
+            if(!assignedPersonInstance.hasErrors() && assignedPersonInstance.save()) {
+                flash.message = "AssignedPerson ${params.id} updated"
+                redirect(action:show,id:assignedPersonInstance.id)
+            }
+            else {
+                render(view:'edit',model:[assignedPersonInstance:assignedPersonInstance])
+            }
+        }
+        else {
+            flash.message = "AssignedPerson not found with id ${params.id}"
+            redirect(action:edit,id:params.id)
+        }
+    }
+
+    def create = {
+        def assignedPersonInstance = new AssignedPerson()
+        assignedPersonInstance.properties = params
+        return ['assignedPersonInstance':assignedPersonInstance]
+    }
+
+    def save = {
+        def assignedPersonInstance = new AssignedPerson(params)
+        if(!assignedPersonInstance.hasErrors() && assignedPersonInstance.save()) {
+            flash.message = "AssignedPerson ${assignedPersonInstance.id} created"
+            redirect(action:show,id:assignedPersonInstance.id)
+        }
+        else {
+            render(view:'create',model:[assignedPersonInstance:assignedPersonInstance])
+        }
+    }
+}
Index: trunk/src/grails-app/controllers/BaseAppAdminController.groovy
===================================================================
--- trunk/src/grails-app/controllers/BaseAppAdminController.groovy	(revision 96)
+++ trunk/src/grails-app/controllers/BaseAppAdminController.groovy	(revision 96)
@@ -0,0 +1,9 @@
+import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+
+@Secured(['ROLE_AppAdmin'])
+abstract class BaseAppAdminController {
+    def whatsit() {
+    }
+
+}
+
Index: trunk/src/grails-app/controllers/TaskController.groovy
===================================================================
--- trunk/src/grails-app/controllers/TaskController.groovy	(revision 93)
+++ trunk/src/grails-app/controllers/TaskController.groovy	(revision 96)
@@ -1,6 +1,5 @@
 import org.codehaus.groovy.grails.plugins.springsecurity.Secured
 
-@Secured(['ROLE_AppAdmin']) 
-class TaskController extends BaseController {
+class TaskController extends BaseAppAdminController {
     
     def index = { redirect(action:list,params:params) }
@@ -10,7 +9,8 @@
 
     def list = {
-        if(!params.max) params.max = 10
-        [ taskInstanceList: Task.list( params ) ]
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+        [ taskInstanceList: Task.list( params ), taskInstanceTotal: Task.count() ]
     }
+
     def show = {
         def taskInstance = Task.get( params.id )
@@ -22,11 +22,17 @@
         else { return [ taskInstance : taskInstance ] }
     }
-  
+
     def delete = {
         def taskInstance = Task.get( params.id )
         if(taskInstance) {
-            taskInstance.delete()
-            flash.message = "Task ${params.id} deleted"
-            redirect(action:list)
+            try {
+                taskInstance.delete()
+                flash.message = "Task ${params.id} deleted"
+                redirect(action:list)
+            }
+            catch(org.springframework.dao.DataIntegrityViolationException e) {
+                flash.message = "Task ${params.id} could not be deleted"
+                redirect(action:show,id:params.id)
+            }
         }
         else {
@@ -51,4 +57,13 @@
         def taskInstance = Task.get( params.id )
         if(taskInstance) {
+            if(params.version) {
+                def version = params.version.toLong()
+                if(taskInstance.version > version) {
+                    
+                    taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                    render(view:'edit',model:[taskInstance:taskInstance])
+                    return
+                }
+            }
             taskInstance.properties = params
             if(!taskInstance.hasErrors() && taskInstance.save()) {
@@ -82,4 +97,3 @@
         }
     }
-
 }
Index: trunk/src/grails-app/controllers/TaskDetailedController.groovy
===================================================================
--- trunk/src/grails-app/controllers/TaskDetailedController.groovy	(revision 93)
+++ trunk/src/grails-app/controllers/TaskDetailedController.groovy	(revision 96)
@@ -9,6 +9,6 @@
 
     def list = {
-        if(!params.max) params.max = 10
-        [ taskInstanceList: Task.list( params ) ]
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+        [ taskInstanceList: Task.list( params ), taskInstanceTotal: Task.count() ]
     }
 
@@ -26,7 +26,13 @@
         def taskInstance = Task.get( params.id )
         if(taskInstance) {
-            taskInstance.delete()
-            flash.message = "Task ${params.id} deleted"
-            redirect(action:list)
+            try {
+                taskInstance.delete()
+                flash.message = "Task ${params.id} deleted"
+                redirect(action:list)
+            }
+            catch(org.springframework.dao.DataIntegrityViolationException e) {
+                flash.message = "Task ${params.id} could not be deleted"
+                redirect(action:show,id:params.id)
+            }
         }
         else {
@@ -57,4 +63,13 @@
         def taskInstance = Task.get( params.id )
         if(taskInstance) {
+            if(params.version) {
+                def version = params.version.toLong()
+                if(taskInstance.version > version) {
+                    
+                    taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
+                    render(view:'edit',model:[taskInstance:taskInstance])
+                    return
+                }
+            }
             taskInstance.properties = params
             if(!taskInstance.hasErrors() && taskInstance.save()) {
