Author: cschneider Date: Thu Jan 24 09:15:17 2013 New Revision: 1437918 URL: http://svn.apache.org/viewvc?rev=1437918&view=rev Log: SYNCOPE-231 NotficationService for CXF. Changing create in interface of service to reflect concept of returning url and id
Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/NotificationServiceImpl.java (with props) Modified: syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/NotificationServiceProxy.java syncope/trunk/common/src/main/java/org/apache/syncope/common/services/NotificationService.java syncope/trunk/common/src/main/java/org/apache/syncope/common/to/NotificationTO.java syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/NotificationController.java syncope/trunk/core/src/main/resources/restContext.xml syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Modified: syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/NotificationServiceProxy.java URL: http://svn.apache.org/viewvc/syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/NotificationServiceProxy.java?rev=1437918&r1=1437917&r2=1437918&view=diff ============================================================================== --- syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/NotificationServiceProxy.java (original) +++ syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/NotificationServiceProxy.java Thu Jan 24 09:15:17 2013 @@ -18,8 +18,12 @@ */ package org.apache.syncope.client.services.proxy; +import java.net.URI; import java.util.Arrays; import java.util.List; + +import javax.ws.rs.core.Response; + import org.apache.syncope.common.services.NotificationService; import org.apache.syncope.common.to.NotificationTO; import org.springframework.web.client.RestTemplate; @@ -43,9 +47,11 @@ public class NotificationServiceProxy ex } @Override - public NotificationTO create(final NotificationTO notificationTO) { - return getRestTemplate().postForObject(baseUrl + "notification/create.json", notificationTO, + public Response create(final NotificationTO notificationTO) { + NotificationTO notification = getRestTemplate().postForObject(baseUrl + "notification/create.json", notificationTO, NotificationTO.class); + URI location = URI.create(baseUrl + "notification/read/" + notification.getId() + ".json"); + return Response.created(location).entity(notification.getId()).build(); } @Override Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/services/NotificationService.java URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/services/NotificationService.java?rev=1437918&r1=1437917&r2=1437918&view=diff ============================================================================== --- syncope/trunk/common/src/main/java/org/apache/syncope/common/services/NotificationService.java (original) +++ syncope/trunk/common/src/main/java/org/apache/syncope/common/services/NotificationService.java Thu Jan 24 09:15:17 2013 @@ -21,26 +21,27 @@ package org.apache.syncope.common.servic import java.util.List; import javax.ws.rs.DELETE; import javax.ws.rs.GET; +import javax.ws.rs.NotFoundException; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; import org.apache.syncope.common.to.NotificationTO; @Path("notifications") public interface NotificationService { + @POST + Response create(NotificationTO notificationTO); @GET @Path("{notificationId}") - NotificationTO read(@PathParam("notificationId") Long notificationId); + NotificationTO read(@PathParam("notificationId") Long notificationId) throws NotFoundException; @GET List<NotificationTO> list(); - @POST - NotificationTO create(NotificationTO notificationTO); - @PUT @Path("{notificationId}") NotificationTO update(@PathParam("notificationId") Long notificationId, NotificationTO notificationTO); Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/to/NotificationTO.java URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/to/NotificationTO.java?rev=1437918&r1=1437917&r2=1437918&view=diff ============================================================================== --- syncope/trunk/common/src/main/java/org/apache/syncope/common/to/NotificationTO.java (original) +++ syncope/trunk/common/src/main/java/org/apache/syncope/common/to/NotificationTO.java Thu Jan 24 09:15:17 2013 @@ -21,11 +21,14 @@ package org.apache.syncope.common.to; import java.util.ArrayList; import java.util.List; +import javax.xml.bind.annotation.XmlRootElement; + import org.apache.syncope.common.AbstractBaseBean; import org.apache.syncope.common.search.NodeCond; import org.apache.syncope.common.types.IntMappingType; import org.apache.syncope.common.types.TraceLevel; +@XmlRootElement public class NotificationTO extends AbstractBaseBean { private static final long serialVersionUID = -6145117115632592612L; Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/NotificationController.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/NotificationController.java?rev=1437918&r1=1437917&r2=1437918&view=diff ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/NotificationController.java (original) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/NotificationController.java Thu Jan 24 09:15:17 2013 @@ -69,7 +69,7 @@ public class NotificationController exte @PreAuthorize("hasRole('NOTIFICATION_LIST')") @RequestMapping(method = RequestMethod.GET, value = "/list") - public List<NotificationTO> list() throws NotFoundException { + public List<NotificationTO> list() { List<Notification> notifications = notificationDAO.findAll(); @@ -88,15 +88,17 @@ public class NotificationController exte @RequestMapping(method = RequestMethod.POST, value = "/create") public NotificationTO create(final HttpServletResponse response, @RequestBody final NotificationTO notificationTO) throws NotFoundException { + NotificationTO savedNotificationTO = createInternal(notificationTO); + response.setStatus(HttpServletResponse.SC_CREATED); + return savedNotificationTO; + } + public NotificationTO createInternal(final NotificationTO notificationTO) + throws NotFoundException { LOG.debug("Notification create called with parameter {}", notificationTO); - Notification notification = notificationDAO.save(binder.createNotification(notificationTO)); - auditManager.audit(Category.notification, NotificationSubCategory.create, Result.success, "Successfully created notification: " + notification.getId()); - - response.setStatus(HttpServletResponse.SC_CREATED); return binder.getNotificationTO(notification); } Added: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/NotificationServiceImpl.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/services/NotificationServiceImpl.java?rev=1437918&view=auto ============================================================================== --- syncope/trunk/core/src/main/java/org/apache/syncope/core/services/NotificationServiceImpl.java (added) +++ syncope/trunk/core/src/main/java/org/apache/syncope/core/services/NotificationServiceImpl.java Thu Jan 24 09:15:17 2013 @@ -0,0 +1,91 @@ +/* + * 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.syncope.core.services; + +import java.net.URI; +import java.util.List; + +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; + +import org.apache.syncope.common.services.NotificationService; +import org.apache.syncope.common.to.NotificationTO; +import org.apache.syncope.core.rest.controller.NotificationController; +import org.apache.syncope.core.util.NotFoundException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class NotificationServiceImpl implements NotificationService, ContextAware { + + @Autowired + private NotificationController notificationController; + + private UriInfo uriInfo; + + @Override + public Response create(NotificationTO notificationTO) { + try { + NotificationTO createdNotificationTO = notificationController.createInternal(notificationTO); + URI location = uriInfo.getAbsolutePathBuilder().path("" + createdNotificationTO.getId()).build(); + return Response.created(location).build(); + } catch (NotFoundException e) { + throw new javax.ws.rs.NotFoundException(e); + } + } + + @Override + public NotificationTO read(@PathParam("notificationId") Long notificationId) throws javax.ws.rs.NotFoundException { + try { + return notificationController.read(notificationId); + } catch (NotFoundException e) { + throw new javax.ws.rs.NotFoundException(e); + } + } + + @Override + public List<NotificationTO> list() { + return notificationController.list(); + } + + @Override + public NotificationTO update(@PathParam("notificationId") Long notificationId, + NotificationTO notificationTO) { + try { + return notificationController.update(notificationTO); + } catch (NotFoundException e) { + throw new javax.ws.rs.NotFoundException(e); + } + } + + @Override + public NotificationTO delete(@PathParam("notificationId") Long notificationId) { + try { + return notificationController.delete(notificationId); + } catch (NotFoundException e) { + throw new javax.ws.rs.NotFoundException(e); + } + } + + @Override + public void setUriInfo(final UriInfo ui) { + this.uriInfo = ui; + } +} Propchange: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/NotificationServiceImpl.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: syncope/trunk/core/src/main/resources/restContext.xml URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/restContext.xml?rev=1437918&r1=1437917&r2=1437918&view=diff ============================================================================== --- syncope/trunk/core/src/main/resources/restContext.xml (original) +++ syncope/trunk/core/src/main/resources/restContext.xml Thu Jan 24 09:15:17 2013 @@ -67,6 +67,7 @@ under the License. <jaxrs:server id="restContainer" address="/"> <jaxrs:serviceBeans> <ref bean="configurationServiceImpl"/> + <ref bean="notificationServiceImpl"/> <ref bean="connectorServiceImpl"/> <ref bean="entitlementServiceImpl"/> <ref bean="policyServiceImpl"/> Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java?rev=1437918&r1=1437917&r2=1437918&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/NotificationTestITCase.java Thu Jan 24 09:15:17 2013 @@ -25,6 +25,8 @@ import static org.junit.Assert.assertNul import java.util.List; +import javax.ws.rs.core.Response; + import org.apache.syncope.common.search.AttributeCond; import org.apache.syncope.common.search.MembershipCond; import org.apache.syncope.common.search.NodeCond; @@ -66,7 +68,9 @@ public class NotificationTestITCase exte NodeCond recipients = NodeCond.getLeafCond(membCond); notificationTO.setRecipients(recipients); - NotificationTO actual = notificationService.create(notificationTO); + Response response = notificationService.create(notificationTO); + Long notificationId = (Long) response.getEntity(); + NotificationTO actual = notificationService.read(notificationId); assertNotNull(actual); assertNotNull(actual.getId()); @@ -110,7 +114,8 @@ public class NotificationTestITCase exte assertNotNull(e.getException(SyncopeClientExceptionType.NotFound)); notification = buildNotificationTO(); notification.setSelfAsRecipient(true); - notification = notificationService.create(notification); + Response response = notificationService.create(notification); + notification = response.readEntity(NotificationTO.class); } NotificationTO deletedNotification = notificationService.delete(notification.getId()); @@ -133,8 +138,9 @@ public class NotificationTestITCase exte NotificationTO actual = null; SyncopeClientException exception = null; try { - actual = notificationService.create(notificationTO); - + Response response = notificationService.create(notificationTO); + Long notificationId = (Long) response.getEntity(); + actual = notificationService.read(notificationId); } catch (SyncopeClientCompositeErrorException e) { exception = e.getException(SyncopeClientExceptionType.InvalidNotification); } Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java?rev=1437918&r1=1437917&r2=1437918&view=diff ============================================================================== --- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java (original) +++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Thu Jan 24 09:15:17 2013 @@ -27,6 +27,9 @@ import static org.junit.Assert.assertTru import java.util.Collections; import java.util.List; import java.util.Set; + +import javax.ws.rs.core.Response; + import org.apache.syncope.common.search.AttributableCond; import org.apache.syncope.common.search.AttributeCond; import org.apache.syncope.common.search.MembershipCond; @@ -524,7 +527,9 @@ public class TaskTestITCase extends Abst notification.setSubject(subject); notification.setTemplate("optin"); - notification = notificationService.create(notification); + Response response = notificationService.create(notification); + Long notificationId = (Long) response.getEntity(); + notification = notificationService.read(notificationId); assertNotNull(notification); // 2. create user