=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/MessageConversationController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/MessageConversationController.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/MessageConversationController.java 2015-02-10 16:46:23 +0000 @@ -267,107 +267,40 @@ ContextUtils.createdResponse( response, "Feedback created", null ); } - //-------------------------------------------------------------------------- // Mark conversations read //-------------------------------------------------------------------------- + @RequestMapping( value = "/{uid}/read", method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE } ) + public @ResponseBody RootNode markMessageConversationRead( + @PathVariable String uid, @RequestParam ( required = false ) String userUid, HttpServletResponse response ) + { + return modifyMessageConversationRead( userUid, new String[]{ uid }, response, true ); + } + @RequestMapping( value = "/read", method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE } ) public @ResponseBody RootNode markMessageConversationsRead( @RequestParam( value = "user", required = false ) String userUid, @RequestBody String[] uids, HttpServletResponse response ) { - RootNode responseNode = new RootNode( "response" ); - - User currentUser = currentUserService.getCurrentUser(); - User user = userUid != null ? userService.getUser( userUid ) : currentUser; - - if ( user == null ) - { - response.setStatus( HttpServletResponse.SC_NOT_FOUND ); - responseNode.addChild( new SimpleNode( "message", "No user with uid: " + userUid ) ); - return responseNode; - } - - if ( !canModifyUserConversation( currentUser, user ) ) - { - throw new UpdateAccessDeniedException( "Not authorized to modify this object." ); - } - - Collection messageConversations = messageService.getMessageConversations( user, uids ); - - if ( messageConversations.isEmpty() ) - { - response.setStatus( HttpServletResponse.SC_NOT_FOUND ); - responseNode.addChild( new SimpleNode( "message", "No MessageConversations found for the given UIDs." ) ); - return responseNode; - } - - CollectionNode marked = responseNode.addChild( new CollectionNode( "markedRead" ) ); - marked.setWrapping( false ); - - for ( org.hisp.dhis.message.MessageConversation conversation : messageConversations ) - { - if ( conversation.markRead( user ) ) - { - messageService.updateMessageConversation( conversation ); - marked.addChild( new SimpleNode( "uid", conversation.getUid() ) ); - } - } - - response.setStatus( HttpServletResponse.SC_OK ); - - return responseNode; + return modifyMessageConversationRead( userUid, uids, response, true ); } //-------------------------------------------------------------------------- // Mark conversations unread //-------------------------------------------------------------------------- + @RequestMapping( value = "/{uid}/unread", method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE } ) + public @ResponseBody RootNode markMessageConversationUnread( + @PathVariable String uid, @RequestParam ( required = false ) String userUid, HttpServletResponse response ) + { + return modifyMessageConversationRead( userUid, new String[]{ uid }, response, false ); + } + @RequestMapping( value = "/unread", method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE } ) public @ResponseBody RootNode markMessageConversationsUnread( @RequestParam( value = "user", required = false ) String userUid, @RequestBody String[] uids, HttpServletResponse response ) { - RootNode responseNode = new RootNode( "response" ); - - User currentUser = currentUserService.getCurrentUser(); - User user = userUid != null ? userService.getUser( userUid ) : currentUser; - - if ( user == null ) - { - response.setStatus( HttpServletResponse.SC_NOT_FOUND ); - responseNode.addChild( new SimpleNode( "message", "No user with uid: " + userUid ) ); - return responseNode; - } - - if ( !canModifyUserConversation( currentUser, user ) ) - { - throw new UpdateAccessDeniedException( "Not authorized to modify this object." ); - } - - Collection messageConversations = messageService.getMessageConversations( user, uids ); - - if ( messageConversations.isEmpty() ) - { - response.setStatus( HttpServletResponse.SC_NOT_FOUND ); - responseNode.addChild( new SimpleNode( "message", "No MessageConversations found for the given UIDs." ) ); - return responseNode; - } - - CollectionNode marked = responseNode.addChild( new CollectionNode( "markedUnread" ) ); - marked.setWrapping( false ); - - for ( org.hisp.dhis.message.MessageConversation conversation : messageConversations ) - { - if ( conversation.markUnread( user ) ) - { - messageService.updateMessageConversation( conversation ); - marked.addChild( new SimpleNode( "uid", conversation.getUid() ) ); - } - } - - response.setStatus( HttpServletResponse.SC_OK ); - - return responseNode; + return modifyMessageConversationRead( userUid, uids, response, false ); } //-------------------------------------------------------------------------- @@ -626,4 +559,56 @@ { return messageConversation.getUsers().contains( user ) || user.getUserCredentials().hasAnyAuthority( AclService.ACL_OVERRIDE_AUTHORITIES ); } + + /** + * Internal handler for setting the read property of MessageConversation. + * @param readValue true when setting as read, false when setting unread. + */ + private RootNode modifyMessageConversationRead( String userUid, String[] uids, HttpServletResponse response, boolean readValue ) + { + RootNode responseNode = new RootNode( "response" ); + + User currentUser = currentUserService.getCurrentUser(); + User user = userUid != null ? userService.getUser( userUid ) : currentUser; + + + if ( user == null ) + { + response.setStatus( HttpServletResponse.SC_NOT_FOUND ); + responseNode.addChild( new SimpleNode( "message", "No user with uid: " + userUid ) ); + return responseNode; + } + + if ( !canModifyUserConversation( currentUser, user ) ) + { + throw new UpdateAccessDeniedException( "Not authorized to modify this object." ); + } + + Collection messageConversations = messageService.getMessageConversations( user, uids ); + + if ( messageConversations.isEmpty() ) + { + response.setStatus( HttpServletResponse.SC_NOT_FOUND ); + responseNode.addChild( new SimpleNode( "message", "No MessageConversations found for the given IDs." ) ); + return responseNode; + } + + CollectionNode marked = responseNode.addChild( new CollectionNode( readValue ? "markedRead" : "markedUnread" ) ); + marked.setWrapping( false ); + + for ( org.hisp.dhis.message.MessageConversation conversation : messageConversations ) + { + + boolean success = ( readValue ? conversation.markRead( user ) : conversation.markUnread( user ) ); + if ( success ) + { + messageService.updateMessageConversation( conversation ); + marked.addChild( new SimpleNode( "uid", conversation.getUid() ) ); + } + } + + response.setStatus( HttpServletResponse.SC_OK ); + + return responseNode; + } }