Created new Widget Service implementation (RAVE-1077) git-svn-id: https://svn.apache.org/repos/asf/rave/trunk@1540829 13f79535-47bb-0310-9956-ffa450edef68
Project: http://git-wip-us.apache.org/repos/asf/rave/repo Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/c29dc9dd Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/c29dc9dd Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/c29dc9dd Branch: refs/heads/angular Commit: c29dc9dd614a85c330e2f4edc978419f4e815ef7 Parents: 2332958 Author: Matthew B. Franklin <[email protected]> Authored: Mon Nov 11 20:16:46 2013 +0000 Committer: Matthew B. Franklin <[email protected]> Committed: Mon Nov 11 20:16:46 2013 +0000 ---------------------------------------------------------------------- .../rave/rest/impl/DefaultWidgetsResource.java | 85 ++++++++++++ .../rest/impl/DefaultWidgetsResourceTest.java | 134 +++++++++++++++++++ 2 files changed, 219 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/rave/blob/c29dc9dd/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java b/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java new file mode 100644 index 0000000..00e0bc8 --- /dev/null +++ b/rave-components/rave-core/src/main/java/org/apache/rave/rest/impl/DefaultWidgetsResource.java @@ -0,0 +1,85 @@ +package org.apache.rave.rest.impl; + + +import com.google.common.collect.Lists; +import com.google.inject.Inject; +import org.apache.rave.portal.model.impl.WidgetImpl; +import org.apache.rave.portal.service.WidgetService; +import org.apache.rave.rest.WidgetsResource; +import org.apache.rave.rest.exception.ResourceNotFoundException; +import org.apache.rave.rest.model.SearchResult; +import org.apache.rave.rest.model.Widget; + +import java.util.List; + +public class DefaultWidgetsResource implements WidgetsResource { + + private WidgetService widgetService; + + @Override + public SearchResult<Widget> getWidgets() { + SearchResult<org.apache.rave.model.Widget> fromDb = widgetService.getAll(); + List<Widget> widget = convert(fromDb.getResultSet()); + return new SearchResult<Widget>(widget, fromDb.getTotalResults()); + } + + @Override + public Widget getWidget(String id) { + org.apache.rave.model.Widget widget = getFromService(id); + return new Widget(widget); + } + + @Override + public Widget updateWidget(String id, Widget widget) { + org.apache.rave.model.Widget fromDb = getFromService(id); + updateProperties(widget, fromDb); + widgetService.updateWidget(fromDb); + return new Widget(getFromService(id)); + } + + @Override + public Widget createWidget(Widget widget) { + WidgetImpl toDb = new WidgetImpl(); + toDb.setId(widget.getId()); + updateProperties(widget, toDb); + return new Widget(widgetService.registerNewWidget(toDb)); + } + + @Inject + public void setWidgetService(WidgetService widgetService) { + this.widgetService = widgetService; + } + + + private List<Widget> convert(List<org.apache.rave.model.Widget> resultSet) { + List<Widget> widgets = Lists.newArrayListWithExpectedSize(resultSet.size()); + for(org.apache.rave.model.Widget widget: resultSet) { + widgets.add(new Widget(widget)); + } + return widgets; + } + + private org.apache.rave.model.Widget getFromService(String id) { + org.apache.rave.model.Widget widget = widgetService.getWidget(id); + if(widget == null) { + throw new ResourceNotFoundException("Could not find widget with ID " + id); + } + return widget; + } + + private void updateProperties(Widget widget, org.apache.rave.model.Widget fromDb) { + fromDb.setTitle(widget.getTitle()); + fromDb.setTitleUrl(widget.getTitleUrl()); + fromDb.setUrl(widget.getUrl()); + fromDb.setThumbnailUrl(widget.getThumbnailUrl()); + fromDb.setScreenshotUrl(widget.getScreenshotUrl()); + fromDb.setType(widget.getType()); + fromDb.setAuthor(widget.getAuthor()); + fromDb.setAuthorEmail(widget.getAuthorEmail()); + fromDb.setDescription(widget.getDescription()); + fromDb.setWidgetStatus(widget.getStatus()); + fromDb.setDisableRendering(widget.isDisable()); + fromDb.setDisableRenderingMessage(widget.getDisabledMessage()); + fromDb.setFeatured(widget.isFeatured()); + } +} http://git-wip-us.apache.org/repos/asf/rave/blob/c29dc9dd/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java b/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java new file mode 100644 index 0000000..7141cf6 --- /dev/null +++ b/rave-components/rave-core/src/test/java/org/apache/rave/rest/impl/DefaultWidgetsResourceTest.java @@ -0,0 +1,134 @@ +/* + * 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.rest.impl; + + +import com.google.common.collect.Lists; +import org.apache.rave.model.Widget; +import org.apache.rave.model.WidgetStatus; +import org.apache.rave.portal.model.impl.WidgetImpl; +import org.apache.rave.portal.service.WidgetService; +import org.apache.rave.rest.WidgetsResource; +import org.apache.rave.rest.exception.ResourceNotFoundException; +import org.apache.rave.rest.model.SearchResult; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +import static org.easymock.EasyMock.*; +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.assertThat; + +public class DefaultWidgetsResourceTest { + + private WidgetService service; + private WidgetsResource resource; + private Widget w1, w2, w3; + + @Before + public void setup() { + service = createMock(WidgetService.class); + resource = new DefaultWidgetsResource(); + ((DefaultWidgetsResource)resource).setWidgetService(service); + w1 = new WidgetImpl("1", "http://example.com/1"); + w1.setTitle("title"); + w1.setTitleUrl("http://example.com/title"); + w1.setThumbnailUrl("http://example.com/thumbnail"); + w1.setScreenshotUrl("http://example.com/screenshot"); + w1.setType("W3C"); + w1.setAuthor("author"); + w1.setAuthorEmail("authorEmail"); + w1.setDescription("Desscription"); + w1.setWidgetStatus(WidgetStatus.PUBLISHED); + w1.setDisableRendering(true); + w1.setDisableRenderingMessage(""); + w1.setFeatured(true); + w2 = new WidgetImpl("2", "http://example.com/2"); + w3 = new WidgetImpl("1", "http://example.com/2"); + } + + @Test + public void getAll() { + List<Widget> widgets = Lists.newArrayList(w1, w2); + SearchResult<Widget> result = new SearchResult<Widget>(widgets, widgets.size()); + expect(service.getAll()).andReturn(result); + replay(service); + + SearchResult<org.apache.rave.rest.model.Widget> resourceResult = resource.getWidgets(); + assertThat(resourceResult.getTotalResults(), is(equalTo(widgets.size()))); + assertThat(resourceResult.getResultSet().get(0).getId(), is(equalTo(w1.getId()))); + assertThat(resourceResult.getResultSet().get(1).getId(), is(equalTo(w2.getId()))); + } + + @Test + public void getById_exists() { + expect(service.getWidget(w1.getId())).andReturn(w1); + replay(service); + + org.apache.rave.rest.model.Widget widget = resource.getWidget(w1.getId()); + validate(widget, w1); + } + + @Test(expected = ResourceNotFoundException.class) + public void getById_notExists() { + expect(service.getWidget(w1.getId())).andReturn(null); + replay(service); + + org.apache.rave.rest.model.Widget widget = resource.getWidget(w1.getId()); + } + + @Test + public void update() { + expect(service.getWidget(w1.getId())).andReturn(w3).times(1); + service.updateWidget(w1); + expectLastCall(); + expect(service.getWidget(w1.getId())).andReturn(w1).times(1); + replay(service); + + org.apache.rave.rest.model.Widget widget = resource.updateWidget(w1.getId(), new org.apache.rave.rest.model.Widget(w1)); + validate(widget, w1); + } + + @Test + public void create() { + expect(service.registerNewWidget(w1)).andReturn(w1).times(1); + replay(service); + + org.apache.rave.rest.model.Widget widget = resource.createWidget(new org.apache.rave.rest.model.Widget(w1)); + validate(widget, w1); + } + + private void validate(org.apache.rave.rest.model.Widget widget, Widget source) { + assertThat(widget.getId(), is(equalTo(source.getId()))); + assertThat(widget.getUrl(), is(equalTo(source.getUrl()))); + assertThat(widget.getTitle(), is(equalTo(source.getTitle()))); + assertThat(widget.getTitleUrl(), is(equalTo(source.getTitleUrl()))); + assertThat(widget.getThumbnailUrl(), is(equalTo(source.getThumbnailUrl()))); + assertThat(widget.getScreenshotUrl(), is(equalTo(source.getScreenshotUrl()))); + assertThat(widget.getType(), is(equalTo(source.getType()))); + assertThat(widget.getAuthor(), is(equalTo(source.getAuthor()))); + assertThat(widget.getAuthorEmail(), is(equalTo(source.getAuthorEmail()))); + assertThat(widget.getDescription(), is(equalTo(source.getDescription()))); + assertThat(widget.getStatus(), is(equalTo(source.getWidgetStatus()))); + assertThat(widget.isDisable(), is(equalTo(source.isDisableRendering()))); + assertThat(widget.getDisabledMessage(), is(equalTo(source.getDisableRenderingMessage()))); + assertThat(widget.isFeatured(), is(equalTo(source.isFeatured()))); + } +}
