Documentation added
[music.git] / src / main / java / org / onap / music / rest / RestMusicLocksAPI.java
index da94f9d..9189fbb 100644 (file)
@@ -23,7 +23,6 @@ package org.onap.music.rest;
 
 import java.util.Map;
 
-import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -32,9 +31,10 @@ import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
-
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+import javax.ws.rs.core.Response.Status;
 import org.onap.music.datastore.jsonobjects.JsonLeasedLock;
 import org.onap.music.eelf.logging.EELFLoggerDelegate;
 import org.onap.music.eelf.logging.format.AppMessages;
@@ -52,47 +52,47 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 
 
-@Path("/v{version: [0-9]+}/locks/")
+@Path("/v2/locks/")
 @Api(value="Lock Api")
 public class RestMusicLocksAPI {
 
-       @SuppressWarnings("unused")
     private EELFLoggerDelegate logger =EELFLoggerDelegate.getLogger(RestMusicLocksAPI.class);
-       private static String xLatestVersion = "X-latestVersion";
-
-       /**
-        * Puts the requesting process in the q for this lock. The corresponding
-        * node will be created in zookeeper if it did not already exist
-        * 
-        * @param lockName
-        * @return
-        * @throws Exception 
-        */
+    private static final String XMINORVERSION = "X-minorVersion";
+    private static final String XPATCHVERSION = "X-patchVersion";
+    private static final String VERSION = "v2";
 
-       @POST
-       @Path("/create/{lockname}")
-       @ApiOperation(value = "Create Lock",
-               notes = "Puts the requesting process in the q for this lock." +
-               " The corresponding node will be created in zookeeper if it did not already exist." +
-               " Lock Name is the \"key\" of the form keyspaceName.tableName.rowId",
-               response = Map.class)
-       @Produces(MediaType.APPLICATION_JSON)   
-       public Map<String,Object> createLockReference(
-                       @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
-                       @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+    /**
+     * Puts the requesting process in the q for this lock. The corresponding
+     * node will be created in zookeeper if it did not already exist
+     * 
+     * @param lockName
+     * @return
+     * @throws Exception 
+     */
+    @POST
+    @Path("/create/{lockname}")
+    @ApiOperation(value = "Create Lock",
+        notes = "Puts the requesting process in the q for this lock." +
+        " The corresponding node will be created in zookeeper if it did not already exist." +
+        " Lock Name is the \"key\" of the form keyspaceName.tableName.rowId",
+        response = Map.class)
+    @Produces(MediaType.APPLICATION_JSON)    
+    public Response createLockReference(
+            @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
+            @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+            @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
                             required = true) @HeaderParam("ns") String ns,
             @ApiParam(value = "userId",
                             required = true) @HeaderParam("userId") String userId,
             @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password,
-                       @Context HttpServletResponse response) throws Exception{
-               response.addHeader(xLatestVersion,MusicUtil.getVersion());      
+                            required = true) @HeaderParam("password") String password) throws Exception{
+        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
         if (resultMap.containsKey("Exception")) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
         resultMap.remove("keyspace");
@@ -101,52 +101,50 @@ public class RestMusicLocksAPI {
         if (resultMap.containsKey("aid"))
             resultMap.remove("aid");
         if (!resultMap.isEmpty()) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
-            response.setStatus(401);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
+            return response.status(Status.UNAUTHORIZED).entity(resultMap).build();
+        }
+        ResultType status = ResultType.SUCCESS;
+        String lockId = MusicCore.createLockReference(lockName);
+        
+        if (lockId == null) { 
+            status = ResultType.FAILURE; 
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.LOCKINGERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(status).setError("Lock Id is null").toMap()).build();
         }
-               ResultType status = ResultType.SUCCESS;
-               String lockId = MusicCore.createLockReference(lockName);
-               
-               if (lockId == null) { 
-                       status = ResultType.FAILURE; 
-                       logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.LOCKINGERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
-            response.setStatus(400);
-            return new JsonResponse(status).setError("Lock Id is null").toMap();
-               }
-               return new JsonResponse(status).setLock(lockId).toMap();
-       }
+        return response.status(Status.OK).entity(new JsonResponse(status).setLock(lockId).toMap()).build();
+    }
 
-       /**
-        * 
-        * Checks if the node is in the top of the queue and hence acquires the lock
-        * 
-        * @param lockId
-        * @return
-        * @throws Exception 
-        */
-       @GET
-       @Path("/acquire/{lockreference}")
-       @ApiOperation(value = "Aquire Lock", 
-               notes = "Checks if the node is in the top of the queue and hence acquires the lock",
-               response = Map.class)
-       @Produces(MediaType.APPLICATION_JSON)   
-       public Map<String,Object> accquireLock(
-                       @ApiParam(value="Lock Reference",required=true) @PathParam("lockreference") String lockId,
-                       @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+    /**
+     * 
+     * Checks if the node is in the top of the queue and hence acquires the lock
+     * 
+     * @param lockId
+     * @return
+     * @throws Exception 
+     */
+    @GET
+    @Path("/acquire/{lockreference}")
+    @ApiOperation(value = "Aquire Lock", 
+        notes = "Checks if the node is in the top of the queue and hence acquires the lock",
+        response = Map.class)
+    @Produces(MediaType.APPLICATION_JSON)    
+    public Response accquireLock(
+            @ApiParam(value="Lock Reference",required=true) @PathParam("lockreference") String lockId,
+            @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+            @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
                             required = true) @HeaderParam("ns") String ns,
             @ApiParam(value = "userId",
                             required = true) @HeaderParam("userId") String userId,
             @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password,
-                       @Context HttpServletResponse response) throws Exception{
-               response.addHeader(xLatestVersion,MusicUtil.getVersion());
+                            required = true) @HeaderParam("password") String password) throws Exception{
+        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockId);
         if (resultMap.containsKey("Exception")) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
         resultMap.remove("keyspace");
@@ -155,47 +153,48 @@ public class RestMusicLocksAPI {
         if (resultMap.containsKey("aid"))
             resultMap.remove("aid");
         if (!resultMap.isEmpty()) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        }
+        try {
+            String lockName = lockId.substring(lockId.indexOf('$')+1, lockId.lastIndexOf('$'));
+            ReturnType lockStatus = MusicCore.acquireLock(lockName,lockId);
+            if ( lockStatus.getResult().equals(ResultType.SUCCESS)) {
+                response.status(Status.OK);
+            } else {
+                response.status(Status.BAD_REQUEST);
+            }
+            return response.entity(new JsonResponse(lockStatus.getResult()).setLock(lockId).setMessage(lockStatus.getMessage()).toMap()).build();
+        } catch (Exception e) {
+            logger.error(EELFLoggerDelegate.errorLogger,AppMessages.INVALIDLOCK + lockId, ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Unable to aquire lock").toMap()).build();
         }
-               try {
-                       String lockName = lockId.substring(lockId.indexOf('$')+1, lockId.lastIndexOf('$'));
-                       ReturnType lockStatus = MusicCore.acquireLock(lockName,lockId);
-                       return new JsonResponse(lockStatus.getResult()).setLock(lockId)
-                                                                               .setMessage(lockStatus.getMessage()).toMap();
-               } catch (Exception e) {
-                       logger.error(EELFLoggerDelegate.errorLogger,AppMessages.INVALIDLOCK + lockId, ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
-                       resultMap.put("Exception","Unable to aquire lock");
-                       response.setStatus(400);
-                       return new JsonResponse(ResultType.FAILURE).setError("Unable to aquire lock").toMap();
-               }
-       }
-       
+    }
+    
 
 
-       
-       @POST
-       @Path("/acquire-with-lease/{lockreference}")
-       @ApiOperation(value = "Aquire Lock with Lease", response = Map.class)
-       @Consumes(MediaType.APPLICATION_JSON)
-       @Produces(MediaType.APPLICATION_JSON)   
-       public Map<String,Object> accquireLockWithLease(JsonLeasedLock lockObj, 
-                       @ApiParam(value="Lock Reference",required=true) @PathParam("lockreference") String lockId,
-                       @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+    
+    @POST
+    @Path("/acquire-with-lease/{lockreference}")
+    @ApiOperation(value = "Aquire Lock with Lease", response = Map.class)
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)    
+    public Response accquireLockWithLease(JsonLeasedLock lockObj, 
+            @ApiParam(value="Lock Reference",required=true) @PathParam("lockreference") String lockId,
+            @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+            @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
                             required = true) @HeaderParam("ns") String ns,
             @ApiParam(value = "userId",
                             required = true) @HeaderParam("userId") String userId,
             @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password,
-                       @Context HttpServletResponse response) throws Exception{
-               response.addHeader(xLatestVersion,MusicUtil.getVersion());
+                            required = true) @HeaderParam("password") String password) throws Exception{
+        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockId);
         if (resultMap.containsKey("Exception")) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
         resultMap.remove("keyspace");
@@ -205,40 +204,44 @@ public class RestMusicLocksAPI {
         if (resultMap.containsKey("aid"))
             resultMap.remove("aid");
         if (!resultMap.isEmpty()) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);    
-               return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        }
+        String lockName = lockId.substring(lockId.indexOf('$')+1, lockId.lastIndexOf('$'));
+        ReturnType lockLeaseStatus = MusicCore.acquireLockWithLease(lockName, lockId, lockObj.getLeasePeriod());
+        if ( lockLeaseStatus.getResult().equals(ResultType.SUCCESS)) {
+            response.status(Status.OK);
+        } else {
+            response.status(Status.BAD_REQUEST);
         }
-               String lockName = lockId.substring(lockId.indexOf('$')+1, lockId.lastIndexOf('$'));
-               ReturnType lockLeaseStatus = MusicCore.acquireLockWithLease(lockName, lockId, lockObj.getLeasePeriod());
-               return new JsonResponse(lockLeaseStatus.getResult()).setLock(lockName)
-                                                                       .setMessage(lockLeaseStatus.getMessage())
-                                                                       .setLockLease(String.valueOf(lockObj.getLeasePeriod())).toMap();
-       } 
-       
+        return response.entity(new JsonResponse(lockLeaseStatus.getResult()).setLock(lockName)
+                                    .setMessage(lockLeaseStatus.getMessage())
+                                    .setLockLease(String.valueOf(lockObj.getLeasePeriod())).toMap()).build();
+    } 
+    
 
-       @GET
-       @Path("/enquire/{lockname}")
-       @ApiOperation(value = "Get Lock Holder", 
-               notes = "Gets the current Lock Holder",
-               response = Map.class)
-       @Produces(MediaType.APPLICATION_JSON)   
-       public Map<String,Object> currentLockHolder(
-                       @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
-                       @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+    @GET
+    @Path("/enquire/{lockname}")
+    @ApiOperation(value = "Get Lock Holder", 
+        notes = "Gets the current Lock Holder",
+        response = Map.class)
+    @Produces(MediaType.APPLICATION_JSON)    
+    public Response currentLockHolder(
+            @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
+            @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+            @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
                             required = true) @HeaderParam("ns") String ns,
             @ApiParam(value = "userId",
                             required = true) @HeaderParam("userId") String userId,
             @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password,
-                       @Context HttpServletResponse response) throws Exception{
-               response.addHeader(xLatestVersion,MusicUtil.getVersion());
+                            required = true) @HeaderParam("password") String password) throws Exception{
+        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
         if (resultMap.containsKey("Exception")) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
         resultMap.remove("keyspace");
@@ -247,47 +250,43 @@ public class RestMusicLocksAPI {
         if (resultMap.containsKey("aid"))
             resultMap.remove("aid");
         if (!resultMap.isEmpty()) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
-               String who = MusicCore.whoseTurnIsIt(lockName);
-               ResultType status = ResultType.SUCCESS;
-               String error = "";
-               if ( who == null ) { 
-                       status = ResultType.FAILURE; 
-                       error = "There was a problem getting the lock holder";
-                       logger.error(EELFLoggerDelegate.errorLogger,"There was a problem getting the lock holder", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return new JsonResponse(status).setError(error)
-                                       .setLock(lockName).setLockHolder(who).toMap();
-               }
-               return new JsonResponse(status).setError(error)
-                                               .setLock(lockName).setLockHolder(who).toMap();
-       }
+        String who = MusicCore.whoseTurnIsIt(lockName);
+        ResultType status = ResultType.SUCCESS;
+        String error = "";
+        if ( who == null ) { 
+            status = ResultType.FAILURE; 
+            error = "There was a problem getting the lock holder";
+            logger.error(EELFLoggerDelegate.errorLogger,"There was a problem getting the lock holder", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(status).setError(error).setLock(lockName).setLockHolder(who).toMap()).build();
+        }
+        return response.status(Status.OK).entity(new JsonResponse(status).setError(error).setLock(lockName).setLockHolder(who).toMap()).build();
+    }
 
-       @GET
-       @Path("/{lockname}")
-       @ApiOperation(value = "Lock State",
-               notes = "Returns current Lock State and Holder.",
-               response = Map.class)
-       @Produces(MediaType.APPLICATION_JSON)   
-       public Map<String,Object> currentLockState(
-                       @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
-                       @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+    @GET
+    @Path("/{lockname}")
+    @ApiOperation(value = "Lock State",
+        notes = "Returns current Lock State and Holder.",
+        response = Map.class)
+    @Produces(MediaType.APPLICATION_JSON)    
+    public Response currentLockState(
+            @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
+            @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+            @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
                             required = true) @HeaderParam("ns") String ns,
             @ApiParam(value = "userId",
                             required = true) @HeaderParam("userId") String userId,
             @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password,
-                       @Context HttpServletResponse response) throws Exception{
-               response.addHeader(xLatestVersion,MusicUtil.getVersion());
+                            required = true) @HeaderParam("password") String password) throws Exception{
+        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
         if (resultMap.containsKey("Exception")) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
         resultMap.remove("keyspace");
@@ -297,56 +296,54 @@ public class RestMusicLocksAPI {
         if (resultMap.containsKey("aid"))
             resultMap.remove("aid");
         if (!resultMap.isEmpty()) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-               return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
-               
+        
         MusicLockState mls = MusicCore.getMusicLockState(lockName);
-               Map<String,Object> returnMap = null;
-               JsonResponse jsonResponse = new JsonResponse(ResultType.FAILURE).setLock(lockName);
-               if(mls == null) {
-                       jsonResponse.setError("");
-                       jsonResponse.setMessage("No lock object created yet..");
-                       logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return jsonResponse.toMap();
-               } else { 
-                       jsonResponse.setStatus(ResultType.SUCCESS);
-                       jsonResponse.setLockStatus(mls.getLockStatus());
-                       jsonResponse.setLockHolder(mls.getLockHolder());
-                       return jsonResponse.toMap();
-               } 
-       }
+        Map<String,Object> returnMap = null;
+        JsonResponse jsonResponse = new JsonResponse(ResultType.FAILURE).setLock(lockName);
+        if(mls == null) {
+            jsonResponse.setError("");
+            jsonResponse.setMessage("No lock object created yet..");
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(jsonResponse.toMap()).build();
+        } else { 
+            jsonResponse.setStatus(ResultType.SUCCESS);
+            jsonResponse.setLockStatus(mls.getLockStatus());
+            jsonResponse.setLockHolder(mls.getLockHolder());
+            return response.status(Status.OK).entity(jsonResponse.toMap()).build();
+        } 
+    }
 
-       /**
-        * 
-        * deletes the process from the zk queue
-        * 
-        * @param lockId
-        * @throws Exception 
-        */
-       @DELETE
-       @Path("/release/{lockreference}")
-       @ApiOperation(value = "Release Lock",
-               notes = "deletes the process from the zk queue",
-               response = Map.class)
-       @Produces(MediaType.APPLICATION_JSON)   
-       public Map<String,Object> unLock(@PathParam("lockreference") String lockId,
-                       @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+    /**
+     * 
+     * deletes the process from the zk queue
+     * 
+     * @param lockId
+     * @throws Exception 
+     */
+    @DELETE
+    @Path("/release/{lockreference}")
+    @ApiOperation(value = "Release Lock",
+        notes = "deletes the process from the zk queue",
+        response = Map.class)
+    @Produces(MediaType.APPLICATION_JSON)    
+    public Response unLock(@PathParam("lockreference") String lockId,
+            @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+            @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
                             required = true) @HeaderParam("ns") String ns,
             @ApiParam(value = "userId",
                             required = true) @HeaderParam("userId") String userId,
             @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password,
-                       @Context HttpServletResponse response) throws Exception{
-               response.addHeader(xLatestVersion,MusicUtil.getVersion());
+                            required = true) @HeaderParam("password") String password) throws Exception{
+        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockId);
         if (resultMap.containsKey("Exception")) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
         resultMap.remove("keyspace");
@@ -355,56 +352,55 @@ public class RestMusicLocksAPI {
         if (resultMap.containsKey("aid"))
             resultMap.remove("aid");
         if (!resultMap.isEmpty()) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        }
+        boolean voluntaryRelease = true; 
+        MusicLockState mls = MusicCore.releaseLock(lockId,voluntaryRelease);
+        if(mls.getErrorMessage() != null) {
+            resultMap.put(ResultType.EXCEPTION.getResult(), mls.getErrorMessage());
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        }
+        Map<String,Object> returnMap = null;
+        if (mls.getLockStatus() == MusicLockState.LockStatus.UNLOCKED) {
+            returnMap = new JsonResponse(ResultType.SUCCESS).setLock(lockId)
+                                .setLockStatus(mls.getLockStatus()).toMap();
+            response.status(Status.OK);
+        }
+        if (mls.getLockStatus() == MusicLockState.LockStatus.LOCKED) {
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.LOCKINGERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            returnMap = new JsonResponse(ResultType.FAILURE).setLock(lockId)
+                                .setLockStatus(mls.getLockStatus()).toMap();
+            response.status(Status.BAD_REQUEST);
         }
-               boolean voluntaryRelease = true; 
-               MusicLockState mls = MusicCore.releaseLock(lockId,voluntaryRelease);
-               if(mls.getErrorMessage() != null) {
-                       resultMap.put(ResultType.EXCEPTION.getResult(), mls.getErrorMessage());
-                       logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-                       return resultMap;
-               }
-               Map<String,Object> returnMap = null;
-               if (mls.getLockStatus() == MusicLockState.LockStatus.UNLOCKED) {
-                       returnMap = new JsonResponse(ResultType.SUCCESS).setLock(lockId)
-                                                               .setLockStatus(mls.getLockStatus()).toMap();
-               }
-               if (mls.getLockStatus() == MusicLockState.LockStatus.LOCKED) {
-                       logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.LOCKINGERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-                       returnMap = new JsonResponse(ResultType.FAILURE).setLock(lockId)
-                                                               .setLockStatus(mls.getLockStatus()).toMap();
-               }
-               return returnMap;
-       }
+        return response.entity(returnMap).build();
+    }
 
-       /**
-        * 
-        * @param lockName
-        * @throws Exception 
-        */
-       @DELETE
-       @Path("/delete/{lockname}")
-       @ApiOperation(value = "Delete Lock", response = Map.class)
-       @Produces(MediaType.APPLICATION_JSON)   
-       public Map<String,Object> deleteLock(@PathParam("lockname") String lockName,
-                       @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+    /**
+     * 
+     * @param lockName
+     * @throws Exception 
+     */
+    @DELETE
+    @Path("/delete/{lockname}")
+    @ApiOperation(value = "Delete Lock", response = Map.class)
+    @Produces(MediaType.APPLICATION_JSON)    
+    public Response deleteLock(@PathParam("lockname") String lockName,
+            @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
+            @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
                             required = true) @HeaderParam("ns") String ns,
             @ApiParam(value = "userId",
                             required = true) @HeaderParam("userId") String userId,
             @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password,
-                       @Context HttpServletResponse response) throws Exception{
-               response.addHeader(xLatestVersion,MusicUtil.getVersion());
+                            required = true) @HeaderParam("password") String password) throws Exception{
+        ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
         if (resultMap.containsKey("Exception")) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.UNKNOWNERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-            return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.UNKNOWNERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
         resultMap.remove("keyspace");
@@ -413,12 +409,11 @@ public class RestMusicLocksAPI {
         if (resultMap.containsKey("aid"))
             resultMap.remove("aid");
         if (!resultMap.isEmpty()) {
-               logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.UNKNOWNERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            response.setStatus(400);
-               return resultMap;
+            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.UNKNOWNERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
         }
-               MusicCore.deleteLock(lockName);
-               return new JsonResponse(ResultType.SUCCESS).toMap();
-       }
+        MusicCore.deleteLock(lockName);
+        return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).toMap()).build();
+    }
 
 }