diff options
Diffstat (limited to 'src/main/java/org/onap/music/rest')
7 files changed, 0 insertions, 2480 deletions
diff --git a/src/main/java/org/onap/music/rest/Application.java b/src/main/java/org/onap/music/rest/Application.java deleted file mode 100644 index 5375155b..00000000 --- a/src/main/java/org/onap/music/rest/Application.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * =================================================================== - * Licensed 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. - * - * ============LICENSE_END============================================= - * ==================================================================== - */ - -package org.onap.music.rest; - -public class Application { - - private String application_name; - private String username; - private String password; - private String keyspace_name; - private boolean is_aaf; - private String uuid; - private boolean is_api; - - public String getApplication_name() { - return application_name; - } - public void setApplication_name(String application_name) { - this.application_name = application_name; - } - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - public String getPassword() { - return password; - } - public void setPassword(String password) { - this.password = password; - } - public String getKeyspace_name() { - return keyspace_name; - } - public void setKeyspace_name(String keyspace_name) { - this.keyspace_name = keyspace_name; - } - public boolean isIs_aaf() { - return is_aaf; - } - public void setIs_aaf(boolean is_aaf) { - this.is_aaf = is_aaf; - } - public String getUuid() { - return uuid; - } - public void setUuid(String uuid) { - this.uuid = uuid; - } - public boolean getIs_api() { - return is_api; - } - public void setIs_api(boolean is_api) { - this.is_api = is_api; - } - - -} diff --git a/src/main/java/org/onap/music/rest/RestMusicDataAPI.java b/src/main/java/org/onap/music/rest/RestMusicDataAPI.java deleted file mode 100755 index 756856d0..00000000 --- a/src/main/java/org/onap/music/rest/RestMusicDataAPI.java +++ /dev/null @@ -1,1052 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * =================================================================== - * Modifications Copyright (c) 2019 Samsung - * =================================================================== - * Modifications Copyright (C) 2019 IBM - * =================================================================== - * Licensed 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. - * - * ============LICENSE_END============================================= - * ==================================================================== - */ - -package org.onap.music.rest; - -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -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.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.ResponseBuilder; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; - -import org.onap.music.datastore.MusicDataStoreHandle; -import org.onap.music.datastore.PreparedQueryObject; -import org.onap.music.datastore.jsonobjects.JsonDelete; -import org.onap.music.datastore.jsonobjects.JsonIndex; -import org.onap.music.datastore.jsonobjects.JsonInsert; -import org.onap.music.datastore.jsonobjects.JsonKeySpace; -import org.onap.music.datastore.jsonobjects.JsonSelect; -import org.onap.music.datastore.jsonobjects.JsonTable; -import org.onap.music.datastore.jsonobjects.JsonUpdate; -import org.onap.music.eelf.logging.EELFLoggerDelegate; -import org.onap.music.eelf.logging.format.AppMessages; -import org.onap.music.eelf.logging.format.ErrorSeverity; -import org.onap.music.eelf.logging.format.ErrorTypes; -import org.onap.music.exceptions.MusicLockingException; -import org.onap.music.exceptions.MusicQueryException; -import org.onap.music.exceptions.MusicServiceException; -import org.onap.music.main.MusicCore; -import org.onap.music.main.MusicUtil; -import org.onap.music.main.ResultType; -import org.onap.music.main.ReturnType; -import org.onap.music.response.jsonobjects.JsonResponse; - -import com.datastax.driver.core.DataType; -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.TableMetadata; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import io.swagger.annotations.Example; -import io.swagger.annotations.ExampleProperty; - -/* Version 2 Class */ -//@Path("/v{version: [0-9]+}/keyspaces") -@Path("/v2/keyspaces") -@Api(value = "Data Api") -public class RestMusicDataAPI { - /* - * Header values for Versioning X-minorVersion *** - Used to request or communicate a MINOR - * version back from the client to the server, and from the server back to the client - This - * will be the MINOR version requested by the client, or the MINOR version of the last MAJOR - * version (if not specified by the client on the request) - Contains a single position value - * (e.g. if the full version is 1.24.5, X-minorVersion = "24") - Is optional for the client on - * request; however, this header should be provided if the client needs to take advantage of - * MINOR incremented version functionality - Is mandatory for the server on response - * - *** X-patchVersion *** - Used only to communicate a PATCH version in a response for - * troubleshooting purposes only, and will not be provided by the client on request - This will - * be the latest PATCH version of the MINOR requested by the client, or the latest PATCH version - * of the MAJOR (if not specified by the client on the request) - Contains a single position - * value (e.g. if the full version is 1.24.5, X-patchVersion = "5") - Is mandatory for the - * server on response (CURRENTLY NOT USED) - * - *** X-latestVersion *** - Used only to communicate an API's latest version - Is mandatory for the - * server on response, and shall include the entire version of the API (e.g. if the full version - * is 1.24.5, X-latestVersion = "1.24.5") - Used in the response to inform clients that they are - * not using the latest version of the API (CURRENTLY NOT USED) - * - */ - - private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RestMusicDataAPI.class); - private static final String XMINORVERSION = "X-minorVersion"; - private static final String XPATCHVERSION = "X-patchVersion"; - private static final String NS = "ns"; - private static final String VERSION = "v2"; - private static final String PARAMETER_ERROR = "Missing Row Identifier. Please provide the parameter of key=value for the row being selected."; - - - private class RowIdentifier { - public String primarKeyValue; - public StringBuilder rowIdString; - @SuppressWarnings("unused") - public PreparedQueryObject queryObject; // the string with all the row - // identifiers separated by AND - - public RowIdentifier(String primaryKeyValue, StringBuilder rowIdString, - PreparedQueryObject queryObject) { - this.primarKeyValue = primaryKeyValue; - this.rowIdString = rowIdString; - this.queryObject = queryObject; - } - } - - - /** - * Create Keyspace REST - * - * @param kspObject - * @param keyspaceName - * @return - * @throws Exception - */ - @POST - @Path("/{name}") - @ApiOperation(value = "Create Keyspace", response = String.class, - notes = "This API will not work if MUSIC properties has keyspace.active=false ") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"message\" : \"Keysapce <keyspace> Created\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response createKeySpace( - @ApiParam(value = "Major Version",required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Application namespace",required = false, hidden = true) @HeaderParam(NS) String ns, - JsonKeySpace kspObject, - @ApiParam(value = "Keyspace Name",required = true) @PathParam("name") String keyspaceName) { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) "); - logger.info(EELFLoggerDelegate.applicationLogger,"In Create Keyspace " + keyspaceName); - if (MusicUtil.isKeyspaceActive() ) { - logger.info(EELFLoggerDelegate.applicationLogger,"Creating Keyspace " + keyspaceName); - - if(kspObject == null || kspObject.getReplicationInfo() == null) { - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(ResultType.BODYMISSING.getResult()).toMap()).build(); - } - ResultType result = ResultType.FAILURE; - try { - kspObject.setKeyspaceName(keyspaceName); - result = MusicCore.createKeyspace(kspObject, MusicUtil.EVENTUAL); - logger.info(EELFLoggerDelegate.applicationLogger, "result = " + result); - } catch ( MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.QUERYERROR - ,ErrorSeverity.WARN, ErrorTypes.QUERYERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } catch ( MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Keyspace " + keyspaceName + " Created").toMap()).build(); - } else { - String vError = "Keyspace Creation has been turned off. Contact DBA to create the keyspace or set keyspace.active to true."; - logger.info(EELFLoggerDelegate.applicationLogger,vError); - logger.error(EELFLoggerDelegate.errorLogger,vError, AppMessages.UNKNOWNERROR,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR); - return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(vError).toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - - } - - /** - * - * @param kspObject - * @param keyspaceName - * @return - * @throws Exception - */ - @DELETE - @Path("/{name}") - @ApiOperation(value = "Delete Keyspace", response = String.class, - notes = "This API will not work if MUSIC properties has keyspace.active=false ") - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"message\" : \"Keysapce <keyspace> Deleted\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response dropKeySpace( - @ApiParam(value = "Major Version",required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Application namespace",required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Keyspace Name",required = true) @PathParam("name") String keyspaceName) throws Exception { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) "); - logger.info(EELFLoggerDelegate.applicationLogger,"In Drop Keyspace " + keyspaceName); - if (MusicUtil.isKeyspaceActive()) { - String consistency = MusicUtil.EVENTUAL;// for now this needs only - String droperror = "Error Deleteing Keyspace " + keyspaceName; - JsonKeySpace kspObject = new JsonKeySpace(); - kspObject.setKeyspaceName(keyspaceName); - try{ - ResultType result = MusicCore.dropKeyspace(kspObject, consistency); - if ( result.equals(ResultType.FAILURE) ) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result).setError(droperror).toMap()).build(); - } - } catch ( MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.QUERYERROR - ,ErrorSeverity.WARN, ErrorTypes.QUERYERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(droperror + " " + ex.getMessage()).toMap()).build(); - } catch ( MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR - ,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(droperror + " " + ex.getMessage()).toMap()).build(); - } - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("Keyspace " + keyspaceName + " Deleted").toMap()).build(); - } else { - String vError = "Keyspace deletion has been turned off. Contact DBA to delete the keyspace or set keyspace.active to true."; - logger.info(EELFLoggerDelegate.applicationLogger,vError); - logger.error(EELFLoggerDelegate.errorLogger,vError, AppMessages.UNKNOWNERROR,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR); - return response.status(Response.Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(vError).toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param tableObj - * @param version - * @param keyspace - * @param tablename - * @param headers - * @return - * @throws Exception - - */ - @POST - @Path("/{keyspace: .*}/tables/{tablename: .*}") - @ApiOperation(value = "Create Table", response = String.class, - notes = "Create a table with the required json in the body.") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"message\" : \"Tablename <tablename> Created under keyspace <keyspace>\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response createTable( - @ApiParam(value = "Major Version",required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace",required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonTable tableObj, - @ApiParam(value = "Keyspace Name",required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name",required = true) @PathParam("tablename") String tablename) throws Exception { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if ( null == tableObj ) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError(ResultType.BODYMISSING.getResult()).toMap()).build(); - } - if(keyspace == null || keyspace.isEmpty() || tablename == null || tablename.isEmpty()){ - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("One or more path parameters are not set, please check and try again." - + "Parameter values: keyspace='" + keyspace + "' tablename='" + tablename + "'") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) "); - String consistency = MusicUtil.EVENTUAL; - // for now this needs only eventual consistency - ResultType result = ResultType.FAILURE; - try { - tableObj.setKeyspaceName(keyspace); - tableObj.setTableName(tablename); - result = MusicCore.createTable(tableObj, consistency); - } catch (MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), ex.getMessage() ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } catch (MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity.CRITICAL, ErrorTypes.MUSICSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - if ( result.equals(ResultType.FAILURE) ) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result).setError("Error Creating Table " + tablename).toMap()).build(); - } - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setMessage("TableName " + tablename.trim() + " Created under keyspace " + keyspace.trim()).toMap()).build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param keyspace - * @param tablename - * @param fieldName - * @param info - * @throws Exception - */ - @POST - @Path("/{keyspace: .*}/tables/{tablename: .*}/index/{field: .*}") - @ApiOperation(value = "Create Index", response = String.class, - notes = "An index provides a means to access data using attributes " - + "other than the partition key. The benefit is fast, efficient lookup " - + "of data matching a given condition.") - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"message\" : \"Index Created on <keyspace>.<table>.<field>\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Unknown Error in create index.\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response createIndex( - @ApiParam(value = "Major Version",required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace",required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Keyspace Name",required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name",required = true) @PathParam("tablename") String tablename, - @ApiParam(value = "Field Name",required = true) @PathParam("field") String fieldName, - @Context UriInfo info) throws Exception { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if ((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty()) || (fieldName == null || fieldName.isEmpty())){ - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("one or more path parameters are not set, please check and try again") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) "); - MultivaluedMap<String, String> rowParams = info.getQueryParameters(); - String indexName = ""; - if (rowParams.getFirst("index_name") != null) - indexName = rowParams.getFirst("index_name"); - - JsonIndex jsonIndexObject = new JsonIndex(indexName, keyspace, tablename, fieldName); - - ResultType result = ResultType.FAILURE; - try { - result = MusicCore.createIndex(jsonIndexObject, MusicUtil.EVENTUAL); - } catch (MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity - .CRITICAL, ErrorTypes.GENERALSERVICEERROR, ex); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - if ( result.equals(ResultType.SUCCESS) ) { - return response.status(Status.OK).entity(new JsonResponse(result).setMessage("Index Created on " + keyspace+"."+tablename+"."+fieldName).toMap()).build(); - } else { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result).setError("Unknown Error in create index.").toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param insObj - * @param keyspace - * @param tablename - * @return - * @throws Exception - */ - @POST - @Path("/{keyspace: .*}/tables/{tablename: .*}/rows") - @ApiOperation(value = "Insert Into Table", response = String.class, - notes = "Insert into table with data in json body.") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"message\" : \"Insert Successful\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure - Generic",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response insertIntoTable( - @ApiParam(value = "Major Version",required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace",required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonInsert insObj, - @ApiParam(value = "Keyspace Name", - required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", - required = true) @PathParam("tablename") String tablename) { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if ( null == insObj ) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError(ResultType.BODYMISSING.getResult()).toMap()).build(); - } - if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){ - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("one or more path parameters are not set, please check and try again") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace","(" + keyspace + ")"); - ReturnType result = null; - String consistency = insObj.getConsistencyInfo().get("type"); - try { - insObj.setKeyspaceName(keyspace); - insObj.setTableName(tablename); - if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) { - String lockId = insObj.getConsistencyInfo().get("lockId"); - if(lockId == null) { - logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or" - + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("LockId cannot be null. Create lock " - + "and acquire lock or use ATOMIC instead of CRITICAL").toMap()).build(); - } - } - result = MusicCore.insertIntoTable(insObj); - }catch (MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), ex.getMessage() ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - }catch (Exception ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - if (result==null) { - logger.error(EELFLoggerDelegate.errorLogger,"Null result - Please Contact admin", AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Null result - Please Contact admin").toMap()).build(); - }else if(result.getResult() == ResultType.FAILURE) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(result.getResult()).setError(result.getMessage()).toMap()).build(); - } - return response.status(Status.OK).entity(new JsonResponse(result.getResult()).setMessage("Insert Successful").toMap()).build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param insObj - * @param keyspace - * @param tablename - * @param info - * @return - * @throws MusicServiceException - * @throws MusicQueryException - * @throws Exception - */ - @PUT - @Path("/{keyspace: .*}/tables/{tablename: .*}/rows") - @ApiOperation(value = "Update Table", response = String.class, - notes = "Update the table with the data in the JSON body.") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public Response updateTable( - @ApiParam(value = "Major Version", - required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", - required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version", - required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonUpdate updateObj, - @ApiParam(value = "Keyspace Name", - required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", - required = true) @PathParam("tablename") String tablename, - @Context UriInfo info) throws MusicQueryException, MusicServiceException { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if ( null == updateObj ) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError(ResultType.BODYMISSING.getResult()).toMap()).build(); - } - if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){ - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("one or more path parameters are not set, please check and try again") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) "); - long startTime = System.currentTimeMillis(); - String operationId = UUID.randomUUID().toString(); // just for infoging - // purposes. - String consistency = updateObj.getConsistencyInfo().get("type"); - ReturnType operationResult = null; - logger.info(EELFLoggerDelegate.applicationLogger, "--------------Music " + consistency - + " update-" + operationId + "-------------------------"); - - updateObj.setKeyspaceName(keyspace); - updateObj.setTableName(tablename); - - try { - if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) { - String lockId = updateObj.getConsistencyInfo().get("lockId"); - if(lockId == null) { - logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or" - + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("LockId cannot be null. Create lock " - + "and acquire lock or use ATOMIC instead of CRITICAL").toMap()).build(); - } - } - operationResult = MusicCore.updateTable(updateObj,info.getQueryParameters()); - }catch (MusicLockingException e) { - logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, - ErrorTypes.GENERALSERVICEERROR, e); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build(); - }catch (MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), ex.getMessage() ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - }catch (Exception ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - long actualUpdateCompletionTime = System.currentTimeMillis(); - - long endTime = System.currentTimeMillis(); - long jsonParseCompletionTime = System.currentTimeMillis(); - String timingString = "Time taken in ms for Music " + consistency + " update-" + operationId - + ":" + "|total operation time:" + (endTime - startTime) - + "|json parsing time:" + (jsonParseCompletionTime - startTime) - + "|update time:" + (actualUpdateCompletionTime - jsonParseCompletionTime) - + "|"; - - if (operationResult != null && operationResult.getTimingInfo() != null) { - String lockManagementTime = operationResult.getTimingInfo(); - timingString = timingString + lockManagementTime; - } - logger.info(EELFLoggerDelegate.applicationLogger, timingString); - - if (operationResult==null) { - logger.error(EELFLoggerDelegate.errorLogger,"Null result - Please Contact admin", AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Null result - Please Contact admin").toMap()).build(); - } - if ( operationResult.getResult() == ResultType.SUCCESS ) { - return response.status(Status.OK).entity(new JsonResponse(operationResult.getResult()).setMessage(operationResult.getMessage()).toMap()).build(); - } else { - logger.error(EELFLoggerDelegate.errorLogger,operationResult.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(operationResult.getResult()).setError(operationResult.getMessage()).toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param delObj - * @param keyspace - * @param tablename - * @param info - * @return - * @throws MusicServiceException - * @throws MusicQueryException - * @throws Exception - */ - @DELETE - @Path("/{keyspace: .*}/tables/{tablename: .*}/rows") - @ApiOperation(value = "Delete From table", response = String.class, - notes = "Delete from a table, the row or parts of a row. Based on JSON body.") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public Response deleteFromTable( - @ApiParam(value = "Major Version", - required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", - required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version", - required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonDelete delObj, - @ApiParam(value = "Keyspace Name", - required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", - required = true) @PathParam("tablename") String tablename, - @Context UriInfo info) throws MusicQueryException, MusicServiceException { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){ - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("one or more path parameters are not set, please check and try again") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) "); - if(delObj == null) { - logger.error(EELFLoggerDelegate.errorLogger,ResultType.BODYMISSING.getResult(), AppMessages.MISSINGDATA ,ErrorSeverity.WARN, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ResultType.BODYMISSING.getResult()).toMap()).build(); - } - ReturnType operationResult = null; - String consistency = delObj.getConsistencyInfo().get("type"); - delObj.setKeyspaceName(keyspace); - delObj.setTableName(tablename); - try { - if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) { - String lockId = delObj.getConsistencyInfo().get("lockId"); - if(lockId == null) { - logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or" - + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("LockId cannot be null. Create lock " - + "and acquire lock or use ATOMIC instead of CRITICAL").toMap()).build(); - } - } - - operationResult = MusicCore.deleteFromTable(delObj,info.getQueryParameters()); - } catch (MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), ex.getMessage() ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - - } catch (MusicLockingException e) { - logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR, e); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("Unable to perform Delete operation. Exception from music").toMap()).build(); - } - if (operationResult==null) { - logger.error(EELFLoggerDelegate.errorLogger,"Null result - Please Contact admin", AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Null result - Please Contact admin").toMap()).build(); - } - if (operationResult.getResult().equals(ResultType.SUCCESS)) { - return response.status(Status.OK).entity(new JsonResponse(operationResult.getResult()).setMessage(operationResult.getMessage()).toMap()).build(); - } else { - logger.error(EELFLoggerDelegate.errorLogger,operationResult.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(operationResult.getMessage()).toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param tabObj - * @param keyspace - * @param tablename - * @throws Exception - */ - @DELETE - @Path("/{keyspace: .*}/tables/{tablename: .*}") - @ApiOperation(value = "Drop Table", response = String.class) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response dropTable( - @ApiParam(value = "Major Version", - required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", - required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version", - required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Keyspace Name", - required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", - required = true) @PathParam("tablename") String tablename) throws Exception { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){ - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("one or more path parameters are not set, please check and try again") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspace+" ) "); - JsonTable jsonTable = new JsonTable(); - jsonTable.setKeyspaceName(keyspace); - jsonTable.setTableName(tablename); - try { - return response.status(Status.OK).entity(new JsonResponse(MusicCore.dropTable(jsonTable, MusicUtil.EVENTUAL)).toMap()).build(); - } catch (MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.QUERYERROR,ErrorSeverity.WARN - , ErrorTypes.QUERYERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } catch (MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.MISSINGINFO ,ErrorSeverity.WARN - , ErrorTypes.GENERALSERVICEERROR,ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param selObj - * @param keyspace - * @param tablename - * @param info - * @return - */ - @PUT - @Path("/{keyspace: .*}/tables/{tablename: .*}/rows/criticalget") - @ApiOperation(value = "** Depreciated ** - Select Critical", response = Map.class, - notes = "This API is depreciated in favor of the regular select api.\n" - + "Avaliable to use with the select api by providing a minorVersion of 1 " - + "and patchVersion of 0.\n" - + "Critical Get requires parameter rowId=value and consistency in order to work.\n" - + "It will fail if either are missing.") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"result\":{\"row 0\":{\"address\":" - + "{\"city\":\"Someplace\",\"street\":\"1 Some way\"}," - + "\"emp_salary\":50,\"emp_name\":\"tom\",\"emp_id\":" - + "\"cfd66ccc-d857-4e90-b1e5-df98a3d40cd6\"}},\"status\":\"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response selectCritical( - @ApiParam(value = "Major Version", - required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version",example = "0", - required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",example = "0", - required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonInsert selObj, - @ApiParam(value = "Keyspace Name", - required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", - required = true) @PathParam("tablename") String tablename, - @Context UriInfo info) throws Exception { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("one or more path parameters are not set, please check and try again") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspace + " )"); - if (info.getQueryParameters().isEmpty()) { - logger.error(EELFLoggerDelegate.errorLogger,RestMusicDataAPI.PARAMETER_ERROR, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes - .GENERALSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(RestMusicDataAPI.PARAMETER_ERROR).toMap()).build(); - } - if (selObj == null || selObj.getConsistencyInfo().isEmpty()) { - String error = " Missing Body or Consistency type."; - logger.error(EELFLoggerDelegate.errorLogger,ResultType.BODYMISSING.getResult() + error, AppMessages.MISSINGDATA ,ErrorSeverity.WARN, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ResultType.BODYMISSING.getResult() + error).toMap()).build(); - } - ResultSet results = null; - String consistency = selObj.getConsistencyInfo().get("type"); - String lockId = selObj.getConsistencyInfo().get("lockId"); - selObj.setKeyspaceName(keyspace); - selObj.setTableName(tablename); - try { - if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) { - if(lockId == null) { - logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or" - + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("LockId cannot be null. Create lock " - + "and acquire lock or use ATOMIC instead of CRITICAL").toMap()).build(); - } - } - results = MusicCore.selectCritical(selObj, info.getQueryParameters()); - }catch (MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), ex.getMessage() ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - - }catch(Exception ex) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - - if(results!=null && results.getAvailableWithoutFetching() >0) { - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setDataResult(MusicDataStoreHandle.marshallResults(results)).toMap()).build(); - } - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setError("No data found").toMap()).build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * This API will replace the original select and provide a single API fro select and critical. - * The idea is to depreciate the older api of criticalGet and use a single API. - * - * @param selObj - * @param keyspace - * @param tablename - * @param info - * @return - */ - @GET - @Path("/{keyspace: .*}/tables/{tablename: .*}/rows") - @ApiOperation(value = "Select", response = Map.class, - notes = "This has 2 versions: if minorVersion and patchVersion is null or 0, this will be a Eventual Select only.\n" - + "If minorVersion is 1 and patchVersion is 0, this will act like the Critical Select \n" - + "Critical Get requires parameter rowId=value and consistency in order to work.\n" - + "If parameters are missing or consistency information is missing. An eventual select will be preformed.") - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"result\":{\"row 0\":{\"address\":" - + "{\"city\":\"Someplace\",\"street\":\"1 Some way\"}," - + "\"emp_salary\":50,\"emp_name\":\"tom\",\"emp_id\":" - + "\"cfd66ccc-d857-4e90-b1e5-df98a3d40cd6\"}},\"status\":\"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"<errorMessage>\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response selectWithCritical( - @ApiParam(value = "Major Version",example = "v2", - required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version",example = "1", - required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",example = "0", - required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false,hidden = true) @HeaderParam(NS) String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonInsert selObj, - @ApiParam(value = "Keyspace Name", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("tablename") String tablename, - @Context UriInfo info) throws Exception { - if ((minorVersion != null && patchVersion != null) && - (Integer.parseInt(minorVersion) == 1 && Integer.parseInt(patchVersion) == 0) && - (!(null == selObj) && !selObj.getConsistencyInfo().isEmpty())) { - return selectCritical(version, minorVersion, patchVersion, aid, ns, authorization, selObj, keyspace, tablename, info); - } else { - return select(version, minorVersion, patchVersion, aid, ns, authorization, keyspace, tablename, info); - } - } - - /** - * - * @param keyspace - * @param tablename - * @param info - * @return - * @throws Exception - */ - private Response select( - String version,String minorVersion,String patchVersion, - String aid,String ns,String authorization,String keyspace, - String tablename,UriInfo info) throws Exception { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - if((keyspace == null || keyspace.isEmpty()) || (tablename == null || tablename.isEmpty())){ - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("one or more path parameters are not set, please check and try again") - .toMap()).build(); - } - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspace + " ) "); - try { - JsonSelect jsonSelect = new JsonSelect(); - jsonSelect.setKeyspaceName(keyspace); - jsonSelect.setTableName(tablename); - ResultSet results = MusicCore.select(jsonSelect, info.getQueryParameters()); - if(results.getAvailableWithoutFetching() >0) { - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setDataResult(MusicDataStoreHandle.marshallResults(results)).toMap()).build(); - } - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setDataResult(MusicDataStoreHandle.marshallResults(results)).setError("No data found").toMap()).build(); - } catch (MusicQueryException ex) { - logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), ex.getMessage() ,ErrorSeverity - .WARN, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - - } catch (MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger, ex, AppMessages.UNKNOWNERROR ,ErrorSeverity.ERROR, - ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param keyspace - * @param tablename - * @param info - * @param limit - * @return - * @throws MusicServiceException - */ - public PreparedQueryObject selectSpecificQuery(String keyspace, - String tablename, UriInfo info, int limit) - throws MusicServiceException { - PreparedQueryObject queryObject = new PreparedQueryObject(); - StringBuilder rowIdString = getRowIdentifier(keyspace, - tablename,info.getQueryParameters(),queryObject).rowIdString; - queryObject.appendQueryString( - "SELECT * FROM " + keyspace + "." + tablename + " WHERE " + rowIdString); - if (limit != -1) { - queryObject.appendQueryString(" LIMIT " + limit); - } - queryObject.appendQueryString(";"); - return queryObject; - } - - /** - * - * @param keyspace - * @param tablename - * @param rowParams - * @param queryObject - * @return - * @throws MusicServiceException - */ - private RowIdentifier getRowIdentifier(String keyspace, String tablename, - MultivaluedMap<String, String> rowParams, PreparedQueryObject queryObject) - throws MusicServiceException { - StringBuilder rowSpec = new StringBuilder(); - int counter = 0; - TableMetadata tableInfo = MusicDataStoreHandle.returnColumnMetadata(keyspace, tablename); - if (tableInfo == null) { - logger.error(EELFLoggerDelegate.errorLogger, - "Table information not found. Please check input for table name= " - + keyspace + "." + tablename); - throw new MusicServiceException( - "Table information not found. Please check input for table name= " - + keyspace + "." + tablename); - } - StringBuilder primaryKey = new StringBuilder(); - for (MultivaluedMap.Entry<String, List<String>> entry : rowParams.entrySet()) { - String keyName = entry.getKey(); - List<String> valueList = entry.getValue(); - String indValue = valueList.get(0); - DataType colType = null; - Object formattedValue = null; - try { - colType = tableInfo.getColumn(entry.getKey()).getType(); - formattedValue = MusicUtil.convertToActualDataType(colType, indValue); - } catch (Exception e) { - logger.error(EELFLoggerDelegate.errorLogger,e); - } - if(tableInfo.getPrimaryKey().get(0).getName().equals(entry.getKey())) { - primaryKey.append(indValue); - } - rowSpec.append(keyName + "= ?"); - queryObject.addValue(formattedValue); - if (counter != rowParams.size() - 1) { - rowSpec.append(" AND "); - } - counter = counter + 1; - } - return new RowIdentifier(primaryKey.toString(), rowSpec, queryObject); - } -} diff --git a/src/main/java/org/onap/music/rest/RestMusicHealthCheckAPI.java b/src/main/java/org/onap/music/rest/RestMusicHealthCheckAPI.java deleted file mode 100644 index eef3aa3a..00000000 --- a/src/main/java/org/onap/music/rest/RestMusicHealthCheckAPI.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * - * Modifications Copyright (C) 2018 IBM. - * =================================================================== - * Licensed 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. - * - * ============LICENSE_END============================================= - * ==================================================================== - */ - -package org.onap.music.rest; - -import java.util.HashMap; -/** - * @author inam - * - */ -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -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.Status; - - -import org.onap.music.eelf.healthcheck.MusicHealthCheck; -import org.onap.music.eelf.logging.EELFLoggerDelegate; -import org.onap.music.main.MusicUtil; - -import com.datastax.driver.core.ConsistencyLevel; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; - - - - -@Path("/v2/service") -@Api(value="Healthcheck Api") -public class RestMusicHealthCheckAPI { - - - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicUtil.class); - private static final String ACTIVE_STATUS = "ACTIVE"; - private static final String INVALID_STATUS = "INVALID"; - private static final String INACTIVE_STATUS = "INACTIVE"; - private static final String INVALID_MESSAGE = "Consistency level is invalid..."; - private static final String INACTIVE_MESSAGE = "One or more nodes in the Cluster is/are down or not responding."; - private static final String ACTIVE_MESSAGE = "Cassandra Running and Listening to requests"; - private static final String STATUS_KEY = "status"; - private static final String MESSAGE_KEY = "message"; - - @GET - @Path("/pingCassandra/{consistency}") - @ApiOperation(value = "Get Health Status", response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - public Response cassandraStatus( - @Context HttpServletResponse response, - @ApiParam(value = "Consistency level",required = true) - @PathParam("consistency") String consistency) { - logger.info(EELFLoggerDelegate.applicationLogger,"Replying to request for MUSIC Health Check status for Cassandra"); - - Map<String, Object> resultMap = new HashMap<>(); - if(ConsistencyLevel.valueOf(consistency) == null) { - resultMap.put(STATUS_KEY,INVALID_STATUS); - resultMap.put(MESSAGE_KEY, INVALID_MESSAGE); - resultMap.put(INVALID_STATUS, INVALID_STATUS); - return Response.status(Status.BAD_REQUEST).entity(resultMap).build(); - } - MusicHealthCheck cassHealthCheck = new MusicHealthCheck(); - String status = cassHealthCheck.getCassandraStatus(consistency); - if(status.equals(ACTIVE_STATUS)) { - resultMap.put(STATUS_KEY,ACTIVE_STATUS); - resultMap.put(MESSAGE_KEY, ACTIVE_MESSAGE); - resultMap.put(ACTIVE_STATUS, ACTIVE_MESSAGE); - return Response.status(Status.OK).entity(resultMap).build(); - } else { - resultMap.put(STATUS_KEY,INACTIVE_STATUS); - resultMap.put(MESSAGE_KEY, INACTIVE_MESSAGE); - resultMap.put(INACTIVE_STATUS, INACTIVE_MESSAGE); - return Response.status(Status.BAD_REQUEST).entity(resultMap).build(); - } - } - - @GET - @Path("/musicHealthCheck") - @ApiOperation(value = "Get Health Status", response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - public Response musicHealthCheck() { - logger.info(EELFLoggerDelegate.applicationLogger,"Replying to request for Health Check status for MUSIC"); - Map<String, Object> resultMap = new HashMap<>(); - MusicHealthCheck healthCheck = new MusicHealthCheck(); - - String status = healthCheck.getCassandraStatus(ConsistencyLevel.ANY.toString()); - if(status.equals(ACTIVE_STATUS)) { - resultMap.put("Cassandra", "Active"); - } else { - resultMap.put("Cassandra", "Inactive"); - } - resultMap.put("MUSIC", "Active"); - return Response.status(Status.OK).entity(resultMap).build(); - } - -} diff --git a/src/main/java/org/onap/music/rest/RestMusicLocksAPI.java b/src/main/java/org/onap/music/rest/RestMusicLocksAPI.java deleted file mode 100644 index 321e2561..00000000 --- a/src/main/java/org/onap/music/rest/RestMusicLocksAPI.java +++ /dev/null @@ -1,632 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * =================================================================== - * * Modifications Copyright (c) 2019 Samsung - * =================================================================== - * - * Licensed 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. - * - * ============LICENSE_END============================================= - * ==================================================================== - */ - -package org.onap.music.rest; - -import java.util.List; -import java.util.Map; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -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.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.datastore.jsonobjects.JsonLock; -import org.onap.music.eelf.logging.EELFLoggerDelegate; -import org.onap.music.eelf.logging.format.AppMessages; -import org.onap.music.eelf.logging.format.ErrorSeverity; -import org.onap.music.eelf.logging.format.ErrorTypes; -import org.onap.music.exceptions.MusicLockingException; -import org.onap.music.lockingservice.cassandra.LockType; -import org.onap.music.lockingservice.cassandra.MusicLockState; -import org.onap.music.main.MusicCore; -import org.onap.music.main.MusicUtil; -import org.onap.music.main.ResultType; -import org.onap.music.main.ReturnType; -import org.onap.music.response.jsonobjects.JsonResponse; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import io.swagger.annotations.Example; -import io.swagger.annotations.ExampleProperty; - - -@Path("/v2/locks/") -@Api(value="Locking Api") -public class RestMusicLocksAPI { - - private EELFLoggerDelegate logger =EELFLoggerDelegate.getLogger(RestMusicLocksAPI.class); - private static final String XMINORVERSION = "X-minorVersion"; - private static final String XPATCHVERSION = "X-patchVersion"; - private static final String VERSION = "v2"; - - /** - * Puts the requesting process in the q for this lock. The corresponding - * node will be created if it did not already exist - * - * @param lockName - * @return - * @throws Exception - */ - @POST - @Path("/create/{lockname}") - @ApiOperation(value = "Create and Acquire a Lock Id for a single row.", - notes = "Creates and Acquires a Lock Id for a specific Row in a table based on the key of that row.\n" - + " The corresponding lock will be created if it did not already exist." - + " Lock Name also the Lock is in the form of keyspaceName.tableName.rowId.\n" - + " The Response will be in the form of \"$kesypaceName.tableName.rowId$lockRef\" " - + " where the lockRef is a integer representing the Lock Name buffered by \"$\" " - + " followed by the lock number. This term for " - + " this response is a lockId and it will be used in other /locks API calls where a " - + " lockId is required. If just a lock is required then the form that would be " - + " the original lockname(without the buffered \"$\").", - response = Map.class) - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"lock\" : {\"lock\" : \"$keyspace.table.rowId$<integer>\"}," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Unable to aquire lock\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - 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 = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - JsonLock lockObject, - @ApiParam(value = "Lock Owner", required = false) @HeaderParam("owner") String owner, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam("ns") String ns) throws Exception{ - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockName); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) "); - - //default lock type is write, as this is always semantically safe - LockType locktype = LockType.WRITE; - if (lockObject!=null && lockObject.getLocktype()!=null) { - locktype = lockObject.getLocktype(); - } - String lockId; - try { - lockId= MusicCore.createLockReference(lockName, locktype, owner); - } catch (MusicLockingException e) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build(); - } - - if (lockId == null) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.LOCKINGERROR ,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Lock Id is null").toMap()).build(); - } - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).setLock(lockId).toMap()).build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * Checks if the node is in the top of the queue and hence acquires the lock - * - * @param lockId - * @return - * @throws Exception - */ - @GET - @Path("/acquire/{lockId}") - @ApiOperation(value = "Aquire Lock Id ", - notes = "Checks if the node is in the top of the queue and hence acquires the lock", - response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"lock\" : {\"lock\" : \"$keyspace.table.rowId$<integer>\"}," - + "\"message\" : \"<integer> is the lock holder for the key\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Unable to aquire lock\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response accquireLock( - @ApiParam(value="Lock Id",required=true) @PathParam("lockId") String lockId, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam("ns") String ns) throws Exception{ - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockId); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) "); - 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, e); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Unable to aquire lock").toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - - @POST - @Path("/acquire-with-lease/{lockId}") - @ApiOperation( - hidden = false, - value = " ** DEPRECATED ** - Aquire Lock with Lease", - notes = "Acquire the lock with a lease, where lease period is in Milliseconds.\n" - + "This will ensure that a lock will expire in set milliseconds.\n" - + "This is no longer available after v3.2.0", - response = Map.class) - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"lock\" : {\"lock\" : \"$keyspace.table.rowId$<integer>\"," - + "\"lock-lease\" : \"6000\"}," - + "\"message\" : \"<integer> is the lock holder for the key\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Unable to aquire lock\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - @Deprecated - public Response accquireLockWithLease( - JsonLeasedLock lockObj, - @ApiParam(value="Lock Id",required=true) @PathParam("lockId") String lockId, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace",required = false, hidden = true) @HeaderParam("ns") String ns) throws Exception{ - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockId); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) "); - 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); - } - return response.entity(new JsonResponse(lockLeaseStatus.getResult()).setLock(lockName) - .setMessage(lockLeaseStatus.getMessage()) - .setLockLease(String.valueOf(lockObj.getLeasePeriod())).toMap()).build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - - - } - - - @GET - @Path("/enquire/{lockname}") - @ApiOperation(value = "Get the top of the lock queue", - notes = "Gets the current single lockholder at top of lock queue", - response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"lock\" : {\"lock\" : \"keyspace.table.rowId\"," - + "\"lock-holder\" : \"$tomtest.employees.tom$<integer>\"}}," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Error Message\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response enquireLock( - @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 = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam("ns") String ns) throws Exception{ - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockName); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) "); - 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(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - @GET - @Path("/holders/{lockname}") - @ApiOperation(value = "Get Lock Holders", - notes = "Gets the current Lock Holders.\n" - + "Will return an array of READ Lock References.", - response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"lock\" : {\"lock\" : \"keyspace.table.rowId\"," - + "\"lock-holder\" : [\"$keyspace.table.rowId$<integer1>\",\"$keyspace.table.rowId$<integer2>\"]}}," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Error message\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - 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 = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam("ns") String ns) { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockName); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.INCORRECTDATA, ErrorSeverity.CRITICAL, - ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity( - new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()) - .build(); - } - String keyspaceName = (String) resultMap.get("keyspace"); - List<String> who = MusicCore.getCurrentLockHolders(lockName); - ResultType status = ResultType.SUCCESS; - String error = ""; - if (who == null || who.isEmpty()) { - status = ResultType.FAILURE; - error = (who !=null && who.isEmpty()) ? "No lock holders for the key":"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).setisLockHolders(true).toMap()) - .build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - - @GET - @Path("/{lockname}") - @ApiOperation(value = "Lock State", - notes = "Returns current Lock State and Holder.", - response = Map.class,hidden = true) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"lock\" : {\"lock\" : \"$keyspace.table.rowId$<integer>\"}," - + "\"message\" : \"<integer> is the lock holder for the key\"," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Unable to aquire lock\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - 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 = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam("ns") String ns) { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockName); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) "); - 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(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - - } - - /** - * - * deletes the process from the lock queue - * - * @param lockId - * @throws Exception - */ - @DELETE - @Path("/release/{lockreference}") - @ApiOperation(value = "Release Lock", - notes = "Releases the lock from the lock queue.", - response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success - UNLOCKED = Lock Removed.",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"lock\" : {\"lock\" : \"$keyspace.table.rowId$<integer>\"}," - + "\"lock-status\" : \"UNLOCKED\"}," - + "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Unable to aquire lock\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - 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 = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "AID", required = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam("ns") String ns) throws Exception{ - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockId); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) "); - 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); - } - return response.entity(returnMap).build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - /** - * - * @param lockName - * @throws Exception - */ - @Deprecated - @DELETE - @Path("/delete/{lockname}") - @ApiOperation( - hidden = true, - value = "-DEPRECATED- Delete Lock", response = Map.class, - notes = "-DEPRECATED- Delete the lock.") - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Error Message if any\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - 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 = false, hidden = true) @HeaderParam("aid") String aid, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Application namespace", - required = false, hidden = true) @HeaderParam("ns") String ns) throws Exception{ - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockName); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.UNKNOWNERROR ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) "); - try{ - MusicCore.destroyLockRef(lockName); - }catch (Exception e) { - logger.error(EELFLoggerDelegate.errorLogger, e); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build(); - } - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).toMap()).build(); - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } - - - /** - * Puts the requesting process in the q for this lock. The corresponding - * node will be created if it did not already exist - * - * @param lockName - * @return - * @throws Exception - */ - @POST - @Path("/promote/{lockname}") - @ApiOperation(value = "Attempt to promote the lock for a single row.", - response = Map.class) - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - @ApiResponses(value={ - @ApiResponse(code=200, message = "Success",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "\"status\" : \"SUCCESS\"}") - })), - @ApiResponse(code=400, message = "Failure",examples = @Example( value = { - @ExampleProperty(mediaType="application/json",value = - "{\"error\" : \"Unable to promote lock\"," - + "\"status\" : \"FAILURE\"}") - })) - }) - public Response promoteLock( - @ApiParam(value="Lock Id",required=true) @PathParam("lockId") String lockId, - @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion, - @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization) - throws Exception { - try { - ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion); - Map<String, Object> resultMap = MusicCore.validateLock(lockId); - if (resultMap.containsKey("Error")) { - logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR); - response.status(Status.BAD_REQUEST); - return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build(); - } - - String keyspaceName = (String) resultMap.get("keyspace"); - EELFLoggerDelegate.mdcPut("keyspace", "( " + keyspaceName + " ) "); - - try { - ReturnType lockStatus = MusicCore.promoteLock(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, e); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Unable to promote lock").toMap()).build(); - } - } finally { - EELFLoggerDelegate.mdcRemove("keyspace"); - } - } -} diff --git a/src/main/java/org/onap/music/rest/RestMusicQAPI.java b/src/main/java/org/onap/music/rest/RestMusicQAPI.java deleted file mode 100755 index 4def0e45..00000000 --- a/src/main/java/org/onap/music/rest/RestMusicQAPI.java +++ /dev/null @@ -1,441 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * =================================================================== - * Modifications Copyright (C) 2019 IBM. - * Modifications Copyright (c) 2019 Samsung - * =================================================================== - * Licensed 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. - * - * ============LICENSE_END============================================= - * ==================================================================== - */ - -package org.onap.music.rest; - -import java.util.Map; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -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.UriInfo; -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.JsonDelete; -import org.onap.music.datastore.jsonobjects.JsonInsert; -import org.onap.music.datastore.jsonobjects.JsonTable; -import org.onap.music.datastore.jsonobjects.JsonUpdate; -import org.onap.music.eelf.logging.EELFLoggerDelegate; - -import org.onap.music.eelf.logging.format.AppMessages; -import org.onap.music.eelf.logging.format.ErrorSeverity; -import org.onap.music.eelf.logging.format.ErrorTypes; -import org.apache.commons.lang3.StringUtils; -import org.onap.music.datastore.MusicDataStoreHandle; -import org.onap.music.datastore.PreparedQueryObject; -import com.datastax.driver.core.ResultSet; -import org.onap.music.exceptions.MusicQueryException; -import org.onap.music.exceptions.MusicServiceException; -import org.onap.music.main.MusicCore; -import org.onap.music.main.MusicUtil; -import org.onap.music.main.ResultType; -import org.onap.music.response.jsonobjects.JsonResponse; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; - -@Path("/v2/priorityq/") -@Api(value = "Q Api",hidden = true) -public class RestMusicQAPI { - - private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RestMusicQAPI.class); - - - /** - * - * @param tableObj - * @param keyspace - * @param tablename - * @throws Exception - */ - - @POST - @Path("/keyspaces/{keyspace}/{qname}") // qname same as tablename - @ApiOperation(value = "Create Q", response = String.class) - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public Response createQ( - @ApiParam(value = "Major Version", required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", required = false) @HeaderParam("X-minorVersion") String minorVersion, - @ApiParam(value = "Patch Version", required = false) @HeaderParam("X-patchVersion") String patchVersion, - @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", required = true) @HeaderParam("ns") String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonTable tableObj, - @ApiParam(value = "Key Space", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("qname") String tablename) throws Exception { - ResponseBuilder response = MusicUtil.buildVersionResponse(version, minorVersion, patchVersion); - - Map<String, String> fields = tableObj.getFields(); - if (fields == null) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ/Required table fields are empty or not set").toMap()) - .build(); - } - - String primaryKey = tableObj.getPrimaryKey(); - String partitionKey = tableObj.getPartitionKey(); - String clusteringKey = tableObj.getClusteringKey(); - String filteringKey = tableObj.getFilteringKey(); - String clusteringOrder = tableObj.getClusteringOrder(); - - if(primaryKey == null) { - primaryKey = tableObj.getFields().get("PRIMARY KEY"); - } - - if ((primaryKey == null) && (partitionKey == null)) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ: Partition key cannot be empty").toMap()) - .build(); - } - - if ((primaryKey == null) && (clusteringKey == null)) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ: Clustering key cannot be empty").toMap()) - .build(); - } - - if (clusteringOrder == null) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ: Clustering Order cannot be empty").toMap()) - .build(); - } - - if ((primaryKey!=null) && (partitionKey == null)) { - primaryKey = primaryKey.trim(); - int count1 = StringUtils.countMatches(primaryKey,')'); - int count2 = StringUtils.countMatches(primaryKey,'('); - if (count1 != count2) { - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ Error: primary key '(' and ')' do not match, primary key=" + primaryKey) - .toMap()).build(); - } - - if ( primaryKey.indexOf('(') == -1 || ( count2 == 1 && (primaryKey.lastIndexOf(')') +1) == primaryKey.length() ) ) { - if (primaryKey.contains(",") ) { - partitionKey= primaryKey.substring(0,primaryKey.indexOf(',')); - partitionKey=partitionKey.replaceAll("[\\(]+",""); - clusteringKey=primaryKey.substring(primaryKey.indexOf(',')+1); // make sure index - clusteringKey=clusteringKey.replaceAll("[)]+", ""); - } else { - partitionKey=primaryKey; - partitionKey=partitionKey.replaceAll("[\\)]+",""); - partitionKey=partitionKey.replaceAll("[\\(]+",""); - clusteringKey=""; - } - } else { - partitionKey= primaryKey.substring(0,primaryKey.indexOf(')')); - partitionKey=partitionKey.replaceAll("[\\(]+",""); - partitionKey = partitionKey.trim(); - clusteringKey= primaryKey.substring(primaryKey.indexOf(')')); - clusteringKey=clusteringKey.replaceAll("[\\(]+",""); - clusteringKey=clusteringKey.replaceAll("[\\)]+",""); - clusteringKey = clusteringKey.trim(); - if (clusteringKey.indexOf(',') == 0) clusteringKey=clusteringKey.substring(1); - clusteringKey = clusteringKey.trim(); - if (clusteringKey.equals(",") ) clusteringKey=""; // print error if needed ( ... ),) - } - } - - if (partitionKey.trim().isEmpty()) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ: Partition key cannot be empty").toMap()) - .build(); - } - - if (clusteringKey.trim().isEmpty()) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ: Clustering key cannot be empty").toMap()) - .build(); - } - - if((filteringKey != null) && (filteringKey.equalsIgnoreCase(partitionKey))) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("CreateQ: Filtering key cannot be same as Partition Key").toMap()) - .build(); - } - - return new RestMusicDataAPI().createTable(version, minorVersion, patchVersion, aid, ns, authorization, tableObj, keyspace, tablename); - } - - /** - * - * @param insObj - * @param keyspace - * @param tablename - * @throws Exception - */ - @POST - @Path("/keyspaces/{keyspace}/{qname}/rows") - @ApiOperation(value = "", response = Void.class) - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - // public Map<String, Object> insertIntoQ( - public Response insertIntoQ( - @ApiParam(value = "Major Version", required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", required = false) @HeaderParam("X-minorVersion") String minorVersion, - @ApiParam(value = "Patch Version", required = false) @HeaderParam("X-patchVersion") String patchVersion, - @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", required = true) @HeaderParam("ns") String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonInsert insObj, - @ApiParam(value = "Key Space", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("qname") String tablename) { - - ResponseBuilder response = MusicUtil.buildVersionResponse(version, minorVersion, patchVersion); - if (insObj.getValues().isEmpty()) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("Required HTTP Request body is missing.").toMap()).build(); - } - return new RestMusicDataAPI().insertIntoTable(version, minorVersion, patchVersion, aid, ns, - authorization, insObj, keyspace, tablename); - } - - /** - * - * @param updateObj - * @param keyspace - * @param tablename - * @param info - * @return - * @throws Exception - */ - @PUT - @Path("/keyspaces/{keyspace}/{qname}/rows") - @ApiOperation(value = "updateQ", response = String.class) - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public Response updateQ( - @ApiParam(value = "Major Version", required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", required = false) @HeaderParam("X-minorVersion") String minorVersion, - @ApiParam(value = "Patch Version", required = false) @HeaderParam("X-patchVersion") String patchVersion, - @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", required = true) @HeaderParam("ns") String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonUpdate updateObj, - @ApiParam(value = "Key Space", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("qname") String tablename, - @Context UriInfo info) throws MusicServiceException, MusicQueryException { - - ResponseBuilder response = MusicUtil.buildVersionResponse(version, minorVersion, patchVersion); - if (updateObj.getValues().isEmpty()) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE) - .setError("Required HTTP Request body is missing. JsonUpdate updateObj.getValues() is empty. ") - .toMap()) - .build(); - } - return new RestMusicDataAPI().updateTable(version, minorVersion, patchVersion, aid, ns, - authorization,updateObj, keyspace, tablename, info); - } - - /** - * - * @param delObj - * @param keyspace - * @param tablename - * @param info - * - * @return - * @throws Exception - */ - - @DELETE - @Path("/keyspaces/{keyspace}/{qname}/rows") - @ApiOperation(value = "deleteQ", response = String.class) - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public Response deleteFromQ( - @ApiParam(value = "Major Version", required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", required = false) @HeaderParam("X-minorVersion") String minorVersion, - @ApiParam(value = "Patch Version", required = false) @HeaderParam("X-patchVersion") String patchVersion, - @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", required = true) @HeaderParam("ns") String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - JsonDelete delObj, - @ApiParam(value = "Key Space", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("qname") String tablename, - @Context UriInfo info) throws MusicServiceException, MusicQueryException { - // added checking as per RestMusicDataAPI - ResponseBuilder response = MusicUtil.buildVersionResponse(version, minorVersion, patchVersion); - if (delObj == null) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGDATA, - ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR); - return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE) - .setError("deleteFromQ JsonDelete delObjis empty").toMap()).build(); - } - - return new RestMusicDataAPI().deleteFromTable(version, minorVersion, patchVersion, aid, ns, - authorization, delObj, keyspace, tablename, info); - } - - /** - * - * @param keyspace - * @param tablename - * @param info - * @return - * @throws Exception - */ - @GET - @Path("/keyspaces/{keyspace}/{qname}/peek") - @ApiOperation(value = "", response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - //public Map<String, HashMap<String, Object>> peek( - public Response peek( - @ApiParam(value = "Major Version", required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", required = false) @HeaderParam("X-minorVersion") String minorVersion, - @ApiParam(value = "Patch Version", required = false) @HeaderParam("X-patchVersion") String patchVersion, - @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", required = true) @HeaderParam("ns") String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Key Space", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("qname") String tablename, - @Context UriInfo info) { - int limit =1; //peek must return just the top row - // Map<String ,String> auth = new HashMap<>(); - // String userId =auth.get(MusicUtil.USERID); - // String password =auth.get(MusicUtil.PASSWORD); - ResponseBuilder response = MusicUtil.buildVersionResponse(version, minorVersion, patchVersion); - - PreparedQueryObject queryObject = new PreparedQueryObject(); - if (info.getQueryParameters() == null ) { //|| info.getQueryParameters().isEmpty()) - queryObject.appendQueryString( - "SELECT * FROM " + keyspace + "." + tablename + " LIMIT " + limit + ";"); - } else { - try { - queryObject = new RestMusicDataAPI().selectSpecificQuery(keyspace, tablename, info, limit); - } catch (MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.UNKNOWNERROR, - ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()) - .build(); - } - } - - try { - ResultSet results = MusicCore.get(queryObject); - return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS) - .setDataResult(MusicDataStoreHandle.marshallResults(results)).toMap()).build(); - } catch (MusicServiceException ex) { - logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.UNKNOWNERROR, - ErrorSeverity.ERROR, ErrorTypes.MUSICSERVICEERROR, ex); - return response.status(Status.BAD_REQUEST) - .entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()) - .build(); - } - } - - /** - * - * - * @param keyspace - * @param tablename - * @param info - * @return - * @throws Exception - */ - @GET - @Path("/keyspaces/{keyspace}/{qname}/filter") - @ApiOperation(value = "filter", response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - // public Map<String, HashMap<String, Object>> filter( - public Response filter( - @ApiParam(value = "Major Version", required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", required = false) @HeaderParam("X-minorVersion") String minorVersion, - @ApiParam(value = "Patch Version", required = false) @HeaderParam("X-patchVersion") String patchVersion, - @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", required = true) @HeaderParam("ns") String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Key Space", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("qname") String tablename, - @Context UriInfo info) throws Exception { - - return new RestMusicDataAPI().selectWithCritical(version, minorVersion, patchVersion, aid, ns, authorization,null, keyspace, tablename, info);// , limit) - - } - - /** - * - * @param tabObj - * @param keyspace - * @param tablename - * @throws Exception - */ - @DELETE - @ApiOperation(value = "DropQ", response = String.class) - @Path("/keyspaces/{keyspace}/{qname}") - @Produces(MediaType.APPLICATION_JSON) - public Response dropQ( - @ApiParam(value = "Major Version", required = true) @PathParam("version") String version, - @ApiParam(value = "Minor Version", - required = false) @HeaderParam("X-minorVersion") String minorVersion, - @ApiParam(value = "Patch Version", - required = false) @HeaderParam("X-patchVersion") String patchVersion, - @ApiParam(value = "AID", required = false) @HeaderParam("aid") String aid, - @ApiParam(value = "Application namespace", required = true) @HeaderParam("ns") String ns, - @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization, - @ApiParam(value = "Key Space", required = true) @PathParam("keyspace") String keyspace, - @ApiParam(value = "Table Name", required = true) @PathParam("qname") String tablename) throws Exception { - - return new RestMusicDataAPI().dropTable(version, minorVersion, patchVersion, aid, ns, authorization, keyspace, tablename); - - } -} diff --git a/src/main/java/org/onap/music/rest/RestMusicTestAPI.java b/src/main/java/org/onap/music/rest/RestMusicTestAPI.java deleted file mode 100644 index c1c04b09..00000000 --- a/src/main/java/org/onap/music/rest/RestMusicTestAPI.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * =================================================================== - * Licensed 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. - * - * ============LICENSE_END============================================= - * ==================================================================== - */ - -package org.onap.music.rest; - -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; - -import org.onap.music.eelf.logging.EELFLoggerDelegate; -import org.onap.music.main.MusicUtil; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; - - -@Path("/v{version: [0-9]+}/test") -@Api(value="Test Api") -public class RestMusicTestAPI { - - @SuppressWarnings("unused") - private EELFLoggerDelegate logger =EELFLoggerDelegate.getLogger(RestMusicTestAPI.class); - - /** - * Returns a test JSON. This will confirm that REST is working. - * @return - */ - @GET - @Path("/") - @ApiOperation(value = "Get Test", response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - public Map<String, HashMap<String, String>> simpleTests( - @Context HttpServletResponse response) { - response.addHeader("X-latestVersion",MusicUtil.getVersion()); - Map<String, HashMap<String, String>> testMap = new HashMap<>(); - for(int i=0; i < 3; i++){ - HashMap<String, String> innerMap = new HashMap<>(); - innerMap.put("Music Version",MusicUtil.getVersion()); - innerMap.put("Music Build",MusicUtil.getBuild()); - innerMap.put(i+1+"", i+2+""); - testMap.put(i+"", innerMap); - } - return testMap; - } -} diff --git a/src/main/java/org/onap/music/rest/RestMusicVersionAPI.java b/src/main/java/org/onap/music/rest/RestMusicVersionAPI.java deleted file mode 100644 index 8c86152e..00000000 --- a/src/main/java/org/onap/music/rest/RestMusicVersionAPI.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * - * Modifications Copyright (C) 2019 IBM. - * =================================================================== - * Licensed 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. - * - * ============LICENSE_END============================================= - * ==================================================================== - */ - -package org.onap.music.rest; - -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; - -import org.onap.music.response.jsonobjects.JsonResponse; -import org.onap.music.eelf.logging.EELFLoggerDelegate; -import org.onap.music.main.MusicUtil; -import org.onap.music.main.ResultType; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; - - -@Path("/v{version: [0-9]+}/version") -@Api(value="Version Api") -public class RestMusicVersionAPI { - - private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RestMusicVersionAPI.class); - private static final String MUSIC_KEY = "MUSIC:"; - /** - * Get the version of MUSIC. - * @return - */ - @GET - @ApiOperation(value = "Get Version", response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - public Map<String,Object> version(@Context HttpServletResponse response) { - logger.info("Replying to request for MUSIC version with MUSIC:" + MusicUtil.getVersion()); - response.addHeader("X-latestVersion",MusicUtil.getVersion()); - return new JsonResponse(ResultType.SUCCESS). - setMusicVersion(MUSIC_KEY + MusicUtil.getVersion()).toMap(); - } - - /** - * Get the version of MUSIC. - * @return - */ - @GET - @Path("/build") - @ApiOperation(value = "Get Version", response = Map.class) - @Produces(MediaType.APPLICATION_JSON) - public Map<String,Object> build(@Context HttpServletResponse response) { - logger.info("Replying to request for MUSIC build with MUSIC:" + MusicUtil.getBuild()); - response.addHeader("X-latestVersion",MusicUtil.getVersion()); - return new JsonResponse(ResultType.SUCCESS) - .setMusicBuild(MUSIC_KEY + MusicUtil.getBuild()) - .setMusicVersion(MUSIC_KEY + MusicUtil.getVersion()).toMap(); - } - - -}
\ No newline at end of file |