Index: /trunk/grails-app/controllers/AssetSubItemDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 275)
+++ /trunk/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 276)
@@ -64,21 +64,21 @@
             assetSubItemInstance.properties = params
 
-            if(!assetSubItemInstance.asset && !assetSubItemInstance.parentItem) {
-                flash.message = "Either an asset or parentItem is required."
-                render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
-                return
-            }
-
-            if(assetSubItemInstance.asset && assetSubItemInstance.parentItem) {
-            flash.message = "Both an asset and parentItem may not be specified at the same time."
-                render(view:'edit',model:[parentItem:parentItem])
-                return
-            }
+//             if(!assetSubItemInstance.asset && !assetSubItemInstance.parentItem) {
+//                 flash.message = "Either an asset or parentItem is required."
+//                 render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
+//                 return
+//             }
+// 
+//             if(assetSubItemInstance.asset && assetSubItemInstance.parentItem) {
+//             flash.message = "Both an asset and parentItem may not be specified at the same time."
+//                 render(view:'edit',model:[parentItem:parentItem])
+//                 return
+//             }
 
             if(!assetSubItemInstance.hasErrors() && assetSubItemInstance.save(flush: true)) {
                 flash.message = "AssetSubItem ${params.id} updated"
 
-                if(assetSubItemInstance.asset)
-                    redirect(controller: "assetDetailed", action:"show", id: assetSubItemInstance.asset.id)
+                if(assetSubItemInstance.assets)
+                    redirect(controller: "assetDetailed", action:"show", id: assetSubItemInstance.assets.toArray()[0].id)
                 else {
                     //Get the top parentItem.
@@ -93,6 +93,6 @@
                     }
 
-                    if(parentItem.asset)
-                        redirect(controller: "assetDetailed", action:"show", id: parentItem.asset.id)
+                    if(parentItem?.assets)
+                        redirect(controller: "assetDetailed", action:"show", id: parentItem.assets.toArray()[0].id)
                     else
                         redirect(action:"show", id: assetSubItemInstance.id) // End stop if all else fails.
@@ -118,21 +118,21 @@
         def assetSubItemInstance = new AssetSubItem(params)
 
-        if(!assetSubItemInstance.asset && !assetSubItemInstance.parentItem) {
-            flash.message = "Either an asset or parentItem is required."
-            render(view:'create',model:[assetSubItemInstance:assetSubItemInstance])
-            return
-        }
-
-        if(assetSubItemInstance.asset && assetSubItemInstance.parentItem) {
-            flash.message = "Both an asset and parentItem may not be specified at the same time."
-            render(view:'create',model:[assetSubItemInstance:assetSubItemInstance])
-            return
-        }
+//         if(!assetSubItemInstance.asset && !assetSubItemInstance.parentItem) {
+//             flash.message = "Either an asset or parentItem is required."
+//             render(view:'create',model:[assetSubItemInstance:assetSubItemInstance])
+//             return
+//         }
+// 
+//         if(assetSubItemInstance.asset && assetSubItemInstance.parentItem) {
+//             flash.message = "Both an asset and parentItem may not be specified at the same time."
+//             render(view:'create',model:[assetSubItemInstance:assetSubItemInstance])
+//             return
+//         }
 
         if(!assetSubItemInstance.hasErrors() && assetSubItemInstance.save(flush: true)) {
             flash.message = "AssetSubItem ${assetSubItemInstance.id} created"
 
-            if(assetSubItemInstance.asset)
-                redirect(controller: "assetDetailed", action:"show", id: assetSubItemInstance.asset.id)
+            if(assetSubItemInstance.assets)
+                redirect(controller: "assetDetailed", action:"show", id: assetSubItemInstance.assets.toArray()[0].id)
             else {
                 //Get the top parentItem.
@@ -147,6 +147,6 @@
                 }
 
-                if(parentItem.asset)
-                    redirect(controller: "assetDetailed", action:"show", id: parentItem.asset.id)
+                if(parentItem?.assets)
+                    redirect(controller: "assetDetailed", action:"show", id: parentItem.assets.toArray()[0].id)
                 else
                     redirect(action:"show", id: assetSubItemInstance.id) // End stop if all else fails.
Index: /trunk/grails-app/domain/AssetSubItem.groovy
===================================================================
--- /trunk/grails-app/domain/AssetSubItem.groovy	(revision 275)
+++ /trunk/grails-app/domain/AssetSubItem.groovy	(revision 276)
@@ -1,5 +1,4 @@
 class AssetSubItem {
 
-    Asset asset
     AssetSubItem parentItem
 
@@ -8,5 +7,6 @@
     boolean isActive = true
 
-    static hasMany = [subItems: AssetSubItem,
+    static hasMany = [assets: Asset,
+                                subItems: AssetSubItem,
                                 maintenanceActions: MaintenanceAction,
                                 assetSubItemExtendedAttributes: AssetSubItemExtendedAttribute]
@@ -18,5 +18,4 @@
         description(maxSize:100)
         isActive()
-        asset(nullable:true)
         parentItem(nullable:true)
     }
Index: /trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- /trunk/grails-app/services/CreateDataService.groovy	(revision 275)
+++ /trunk/grails-app/services/CreateDataService.groovy	(revision 276)
@@ -129,7 +129,6 @@
         createDemoMaintenanceActions()
         createDemoSections()
-        createDemoAssets()
+        createDemoAssetTree()
         createDemoAssetExtenedAttributes()
-        createDemoAssetSubItems()
 
         // Record that data has been created.
@@ -1047,22 +1046,22 @@
         //Section #1
         sectionInstance = new Section(name: "Press Section",
+                                                                                    site: Site.get(3),
+                                                                                    department: Department.get(1))
+        saveAndTest(sectionInstance)
+
+        //Section #2
+        sectionInstance = new Section(name: "RO System",
+                                                                                    site: Site.get(1),
+                                                                                    department: Department.get(2))
+        saveAndTest(sectionInstance)
+
+        //Section #3
+        sectionInstance = new Section(name: "Auxiliary Section",
                                                                                     site: Site.get(1),
                                                                                     department: Department.get(1))
         saveAndTest(sectionInstance)
-
-        //Section #2
-        sectionInstance = new Section(name: "RO System",
-                                                                                    site: Site.get(2),
-                                                                                    department: Department.get(2))
-        saveAndTest(sectionInstance)
-
-        //Section #3
-        sectionInstance = new Section(name: "Auxilliray Section",
-                                                                                    site: Site.get(1),
-                                                                                    department: Department.get(1))
-        saveAndTest(sectionInstance)
-    }
-
-    def createDemoAssets() {
+    }
+
+    def createDemoAssetTree() {
 
         //Asset
@@ -1070,45 +1069,85 @@
 
         //Asset #1
-        assetInstance = new Asset(name: "Print Tower 22",
-                                                        section: Section.get(1))
-        saveAndTest(assetInstance)
+        def assetInstance1 = new Asset(name: "Print Tower 22",
+                                                            section: Section.get(1))
+        saveAndTest(assetInstance1)
 //        assetInstance.addToMaintenanceActions(MaintenanceAction.get(1))
 
         //Asset #2
-        assetInstance = new Asset(name: "Print Tower 21",
-                                                        section: Section.get(1))
-        saveAndTest(assetInstance)
+        def assetInstance2 = new Asset(name: "Print Tower 21",
+                                                            section: Section.get(1))
+        saveAndTest(assetInstance2)
 
         //Asset #3
-        assetInstance = new Asset(name: "Print Tower 23",
-                                                        section: Section.get(1))
-        saveAndTest(assetInstance)
+        def assetInstance3 = new Asset(name: "Print Tower 23",
+                                                            section: Section.get(1))
+        saveAndTest(assetInstance3)
 
         //Asset #4
-        assetInstance = new Asset(name: "RO 1",
-                                                        section: Section.get(2))
-        saveAndTest(assetInstance)
-    }
-
-    def createDemoAssetSubItems() {
+        def assetInstance4 = new Asset(name: "RO 1",
+                                                            section: Section.get(2))
+        saveAndTest(assetInstance4)
 
         //AssetSubItem
         def assetSubItemInstance
 
-        //AssetSubItem #1
-        assetSubItemInstance = new AssetSubItem(name: "Print Unit Lower",
-                                                                                asset: Asset.get(2))
+        //AssetSubItem #1 Level1
+        def assetSubItemInstance1 = new AssetSubItem(name: "Print Tower")
+        saveAndTest(assetSubItemInstance1)
+
+        // Add assetSubItemInstance1 to some assets.
+        assetInstance1.addToAssetSubItems(assetSubItemInstance1)
+        assetInstance2.addToAssetSubItems(assetSubItemInstance1)
+        assetInstance3.addToAssetSubItems(assetSubItemInstance1)
+
+        //AssetSubItem #2 Level1
+        def assetSubItemInstance2 = new AssetSubItem(name: "Reactor Tower")
+        saveAndTest(assetSubItemInstance2)
+
+        // Add assetSubItemInstance2 to some assets.
+        assetInstance4.addToAssetSubItems(assetSubItemInstance2)
+
+        //AssetSubItem #3 Level1
+        def assetSubItemInstance3 = new AssetSubItem(name: "Blower Tower")
+        saveAndTest(assetSubItemInstance3)
+
+        // Add assetSubItemInstance3 to some assets.
+        assetInstance4.addToAssetSubItems(assetSubItemInstance3)
+
+        //AssetSubItem #4 Level2
+        assetSubItemInstance = new AssetSubItem(name: "Print Unit Upper",
+                                                                                parentItem: AssetSubItem.get(1))
         saveAndTest(assetSubItemInstance)
 
-        //AssetSubItem #2
-        assetSubItemInstance = new AssetSubItem(name: "Print Unit Upper",
-                                                                                asset: Asset.get(2))
+        //AssetSubItem #5 Level3
+        assetSubItemInstance = new AssetSubItem(name: "Agitator",
+                                                                                parentItem: AssetSubItem.get(2))
         saveAndTest(assetSubItemInstance)
 
-        //AssetSubItem #3
-        assetSubItemInstance = new AssetSubItem(name: "Reactor Tower",
-                                                                                asset: Asset.get(1))
+        //AssetSubItem #6 Level2
+        assetSubItemInstance = new AssetSubItem(name: "Scraper",
+                                                                                parentItem: AssetSubItem.get(3))
         saveAndTest(assetSubItemInstance)
-    }
+
+        //AssetSubItem #7 Level3
+        assetSubItemInstance = new AssetSubItem(name: "Motor",
+                                                                                parentItem: AssetSubItem.get(5))
+        saveAndTest(assetSubItemInstance)
+
+        //AssetSubItem #8 Level3
+        assetSubItemInstance = new AssetSubItem(name: "Gearbox",
+                                                                                parentItem: AssetSubItem.get(5))
+        saveAndTest(assetSubItemInstance)
+
+        //AssetSubItem #9 Level4
+        assetSubItemInstance = new AssetSubItem(name: "DS Bearing",
+                                                                                parentItem: AssetSubItem.get(7))
+        saveAndTest(assetSubItemInstance)
+
+        //AssetSubItem #10 Level4
+        assetSubItemInstance = new AssetSubItem(name: "NDS Bearing",
+                                                                                parentItem: AssetSubItem.get(7))
+        saveAndTest(assetSubItemInstance)
+    } // createDemoAssetTree()
 
     def createDemoAssetExtenedAttributes() {
Index: /trunk/grails-app/views/assetDetailed/edit.gsp
===================================================================
--- /trunk/grails-app/views/assetDetailed/edit.gsp	(revision 275)
+++ /trunk/grails-app/views/assetDetailed/edit.gsp	(revision 276)
@@ -86,10 +86,8 @@
                                 <td valign="top" class="value ${hasErrors(bean:assetInstance,field:'assetSubItems','errors')}">
                                     
-<ul>
-<g:each var="a" in="${assetInstance?.assetSubItems?}">
-    <li><g:link controller="assetSubItemDetailed" action="show" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
-</g:each>
-</ul>
-<g:link controller="assetSubItemDetailed" params="['asset.id':assetInstance?.id]" action="create">Add AssetSubItem</g:link>
+                                    <g:select name="assetSubItems"
+                                                    from="${AssetSubItem.list()}"
+                                                    size="5" multiple="yes" optionKey="id"
+                                                    value="${assetInstance?.assetSubItems}" />
 
                                 </td>
Index: /trunk/grails-app/views/assetSubItemDetailed/create.gsp
===================================================================
--- /trunk/grails-app/views/assetSubItemDetailed/create.gsp	(revision 275)
+++ /trunk/grails-app/views/assetSubItemDetailed/create.gsp	(revision 276)
@@ -24,16 +24,4 @@
                     <table>
                         <tbody>
-
-                            <g:if test="${assetSubItemInstance?.asset}" >
-                                <g:hiddenField name="asset.id" value="${assetSubItemInstance.asset.id}" />
-                                <tr class="prop">
-                                    <td valign="top" class="name">
-                                        <label for="asset">Asset:</label>
-                                    </td>
-                                    <td valign="top" class="value">
-                                        ${assetSubItemInstance.asset.encodeAsHTML()}
-                                    </td>
-                                </tr>
-                            </g:if>
 
                             <g:if test="${assetSubItemInstance?.parentItem}" >
Index: /trunk/grails-app/views/assetSubItemDetailed/edit.gsp
===================================================================
--- /trunk/grails-app/views/assetSubItemDetailed/edit.gsp	(revision 275)
+++ /trunk/grails-app/views/assetSubItemDetailed/edit.gsp	(revision 276)
@@ -56,13 +56,4 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="asset">Asset:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:assetSubItemInstance,field:'asset','errors')}">
-                                    <g:select optionKey="id" from="${Asset.list()}" name="asset.id" value="${assetSubItemInstance?.asset?.id}" noSelection="['null':'']"></g:select>
-                                </td>
-                            </tr> 
-                        
-                            <tr class="prop">
-                                <td valign="top" class="name">
                                     <label for="parentItem">Parent Item:</label>
                                 </td>
@@ -86,5 +77,16 @@
 
                                 </td>
-                            </tr> 
+                            </tr>
+
+                             <tr class="prop">
+                                 <td valign="top" class="name">
+                                    <label for="assets">Assets:</label>
+                                </td>
+                                <td valign="top" class="value ${hasErrors(bean:assetSubItemInstance,field:'assets','errors')}">
+                                    
+                                </td>
+                            </tr>
+                        
+                            <tr class="prop">
                         
                             <tr class="prop">
Index: /trunk/grails-app/views/assetSubItemDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/assetSubItemDetailed/show.gsp	(revision 275)
+++ /trunk/grails-app/views/assetSubItemDetailed/show.gsp	(revision 276)
@@ -49,11 +49,4 @@
                     
                         <tr class="prop">
-                            <td valign="top" class="name">Asset:</td>
-                            
-                            <td valign="top" class="value"><g:link controller="assetDetailed" action="show" id="${assetSubItemInstance?.asset?.id}">${assetSubItemInstance?.asset?.encodeAsHTML()}</g:link></td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
                             <td valign="top" class="name">Parent Item:</td>
                             
@@ -73,4 +66,17 @@
                             </td>
                             
+                        </tr>
+
+                        <tr class="prop">
+                            <td valign="top" class="name">Assets:</td>
+
+                            <td  valign="top" style="text-align:left;" class="value">
+                                <ul>
+                                <g:each var="a" in="${assetSubItemInstance.assets}">
+                                    <li><g:link controller="assetDetailed" action="show" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
+                                </g:each>
+                                </ul>
+                            </td>
+
                         </tr>
                     
