Index: trunk/grails-app/controllers/AssetSubItemDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 335)
+++ trunk/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 336)
@@ -1,7 +1,10 @@
 import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+import org.codehaus.groovy.grails.commons.ConfigurationHolder
 
 @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager'])
 class AssetSubItemDetailedController extends BaseController {
 
+    def filterService
+    def exportService
     def assetSubItemService
 
@@ -11,4 +14,69 @@
     @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager', 'ROLE_AssetUser'])
     def index = { redirect(controller: "assetDetailed", params:params) }
+
+    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager', 'ROLE_AssetUser'])
+    def search = {
+
+        if(session.assetSearchParamsMax)
+            params.max = session.assetSearchParamsMax
+
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  1000)
+
+        def assetSubItemInstanceList = []
+        def assetSubItemInstanceTotal
+        def filterParams = [:]
+
+        // Quick Search:
+        if(!params.filter) {
+            assetSubItemInstanceList = AssetSubItem.list( params )
+            assetSubItemInstanceTotal = AssetSubItem.count()
+            filterParams.quickSearch = params.quickSearch
+        }
+        else {
+        // filterPane:
+            assetSubItemInstanceList = filterService.filter( params, AssetSubItem )
+            assetSubItemInstanceTotal = filterService.count( params, AssetSubItem )
+            filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params)
+        }
+
+        // export plugin:
+        if(params?.format && params.format != "html") {
+
+            def dateFmt = { date ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            }
+
+            String title = "AssetSubItem List."
+
+            response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
+            response.setHeader("Content-disposition", "attachment; filename=assets.${params.extension}")
+            List fields = ["name",
+                                "description"]
+            Map labels = ["name": "AssetSubItem",
+                                "description": "Description"]
+
+            Map formatters = [:]
+            Map parameters = [title: title, separator: ","]
+
+            exportService.export(params.format,
+                                                response.outputStream,
+                                                assetSubItemInstanceList.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) },
+                                                fields,
+                                                labels,
+                                                formatters,
+                                                parameters)
+        }
+
+        // Add some basic params to filterParams.
+        filterParams.max = params.max
+        filterParams.offset = params.offset?.toInteger() ?: 0
+        filterParams.sort = params.sort ?: "id"
+        filterParams.order = params.order ?: "desc"
+
+        return[ assetSubItemInstanceList: assetSubItemInstanceList,
+                assetSubItemInstanceTotal: assetSubItemInstanceTotal,
+                filterParams: filterParams ]
+
+    } // end search()
 
     @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager', 'ROLE_AssetUser'])
