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/08/23 11:52:13 UTC
svn commit: r1160600 - in /incubator/rave/trunk/rave-portal/src:
main/java/org/apache/rave/portal/model/
main/java/org/apache/rave/portal/repository/
main/java/org/apache/rave/portal/repository/impl/
main/java/org/apache/rave/portal/service/ main/java/...
Author: jasha
Date: Tue Aug 23 09:52:12 2011
New Revision: 1160600
URL: http://svn.apache.org/viewvc?rev=1160600&view=rev
Log:
RAVE-77 Widgets can be hidden from users until they have been flagged as approved by the site owner
WidgetStore only shows PUBLISHED items.
Added:
incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/WidgetStatus.java
incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/model/WidgetTest.java
incubator/rave/trunk/rave-portal/src/test/resources/portal_test_data.sql
Modified:
incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/Widget.java
incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java
incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/WidgetService.java
incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java
incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/WidgetStoreController.java
incubator/rave/trunk/rave-portal/src/main/resources/initial_data.sql
incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java
incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/service/WidgetServiceTest.java
incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/web/controller/WidgetStoreControllerTest.java
incubator/rave/trunk/rave-portal/src/test/resources/portal-test-applicationContext.xml
Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/Widget.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/Widget.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/Widget.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/Widget.java Tue Aug 23 09:52:12 2011
@@ -23,6 +23,8 @@ import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -40,14 +42,40 @@ import org.apache.rave.persistence.Basic
@Table(name="widget")
@SequenceGenerator(name="widgetIdSeq", sequenceName = "widget_id_seq")
@NamedQueries({
- @NamedQuery(name = "Widget.getAll", query = "SELECT w from Widget w"),
- @NamedQuery(name = "Widget.countAll", query = "SELECT count(w) FROM Widget w"),
- @NamedQuery(name = "Widget.getByFreeText", query = "SELECT w FROM Widget w WHERE lower(w.title) LIKE :searchTerm OR w.description LIKE :description"),
- @NamedQuery(name = "Widget.countByFreeText", query = "SELECT count(w) FROM Widget w WHERE lower(w.title) LIKE :searchTerm OR w.description LIKE :description")
+ @NamedQuery(name = Widget.WIDGET_GET_ALL, query = "SELECT w from Widget w"),
+ @NamedQuery(name = Widget.WIDGET_COUNT_ALL, query = "SELECT count(w) FROM Widget w"),
+ @NamedQuery(name = Widget.WIDGET_GET_BY_FREE_TEXT,
+ 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")
+
})
public class Widget implements BasicEntity, Serializable {
private static final long serialVersionUID = 1L;
-
+
+ public static final String PARAM_SEARCH_TERM = "searchTerm";
+ public static final String PARAM_STATUS = "widgetStatus";
+
+ public static final String WIDGET_GET_ALL = "Widget.getAll";
+ public static final String WIDGET_COUNT_ALL = "Widget.countAll";
+ public static final String WIDGET_GET_BY_FREE_TEXT = "Widget.getByFreeText";
+ 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";
+
@Id @Column(name="id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "widgetIdSeq")
private Long id;
@@ -78,6 +106,11 @@ public class Widget implements BasicEnti
@Basic @Column(name = "description")
private String description;
+ @Basic @Column(name = "widget_status")
+ @Enumerated(EnumType.STRING)
+ private WidgetStatus widgetStatus;
+
+
public Widget() {
}
@@ -167,6 +200,14 @@ public class Widget implements BasicEnti
this.url = url;
}
+ public WidgetStatus getWidgetStatus() {
+ return widgetStatus;
+ }
+
+ public void setWidgetStatus(WidgetStatus widgetStatus) {
+ this.widgetStatus = widgetStatus;
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == null) {
@@ -191,6 +232,16 @@ public class Widget implements BasicEnti
@Override
public String toString() {
- return "Widget{" + "id=" + id + ", title=" + title + ", url=" + url + ", thumbnailUrl=" + thumbnailUrl + ", screenshotUrl=" + screenshotUrl + ", type=" + type + ", author=" + author + ", description=" + description + '}';
+ return "Widget{" +
+ "id=" + id +
+ ", title='" + title + '\'' +
+ ", url='" + url + '\'' +
+ ", thumbnailUrl='" + thumbnailUrl + '\'' +
+ ", screenshotUrl='" + screenshotUrl + '\'' +
+ ", type='" + type + '\'' +
+ ", author='" + author + '\'' +
+ ", description='" + description + '\'' +
+ ", widgetStatus=" + widgetStatus +
+ '}';
}
}
\ No newline at end of file
Added: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/WidgetStatus.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/WidgetStatus.java?rev=1160600&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/WidgetStatus.java (added)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/WidgetStatus.java Tue Aug 23 09:52:12 2011
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.rave.portal.model;
+
+/**
+ * (Workflow) status of a Widget.
+ */
+public enum WidgetStatus {
+ PUBLISHED("published"),
+ PREVIEW("preview");
+
+ private String widgetStatus;
+
+ WidgetStatus(String widgetStatus) {
+ this.widgetStatus = widgetStatus;
+ }
+
+ public String getWidgetStatus() {
+ return widgetStatus;
+ }
+
+ @Override
+ public String toString() {
+ return widgetStatus;
+ }
+}
Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/WidgetRepository.java Tue Aug 23 09:52:12 2011
@@ -22,6 +22,7 @@ import java.util.List;
import org.apache.rave.persistence.Repository;
import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetStatus;
public interface WidgetRepository extends Repository<Widget> {
/**
@@ -64,4 +65,44 @@ public interface WidgetRepository extend
*/
int getCountFreeTextSearch(String searchTerm);
+ /**
+ * Gets a List of {@link Widget}'s in the repository by {@link WidgetStatus}
+ *
+ * @param widgetStatus status of the widget (PREVIEW, PUBLISHED etc)
+ * @param offset start point within the total resultset
+ * @param pageSize maximum number of items to be returned (for paging)
+ * @return valid list of widgets, can be empty
+ */
+ List<Widget> getByStatus(WidgetStatus widgetStatus, int offset, int pageSize);
+
+ /**
+ * Counts the total number of {@link Widget}'s filtering on status. Useful for paging.
+ *
+ * @param widgetStatus status of the widget (PREVIEW, PUBLISHED etc)
+ * @return total number of {@link Widget}'s that match the search term
+ */
+ int getCountByStatus(WidgetStatus widgetStatus);
+
+ /**
+ * Gets a List of {@link Widget}'s by performing a free text search filtering on status
+ *
+ * @param widgetStatus status of the widget (PREVIEW, PUBLISHED etc)
+ * @param searchTerm free text search term
+ * @param offset start point within the resultset (for paging)
+ * @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,
+ int offset, int pageSize);
+
+
+ /**
+ * Counts the total number of {@link Widget}'s by performing a free text search filtering
+ * on status. Useful for paging.
+ *
+ * @param widgetStatus status of the widget (PREVIEW, PUBLISHED etc)
+ * @param searchTerm free text search term
+ * @return total number of {@link Widget}'s that match the search criteria
+ */
+ int getCountByStatusAndFreeText(WidgetStatus widgetStatus, String searchTerm);
}
\ No newline at end of file
Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/JpaWidgetRepository.java Tue Aug 23 09:52:12 2011
@@ -27,6 +27,7 @@ import javax.persistence.TypedQuery;
import org.apache.rave.persistence.jpa.AbstractJpaRepository;
import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetStatus;
import org.apache.rave.portal.repository.WidgetRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,32 +47,84 @@ public class JpaWidgetRepository extends
@Override
public List<Widget> getAll() {
log.warn("Requesting potentially large resultset of Widget. No pagesize set.");
- TypedQuery<Widget> query = manager.createNamedQuery("Widget.getAll", Widget.class);
+ TypedQuery<Widget> query = manager.createNamedQuery(Widget.WIDGET_GET_ALL, Widget.class);
return query.getResultList();
}
@Override
public List<Widget> getLimitedList(int offset, int pageSize) {
- TypedQuery<Widget> query = manager.createNamedQuery("Widget.getAll", Widget.class);
- query.setFirstResult(offset);
- if (pageSize >= LARGE_PAGESIZE) {
- log.warn("Requesting potentially large resultset of Widgets. Pagesize is {}", pageSize);
- }
- query.setMaxResults(pageSize);
- return query.getResultList();
+ TypedQuery<Widget> query = manager.createNamedQuery(Widget.WIDGET_GET_ALL, Widget.class);
+ return getPagedResult(query, offset, pageSize);
}
@Override
public int getCountAll() {
- Query query = manager.createNamedQuery("Widget.countAll");
+ Query query = manager.createNamedQuery(Widget.WIDGET_COUNT_ALL);
Number countResult = (Number) query.getSingleResult();
return countResult.intValue();
}
@Override
public List<Widget> getByFreeTextSearch(String searchTerm, int offset, int pageSize) {
- TypedQuery<Widget> query = manager.createNamedQuery("Widget.getByFreeText", Widget.class);
- query.setParameter("searchTerm", "%" + searchTerm.toLowerCase() + "%");
+ TypedQuery<Widget> query = manager.createNamedQuery(Widget.WIDGET_GET_BY_FREE_TEXT,
+ Widget.class);
+ setFreeTextSearchTerm(query, searchTerm);
+ return getPagedResult(query, offset, pageSize);
+ }
+
+ @Override
+ public int getCountFreeTextSearch(String searchTerm) {
+ Query query = manager.createNamedQuery(Widget.WIDGET_COUNT_BY_FREE_TEXT);
+ setFreeTextSearchTerm(query, searchTerm);
+ Number countResult = (Number) query.getSingleResult();
+ return countResult.intValue();
+ }
+
+ @Override
+ public List<Widget> getByStatus(WidgetStatus widgetStatus, int offset, int pageSize) {
+ TypedQuery<Widget> query = manager.createNamedQuery(Widget.WIDGET_GET_BY_STATUS,
+ Widget.class);
+ query.setParameter(Widget.PARAM_STATUS, widgetStatus);
+ return getPagedResult(query, offset, pageSize);
+ }
+
+ @Override
+ public int getCountByStatus(WidgetStatus widgetStatus) {
+ Query query = manager.createNamedQuery(Widget.WIDGET_COUNT_BY_STATUS);
+ query.setParameter(Widget.PARAM_STATUS, widgetStatus);
+ Number countResult = (Number) query.getSingleResult();
+ return countResult.intValue();
+ }
+
+ @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);
+ query.setParameter(Widget.PARAM_STATUS, widgetStatus);
+ setFreeTextSearchTerm(query, searchTerm);
+ return getPagedResult(query, offset, pageSize);
+ }
+
+ @Override
+ public int getCountByStatusAndFreeText(WidgetStatus widgetStatus, String searchTerm) {
+ Query query = manager.createNamedQuery(Widget.WIDGET_COUNT_BY_STATUS_AND_FREE_TEXT);
+ query.setParameter(Widget.PARAM_STATUS, widgetStatus);
+ setFreeTextSearchTerm(query, searchTerm);
+ Number countResult = (Number) query.getSingleResult();
+ return countResult.intValue();
+ }
+
+
+ /**
+ * Performs a query with a limit and offset
+ *
+ * @param query {@link TypedQuery}
+ * @param offset start point within the resultset (for paging)
+ * @param pageSize maximum number of items to be returned
+ * @return valid list of widgets, can be empty
+ */
+ protected List<Widget> getPagedResult(TypedQuery<Widget> query, int offset, int pageSize) {
if (pageSize >= LARGE_PAGESIZE) {
log.warn("Requesting potentially large resultset of Widgets. Pagesize is {}", pageSize);
}
@@ -80,11 +133,13 @@ public class JpaWidgetRepository extends
return query.getResultList();
}
- @Override
- public int getCountFreeTextSearch(String searchTerm) {
- Query query = manager.createNamedQuery("Widget.countByFreeText");
- query.setParameter("searchTerm", "%" + searchTerm.toLowerCase() + "%");
- Number countResult = (Number) query.getSingleResult();
- return countResult.intValue();
+ /**
+ * Sets input as free text search term to a query
+ *
+ * @param query {@link javax.persistence.Query}
+ * @param searchTerm free text
+ */
+ protected void setFreeTextSearchTerm(Query query, final String searchTerm) {
+ query.setParameter(Widget.PARAM_SEARCH_TERM, "%" + searchTerm.toLowerCase() + "%");
}
}
Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/WidgetService.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/WidgetService.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/WidgetService.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/WidgetService.java Tue Aug 23 09:52:12 2011
@@ -38,10 +38,11 @@ public interface WidgetService {
/**
- * Gets a limited {@link SearchResult} for {@link Widget}'s that a user can add to their context.
+ * Gets a limited {@link SearchResult} for {@link Widget}'s that a user can add to their
+ * context.
*
- * @param offset start point within the resultset (for paging)
- * @param pageSize maximum number of items to be returned (for paging)
+ * @param offset start point within the resultset (for paging)
+ * @param pageSize maximum number of items to be returned (for paging)
* @return SearchResult
*/
SearchResult<Widget> getLimitedListOfWidgets(int offset, int pageSize);
@@ -63,4 +64,24 @@ public interface WidgetService {
* @return a valid widget if one exists for the given id; null otherwise
*/
Widget getWidget(long id);
+
+ /**
+ * Gets a {@link SearchResult} for {@link Widget}'s that are published
+ *
+ * @param offset start point within the resultset (for paging)
+ * @param pageSize maximum number of items to be returned (for paging)
+ * @return SearchResult
+ */
+ SearchResult<Widget> getPublishedWidgets(int offset, int pageSize);
+
+ /**
+ * Gets a SearchResult for published {@link Widget}'s by performing a free text search
+ *
+ * @param searchTerm free text search term
+ * @param offset start point within the resultset (for paging)
+ * @param pageSize maximum number of items to be returned (for paging)
+ * @return SearchResult
+ */
+ SearchResult<Widget> getPublishedWidgetsByFreeTextSearch(String searchTerm,
+ int offset, int pageSize);
}
Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/service/impl/DefaultWidgetService.java Tue Aug 23 09:52:12 2011
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetStatus;
import org.apache.rave.portal.model.util.SearchResult;
import org.apache.rave.portal.repository.WidgetRepository;
import org.apache.rave.portal.service.WidgetService;
@@ -56,13 +57,15 @@ public class DefaultWidgetService implem
}
@Override
- public SearchResult<Widget> getWidgetsByFreeTextSearch(String searchTerm, int offset, int pageSize) {
+ public SearchResult<Widget> getWidgetsByFreeTextSearch(String searchTerm,
+ int offset, int pageSize) {
if (StringUtils.isBlank(searchTerm)) {
return getLimitedListOfWidgets(offset, pageSize);
}
final int count = widgetRepository.getCountFreeTextSearch(searchTerm);
- final List<Widget>widgets = widgetRepository.getByFreeTextSearch(searchTerm, offset, pageSize);
+ final List<Widget> widgets = widgetRepository.getByFreeTextSearch(searchTerm,
+ offset, pageSize);
final SearchResult<Widget> searchResult = new SearchResult<Widget>(widgets, count);
searchResult.setPageSize(pageSize);
@@ -73,4 +76,32 @@ public class DefaultWidgetService implem
public Widget getWidget(long id) {
return widgetRepository.get(id);
}
+
+ @Override
+ public SearchResult<Widget> getPublishedWidgets(int offset, int pageSize) {
+ final int count = widgetRepository.getCountByStatus(WidgetStatus.PUBLISHED);
+ final List<Widget> widgets = widgetRepository.getByStatus(WidgetStatus.PUBLISHED,
+ offset, pageSize);
+ final SearchResult<Widget> searchResult = new SearchResult<Widget>(widgets, count);
+ searchResult.setPageSize(pageSize);
+ return searchResult;
+ }
+
+ @Override
+ public SearchResult<Widget> getPublishedWidgetsByFreeTextSearch(String searchTerm,
+ int offset, int 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);
+
+ final SearchResult<Widget> searchResult = new SearchResult<Widget>(widgets, count);
+ searchResult.setPageSize(pageSize);
+ return searchResult;
+ }
}
Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/WidgetStoreController.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/WidgetStoreController.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/WidgetStoreController.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/controller/WidgetStoreController.java Tue Aug 23 09:52:12 2011
@@ -56,7 +56,7 @@ public class WidgetStoreController {
public String view(Model model, @RequestParam long referringPageId,
@RequestParam(required = false, defaultValue = "0") int offset) {
model.addAttribute(ModelKeys.WIDGETS,
- widgetService.getLimitedListOfWidgets(offset, MAXIMUM_WIDGETS_PER_PAGE));
+ widgetService.getPublishedWidgets(offset, MAXIMUM_WIDGETS_PER_PAGE));
model.addAttribute(ModelKeys.REFERRING_PAGE_ID, referringPageId);
return ViewNames.STORE;
}
@@ -90,7 +90,7 @@ public class WidgetStoreController {
@RequestParam String searchTerm,
@RequestParam(required = false, defaultValue = "0") int offset) {
model.addAttribute(ModelKeys.WIDGETS,
- widgetService.getWidgetsByFreeTextSearch(searchTerm, offset,
+ widgetService.getPublishedWidgetsByFreeTextSearch(searchTerm, offset,
MAXIMUM_WIDGETS_PER_PAGE));
model.addAttribute(ModelKeys.REFERRING_PAGE_ID, referringPageId);
model.addAttribute(ModelKeys.SEARCH_TERM, searchTerm);
Modified: incubator/rave/trunk/rave-portal/src/main/resources/initial_data.sql
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/resources/initial_data.sql?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/resources/initial_data.sql (original)
+++ incubator/rave/trunk/rave-portal/src/main/resources/initial_data.sql Tue Aug 23 09:52:12 2011
@@ -58,29 +58,29 @@ values (set(@user_id_12, next value for
--- gadget data ---
-- wikipedia widget
-insert into widget (id, title, url, type, description, author)
-values(set(@wikipedia_widget_id, next value for widget_id_seq), 'Wikipedia','http://www.widget-dico.com/wikipedia/google/wikipedia.xml', 'OpenSocial', 'A Wikipedia Search and Go widget. Language choice.', 'WidgetMe');
+insert into widget (id, title, url, type, description, author, widget_status)
+values(set(@wikipedia_widget_id, next value for widget_id_seq), 'Wikipedia','http://www.widget-dico.com/wikipedia/google/wikipedia.xml', 'OpenSocial', 'A Wikipedia Search and Go widget. Language choice.', 'WidgetMe', 'PUBLISHED');
-- translate widget
-insert into widget (id, title, url, type, description, author)
-values(set(@translate_widget_id, next value for widget_id_seq), 'Translate Gadget', 'http://www.gstatic.com/ig/modules/dictionary/dictionary.xml','OpenSocial' , 'Google Translation gadget.', 'Google Taiwan');
+insert into widget (id, title, url, type, description, author, widget_status)
+values(set(@translate_widget_id, next value for widget_id_seq), 'Translate Gadget', 'http://www.gstatic.com/ig/modules/dictionary/dictionary.xml','OpenSocial' , 'Google Translation gadget.', 'Google Taiwan', 'PUBLISHED');
-- nytimes widget
-insert into widget (id, title, url, type)
-values(set(@nyt_widget_id, next value for widget_id_seq), 'NYTimes.com - Top Stories', 'http://widgets.nytimes.com/packages/html/igoogle/topstories.xml', 'OpenSocial');
+insert into widget (id, title, url, type, widget_status)
+values(set(@nyt_widget_id, next value for widget_id_seq), 'NYTimes.com - Top Stories', 'http://widgets.nytimes.com/packages/html/igoogle/topstories.xml', 'OpenSocial', 'PUBLISHED');
-- google tabbed news widget
-insert into widget (id, title, url, type)
-values(set(@tabnews_widget_id, next value for widget_id_seq), 'Google News Gadget', 'http://www.gstatic.com/ig/modules/tabnews/tabnews.xml', 'OpenSocial');
+insert into widget (id, title, url, type, widget_status)
+values(set(@tabnews_widget_id, next value for widget_id_seq), 'Google News Gadget', 'http://www.gstatic.com/ig/modules/tabnews/tabnews.xml', 'OpenSocial', 'PUBLISHED');
-- end widget data ----
-- hamster widget
-insert into widget (id, title, url, type)
-values(set(@hamster_widget_id, next value for widget_id_seq), 'Pet Hamster', 'http://hosting.gmodules.com/ig/gadgets/file/112581010116074801021/hamster.xml', 'OpenSocial');
+insert into widget (id, title, url, type, widget_status)
+values(set(@hamster_widget_id, next value for widget_id_seq), 'Pet Hamster', 'http://hosting.gmodules.com/ig/gadgets/file/112581010116074801021/hamster.xml', 'OpenSocial', 'PUBLISHED');
-- slideshare widget
-insert into widget (id, title, url, type)
-values(set(@gifts_widget_id, next value for widget_id_seq), 'Gifts', 'http://opensocial-resources.googlecode.com/svn/samples/tutorial/tags/api-0.8/gifts_1_friends.xml', 'OpenSocial');
+insert into widget (id, title, url, type, widget_status)
+values(set(@gifts_widget_id, next value for widget_id_seq), 'Gifts', 'http://opensocial-resources.googlecode.com/svn/samples/tutorial/tags/api-0.8/gifts_1_friends.xml', 'OpenSocial', 'PUBLISHED');
-- end widget data ----
--- start page layout data ---
Added: incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/model/WidgetTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/model/WidgetTest.java?rev=1160600&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/model/WidgetTest.java (added)
+++ incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/model/WidgetTest.java Tue Aug 23 09:52:12 2011
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.rave.portal.model;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+
+/**
+Test for {@link Widget}
+ */
+public class WidgetTest {
+ private Widget widget;
+ private Long id;
+ private String title;
+ private String url;
+ private String thumbnailUrl;
+ private String screenshotUrl;
+ private String type;
+ private String author;
+ private String description;
+ private WidgetStatus status;
+
+ @Before
+ public void setUp() throws Exception {
+ widget= new Widget();
+ id = 3511L;
+ title = "Test Widget";
+ url = "http://example.com/widget.xml";
+ thumbnailUrl = "http://example.com/widget_thumbnail.png";
+ screenshotUrl = "http://example.com/widget_screenshot.png";
+ type = "OpenSocial";
+ author = "John Doe";
+ description = "This is a test widget";
+ status = WidgetStatus.PREVIEW;
+
+ widget.setId(id);
+ widget.setTitle(title);
+ widget.setUrl(url);
+ widget.setThumbnailUrl(thumbnailUrl);
+ widget.setScreenshotUrl(screenshotUrl);
+ widget.setType(type);
+ widget.setAuthor(author);
+ widget.setDescription(description);
+ widget.setWidgetStatus(status);
+ }
+
+ @Test
+ public void testAccessorMethods() {
+ assertEquals(id, widget.getId());
+ assertEquals(title, widget.getTitle());
+ assertEquals(url, widget.getUrl());
+ assertEquals(thumbnailUrl, widget.getThumbnailUrl());
+ assertEquals(screenshotUrl, widget.getScreenshotUrl());
+ assertEquals(type, widget.getType());
+ assertEquals(author, widget.getAuthor());
+ assertEquals(description, widget.getDescription());
+ assertEquals(status, widget.getWidgetStatus());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ widget = null;
+ }
+}
Modified: incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java (original)
+++ incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/JpaWidgetRepositoryTest.java Tue Aug 23 09:52:12 2011
@@ -19,12 +19,14 @@
package org.apache.rave.portal.repository;
+import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetStatus;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,7 +48,8 @@ import static org.junit.Assert.assertTha
*/
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = {"classpath:portal-test-dataContext.xml", "classpath:portal-test-applicationContext.xml"})
+@ContextConfiguration(locations = {"classpath:portal-test-dataContext.xml",
+ "classpath:portal-test-applicationContext.xml"})
public class JpaWidgetRepositoryTest {
@PersistenceContext
@@ -100,4 +103,52 @@ public class JpaWidgetRepositoryTest {
int count = repository.getCountAll();
assertTrue(count > 4);
}
+
+ @Test
+ public void getByStatus() {
+ final int pageSize = 999;
+ List<Widget> published = repository.getByStatus(WidgetStatus.PUBLISHED, 0, pageSize);
+ assertNotNull(published);
+ assertTrue(published.size() > 0);
+
+ List<Widget> preview = repository.getByStatus(WidgetStatus.PREVIEW, 0, pageSize);
+ assertNotNull(preview);
+ assertTrue(preview.size() > 0);
+
+ List<Widget> shouldBeEmpty = new ArrayList<Widget>();
+ for (Widget previewWidget : preview) {
+ if (published.contains(previewWidget)) {
+ // should not happen
+ shouldBeEmpty.add(previewWidget);
+ }
+ }
+ assertEquals(0, shouldBeEmpty.size());
+ }
+
+ @Test
+ public void countByStatus() {
+ int publishedCount = repository.getCountByStatus(WidgetStatus.PUBLISHED);
+ assertTrue(publishedCount > 0);
+ }
+
+ @Test
+ public void getByStatusAndFreeText() {
+ final String searchTerm = "gAdGet";
+ List<Widget> widgets = repository.getByStatusAndFreeTextSearch(WidgetStatus.PUBLISHED,
+ searchTerm, 0, 1);
+ assertEquals(1, widgets.size());
+
+ List<Widget> preview = repository.getByStatusAndFreeTextSearch(WidgetStatus.PREVIEW,
+ searchTerm, 0, 1);
+ assertEquals(0, preview.size());
+ }
+
+ @Test
+ public void countByStatusAndFreeText() {
+ final String searchTerm = "gAdGet";
+ int publishedCount = repository.getCountByStatusAndFreeText(WidgetStatus.PUBLISHED,
+ searchTerm);
+ assertTrue(publishedCount >= 2);
+ }
+
}
Modified: incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/service/WidgetServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/service/WidgetServiceTest.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/service/WidgetServiceTest.java (original)
+++ incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/service/WidgetServiceTest.java Tue Aug 23 09:52:12 2011
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetStatus;
import org.apache.rave.portal.model.util.SearchResult;
import org.apache.rave.portal.repository.WidgetRepository;
import org.apache.rave.portal.service.impl.DefaultWidgetService;
@@ -81,6 +82,24 @@ public class WidgetServiceTest {
}
@Test
+ public void getPublishedWidgets() {
+ Widget widget1 = new Widget(1L,"http://example.com/widget1.xml");
+ widget1.setWidgetStatus(WidgetStatus.PUBLISHED);
+ Widget widget2 = new Widget(2L,"http://example.com/widget2.xml");
+ widget2.setWidgetStatus(WidgetStatus.PUBLISHED);
+ List<Widget> widgets = new ArrayList<Widget>();
+ widgets.add(widget1);
+ widgets.add(widget2);
+ final int pageSize = 10;
+ expect(repository.getByStatus(WidgetStatus.PUBLISHED, 0, pageSize)).andReturn(widgets);
+ replay(repository);
+
+ SearchResult<Widget> result = service.getPublishedWidgets(0, pageSize);
+ assertEquals(pageSize, result.getPageSize());
+ assertSame(widgets, result.getResultSet());
+ }
+
+ @Test
public void getWidget() {
Widget w = new Widget();
expect(repository.get(1L)).andReturn(w);
@@ -93,9 +112,9 @@ public class WidgetServiceTest {
@Test
public void getWidgetsForSearchTerm() {
- String searchTerm = "gAdGet";
+ final String searchTerm = "gAdGet";
int offset = 0;
- int pagesize = 10;
+ int pageSize = 10;
int totalResults = 2;
Widget widget = new Widget();
widget.setId(1L);
@@ -103,14 +122,39 @@ public class WidgetServiceTest {
widgets.add(widget);
expect(repository.getCountFreeTextSearch(searchTerm)).andReturn(totalResults);
- expect(repository.getByFreeTextSearch(searchTerm, offset, pagesize)).andReturn(widgets);
+ expect(repository.getByFreeTextSearch(searchTerm, offset, pageSize)).andReturn(widgets);
replay(repository);
- SearchResult<Widget> result = service.getWidgetsByFreeTextSearch(searchTerm, offset, pagesize);
+ SearchResult<Widget> result = service.getWidgetsByFreeTextSearch(searchTerm, offset, pageSize);
assertEquals(widget, result.getResultSet().get(0));
assertEquals(totalResults, result.getTotalResults());
- assertEquals(pagesize, result.getPageSize());
+ assertEquals(pageSize, result.getPageSize());
+ }
+
+ @Test
+ public void getPublishedWidgetsForSearchTerm() {
+ final String searchTerm = "gAdGet";
+ int offset = 0;
+ int pageSize = 10;
+ int totalResults = 2;
+ Widget widget = new Widget();
+ widget.setWidgetStatus(WidgetStatus.PUBLISHED);
+ widget.setId(1L);
+ List<Widget> widgets = new ArrayList<Widget>();
+ widgets.add(widget);
+
+ expect(repository.getCountByStatusAndFreeText(WidgetStatus.PUBLISHED, searchTerm))
+ .andReturn(totalResults);
+ expect(repository.getByStatusAndFreeTextSearch(WidgetStatus.PUBLISHED, searchTerm,
+ offset, pageSize)).andReturn(widgets);
+ replay(repository);
+
+ SearchResult<Widget> result = service.getPublishedWidgetsByFreeTextSearch(searchTerm,
+ offset, pageSize);
+ assertEquals(widget, result.getResultSet().get(0));
+ assertEquals(totalResults, result.getTotalResults());
+ assertEquals(pageSize, result.getPageSize());
}
@Test
Modified: incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/web/controller/WidgetStoreControllerTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/web/controller/WidgetStoreControllerTest.java?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/web/controller/WidgetStoreControllerTest.java (original)
+++ incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/web/controller/WidgetStoreControllerTest.java Tue Aug 23 09:52:12 2011
@@ -67,7 +67,7 @@ public class WidgetStoreControllerTest {
List<Widget> widgets = new ArrayList<Widget>();
SearchResult<Widget> emptyResult = new SearchResult<Widget>(widgets, 0);
- expect(widgetService.getLimitedListOfWidgets(0, 10)).andReturn(emptyResult);
+ expect(widgetService.getPublishedWidgets(0, 10)).andReturn(emptyResult);
replay(widgetService);
String view = controller.view(model, REFERRER_ID, 0);
@@ -111,7 +111,8 @@ public class WidgetStoreControllerTest {
SearchResult<Widget> result = new SearchResult<Widget>(widgets, totalResults);
result.setPageSize(pagesize);
- expect(widgetService.getWidgetsByFreeTextSearch(searchTerm, offset, pagesize)).andReturn(result);
+ expect(widgetService.getPublishedWidgetsByFreeTextSearch(searchTerm, offset, pagesize))
+ .andReturn(result);
replay(widgetService);
String view = controller.viewSearchResult(model,REFERRER_ID, searchTerm, offset);
Modified: incubator/rave/trunk/rave-portal/src/test/resources/portal-test-applicationContext.xml
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/resources/portal-test-applicationContext.xml?rev=1160600&r1=1160599&r2=1160600&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/resources/portal-test-applicationContext.xml (original)
+++ incubator/rave/trunk/rave-portal/src/test/resources/portal-test-applicationContext.xml Tue Aug 23 09:52:12 2011
@@ -58,6 +58,7 @@
<property name="scriptLocations">
<list>
<value>classpath:initial_data.sql</value>
+ <value>classpath:portal_test_data.sql</value>
</list>
</property>
</bean>
Added: incubator/rave/trunk/rave-portal/src/test/resources/portal_test_data.sql
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/resources/portal_test_data.sql?rev=1160600&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/resources/portal_test_data.sql (added)
+++ incubator/rave/trunk/rave-portal/src/test/resources/portal_test_data.sql Tue Aug 23 09:52:12 2011
@@ -0,0 +1,22 @@
+ -- Licensed to the Apache Software Foundation (ASF) under one
+ -- or more contributor license agreements. See the NOTICE file
+ -- distributed with this work for additional information
+ -- regarding copyright ownership. The ASF licenses this file
+ -- to you under the Apache License, Version 2.0 (the
+ -- "License"); you may not use this file except in compliance
+ -- with the License. You may obtain a copy of the License at
+
+ -- http://www.apache.org/licenses/LICENSE-2.0
+
+ -- Unless required by applicable law or agreed to in writing,
+ -- software distributed under the License is distributed on an
+ -- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ -- KIND, either express or implied. See the License for the
+ -- specific language governing permissions and limitations
+ -- under the License.
+
+--- gadget data ---
+-- useless knowledge widget
+insert into widget (id, title, url, type, widget_status)
+values(set(@useless_knowledge_widget_id, next value for widget_id_seq), 'Useless Knowledge', 'http://www.great-goofy-gadgets.com/humor/uselessknowledge/uselessknowledge.xml', 'OpenSocial', 'PREVIEW');
+-- end widget data ----
\ No newline at end of file