Index: trunk/grails-app/conf/BootStrap.groovy
===================================================================
--- trunk/grails-app/conf/BootStrap.groovy	(revision 148)
+++ trunk/grails-app/conf/BootStrap.groovy	(revision 149)
@@ -1,794 +1,30 @@
 import grails.util.GrailsUtil
 
-class BootStrap 
+class BootStrap
 {
-    //Required to be right here for Acegi plugin.
-    def authenticateService
-    Boolean BootStrapDemoDataSuccessful = true
+    def createDataService
 
     def init = { servletContext ->
 
     println "**** BootStrap GrailsUtil.environment = ${GrailsUtil.environment}"
-    
+
         switch (GrailsUtil.environment)
         {
             case "development":
-                        bootStrapDemoData()
+                        createDataService.ensureAdminAccess()
+                        createDataService.createBaseData()
+                        createDataService.createDemoData()
                         break
             case "test":
+                        createDataService.ensureAdminAccess()
                         break
             case "production":
-                        bootStrapDemoData()
+                        createDataService.ensureAdminAccess()
                         break 
         }
-    
+
     }
 
     def destroy = {
     }
-
-    //Insert some demo/startup data.
-    void bootStrapDemoData()
-    {
-        println "BootStrapping demo data..."
-        3.times{println it}
-
-/***********************
-START OF UTILITIES
-***********************/
-
-//Site
-        def siteInstance
-
-        siteInstance = new Site(name: "Creek Mill")
-        BootStrapSaveAndTest(siteInstance)
-
-        siteInstance = new Site(name: "Jasper Street Depot")
-        BootStrapSaveAndTest(siteInstance)
-
-//UnitOfMeasure
-        def unitOfMeasureInstance
-
-        //UnitOfMeasure #1
-        unitOfMeasureInstance = new UnitOfMeasure(name: "each")
-        BootStrapSaveAndTest(unitOfMeasureInstance)
-
-        //UnitOfMeasure #2
-        unitOfMeasureInstance = new UnitOfMeasure(name: "meter(s)")
-        BootStrapSaveAndTest(unitOfMeasureInstance)
-
-        //UnitOfMeasure #3
-        unitOfMeasureInstance = new UnitOfMeasure(name: "box(es)")
-        BootStrapSaveAndTest(unitOfMeasureInstance)
-
-        //UnitOfMeasure #4
-        unitOfMeasureInstance = new UnitOfMeasure(name: "litre(s)")
-        BootStrapSaveAndTest(unitOfMeasureInstance)
-
-        //UnitOfMeasure #5
-        unitOfMeasureInstance = new UnitOfMeasure(name: "kilogram(s)")
-        BootStrapSaveAndTest(unitOfMeasureInstance)
-
-//Period
-        def periodInstance
-
-        //Period #1
-        periodInstance = new Period(period: "Day(s)")
-        BootStrapSaveAndTest(periodInstance)
-
-        //Period #2
-        periodInstance = new Period(period: "Week(s)")
-        BootStrapSaveAndTest(periodInstance)
-
-        //Period #3
-        periodInstance = new Period(period: "Month(s)")
-        BootStrapSaveAndTest(periodInstance)
-
-        //Period #4
-        periodInstance = new Period(period: "Year(s)")
-        BootStrapSaveAndTest(periodInstance)
-
-/*********************
-START OF PERSON
-*********************/
-
-//TypeOfPersonGroup
-	def personGroupTypeInstance
-        personGroupTypeInstance = new PersonGroupType(name:"Department")
-	BootStrapSaveAndTest(personGroupTypeInstance)
-        personGroupTypeInstance = new PersonGroupType(name:"Contractor")
-	BootStrapSaveAndTest(personGroupTypeInstance)
-        personGroupTypeInstance = new PersonGroupType(name:"ProjectTeam")
-	BootStrapSaveAndTest(personGroupTypeInstance)
-    
-//PersonGroup
-	def personGroupInstance
-        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.findByName("Department"),
-                        name:"Electrical")
-	BootStrapSaveAndTest(personGroupInstance)
-        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.findByName("Department"),
-                        name:"Mechanical")
-	BootStrapSaveAndTest(personGroupInstance)
-        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.findByName("Department"),
-                        name:"Production")
-	BootStrapSaveAndTest(personGroupInstance)
-        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(2),
-                        name:"Kewl AirCon Guys")
-	BootStrapSaveAndTest(personGroupInstance)
-        personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(3),
-                        name:"gnuMims")
-	BootStrapSaveAndTest(personGroupInstance)
-
-//Authority
-        def authInstance
-
-        authInstance = new Authority(description:"Application Admin, not required for daily use! Grants full admin access to the application.",
-                                        authority:"ROLE_AppAdmin")
-        BootStrapSaveAndTest(authInstance)
-
-        authInstance = new Authority(description:"Business manager, grants full management access.",
-                                        authority:"ROLE_Manager")
-        BootStrapSaveAndTest(authInstance)
-
-        authInstance = new Authority(description:"Application User, all application users need this base role to allow login.",
-                                        authority:"ROLE_AppUser")
-        BootStrapSaveAndTest(authInstance)
-            
-//Person
-        def passClearText = "pass"
-        def passwordEncoded = authenticateService.encodePassword(passClearText)
-        def personInstance
-
-        //Person #1
-        personInstance = new Person(loginName:"admin",
-                                    firstName:"Admin",
-                                    lastName:"Powers",
-                                    pass:passClearText,
-                                    password:passwordEncoded,
-                                    email:"admin@example.com")
-        BootStrapSaveAndTest(personInstance)
-        personInstance.addToAuthorities(Authority.get(1))
-        personInstance.addToAuthorities(Authority.get(2))
-        personInstance.addToAuthorities(Authority.get(3))
-        personInstance.addToPersonGroups(PersonGroup.findByName("gnuMims"))
-
-        //Person #2
-        personInstance = new Person(loginName:"manager",
-                                    firstName:"Demo",
-                                    lastName:"Manager",
-                                    pass:passClearText,
-                                    password:passwordEncoded,
-                                    email:"manager@example.com")
-        BootStrapSaveAndTest(personInstance)
-        personInstance.addToAuthorities(Authority.get(2))
-        personInstance.addToAuthorities(Authority.get(3))
-        personInstance.addToPersonGroups(PersonGroup.findByName("gnuMims"))
-
-        //Person #3
-        personInstance = new Person(loginName:"user",
-                                    firstName:"Demo",
-                                    lastName:"User",
-                                    pass:passClearText,
-                                    password:passwordEncoded,
-                                    email:"user@example.com")
-        BootStrapSaveAndTest(personInstance)
-        personInstance.addToAuthorities(Authority.get(3))
-        personInstance.addToPersonGroups(PersonGroup.findByName("Electrical"))
-
-        //Person #4
-        personInstance = new Person(loginName:"craig",
-                                    firstName:"Craig",
-                                    lastName:"SuperSparky",
-                                    pass:passClearText,
-                                    password:passwordEncoded,
-                                    email:"user@example.com")
-        BootStrapSaveAndTest(personInstance)
-        personInstance.addToAuthorities(Authority.get(3))
-        personInstance.addToPersonGroups(PersonGroup.findByName("Electrical"))
-
-        //Person #5
-        personInstance = new Person(loginName:"john",
-                                    firstName:"John",
-                                    lastName:"SuperFitter",
-                                    pass:passClearText,
-                                    password:passwordEncoded,
-                                    email:"user@example.com")
-        BootStrapSaveAndTest(personInstance)
-        personInstance.addToAuthorities(Authority.get(3))
-        personInstance.addToPersonGroups(PersonGroup.findByName("Mechanical"))
-
-        //Person #6
-        personInstance = new Person(loginName:"mann",
-                                    firstName:"Production",
-                                    lastName:"Mann",
-                                    pass:passClearText,
-                                    password:passwordEncoded,
-                                    email:"user@example.com")
-        BootStrapSaveAndTest(personInstance)
-        personInstance.addToAuthorities(Authority.get(3))
-        personInstance.addToPersonGroups(PersonGroup.findByName("Production"))
-
-/*********************
-START OF TASK
-*********************/
-
-//TaskGroup
-        def taskGroupInstance
-
-        taskGroupInstance = new TaskGroup(name:"Engineering Activites",
-                                                                            description:"Engineering daily activities")
-        BootStrapSaveAndTest(taskGroupInstance)
-
-        taskGroupInstance = new TaskGroup(name:"Production Activites",
-                                                                            description:"Production daily activities")
-        BootStrapSaveAndTest(taskGroupInstance)
-
-        taskGroupInstance = new TaskGroup(name:"New Projects",
-                                                                            description:" ")
-        BootStrapSaveAndTest(taskGroupInstance)
-
-//TaskStatus
-        def taskStatusInstance
-    
-        taskStatusInstance = new TaskStatus(name:"Not Started")
-        BootStrapSaveAndTest(taskStatusInstance)
-
-        taskStatusInstance = new TaskStatus(name:"In Progress")
-        BootStrapSaveAndTest(taskStatusInstance)
-
-        taskStatusInstance = new TaskStatus(name:"Completed")
-        BootStrapSaveAndTest(taskStatusInstance)
-
-//TaskPriority
-        def taskPriorityInstance
-
-        taskPriorityInstance = new TaskPriority(name:"Normal")
-        BootStrapSaveAndTest(taskPriorityInstance)
-
-        taskPriorityInstance = new TaskPriority(name:"Low")
-        BootStrapSaveAndTest(taskPriorityInstance)
-
-        taskPriorityInstance = new TaskPriority(name:"High")
-        BootStrapSaveAndTest(taskPriorityInstance)
-
-        taskPriorityInstance = new TaskPriority(name:"Immediate")
-        BootStrapSaveAndTest(taskPriorityInstance)
-
-//TaskType
-        def taskTypeInstance
-
-        taskTypeInstance = new TaskType(name:"Unscheduled Breakin")
-        BootStrapSaveAndTest(taskTypeInstance)
-
-        taskTypeInstance = new TaskType(name:"Preventative Maintenance")
-        BootStrapSaveAndTest(taskTypeInstance)
-
-        taskTypeInstance = new TaskType(name:"Project")
-        BootStrapSaveAndTest(taskTypeInstance)
-
-        taskTypeInstance = new TaskType(name:"Turnaround")
-        BootStrapSaveAndTest(taskTypeInstance)
-
-        taskTypeInstance = new TaskType(name:"Production Run")
-        BootStrapSaveAndTest(taskTypeInstance)
-
-//Task
-        def taskInstance
-
-        //Task #1
-        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
-                 taskStatus:TaskStatus.findByName("Not Started"),
-                 taskPriority:TaskPriority.get(2),
-                 taskType:TaskType.get(1),
-                 leadPerson:Person.get(2),
-                 description:"Check specific level sensor",
-                 comment:"Has been noted as problematic, try recalibrating.",
-                targetStartDate:new Date())
-        BootStrapSaveAndTest(taskInstance)
-
-        //Task #2
-        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
-                taskStatus:TaskStatus.findByName("Not Started"),
-                taskPriority:TaskPriority.get(2),
-                taskType:TaskType.get(1),
-                leadPerson:Person.get(5),
-                description:"Some follow-up work",
-                comment:"Some help required",
-                targetStartDate:new Date()+1,
-                parentTask: Task.get(1))
-        BootStrapSaveAndTest(taskInstance)
-
-        //Task #3
-        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
-                taskStatus:TaskStatus.findByName("Not Started"),
-                taskPriority:TaskPriority.get(2),
-                taskType:TaskType.get(1),
-                leadPerson:Person.get(5),
-                description:"A Sub Task can be created by setting the Parent Task value",
-                comment:"Some help required",
-                targetStartDate:new Date()-1,
-                parentTask: Task.get(1))
-        BootStrapSaveAndTest(taskInstance)
-
-        //Task #4
-        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
-                 taskStatus:TaskStatus.findByName("Not Started"),
-                 taskPriority:TaskPriority.get(2),
-                 taskType:TaskType.get(1),
-                 leadPerson:Person.get(4),
-                 description:"Replace sensor at next opportunity.",
-                 comment:"Nothing else has worked.",
-                targetStartDate:new Date()+7,
-                parentTask: Task.get(1))
-        BootStrapSaveAndTest(taskInstance)
-
-        //Task #5
-        taskInstance = new Task(taskGroup:TaskGroup.findByName("Production Activites"),
-                 taskStatus:TaskStatus.findByName("Not Started"),
-                 taskPriority:TaskPriority.get(2),
-                 taskType:TaskType.get(5),
-                 leadPerson:Person.get(6),
-                 description:"Production Report",
-                 comment:"Production report for specific production run or shift",
-                targetStartDate:new Date()-7)
-        BootStrapSaveAndTest(taskInstance)
-
-        //Task #6
-        taskInstance = new Task(taskGroup:TaskGroup.findByName("New Projects"),
-                 taskStatus:TaskStatus.findByName("Not Started"),
-                 taskPriority:TaskPriority.get(2),
-                 taskType:TaskType.get(3),
-                 leadPerson:Person.get(1),
-                 description:"Make killer CMMS app",
-                 comment:"Use Grails and get a move on!",
-                targetStartDate:new Date()-6)
-        BootStrapSaveAndTest(taskInstance)
-
-//EntryType
-        def entryTypeInstance
-
-        entryTypeInstance = new EntryType(name:"Fault")
-        BootStrapSaveAndTest(entryTypeInstance)
-
-        entryTypeInstance = new EntryType(name:"WorkDone")
-        BootStrapSaveAndTest(entryTypeInstance)
-
-        entryTypeInstance = new EntryType(name:"Production Note")
-        BootStrapSaveAndTest(entryTypeInstance)
-
-        entryTypeInstance = new EntryType(name:"Work Request")
-        BootStrapSaveAndTest(entryTypeInstance)
-
-//Entry
-        def entryInstance
-
-        //Entry #1
-        entryInstance = new Entry(enteredBy: Person.get(3),
-                                                    task: Task.get(1),
-                                                    entryType: EntryType.findByName("Fault"),
-                                                    comment: "This level sensor is causing us trouble.",
-                                                    durationMinute: 20)
-        BootStrapSaveAndTest(entryInstance)
-
-        //Entry #2
-        entryInstance = new Entry(enteredBy: Person.get(4),
-                                                    task: Task.get(1),
-                                                    entryType: EntryType.findByName("WorkDone"),
-                                                    comment: "Cleaned sensor, see how it goes.",
-                                                    durationMinute: 30)
-        BootStrapSaveAndTest(entryInstance)
-
-        //Entry #3
-        entryInstance = new Entry(enteredBy: Person.get(4),
-                                                    task: Task.get(1),
-                                                    entryType: EntryType.findByName("WorkDone"),
-                                                    comment: "Checked up on it later and sensor is dropping out intermittently, created subTask to replace sensor.",
-                                                    durationMinute: 20)
-        BootStrapSaveAndTest(entryInstance)
-
-//ModificationType
-        def taskModificationTypeInstance
-        taskModificationTypeInstance = new TaskModificationType(name:"Created").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"Completed").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"Closed").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"Altered").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"TargetDateModified").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"ScheduledDateModified").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"DescriptionModified").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"AssignedToModified").save()
-        taskModificationTypeInstance = new TaskModificationType(name:"NameModified").save()
-    
-//AssignedPerson
-        def assignedPersonInstance
-
-        //AssignedPerson #1
-        assignedPersonInstance = new AssignedPerson(person: Person.get(4),
-                                                                                        task: Task.get(1),
-                                                                                        estimatedHour: 1,
-                                                                                        estimatedMinute: 20)
-        BootStrapSaveAndTest(assignedPersonInstance)
-
-        //AssignedPerson #2
-        assignedPersonInstance = new AssignedPerson(person: Person.get(5),
-                                                                                        task: Task.get(1),
-                                                                                        estimatedHour: 3,
-                                                                                        estimatedMinute: 30)
-        BootStrapSaveAndTest(assignedPersonInstance)
-
-//TaskRecurringSchedule
-        def taskRecurringScheduleInstance
-
-        //TaskRecurringSchedule #1
-        taskRecurringScheduleInstance = new TaskRecurringSchedule(task: Task.get(1),
-                                                                                                    recurEvery: 1,
-                                                                                                    recurPeriod: Period.get(1),
-                                                                                                    startDate: new Date(),
-                                                                                                    generateAhead: 1,
-                                                                                                    generateAheadPeriod: Period.get(1),
-                                                                                                    taskDuration: 1,
-                                                                                                    taskDurationPeriod: Period.get(1))
-        BootStrapSaveAndTest(taskRecurringScheduleInstance)
-
-        //TaskRecurringSchedule #2
-        taskRecurringScheduleInstance = new TaskRecurringSchedule(task: Task.get(2),
-                                                                                                    recurEvery: 1,
-                                                                                                    recurPeriod: Period.get(1),
-                                                                                                    startDate: new Date(),
-                                                                                                    generateAhead: 1,
-                                                                                                    generateAheadPeriod: Period.get(1),
-                                                                                                    taskDuration: 1,
-                                                                                                    taskDurationPeriod: Period.get(1))
-        BootStrapSaveAndTest(taskRecurringScheduleInstance)
-
-/*************************
-START OF INVENTORY
-**************************/
-
-//InventoryStore
-        def inventoryStoreInstance
-
-        inventoryStoreInstance = new InventoryStore(site: Site.get(1), name: "Store #1")
-        BootStrapSaveAndTest(inventoryStoreInstance)
-
-        inventoryStoreInstance = new InventoryStore(site: Site.get(2), name: "Store #2")
-        BootStrapSaveAndTest(inventoryStoreInstance)
-
-//StoreLocation
-        def storeLocation
-        
-        storeLocation = new StoreLocation(inventoryStore: InventoryStore.get(1), bin: "A1-2")
-        BootStrapSaveAndTest(storeLocation)
-
-        storeLocation = new StoreLocation(inventoryStore: InventoryStore.get(1), bin: "C55")
-        BootStrapSaveAndTest(storeLocation)
-
-//InventoryGroup
-        def inventoryGroupInstance
-
-        //InventoryGroup #1
-        inventoryGroupInstance = new InventoryGroup(name: "Misc")
-        BootStrapSaveAndTest(inventoryGroupInstance)
-
-        //InventoryGroup #2
-        inventoryGroupInstance = new InventoryGroup(name: "Electrical")
-        BootStrapSaveAndTest(inventoryGroupInstance)
-
-        //InventoryGroup #3
-        inventoryGroupInstance = new InventoryGroup(name: "Mechanical")
-        BootStrapSaveAndTest(inventoryGroupInstance)
-
-        //InventoryGroup #4
-        inventoryGroupInstance = new InventoryGroup(name: "Production")
-        BootStrapSaveAndTest(inventoryGroupInstance)
-
-//InventoryType
-        def inventoryTypeInstance
-
-        inventoryTypeInstance = new InventoryType(name: "Consumable")
-        BootStrapSaveAndTest(inventoryTypeInstance)
-
-        inventoryTypeInstance = new InventoryType(name: "Repairable")
-        BootStrapSaveAndTest(inventoryTypeInstance)
-
-//InventoryItem
-        def inventoryItemInstance
-
-        //InventoryItem #1
-        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(1),
-                                                                                    inventoryType: InventoryType.get(1),
-                                                                                    unitOfMeasure: UnitOfMeasure.get(2),
-                                                                                    name: "J-Rope",
-                                                                                    description: "Twine wound J-Rope",
-                                                                                    reorderPoint: 0)
-        BootStrapSaveAndTest(inventoryItemInstance)
-
-        //InventoryItem #2
-        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(1),
-                                                                                    inventoryType: InventoryType.get(1),
-                                                                                    unitOfMeasure: UnitOfMeasure.get(2),
-                                                                                    name: "L-Rope",
-                                                                                    description: "Twine wound L-Rope",
-                                                                                    alternateItems: InventoryItem.get(1),
-                                                                                    reorderPoint: 0)
-        BootStrapSaveAndTest(inventoryItemInstance)
-
-        //InventoryItem #3
-        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(3),
-                                                                                    inventoryType: InventoryType.get(1),
-                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
-                                                                                    name: "2305-2RS",
-                                                                                    description: "Bearing 25x62x24mm double row self aligning ball",
-                                                                                    reorderPoint: 2)
-        BootStrapSaveAndTest(inventoryItemInstance)
-
-        //InventoryItem #4
-        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(2),
-                                                                                    inventoryType: InventoryType.get(1),
-                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
-                                                                                    name: "L1592-K10",
-                                                                                    description: "10kW contactor",
-                                                                                    reorderPoint: 0)
-        BootStrapSaveAndTest(inventoryItemInstance)
-
-        //InventoryItem #5
-        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(3),
-                                                                                    inventoryType: InventoryType.get(1),
-                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
-                                                                                    name: "6205-ZZ",
-                                                                                    description: "Bearing 25x52x15mm single row ball shielded",
-                                                                                    reorderPoint: 2)
-        BootStrapSaveAndTest(inventoryItemInstance)
-
-//StoredItem
-        def storedItemInstance
-
-        //StoredItem #1
-        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(1),
-                                                                            storeLocation: StoreLocation.get(1),
-                                                                            quantity: 8)
-        BootStrapSaveAndTest(storedItemInstance)
-
-        //StoredItem #2
-        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(1),
-                                                                            storeLocation: StoreLocation.get(2),
-                                                                            quantity: 4)
-        BootStrapSaveAndTest(storedItemInstance)
-
-        //StoredItem #3
-        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(2),
-                                                                            storeLocation: StoreLocation.get(1),
-                                                                            quantity: 2)
-        BootStrapSaveAndTest(storedItemInstance)
-
-        //StoredItem #4
-        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(3),
-                                                                            storeLocation: StoreLocation.get(1),
-                                                                            quantity: 2)
-        BootStrapSaveAndTest(storedItemInstance)
-
-        //StoredItem #5
-        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(4),
-                                                                            storeLocation: StoreLocation.get(1),
-                                                                            quantity: 30)
-        BootStrapSaveAndTest(storedItemInstance)
-
-/*******************
-START OF ASSET
-*******************/
-
-//LifePlan
-        def lifeplanInstance
-
-        lifeplanInstance = new LifePlan(name: "Initial Plan")
-        BootStrapSaveAndTest(lifeplanInstance)
-
-//MaintenancePolicy
-        def maintenancePolicyInstance
-
-        //MaintenancePolicy #1
-        maintenancePolicyInstance = new MaintenancePolicy(name: "Fixed Time")
-        BootStrapSaveAndTest(maintenancePolicyInstance)
-
-        //MaintenancePolicy #2
-        maintenancePolicyInstance = new MaintenancePolicy(name: "Condition Based Online")
-        BootStrapSaveAndTest(maintenancePolicyInstance)
-
-        //MaintenancePolicy #3
-        maintenancePolicyInstance = new MaintenancePolicy(name: "Condition Based Offline")
-        BootStrapSaveAndTest(maintenancePolicyInstance)
-
-        //MaintenancePolicy #4
-        maintenancePolicyInstance = new MaintenancePolicy(name: "Design Out")
-        BootStrapSaveAndTest(maintenancePolicyInstance)
-
-        //MaintenancePolicy #5
-        maintenancePolicyInstance = new MaintenancePolicy(name: "Operate To Failure")
-        BootStrapSaveAndTest(maintenancePolicyInstance)
-
-//TaskProcedure
-        def taskProcedureInstance
-
-        taskProcedureInstance = new TaskProcedure(name: "Daily check")
-        BootStrapSaveAndTest(taskProcedureInstance)
-        taskProcedureInstance.addToTasks(Task.get(1))
-
-//MaintenanceAction
-        def maintenanceActionInstance
-
-        //MaintenanceAction #1
-        maintenanceActionInstance = new MaintenanceAction(description: "Check all E-stops, activate E-stops S1-S12 and ensure machine cannot run",
-                                                                                                        procedureStepNumber: 1,
-                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
-                                                                                                        taskProcedure: TaskProcedure.get(1))
-        BootStrapSaveAndTest(maintenanceActionInstance)
-
-        //MaintenanceAction #2
-        maintenanceActionInstance = new MaintenanceAction(description: "Do more pushups",
-                                                                                                        procedureStepNumber: 2,
-                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
-                                                                                                        taskProcedure: TaskProcedure.get(1))
-        BootStrapSaveAndTest(maintenanceActionInstance)
-
-        //MaintenanceAction #3
-        maintenanceActionInstance = new MaintenanceAction(description: "Ok just one more pushup",
-                                                                                                        procedureStepNumber: 3,
-                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
-                                                                                                        taskProcedure: TaskProcedure.get(1))
-        BootStrapSaveAndTest(maintenanceActionInstance)
-                                                                                                    
-//SystemSection
-    def systemSectionInstance
-
-    //SystemSection #1
-    systemSectionInstance = new SystemSection(name: "Press Section",
-                                                                                   site: Site.get(1))
-    BootStrapSaveAndTest(systemSectionInstance)
-
-    //SystemSection #2
-    systemSectionInstance = new SystemSection(name: "RO System",
-                                                                                   site: Site.get(2))
-    BootStrapSaveAndTest(systemSectionInstance)
-
-    //SystemSection #3
-    systemSectionInstance = new SystemSection(name: "Auxilliray Section",
-                                                                                   site: Site.get(1))
-    BootStrapSaveAndTest(systemSectionInstance)
-
-//AssetType
-        def assetTypeInstance
-
-        //AssetType #1
-        assetTypeInstance = new AssetType(name: "Print Unit")
-        BootStrapSaveAndTest(assetTypeInstance)
-
-        //AssetType #2
-        assetTypeInstance = new AssetType(name: "Reactor Tower")
-        BootStrapSaveAndTest(assetTypeInstance)
-    
-//Assembly
-        def assemblyInstance
-
-        //Assembly #1
-        assemblyInstance = new Assembly(name: "Print Couple",
-                                                                        assetType: AssetType.get(1))
-        BootStrapSaveAndTest(assemblyInstance)
-//        assemblyInstance.addToMaintenanceActions(MaintenanceAction.get(1))
-        
-        //Assembly #2
-        assemblyInstance = new Assembly(name: "Agitator",
-                                                                        assetType: AssetType.get(2))
-        BootStrapSaveAndTest(assemblyInstance)
-
-//SubAssembly
-        def subAssemblyInstance
-
-        //SubAssembly #1
-        subAssemblyInstance = new SubAssembly(name: "Cylinder",
-                                                                                    assembly: Assembly.get(1))
-        BootStrapSaveAndTest(subAssemblyInstance)
- 
-         //SubAssembly #2
-        subAssemblyInstance = new SubAssembly(name: "Gearmotor",
-                                                                                    assembly: Assembly.get(2))
-        BootStrapSaveAndTest(subAssemblyInstance)
-
-//ComponentItem
-        def componentItemInstance
-    
-        //ComponentItem #1
-        componentItemInstance = new ComponentItem(name: "Bearing",
-                                                                                            subAssembly: SubAssembly.get(1))
-        BootStrapSaveAndTest(componentItemInstance)
-
-         //ComponentItem #2
-        componentItemInstance = new ComponentItem(name: "Drive shaft oil seal",
-                                                                                            subAssembly: SubAssembly.get(2))
-        BootStrapSaveAndTest(componentItemInstance)
-
-//Asset
-        def assetInstance
-
-        //Asset #1
-        assetInstance = new Asset(name: "Print Unit 22",
-                                                        assetType: AssetType.get(1),
-                                                        systemSection: SystemSection.get(1))
-        BootStrapSaveAndTest(assetInstance)
-//        assetInstance.addToMaintenanceActions(MaintenanceAction.get(1))
-
-        //Asset #2
-        assetInstance = new Asset(name: "Print Unit 21",
-                                                        assetType: AssetType.get(1),
-                                                        systemSection: SystemSection.get(1))
-        BootStrapSaveAndTest(assetInstance)
-
-        //Asset #3
-        assetInstance = new Asset(name: "Print Unit 23",
-                                                        assetType: AssetType.get(1),
-                                                        systemSection: SystemSection.get(1))
-        BootStrapSaveAndTest(assetInstance)
-
-        //Asset #4
-        assetInstance = new Asset(name: "RO 1",
-                                                        assetType: AssetType.get(2),
-                                                        systemSection: SystemSection.get(2))
-        BootStrapSaveAndTest(assetInstance)
-
-//AssetExtendedAttributeType
-        def assetExtendedAttributeInstanceType
-
-        //AssetExtendedAttributeType #1
-        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Model Number")
-        BootStrapSaveAndTest(assetExtendedAttributeInstanceType)
-
-        //AssetExtendedAttributeType #2
-        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Purchase Cost")
-        BootStrapSaveAndTest(assetExtendedAttributeInstanceType)
-
-        //AssetExtendedAttributeType #3
-        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Serial Number")
-        BootStrapSaveAndTest(assetExtendedAttributeInstanceType)
-
-        //AssetExtendedAttributeType #4
-        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Manufactured Date")
-        BootStrapSaveAndTest(assetExtendedAttributeInstanceType)
-
-        //AssetExtendedAttributeType #5
-        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Location Description")
-        BootStrapSaveAndTest(assetExtendedAttributeInstanceType)
-
-//AssetExtendedAttribute
-        def assetExtendedAttributeInstance
-
-        //AssetExtendedAttribute #1
-        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "PU Mark 2",
-                                                                                                                    asset: Asset.get(1),
-                                                                                                                    assetExtendedAttributeType: AssetExtendedAttributeType.get(1))
-        BootStrapSaveAndTest(assetExtendedAttributeInstance)
-
-        //AssetExtendedAttribute #2
-        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "On the far side of Tank 5",
-                                                                                                                    asset: Asset.get(1),
-                                                                                                                    assetExtendedAttributeType: AssetExtendedAttributeType.get(5))
-        BootStrapSaveAndTest(assetExtendedAttributeInstance)
-
-/*************************
-Finally did it all work. 
-**************************/       
-        if(BootStrapDemoDataSuccessful) {
-            println "BootStrapping demo data...successful."
-        }
-        else println "BootStrapping demo data...failed."
-    }
-
-/****************************************
-Call this function instead of .save()
-*****************************************/    
-    void BootStrapSaveAndTest(object) {
-        if(!object.save()) {
-            BootStrapDemoDataSuccessful = false
-            println "'${object}' failed to save!"
-            println object.errors
-
-        }
-    } 
 }
Index: trunk/grails-app/conf/Config.groovy
===================================================================
--- trunk/grails-app/conf/Config.groovy	(revision 148)
+++ trunk/grails-app/conf/Config.groovy	(revision 149)
@@ -78,5 +78,5 @@
         subItems: [
             [order:10, controller:'appCore', title:'Start', action:'start', isVisible: { true }],
-            [order:20, controller:'appCore', title:'Manager', action:'manager', isVisible: { authenticateService.ifAllGranted('ROLE_Manager') }],
+            [order:20, controller:'appCore', title:'Manager', action:'manager', isVisible: { authenticateService.ifAnyGranted('ROLE_Manager,ROLE_AppAdmin') }],
             [order:30, controller:'appCore', title:'Admin', action:'appAdmin', isVisible: { authenticateService.ifAllGranted('ROLE_AppAdmin') }],
             [order:90, controller:'appCore', title:'Timeout', action:'changeSessionTimeout', isVisible: { params.action == 'changeSessionTimeout' }],
Index: trunk/grails-app/conf/DataSource.groovy
===================================================================
--- trunk/grails-app/conf/DataSource.groovy	(revision 148)
+++ trunk/grails-app/conf/DataSource.groovy	(revision 149)
@@ -1,12 +1,4 @@
 dataSource {
     pooled = true
-    /** HSQLDB  */
-    driverClassName = "org.hsqldb.jdbcDriver"
-    username = "sa"
-    password = ""
-    /** MySQL */
-//     driverClassName = "com.mysql.jdbc.Driver"
-//     username = "gnumimsadmin"
-//     password = "gnumimsadmin"
 }
 hibernate {
@@ -17,14 +9,20 @@
 
 // Environment specific settings.
-// create-drop:  drop tables and data between sessions, then call Bootstrap.
-// create:        drop data between sessions, can't explain the rest of the behaviour.
-// update:       keep data, update tables as required, then call BootStrap.
+// create-drop: Drop and re-create the database between sessions. Deletes existing data.
+// create:       Create the database if it doesn't exist, but don't modify it if it does. Deletes existing data.
+// update:     Create the database if it doesn't exist, and modify it if it does exist. Keep data.
 environments {
     development {
         dataSource {
             /** HSQLDB - In memory */
+            driverClassName = "org.hsqldb.jdbcDriver"
+            username = "sa"
+            password = ""
             dbCreate = "create-drop"
             url = "jdbc:hsqldb:mem:devDB"
             /** MySQL */
+//             driverClassName = "com.mysql.jdbc.Driver"
+//             username = "gnumimsadmin"
+//             password = "gnumimsadmin"
 //             dbCreate = "create-drop"
 //             url = "jdbc:mysql://host:3306/gnumims_dev"
@@ -34,7 +32,13 @@
         dataSource {
             /** HSQLDB - In memory */
+            driverClassName = "org.hsqldb.jdbcDriver"
+            username = "sa"
+            password = ""
             dbCreate = "update"
             url = "jdbc:hsqldb:mem:devDb"
             /** MySQL */
+//             driverClassName = "com.mysql.jdbc.Driver"
+//             username = "gnumimsadmin"
+//             password = "gnumimsadmin"
 //             dbCreate = "update"
 //             url = "jdbc:mysql://host:3306/gnumims_test"
@@ -43,14 +47,23 @@
     production {
         dataSource {
+            /* Delete dbCreate line after setup! */
             /** HSQLDB - In memory */
-            //Delete dbCreate line after setup!
-            dbCreate = "create-drop"
-            url = "jdbc:hsqldb:mem:devDB"
+//             driverClassName = "org.hsqldb.jdbcDriver"
+//             username = "sa"
+//             password = ""
+//             dbCreate = "create-drop"
+//             url = "jdbc:hsqldb:mem:devDB"
             /** HSQLDB - In file */
+//             driverClassName = "org.hsqldb.jdbcDriver"
+//             username = "sa"
+//             password = ""
 //             dbCreate = "update"
 //             url = "jdbc:hsqldb:file:prodDb;shutdown=true"
             /** MySQL */
-//             dbCreate = "update"
-//             url = "jdbc:mysql://host:3306/gnumims_prod"
+            driverClassName = "com.mysql.jdbc.Driver"
+            username = "gnumimsadmin"
+            password = "gnumimsadmin"
+            dbCreate = "update"
+            url = "jdbc:mysql://gnumimssql01:3306/gnumims_prod"
         }
     }
Index: trunk/grails-app/controllers/AppCoreController.groovy
===================================================================
--- trunk/grails-app/controllers/AppCoreController.groovy	(revision 148)
+++ trunk/grails-app/controllers/AppCoreController.groovy	(revision 149)
@@ -4,4 +4,5 @@
 
     def authenticateService
+    def createDataService
 
     def index = { redirect(action:start,params:params) }
@@ -45,5 +46,5 @@
                 }
         }
-    }         
+    }
 
     def changePassword = {
@@ -78,15 +79,27 @@
                 render(view:'changePassword',model:[personInstance:personInstance])
             }
-                
-        }  
+
+        }
     }
 
-    @Secured(['ROLE_Manager'])   
+    @Secured(['ROLE_Manager','ROLE_AppAdmin'])
     def manager = {
     }
 
-    @Secured(['ROLE_AppAdmin'])   
+    @Secured(['ROLE_AppAdmin'])
     def appAdmin = {
     }
 
+    @Secured(['ROLE_AppAdmin'])
+    def createBaseData = {
+        createDataService.createBaseData()
+        redirect(action:appAdmin)
+    }
+
+    @Secured(['ROLE_AppAdmin'])
+    def createDemoData = {
+        createDataService.createDemoData()
+        redirect(action:appAdmin)
+    }
+
 }
Index: trunk/grails-app/controllers/BaseController.groovy
===================================================================
--- trunk/grails-app/controllers/BaseController.groovy	(revision 148)
+++ trunk/grails-app/controllers/BaseController.groovy	(revision 149)
@@ -1,5 +1,5 @@
 import org.codehaus.groovy.grails.plugins.springsecurity.Secured
 
-@Secured(['ROLE_AppUser'])
+@Secured(['ROLE_AppUser', 'ROLE_AppAdmin'])
 abstract class BaseController {
     def whatsit() {
Index: trunk/grails-app/controllers/PersonController.groovy
===================================================================
--- trunk/grails-app/controllers/PersonController.groovy	(revision 148)
+++ trunk/grails-app/controllers/PersonController.groovy	(revision 149)
@@ -1,5 +1,5 @@
 import org.codehaus.groovy.grails.plugins.springsecurity.Secured
 
-@Secured(['ROLE_Manager'])
+@Secured(['ROLE_Manager','ROLE_AppAdmin'])
 class PersonController extends BaseAppAdminController {
 
Index: trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- trunk/grails-app/services/CreateDataService.groovy	(revision 149)
+++ trunk/grails-app/services/CreateDataService.groovy	(revision 149)
@@ -0,0 +1,951 @@
+/**
+* Provides a data service to create base and demo data.
+*/
+class  CreateDataService {
+
+    def authenticateService
+    boolean transactional = false
+
+/*******************************************
+Start of Group methods.
+Generally use these methods to create data.
+*******************************************/
+
+    /**
+    * Always call this at startup to ensure admin access.
+    */
+    def ensureAdminAccess() {
+        if(!Authority.findByAuthority("ROLE_AppAdmin") ) {
+            println "ROLE_AppAdmin not found, calling createAdminAuthority()."
+            createAdminAuthority()
+        }
+        if(!Person.findByloginName("admin") ) {
+            println "LoginName 'admin' not found, calling createAdminPerson()."
+            createAdminPerson()
+        }
+    }
+
+    /**
+    * Create the base data required for the application to function.
+    */
+    def createBaseData() {
+        println "Creating base data..."
+        // Person and Utils
+        createBaseAuthorities()
+        createBasePersonGroups()
+        createBasePersons()
+        createBaseUnitsOfMeasure()
+        createBasePeriods()
+        // Tasks
+        createBaseTaskStatus()
+        createBaseTaskPriorities()
+        createBaseTaskTypes()
+        createBaseEntryTypes()
+        createBaseModificationTypes()
+        // Inventory
+        createBaseInventoryTypes()
+        createBaseMaintenancePolicies()
+        // Assets
+        createBaseAssetExtenededAttributeTypes()
+
+    }
+
+    /**
+    * Create demo data for some example sites.
+    */
+    def createDemoData() {
+        println "Creating demo data..."
+        // Person and Utils
+        createDemoPersons()
+        createDemoSites()
+        // Tasks
+        createDemoTaskGroups() /// @todo: Perhaps this should be BaseData?
+        createDemoTasks()
+        createDemoEntries()
+        createDemoAssignedPersons()
+        createDemoTaskRecurringSchedules()
+        // Inventory
+        createDemoInventoryStores()  /// @todo: Perhaps a 'createQuickStartData' method?
+        createDemoStoreLocations()
+        createDemoInventoryGroups() /// @todo: Perhaps a 'createQuickStartData' method?
+        createDemoInventoryItems()
+        createDemoStoredItems()
+        // Assets
+        createDemoLifePlan()
+        createDemoTaskProcedure()
+        createDemoMaintenanceActions()
+        createDemoSystemSections()
+        createDemoAssetTypes()
+        createDemoAssemblies()
+        createDemoSubAssemblies()
+        createDemoComponentItems()
+        createDemoAssets()
+        createDemoAssetExtenedAttributes()
+    }
+
+/******************
+Start of Person
+*******************/
+
+    def createAdminAuthority() {
+        def authInstance
+
+        authInstance = new Authority(description:"Application Admin, not required for daily use! Grants full admin access to the application.",
+                                        authority:"ROLE_AppAdmin")
+        saveAndTest(authInstance)
+    }
+
+    def createBaseAuthorities() {
+
+        def authInstance
+
+        authInstance = new Authority(description:"Business manager, grants full management access.",
+                                        authority:"ROLE_Manager")
+        saveAndTest(authInstance)
+
+        authInstance = new Authority(description:"Application User, all application users need this base role to allow login.",
+                                        authority:"ROLE_AppUser")
+        saveAndTest(authInstance)
+    }
+
+    void createBasePersonGroups() {
+        //TypeOfPersonGroup
+        def personGroupTypeInstance
+            personGroupTypeInstance = new PersonGroupType(name:"Department")
+        saveAndTest(personGroupTypeInstance)
+            personGroupTypeInstance = new PersonGroupType(name:"Contractor")
+        saveAndTest(personGroupTypeInstance)
+            personGroupTypeInstance = new PersonGroupType(name:"ProjectTeam")
+        saveAndTest(personGroupTypeInstance)
+
+        //PersonGroup
+        def personGroupInstance
+            personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.findByName("Department"),
+                            name:"Electrical")
+        saveAndTest(personGroupInstance)
+            personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.findByName("Department"),
+                            name:"Mechanical")
+        saveAndTest(personGroupInstance)
+            personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.findByName("Department"),
+                            name:"Production")
+        saveAndTest(personGroupInstance)
+            personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(2),
+                            name:"Kewl AirCon Guys")
+        saveAndTest(personGroupInstance)
+            personGroupInstance = new PersonGroup(personGroupType:PersonGroupType.get(3),
+                            name:"gnuMims")
+        saveAndTest(personGroupInstance)
+    }
+
+    def createAdminPerson() {
+        //Person
+        def passClearText = "pass"
+        def passwordEncoded = authenticateService.encodePassword(passClearText)
+        def personInstance
+
+        //Person #1
+        personInstance = new Person(loginName:"admin",
+                                    firstName:"Admin",
+                                    lastName:"Powers",
+                                    pass:passClearText,
+                                    password:passwordEncoded,
+                                    email:"admin@example.com")
+        saveAndTest(personInstance)
+        personInstance.addToAuthorities(Authority.get(1))
+    }
+
+    def createBasePersons() {
+        //Person
+        def passClearText = "pass"
+        def passwordEncoded = authenticateService.encodePassword(passClearText)
+        def personInstance
+
+        //Person #1 is admin.
+
+        //Person #2
+        personInstance = new Person(loginName:"manager",
+                                    firstName:"Demo",
+                                    lastName:"Manager",
+                                    pass:passClearText,
+                                    password:passwordEncoded,
+                                    email:"manager@example.com")
+        saveAndTest(personInstance)
+        personInstance.addToAuthorities(Authority.get(2))
+        personInstance.addToAuthorities(Authority.get(3))
+        personInstance.addToPersonGroups(PersonGroup.findByName("gnuMims"))
+
+        //Person #3
+        personInstance = new Person(loginName:"user",
+                                    firstName:"Demo",
+                                    lastName:"User",
+                                    pass:passClearText,
+                                    password:passwordEncoded,
+                                    email:"user@example.com")
+        saveAndTest(personInstance)
+        personInstance.addToAuthorities(Authority.get(3))
+        personInstance.addToPersonGroups(PersonGroup.findByName("Electrical"))
+    }
+
+    def createDemoPersons() {
+        //Person
+        def passClearText = "pass"
+        def passwordEncoded = authenticateService.encodePassword(passClearText)
+        def personInstance
+
+        //Person #4
+        personInstance = new Person(loginName:"craig",
+                                    firstName:"Craig",
+                                    lastName:"SuperSparky",
+                                    pass:passClearText,
+                                    password:passwordEncoded,
+                                    email:"user@example.com")
+        saveAndTest(personInstance)
+        personInstance.addToAuthorities(Authority.get(3))
+        personInstance.addToPersonGroups(PersonGroup.findByName("Electrical"))
+
+        //Person #5
+        personInstance = new Person(loginName:"john",
+                                    firstName:"John",
+                                    lastName:"SuperFitter",
+                                    pass:passClearText,
+                                    password:passwordEncoded,
+                                    email:"user@example.com")
+        saveAndTest(personInstance)
+        personInstance.addToAuthorities(Authority.get(3))
+        personInstance.addToPersonGroups(PersonGroup.findByName("Mechanical"))
+
+        //Person #6
+        personInstance = new Person(loginName:"mann",
+                                    firstName:"Production",
+                                    lastName:"Mann",
+                                    pass:passClearText,
+                                    password:passwordEncoded,
+                                    email:"user@example.com")
+        saveAndTest(personInstance)
+        personInstance.addToAuthorities(Authority.get(3))
+        personInstance.addToPersonGroups(PersonGroup.findByName("Production"))
+    }
+
+/***********************
+START OF UTILITIES
+***********************/
+
+    def createDemoSites() {
+        //Site
+        def siteInstance
+
+        siteInstance = new Site(name: "Creek Mill")
+        saveAndTest(siteInstance)
+
+        siteInstance = new Site(name: "Jasper Street Depot")
+        saveAndTest(siteInstance)
+    }
+
+    def createBaseUnitsOfMeasure() {
+
+        //UnitOfMeasure
+        def unitOfMeasureInstance
+
+        //UnitOfMeasure #1
+        unitOfMeasureInstance = new UnitOfMeasure(name: "each")
+        saveAndTest(unitOfMeasureInstance)
+
+        //UnitOfMeasure #2
+        unitOfMeasureInstance = new UnitOfMeasure(name: "meter(s)")
+        saveAndTest(unitOfMeasureInstance)
+
+        //UnitOfMeasure #3
+        unitOfMeasureInstance = new UnitOfMeasure(name: "box(es)")
+        saveAndTest(unitOfMeasureInstance)
+
+        //UnitOfMeasure #4
+        unitOfMeasureInstance = new UnitOfMeasure(name: "litre(s)")
+        saveAndTest(unitOfMeasureInstance)
+
+        //UnitOfMeasure #5
+        unitOfMeasureInstance = new UnitOfMeasure(name: "kilogram(s)")
+        saveAndTest(unitOfMeasureInstance)
+    }
+
+    def createBasePeriods() {
+
+        //Period
+        def periodInstance
+
+        //Period #1
+        periodInstance = new Period(period: "Day(s)")
+        saveAndTest(periodInstance)
+
+        //Period #2
+        periodInstance = new Period(period: "Week(s)")
+        saveAndTest(periodInstance)
+
+        //Period #3
+        periodInstance = new Period(period: "Month(s)")
+        saveAndTest(periodInstance)
+
+        //Period #4
+        periodInstance = new Period(period: "Year(s)")
+        saveAndTest(periodInstance)
+    }
+
+/*********************
+START OF TASK
+*********************/
+
+    def createDemoTaskGroups() {
+        //TaskGroup
+        def taskGroupInstance
+
+        taskGroupInstance = new TaskGroup(name:"Engineering Activites",
+                                                                            description:"Engineering daily activities")
+        saveAndTest(taskGroupInstance)
+
+        taskGroupInstance = new TaskGroup(name:"Production Activites",
+                                                                            description:"Production daily activities")
+        saveAndTest(taskGroupInstance)
+
+        taskGroupInstance = new TaskGroup(name:"New Projects",
+                                                                            description:" ")
+        saveAndTest(taskGroupInstance)
+    }
+
+    def createBaseTaskStatus() {
+
+        //TaskStatus
+        def taskStatusInstance
+
+        taskStatusInstance = new TaskStatus(name:"Not Started")
+        saveAndTest(taskStatusInstance)
+
+        taskStatusInstance = new TaskStatus(name:"In Progress")
+        saveAndTest(taskStatusInstance)
+
+        taskStatusInstance = new TaskStatus(name:"Completed")
+        saveAndTest(taskStatusInstance)
+    }
+
+    def createBaseTaskPriorities() {
+
+        //TaskPriority
+        def taskPriorityInstance
+
+        taskPriorityInstance = new TaskPriority(name:"Normal")
+        saveAndTest(taskPriorityInstance)
+
+        taskPriorityInstance = new TaskPriority(name:"Low")
+        saveAndTest(taskPriorityInstance)
+
+        taskPriorityInstance = new TaskPriority(name:"High")
+        saveAndTest(taskPriorityInstance)
+
+        taskPriorityInstance = new TaskPriority(name:"Immediate")
+        saveAndTest(taskPriorityInstance)
+    }
+
+    def createBaseTaskTypes() {
+
+        //TaskType
+        def taskTypeInstance
+
+        taskTypeInstance = new TaskType(name:"Unscheduled Breakin")
+        saveAndTest(taskTypeInstance)
+
+        taskTypeInstance = new TaskType(name:"Preventative Maintenance")
+        saveAndTest(taskTypeInstance)
+
+        taskTypeInstance = new TaskType(name:"Project")
+        saveAndTest(taskTypeInstance)
+
+        taskTypeInstance = new TaskType(name:"Turnaround")
+        saveAndTest(taskTypeInstance)
+
+        taskTypeInstance = new TaskType(name:"Production Run")
+        saveAndTest(taskTypeInstance)
+    }
+
+    def createDemoTasks() {
+
+        //Task
+        def taskInstance
+
+        //Task #1
+        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
+                 taskStatus:TaskStatus.findByName("Not Started"),
+                 taskPriority:TaskPriority.get(2),
+                 taskType:TaskType.get(1),
+                 leadPerson:Person.get(2),
+                 description:"Check specific level sensor",
+                 comment:"Has been noted as problematic, try recalibrating.",
+                targetStartDate:new Date())
+        saveAndTest(taskInstance)
+
+        //Task #2
+        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
+                taskStatus:TaskStatus.findByName("Not Started"),
+                taskPriority:TaskPriority.get(2),
+                taskType:TaskType.get(1),
+                leadPerson:Person.get(5),
+                description:"Some follow-up work",
+                comment:"Some help required",
+                targetStartDate:new Date()+1,
+                parentTask: Task.get(1))
+        saveAndTest(taskInstance)
+
+        //Task #3
+        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
+                taskStatus:TaskStatus.findByName("Not Started"),
+                taskPriority:TaskPriority.get(2),
+                taskType:TaskType.get(1),
+                leadPerson:Person.get(5),
+                description:"A Sub Task can be created by setting the Parent Task value",
+                comment:"Some help required",
+                targetStartDate:new Date()-1,
+                parentTask: Task.get(1))
+        saveAndTest(taskInstance)
+
+        //Task #4
+        taskInstance = new Task(taskGroup:TaskGroup.findByName("Engineering Activites"),
+                 taskStatus:TaskStatus.findByName("Not Started"),
+                 taskPriority:TaskPriority.get(2),
+                 taskType:TaskType.get(1),
+                 leadPerson:Person.get(4),
+                 description:"Replace sensor at next opportunity.",
+                 comment:"Nothing else has worked.",
+                targetStartDate:new Date()+7,
+                parentTask: Task.get(1))
+        saveAndTest(taskInstance)
+
+        //Task #5
+        taskInstance = new Task(taskGroup:TaskGroup.findByName("Production Activites"),
+                 taskStatus:TaskStatus.findByName("Not Started"),
+                 taskPriority:TaskPriority.get(2),
+                 taskType:TaskType.get(5),
+                 leadPerson:Person.get(6),
+                 description:"Production Report",
+                 comment:"Production report for specific production run or shift",
+                targetStartDate:new Date()-7)
+        saveAndTest(taskInstance)
+
+        //Task #6
+        taskInstance = new Task(taskGroup:TaskGroup.findByName("New Projects"),
+                 taskStatus:TaskStatus.findByName("Not Started"),
+                 taskPriority:TaskPriority.get(2),
+                 taskType:TaskType.get(3),
+                 leadPerson:Person.get(1),
+                 description:"Make killer CMMS app",
+                 comment:"Use Grails and get a move on!",
+                targetStartDate:new Date()-6)
+        saveAndTest(taskInstance)
+    }
+
+    def createBaseEntryTypes() {
+
+        //EntryType
+        def entryTypeInstance
+
+        entryTypeInstance = new EntryType(name:"Fault")
+        saveAndTest(entryTypeInstance)
+
+        entryTypeInstance = new EntryType(name:"WorkDone")
+        saveAndTest(entryTypeInstance)
+
+        entryTypeInstance = new EntryType(name:"Production Note")
+        saveAndTest(entryTypeInstance)
+
+        entryTypeInstance = new EntryType(name:"Work Request")
+        saveAndTest(entryTypeInstance)
+    }
+
+    def createDemoEntries() {
+
+        //Entry
+        def entryInstance
+
+        //Entry #1
+        entryInstance = new Entry(enteredBy: Person.get(3),
+                                                    task: Task.get(1),
+                                                    entryType: EntryType.findByName("Fault"),
+                                                    comment: "This level sensor is causing us trouble.",
+                                                    durationMinute: 20)
+        saveAndTest(entryInstance)
+
+        //Entry #2
+        entryInstance = new Entry(enteredBy: Person.get(4),
+                                                    task: Task.get(1),
+                                                    entryType: EntryType.findByName("WorkDone"),
+                                                    comment: "Cleaned sensor, see how it goes.",
+                                                    durationMinute: 30)
+        saveAndTest(entryInstance)
+
+        //Entry #3
+        entryInstance = new Entry(enteredBy: Person.get(4),
+                                                    task: Task.get(1),
+                                                    entryType: EntryType.findByName("WorkDone"),
+                                                    comment: "Checked up on it later and sensor is dropping out intermittently, created subTask to replace sensor.",
+                                                    durationMinute: 20)
+        saveAndTest(entryInstance)
+    }
+
+    def createBaseModificationTypes() {
+
+        //ModificationType
+        def taskModificationTypeInstance
+        taskModificationTypeInstance = new TaskModificationType(name:"Created").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"Completed").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"Closed").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"Altered").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"TargetDateModified").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"ScheduledDateModified").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"DescriptionModified").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"AssignedToModified").save()
+        taskModificationTypeInstance = new TaskModificationType(name:"NameModified").save()
+    }
+
+    def createDemoAssignedPersons() {
+
+        //AssignedPerson
+        def assignedPersonInstance
+
+        //AssignedPerson #1
+        assignedPersonInstance = new AssignedPerson(person: Person.get(4),
+                                                                                        task: Task.get(1),
+                                                                                        estimatedHour: 1,
+                                                                                        estimatedMinute: 20)
+        saveAndTest(assignedPersonInstance)
+
+        //AssignedPerson #2
+        assignedPersonInstance = new AssignedPerson(person: Person.get(5),
+                                                                                        task: Task.get(1),
+                                                                                        estimatedHour: 3,
+                                                                                        estimatedMinute: 30)
+        saveAndTest(assignedPersonInstance)
+    }
+
+    def createDemoTaskRecurringSchedules() {
+
+        //TaskRecurringSchedule
+        def taskRecurringScheduleInstance
+
+        //TaskRecurringSchedule #1
+        taskRecurringScheduleInstance = new TaskRecurringSchedule(task: Task.get(1),
+                                                                                                    recurEvery: 1,
+                                                                                                    recurPeriod: Period.get(1),
+                                                                                                    startDate: new Date(),
+                                                                                                    generateAhead: 1,
+                                                                                                    generateAheadPeriod: Period.get(1),
+                                                                                                    taskDuration: 1,
+                                                                                                    taskDurationPeriod: Period.get(1))
+        saveAndTest(taskRecurringScheduleInstance)
+
+        //TaskRecurringSchedule #2
+        taskRecurringScheduleInstance = new TaskRecurringSchedule(task: Task.get(2),
+                                                                                                    recurEvery: 1,
+                                                                                                    recurPeriod: Period.get(1),
+                                                                                                    startDate: new Date(),
+                                                                                                    generateAhead: 1,
+                                                                                                    generateAheadPeriod: Period.get(1),
+                                                                                                    taskDuration: 1,
+                                                                                                    taskDurationPeriod: Period.get(1))
+        saveAndTest(taskRecurringScheduleInstance)
+    }
+
+/*************************
+START OF INVENTORY
+**************************/
+
+    def createDemoInventoryStores() {
+
+        //InventoryStore
+        def inventoryStoreInstance
+
+        inventoryStoreInstance = new InventoryStore(site: Site.get(1), name: "Store #1")
+        saveAndTest(inventoryStoreInstance)
+
+        inventoryStoreInstance = new InventoryStore(site: Site.get(2), name: "Store #2")
+        saveAndTest(inventoryStoreInstance)
+    }
+
+    def createDemoStoreLocations() {
+
+        //StoreLocation
+        def storeLocation
+
+        storeLocation = new StoreLocation(inventoryStore: InventoryStore.get(1), bin: "A1-2")
+        saveAndTest(storeLocation)
+
+        storeLocation = new StoreLocation(inventoryStore: InventoryStore.get(1), bin: "C55")
+        saveAndTest(storeLocation)
+    }
+
+    def createDemoInventoryGroups() {
+
+        //InventoryGroup
+        def inventoryGroupInstance
+
+        //InventoryGroup #1
+        inventoryGroupInstance = new InventoryGroup(name: "Misc")
+        saveAndTest(inventoryGroupInstance)
+
+        //InventoryGroup #2
+        inventoryGroupInstance = new InventoryGroup(name: "Electrical")
+        saveAndTest(inventoryGroupInstance)
+
+        //InventoryGroup #3
+        inventoryGroupInstance = new InventoryGroup(name: "Mechanical")
+        saveAndTest(inventoryGroupInstance)
+
+        //InventoryGroup #4
+        inventoryGroupInstance = new InventoryGroup(name: "Production")
+        saveAndTest(inventoryGroupInstance)
+    }
+
+    def createBaseInventoryTypes() {
+
+        //InventoryType
+        def inventoryTypeInstance
+
+        inventoryTypeInstance = new InventoryType(name: "Consumable")
+        saveAndTest(inventoryTypeInstance)
+
+        inventoryTypeInstance = new InventoryType(name: "Repairable")
+        saveAndTest(inventoryTypeInstance)
+    }
+
+    def createDemoInventoryItems() {
+
+        //InventoryItem
+        def inventoryItemInstance
+
+        //InventoryItem #1
+        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(1),
+                                                                                    inventoryType: InventoryType.get(1),
+                                                                                    unitOfMeasure: UnitOfMeasure.get(2),
+                                                                                    name: "J-Rope",
+                                                                                    description: "Twine wound J-Rope",
+                                                                                    reorderPoint: 0)
+        saveAndTest(inventoryItemInstance)
+
+        //InventoryItem #2
+        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(1),
+                                                                                    inventoryType: InventoryType.get(1),
+                                                                                    unitOfMeasure: UnitOfMeasure.get(2),
+                                                                                    name: "L-Rope",
+                                                                                    description: "Twine wound L-Rope",
+                                                                                    alternateItems: InventoryItem.get(1),
+                                                                                    reorderPoint: 0)
+        saveAndTest(inventoryItemInstance)
+
+        //InventoryItem #3
+        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(3),
+                                                                                    inventoryType: InventoryType.get(1),
+                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
+                                                                                    name: "2305-2RS",
+                                                                                    description: "Bearing 25x62x24mm double row self aligning ball",
+                                                                                    reorderPoint: 2)
+        saveAndTest(inventoryItemInstance)
+
+        //InventoryItem #4
+        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(2),
+                                                                                    inventoryType: InventoryType.get(1),
+                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
+                                                                                    name: "L1592-K10",
+                                                                                    description: "10kW contactor",
+                                                                                    reorderPoint: 0)
+        saveAndTest(inventoryItemInstance)
+
+        //InventoryItem #5
+        inventoryItemInstance = new InventoryItem(inventoryGroup: InventoryGroup.get(3),
+                                                                                    inventoryType: InventoryType.get(1),
+                                                                                    unitOfMeasure: UnitOfMeasure.get(1),
+                                                                                    name: "6205-ZZ",
+                                                                                    description: "Bearing 25x52x15mm single row ball shielded",
+                                                                                    reorderPoint: 2)
+        saveAndTest(inventoryItemInstance)
+    }
+
+    def createDemoStoredItems() {
+
+        //StoredItem
+        def storedItemInstance
+
+        //StoredItem #1
+        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(1),
+                                                                            storeLocation: StoreLocation.get(1),
+                                                                            quantity: 8)
+        saveAndTest(storedItemInstance)
+
+        //StoredItem #2
+        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(1),
+                                                                            storeLocation: StoreLocation.get(2),
+                                                                            quantity: 4)
+        saveAndTest(storedItemInstance)
+
+        //StoredItem #3
+        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(2),
+                                                                            storeLocation: StoreLocation.get(1),
+                                                                            quantity: 2)
+        saveAndTest(storedItemInstance)
+
+        //StoredItem #4
+        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(3),
+                                                                            storeLocation: StoreLocation.get(1),
+                                                                            quantity: 2)
+        saveAndTest(storedItemInstance)
+
+        //StoredItem #5
+        storedItemInstance = new StoredItem(inventoryItem: InventoryItem.get(4),
+                                                                            storeLocation: StoreLocation.get(1),
+                                                                            quantity: 30)
+        saveAndTest(storedItemInstance)
+    }
+
+/*******************
+START OF ASSET
+*******************/
+
+    def createDemoLifePlan() {
+
+        //LifePlan
+        def lifeplanInstance
+
+        lifeplanInstance = new LifePlan(name: "Initial Plan")
+        saveAndTest(lifeplanInstance)
+    }
+
+    def createBaseMaintenancePolicies() {
+
+        //MaintenancePolicy
+        def maintenancePolicyInstance
+
+        //MaintenancePolicy #1
+        maintenancePolicyInstance = new MaintenancePolicy(name: "Fixed Time")
+        saveAndTest(maintenancePolicyInstance)
+
+        //MaintenancePolicy #2
+        maintenancePolicyInstance = new MaintenancePolicy(name: "Condition Based Online")
+        saveAndTest(maintenancePolicyInstance)
+
+        //MaintenancePolicy #3
+        maintenancePolicyInstance = new MaintenancePolicy(name: "Condition Based Offline")
+        saveAndTest(maintenancePolicyInstance)
+
+        //MaintenancePolicy #4
+        maintenancePolicyInstance = new MaintenancePolicy(name: "Design Out")
+        saveAndTest(maintenancePolicyInstance)
+
+        //MaintenancePolicy #5
+        maintenancePolicyInstance = new MaintenancePolicy(name: "Operate To Failure")
+        saveAndTest(maintenancePolicyInstance)
+    }
+
+    def createDemoTaskProcedure() {
+
+        //TaskProcedure
+        def taskProcedureInstance
+
+        taskProcedureInstance = new TaskProcedure(name: "Daily check")
+        saveAndTest(taskProcedureInstance)
+        taskProcedureInstance.addToTasks(Task.get(1))
+    }
+
+    def createDemoMaintenanceActions() {
+
+        //MaintenanceAction
+        def maintenanceActionInstance
+
+        //MaintenanceAction #1
+        maintenanceActionInstance = new MaintenanceAction(description: "Check all E-stops, activate E-stops S1-S12 and ensure machine cannot run",
+                                                                                                        procedureStepNumber: 1,
+                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
+                                                                                                        taskProcedure: TaskProcedure.get(1))
+        saveAndTest(maintenanceActionInstance)
+
+        //MaintenanceAction #2
+        maintenanceActionInstance = new MaintenanceAction(description: "Do more pushups",
+                                                                                                        procedureStepNumber: 2,
+                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
+                                                                                                        taskProcedure: TaskProcedure.get(1))
+        saveAndTest(maintenanceActionInstance)
+
+        //MaintenanceAction #3
+        maintenanceActionInstance = new MaintenanceAction(description: "Ok just one more pushup",
+                                                                                                        procedureStepNumber: 3,
+                                                                                                        maintenancePolicy: MaintenancePolicy.get(1),
+                                                                                                        taskProcedure: TaskProcedure.get(1))
+        saveAndTest(maintenanceActionInstance)
+    }
+
+    def createDemoSystemSections() {
+
+        //SystemSection
+        def systemSectionInstance
+
+        //SystemSection #1
+        systemSectionInstance = new SystemSection(name: "Press Section",
+                                                                                    site: Site.get(1))
+        saveAndTest(systemSectionInstance)
+
+        //SystemSection #2
+        systemSectionInstance = new SystemSection(name: "RO System",
+                                                                                    site: Site.get(2))
+        saveAndTest(systemSectionInstance)
+
+        //SystemSection #3
+        systemSectionInstance = new SystemSection(name: "Auxilliray Section",
+                                                                                    site: Site.get(1))
+        saveAndTest(systemSectionInstance)
+    }
+
+    def createDemoAssetTypes() {
+
+        //AssetType
+        def assetTypeInstance
+
+        //AssetType #1
+        assetTypeInstance = new AssetType(name: "Print Unit")
+        saveAndTest(assetTypeInstance)
+
+        //AssetType #2
+        assetTypeInstance = new AssetType(name: "Reactor Tower")
+        saveAndTest(assetTypeInstance)
+    }
+
+    def createDemoAssemblies() {
+
+        //Assembly
+        def assemblyInstance
+
+        //Assembly #1
+        assemblyInstance = new Assembly(name: "Print Couple",
+                                                                        assetType: AssetType.get(1))
+        saveAndTest(assemblyInstance)
+//        assemblyInstance.addToMaintenanceActions(MaintenanceAction.get(1))
+
+        //Assembly #2
+        assemblyInstance = new Assembly(name: "Agitator",
+                                                                        assetType: AssetType.get(2))
+        saveAndTest(assemblyInstance)
+    }
+
+    def createDemoSubAssemblies() {
+
+        //SubAssembly
+        def subAssemblyInstance
+
+        //SubAssembly #1
+        subAssemblyInstance = new SubAssembly(name: "Cylinder",
+                                                                                    assembly: Assembly.get(1))
+        saveAndTest(subAssemblyInstance)
+
+         //SubAssembly #2
+        subAssemblyInstance = new SubAssembly(name: "Gearmotor",
+                                                                                    assembly: Assembly.get(2))
+        saveAndTest(subAssemblyInstance)
+    }
+
+    def createDemoComponentItems() {
+
+        //ComponentItem
+        def componentItemInstance
+
+        //ComponentItem #1
+        componentItemInstance = new ComponentItem(name: "Bearing",
+                                                                                            subAssembly: SubAssembly.get(1))
+        saveAndTest(componentItemInstance)
+
+         //ComponentItem #2
+        componentItemInstance = new ComponentItem(name: "Drive shaft oil seal",
+                                                                                            subAssembly: SubAssembly.get(2))
+        saveAndTest(componentItemInstance)
+    }
+
+    def createDemoAssets() {
+
+        //Asset
+        def assetInstance
+
+        //Asset #1
+        assetInstance = new Asset(name: "Print Unit 22",
+                                                        assetType: AssetType.get(1),
+                                                        systemSection: SystemSection.get(1))
+        saveAndTest(assetInstance)
+//        assetInstance.addToMaintenanceActions(MaintenanceAction.get(1))
+
+        //Asset #2
+        assetInstance = new Asset(name: "Print Unit 21",
+                                                        assetType: AssetType.get(1),
+                                                        systemSection: SystemSection.get(1))
+        saveAndTest(assetInstance)
+
+        //Asset #3
+        assetInstance = new Asset(name: "Print Unit 23",
+                                                        assetType: AssetType.get(1),
+                                                        systemSection: SystemSection.get(1))
+        saveAndTest(assetInstance)
+
+        //Asset #4
+        assetInstance = new Asset(name: "RO 1",
+                                                        assetType: AssetType.get(2),
+                                                        systemSection: SystemSection.get(2))
+        saveAndTest(assetInstance)
+    }
+
+    def createBaseAssetExtenededAttributeTypes() {
+
+        //AssetExtendedAttributeType
+        def assetExtendedAttributeInstanceType
+
+        //AssetExtendedAttributeType #1
+        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Model Number")
+        saveAndTest(assetExtendedAttributeInstanceType)
+
+        //AssetExtendedAttributeType #2
+        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Purchase Cost")
+        saveAndTest(assetExtendedAttributeInstanceType)
+
+        //AssetExtendedAttributeType #3
+        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Serial Number")
+        saveAndTest(assetExtendedAttributeInstanceType)
+
+        //AssetExtendedAttributeType #4
+        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Manufactured Date")
+        saveAndTest(assetExtendedAttributeInstanceType)
+
+        //AssetExtendedAttributeType #5
+        assetExtendedAttributeInstanceType = new AssetExtendedAttributeType(name: "Location Description")
+        saveAndTest(assetExtendedAttributeInstanceType)
+    }
+
+    def createDemoAssetExtenedAttributes() {
+
+        //AssetExtendedAttribute
+        def assetExtendedAttributeInstance
+
+        //AssetExtendedAttribute #1
+        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "PU Mark 2",
+                                                                                                                    asset: Asset.get(1),
+                                                                                                                    assetExtendedAttributeType: AssetExtendedAttributeType.get(1))
+        saveAndTest(assetExtendedAttributeInstance)
+
+        //AssetExtendedAttribute #2
+        assetExtendedAttributeInstance = new AssetExtendedAttribute(value: "On the far side of Tank 5",
+                                                                                                                    asset: Asset.get(1),
+                                                                                                                    assetExtendedAttributeType: AssetExtendedAttributeType.get(5))
+        saveAndTest(assetExtendedAttributeInstance)
+    }
+
+
+/****************************************
+Call this function instead of .save()
+*****************************************/
+    private boolean saveAndTest(object) {
+        if(!object.save()) {
+//             DemoDataSuccessful = false
+            println "'${object}' failed to save!"
+            println object.errors
+            return false
+        }
+        return true
+    }
+}
Index: trunk/grails-app/views/appCore/appAdmin.gsp
===================================================================
--- trunk/grails-app/views/appCore/appAdmin.gsp	(revision 148)
+++ trunk/grails-app/views/appCore/appAdmin.gsp	(revision 149)
@@ -11,5 +11,27 @@
         </div>
         <div class="body">
-            <h1>Application Admin</h1>
+            <g:if test="${flash.message}">
+                <div class="message">${flash.message}</div>
+            </g:if>
+            <div class="dialog">
+                <table>
+                    <tbody>
+
+                        <tr class="prop">
+                            <td valign="top" class="name">
+                                <label>Create:</label>
+                            </td>
+                            <td valign="top" class="value">
+                                <g:link action="createBaseData">Base</g:link> - Create the base data required for the application to function.
+                                <br />
+                                <g:link action="createDemoData">Demo</g:link> - Create demo data for some example sites.
+                            </td>
+                        </tr>
+
+                    </tbody>
+                </table>
+            </div> <!--End dialog-->
+            <br />
+            <br />
             <div class="errors">
                 Warning!<br />
