You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by ja...@apache.org on 2011/10/25 13:17:01 UTC

svn commit: r1188606 - in /incubator/rave/trunk: rave-components/rave-core/src/main/java/org/apache/rave/portal/model/ rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/ rave-components/rave-core/src/main/java/org/apache/rave/po...

Author: jasha
Date: Tue Oct 25 11:17:00 2011
New Revision: 1188606

URL: http://svn.apache.org/viewvc?rev=1188606&view=rev
Log:
RAVE-301 add search to widget listing in admin module

Modified:
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Widget.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/WidgetStatus.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java
    incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java
    incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/DefaultWidgetServiceTest.java
    incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java
    incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/WidgetController.java
    incubator/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/WidgetControllerTest.java
    incubator/rave/trunk/rave-portal-resources/src/main/resources/messages.properties
    incubator/rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties
    incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/tags/admin_paging.tag
    incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/views/admin/widgets.jsp
    incubator/rave/trunk/rave-portal-resources/src/main/webapp/css/default.css

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Widget.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Widget.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Widget.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Widget.java Tue Oct 25 11:17:00 2011
@@ -56,16 +56,20 @@ import java.util.List;
                 query = "SELECT w FROM Widget w WHERE lower(w.title) LIKE :searchTerm OR w.description LIKE :description"),
         @NamedQuery(name = Widget.WIDGET_COUNT_BY_FREE_TEXT,
                 query = "SELECT count(w) FROM Widget w WHERE lower(w.title) LIKE :searchTerm OR w.description LIKE :description"),
-
         @NamedQuery(name = Widget.WIDGET_GET_BY_STATUS,
                 query = "SELECT w from Widget w WHERE w.widgetStatus = :widgetStatus"),
         @NamedQuery(name = Widget.WIDGET_COUNT_BY_STATUS,
                 query = "SELECT count(w) FROM Widget w WHERE w.widgetStatus = :widgetStatus"),
-        @NamedQuery(name = Widget.WIDGET_GET_BY_STATUS_AND_FREE_TEXT,
-                query = "SELECT w FROM Widget w WHERE w.widgetStatus = :widgetStatus AND lower(w.title) LIKE :searchTerm OR w.description LIKE :description"),
-        @NamedQuery(name = Widget.WIDGET_COUNT_BY_STATUS_AND_FREE_TEXT,
-                query = "SELECT count(w) FROM Widget w WHERE w.widgetStatus = :widgetStatus AND lower(w.title) LIKE :searchTerm OR w.description LIKE :description"),
-
+        @NamedQuery(name = Widget.WIDGET_GET_BY_STATUS_AND_TYPE_AND_FREE_TEXT,
+                query = "SELECT w FROM Widget w WHERE " +
+                        "(:widgetStatus is null OR :widgetStatus = '' or w.widgetStatus = :widgetStatus)" +
+                        " AND (:type is null OR :type = '' OR w.type = :type)" +
+                        " AND (:searchTerm is null OR :searchTerm = '' OR lower(w.title) LIKE :searchTerm OR w.description LIKE :description)"),
+        @NamedQuery(name = Widget.WIDGET_COUNT_BY_STATUS_AND_TYPE_AND_FREE_TEXT,
+                query = "SELECT count(w) FROM Widget w WHERE " +
+                        "(:widgetStatus is null OR :widgetStatus = '' or w.widgetStatus = :widgetStatus)" +
+                        " AND (:type is null OR :type = '' OR w.type = :type)" +
+                        " AND (:searchTerm is null OR :searchTerm = '' OR lower(w.title) LIKE :searchTerm OR w.description LIKE :description)"),
         @NamedQuery(name = Widget.WIDGET_GET_BY_URL, query = "SELECT w FROM Widget w WHERE w.url = :url")
 })
 public class Widget implements BasicEntity, Serializable {
@@ -73,6 +77,7 @@ public class Widget implements BasicEnti
 
     public static final String PARAM_SEARCH_TERM = "searchTerm";
     public static final String PARAM_STATUS = "widgetStatus";
+    public static final String PARAM_TYPE = "type";
     public static final String PARAM_URL = "url";
 
     public static final String WIDGET_GET_ALL = "Widget.getAll";
@@ -81,10 +86,10 @@ public class Widget implements BasicEnti
     public static final String WIDGET_COUNT_BY_FREE_TEXT = "Widget.countByFreeText";
     public static final String WIDGET_GET_BY_STATUS = "Widget.getByStatus";
     public static final String WIDGET_COUNT_BY_STATUS = "Widget.countByStatus";
-    public static final String WIDGET_GET_BY_STATUS_AND_FREE_TEXT =
-            "Widget.getByStatusAndFreeText";
-    public static final String WIDGET_COUNT_BY_STATUS_AND_FREE_TEXT =
-            "Widget.countByStatusAndFreeText";
+    public static final String WIDGET_GET_BY_STATUS_AND_TYPE_AND_FREE_TEXT =
+            "Widget.getByStatusAndTypeAndFreeText";
+    public static final String WIDGET_COUNT_BY_STATUS_AND_TYPE_AND_FREE_TEXT =
+            "Widget.countByStatusAndTypeAndFreeText";
     public static final String WIDGET_GET_BY_URL = "Widget.getByUrl";
 
     @Id @Column(name="entity_id")

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/WidgetStatus.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/WidgetStatus.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/WidgetStatus.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/WidgetStatus.java Tue Oct 25 11:17:00 2011
@@ -19,6 +19,9 @@
 
 package org.apache.rave.portal.model;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * (Workflow) status of a Widget.
  */
@@ -28,7 +31,15 @@ public enum WidgetStatus {
 
     private String widgetStatus;
 
-    WidgetStatus(String widgetStatus) {
+    private static final Map<String, WidgetStatus> lookup = new HashMap<String, WidgetStatus>();
+
+    static {
+        for (WidgetStatus ws : WidgetStatus.values()) {
+            lookup.put(ws.toString(), ws);
+        }
+    }
+
+    private WidgetStatus(String widgetStatus) {
         this.widgetStatus = widgetStatus;
     }
 
@@ -40,4 +51,10 @@ public enum WidgetStatus {
     public String toString() {
         return widgetStatus;
     }
+
+    public static WidgetStatus get(String status) {
+        return lookup.get(status);
+    }
+
+    
 }

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java Tue Oct 25 11:17:00 2011
@@ -18,12 +18,12 @@
  */
 package org.apache.rave.portal.repository;
 
-import java.util.List;
-
 import org.apache.rave.persistence.Repository;
 import org.apache.rave.portal.model.Widget;
 import org.apache.rave.portal.model.WidgetStatus;
 
+import java.util.List;
+
 public interface WidgetRepository extends Repository<Widget> {
     /**
      * Gets a list of <strong>all</strong> widgets in the repository
@@ -92,7 +92,7 @@ public interface WidgetRepository extend
      * @param pageSize     maximum number of items to be returned (for paging)
      * @return valid list of widgets, can be empty
      */
-    List<Widget> getByStatusAndFreeTextSearch(WidgetStatus widgetStatus, String searchTerm,
+    List<Widget> getByStatusAndTypeAndFreeTextSearch(WidgetStatus widgetStatus, String type, String searchTerm,
                                               int offset, int pageSize);
 
 
@@ -104,7 +104,7 @@ public interface WidgetRepository extend
      * @param searchTerm   free text search term
      * @return total number of {@link Widget}'s that match the search criteria
      */
-    int getCountByStatusAndFreeText(WidgetStatus widgetStatus, String searchTerm);
+    int getCountByStatusAndTypeAndFreeText(WidgetStatus widgetStatus, String type, String searchTerm);
 
     /**
      * Searches for a Widget by its url

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java Tue Oct 25 11:17:00 2011
@@ -20,11 +20,6 @@
 package org.apache.rave.portal.repository.impl;
 
 
-import java.util.List;
-
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.rave.persistence.jpa.AbstractJpaRepository;
 import org.apache.rave.portal.model.Widget;
@@ -34,6 +29,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Repository;
 
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+import java.util.List;
+
 import static org.apache.rave.persistence.jpa.util.JpaUtil.getPagedResultList;
 import static org.apache.rave.persistence.jpa.util.JpaUtil.getSingleResult;
 
@@ -99,19 +98,21 @@ public class JpaWidgetRepository extends
     }
 
     @Override
-    public List<Widget> getByStatusAndFreeTextSearch(WidgetStatus widgetStatus, String searchTerm,
-                                                     int offset, int pageSize) {
-        TypedQuery<Widget> query = manager.createNamedQuery(
-                Widget.WIDGET_GET_BY_STATUS_AND_FREE_TEXT, Widget.class);
+    public List<Widget> getByStatusAndTypeAndFreeTextSearch(WidgetStatus widgetStatus, String type, String searchTerm,
+                                                            int offset, int pageSize) {
+        TypedQuery<Widget> query = manager.createNamedQuery(Widget.WIDGET_GET_BY_STATUS_AND_TYPE_AND_FREE_TEXT,
+                Widget.class);
         query.setParameter(Widget.PARAM_STATUS, widgetStatus);
+        query.setParameter(Widget.PARAM_TYPE, type);
         setFreeTextSearchTerm(query, searchTerm);
         return getPagedResultList(query, offset, pageSize);
     }
 
     @Override
-    public int getCountByStatusAndFreeText(WidgetStatus widgetStatus, String searchTerm) {
-        Query query = manager.createNamedQuery(Widget.WIDGET_COUNT_BY_STATUS_AND_FREE_TEXT);
+    public int getCountByStatusAndTypeAndFreeText(WidgetStatus widgetStatus, String type, String searchTerm) {
+        Query query = manager.createNamedQuery(Widget.WIDGET_COUNT_BY_STATUS_AND_TYPE_AND_FREE_TEXT);
         query.setParameter(Widget.PARAM_STATUS, widgetStatus);
+        query.setParameter(Widget.PARAM_TYPE, type);
         setFreeTextSearchTerm(query, searchTerm);
         Number countResult = (Number) query.getSingleResult();
         return countResult.intValue();

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/WidgetService.java Tue Oct 25 11:17:00 2011
@@ -87,6 +87,19 @@ public interface WidgetService {
                                                              int offset, int pageSize);
 
     /**
+     * Gets a SearchResult for {@link Widget}'s that match the free text search, widget type and status
+     *
+     * @param searchTerm   free text search term
+     * @param widgetType   type of Widget
+     * @param widgetStatus status of the Widget, should match a value in {@link org.apache.rave.portal.model.WidgetStatus}
+     * @param offset       start point within the resultset (for paging)
+     * @param pageSize     maximum number of items to be returned (for paging)
+     * @return SearchResult
+     */
+    SearchResult<Widget> getWidgetsBySearchCriteria(String searchTerm, String widgetType, String widgetStatus,
+                                                    int offset, int pageSize);
+
+    /**
      * Gets a Widget by its (unique) url
      *
      * @param widgetUrl url of the Widget

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java Tue Oct 25 11:17:00 2011
@@ -101,16 +101,17 @@ public class DefaultWidgetService implem
     @Override
     public SearchResult<Widget> getPublishedWidgetsByFreeTextSearch(String searchTerm,
                                                                     int offset, int pageSize) {
+        return getWidgetsBySearchCriteria(searchTerm, null, WidgetStatus.PUBLISHED.getWidgetStatus(), offset, pageSize);
+    }
 
-        if (StringUtils.isBlank(searchTerm)) {
-            return getPublishedWidgets(offset, pageSize);
-        }
-
-        final int count = widgetRepository.getCountByStatusAndFreeText(WidgetStatus.PUBLISHED,
-                searchTerm);
-        final List<Widget> widgets = widgetRepository.getByStatusAndFreeTextSearch(
-                WidgetStatus.PUBLISHED, searchTerm, offset, pageSize);
+    @Override
+    public SearchResult<Widget> getWidgetsBySearchCriteria(String searchTerm, String widgetType, String widgetStatus,
+                                                           int offset, int pageSize) {
 
+        final WidgetStatus status = StringUtils.isBlank(widgetStatus) ? null : WidgetStatus.get(widgetStatus);
+        final int count = widgetRepository.getCountByStatusAndTypeAndFreeText(status, widgetType, searchTerm);
+        final List<Widget> widgets = widgetRepository.getByStatusAndTypeAndFreeTextSearch(status, widgetType,
+                searchTerm, offset, pageSize);
         final SearchResult<Widget> searchResult = new SearchResult<Widget>(widgets, count);
         searchResult.setOffset(offset);
         searchResult.setPageSize(pageSize);

Modified: incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java Tue Oct 25 11:17:00 2011
@@ -155,22 +155,23 @@ public class JpaWidgetRepositoryTest {
     }
 
     @Test
-    public void getByStatusAndFreeText() {
+    public void getByStatusAndTypeAndFreeText() {
         final String searchTerm = "gAdGet";
-        List<Widget> widgets = repository.getByStatusAndFreeTextSearch(WidgetStatus.PUBLISHED,
+        final String type = "OpenSocial";
+        List<Widget> widgets = repository.getByStatusAndTypeAndFreeTextSearch(WidgetStatus.PUBLISHED, type,
                 searchTerm, 0, 1);
         assertEquals(1, widgets.size());
 
-        List<Widget> preview = repository.getByStatusAndFreeTextSearch(WidgetStatus.PREVIEW,
+        List<Widget> preview = repository.getByStatusAndTypeAndFreeTextSearch(WidgetStatus.PREVIEW, type,
                 searchTerm, 0, 1);
         assertEquals(0, preview.size());
     }
 
     @Test
-    public void countByStatusAndFreeText() {
+    public void countByStatusAndTypeAndFreeText() {
         final String searchTerm = "gAdGet";
-        int publishedCount = repository.getCountByStatusAndFreeText(WidgetStatus.PUBLISHED,
-                searchTerm);
+        final String type = "OpenSocial";
+        int publishedCount = repository.getCountByStatusAndTypeAndFreeText(WidgetStatus.PUBLISHED, type, searchTerm);
         assertTrue(publishedCount >= 2);
     }
 

Modified: incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/DefaultWidgetServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/DefaultWidgetServiceTest.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/DefaultWidgetServiceTest.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/DefaultWidgetServiceTest.java Tue Oct 25 11:17:00 2011
@@ -151,9 +151,9 @@ public class DefaultWidgetServiceTest {
         List<Widget> widgets = new ArrayList<Widget>();
         widgets.add(widget);
 
-        expect(repository.getCountByStatusAndFreeText(WidgetStatus.PUBLISHED, searchTerm))
+        expect(repository.getCountByStatusAndTypeAndFreeText(WidgetStatus.PUBLISHED, null, searchTerm))
                 .andReturn(totalResults);
-        expect(repository.getByStatusAndFreeTextSearch(WidgetStatus.PUBLISHED, searchTerm,
+        expect(repository.getByStatusAndTypeAndFreeTextSearch(WidgetStatus.PUBLISHED, null, searchTerm,
                 offset, pageSize)).andReturn(widgets);
         replay(repository);
 
@@ -165,6 +165,34 @@ public class DefaultWidgetServiceTest {
     }
 
     @Test
+    public void getPublishedOpenSocialWidgetsForSearchTerm() {
+        final String searchTerm = "gAdGet";
+        int offset = 0;
+        int pageSize = 10;
+        int totalResults = 2;
+        Widget widget = new Widget();
+        widget.setWidgetStatus(WidgetStatus.PUBLISHED);
+        final String type = "OpenSocial";
+        widget.setType(type);
+        widget.setEntityId(1L);
+        List<Widget> widgets = new ArrayList<Widget>();
+        widgets.add(widget);
+
+        expect(repository.getCountByStatusAndTypeAndFreeText(WidgetStatus.PUBLISHED, type, searchTerm))
+                .andReturn(totalResults);
+        expect(repository.getByStatusAndTypeAndFreeTextSearch(WidgetStatus.PUBLISHED, type, searchTerm,
+                offset, pageSize)).andReturn(widgets);
+        replay(repository);
+
+        SearchResult<Widget> result = service.getWidgetsBySearchCriteria(searchTerm, type,
+                WidgetStatus.PUBLISHED.toString(), offset, pageSize);
+        assertEquals(widget, result.getResultSet().get(0));
+        assertEquals(totalResults, result.getTotalResults());
+        assertEquals(pageSize, result.getPageSize());
+    }
+
+
+    @Test
     public void getWidget_null() {
         expect(repository.get(1L)).andReturn(null);
         replay(repository);
@@ -302,4 +330,6 @@ public class DefaultWidgetServiceTest {
         assertEquals(1, ratings.size());
         assertEquals(ratings.get(0).getScore(), new Integer(5));
     }
+
+    
 }

Modified: incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java (original)
+++ incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java Tue Oct 25 11:17:00 2011
@@ -43,6 +43,8 @@ import org.springframework.web.bind.supp
 
 import java.beans.PropertyEditorSupport;
 
+import static org.apache.rave.portal.web.controller.admin.AdminControllerUtil.DEFAULT_PAGE_SIZE;
+
 /**
  * Admin controller to manipulate User data
  */
@@ -70,7 +72,7 @@ public class UserController {
     @RequestMapping(value = "/admin/users", method = RequestMethod.GET)
     public String viewUsers(@RequestParam(required = false, defaultValue = "0") int offset, Model model) {
         AdminControllerUtil.addNavigationMenusToModel(SELECTED_ITEM, model);
-        final SearchResult<User> users = userService.getLimitedListOfUsers(offset, AdminControllerUtil.DEFAULT_PAGE_SIZE);
+        final SearchResult<User> users = userService.getLimitedListOfUsers(offset, DEFAULT_PAGE_SIZE);
         model.addAttribute(ModelKeys.SEARCHRESULT, users);
         return ViewNames.ADMIN_USERS;
     }
@@ -80,7 +82,7 @@ public class UserController {
                               @RequestParam(required = false, defaultValue = "0") int offset, Model model) {
         AdminControllerUtil.addNavigationMenusToModel(SELECTED_ITEM, model);
         final SearchResult<User> users = userService.getUsersByFreeTextSearch(
-                searchTerm, offset, AdminControllerUtil.DEFAULT_PAGE_SIZE);
+                searchTerm, offset, DEFAULT_PAGE_SIZE);
         model.addAttribute(ModelKeys.SEARCH_TERM, searchTerm);
         model.addAttribute(ModelKeys.SEARCHRESULT, users);
         return ViewNames.ADMIN_USERS;

Modified: incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/WidgetController.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/WidgetController.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/WidgetController.java (original)
+++ incubator/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/WidgetController.java Tue Oct 25 11:17:00 2011
@@ -41,6 +41,7 @@ import org.springframework.web.bind.anno
 import org.springframework.web.bind.support.SessionStatus;
 
 import static org.apache.rave.portal.model.WidgetStatus.values;
+import static org.apache.rave.portal.web.controller.admin.AdminControllerUtil.DEFAULT_PAGE_SIZE;
 
 /**
  * Admin controller to manipulate Widget data
@@ -66,11 +67,26 @@ public class WidgetController {
     public String viewWidgets(@RequestParam(required = false, defaultValue = "0") int offset, Model model) {
         AdminControllerUtil.addNavigationMenusToModel(SELECTED_ITEM, model);
         final SearchResult<Widget> widgets =
-                widgetService.getLimitedListOfWidgets(offset, AdminControllerUtil.DEFAULT_PAGE_SIZE);
+                widgetService.getLimitedListOfWidgets(offset, DEFAULT_PAGE_SIZE);
         model.addAttribute(ModelKeys.SEARCHRESULT, widgets);
         return ViewNames.ADMIN_WIDGETS;
     }
 
+    @RequestMapping(value = "/admin/widgets/search", method = RequestMethod.GET)
+    public String searchWidgets(@RequestParam(required = false) String searchTerm,
+                                @RequestParam(required = false) String widgettype,
+                                @RequestParam(required = false) String widgetstatus,
+                                @RequestParam(required = false, defaultValue = "0") int offset, Model model) {
+        AdminControllerUtil.addNavigationMenusToModel(SELECTED_ITEM, model);
+        final SearchResult<Widget> widgets = widgetService.getWidgetsBySearchCriteria(searchTerm, widgettype,
+                widgetstatus, offset, DEFAULT_PAGE_SIZE);
+        model.addAttribute(ModelKeys.SEARCHRESULT, widgets);
+        model.addAttribute(ModelKeys.SEARCH_TERM, searchTerm);
+        model.addAttribute("selectedWidgetType",widgettype);
+        model.addAttribute("selectedWidgetStatus", widgetstatus);
+        return ViewNames.ADMIN_WIDGETS;
+    }
+
     @RequestMapping(value = "/admin/widgetdetail/{widgetid}", method = RequestMethod.GET)
     public String viewWidgetDetail(@PathVariable("widgetid") Long widgetid, Model model) {
         AdminControllerUtil.addNavigationMenusToModel(SELECTED_ITEM, model);

Modified: incubator/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/WidgetControllerTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/WidgetControllerTest.java?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/WidgetControllerTest.java (original)
+++ incubator/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/WidgetControllerTest.java Tue Oct 25 11:17:00 2011
@@ -74,6 +74,27 @@ public class WidgetControllerTest {
     }
 
     @Test
+    public void searchWidgets() throws Exception {
+        Model model = new ExtendedModelMap();
+        String searchTerm = "widget";
+        String type = "OpenSocial";
+        String status = "published";
+        SearchResult<Widget> widgetSearchResult = populateWidgetSearchResult();
+        expect(service.getWidgetsBySearchCriteria(searchTerm, type, status, DEFAULT_OFFSET, DEFAULT_PAGESIZE)).andReturn(widgetSearchResult);
+        replay(service);
+
+        String searchView = controller.searchWidgets(searchTerm, type, status, DEFAULT_OFFSET, model);
+        verify(service);
+
+        assertEquals(ViewNames.ADMIN_WIDGETS, searchView);
+        assertEquals(searchTerm, model.asMap().get(ModelKeys.SEARCH_TERM));
+        assertEquals(type, model.asMap().get("selectedWidgetType"));
+        assertEquals(status, model.asMap().get("selectedWidgetStatus"));
+
+
+    }
+
+    @Test
     public void viewAdminWidgetDetail() throws Exception {
         Model model = new ExtendedModelMap();
         Widget widget = new Widget();

Modified: incubator/rave/trunk/rave-portal-resources/src/main/resources/messages.properties
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal-resources/src/main/resources/messages.properties?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal-resources/src/main/resources/messages.properties (original)
+++ incubator/rave/trunk/rave-portal-resources/src/main/resources/messages.properties Tue Oct 25 11:17:00 2011
@@ -131,6 +131,9 @@ admin.userdata.enabled=Account enabled
 admin.userdata.expired=Account expired
 admin.userdata.locked=Account locked
 admin.userdata.authorities=Authorities:
+admin.widgets.search=Search Widgets
+admin.widgets.search.choosetype=Choose Type...
+admin.widgets.search.choosestatus=Choose Status...
 admin.widgetdetail.title=Rave admin interface - Widget detail
 admin.widgetdetail.goback=\u00AB Back to widgets
 admin.widgetdetail.editdata=Edit widget data

Modified: incubator/rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties (original)
+++ incubator/rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties Tue Oct 25 11:17:00 2011
@@ -131,6 +131,9 @@ admin.userdata.enabled=Account ingeschak
 admin.userdata.expired=Account verlopen
 admin.userdata.locked=Account op slot
 admin.userdata.authorities=Authoriteiten:
+admin.widgets.search=Zoek Widgets
+admin.widgets.search.choosetype=Kies Type...
+admin.widgets.search.choosestatus=Kies Status...
 admin.widgetdetail.title=Rave admin interface - Widget details
 admin.widgetdetail.goback=\u00AB Terug naar widgets
 admin.widgetdetail.editdata=Pas widget gegevens aan

Modified: incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/tags/admin_paging.tag
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/tags/admin_paging.tag?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/tags/admin_paging.tag (original)
+++ incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/tags/admin_paging.tag Tue Oct 25 11:17:00 2011
@@ -26,7 +26,9 @@ under the License.
     <ul class="paging">
         <c:if test="${searchResult.currentPage gt 1}">
             <c:url var="pageUrl" value="">
-                <c:param name="searchTerm" value="${searchTerm}"/>
+                <c:if test="${not empty searchTerm}"><c:param name="searchTerm" value="${searchTerm}"/></c:if>
+                <c:if test="${not empty selectedWidgetType}"><c:param name="widgettype" value="${selectedWidgetType}"/></c:if>
+                <c:if test="${not empty selectedWidgetStatus}"><c:param name="widgetstatus" value="${selectedWidgetStatus}"/></c:if>
                 <c:param name="offset" value="${(searchResult.currentPage - 2)  * searchResult.pageSize}"/>
             </c:url>
             <li><a href="<c:out value="${pageUrl}"/>">&lt;</a></li>
@@ -38,7 +40,9 @@ under the License.
                 </c:when>
                 <c:otherwise>
                     <c:url var="pageUrl" value="">
-                        <c:param name="searchTerm" value="${searchTerm}"/>
+                        <c:if test="${not empty searchTerm}"><c:param name="searchTerm" value="${searchTerm}"/></c:if>
+                        <c:if test="${not empty selectedWidgetType}"><c:param name="widgettype" value="${selectedWidgetType}"/></c:if>
+                        <c:if test="${not empty selectedWidgetStatus}"><c:param name="widgetstatus" value="${selectedWidgetStatus}"/></c:if>
                         <c:param name="offset" value="${(i - 1) * searchResult.pageSize}"/>
                     </c:url>
                     <li><a href="<c:out value="${pageUrl}"/>">${i}</a></li>
@@ -47,7 +51,9 @@ under the License.
         </c:forEach>
         <c:if test="${searchResult.currentPage lt searchResult.numberOfPages}">
             <c:url var="pageUrl" value="">
-                <c:param name="searchTerm" value="${searchTerm}"/>
+                <c:if test="${not empty searchTerm}"><c:param name="searchTerm" value="${searchTerm}"/></c:if>
+                <c:if test="${not empty selectedWidgetType}"><c:param name="widgettype" value="${selectedWidgetType}"/></c:if>
+                <c:if test="${not empty selectedWidgetStatus}"><c:param name="widgetstatus" value="${selectedWidgetStatus}"/></c:if>
                 <c:param name="offset" value="${(searchResult.currentPage)  * searchResult.pageSize}"/>
             </c:url>
             <li><a href="<c:out value="${pageUrl}"/>">&gt;</a></li>

Modified: incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/views/admin/widgets.jsp
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/views/admin/widgets.jsp?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/views/admin/widgets.jsp (original)
+++ incubator/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/views/admin/widgets.jsp Tue Oct 25 11:17:00 2011
@@ -31,14 +31,35 @@
     <rave:admin_tabsheader/>
     <div class="pageContent">
         <article class="admincontent">
-            <%--<ul class="horizontal-list searchbox">
+            <ul class="horizontal-list searchbox">
                 <li>
-                    Searchform goes here
+                    <form action="<spring:url value="/app/admin/widgets/search"/>" method="GET">
+                        <fieldset>
+                            <label for="searchTerm" class="hidden"><fmt:message key="admin.widgets.search"/></label>
+                            <input type="search" id="searchTerm" name="searchTerm"
+                                   value="<c:out value="${searchTerm}"/>"/>
+                            <label for="widgettype"  class="hidden"><fmt:message key="widget.type"/></label>
+                            <select name="widgettype" id="widgettype">
+                                <option value=""><fmt:message key="admin.widgets.search.choosetype"/></option>
+                                <option value="OpenSocial" <c:if test="${selectedWidgetType eq 'OpenSocial'}"> selected="selected"</c:if>><fmt:message key="widget.type.OpenSocial"/></option>
+                                <option value="W3C" <c:if test="${selectedWidgetType eq 'W3C'}"> selected="selected"</c:if>><fmt:message key="widget.type.W3C"/></option>
+                            </select>
+                            <label for="widgetstatus" class="hidden"><fmt:message key="widget.widgetStatus"/></label>
+                            <select name="widgetstatus" id="widgetstatus">
+                                <option value=""><fmt:message key="admin.widgets.search.choosestatus"/></option>
+                                <c:forEach items="${widgetStatus}" var="wStatus">
+                                    <option value="<c:out value="${wStatus.widgetStatus}"/>" <c:if test="${wStatus.widgetStatus eq selectedWidgetStatus}"> selected="selected"</c:if>><c:out value="${wStatus.widgetStatus}"/></option>
+                                </c:forEach>
+                            </select>
+                            <fmt:message key="page.store.search.button" var="searchButtonText"/>
+                            <input type="submit" value="${searchButtonText}"/>
+                        </fieldset>
+                    </form>
                 </li>
                 <c:if test="${not empty searchTerm}">
                     <li><a href="<spring:url value="/app/admin/widgets"/>"><fmt:message key="admin.clearsearch"/></a></li>
                 </c:if>
-            </ul>--%>
+            </ul>
             <rave:admin_listheader/>
             <rave:admin_paging/>
 

Modified: incubator/rave/trunk/rave-portal-resources/src/main/webapp/css/default.css
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal-resources/src/main/webapp/css/default.css?rev=1188606&r1=1188605&r2=1188606&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal-resources/src/main/webapp/css/default.css (original)
+++ incubator/rave/trunk/rave-portal-resources/src/main/webapp/css/default.css Tue Oct 25 11:17:00 2011
@@ -70,6 +70,10 @@ a img {
     clear: both;
 }
 
+.hidden {
+    display: none;
+}
+
 .horizontal-list li, .paging li {
     display: inline;
     list-style: none;