dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #23992
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 11710: added advice to crudcontroller, to handle basic exceptions (more can/will be added later)
------------------------------------------------------------
revno: 11710
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2013-08-20 10:04:18 +0200
message:
added advice to crudcontroller, to handle basic exceptions (more can/will be added later)
added:
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/CrudControllerAdvice.java
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotAuthenticatedException.java
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundException.java
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundForQueryException.java
modified:
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AbstractCrudController.java
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AbstractCrudController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AbstractCrudController.java 2013-08-13 07:18:45 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AbstractCrudController.java 2013-08-20 08:04:18 +0000
@@ -27,6 +27,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+import org.hisp.dhis.api.controller.exception.NotFoundException;
+import org.hisp.dhis.api.controller.exception.NotFoundForQueryException;
import org.hisp.dhis.api.utils.ContextUtils;
import org.hisp.dhis.api.utils.WebUtils;
import org.hisp.dhis.common.Access;
@@ -128,8 +130,7 @@
if ( entity == null )
{
- ContextUtils.notFoundResponse( response, "Object not found for uid: " + uid );
- return null;
+ throw new NotFoundException( uid );
}
if ( options.hasLinks() )
@@ -160,8 +161,7 @@
if ( entity == null )
{
- ContextUtils.notFoundResponse( response, "Object not found for query: " + query );
- return null;
+ throw new NotFoundForQueryException( query );
}
if ( options.hasLinks() )
=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/CrudControllerAdvice.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/CrudControllerAdvice.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/CrudControllerAdvice.java 2013-08-20 08:04:18 +0000
@@ -0,0 +1,65 @@
+package org.hisp.dhis.api.controller;
+
+/*
+ * Copyright (c) 2004-2013, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import org.hisp.dhis.api.controller.exception.NotAuthenticatedException;
+import org.hisp.dhis.api.controller.exception.NotFoundException;
+import org.hisp.dhis.api.controller.exception.NotFoundForQueryException;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+import java.io.IOException;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+@ControllerAdvice
+public class CrudControllerAdvice
+{
+ @ExceptionHandler
+ public ResponseEntity<String> notAuthenticatedExceptionHandler( NotAuthenticatedException ex ) throws IOException
+ {
+ HttpHeaders headers = new HttpHeaders();
+ headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE );
+
+ return new ResponseEntity<String>( ex.getMessage(), headers, HttpStatus.UNAUTHORIZED );
+ }
+
+ @ExceptionHandler( { NotFoundException.class, NotFoundForQueryException.class } )
+ public ResponseEntity<String> notFoundExceptionHandler( Exception ex ) throws IOException
+ {
+ HttpHeaders headers = new HttpHeaders();
+ headers.add( "Content-Type", MediaType.TEXT_PLAIN_VALUE );
+
+ return new ResponseEntity<String>( ex.getMessage(), headers, HttpStatus.NOT_FOUND );
+ }
+}
=== added directory 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception'
=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotAuthenticatedException.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotAuthenticatedException.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotAuthenticatedException.java 2013-08-20 08:04:18 +0000
@@ -0,0 +1,39 @@
+package org.hisp.dhis.api.controller.exception;
+
+/*
+ * Copyright (c) 2004-2013, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class NotAuthenticatedException extends Exception
+{
+ public NotAuthenticatedException()
+ {
+ super( "User object is null, user is not authenticated." );
+ }
+}
=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundException.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundException.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundException.java 2013-08-20 08:04:18 +0000
@@ -0,0 +1,44 @@
+package org.hisp.dhis.api.controller.exception;
+
+/*
+ * Copyright (c) 2004-2013, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class NotFoundException extends Exception
+{
+ public NotFoundException()
+ {
+ super( "Object not found." );
+ }
+
+ public NotFoundException( String uid )
+ {
+ super( "Object not found for uid: " + uid );
+ }
+}
=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundForQueryException.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundForQueryException.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/exception/NotFoundForQueryException.java 2013-08-20 08:04:18 +0000
@@ -0,0 +1,44 @@
+package org.hisp.dhis.api.controller.exception;
+
+/*
+ * Copyright (c) 2004-2013, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class NotFoundForQueryException extends Exception
+{
+ public NotFoundForQueryException()
+ {
+ super( "Object not found." );
+ }
+
+ public NotFoundForQueryException( String query )
+ {
+ super( "Object not found for query: " + query );
+ }
+}
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java 2013-02-04 07:29:22 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java 2013-08-20 08:04:18 +0000
@@ -1,7 +1,7 @@
package org.hisp.dhis.api.controller.user;
/*
- * Copyright (c) 2004-2012, University of Oslo
+ * Copyright (c) 2004-2013, University of Oslo
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,16 +27,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.apache.commons.collections.CollectionUtils;
+import org.hisp.dhis.api.controller.exception.NotAuthenticatedException;
import org.hisp.dhis.api.utils.ContextUtils;
import org.hisp.dhis.api.utils.ContextUtils.CacheStrategy;
import org.hisp.dhis.api.utils.FormUtils;
@@ -68,6 +60,14 @@
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
*/
@@ -108,15 +108,14 @@
@Autowired
private I18nService i18nService;
- @RequestMapping( produces = { "application/json", "text/*" } )
+ @RequestMapping(produces = { "application/json", "text/*" })
public void getCurrentUser( HttpServletResponse response ) throws Exception
{
User currentUser = currentUserService.getCurrentUser();
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
JacksonUtils.toJson( response.getOutputStream(), currentUser );
@@ -129,8 +128,7 @@
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
Inbox inbox = new Inbox();
@@ -147,8 +145,7 @@
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
Dashboard dashboard = new Dashboard();
@@ -165,8 +162,7 @@
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
UserAccount userAccount = new UserAccount();
@@ -204,8 +200,7 @@
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
// basic user account
@@ -235,7 +230,7 @@
@RequestMapping(value = "/recipients", produces = { "application/json", "text/*" })
public void recipientsJson( HttpServletResponse response,
- @RequestParam(value = "filter") String filter ) throws IOException
+ @RequestParam(value = "filter") String filter ) throws IOException, NotAuthenticatedException
{
User currentUser = currentUserService.getCurrentUser();
@@ -243,8 +238,7 @@
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
Recipients recipients = new Recipients();
@@ -257,14 +251,13 @@
}
@RequestMapping(value = "/assignedOrganisationUnits", produces = { "application/json", "text/*" })
- public void getAssignedOrganisationUnits( HttpServletResponse response ) throws IOException
+ public void getAssignedOrganisationUnits( HttpServletResponse response ) throws IOException, NotAuthenticatedException
{
User currentUser = currentUserService.getCurrentUser();
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
JacksonUtils.toJson( response.getOutputStream(), currentUser.getOrganisationUnits() );
@@ -272,14 +265,13 @@
@SuppressWarnings("unchecked")
@RequestMapping(value = "/forms", produces = { "application/json", "text/*" })
- public void getForms( HttpServletResponse response ) throws IOException
+ public void getForms( HttpServletResponse response ) throws IOException, NotAuthenticatedException
{
User currentUser = currentUserService.getCurrentUser();
if ( currentUser == null )
{
- ContextUtils.notFoundResponse( response, "User object is null, user is not authenticated." );
- return;
+ throw new NotAuthenticatedException();
}
Forms forms = new Forms();