aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/music
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/music')
-rwxr-xr-xsrc/main/java/org/onap/music/JerseyConfig.java87
-rwxr-xr-xsrc/main/java/org/onap/music/MusicApplication.java203
-rw-r--r--src/main/java/org/onap/music/authentication/AuthUtil.java276
-rw-r--r--src/main/java/org/onap/music/authentication/AuthorizationError.java55
-rw-r--r--src/main/java/org/onap/music/authentication/CadiAuthFilter.java65
-rw-r--r--src/main/java/org/onap/music/authentication/MusicAuthorizationFilter.java122
-rw-r--r--src/main/java/org/onap/music/conductor/conditionals/JsonConditional.java90
-rw-r--r--src/main/java/org/onap/music/conductor/conditionals/MusicConditional.java379
-rw-r--r--src/main/java/org/onap/music/conductor/conditionals/RestMusicConditionalAPI.java205
-rw-r--r--src/main/java/org/onap/music/conductor/conditionals/UpdateDataObject.java119
-rw-r--r--src/main/java/org/onap/music/datastore/Condition.java53
-rwxr-xr-xsrc/main/java/org/onap/music/datastore/MusicDataStore.java523
-rw-r--r--src/main/java/org/onap/music/datastore/MusicDataStoreHandle.java124
-rw-r--r--src/main/java/org/onap/music/datastore/PreparedQueryObject.java176
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JSONObject.java37
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonDelete.java313
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonIndex.java120
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonInsert.java420
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonKeySpace.java163
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonLeasedLock.java44
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonLock.java49
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonSelect.java208
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonTable.java381
-rw-r--r--src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java416
-rw-r--r--src/main/java/org/onap/music/eelf/healthcheck/MusicHealthCheck.java130
-rw-r--r--src/main/java/org/onap/music/eelf/logging/EELFLoggerDelegate.java381
-rw-r--r--src/main/java/org/onap/music/eelf/logging/MusicContainerFilter.java68
-rw-r--r--src/main/java/org/onap/music/eelf/logging/MusicLoggingServletFilter.java207
-rw-r--r--src/main/java/org/onap/music/eelf/logging/format/AppMessages.java188
-rw-r--r--src/main/java/org/onap/music/eelf/logging/format/ErrorCodes.java107
-rw-r--r--src/main/java/org/onap/music/eelf/logging/format/ErrorSeverity.java38
-rw-r--r--src/main/java/org/onap/music/eelf/logging/format/ErrorTypes.java46
-rw-r--r--src/main/java/org/onap/music/exceptions/MusicAuthenticationException.java75
-rw-r--r--src/main/java/org/onap/music/exceptions/MusicDeadlockException.java75
-rw-r--r--src/main/java/org/onap/music/exceptions/MusicExceptionMapper.java56
-rw-r--r--src/main/java/org/onap/music/exceptions/MusicLockingException.java75
-rw-r--r--src/main/java/org/onap/music/exceptions/MusicPolicyVoilationException.java82
-rw-r--r--src/main/java/org/onap/music/exceptions/MusicQueryException.java90
-rw-r--r--src/main/java/org/onap/music/exceptions/MusicServiceException.java88
-rw-r--r--src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java604
-rw-r--r--src/main/java/org/onap/music/lockingservice/cassandra/LockType.java30
-rw-r--r--src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java141
-rw-r--r--src/main/java/org/onap/music/main/CipherUtil.java271
-rw-r--r--src/main/java/org/onap/music/main/DeadlockDetectionUtil.java148
-rw-r--r--src/main/java/org/onap/music/main/MusicCore.java260
-rwxr-xr-xsrc/main/java/org/onap/music/main/MusicUtil.java820
-rw-r--r--src/main/java/org/onap/music/main/PropertiesLoader.java295
-rw-r--r--src/main/java/org/onap/music/main/ResultType.java42
-rw-r--r--src/main/java/org/onap/music/main/ReturnType.java75
-rw-r--r--src/main/java/org/onap/music/response/jsonobjects/JsonResponse.java322
-rw-r--r--src/main/java/org/onap/music/rest/Application.java79
-rwxr-xr-xsrc/main/java/org/onap/music/rest/RestMusicDataAPI.java1052
-rw-r--r--src/main/java/org/onap/music/rest/RestMusicHealthCheckAPI.java124
-rw-r--r--src/main/java/org/onap/music/rest/RestMusicLocksAPI.java632
-rwxr-xr-xsrc/main/java/org/onap/music/rest/RestMusicQAPI.java441
-rw-r--r--src/main/java/org/onap/music/rest/RestMusicTestAPI.java70
-rw-r--r--src/main/java/org/onap/music/rest/RestMusicVersionAPI.java82
-rw-r--r--src/main/java/org/onap/music/service/MusicCoreService.java181
-rw-r--r--src/main/java/org/onap/music/service/impl/MusicCassaCore.java1149
59 files changed, 0 insertions, 13152 deletions
diff --git a/src/main/java/org/onap/music/JerseyConfig.java b/src/main/java/org/onap/music/JerseyConfig.java
deleted file mode 100755
index b64e7044..00000000
--- a/src/main/java/org/onap/music/JerseyConfig.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2019 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;
-
-import io.swagger.jaxrs.config.BeanConfig;
-import io.swagger.jaxrs.listing.ApiListingResource;
-import io.swagger.jaxrs.listing.SwaggerSerializers;
-
-import javax.annotation.PostConstruct;
-
-import org.glassfish.jersey.server.ResourceConfig;
-import org.onap.music.conductor.conditionals.RestMusicConditionalAPI;
-import org.onap.music.exceptions.MusicExceptionMapper;
-import org.onap.music.rest.RestMusicDataAPI;
-import org.onap.music.rest.RestMusicHealthCheckAPI;
-import org.onap.music.rest.RestMusicLocksAPI;
-import org.onap.music.rest.RestMusicQAPI;
-import org.onap.music.rest.RestMusicTestAPI;
-import org.onap.music.rest.RestMusicVersionAPI;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-@Component
-public class JerseyConfig extends ResourceConfig {
-
- @Value("${spring.jersey.application-path:/}")
- private String apiPath;
-
- public JerseyConfig() {
- this.registerEndpoints();
- register(MusicExceptionMapper.class);
- }
-
- @PostConstruct
- public void init() {
- this.configureSwagger();
- }
-
- private void registerEndpoints() {
- register(RestMusicDataAPI.class);
- register(RestMusicLocksAPI.class);
- register(RestMusicConditionalAPI.class);
- register(RestMusicQAPI.class);
- register(RestMusicTestAPI.class);
- register(RestMusicVersionAPI.class);
- register(RestMusicHealthCheckAPI.class);
-
- }
-
- private void configureSwagger() {
- // Available at localhost:port/swagger.json
- this.register(ApiListingResource.class);
- this.register(SwaggerSerializers.class);
-
- BeanConfig config = new BeanConfig();
- config.setConfigId("MUSIC");
- config.setTitle("MUSIC");
- config.setVersion("v2");
- config.setContact("Thomas Nelson");
- config.setSchemes(new String[] {"http", "https"});
- config.setBasePath("/MUSIC/rest");
- config.setResourcePackage("org.onap.music");
- config.setPrettyPrint(true);
- config.setScan(true);
- }
-
-}
diff --git a/src/main/java/org/onap/music/MusicApplication.java b/src/main/java/org/onap/music/MusicApplication.java
deleted file mode 100755
index 22c9e7bf..00000000
--- a/src/main/java/org/onap/music/MusicApplication.java
+++ /dev/null
@@ -1,203 +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;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.onap.aaf.cadi.PropAccess;
-import org.onap.music.authentication.CadiAuthFilter;
-import org.onap.music.authentication.MusicAuthorizationFilter;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.eelf.logging.MusicLoggingServletFilter;
-import org.onap.music.main.MusicUtil;
-import org.onap.music.main.PropertiesLoader;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.web.context.request.RequestContextListener;
-
-@SpringBootApplication(scanBasePackages = { "org.onap.music.rest"})
-@EnableAutoConfiguration(exclude = { CassandraDataAutoConfiguration.class })
-@ComponentScan(value = { "org.onap.music" })
-@EnableScheduling
-public class MusicApplication extends SpringBootServletInitializer {
-
- private static final String KEYSPACE_PATTERN = "/v2/keyspaces/*";
- private static final String LOCKS_PATTERN = "/v2/locks/*";
- private static final String Q_PATTERN = "/v2/priorityq/*";
-
- @Autowired
- private PropertiesLoader propertyLoader;
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicApplication.class);
-
-
- public static void main(String[] args) {
- new MusicApplication().configure(new SpringApplicationBuilder(MusicApplication.class)).run(args);
- }
-
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
-
- return application.sources(MusicApplication.class);
- }
-
- @Bean("loadProperties")
- public void loadProperties() {
- propertyLoader.loadProperties();
- }
-
-
- @Bean
- @DependsOn("loadProperties")
- public PropAccess propAccess() {
- if (MusicUtil.getIsCadi()) {
- return new PropAccess(new String[] {
- "cadi_prop_files=/opt/app/music/etc/cadi.properties" });
- } else {
- return null;
- }
- }
-
- @Bean(name = "cadiFilter")
- @DependsOn("loadProperties")
- public Filter cadiFilter() throws ServletException {
- propertyLoader.loadProperties();
- if (MusicUtil.getIsCadi()) {
- PropAccess propAccess = propAccess();
- return new CadiAuthFilter(propAccess);
- } else {
- return (ServletRequest request, ServletResponse response, FilterChain chain) -> {
- // do nothing for now.
- };
- }
- }
-
- /**
- * Added for capturing custom header values from client.
- *
- * order is set to 1 for this filter
- *
- * sp931a
- *
- * @return
- * @throws ServletException
- */
- @Bean(name="logFilter")
- @DependsOn("loadProperties")
- public FilterRegistrationBean<Filter> loggingFilterRegistration() throws ServletException {
- logger.info("loggingFilterRegistration called for log filter..");
- propertyLoader.loadProperties();
- FilterRegistrationBean<Filter> frb = new FilterRegistrationBean<>();
- frb.setFilter(new MusicLoggingServletFilter());
- frb.addUrlPatterns(
- KEYSPACE_PATTERN,
- LOCKS_PATTERN,
- Q_PATTERN
- );
- frb.setName("logFilter");
- frb.setOrder(1);
- return frb;
- }
-
- @Bean
- @DependsOn("loadProperties")
- public FilterRegistrationBean<Filter> cadiFilterRegistration() throws ServletException {
- logger.info("cadiFilterRegistration called for cadi filter..");
- FilterRegistrationBean<Filter> frb = new FilterRegistrationBean<>();
- frb.setFilter(cadiFilter());
- if (MusicUtil.getIsCadi()) {
- frb.addUrlPatterns(
- KEYSPACE_PATTERN,
- LOCKS_PATTERN,
- Q_PATTERN
- );
- } else {
- frb.addUrlPatterns("/v0/test");
- }
- frb.setName("cadiFilter");
- frb.setOrder(2);
- return frb;
- }
-
-
- /**
- * Added for Authorization using CADI
- *
- * sp931a
- *
- * @return
- * @throws ServletException
- */
- @Bean
- @DependsOn("loadProperties")
- public FilterRegistrationBean<Filter> cadiFilterRegistrationForAuth() throws ServletException {
- logger.info("cadiFilterRegistrationForAuth called for cadi auth filter..");
- FilterRegistrationBean<Filter> frb = new FilterRegistrationBean<>();
- frb.setFilter(cadiMusicAuthFilter());
-
- if (MusicUtil.getIsCadi()) {
- frb.addUrlPatterns(
- KEYSPACE_PATTERN,
- LOCKS_PATTERN,
- Q_PATTERN
- );
- } else {
- frb.addUrlPatterns("/v0/test");
- }
- frb.setName("cadiMusicAuthFilter");
- frb.setOrder(3);
- return frb;
- }
-
- @Bean(name = "cadiMusicAuthFilter")
- @DependsOn("loadProperties")
- public Filter cadiMusicAuthFilter() throws ServletException {
- propertyLoader.loadProperties();
- if (MusicUtil.getIsCadi()) {
- return new MusicAuthorizationFilter();
- } else {
- return (ServletRequest request, ServletResponse response, FilterChain chain) -> {
- // do nothing for now.
- };
- }
- }
-
- @Bean
- @ConditionalOnMissingBean(RequestContextListener.class)
- public RequestContextListener requestContextListener() {
- return new RequestContextListener();
- }
-}
diff --git a/src/main/java/org/onap/music/authentication/AuthUtil.java b/src/main/java/org/onap/music/authentication/AuthUtil.java
deleted file mode 100644
index ee3b77a4..00000000
--- a/src/main/java/org/onap/music/authentication/AuthUtil.java
+++ /dev/null
@@ -1,276 +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.authentication;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Hex;
-import org.onap.aaf.cadi.CadiWrap;
-import org.onap.aaf.cadi.Permission;
-import org.onap.aaf.cadi.aaf.AAFPermission;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.exceptions.MusicAuthenticationException;
-
-public class AuthUtil {
-
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AuthUtil.class);
-
- private AuthUtil() {
- throw new IllegalStateException("Utility class");
- }
-
- /**
- * Get the list of permissions from the Request object.
- *
- *
- * @param request servlet request object
- * @return returns list of AAFPermission of the requested MechId for all the
- * namespaces
- */
- public static List<AAFPermission> getAAFPermissions(ServletRequest request) {
- CadiWrap wrapReq = (CadiWrap) request;
-
- List<Permission> perms = wrapReq.getPermissions(wrapReq.getUserPrincipal());
- List<AAFPermission> aafPermsList = new ArrayList<>();
- for (Permission perm : perms) {
- AAFPermission aafPerm = (AAFPermission) perm;
- aafPermsList.add(aafPerm);
- }
- return aafPermsList;
- }
-
- /**
- * Here is a sample of a permission object in AAI. The key attribute will have
- * Type|Instance|Action.
- * AAFPermission:
- * NS: null
- * Type: org.onap.music.cadi.keyspace ( Permission Type )
- * Instance: tomtest ( Cassandra Keyspace )
- * Action: *|GET|ALL ( Access Level [*|ALL] for full access and [GET] for Read only)
- * Key: org.onap.music.cadi.keyspace|tomtest|*
- *
- * This method will filter all permissions whose key starts with the requested namespace.
- * The nsamespace here is the music namespace which is defined in music.property file.
- * i;e is the type contains in key is org.onap.music.cadi.keyspace and the namespace
- * value is org.onap.music.cadi.keyspace, it will add to list
- * otherwise reject.
- *
- * @param nameSpace
- * @param allPermissionsList
- * @return
- */
- private static List<AAFPermission> filterNameSpacesAAFPermissions(String nameSpace,
- List<AAFPermission> allPermissionsList) {
- List<AAFPermission> list = new ArrayList<>();
- for (Iterator<AAFPermission> iterator = allPermissionsList.iterator(); iterator.hasNext();) {
- AAFPermission aafPermission = iterator.next();
- if(aafPermission.getType().indexOf(nameSpace) == 0) {
- list.add(aafPermission);
- }
- }
- return list;
- }
-
- /**
- * Decode certian characters from url encoded to normal.
- *
- * @param str - String being decoded.
- * @return returns the decoded string.
- * @throws Exception throws excpetion
- */
- public static String decodeFunctionCode(String str) throws MusicAuthenticationException {
- final String DECODEVALUE_FORWARDSLASH = "2f";
- final String DECODEVALUE_HYPHEN = "2d";
- final String DECODEVALUE_ASTERISK = "2a";
- String decodedString = str;
- List<Pattern> decodingList = new ArrayList<>();
- decodingList.add(Pattern.compile(DECODEVALUE_FORWARDSLASH));
- decodingList.add(Pattern.compile(DECODEVALUE_HYPHEN));
- decodingList.add(Pattern.compile(DECODEVALUE_ASTERISK));
- for (Pattern xssInputPattern : decodingList) {
- try {
- decodedString = decodedString.replaceAll("%" + xssInputPattern,
- new String(Hex.decodeHex(xssInputPattern.toString().toCharArray())));
- } catch (DecoderException e) {
- logger.error(EELFLoggerDelegate.securityLogger,
- "AuthUtil Decode Failed! for instance: " + str);
- throw new MusicAuthenticationException("Decode failed", e);
- }
- }
-
- return decodedString;
- }
-
- /**
- *
- *
- * @param request servlet request object
- * @param nameSpace application namespace
- * @return boolean value if the access is allowed
- * @throws Exception throws exception
- */
- public static boolean isAccessAllowed(ServletRequest request, String nameSpace) throws MusicAuthenticationException {
-
- if (request==null) {
- throw new MusicAuthenticationException("Request cannot be null");
- }
-
- if (nameSpace==null || nameSpace.isEmpty()) {
- throw new MusicAuthenticationException("NameSpace not Declared!");
- }
-
- boolean isauthorized = false;
- List<AAFPermission> aafPermsList = getAAFPermissions(request);
- logger.info(EELFLoggerDelegate.securityLogger,
- "AAFPermission of the requested MechId for all the namespaces: " + aafPermsList);
- logger.debug(EELFLoggerDelegate.securityLogger, "Requested nameSpace: " + nameSpace);
-
- List<AAFPermission> aafPermsFinalList = filterNameSpacesAAFPermissions(nameSpace, aafPermsList);
-
- logger.debug(EELFLoggerDelegate.securityLogger,
- "AuthUtil list of AAFPermission for the specific namespace :::"
- + aafPermsFinalList);
-
- HttpServletRequest httpRequest = (HttpServletRequest) request;
- String requestUri = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length() + 1);
-
- logger.debug(EELFLoggerDelegate.securityLogger,
- "AuthUtil requestUri :::" + requestUri);
-
- for (Iterator<AAFPermission> iterator = aafPermsFinalList.iterator(); iterator.hasNext();) {
- AAFPermission aafPermission = iterator.next();
- if(!isauthorized) {
- isauthorized = isMatchPattern(aafPermission, requestUri, httpRequest.getMethod());
- }
- }
-
- logger.debug(EELFLoggerDelegate.securityLogger,
- "isAccessAllowed for the request uri: " + requestUri + "is :" + isauthorized);
- return isauthorized;
- }
-
- /**
- *
- * This method will check, if the requested URI matches any of the instance
- * found with the AAF permission list.
- * i;e if the request URI is; /v2/keyspaces/tomtest/tables/emp15 and in the
- * AAF permission table, we have an instance
- * defined as "tomtest" mapped the logged in user, it will allow else error.
- *
- * User trying to create or aquire a lock
- * Here is the requested URI /v2/locks/create/tomtest.MyTable.Field1
- * Here the keyspace name i;e tomtest will be test throught out the URL if it
- * matches, it will allow the user to create a lock.
- * "tomtest" here is the key, which is mapped as an instance in permission object.
- * Instance can be delimited with ":" i;e ":music-cassandra-1908-dev:admin". In this case,
- * each delimited
- * token will be matched with that of request URI.
- *
- * Example Permission:
- * org.onap.music.api.user.access|tomtest|* or ALL
- * org.onap.music.api.user.access|tomtest|GET
- * In case of the action field is ALL and *, user will be allowed else it will
- * be matched with the requested http method type.
- *
- *
- *
- * @param aafPermission - AAfpermission obtained by cadi.
- * @param requestUri - Rest URL client is calling.
- * @param method - REST Method being used (GET,POST,PUT,DELETE)
- * @return returns a boolean
- * @throws Exception - throws an exception
- */
- private static boolean isMatchPattern(
- AAFPermission aafPermission,
- String requestUri,
- String method) throws MusicAuthenticationException {
- if (null == aafPermission || null == requestUri || null == method) {
- return false;
- }
-
- String permKey = aafPermission.getKey();
-
- logger.debug(EELFLoggerDelegate.securityLogger, "isMatchPattern permKey: "
- + permKey + ", requestUri " + requestUri + " ," + method);
-
- String[] keyArray = permKey.split("\\|");
- String[] subPath = null;
- String instance = keyArray[1];
- String action = keyArray[2];
-
- //if the instance & action both are * , then allow
- if ("*".equalsIgnoreCase(instance) && "*".equalsIgnoreCase(action)) {
- return true;
- }
- //Decode string like %2f, %2d and %2a
- if (!"*".equals(instance)) {
- instance = decodeFunctionCode(instance);
- }
- if (!"*".equals(action)) {
- action = decodeFunctionCode(action);
- }
- //Instance: :music-cassandra-1908-dev:admin
- List<String> instanceList = Arrays.asList(instance.split(":"));
-
- String[] path = requestUri.split("/");
-
- for (int i = 0; i < path.length; i++) {
- // Sometimes the value will begin with "$", so we need to remove it
- if (path[i].startsWith("$")) {
- path[i] = path[i].replace("$","");
- }
- // Each path element can again delemited by ".";i;e
- // tomtest.tables.emp. We have scenarios like lock aquire URL
- subPath = path[i].split("\\.");
- for (int j = 0; j < subPath.length; j++) {
- if (instanceList.contains(subPath[j])) {
- return checkAction(method,action);
- } else {
- continue;
- }
- }
- }
- return false;
- }
-
- private static boolean checkAction(String method, String action) {
- if ("*".equals(action) || "ALL".equalsIgnoreCase(action)) {
- return true;
- } else {
- return (method.equalsIgnoreCase(action));
- }
- }
-
-
-
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/music/authentication/AuthorizationError.java b/src/main/java/org/onap/music/authentication/AuthorizationError.java
deleted file mode 100644
index 7015b550..00000000
--- a/src/main/java/org/onap/music/authentication/AuthorizationError.java
+++ /dev/null
@@ -1,55 +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.authentication;
-
-
-/**
- * Authorization error class used while setting error code and description back to client.
- *
- *
- * @author sp931a
- *
- */
-public class AuthorizationError {
-
- private int responseCode;
-
- private String responseMessage;
-
- public int getResponseCode() {
- return responseCode;
- }
-
- public void setResponseCode(int responseCode) {
- this.responseCode = responseCode;
- }
-
- public String getResponseMessage() {
- return responseMessage;
- }
-
- public void setResponseMessage(String responseMessage) {
- this.responseMessage = responseMessage;
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/music/authentication/CadiAuthFilter.java b/src/main/java/org/onap/music/authentication/CadiAuthFilter.java
deleted file mode 100644
index d043e6d6..00000000
--- a/src/main/java/org/onap/music/authentication/CadiAuthFilter.java
+++ /dev/null
@@ -1,65 +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.authentication;
-
-
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.annotation.WebFilter;
-
-import org.onap.aaf.cadi.PropAccess;
-import org.onap.aaf.cadi.filter.CadiFilter;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-
-@WebFilter(urlPatterns = { "/*" })
-public class CadiAuthFilter extends CadiFilter {
-
- private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CadiAuthFilter.class);
-
- public CadiAuthFilter(PropAccess access) throws ServletException {
- super(true, access);
- }
-
- public CadiAuthFilter() throws ServletException {
- super();
- }
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- super.init(filterConfig);
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- logger.info(EELFLoggerDelegate.securityLogger, "Request is entering cadifilter");
- long startTime = System.currentTimeMillis();
- request.setAttribute("startTime", startTime);
- super.doFilter(request, response, chain);
- }
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/music/authentication/MusicAuthorizationFilter.java b/src/main/java/org/onap/music/authentication/MusicAuthorizationFilter.java
deleted file mode 100644
index bde3e205..00000000
--- a/src/main/java/org/onap/music/authentication/MusicAuthorizationFilter.java
+++ /dev/null
@@ -1,122 +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.authentication;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.exceptions.MusicAuthenticationException;
-import org.onap.music.main.MusicUtil;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- * This filter class does authorization from AAF
- *
- * @author sp931a
- *
- */
-//@PropertySource(value = {"file:/opt/app/music/etc/music.properties"})
-public class MusicAuthorizationFilter implements Filter {
-
- private String musicNS = MusicUtil.getMusicAafNs();
-
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicAuthorizationFilter.class);
-
- public MusicAuthorizationFilter() throws ServletException {
- super();
- }
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- // Do Nothing
- }
-
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
- throws IOException, ServletException {
- HttpServletResponse httpResponse = null;
-
- boolean isAuthAllowed = false;
-
- if (null != servletRequest && null != servletResponse) {
- httpResponse = (HttpServletResponse) servletResponse;
- long startTime = 0;
- if( null != servletRequest.getAttribute("startTime")) {
- startTime = ((Long)servletRequest.getAttribute("startTime")).longValue();
- } else {
- startTime = System.currentTimeMillis(); // this will set only incase the request attribute not found
- }
-
- try {
- isAuthAllowed = AuthUtil.isAccessAllowed(servletRequest, musicNS);
- } catch (MusicAuthenticationException e) {
- logger.error(EELFLoggerDelegate.securityLogger,
- "Error while checking authorization Music Namespace: " + musicNS + " : " + e.getMessage(),e);
- } catch ( Exception e) {
- logger.error(EELFLoggerDelegate.securityLogger,
- "Error while checking authorization Music Namespace: " + musicNS + " : " + e.getMessage(),e);
- }
-
- long endTime = System.currentTimeMillis();
-
- //startTime set in <code>CadiAuthFilter</code> doFilter
- logger.debug(EELFLoggerDelegate.securityLogger,
- "Time took for authentication & authorization : "
- + (endTime - startTime) + " milliseconds");
-
- if (!isAuthAllowed) {
- logger.info(EELFLoggerDelegate.securityLogger,
- "Unauthorized Access");
- AuthorizationError authError = new AuthorizationError();
- authError.setResponseCode(HttpServletResponse.SC_UNAUTHORIZED);
- authError.setResponseMessage("Unauthorized Access - Please make sure you are "
- + "onboarded and have proper access to MUSIC. ");
-
- byte[] responseToSend = restResponseBytes(authError);
- httpResponse.setHeader("Content-Type", "application/json");
-
- httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
- servletResponse.getOutputStream().write(responseToSend);
- return;
- } else {
- filterChain.doFilter(servletRequest, servletResponse);
- }
- }
- }
-
- private byte[] restResponseBytes(AuthorizationError eErrorResponse) throws IOException {
- String serialized = new ObjectMapper().writeValueAsString(eErrorResponse);
- return serialized.getBytes();
- }
-}
-
diff --git a/src/main/java/org/onap/music/conductor/conditionals/JsonConditional.java b/src/main/java/org/onap/music/conductor/conditionals/JsonConditional.java
deleted file mode 100644
index 4efcabea..00000000
--- a/src/main/java/org/onap/music/conductor/conditionals/JsonConditional.java
+++ /dev/null
@@ -1,90 +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.conductor.conditionals;
-
-import java.io.Serializable;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-
-@ApiModel(value = "JsonConditional", description = "Json model for insert or update into table based on some conditions")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonConditional implements Serializable {
-
- private String primaryKey;
- private String primaryKeyValue;
- private String casscadeColumnName;
- private Map<String,Object> tableValues;
- private Map<String,Object> casscadeColumnData;
- private Map<String,Map<String,String>> conditions;
-
- public Map<String, Object> getTableValues() {
- return tableValues;
- }
- public void setTableValues(Map<String, Object> tableValues) {
- this.tableValues = tableValues;
- }
-
- public String getPrimaryKey() {
- return primaryKey;
- }
- public String getPrimaryKeyValue() {
- return primaryKeyValue;
- }
- public String getCasscadeColumnName() {
- return casscadeColumnName;
- }
-
- public Map<String, Object> getCasscadeColumnData() {
- return casscadeColumnData;
- }
-
-
-
- public void setPrimaryKey(String primaryKey) {
- this.primaryKey = primaryKey;
- }
- public void setPrimaryKeyValue(String primaryKeyValue) {
- this.primaryKeyValue = primaryKeyValue;
- }
- public Map<String, Map<String, String>> getConditions() {
- return conditions;
- }
- public void setConditions(Map<String, Map<String, String>> conditions) {
- this.conditions = conditions;
- }
- public void setCasscadeColumnName(String casscadeColumnName) {
- this.casscadeColumnName = casscadeColumnName;
- }
-
- public void setCasscadeColumnData(Map<String, Object> casscadeColumnData) {
- this.casscadeColumnData = casscadeColumnData;
- }
-
-
-
-
-
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/music/conductor/conditionals/MusicConditional.java b/src/main/java/org/onap/music/conductor/conditionals/MusicConditional.java
deleted file mode 100644
index 18fa8a18..00000000
--- a/src/main/java/org/onap/music/conductor/conditionals/MusicConditional.java
+++ /dev/null
@@ -1,379 +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.conductor.conditionals;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.codehaus.jettison.json.JSONObject;
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.rest.RestMusicDataAPI;
-
-import com.datastax.driver.core.ColumnDefinitions;
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.TableMetadata;
-
-public class MusicConditional {
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RestMusicDataAPI.class);
-
- public static ReturnType conditionalInsert(String keyspace, String tablename, String casscadeColumnName,
- Map<String, Object> casscadeColumnData, String primaryKey, Map<String, Object> valuesMap,
- Map<String, String> status) throws Exception {
-
- Map<String, PreparedQueryObject> queryBank = new HashMap<>();
- TableMetadata tableInfo = null;
- tableInfo = MusicDataStoreHandle.returnColumnMetadata(keyspace, tablename);
- DataType primaryIdType = tableInfo.getPrimaryKey().get(0).getType();
- String primaryId = tableInfo.getPrimaryKey().get(0).getName();
- DataType casscadeColumnType = tableInfo.getColumn(casscadeColumnName).getType();
- String vector = String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
-
- PreparedQueryObject select = new PreparedQueryObject();
- select.appendQueryString("SELECT * FROM " + keyspace + "." + tablename + " where " + primaryId + " = ?");
- select.addValue(MusicUtil.convertToActualDataType(primaryIdType, primaryKey));
- queryBank.put(MusicUtil.SELECT, select);
-
- PreparedQueryObject update = new PreparedQueryObject();
- //casscade column values
- Map<String, String> updateColumnvalues = getValues(true, casscadeColumnData, status);
- Object formatedValues = MusicUtil.convertToActualDataType(casscadeColumnType, updateColumnvalues);
- update.appendQueryString("UPDATE " + keyspace + "." + tablename + " SET " + casscadeColumnName + " ="
- + casscadeColumnName + " + ? , vector_ts = ?" + " WHERE " + primaryId + " = ? ");
- update.addValue(formatedValues);
- update.addValue(MusicUtil.convertToActualDataType(DataType.text(), vector));
- update.addValue(MusicUtil.convertToActualDataType(primaryIdType, primaryKey));
- queryBank.put(MusicUtil.UPDATE, update);
-
-
- //casscade column values
- Map<String, String> insertColumnvalues = getValues(false, casscadeColumnData, status);
- formatedValues = MusicUtil.convertToActualDataType(casscadeColumnType, insertColumnvalues);
- PreparedQueryObject insert = extractQuery(valuesMap, tableInfo, tablename, keyspace, primaryId, primaryKey,casscadeColumnName,formatedValues);
- queryBank.put(MusicUtil.INSERT, insert);
-
-
- String key = keyspace + "." + tablename + "." + primaryKey;
- String lockId;
- try {
- lockId = MusicCore.createLockReference(key);
- } catch (MusicLockingException e) {
- return new ReturnType(ResultType.FAILURE, e.getMessage());
- }
- long leasePeriod = MusicUtil.getDefaultLockLeasePeriod();
- ReturnType lockAcqResult = MusicCore.acquireLockWithLease(key, lockId, leasePeriod);
-
- try {
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- ReturnType criticalPutResult = conditionalInsertAtomic(lockId, keyspace, tablename, primaryKey,
- queryBank);
- MusicCore.destroyLockRef(lockId);
- if (criticalPutResult.getMessage().contains("insert"))
- criticalPutResult
- .setMessage("Insert values: ");
- else if (criticalPutResult.getMessage().contains("update"))
- criticalPutResult
- .setMessage("Update values: " + updateColumnvalues);
- return criticalPutResult;
-
- } else {
- MusicCore.destroyLockRef(lockId);
- return lockAcqResult;
- }
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- MusicCore.destroyLockRef(lockId);
- return new ReturnType(ResultType.FAILURE, e.getMessage());
- }
-
- }
-
- public static ReturnType conditionalInsertAtomic(String lockId, String keyspace, String tableName,
- String primaryKey, Map<String, PreparedQueryObject> queryBank) {
-
- ResultSet results = null;
-
- try {
- String fullyQualifiedKey = keyspace + "." + tableName + "." + primaryKey;
- ReturnType lockAcqResult = MusicCore.acquireLock(fullyQualifiedKey, lockId);
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- try {
- results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(queryBank.get(MusicUtil.SELECT));
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- return new ReturnType(ResultType.FAILURE, e.getMessage());
- }
- if (results.all().isEmpty()) {
- MusicDataStoreHandle.getDSHandle().executePut(queryBank.get(MusicUtil.INSERT), "critical");
- return new ReturnType(ResultType.SUCCESS, "insert");
- } else {
- MusicDataStoreHandle.getDSHandle().executePut(queryBank.get(MusicUtil.UPDATE), "critical");
- return new ReturnType(ResultType.SUCCESS, "update");
- }
- } else {
- return new ReturnType(ResultType.FAILURE,
- "Cannot perform operation since you are the not the lock holder");
- }
-
- } catch (Exception e) {
- StringWriter sw = new StringWriter();
- e.printStackTrace(new PrintWriter(sw));
- String exceptionAsString = sw.toString();
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- return new ReturnType(ResultType.FAILURE,
- "Exception thrown while doing the critical put, check sanctity of the row/conditions:\n"
- + exceptionAsString);
- }
-
- }
-
- public static ReturnType update(UpdateDataObject dataObj)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- String key = dataObj.getKeyspace() + "." + dataObj.getTableName() + "." + dataObj.getPrimaryKeyValue();
- String lockId = MusicCore.createLockReference(key);
- long leasePeriod = MusicUtil.getDefaultLockLeasePeriod();
- ReturnType lockAcqResult = MusicCore.acquireLockWithLease(key, lockId, leasePeriod);
-
- try {
-
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- ReturnType criticalPutResult = updateAtomic(new UpdateDataObject().setLockId(lockId)
- .setKeyspace(dataObj.getKeyspace())
- .setTableName( dataObj.getTableName())
- .setPrimaryKey(dataObj.getPrimaryKey())
- .setPrimaryKeyValue(dataObj.getPrimaryKeyValue())
- .setQueryBank(dataObj.getQueryBank())
- .setPlanId(dataObj.getPlanId())
- .setCascadeColumnValues(dataObj.getCascadeColumnValues())
- .setCascadeColumnName(dataObj.getCascadeColumnName()));
-
- MusicCore.destroyLockRef(lockId);
- return criticalPutResult;
- } else {
- MusicCore.destroyLockRef(lockId);
- return lockAcqResult;
- }
-
- } catch (Exception e) {
- MusicCore.destroyLockRef(lockId);
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- return new ReturnType(ResultType.FAILURE, e.getMessage());
-
- }
- }
-
- public static ReturnType updateAtomic(UpdateDataObject dataObj) {
- try {
- String fullyQualifiedKey = dataObj.getKeyspace() + "." + dataObj.getTableName() + "." + dataObj.getPrimaryKeyValue();
- ReturnType lockAcqResult = MusicCore.acquireLock(fullyQualifiedKey, dataObj.getLockId());
-
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- Row row = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(dataObj.getQueryBank().get(MusicUtil.SELECT)).one();
-
- if(row != null) {
- Map<String, String> updatedValues = cascadeColumnUpdateSpecific(row, dataObj.getCascadeColumnValues(), dataObj.getCascadeColumnName(), dataObj.getPlanId());
- JSONObject json = new JSONObject(updatedValues);
- PreparedQueryObject update = new PreparedQueryObject();
- String vector_ts = String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
- update.appendQueryString("UPDATE " + dataObj.getKeyspace() + "." + dataObj.getTableName() + " SET " + dataObj.getCascadeColumnName() + "['" + dataObj.getPlanId()
- + "'] = ?, vector_ts = ? WHERE " + dataObj.getPrimaryKey() + " = ?");
- update.addValue(MusicUtil.convertToActualDataType(DataType.text(), json.toString()));
- update.addValue(MusicUtil.convertToActualDataType(DataType.text(), vector_ts));
- update.addValue(MusicUtil.convertToActualDataType(DataType.text(), dataObj.getPrimaryKeyValue()));
- try {
- MusicDataStoreHandle.getDSHandle().executePut(update, "critical");
- } catch (Exception ex) {
- logger.error(EELFLoggerDelegate.applicationLogger, ex);
- return new ReturnType(ResultType.FAILURE, ex.getMessage());
- }
- }else {
- return new ReturnType(ResultType.FAILURE,"Cannot find data related to key: "+dataObj.getPrimaryKey());
- }
- MusicDataStoreHandle.getDSHandle().executePut(dataObj.getQueryBank().get(MusicUtil.UPSERT), "critical");
- return new ReturnType(ResultType.SUCCESS, "update success");
-
- } else {
- return new ReturnType(ResultType.FAILURE,
- "Cannot perform operation since you are the not the lock holder");
- }
-
- } catch (Exception e) {
- StringWriter sw = new StringWriter();
- e.printStackTrace(new PrintWriter(sw));
- String exceptionAsString = sw.toString();
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- return new ReturnType(ResultType.FAILURE,
- "Exception thrown while doing the critical put, check sanctity of the row/conditions:\n"
- + exceptionAsString);
- }
-
- }
-
- @SuppressWarnings("unchecked")
- public static Map<String, String> getValues(boolean isExists, Map<String, Object> casscadeColumnData,
- Map<String, String> status) {
-
- Map<String, String> returnMap = new HashMap<>();
- Object key = casscadeColumnData.get("key");
- String setStatus = "";
- Map<String, String> value = (Map<String, String>) casscadeColumnData.get("value");
-
- if (isExists)
- setStatus = status.get("exists");
- else
- setStatus = status.get("nonexists");
-
- value.put("status", setStatus);
- JSONObject valueJson = new JSONObject(value);
- returnMap.put(key.toString(), valueJson.toString());
- return returnMap;
-
- }
-
- public static PreparedQueryObject extractQuery(Map<String, Object> valuesMap, TableMetadata tableInfo, String tableName,
- String keySpaceName,String primaryKeyName,String primaryKey,String casscadeColumn,Object casscadeColumnValues) throws Exception {
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
- StringBuilder fieldsString = new StringBuilder("(vector_ts"+",");
- StringBuilder valueString = new StringBuilder("(" + "?" + ",");
- String vector = String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
- String localPrimaryKey;
- queryObject.addValue(vector);
- if(casscadeColumn!=null && casscadeColumnValues!=null) {
- fieldsString.append(casscadeColumn).append(" ,");
- valueString.append("?,");
- queryObject.addValue(casscadeColumnValues);
- }
-
- int counter = 0;
- for (Map.Entry<String, Object> entry : valuesMap.entrySet()) {
-
- fieldsString.append(entry.getKey());
- Object valueObj = entry.getValue();
- if (primaryKeyName.equals(entry.getKey())) {
- localPrimaryKey = entry.getValue() + "";
- localPrimaryKey = localPrimaryKey.replace("'", "''");
- }
- DataType colType = null;
- try {
- colType = tableInfo.getColumn(entry.getKey()).getType();
- } catch(NullPointerException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage() +" Invalid column name : "+entry.getKey(),
- AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR, ex);
- }
-
- Object formattedValue = null;
- try {
- formattedValue = MusicUtil.convertToActualDataType(colType, valueObj);
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), e);
- }
-
- valueString.append("?");
- queryObject.addValue(formattedValue);
-
-
- if (counter == valuesMap.size() - 1) {
- fieldsString.append(")");
- valueString.append(")");
- } else {
- fieldsString.append(",");
- valueString.append(",");
- }
- counter = counter + 1;
- }
- queryObject.appendQueryString("INSERT INTO " + keySpaceName + "." + tableName + " "
- + fieldsString + " VALUES " + valueString);
- return queryObject;
- }
-
- public static Object getColValue(Row row, String colName, DataType colType) {
- switch (colType.getName()) {
- case VARCHAR:
- return row.getString(colName);
- case UUID:
- return row.getUUID(colName);
- case VARINT:
- return row.getVarint(colName);
- case BIGINT:
- return row.getLong(colName);
- case INT:
- return row.getInt(colName);
- case FLOAT:
- return row.getFloat(colName);
- case DOUBLE:
- return row.getDouble(colName);
- case BOOLEAN:
- return row.getBool(colName);
- case MAP:
- return row.getMap(colName, String.class, String.class);
- default:
- return null;
- }
- }
-
- @SuppressWarnings("unchecked")
- public static Map<String, String> cascadeColumnUpdateSpecific(Row row, Map<String, String> changeOfStatus,
- String cascadeColumnName, String planId) {
-
- ColumnDefinitions colInfo = row.getColumnDefinitions();
- DataType colType = colInfo.getType(cascadeColumnName);
- Object columnValue = getColValue(row, cascadeColumnName, colType);
-
- Map<String, String> finalValues = new HashMap<>();
- Map<String, String> values = (Map<String, String>) columnValue;
- if (values != null && values.keySet().contains(planId)) {
- String valueString = values.get(planId);
- String tempValueString = valueString.replaceAll("\\{", "").replaceAll("\"", "").replaceAll("\\}", "");
- String[] elements = tempValueString.split(",");
- for (String str : elements) {
- String[] keyValue = str.split(":");
- if ((changeOfStatus.keySet().contains(keyValue[0].replaceAll("\\s", ""))))
- keyValue[1] = changeOfStatus.get(keyValue[0].replaceAll("\\s", ""));
- finalValues.put(keyValue[0], keyValue[1]);
- }
- }
- return finalValues;
-
- }
-
-}
diff --git a/src/main/java/org/onap/music/conductor/conditionals/RestMusicConditionalAPI.java b/src/main/java/org/onap/music/conductor/conditionals/RestMusicConditionalAPI.java
deleted file mode 100644
index 584a9e47..00000000
--- a/src/main/java/org/onap/music/conductor/conditionals/RestMusicConditionalAPI.java
+++ /dev/null
@@ -1,205 +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.conductor.conditionals;
-
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.ws.rs.Consumes;
-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.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.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.main.MusicUtil;
-import org.onap.music.main.ResultType;
-import org.onap.music.main.ReturnType;
-import org.onap.music.response.jsonobjects.JsonResponse;
-import org.onap.music.conductor.*;
-
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.TableMetadata;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiParam;
-
-@Path("/v2/conditional")
-@Api(value = "Conditional Api", hidden = true)
-public class RestMusicConditionalAPI {
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RestMusicConditionalAPI.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";
-
- @POST
- @Path("/insert/keyspaces/{keyspace}/tables/{tablename}")
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- public Response insertConditional(
- @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 = true)
- @HeaderParam("aid") String aid,
- @ApiParam(value = "Application namespace", required = true)
- @HeaderParam(NS) String ns,
- @ApiParam(value = "Authorization", required = true)
- @HeaderParam("Authorization") String authorization,
- @ApiParam(value = "Keyspace Name", required = true)
- @PathParam("keyspace") String keyspace,
- @ApiParam(value = "Table Name", required = true)
- @PathParam("tablename") String tablename,
- JsonConditional jsonObj) throws Exception {
- ResponseBuilder response =
- MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
- String primaryKey = jsonObj.getPrimaryKey();
- String primaryKeyValue = jsonObj.getPrimaryKeyValue();
- String casscadeColumnName = jsonObj.getCasscadeColumnName();
- Map<String, Object> tableValues = jsonObj.getTableValues();
- Map<String, Object> casscadeColumnData = jsonObj.getCasscadeColumnData();
- Map<String, Map<String, String>> conditions = jsonObj.getConditions();
-
- if (primaryKey == null || primaryKeyValue == null || casscadeColumnName == null
- || tableValues.isEmpty() || casscadeColumnData.isEmpty() || conditions.isEmpty()) {
- logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGINFO, ErrorSeverity.CRITICAL,
- ErrorTypes.AUTHENTICATIONERROR);
- return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE)
- .setError(String.valueOf("One or more input values missing")).toMap()).build();
- }
- Map<String, Object> authMap = null;
- Map<String, Object> valuesMap = new LinkedHashMap<>();
- for (Map.Entry<String, Object> entry : tableValues.entrySet()) {
- valuesMap.put(entry.getKey(), entry.getValue());
- }
-
- Map<String, String> status = new HashMap<>();
- status.put("exists", conditions.get("exists").get("status"));
- status.put("nonexists", conditions.get("nonexists").get("status"));
- ReturnType out = null;
-
- out = MusicConditional.conditionalInsert(keyspace, tablename,
- casscadeColumnName, casscadeColumnData,primaryKeyValue, valuesMap, status);
- return response.status(Status.OK).entity(new JsonResponse(
- out.getResult()).setMessage(out.getMessage()).toMap())
- .build();
-
- }
-
- @SuppressWarnings("unchecked")
- @PUT
- @Path("/update/keyspaces/{keyspace}/tables/{tablename}")
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- public Response updateConditional(
- @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 = true)
- @HeaderParam("aid") String aid,
- @ApiParam(value = "Application namespace", required = true)
- @HeaderParam(NS) String ns,
- @ApiParam(value = "Authorization", required = true)
- @HeaderParam("Authorization") String authorization,
- @ApiParam(value = "Major Version", required = true)
- @PathParam("keyspace") String keyspace,
- @ApiParam(value = "Major Version", required = true)
- @PathParam("tablename") String tablename,
- JsonConditional upObj) throws Exception {
- ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
-
- String primaryKey = upObj.getPrimaryKey();
- String primaryKeyValue = upObj.getPrimaryKeyValue();
- String casscadeColumnName = upObj.getCasscadeColumnName();
- Map<String, Object> casscadeColumnData = upObj.getCasscadeColumnData();
- Map<String, Object> tableValues = upObj.getTableValues();
-
- if (primaryKey == null || primaryKeyValue == null || casscadeColumnName == null
- || casscadeColumnData.isEmpty()) {
- logger.error(EELFLoggerDelegate.errorLogger, "", AppMessages.MISSINGINFO, ErrorSeverity.CRITICAL,
- ErrorTypes.AUTHENTICATIONERROR);
- return response.status(Status.UNAUTHORIZED).entity(new JsonResponse(ResultType.FAILURE)
- .setError(String.valueOf("One or more input values missing")).toMap()).build();
-
- }
-
- Map<String,String> casscadeColumnValueMap =
- (Map<String, String>) casscadeColumnData.get("value");
- TableMetadata tableInfo = null;
- tableInfo = MusicDataStoreHandle.returnColumnMetadata(keyspace, tablename);
- DataType primaryIdType = tableInfo.getPrimaryKey().get(0).getType();
- String primaryId = tableInfo.getPrimaryKey().get(0).getName();
-
- PreparedQueryObject select = new PreparedQueryObject();
- select.appendQueryString("SELECT * FROM " + keyspace + "."
- + tablename + " where " + primaryId + " = ?");
- select.addValue(MusicUtil.convertToActualDataType(primaryIdType, primaryKeyValue));
-
- PreparedQueryObject upsert =
- MusicConditional.extractQuery(tableValues, tableInfo, tablename,
- keyspace, primaryKey, primaryKeyValue, null, null);
- Map<String,PreparedQueryObject> queryBank = new HashMap<>();
- queryBank.put(MusicUtil.SELECT, select);
- queryBank.put(MusicUtil.UPSERT, upsert);
- String planId = casscadeColumnData.get("key").toString();
- ReturnType result = MusicConditional.update(new UpdateDataObject().setQueryBank(queryBank)
- .setKeyspace(keyspace)
- .setTableName(tablename)
- .setPrimaryKey(primaryKey)
- .setPrimaryKeyValue(primaryKeyValue)
- .setPlanId(planId)
- .setCascadeColumnName(casscadeColumnName)
- .setCascadeColumnValues(casscadeColumnValueMap));
- if (result.getResult() == ResultType.SUCCESS) {
- return response.status(Status.OK)
- .entity(new JsonResponse(result.getResult())
- .setMessage(result.getMessage()).toMap()).build();
- }
- return response.status(Status.BAD_REQUEST)
- .entity(new JsonResponse(result.getResult())
- .setMessage(result.getMessage()).toMap()).build();
-
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/music/conductor/conditionals/UpdateDataObject.java b/src/main/java/org/onap/music/conductor/conditionals/UpdateDataObject.java
deleted file mode 100644
index 1ea8994e..00000000
--- a/src/main/java/org/onap/music/conductor/conditionals/UpdateDataObject.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2019 Samsung Electronics Co., Ltd. All rights reserved.
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-package org.onap.music.conductor.conditionals;
-
-import java.util.Map;
-import org.onap.music.datastore.PreparedQueryObject;
-
-public class UpdateDataObject {
-
- Map<String, PreparedQueryObject> queryBank;
- String keyspace;
- String tableName;
- String primaryKey;
- String primaryKeyValue;
- String planId;
- String cascadeColumnName;
- Map<String, String> cascadeColumnValues;
- String lockId;
-
- public Map<String, PreparedQueryObject> getQueryBank() {
- return queryBank;
- }
-
- public UpdateDataObject setQueryBank(Map<String, PreparedQueryObject> queryBank) {
- this.queryBank = queryBank;
- return this;
- }
-
- public String getKeyspace() {
- return keyspace;
- }
-
- public UpdateDataObject setKeyspace(String keyspace) {
- this.keyspace = keyspace;
- return this;
- }
-
- public String getTableName() {
- return tableName;
- }
-
- public UpdateDataObject setTableName(String tableName) {
- this.tableName = tableName;
- return this;
- }
-
- public String getPrimaryKey() {
- return primaryKey;
- }
-
- public UpdateDataObject setPrimaryKey(String primaryKey) {
- this.primaryKey = primaryKey;
- return this;
- }
-
- public String getPrimaryKeyValue() {
- return primaryKeyValue;
- }
-
- public UpdateDataObject setPrimaryKeyValue(String primaryKeyValue) {
- this.primaryKeyValue = primaryKeyValue;
- return this;
- }
-
- public String getPlanId() {
- return planId;
- }
-
- public UpdateDataObject setPlanId(String planId) {
- this.planId = planId;
- return this;
- }
-
- public String getCascadeColumnName() {
- return cascadeColumnName;
- }
-
- public UpdateDataObject setCascadeColumnName(String cascadeColumnName) {
- this.cascadeColumnName = cascadeColumnName;
- return this;
- }
-
- public Map<String, String> getCascadeColumnValues() {
- return cascadeColumnValues;
- }
-
- public UpdateDataObject setLockId(String lockId) {
- this.lockId=lockId;
- return this;
- }
-
- public String getLockId() {
- return lockId;
- }
-
- public UpdateDataObject setCascadeColumnValues(Map<String, String> cascadeColumnValues) {
- this.cascadeColumnValues = cascadeColumnValues;
- return this;
- }
-
-
-}
diff --git a/src/main/java/org/onap/music/datastore/Condition.java b/src/main/java/org/onap/music/datastore/Condition.java
deleted file mode 100644
index 6587748e..00000000
--- a/src/main/java/org/onap/music/datastore/Condition.java
+++ /dev/null
@@ -1,53 +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.datastore;
-
-import java.util.Map;
-
-import org.onap.music.main.MusicCore;
-
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-
-public class Condition {
- private Map<String, Object> conditions;
- private PreparedQueryObject selectQueryForTheRow;
-
- public Condition(Map<String, Object> conditions, PreparedQueryObject selectQueryForTheRow) {
- this.conditions = conditions;
- this.selectQueryForTheRow = selectQueryForTheRow;
- }
-
- public boolean testCondition() throws Exception {
- // first generate the row
- ResultSet results = MusicCore.quorumGet(selectQueryForTheRow);
- Row row = null;
- if(results != null) {
- row = results.one();
- }
- if(row == null) {
- throw new Exception(" No data found to update");
- }
- return MusicDataStoreHandle.getDSHandle().doesRowSatisfyCondition(row, conditions);
- }
- } \ No newline at end of file
diff --git a/src/main/java/org/onap/music/datastore/MusicDataStore.java b/src/main/java/org/onap/music/datastore/MusicDataStore.java
deleted file mode 100755
index 5a658688..00000000
--- a/src/main/java/org/onap/music/datastore/MusicDataStore.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017 AT&T Intellectual Property
- * ===================================================================
- * Modifications Copyright (c) 2018-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.datastore;
-
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-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.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.lockingservice.cassandra.LockType;
-import org.onap.music.main.CipherUtil;
-import org.onap.music.main.MusicUtil;
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.ColumnDefinitions;
-import com.datastax.driver.core.ColumnDefinitions.Definition;
-import com.datastax.driver.core.ConsistencyLevel;
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.HostDistance;
-import com.datastax.driver.core.KeyspaceMetadata;
-import com.datastax.driver.core.Metadata;
-import com.datastax.driver.core.PoolingOptions;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.SimpleStatement;
-import com.datastax.driver.core.TableMetadata;
-import com.datastax.driver.core.TypeCodec;
-import com.datastax.driver.core.exceptions.AlreadyExistsException;
-import com.datastax.driver.core.exceptions.InvalidQueryException;
-import com.datastax.driver.core.exceptions.NoHostAvailableException;
-import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
-import com.datastax.driver.extras.codecs.enums.EnumOrdinalCodec;
-
-/**
- * @author nelson24
- *
- */
-public class MusicDataStore {
-
- public static final String CONSISTENCY_LEVEL_ONE = "ONE";
- public static final String CONSISTENCY_LEVEL_QUORUM = "QUORUM";
- private Session session;
- private Cluster cluster;
-
-
- /**
- * @param session
- */
- public void setSession(Session session) {
- this.session = session;
- }
-
- /**
- * @param session
- */
- public Session getSession() {
- return session;
- }
-
- /**
- * @param cluster
- */
- public void setCluster(Cluster cluster) {
- this.cluster = cluster;
- }
-
- public Cluster getCluster() {
- return this.cluster;
- }
-
-
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicDataStore.class);
-
- /**
- * Connect to default Cassandra address
- */
- public MusicDataStore() {
- try {
- connectToCassaCluster(MusicUtil.getMyCassaHost());
- } catch (MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), e);
- }
- }
-
-
- /**
- * @param cluster
- * @param session
- */
- public MusicDataStore(Cluster cluster, Session session) {
- this.session = session;
- this.cluster = cluster;
- }
-
- /**
- *
- * @param remoteIp
- * @throws MusicServiceException
- */
- public MusicDataStore(String remoteIp) {
- try {
- connectToCassaCluster(remoteIp);
- } catch (MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), e);
- }
- }
-
- /**
- *
- */
- public void close() {
- session.close();
- }
-
- /**
- * This method connects to cassandra cluster on specific address.
- *
- * @param address
- */
- private void connectToCassaCluster(String address) throws MusicServiceException {
- String[] addresses = null;
- addresses = address.split(",");
- PoolingOptions poolingOptions = new PoolingOptions();
- poolingOptions
- .setConnectionsPerHost(HostDistance.LOCAL, 4, 10)
- .setConnectionsPerHost(HostDistance.REMOTE, 2, 4);
-
- if(MusicUtil.getCassName() != null && MusicUtil.getCassPwd() != null) {
- String cassPwd = CipherUtil.decryptPKC(MusicUtil.getCassPwd());
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Building with credentials "+MusicUtil.getCassName()+" & "+ MusicUtil.getCassPwd());
- cluster = Cluster.builder().withPort(MusicUtil.getCassandraPort())
- .withCredentials(MusicUtil.getCassName(), cassPwd)
- //.withLoadBalancingPolicy(new RoundRobinPolicy())
- .withoutJMXReporting()
- .withPoolingOptions(poolingOptions)
- .addContactPoints(addresses).build();
- } else {
- cluster = Cluster.builder().withPort(MusicUtil.getCassandraPort())
- .withoutJMXReporting()
- .withPoolingOptions(poolingOptions)
- .addContactPoints(addresses)
- .build();
- }
-
-
- Metadata metadata = cluster.getMetadata();
- logger.info(EELFLoggerDelegate.applicationLogger, "Connected to cassa cluster "
- + metadata.getClusterName() + " at " + address);
-
- EnumNameCodec<LockType> lockTypeCodec = new EnumNameCodec<LockType>(LockType.class);
- cluster.getConfiguration().getCodecRegistry().register(lockTypeCodec);
-
- try {
- session = cluster.connect();
- } catch (Exception ex) {
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.CASSANDRACONNECTIVITY,
- ErrorSeverity.ERROR, ErrorTypes.SERVICEUNAVAILABLE, ex);
- throw new MusicServiceException(
- "Error while connecting to Cassandra cluster.. " + ex.getMessage());
- }
- }
-
- /**
- *
- * @param keyspace
- * @param tableName
- * @param columnName
- * @return DataType
- */
- public DataType returnColumnDataType(String keyspace, String tableName, String columnName) {
- KeyspaceMetadata ks = cluster.getMetadata().getKeyspace(keyspace);
- TableMetadata table = ks.getTable(tableName);
- return table.getColumn(columnName).getType();
-
- }
-
- /**
- *
- * @param keyspace
- * @param tableName
- * @return TableMetadata
- */
- public TableMetadata returnColumnMetadata(String keyspace, String tableName) {
- KeyspaceMetadata ks = cluster.getMetadata().getKeyspace(keyspace);
- return ks.getTable(tableName);
- }
-
- /**
- *
- * @param keyspace
- * @param tableName
- * @return TableMetadata
- */
- public KeyspaceMetadata returnKeyspaceMetadata(String keyspace) {
- return cluster.getMetadata().getKeyspace(keyspace);
- }
-
-
- /**
- * Utility function to return the Java specific object type.
- *
- * @param row
- * @param colName
- * @param colType
- * @return
- */
- public Object getColValue(Row row, String colName, DataType colType) {
-
- switch (colType.getName()) {
- case VARCHAR:
- return row.getString(colName);
- case UUID:
- return row.getUUID(colName);
- case VARINT:
- return row.getVarint(colName);
- case BIGINT:
- return row.getLong(colName);
- case INT:
- return row.getInt(colName);
- case FLOAT:
- return row.getFloat(colName);
- case DOUBLE:
- return row.getDouble(colName);
- case BOOLEAN:
- return row.getBool(colName);
- case MAP:
- return row.getMap(colName, String.class, String.class);
- case LIST:
- return row.getList(colName, String.class);
- default:
- return null;
- }
- }
-
- public byte[] getBlobValue(Row row, String colName, DataType colType) {
- ByteBuffer bb = row.getBytes(colName);
- return bb.array();
- }
-
- public boolean doesRowSatisfyCondition(Row row, Map<String, Object> condition) throws Exception {
- ColumnDefinitions colInfo = row.getColumnDefinitions();
-
- for (Map.Entry<String, Object> entry : condition.entrySet()) {
- String colName = entry.getKey();
- DataType colType = colInfo.getType(colName);
- Object columnValue = getColValue(row, colName, colType);
- Object conditionValue = MusicUtil.convertToActualDataType(colType, entry.getValue());
- if (columnValue.equals(conditionValue) == false)
- return false;
- }
- return true;
- }
-
- /**
- * Utility function to store ResultSet values in to a MAP for output.
- *
- * @param results
- * @return MAP
- */
- public Map<String, HashMap<String, Object>> marshalData(ResultSet results) {
- Map<String, HashMap<String, Object>> resultMap =
- new HashMap<>();
- int counter = 0;
- for (Row row : results) {
- ColumnDefinitions colInfo = row.getColumnDefinitions();
- HashMap<String, Object> resultOutput = new HashMap<>();
- for (Definition definition : colInfo) {
- if (!(("vector_ts").equals(definition.getName()))) {
- if(definition.getType().toString().toLowerCase().contains("blob")) {
- resultOutput.put(definition.getName(),
- getBlobValue(row, definition.getName(), definition.getType()));
- } else {
- resultOutput.put(definition.getName(),
- getColValue(row, definition.getName(), definition.getType()));
- }
- }
- }
- resultMap.put("row " + counter, resultOutput);
- counter++;
- }
- return resultMap;
- }
-
-
- // Prepared Statements 1802 additions
-
- public boolean executePut(PreparedQueryObject queryObject, String consistency)
- throws MusicServiceException, MusicQueryException {
- return executePut(queryObject, consistency, 0);
- }
- /**
- * This Method performs DDL and DML operations on Cassandra using specified consistency level
- *
- * @param queryObject Object containing cassandra prepared query and values.
- * @param consistency Specify consistency level for data synchronization across cassandra
- * replicas
- * @return Boolean Indicates operation success or failure
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public boolean executePut(PreparedQueryObject queryObject, String consistency,long timeSlot)
- throws MusicServiceException, MusicQueryException {
-
- boolean result = false;
- long timeOfWrite = System.currentTimeMillis();
- if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
- logger.error(EELFLoggerDelegate.errorLogger, queryObject.getQuery(),AppMessages.QUERYERROR, ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicQueryException("Ill formed queryObject for the request = " + "["
- + queryObject.getQuery() + "]");
- }
- logger.debug(EELFLoggerDelegate.applicationLogger,
- "In preprared Execute Put: the actual insert query:"
- + queryObject.getQuery() + "; the values"
- + queryObject.getValues());
- SimpleStatement preparedInsert = null;
-
- try {
- preparedInsert = new SimpleStatement(queryObject.getQuery(), queryObject.getValues().toArray());
- if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- logger.info(EELFLoggerDelegate.applicationLogger, "Executing critical put query");
- preparedInsert.setConsistencyLevel(ConsistencyLevel.QUORUM);
- } else if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL)) {
- logger.info(EELFLoggerDelegate.applicationLogger, "Executing simple put query");
- if(queryObject.getConsistency() == null)
- preparedInsert.setConsistencyLevel(ConsistencyLevel.ONE);
- else
- preparedInsert.setConsistencyLevel(MusicUtil.getConsistencyLevel(queryObject.getConsistency()));
- } else if (consistency.equalsIgnoreCase(MusicUtil.ONE)) {
- preparedInsert.setConsistencyLevel(ConsistencyLevel.ONE);
- } else if (consistency.equalsIgnoreCase(MusicUtil.QUORUM)) {
- preparedInsert.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
- } else if (consistency.equalsIgnoreCase(MusicUtil.ALL)) {
- preparedInsert.setConsistencyLevel(ConsistencyLevel.ALL);
- }
- long timestamp = MusicUtil.v2sTimeStampInMicroseconds(timeSlot, timeOfWrite);
- preparedInsert.setDefaultTimestamp(timestamp);
-
- ResultSet rs = session.execute(preparedInsert);
- result = rs.wasApplied();
-
- }
- catch (AlreadyExistsException ae) {
- // logger.error(EELFLoggerDelegate.errorLogger,"AlreadExistsException: " + ae.getMessage(),AppMessages.QUERYERROR,
- // ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicQueryException("AlreadyExistsException: " + ae.getMessage(),ae);
- } catch ( InvalidQueryException e ) {
- // logger.error(EELFLoggerDelegate.errorLogger,"InvalidQueryException: " + e.getMessage(),AppMessages.SESSIONFAILED + " ["
- // + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicQueryException("InvalidQueryException: " + e.getMessage(),e);
- } catch (Exception e) {
- // logger.error(EELFLoggerDelegate.errorLogger,e.getClass().toString() + ":" + e.getMessage(),AppMessages.SESSIONFAILED + " ["
- // + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR, e);
- throw new MusicServiceException("Executing Session Failure for Request = " + "["
- + queryObject.getQuery() + "]" + " Reason = " + e.getMessage(),e);
- }
- return result;
- }
-
- /* *//**
- * This method performs DDL operations on Cassandra using consistency level ONE.
- *
- * @param queryObject Object containing cassandra prepared query and values.
- * @return ResultSet
- * @throws MusicServiceException
- * @throws MusicQueryException
- *//*
- public ResultSet executeEventualGet(PreparedQueryObject queryObject)
- throws MusicServiceException, MusicQueryException {
- CacheAccess<String, PreparedStatement> queryBank = CachingUtil.getStatementBank();
- PreparedStatement preparedEventualGet = null;
- if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
- logger.error(EELFLoggerDelegate.errorLogger, "",AppMessages.QUERYERROR+ " [" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicQueryException("Ill formed queryObject for the request = " + "["
- + queryObject.getQuery() + "]");
- }
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Executing Eventual get query:" + queryObject.getQuery());
-
- ResultSet results = null;
- try {
- if(queryBank.get(queryObject.getQuery()) != null )
- preparedEventualGet=queryBank.get(queryObject.getQuery());
- else {
- preparedEventualGet = session.prepare(queryObject.getQuery());
- CachingUtil.updateStatementBank(queryObject.getQuery(), preparedEventualGet);
- }
- if(queryObject.getConsistency() == null) {
- preparedEventualGet.setConsistencyLevel(ConsistencyLevel.ONE);
- } else {
- preparedEventualGet.setConsistencyLevel(MusicUtil.getConsistencyLevel(queryObject.getConsistency()));
- }
- results = session.execute(preparedEventualGet.bind(queryObject.getValues().toArray()));
-
- } catch (Exception ex) {
- logger.error("Exception", ex);
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.UNKNOWNERROR+ "[" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicServiceException(ex.getMessage());
- }
- return results;
- }
-
- *//**
- *
- * This method performs DDL operation on Cassandra using consistency level QUORUM.
- *
- * @param queryObject Object containing cassandra prepared query and values.
- * @return ResultSet
- * @throws MusicServiceException
- * @throws MusicQueryException
- *//*
- public ResultSet executeCriticalGet(PreparedQueryObject queryObject)
- throws MusicServiceException, MusicQueryException {
- if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
- logger.error(EELFLoggerDelegate.errorLogger, "",AppMessages.QUERYERROR+ " [" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicQueryException("Error processing Prepared Query Object for the request = " + "["
- + queryObject.getQuery() + "]");
- }
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Executing Critical get query:" + queryObject.getQuery());
- PreparedStatement preparedEventualGet = session.prepare(queryObject.getQuery());
- preparedEventualGet.setConsistencyLevel(ConsistencyLevel.QUORUM);
- ResultSet results = null;
- try {
- results = session.execute(preparedEventualGet.bind(queryObject.getValues().toArray()));
- } catch (Exception ex) {
- logger.error("Exception", ex);
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.UNKNOWNERROR+ "[" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicServiceException(ex.getMessage());
- }
- return results;
-
- }
- */
- public ResultSet executeGet(PreparedQueryObject queryObject,String consistencyLevel) throws MusicQueryException, MusicServiceException {
- if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
- logger.error(EELFLoggerDelegate.errorLogger, "",AppMessages.QUERYERROR+ " [" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
- throw new MusicQueryException("Error processing Prepared Query Object for the request = " + "["
- + queryObject.getQuery() + "]");
- }
- ResultSet results = null;
- try {
- SimpleStatement statement = new SimpleStatement(queryObject.getQuery(), queryObject.getValues().toArray());
-
- if (consistencyLevel.equalsIgnoreCase(CONSISTENCY_LEVEL_ONE)) {
- if(queryObject.getConsistency() == null) {
- statement.setConsistencyLevel(ConsistencyLevel.ONE);
- } else {
- statement.setConsistencyLevel(MusicUtil.getConsistencyLevel(queryObject.getConsistency()));
- }
- }
- else if (consistencyLevel.equalsIgnoreCase(CONSISTENCY_LEVEL_QUORUM)) {
- statement.setConsistencyLevel(ConsistencyLevel.QUORUM);
- }
-
- results = session.execute(statement);
-
- } catch (Exception ex) {
- logger.error(EELFLoggerDelegate.errorLogger, "Execute Get Error" + ex.getMessage(),AppMessages.UNKNOWNERROR+ "[" + queryObject
- .getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR, ex);
- throw new MusicServiceException("Execute Get Error" + ex.getMessage());
- }
-
- return results;
-
- }
-
- /**
- * This method performs DDL operations on Cassandra using consistency level ONE.
- *
- * @param queryObject Object containing cassandra prepared query and values.
- */
- public ResultSet executeOneConsistencyGet(PreparedQueryObject queryObject)
- throws MusicServiceException, MusicQueryException {
- return executeGet(queryObject, CONSISTENCY_LEVEL_ONE);
- }
-
- /**
- *
- * This method performs DDL operation on Cassandra using consistency level QUORUM.
- *
- * @param queryObject Object containing cassandra prepared query and values.
- */
- public ResultSet executeQuorumConsistencyGet(PreparedQueryObject queryObject)
- throws MusicServiceException, MusicQueryException {
- return executeGet(queryObject, CONSISTENCY_LEVEL_QUORUM);
- }
-
-}
diff --git a/src/main/java/org/onap/music/datastore/MusicDataStoreHandle.java b/src/main/java/org/onap/music/datastore/MusicDataStoreHandle.java
deleted file mode 100644
index 92457d07..00000000
--- a/src/main/java/org/onap/music/datastore/MusicDataStoreHandle.java
+++ /dev/null
@@ -1,124 +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.datastore;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.MusicUtil;
-
-import com.datastax.driver.core.KeyspaceMetadata;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.TableMetadata;
-
-public class MusicDataStoreHandle {
-
- private static MusicDataStore mDstoreHandle = null;
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicDataStoreHandle.class);
-
- private MusicDataStoreHandle(){
- throw new IllegalStateException("Utility class");
- }
-
- /**
- *
- * @param remoteIp
- * @return
- */
- public static MusicDataStore getDSHandle(String remoteIp) {
- logger.info(EELFLoggerDelegate.metricsLogger,"Acquiring data store handle");
- long start = System.currentTimeMillis();
- if (mDstoreHandle == null) {
- mDstoreHandle = new MusicDataStore(remoteIp);
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.metricsLogger,"Time taken to acquire data store handle:" + (end - start) + " ms");
- return mDstoreHandle;
- }
-
- /**
- *
- * @return
- * @throws MusicServiceException
- */
- public static MusicDataStore getDSHandle() throws MusicServiceException {
- logger.info(EELFLoggerDelegate.metricsLogger,"Acquiring data store handle");
- long start = System.currentTimeMillis();
- if (mDstoreHandle == null) {
- // Quick Fix - Best to put this into every call to getDSHandle?
- if (!"localhost".equals(MusicUtil.getMyCassaHost())) {
- mDstoreHandle = new MusicDataStore(MusicUtil.getMyCassaHost());
- } else {
- mDstoreHandle = new MusicDataStore();
- }
- }
- if(mDstoreHandle.getSession() == null) {
- String message = "Connection to Cassandra has not been enstablished."
- + " Please check connection properites and reboot.";
- logger.info(EELFLoggerDelegate.applicationLogger, message);
- throw new MusicServiceException(message);
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.metricsLogger,"Time taken to acquire data store handle:" + (end - start) + " ms");
- return mDstoreHandle;
- }
-
-
- /**
- *
- * @param keyspace
- * @param tablename
- * @return
- * @throws MusicServiceException
- */
- public static TableMetadata returnColumnMetadata(String keyspace, String tablename) throws MusicServiceException {
- return getDSHandle().returnColumnMetadata(keyspace, tablename);
- }
-
- /**
- *
- * @param keyspace
- * @param tablename
- * @return
- * @throws MusicServiceException
- */
- public static KeyspaceMetadata returnkeyspaceMetadata(String keyspace) throws MusicServiceException {
- return getDSHandle().returnKeyspaceMetadata(keyspace);
- }
-
- /**
- *
- * @param results
- * @return
- * @throws MusicServiceException
- */
- public static Map<String, HashMap<String, Object>> marshallResults(ResultSet results) throws MusicServiceException {
- return getDSHandle().marshalData(results);
- }
-
-}
diff --git a/src/main/java/org/onap/music/datastore/PreparedQueryObject.java b/src/main/java/org/onap/music/datastore/PreparedQueryObject.java
deleted file mode 100644
index fdac50be..00000000
--- a/src/main/java/org/onap/music/datastore/PreparedQueryObject.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017-2019 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.datastore;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *
- * @author srupane
- *
- */
-public class PreparedQueryObject {
-
-
- private List<Object> values;
- private StringBuilder query;
- private String consistency;
- private String keyspaceName;
- private String tableName;
- private String operation;
- private String primaryKeyValue;
-
-
- /**
- * Create PreparedQueryObject
- */
- public PreparedQueryObject() {
- this.values = new ArrayList<>();
- this.query = new StringBuilder();
- }
-
- /**
- * Create PreparedQueryObject
- * @param query query portion of the prepared query
- */
- public PreparedQueryObject(String query) {
- this.values = new ArrayList<>();
- this.query = new StringBuilder(query);
- }
-
- /**
- * Create PreparedQueryObject
- * @param query query portion of the prepared query
- * @param values to be added to the query string as prepared query
- */
- public PreparedQueryObject(String query, Object...values) {
- this.query = new StringBuilder(query);
- this.values = new ArrayList<>();
- for (Object value: values) {
- this.values.add(value);
- }
- }
-
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public void setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- }
-
- public String getTableName() {
- return tableName;
- }
-
- public void setTableName(String tableName) {
- this.tableName = tableName;
- }
-
- public String getOperation() {
- if (operation!=null) return operation;
- if (query.length()==0) return null;
- String queryStr = query.toString().toLowerCase();
- String firstOp = null;
- int firstOpChar = query.length();
- if (queryStr.indexOf("insert")>-1 && queryStr.indexOf("insert")<firstOpChar) {
- firstOp = "insert";
- firstOpChar = queryStr.indexOf("insert");
- }
- if (queryStr.indexOf("update")>-1 && queryStr.indexOf("update")<firstOpChar) {
- firstOp = "update";
- firstOpChar = queryStr.indexOf("update");
- }
- if (queryStr.indexOf("delete")>-1 && queryStr.indexOf("delete")<firstOpChar) {
- firstOp = "delete";
- firstOpChar = queryStr.indexOf("delete");
- }
- if (queryStr.indexOf("select")>-1 && queryStr.indexOf("select")<firstOpChar) {
- firstOp = "select";
- firstOpChar = queryStr.indexOf("select");
- }
- return firstOp;
- }
-
- public void setOperation(String operation) {
- this.operation = operation;
- }
-
- public String getPrimaryKeyValue() {
- return primaryKeyValue;
- }
-
- public void setPrimaryKeyValue(String primaryKeyValue) {
- this.primaryKeyValue = primaryKeyValue;
- }
-
- public String getConsistency() {
- return consistency;
- }
-
- public void setConsistency(String consistency) {
- this.consistency = consistency;
- }
-
- /**
- * @return values to be set as part of the prepared query
- */
- public List<Object> getValues() {
- return values;
- }
-
- /**
- * @param o object to be added as a value to the prepared query, in order
- */
- public void addValue(Object o) {
- this.values.add(o);
- }
-
- /**
- * Add values to the preparedQuery
- * @param objs ordered list of objects to be added as values to the prepared query
- */
- public void addValues(Object... objs) {
- for (Object obj: objs) {
- this.values.add(obj);
- }
- }
-
- /**
- * @param s
- */
- public void appendQueryString(String s) {
- this.query.append(s);
- }
- public void replaceQueryString(String s) {
- this.query.replace(0, query.length(), s);
- }
-
- /**
- * @return the query
- */
- public String getQuery() {
- return this.query.toString();
- }
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JSONObject.java b/src/main/java/org/onap/music/datastore/jsonobjects/JSONObject.java
deleted file mode 100644
index a1524cc6..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JSONObject.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.onap.music.datastore.jsonobjects;
-/*
- * ============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=============================================
- * ====================================================================
- */
-
-
-public class JSONObject {
-
- private String data;
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JsonDelete.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonDelete.java
deleted file mode 100644
index 988ba3a8..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonDelete.java
+++ /dev/null
@@ -1,313 +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.datastore.jsonobjects;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response.Status;
-
-import org.onap.music.datastore.Condition;
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.MusicUtil;
-
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.TableMetadata;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "JsonTable", description = "Json model for delete")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonDelete {
-
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JsonDelete.class);
-
- private List<String> columns = null;
- private Map<String, String> consistencyInfo;
- private Map<String, Object> conditions;
- private String ttl;
- private String timestamp;
- private String keyspaceName;
- private String tableName;
- private StringBuilder rowIdString;
- private String primarKeyValue;
-
-
- @ApiModelProperty(value = "Conditions")
- public Map<String, Object> getConditions() {
- return conditions;
- }
-
- public void setConditions(Map<String, Object> conditions) {
- this.conditions = conditions;
- }
-
- @ApiModelProperty(value = "Consistency level", allowableValues = "eventual,critical,atomic")
- public Map<String, String> getConsistencyInfo() {
- return consistencyInfo;
- }
-
- public void setConsistencyInfo(Map<String, String> consistencyInfo) {
- this.consistencyInfo = consistencyInfo;
- }
-
- @ApiModelProperty(value = "Column values")
- public List<String> getColumns() {
- return columns;
- }
-
- public void setColumns(List<String> columns) {
- this.columns = columns;
- }
-
-
- @ApiModelProperty(value = "Time to live information")
- public String getTtl() {
- return ttl;
- }
-
- public void setTtl(String ttl) {
- this.ttl = ttl;
- }
-
- @ApiModelProperty(value = "Time stamp")
- public String getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(String timestamp) {
- this.timestamp = timestamp;
- }
-
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public void setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- }
-
- public String getTableName() {
- return tableName;
- }
-
- public void setTableName(String tableName) {
- this.tableName = tableName;
- }
-
- public StringBuilder getRowIdString() {
- return rowIdString;
- }
-
- public void setRowIdString(StringBuilder rowIdString) {
- this.rowIdString = rowIdString;
- }
-
- public String getPrimarKeyValue() {
- return primarKeyValue;
- }
-
- public void setPrimarKeyValue(String primarKeyValue) {
- this.primarKeyValue = primarKeyValue;
- }
-
-
- public PreparedQueryObject genDeletePreparedQueryObj(MultivaluedMap<String, String> rowParams) throws MusicQueryException {
- if (logger.isDebugEnabled()) {
- logger.debug("Coming inside genUpdatePreparedQueryObj method " + this.getKeyspaceName());
- logger.debug("Coming inside genUpdatePreparedQueryObj method " + this.getTableName());
- }
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- if((this.getKeyspaceName() == null || this.getKeyspaceName().isEmpty())
- || (this.getTableName() == null || this.getTableName().isEmpty())){
-
-
- throw new MusicQueryException("one or more path parameters are not set, please check and try again",
- Status.BAD_REQUEST.getStatusCode());
- }
-
- EELFLoggerDelegate.mdcPut("keyspace", "( "+this.getKeyspaceName()+" ) ");
-
- if(this == null) {
- logger.error(EELFLoggerDelegate.errorLogger,"Required HTTP Request body is missing.", AppMessages.MISSINGDATA ,ErrorSeverity.WARN, ErrorTypes.DATAERROR);
-
- throw new MusicQueryException("Required HTTP Request body is missing.",
- Status.BAD_REQUEST.getStatusCode());
- }
- StringBuilder columnString = new StringBuilder();
-
- int counter = 0;
- List<String> columnList = this.getColumns();
- if (columnList != null) {
- for (String column : columnList) {
- columnString.append(column);
- if (counter != columnList.size() - 1)
- columnString.append(",");
- counter = counter + 1;
- }
- }
-
- // get the row specifier
- RowIdentifier rowId = null;
- try {
- rowId = getRowIdentifier(this.getKeyspaceName(), this.getTableName(), rowParams, queryObject);
- this.setRowIdString(rowId.rowIdString);
- this.setPrimarKeyValue(rowId.primarKeyValue);
- if(rowId == null || rowId.primarKeyValue.isEmpty()) {
-
- throw new MusicQueryException("Mandatory WHERE clause is missing. Please check the input request.",
- Status.BAD_REQUEST.getStatusCode());
- }
- } catch (MusicServiceException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes
- .GENERALSERVICEERROR, ex);
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build();*/
- throw new MusicQueryException(AppMessages.UNKNOWNERROR.toString(), Status.BAD_REQUEST.getStatusCode());
- }
- String rowSpec = rowId.rowIdString.toString();
-
- if ((columnList != null) && (!rowSpec.isEmpty())) {
- queryObject.appendQueryString("DELETE " + columnString + " FROM " + this.getKeyspaceName() + "."
- + this.getTableName() + " WHERE " + rowSpec + ";");
- }
-
- if ((columnList == null) && (!rowSpec.isEmpty())) {
- queryObject.appendQueryString("DELETE FROM " + this.getKeyspaceName() + "." + this.getTableName() + " WHERE "
- + rowSpec + ";");
- }
-
- if ((columnList != null) && (rowSpec.isEmpty())) {
- queryObject.appendQueryString(
- "DELETE " + columnString + " FROM " + this.getKeyspaceName() + "." + rowSpec + ";");
- }
- // get the conditional, if any
- Condition conditionInfo;
- if (this.getConditions() == null) {
- conditionInfo = null;
- } else {
- // to avoid parsing repeatedly, just send the select query to
- // obtain row
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- selectQuery.appendQueryString("SELECT * FROM " + this.getKeyspaceName() + "." + this.getTableName() + " WHERE "
- + rowId.rowIdString + ";");
- selectQuery.addValue(rowId.primarKeyValue);
- conditionInfo = new Condition(this.getConditions(), selectQuery);
- }
-
- String consistency = this.getConsistencyInfo().get("type");
-
-
- if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL) && this.getConsistencyInfo().get("consistency")!=null) {
- if(MusicUtil.isValidConsistency(this.getConsistencyInfo().get("consistency"))) {
- queryObject.setConsistency(this.getConsistencyInfo().get("consistency"));
- } else {
- throw new MusicQueryException("Invalid Consistency type", Status.BAD_REQUEST.getStatusCode());
- }
- }
-
- queryObject.setOperation("delete");
-
- 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);
- }
-
- private class RowIdentifier {
- private String primarKeyValue;
- private 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;
- }
- }
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JsonIndex.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonIndex.java
deleted file mode 100644
index a06e8ea9..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonIndex.java
+++ /dev/null
@@ -1,120 +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.datastore.jsonobjects;
-
-import org.onap.music.datastore.PreparedQueryObject;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@JsonIgnoreProperties(ignoreUnknown = true)
-@ApiModel(value = "JsonIndex", description = "Index Object")
-public class JsonIndex {
-
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JsonIndex.class);
-
- private String indexName;
- private String keyspaceName;
- private String tableName;
- private String fieldName;
-
- public JsonIndex(String indexName,String keyspaceName,String tableName,String fieldName) {
- this.indexName = indexName;
- this.keyspaceName= keyspaceName;
- this.tableName = tableName;
- this.fieldName = fieldName;
- }
-
- @ApiModelProperty(value = "Index Name")
- public String getIndexName() {
- return indexName;
- }
-
- public JsonIndex setIndexName(String indexName) {
- this.indexName = indexName;
- return this;
- }
-
- @ApiModelProperty(value = "Keyspace name")
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public JsonIndex setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- return this;
- }
-
- public JsonIndex setTableName(String tableName) {
- this.tableName = tableName;
- return this;
- }
-
- @ApiModelProperty(value = "Table name")
- public String getTableName() {
- return tableName;
- }
-
- public JsonIndex setFieldName(String fieldName) {
- this.fieldName = fieldName;
- return this;
- }
-
- @ApiModelProperty(value = "Field name")
- public String getFieldName() {
- return fieldName;
- }
-
- public PreparedQueryObject genCreateIndexQuery() {
-
- if (logger.isDebugEnabled()) {
- logger.debug("Came inside genCreateIndexQuery method");
- }
-
- logger.info("genCreateIndexQuery indexName ::" + indexName);
- logger.info("genCreateIndexQuery keyspaceName ::" + keyspaceName);
- logger.info("genCreateIndexQuery tableName ::" + tableName);
- logger.info("genCreateIndexQuery fieldName ::" + fieldName);
-
- long start = System.currentTimeMillis();
-
- PreparedQueryObject query = new PreparedQueryObject();
- query.appendQueryString("Create index if not exists " + this.getIndexName() + " on " + this.getKeyspaceName() + "."
- + this.getTableName() + " (" + this.getFieldName() + ");");
-
- long end = System.currentTimeMillis();
-
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Time taken for setting up query in create index:" + (end - start));
-
- logger.info(EELFLoggerDelegate.applicationLogger,
- " create index query :" + query.getQuery());
-
- return query;
- }
-
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JsonInsert.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonInsert.java
deleted file mode 100644
index 57ff245a..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonInsert.java
+++ /dev/null
@@ -1,420 +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.datastore.jsonobjects;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.nio.ByteBuffer;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response.Status;
-
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.MusicUtil;
-
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.TableMetadata;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "InsertTable", description = "Json model for table vlaues insert")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonInsert implements Serializable {
- private static final long serialVersionUID = 1L;
- private String keyspaceName;
- private String tableName;
- private transient Map<String, Object> values;
- private String ttl;
- private String timestamp;
- private transient Map<String, Object> rowSpecification;
- private Map<String, String> consistencyInfo;
- private Map<String, byte[]> objectMap;
- private String primaryKeyVal;
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JsonInsert.class);
-
- @ApiModelProperty(value = "objectMap",hidden = true)
- public Map<String, byte[]> getObjectMap() {
- return objectMap;
- }
-
- public void setObjectMap(Map<String, byte[]> objectMap) {
- this.objectMap = objectMap;
- }
-
- @ApiModelProperty(value = "keyspace")
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public void setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- }
-
- @ApiModelProperty(value = "Table name")
- public String getTableName() {
- return tableName;
- }
-
- public void setTableName(String tableName) {
- this.tableName = tableName;
- }
-
- @ApiModelProperty(value = "Consistency level", allowableValues = "eventual,critical,atomic")
- public Map<String, String> getConsistencyInfo() {
- return consistencyInfo;
- }
-
- public void setConsistencyInfo(Map<String, String> consistencyInfo) {
- this.consistencyInfo = consistencyInfo;
- }
-
- @ApiModelProperty(value = "Columns and tables support an optional "
- + "expiration period called TTL (time-to-live) in seconds.",
- notes="TTL precision is one second, which is calculated by the coordinator "
- + "node. When using TTL, ensure that all nodes in the cluster have synchronized clocks.",allowEmptyValue = true)
- public String getTtl() {
- return ttl;
- }
-
- public void setTtl(String ttl) {
- this.ttl = ttl;
- }
-
- @ApiModelProperty(value = "Time stamp (epoch_in_microseconds)",
- notes = "Marks inserted data (write time) with TIMESTAMP. "
- + "Enter the time since epoch (January 1, 1970) in microseconds."
- + "By default, the actual time of write is used.", allowEmptyValue = true)
- public String getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(String timestamp) {
- this.timestamp = timestamp;
- }
-
- @ApiModelProperty(value = "Json Object of key/values", notes="Where key is the column name and value is the data value for that column.",
- example = "{'emp_id': 'df98a3d40cd6','emp_name': 'john',"
- + "'emp_salary': 50,'address':{'street' : '1 Some way','city' : 'New York'}}")
- public Map<String, Object> getValues() {
- return values;
- }
-
- public void setValues(Map<String, Object> values) {
- this.values = values;
- }
-
- @ApiModelProperty(value = "Information for selecting specific rows for insert",hidden = true)
- public Map<String, Object> getRowSpecification() {
- return rowSpecification;
- }
-
- public void setRowSpecification(Map<String, Object> rowSpecification) {
- this.rowSpecification = rowSpecification;
- }
-
- public String getPrimaryKeyVal() {
- return primaryKeyVal;
- }
-
- public void setPrimaryKeyVal(String primaryKeyVal) {
- this.primaryKeyVal = primaryKeyVal;
- }
-
- public byte[] serialize() {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutput out = null;
- try {
- out = new ObjectOutputStream(bos);
- out.writeObject(this);
- } catch (IOException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e, AppMessages.IOERROR, ErrorSeverity.ERROR, ErrorTypes.DATAERROR);
- }
- return bos.toByteArray();
- }
-
- /**
- * Generate TableInsertQuery
- * @return
- * @throws MusicQueryException
- */
- public PreparedQueryObject genInsertPreparedQueryObj() throws MusicQueryException {
- if (logger.isDebugEnabled()) {
- logger.debug("Coming inside genTableInsertQuery method " + this.getKeyspaceName());
- logger.debug("Coming inside genTableInsertQuery method " + this.getTableName());
- }
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
- TableMetadata tableInfo = null;
- try {
- tableInfo = MusicDataStoreHandle.returnColumnMetadata(this.getKeyspaceName(), this.getTableName());
- if(tableInfo == null) {
- throw new MusicQueryException("Table name doesn't exists. Please check the table name.",
- Status.BAD_REQUEST.getStatusCode());
- }
- } catch (MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e, AppMessages.UNKNOWNERROR ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
- throw new MusicQueryException(e.getMessage(),Status.BAD_REQUEST.getStatusCode());
-
- }
- String primaryKeyName = tableInfo.getPrimaryKey().get(0).getName();
- StringBuilder fieldsString = new StringBuilder("(vector_ts,");
- String vectorTs =
- String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
- StringBuilder valueString = new StringBuilder("(" + "?" + ",");
- queryObject.addValue(vectorTs);
-
- Map<String, Object> valuesMap = this.getValues();
- if (valuesMap==null) {
- throw new MusicQueryException("Nothing to insert. No values provided in request.",
- Status.BAD_REQUEST.getStatusCode());
- }
- int counter = 0;
- String primaryKey = "";
- for (Map.Entry<String, Object> entry : valuesMap.entrySet()) {
- fieldsString.append("" + entry.getKey());
- Object valueObj = entry.getValue();
- if (primaryKeyName.equals(entry.getKey())) {
- primaryKey = entry.getValue() + "";
- primaryKey = primaryKey.replace("'", "''");
- }
- DataType colType = null;
- try {
- colType = tableInfo.getColumn(entry.getKey()).getType();
- } catch(NullPointerException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage() +" Invalid column name : "+entry.getKey
- (), AppMessages.INCORRECTDATA ,ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR, ex);
- throw new MusicQueryException("Invalid column name : " + entry.getKey(),
- Status.BAD_REQUEST.getStatusCode());
- }
-
- Object formattedValue = null;
- try {
- formattedValue = MusicUtil.convertToActualDataType(colType, valueObj);
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger,e);
- }
- valueString.append("?");
-
- queryObject.addValue(formattedValue);
-
- if (counter == valuesMap.size() - 1) {
- fieldsString.append(")");
- valueString.append(")");
- } else {
- fieldsString.append(",");
- valueString.append(",");
- }
- counter = counter + 1;
- }
-
- //blobs..
- Map<String, byte[]> objectMap = this.getObjectMap();
- if(objectMap != null) {
- for (Map.Entry<String, byte[]> entry : objectMap.entrySet()) {
- if(counter > 0) {
- fieldsString.replace(fieldsString.length()-1, fieldsString.length(), ",");
- valueString.replace(valueString.length()-1, valueString.length(), ",");
- }
- fieldsString.append("" + entry.getKey());
- byte[] valueObj = entry.getValue();
- if (primaryKeyName.equals(entry.getKey())) {
- primaryKey = entry.getValue() + "";
- primaryKey = primaryKey.replace("'", "''");
- }
- DataType colType = tableInfo.getColumn(entry.getKey()).getType();
- ByteBuffer formattedValue = null;
- if(colType.toString().toLowerCase().contains("blob")) {
- formattedValue = MusicUtil.convertToActualDataType(colType, valueObj);
- }
- valueString.append("?");
- queryObject.addValue(formattedValue);
- counter = counter + 1;
- fieldsString.append(",");
- valueString.append(",");
- }
- }
- this.setPrimaryKeyVal(primaryKey);
- if(primaryKey == null || primaryKey.length() <= 0) {
- logger.error(EELFLoggerDelegate.errorLogger, "Some required partition key parts are missing: "+primaryKeyName );
- throw new MusicQueryException("Some required partition key parts are missing: " + primaryKeyName,
- Status.BAD_REQUEST.getStatusCode());
- }
-
- fieldsString.replace(fieldsString.length()-1, fieldsString.length(), ")");
- valueString.replace(valueString.length()-1, valueString.length(), ")");
-
- queryObject.appendQueryString("INSERT INTO " + this.getKeyspaceName() + "." + this.getTableName() + " "
- + fieldsString + " VALUES " + valueString);
-
- String ttl = this.getTtl();
- String timestamp = this.getTimestamp();
-
- if ((ttl != null) && (timestamp != null)) {
- logger.info(EELFLoggerDelegate.applicationLogger, "both there");
- queryObject.appendQueryString(" USING TTL ? AND TIMESTAMP ?");
- queryObject.addValue(Integer.parseInt(ttl));
- queryObject.addValue(Long.parseLong(timestamp));
- }
-
- if ((ttl != null) && (timestamp == null)) {
- logger.info(EELFLoggerDelegate.applicationLogger, "ONLY TTL there");
- queryObject.appendQueryString(" USING TTL ?");
- queryObject.addValue(Integer.parseInt(ttl));
- }
-
- if ((ttl == null) && (timestamp != null)) {
- logger.info(EELFLoggerDelegate.applicationLogger, "ONLY timestamp there");
- queryObject.appendQueryString(" USING TIMESTAMP ?");
- queryObject.addValue(Long.parseLong(timestamp));
- }
-
- queryObject.appendQueryString(";");
-
- String consistency = this.getConsistencyInfo().get("type");
- if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL) && this.getConsistencyInfo().get("consistency") != null) {
- if(MusicUtil.isValidConsistency(this.getConsistencyInfo().get("consistency"))) {
- queryObject.setConsistency(this.getConsistencyInfo().get("consistency"));
- } else {
- throw new MusicQueryException("Invalid Consistency type", Status.BAD_REQUEST.getStatusCode());
- }
- }
- queryObject.setOperation("insert");
-
- logger.info("Data insert Query ::::: " + queryObject.getQuery());
-
- return queryObject;
- }
-
- /**
- *
- * @param rowParams
- * @return
- * @throws MusicQueryException
- */
- public PreparedQueryObject genSelectCriticalPreparedQueryObj(MultivaluedMap<String, String> rowParams) throws MusicQueryException {
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- if((this.getKeyspaceName() == null || this.getKeyspaceName().isEmpty())
- || (this.getTableName() == null || this.getTableName().isEmpty())){
- throw new MusicQueryException("one or more path parameters are not set, please check and try again",
- Status.BAD_REQUEST.getStatusCode());
- }
- EELFLoggerDelegate.mdcPut("keyspace", "( "+this.getKeyspaceName()+" ) ");
- RowIdentifier rowId = null;
- try {
- rowId = getRowIdentifier(this.getKeyspaceName(), this.getTableName(), rowParams, queryObject);
- this.setPrimaryKeyVal(rowId.primarKeyValue);
- } catch (MusicServiceException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes
- .GENERALSERVICEERROR, ex);
- throw new MusicQueryException(ex.getMessage(), Status.BAD_REQUEST.getStatusCode());
- }
-
- queryObject.appendQueryString(
- "SELECT * FROM " + this.getKeyspaceName() + "." + this.getTableName() + " WHERE " + rowId.rowIdString + ";");
-
- return queryObject;
- }
-
- 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;
- }
- }
-
- /**
- *
- * @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/datastore/jsonobjects/JsonKeySpace.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonKeySpace.java
deleted file mode 100644
index cada1c00..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonKeySpace.java
+++ /dev/null
@@ -1,163 +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.datastore.jsonobjects;
-
-import java.util.Map;
-
-import javax.ws.rs.core.Response.Status;
-
-import org.onap.music.datastore.PreparedQueryObject;
-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.MusicQueryException;
-import org.onap.music.main.MusicUtil;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "JsonTable", description = "Json model creating new keyspace")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonKeySpace {
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JsonKeySpace.class);
- private String keyspaceName;
- private Map<String, Object> replicationInfo;
- private String durabilityOfWrites;
- private Map<String, String> consistencyInfo;
-
- @ApiModelProperty(value = "Consistency level", allowableValues = "eventual,critical,atomic")
- public Map<String, String> getConsistencyInfo() {
- return consistencyInfo;
- }
-
- public void setConsistencyInfo(Map<String, String> consistencyInfo) {
- this.consistencyInfo = consistencyInfo;
- }
-
- @ApiModelProperty(value = "Replication information")
- public Map<String, Object> getReplicationInfo() {
- return replicationInfo;
- }
-
- public void setReplicationInfo(Map<String, Object> replicationInfo) {
- this.replicationInfo = replicationInfo;
- }
-
- @ApiModelProperty(value = "Durability", allowableValues = "true,false")
- public String getDurabilityOfWrites() {
- return durabilityOfWrites;
- }
-
- public void setDurabilityOfWrites(String durabilityOfWrites) {
- this.durabilityOfWrites = durabilityOfWrites;
- }
-
- @ApiModelProperty(value = "Keyspace name")
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public void setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- }
-
- /**
- * Will generate query to create Keyspacce.
- *
- * @throws MusicQueryException
- */
- @SuppressWarnings("deprecation")
- public PreparedQueryObject genCreateKeyspaceQuery() throws MusicQueryException {
-
- if (logger.isDebugEnabled()) {
- logger.debug("Came inside createKeyspace method");
- }
-
- String keyspaceName = this.getKeyspaceName();
- String durabilityOfWrites = this.getDurabilityOfWrites();
- String consistency = MusicUtil.EVENTUAL;
-
- logger.info("genCreateKeyspaceQuery keyspaceName ::" + keyspaceName);
- logger.info("genCreateKeyspaceQuery class :: " + this.getReplicationInfo().get("class"));
- logger.info("genCreateKeyspaceQuery replication_factor :: " + this.getReplicationInfo().get("replication_factor"));
- logger.info("genCreateKeyspaceQuery durabilityOfWrites :: " + durabilityOfWrites);
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL) && this.getConsistencyInfo().get("consistency") != null) {
- if(MusicUtil.isValidConsistency(this.getConsistencyInfo().get("consistency"))) {
- queryObject.setConsistency(this.getConsistencyInfo().get("consistency"));
- }else {
- throw new MusicQueryException("Invalid Consistency type",Status.BAD_REQUEST.getStatusCode());
- }
- }
-
- long start = System.currentTimeMillis();
- Map<String, Object> replicationInfo = this.getReplicationInfo();
- String repString = null;
- try {
- repString = "{" + MusicUtil.jsonMaptoSqlString(replicationInfo, ",") + "}";
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), AppMessages.MISSINGDATA,
- ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR);
- }
- queryObject.appendQueryString("CREATE KEYSPACE " + keyspaceName + " WITH replication = " + repString);
- if (this.getDurabilityOfWrites() != null) {
- queryObject.appendQueryString(" AND durable_writes = " + this.getDurabilityOfWrites());
- }
- queryObject.appendQueryString(";");
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Time taken for setting up query in create keyspace:" + (end - start));
-
- return queryObject;
- }
-
- /**
- * Will generate Query to drop a keyspace.
- *
- * @return
- */
- public PreparedQueryObject genDropKeyspaceQuery() {
- if (logger.isDebugEnabled()) {
- logger.debug("Coming inside genDropKeyspaceQuery method "+this.getKeyspaceName());
- }
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString("DROP KEYSPACE " + this.getKeyspaceName() + ";");
-
- return queryObject;
- }
-
- @Override
- public String toString() {
- return "CassaKeyspaceObject [keyspaceName=" + keyspaceName + ", replicationInfo=" + replicationInfo
- + "durabilityOfWrites=" + durabilityOfWrites + "]";
- }
-
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JsonLeasedLock.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonLeasedLock.java
deleted file mode 100644
index 86bbe3dc..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonLeasedLock.java
+++ /dev/null
@@ -1,44 +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.datastore.jsonobjects;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "Json Leasesd Lock", description = "model for leased lock")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonLeasedLock {
- private long leasePeriod;
-
- @ApiModelProperty(value = "Lease period")
- public long getLeasePeriod() {
- return leasePeriod;
- }
-
- public void setLeasePeriod(long leasePeriod) {
- this.leasePeriod = leasePeriod;
- }
-
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JsonLock.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonLock.java
deleted file mode 100644
index f353c018..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonLock.java
+++ /dev/null
@@ -1,49 +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.datastore.jsonobjects;
-
-import org.onap.music.lockingservice.cassandra.LockType;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "Json Lock Type", description = "Model for Lock Type")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonLock {
- private LockType locktype;
-
- @ApiModelProperty(
- value = "Type of music lock",
- name = "lockType",
- allowEmptyValue = false,
- allowableValues = "READ|WRITE")
- public LockType getLocktype() {
- return this.locktype;
- }
-
- public void setLockType(LockType locktype) {
- this.locktype = locktype;
- }
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JsonSelect.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonSelect.java
deleted file mode 100644
index e354b4b0..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonSelect.java
+++ /dev/null
@@ -1,208 +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.datastore.jsonobjects;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response.Status;
-
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.MusicUtil;
-
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.TableMetadata;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonSelect implements Serializable {
- private Map<String, String> consistencyInfo;
- private String keyspaceName;
- private String tableName;
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JsonSelect.class);
-
-
-
- public Map<String, String> getConsistencyInfo() {
- return consistencyInfo;
- }
-
- public void setConsistencyInfo(Map<String, String> consistencyInfo) {
- this.consistencyInfo = consistencyInfo;
- }
-
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public void setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- }
-
- public String getTableName() {
- return tableName;
- }
-
- public void setTableName(String tableName) {
- this.tableName = tableName;
- }
-
- public byte[] serialize() {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutput out = null;
- try {
- out = new ObjectOutputStream(bos);
- out.writeObject(this);
- } catch (IOException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), e);
- }
- return bos.toByteArray();
- }
-
- /**
- * genSelectQuery
- *
- * @return
- * @throws MusicQueryException
- */
- public PreparedQueryObject genSelectQuery(MultivaluedMap<String, String> rowParams) throws MusicQueryException {
-
- if((this.getKeyspaceName() == null || this.getKeyspaceName().isEmpty())
- || (this.getTableName() == null || this.getTableName().isEmpty())){
- throw new MusicQueryException("one or more path parameters are not set, please check and try again",
- Status.BAD_REQUEST.getStatusCode());
- }
- EELFLoggerDelegate.mdcPut("keyspace", "( " + this.getKeyspaceName() + " ) ");
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- if (rowParams.isEmpty()) { // select all
- queryObject.appendQueryString("SELECT * FROM " + this.getKeyspaceName() + "." + this.getTableName() + ";");
- } else {
- int limit = -1; // do not limit the number of results
- try {
- queryObject = selectSpecificQuery(this.getKeyspaceName(), this.getTableName(), rowParams, limit);
- } catch (MusicServiceException ex) {
- logger.error(EELFLoggerDelegate.errorLogger, ex, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN,
- ErrorTypes.GENERALSERVICEERROR, ex);
-
- throw new MusicQueryException(ex.getMessage(), Status.BAD_REQUEST.getStatusCode());
- }
- }
-
- return queryObject;
- }
-
- public PreparedQueryObject selectSpecificQuery(String keyspace,
- String tablename, MultivaluedMap<String, String> rowParams, int limit)
- throws MusicServiceException {
- PreparedQueryObject queryObject = new PreparedQueryObject();
- StringBuilder rowIdString = getRowIdentifier(keyspace,
- tablename,rowParams,queryObject).rowIdString;
- queryObject.appendQueryString(
- "SELECT * FROM " + keyspace + "." + tablename + " WHERE " + rowIdString);
- if (limit != -1) {
- queryObject.appendQueryString(" LIMIT " + limit);
- }
- queryObject.appendQueryString(";");
- return queryObject;
- }
-
- 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;
- }
- }
-
- /**
- *
- * @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/datastore/jsonobjects/JsonTable.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonTable.java
deleted file mode 100644
index ef560144..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonTable.java
+++ /dev/null
@@ -1,381 +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.datastore.jsonobjects;
-
-import java.util.Map;
-
-import javax.ws.rs.core.Response.Status;
-
-import org.apache.commons.lang3.StringUtils;
-import org.onap.music.datastore.PreparedQueryObject;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.exceptions.MusicQueryException;
-import org.onap.music.main.MusicUtil;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "JsonTable", description = "Defines the Json for Creating a new Table.")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonTable {
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JsonTable.class);
-
- private String keyspaceName;
- private String tableName;
-
- private Map<String, String> fields;
- private Map<String, Object> properties;
- private String primaryKey;
- private String partitionKey;
- private String clusteringKey;
- private String filteringKey;
- private String clusteringOrder;
- private Map<String, String> consistencyInfo;
-
- @ApiModelProperty(value = "Consistency level", allowableValues = "eventual,critical,atomic")
- public Map<String, String> getConsistencyInfo() {
- return consistencyInfo;
- }
-
- public void setConsistencyInfo(Map<String, String> consistencyInfo) {
- this.consistencyInfo = consistencyInfo;
- }
-
- @ApiModelProperty(value = "Properties")
- public Map<String, Object> getProperties() {
- return properties;
- }
-
- public void setProperties(Map<String, Object> properties) {
- this.properties = properties;
- }
-
- @ApiModelProperty(value = "Fields")
- public Map<String, String> getFields() {
- return fields;
- }
-
- public void setFields(Map<String, String> fields) {
- this.fields = fields;
- }
-
- @ApiModelProperty(value = "KeySpace Name")
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public void setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- }
-
- @ApiModelProperty(value = "Table Name")
- public String getTableName() {
- return tableName;
- }
-
- public void setTableName(String tableName) {
- this.tableName = tableName;
- }
-
- @ApiModelProperty(value = "Clustering Order", notes = "")
- public String getClusteringOrder() {
- return clusteringOrder;
- }
-
- public void setClusteringOrder(String clusteringOrder) {
- this.clusteringOrder = clusteringOrder;
- }
-
- @ApiModelProperty(value = "Primary Key")
- public String getPrimaryKey() {
- return primaryKey;
- }
-
- public void setPrimaryKey(String primaryKey) {
- this.primaryKey = primaryKey;
- }
-
- public String getClusteringKey() {
- return clusteringKey;
- }
-
- public void setClusteringKey(String clusteringKey) {
- this.clusteringKey = clusteringKey;
- }
-
- public String getFilteringKey() {
- return filteringKey;
- }
-
- public void setFilteringKey(String filteringKey) {
- this.filteringKey = filteringKey;
- }
-
- public String getPartitionKey() {
- return partitionKey;
- }
-
- public void setPartitionKey(String partitionKey) {
- this.partitionKey = partitionKey;
- }
-
- public PreparedQueryObject genCreateTableQuery() throws MusicQueryException {
- if (logger.isDebugEnabled()) {
- logger.debug("Coming inside genCreateTableQuery method " + this.getKeyspaceName());
- logger.debug("Coming inside genCreateTableQuery method " + this.getTableName());
- }
-
- String primaryKey = null;
- String partitionKey = this.getPartitionKey();
- String clusterKey = this.getClusteringKey();
- String filteringKey = this.getFilteringKey();
- if (filteringKey != null) {
- clusterKey = clusterKey + "," + filteringKey;
- }
- primaryKey = this.getPrimaryKey(); // get primaryKey if available
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
- // first read the information about the table fields
- Map<String, String> fields = this.getFields();
- if (fields == null) {
- throw new MusicQueryException(
- "Create Table Error: No fields in request", Status.BAD_REQUEST.getStatusCode());
- }
- StringBuilder fieldsString = new StringBuilder("(vector_ts text,");
- int counter = 0;
- for (Map.Entry<String, String> entry : fields.entrySet()) {
- if (entry.getKey().equals("PRIMARY KEY")) {
- primaryKey = entry.getValue(); // replaces primaryKey
- primaryKey = primaryKey.trim();
- } else {
- if (counter == 0 ) fieldsString.append("" + entry.getKey() + " " + entry.getValue() + "");
- else fieldsString.append("," + entry.getKey() + " " + entry.getValue() + "");
- }
-
- if (counter != (fields.size() - 1) ) {
- counter = counter + 1;
- } else {
-
- if((primaryKey != null) && (partitionKey == null)) {
- primaryKey = primaryKey.trim();
- int count1 = StringUtils.countMatches(primaryKey, ')');
- int count2 = StringUtils.countMatches(primaryKey, '(');
- if (count1 != count2) {
- throw new MusicQueryException(
- "Create Table Error: primary key '(' and ')' do not match, primary key=" + primaryKey,
- Status.BAD_REQUEST.getStatusCode());
- }
-
- if ( primaryKey.indexOf('(') == -1 || ( count2 == 1 && (primaryKey.lastIndexOf(')') +1) == primaryKey.length() ) ) {
- if (primaryKey.contains(",") ) {
- partitionKey= primaryKey.substring(0,primaryKey.indexOf(','));
- partitionKey=partitionKey.replaceAll("[\\(]+","");
- clusterKey=primaryKey.substring(primaryKey.indexOf(',')+1); // make sure index
- clusterKey=clusterKey.replaceAll("[)]+", "");
- } else {
- partitionKey=primaryKey;
- partitionKey=partitionKey.replaceAll("[\\)]+","");
- partitionKey=partitionKey.replaceAll("[\\(]+","");
- clusterKey="";
- }
- } else { // not null and has ) before the last char
- partitionKey= primaryKey.substring(0,primaryKey.indexOf(')'));
- partitionKey=partitionKey.replaceAll("[\\(]+","");
- partitionKey = partitionKey.trim();
- clusterKey= primaryKey.substring(primaryKey.indexOf(')'));
- clusterKey=clusterKey.replaceAll("[\\(]+","");
- clusterKey=clusterKey.replaceAll("[\\)]+","");
- clusterKey = clusterKey.trim();
- if (clusterKey.indexOf(',') == 0) {
- clusterKey=clusterKey.substring(1);
- }
- clusterKey = clusterKey.trim();
- if (clusterKey.equals(",") ) clusterKey=""; // print error if needed ( ... ),)
- }
-
- if (!(partitionKey.isEmpty() || clusterKey.isEmpty())
- && (partitionKey.equalsIgnoreCase(clusterKey) ||
- clusterKey.contains(partitionKey) || partitionKey.contains(clusterKey)) ) {
- logger.error("DataAPI createTable partition/cluster key ERROR: partitionKey="+partitionKey+", clusterKey=" + clusterKey + " and primary key=" + primaryKey );
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(
- "Create Table primary key error: clusterKey(" + clusterKey + ") equals/contains/overlaps partitionKey(" +partitionKey+ ") of"
- + " primary key=" + primaryKey)
- .toMap()).build();*/
- throw new MusicQueryException("Create Table primary key error: clusterKey(" + clusterKey
- + ") equals/contains/overlaps partitionKey(" + partitionKey + ") of" + " primary key="
- + primaryKey, Status.BAD_REQUEST.getStatusCode());
-
- }
-
- if (partitionKey.isEmpty() ) primaryKey="";
- else if (clusterKey.isEmpty() ) primaryKey=" (" + partitionKey + ")";
- else primaryKey=" (" + partitionKey + ")," + clusterKey;
-
-
- if (primaryKey != null) fieldsString.append(", PRIMARY KEY (" + primaryKey + " )");
-
- } else { // end of length > 0
-
- if (!(partitionKey.isEmpty() || clusterKey.isEmpty())
- && (partitionKey.equalsIgnoreCase(clusterKey) ||
- clusterKey.contains(partitionKey) || partitionKey.contains(clusterKey)) ) {
- logger.error("DataAPI createTable partition/cluster key ERROR: partitionKey="+partitionKey+", clusterKey=" + clusterKey);
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(
- "Create Table primary key error: clusterKey(" + clusterKey + ") equals/contains/overlaps partitionKey(" +partitionKey+ ")")
- .toMap()).build();*/
- throw new MusicQueryException(
- "Create Table primary key error: clusterKey(" + clusterKey
- + ") equals/contains/overlaps partitionKey(" + partitionKey + ")",
- Status.BAD_REQUEST.getStatusCode());
- }
-
- if (partitionKey.isEmpty() ) primaryKey="";
- else if (clusterKey.isEmpty() ) primaryKey=" (" + partitionKey + ")";
- else primaryKey=" (" + partitionKey + ")," + clusterKey;
-
- if (primaryKey != null) fieldsString.append(", PRIMARY KEY (" + primaryKey + " )");
- }
- fieldsString.append(")");
-
- } // end of last field check
-
- } // end of for each
- // information about the name-value style properties
- Map<String, Object> propertiesMap = this.getProperties();
- StringBuilder propertiesString = new StringBuilder();
- if (propertiesMap != null) {
- counter = 0;
- for (Map.Entry<String, Object> entry : propertiesMap.entrySet()) {
- Object ot = entry.getValue();
- String value = ot + "";
- if (ot instanceof String) {
- value = "'" + value + "'";
- } else if (ot instanceof Map) {
- @SuppressWarnings("unchecked")
- Map<String, Object> otMap = (Map<String, Object>) ot;
- try {
- value = "{" + MusicUtil.jsonMaptoSqlString(otMap, ",") + "}";
- } catch (Exception e) {
- throw new MusicQueryException(e.getMessage(),
- Status.BAD_REQUEST.getStatusCode());
- }
- }
-
- propertiesString.append(entry.getKey() + "=" + value + "");
- if (counter != propertiesMap.size() - 1)
- propertiesString.append(" AND ");
-
- counter = counter + 1;
- }
- }
-
- String clusteringOrder = this.getClusteringOrder();
-
- if (clusteringOrder != null && !(clusteringOrder.isEmpty())) {
- String[] arrayClusterOrder = clusteringOrder.split("[,]+");
-
- for (int i = 0; i < arrayClusterOrder.length; i++) {
- String[] clusterS = arrayClusterOrder[i].trim().split("[ ]+");
- if ( (clusterS.length ==2) && (clusterS[1].equalsIgnoreCase("ASC") || clusterS[1].equalsIgnoreCase("DESC"))) {
- continue;
- } else {
- /*return response.status(Status.BAD_REQUEST)
- .entity(new JsonResponse(ResultType.FAILURE)
- .setError("createTable/Clustering Order vlaue ERROR: valid clustering order is ASC or DESC or expecting colname order; please correct clusteringOrder:"+ clusteringOrder+".")
- .toMap()).build();*/
-
- throw new MusicQueryException(
- "createTable/Clustering Order vlaue ERROR: valid clustering order is ASC or DESC or expecting colname order; please correct clusteringOrder:"
- + clusteringOrder + ".",
- Status.BAD_REQUEST.getStatusCode());
- }
- // add validation for column names in cluster key
- }
-
- if (!(clusterKey.isEmpty())) {
- clusteringOrder = "CLUSTERING ORDER BY (" +clusteringOrder +")";
- //cjc check if propertiesString.length() >0 instead propertiesMap
- if (propertiesMap != null) {
- propertiesString.append(" AND "+ clusteringOrder);
- } else {
- propertiesString.append(clusteringOrder);
- }
- } else {
- logger.warn("Skipping clustering order=("+clusteringOrder+ ") since clustering key is empty ");
- }
- } //if non empty
-
- queryObject.appendQueryString(
- "CREATE TABLE " + this.getKeyspaceName() + "." + this.getTableName() + " " + fieldsString);
-
-
- if (propertiesString != null && propertiesString.length()>0 )
- queryObject.appendQueryString(" WITH " + propertiesString);
- queryObject.appendQueryString(";");
-
- return queryObject;
- }
-
- /**
- *
- * @return
- */
- public PreparedQueryObject genCreateShadowLockingTableQuery() {
- if (logger.isDebugEnabled()) {
- logger.debug("Coming inside genCreateShadowLockingTableQuery method " + this.getKeyspaceName());
- logger.debug("Coming inside genCreateShadowLockingTableQuery method " + this.getTableName());
- }
-
- String tableName = "unsyncedKeys_" + this.getTableName();
- String tabQuery = "CREATE TABLE IF NOT EXISTS " + this.getKeyspaceName() + "." + tableName
- + " ( key text,PRIMARY KEY (key) );";
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(tabQuery);
-
- return queryObject;
- }
-
- /**
- * genDropTableQuery
- *
- * @return PreparedQueryObject
- */
- public PreparedQueryObject genDropTableQuery() {
- if (logger.isDebugEnabled()) {
- logger.debug("Coming inside genDropTableQuery method " + this.getKeyspaceName());
- logger.debug("Coming inside genDropTableQuery method " + this.getTableName());
- }
-
- PreparedQueryObject query = new PreparedQueryObject();
- query.appendQueryString("DROP TABLE " + this.getKeyspaceName() + "." + this.getTableName() + ";");
- logger.info("Delete Query ::::: " + query.getQuery());
-
- return query;
- }
-
-
-}
diff --git a/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java b/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java
deleted file mode 100644
index 12508de0..00000000
--- a/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java
+++ /dev/null
@@ -1,416 +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.datastore.jsonobjects;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response.Status;
-
-import org.onap.music.datastore.Condition;
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.MusicUtil;
-import org.onap.music.main.ReturnType;
-
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.TableMetadata;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "JsonTable", description = "Json model for table update")
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class JsonUpdate implements Serializable {
- private String keyspaceName;
- private String tableName;
- private transient Map<String, Object> values;
- private String ttl;
- private String timestamp;
- private Map<String, String> consistencyInfo;
- private transient Map<String, Object> conditions;
- private transient Map<String, Object> rowSpecification;
- private StringBuilder rowIdString;
- private String primarKeyValue;
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JsonUpdate.class);
-
- @ApiModelProperty(value = "Conditions")
- public Map<String, Object> getConditions() {
- return conditions;
- }
-
- public void setConditions(Map<String, Object> conditions) {
- this.conditions = conditions;
- }
-
- @ApiModelProperty(value = "Information for selecting sepcific rows")
- public Map<String, Object> getRow_specification() {
- return rowSpecification;
- }
-
- public void setRow_specification(Map<String, Object> rowSpecification) {
- this.rowSpecification = rowSpecification;
- }
-
-
- @ApiModelProperty(value = "Keyspace name")
- public String getKeyspaceName() {
- return keyspaceName;
- }
-
- public void setKeyspaceName(String keyspaceName) {
- this.keyspaceName = keyspaceName;
- }
-
- @ApiModelProperty(value = "Table name")
- public String getTableName() {
- return tableName;
- }
-
- public void setTableName(String tableName) {
- this.tableName = tableName;
- }
-
- @ApiModelProperty(value = "Consistency level", allowableValues = "eventual,critical,atomic")
- public Map<String, String> getConsistencyInfo() {
- return consistencyInfo;
- }
-
- public void setConsistencyInfo(Map<String, String> consistencyInfo) {
- this.consistencyInfo = consistencyInfo;
- }
-
- @ApiModelProperty(value = "Time to live value")
- public String getTtl() {
- return ttl;
- }
-
- public void setTtl(String ttl) {
- this.ttl = ttl;
- }
-
- @ApiModelProperty(value = "Time stamp")
- public String getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(String timestamp) {
- this.timestamp = timestamp;
- }
-
- @ApiModelProperty(value = "Column values")
- public Map<String, Object> getValues() {
- return values;
- }
-
- public void setValues(Map<String, Object> values) {
- this.values = values;
- }
-
- public StringBuilder getRowIdString() {
- return rowIdString;
- }
-
- public void setRowIdString(StringBuilder rowIdString) {
- this.rowIdString = rowIdString;
- }
-
- public String getPrimarKeyValue() {
- return primarKeyValue;
- }
-
- public void setPrimarKeyValue(String primarKeyValue) {
- this.primarKeyValue = primarKeyValue;
- }
-
- public byte[] serialize() {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutput out = null;
- try {
- out = new ObjectOutputStream(bos);
- out.writeObject(this);
- } catch (IOException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e,AppMessages.IOERROR, ErrorSeverity.ERROR, ErrorTypes.DATAERROR);
- }
- return bos.toByteArray();
- }
-
- /**
- * Generate TableInsertQuery
- * @return
- * @throws MusicQueryException
- */
- public PreparedQueryObject genUpdatePreparedQueryObj(MultivaluedMap<String, String> rowParams) throws MusicQueryException {
- if (logger.isDebugEnabled()) {
- logger.debug("Coming inside genUpdatePreparedQueryObj method " + this.getKeyspaceName());
- logger.debug("Coming inside genUpdatePreparedQueryObj method " + this.getTableName());
- }
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- if((this.getKeyspaceName() == null || this.getKeyspaceName().isEmpty()) ||
- (this.getTableName() == null || this.getTableName().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();*/
-
- throw new MusicQueryException("one or more path parameters are not set, please check and try again",
- Status.BAD_REQUEST.getStatusCode());
- }
-
- EELFLoggerDelegate.mdcPut("keyspace", "( "+this.getKeyspaceName()+" ) ");
- long startTime = System.currentTimeMillis();
- String operationId = UUID.randomUUID().toString(); // just for infoging purposes.
- String consistency = this.getConsistencyInfo().get("type");
-
- logger.info(EELFLoggerDelegate.applicationLogger, "--------------Music " + consistency
- + " update-" + operationId + "-------------------------");
- // obtain the field value pairs of the update
-
- Map<String, Object> valuesMap = this.getValues();
-
- TableMetadata tableInfo;
-
- try {
- tableInfo = MusicDataStoreHandle.returnColumnMetadata(this.getKeyspaceName(), this.getTableName());
- } catch (MusicServiceException 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();*/
- throw new MusicQueryException(e.getMessage(), Status.BAD_REQUEST.getStatusCode());
- }catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger, e, AppMessages.UNKNOWNERROR, ErrorSeverity.CRITICAL,
- ErrorTypes.GENERALSERVICEERROR);
- throw new MusicQueryException(e.getMessage(), Status.BAD_REQUEST.getStatusCode());
- }
-
- if (tableInfo == null) {
- logger.error(EELFLoggerDelegate.errorLogger,"Table information not found. Please check input for table name= "+this.getTableName(), AppMessages.MISSINGINFO ,ErrorSeverity.WARN, ErrorTypes.AUTHENTICATIONERROR);
-
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
- .setError("Table information not found. Please check input for table name= "
- + this.getKeyspaceName() + "." + this.getTableName()).toMap()).build();*/
-
- throw new MusicQueryException("Table information not found. Please check input for table name= "
- + this.getKeyspaceName() + "." + this.getTableName(), Status.BAD_REQUEST.getStatusCode());
- }
-
- String vectorTs = String.valueOf(Thread.currentThread().getId() + System.currentTimeMillis());
- StringBuilder fieldValueString = new StringBuilder("vector_ts=?,");
- queryObject.addValue(vectorTs);
- int counter = 0;
- for (Map.Entry<String, Object> entry : valuesMap.entrySet()) {
- Object valueObj = entry.getValue();
- DataType colType = null;
- try {
- colType = tableInfo.getColumn(entry.getKey()).getType();
- } catch(NullPointerException ex) {
- logger.error(EELFLoggerDelegate.errorLogger, ex, "Invalid column name : "+entry.getKey(), ex);
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).
- * setError("Invalid column name : "+entry.getKey()).toMap()).build();*/
-
- throw new MusicQueryException("Invalid column name : " + entry.getKey(),Status.BAD_REQUEST.getStatusCode());
- }
- Object valueString = null;
- try {
- valueString = MusicUtil.convertToActualDataType(colType, valueObj);
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger,e);
- }
- fieldValueString.append(entry.getKey() + "= ?");
- queryObject.addValue(valueString);
- if (counter != valuesMap.size() - 1) {
- fieldValueString.append(",");
- }
- counter = counter + 1;
- }
- String ttl = this.getTtl();
- String timestamp = this.getTimestamp();
-
- queryObject.appendQueryString("UPDATE " + this.getKeyspaceName() + "." + this.getTableName() + " ");
- if ((ttl != null) && (timestamp != null)) {
- logger.info("both there");
- queryObject.appendQueryString(" USING TTL ? AND TIMESTAMP ?");
- queryObject.addValue(Integer.parseInt(ttl));
- queryObject.addValue(Long.parseLong(timestamp));
- }
-
- if ((ttl != null) && (timestamp == null)) {
- logger.info("ONLY TTL there");
- queryObject.appendQueryString(" USING TTL ?");
- queryObject.addValue(Integer.parseInt(ttl));
- }
-
- if ((ttl == null) && (timestamp != null)) {
- logger.info("ONLY timestamp there");
- queryObject.appendQueryString(" USING TIMESTAMP ?");
- queryObject.addValue(Long.parseLong(timestamp));
- }
-
- // get the row specifier
- RowIdentifier rowId = null;
- try {
- rowId = getRowIdentifier(this.getKeyspaceName(), this.getTableName(), rowParams, queryObject);
- this.setRowIdString(rowId.rowIdString);
- this.setPrimarKeyValue(rowId.primarKeyValue);
- if(rowId == null || rowId.primarKeyValue.isEmpty()) {
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE)
- .setError("Mandatory WHERE clause is missing. Please check the input request.").toMap()).build();*/
-
- throw new MusicQueryException("Mandatory WHERE clause is missing. Please check the input request.",
- Status.BAD_REQUEST.getStatusCode());
- }
- } catch (MusicQueryException ex) {
- throw new MusicQueryException("Mandatory WHERE clause is missing. Please check the input request.",
- Status.BAD_REQUEST.getStatusCode());
-
- }catch (MusicServiceException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes
- .GENERALSERVICEERROR, ex);
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(ex.getMessage()).toMap()).build();*/
-
- throw new MusicQueryException(ex.getMessage(), Status.BAD_REQUEST.getStatusCode());
-
- }
-
-
-
- queryObject.appendQueryString(
- " SET " + fieldValueString + " WHERE " + rowId.rowIdString + ";");
-
-
-
- // get the conditional, if any
- Condition conditionInfo;
- if (this.getConditions() == null) {
- conditionInfo = null;
- } else {
- // to avoid parsing repeatedly, just send the select query to obtain row
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- selectQuery.appendQueryString("SELECT * FROM " + this.getKeyspaceName() + "." + this.getTableName() + " WHERE "
- + rowId.rowIdString + ";");
- selectQuery.addValue(rowId.primarKeyValue);
- conditionInfo = new Condition(this.getConditions(), selectQuery);
- }
-
- ReturnType operationResult = null;
- long jsonParseCompletionTime = System.currentTimeMillis();
-
- if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL) && this.getConsistencyInfo().get("consistency") != null) {
- if(MusicUtil.isValidConsistency(this.getConsistencyInfo().get("consistency"))) {
- queryObject.setConsistency(this.getConsistencyInfo().get("consistency"));
- } else {
- /*return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.SYNTAXERROR)
- .setError("Invalid Consistency type").toMap()).build();*/
-
- logger.error("Invalid Consistency type");
- throw new MusicQueryException("Invalid Consistency type", Status.BAD_REQUEST.getStatusCode());
- }
- }
-
- queryObject.setOperation("update");
-
- return queryObject;
- }
-
- 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;
- }
- }
-
- /**
- *
- * @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/eelf/healthcheck/MusicHealthCheck.java b/src/main/java/org/onap/music/eelf/healthcheck/MusicHealthCheck.java
deleted file mode 100644
index fbfc0de6..00000000
--- a/src/main/java/org/onap/music/eelf/healthcheck/MusicHealthCheck.java
+++ /dev/null
@@ -1,130 +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.eelf.healthcheck;
-
-import java.util.UUID;
-
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.MusicUtil;
-import org.onap.music.main.ResultType;
-import org.onap.music.main.MusicCore;
-
-import com.datastax.driver.core.ConsistencyLevel;
-
-/**
- * @author inam
- *
- */
-public class MusicHealthCheck {
-
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicUtil.class);
-
- private String cassandrHost;
-
- public String getCassandraStatus(String consistency) {
- logger.info(EELFLoggerDelegate.applicationLogger, "Getting Status for Cassandra");
-
- boolean result = false;
- UUID randomUUID = UUID.randomUUID();
- try {
- result = getAdminKeySpace(consistency, randomUUID);
- } catch( Exception e) {
- if(e.getMessage().toLowerCase().contains("unconfigured table healthcheck")) {
- logger.error("Error", e);
- logger.debug("Creating table....");
- try {
- boolean ksresult = createKeyspace();
- if(ksresult) {
- result = getAdminKeySpace(consistency, randomUUID);
- }
- } catch (MusicServiceException e1) {
- logger.error(EELFLoggerDelegate.errorLogger, e1.getMessage(), AppMessages.UNKNOWNERROR, ErrorSeverity.ERROR, ErrorTypes.UNKNOWN, e1);
- } catch (MusicQueryException e1) {
- logger.error(EELFLoggerDelegate.errorLogger, e1.getMessage(), AppMessages.UNKNOWNERROR, ErrorSeverity.ERROR, ErrorTypes.UNKNOWN,e1);
- }
- } else {
- logger.error("Error", e);
- return "One or more nodes are down or not responding.";
- }
- }
- try {
- cleanHealthCheckId(randomUUID);
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error("Error while cleaning healthcheck record id...", e);
- }
- if (result) {
- return "ACTIVE";
- } else {
- logger.info(EELFLoggerDelegate.applicationLogger, "Cassandra Service is not responding");
- return "INACTIVE";
- }
- }
-
- private Boolean getAdminKeySpace(String consistency, UUID randomUUID) throws MusicServiceException,MusicQueryException {
- PreparedQueryObject pQuery = new PreparedQueryObject();
- pQuery.appendQueryString("insert into admin.healthcheck (id) values (?)");
- pQuery.addValue(randomUUID);
- ResultType rs = null;
- rs = MusicCore.nonKeyRelatedPut(pQuery, consistency);
- logger.info(rs.toString());
- return null != rs;
-
- }
-
- private void cleanHealthCheckId(UUID randomUUID) throws MusicServiceException, MusicQueryException {
- String cleanQuery = "delete from admin.healthcheck where id = ?";
- PreparedQueryObject deleteQueryObject = new PreparedQueryObject();
- deleteQueryObject.appendQueryString(cleanQuery);
- deleteQueryObject.addValue(randomUUID);
- MusicDataStoreHandle.getDSHandle().executePut(deleteQueryObject, "eventual");
- logger.info(EELFLoggerDelegate.applicationLogger, "Cassandra healthcheck responded and cleaned up.");
- }
-
-
-
- private boolean createKeyspace() throws MusicServiceException,MusicQueryException {
- PreparedQueryObject pQuery = new PreparedQueryObject();
- pQuery.appendQueryString("CREATE TABLE admin.healthcheck (id uuid PRIMARY KEY)");
- ResultType rs = null ;
- rs = MusicCore.nonKeyRelatedPut(pQuery, ConsistencyLevel.ONE.toString());
- return rs != null && rs.getResult().toLowerCase().contains("success");
- }
-
- public String getCassandrHost() {
- return cassandrHost;
- }
-
- public void setCassandrHost(String cassandrHost) {
- this.cassandrHost = cassandrHost;
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/org/onap/music/eelf/logging/EELFLoggerDelegate.java b/src/main/java/org/onap/music/eelf/logging/EELFLoggerDelegate.java
deleted file mode 100644
index a8012c82..00000000
--- a/src/main/java/org/onap/music/eelf/logging/EELFLoggerDelegate.java
+++ /dev/null
@@ -1,381 +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.eelf.logging;
-
-import static com.att.eelf.configuration.Configuration.MDC_SERVER_FQDN;
-import static com.att.eelf.configuration.Configuration.MDC_SERVER_IP_ADDRESS;
-import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID;
-import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
-import java.net.InetAddress;
-import java.text.MessageFormat;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import javax.servlet.http.HttpServletRequest;
-import org.slf4j.MDC;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.att.eelf.configuration.SLF4jWrapper;
-
-public class EELFLoggerDelegate extends SLF4jWrapper implements EELFLogger {
-
- public static final EELFLogger errorLogger = EELFManager.getInstance().getErrorLogger();
- public static final EELFLogger applicationLogger =
- EELFManager.getInstance().getApplicationLogger();
- public static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
- public static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
- public static final EELFLogger debugLogger = EELFManager.getInstance().getDebugLogger();
- public static final EELFLogger securityLogger = EELFManager.getInstance().getSecurityLogger();
-
- private String className;
- private static ConcurrentMap<String, EELFLoggerDelegate> classMap = new ConcurrentHashMap<>();
-
- public EELFLoggerDelegate(final String className) {
- super(className);
- this.className = className;
- }
-
- /**
- * Convenience method that gets a logger for the specified class.
- *
- * @see #getLogger(String)
- *
- * @param clazz
- * @return Instance of EELFLoggerDelegate
- */
- public static EELFLoggerDelegate getLogger(Class<?> clazz) {
- return getLogger(clazz.getName());
- }
-
- /**
- * Gets a logger for the specified class name. If the logger does not already exist in the map,
- * this creates a new logger.
- *
- * @param className If null or empty, uses EELFLoggerDelegate as the class name.
- * @return Instance of EELFLoggerDelegate
- */
- public static EELFLoggerDelegate getLogger(final String className) {
- String classNameNeverNull = className == null || "".equals(className)
- ? EELFLoggerDelegate.class.getName()
- : className;
- EELFLoggerDelegate delegate = classMap.get(classNameNeverNull);
- if (delegate == null) {
- delegate = new EELFLoggerDelegate(className);
- classMap.put(className, delegate);
- }
- return delegate;
- }
-
- /**
- * Logs a message at the lowest level: trace.
- *
- * @param logger
- * @param msg
- */
- public void trace(EELFLogger logger, String msg) {
- if (logger.isTraceEnabled()) {
- logger.trace(msg);
- }
- }
-
- /**
- * Logs a message with parameters at the lowest level: trace.
- *
- * @param logger
- * @param msg
- * @param arguments
- */
- public void trace(EELFLogger logger, String msg, Object... arguments) {
- if (logger.isTraceEnabled()) {
- logger.trace(msg, arguments);
- }
- }
-
- /**
- * Logs a message and throwable at the lowest level: trace.
- *
- * @param logger
- * @param msg
- * @param th
- */
- public void trace(EELFLogger logger, String msg, Throwable th) {
- if (logger.isTraceEnabled()) {
- logger.trace(msg, th);
- }
- }
-
- /**
- * Logs a message at the second-lowest level: debug.
- *
- * @param logger
- * @param msg
- */
- public void debug(EELFLogger logger, String msg) {
- if (logger.isDebugEnabled()) {
- logger.debug(msg);
- }
- }
-
- /**
- * Logs a message with parameters at the second-lowest level: debug.
- *
- * @param logger
- * @param msg
- * @param arguments
- */
- public void debug(EELFLogger logger, String msg, Object... arguments) {
- if (logger.isDebugEnabled()) {
- logger.debug(msg, arguments);
- }
- }
-
- /**
- * Logs a message and throwable at the second-lowest level: debug.
- *
- * @param logger
- * @param msg
- * @param th
- */
- public void debug(EELFLogger logger, String msg, Throwable th) {
- if (logger.isDebugEnabled()) {
- logger.debug(msg, th);
- }
- }
-
- /**
- * Logs a message at info level.
- *
- * @param logger
- * @param msg
- */
- public void info(EELFLogger logger, String msg) {
- logger.info(className + " - "+msg);
- }
-
- /**
- * Logs a message with parameters at info level.
- *
- * @param logger
- * @param msg
- * @param arguments
- */
- public void info(EELFLogger logger, String msg, Object... arguments) {
- logger.info(msg, arguments);
- }
-
- /**
- * Logs a message and throwable at info level.
- *
- * @param logger
- * @param msg
- * @param th
- */
- public void info(EELFLogger logger, String msg, Throwable th) {
- logger.info(msg, th);
- }
-
- /**
- * Logs a message at warn level.
- *
- * @param logger
- * @param msg
- */
- public void warn(EELFLogger logger, String msg) {
- logger.warn(msg);
- }
-
- /**
- * Logs a message with parameters at warn level.
- *
- * @param logger
- * @param msg
- * @param arguments
- */
- public void warn(EELFLogger logger, String msg, Object... arguments) {
- logger.warn(msg, arguments);
- }
-
- /**
- * Logs a message and throwable at warn level.
- *
- * @param logger
- * @param msg
- * @param th
- */
- public void warn(EELFLogger logger, String msg, Throwable th) {
- logger.warn(msg, th);
- }
-
- /**
- * Logs a message at error level.
- *
- * @param logger
- * @param msg
- *
- */
- public void error(EELFLogger logger, String msg) {
- logger.error(className+ " - " + msg);
- }
-
- /**
- * Logs a message at error level.
- *
- * @param logger
- * @param msg
- */
- public void error(EELFLogger logger, Exception e) {
- logger.error(className+ " - ", e);
- }
-
- /**
- * Logs a message with parameters at error level.
- *
- * @param logger
- * @param msg
- * @param arguments
- *
- */
- public void error(EELFLogger logger, String msg, Object... arguments) {
- logger.error(msg, arguments);
- }
-
- /**
- * Logs a message with parameters at error level.
- *
- * @param logger
- * @param msg
- * @param arguments
- */
- public void error(EELFLogger logger, Exception e, Object... arguments) {
- logger.error("Exception", e, arguments);
- }
-
- /**
- * Logs a message and throwable at error level.
- *
- * @param logger
- * @param msg
- * @param th
- */
- public void error(EELFLogger logger, String msg, Throwable th) {
- logger.error(msg, th);
- }
-
- /**
- * Logs a message with the associated alarm severity at error level.
- *
- * @param logger
- * @param msg
- * @param severtiy
- */
- public void error(EELFLogger logger, String msg, Object /* AlarmSeverityEnum */ severtiy) {
- logger.error(msg);
- }
-
- /**
- * Initializes the logger context.
- */
- public void init() {
- setGlobalLoggingContext();
- final String msg =
- "############################ Logging is started. ############################";
- // These loggers emit the current date-time without being told.
- info(applicationLogger, msg);
- error(errorLogger, msg);
- debug(debugLogger, msg);
- info(auditLogger, msg);
- info(metricsLogger, msg);
- info(securityLogger, msg);
-
- }
-
- /**
- * Builds a message using a template string and the arguments.
- *
- * @param message
- * @param args
- * @return
- */
- private String formatMessage(String message, Object... args) {
- StringBuilder sbFormattedMessage = new StringBuilder();
- if (args != null && args.length > 0 && message != null && message != "") {
- MessageFormat mf = new MessageFormat(message);
- sbFormattedMessage.append(mf.format(args));
- } else {
- sbFormattedMessage.append(message);
- }
-
- return sbFormattedMessage.toString();
- }
-
- /**
- * Loads all the default logging fields into the MDC context.
- */
- private void setGlobalLoggingContext() {
- MDC.put(MDC_SERVICE_INSTANCE_ID, "");
- try {
- MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
- MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
- } catch (Exception e) {
- errorLogger.error("setGlobalLoggingContext failed", e);
- }
- }
-
- public static void mdcPut(String key, String value) {
- MDC.put(key, value);
- }
-
- public static String mdcGet(String key) {
- return MDC.get(key);
- }
-
- public static void mdcRemove(String key) {
- MDC.remove(key);
- }
-
- /**
- * Loads the RequestId/TransactionId into the MDC which it should be receiving with an each
- * incoming REST API request. Also, configures few other request based logging fields into the
- * MDC context.
- *
- * @param req
- * @param appName
- */
- public void setRequestBasedDefaultsIntoGlobalLoggingContext(HttpServletRequest req,
- String appName) {
- // Load the default fields
- setGlobalLoggingContext();
-
- // Load the request based fields
- if (req != null) {
- // Rest Path
- MDC.put(MDC_SERVICE_NAME, req.getServletPath());
-
- // Client IPAddress i.e. IPAddress of the remote host who is making
- // this request.
- String clientIPAddress = req.getHeader("X-FORWARDED-FOR");
- if (clientIPAddress == null) {
- clientIPAddress = req.getRemoteAddr();
- }
- }
- }
-}
diff --git a/src/main/java/org/onap/music/eelf/logging/MusicContainerFilter.java b/src/main/java/org/onap/music/eelf/logging/MusicContainerFilter.java
deleted file mode 100644
index bac02afa..00000000
--- a/src/main/java/org/onap/music/eelf/logging/MusicContainerFilter.java
+++ /dev/null
@@ -1,68 +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.eelf.logging;
-
-import java.io.IOException;
-
-import javax.ws.rs.container.ContainerRequestContext;
-import javax.ws.rs.container.ContainerResponseContext;
-import javax.ws.rs.container.ContainerResponseFilter;
-
-import org.springframework.stereotype.Component;
-
-
-/**
- * This filter filter/modifies outbound http responses just before sending back to client.
- *
- * @author sp931a
- *
- */
-@Component
-public class MusicContainerFilter implements ContainerResponseFilter {
-
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicContainerFilter.class);
-
- public MusicContainerFilter() {
-
- }
-
- @Override
- public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
- throws IOException {
- if (null != EELFLoggerDelegate.mdcGet("transactionId")) {
- EELFLoggerDelegate.mdcRemove("transactionId");
- }
-
- if (null != EELFLoggerDelegate.mdcGet("conversationId")) {
- EELFLoggerDelegate.mdcRemove("conversationId");
- }
-
- if (null != EELFLoggerDelegate.mdcGet("clientId")) {
- EELFLoggerDelegate.mdcRemove("clientId");
- }
-
- if (null != EELFLoggerDelegate.mdcGet("messageId")) {
- EELFLoggerDelegate.mdcRemove("messageId");
- }
- }
-
-}
diff --git a/src/main/java/org/onap/music/eelf/logging/MusicLoggingServletFilter.java b/src/main/java/org/onap/music/eelf/logging/MusicLoggingServletFilter.java
deleted file mode 100644
index c8c6ba65..00000000
--- a/src/main/java/org/onap/music/eelf/logging/MusicLoggingServletFilter.java
+++ /dev/null
@@ -1,207 +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.eelf.logging;
-
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.onap.music.authentication.AuthorizationError;
-import org.onap.music.main.MusicUtil;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- *
- * This is the first filter in the chain to be executed before cadi
- * authentication. The priority has been set in <code>MusicApplication</code>
- * through filter registration bean
- *
- * The responsibility of this filter is to validate header values as per
- * contract and write it to MDC and http response header back.
- *
- *
- * @author sp931a
- *
- */
-
-public class MusicLoggingServletFilter implements Filter {
-
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicLoggingServletFilter.class);
- // client transaction id, specific to client system, set in properties
- public static final String CONVERSATION_ID = MusicUtil.getConversationIdPrefix() + "ConversationId";
-
- // can be used as correlation-id in case of callback, also this can be passed to
- // other services for tracking.
- public static final String MESSAGE_ID = MusicUtil.getMessageIdPrefix() + "MessageId";
-
- // client id would be the unique client source-system-id, i;e VALET or CONDUCTOR
- // etc
- public static final String CLIENT_ID = MusicUtil.getClientIdPrefix() + "ClientId";
-
- // unique transaction of the source system
- private static final String TRANSACTION_ID = MusicUtil.getTransIdPrefix() + "Transaction-Id";
-
- public MusicLoggingServletFilter() throws ServletException {
- super();
- }
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
-
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
-
- logger.info(EELFLoggerDelegate.securityLogger,
- "In MusicLogginServletFilter doFilter start() :: [\"+MusicUtil.getTransIdRequired()+\",\"+MusicUtil.getConversationIdRequired()+\",\"+MusicUtil.getClientIdRequired()+\",\"+MusicUtil.getMessageIdRequired()");
-
- HttpServletRequest httpRequest = null;
- HttpServletResponse httpResponse = null;
- Map<String, String> headerMap = null;
- Map<String, String> upperCaseHeaderMap = null;
-
- if (null != request && null != response) {
- httpRequest = (HttpServletRequest) request;
- httpResponse = (HttpServletResponse) response;
-
- headerMap = getHeadersInfo(httpRequest);
-
- // The custom header values automatically converted into lower case, not sure
- // why ? So i had to covert all keys to upper case
- // The response header back to client will have all custom header values as
- // upper case.
- upperCaseHeaderMap = headerMap.entrySet().stream()
- .collect(Collectors.toMap(entry -> entry.getKey().toUpperCase(), entry -> entry.getValue()));
- // Enable/disable keys are present in /opt/app/music/etc/music.properties
-
- if (MusicUtil.getTransIdRequired()
- && !upperCaseHeaderMap.containsKey(TRANSACTION_ID.toUpperCase())) {
- populateError(httpResponse, "Transaction id '" + TRANSACTION_ID
- + "' required on http header");
- return;
- } else {
- populateMDCAndResponseHeader(upperCaseHeaderMap, TRANSACTION_ID, "transactionId",
- MusicUtil.getTransIdRequired(), httpResponse);
- }
-
- if (MusicUtil.getConversationIdRequired()
- && !upperCaseHeaderMap.containsKey(CONVERSATION_ID.toUpperCase())) {
- populateError(httpResponse, "Conversation Id '" + CONVERSATION_ID
- + "' required on http header");
- return;
- } else {
- populateMDCAndResponseHeader(upperCaseHeaderMap, CONVERSATION_ID, "conversationId",
- MusicUtil.getConversationIdRequired(), httpResponse);
- }
-
- if (MusicUtil.getMessageIdRequired()
- && !upperCaseHeaderMap.containsKey(MESSAGE_ID.toUpperCase())) {
- populateError(httpResponse, "Message Id '" + MESSAGE_ID
- + "' required on http header");
- return;
- } else {
- populateMDCAndResponseHeader(upperCaseHeaderMap, MESSAGE_ID, "messageId",
- MusicUtil.getMessageIdRequired(), httpResponse);
- }
-
- if (MusicUtil.getClientIdRequired()
- && !upperCaseHeaderMap.containsKey(CLIENT_ID.toUpperCase())) {
- populateError(httpResponse, "Client Id '" + CLIENT_ID
- + "' required on http header");
- return;
- } else {
- populateMDCAndResponseHeader(upperCaseHeaderMap, CLIENT_ID, "clientId",
- MusicUtil.getClientIdRequired(), httpResponse);
- }
-
- }
-
- logger.info(EELFLoggerDelegate.securityLogger,
- "In MusicLogginServletFilter doFilter. Header values validated sucessfully");
-
- chain.doFilter(request, response);
- }
-
- private void populateError(HttpServletResponse httpResponse, String errMsg) throws IOException {
- AuthorizationError authError = new AuthorizationError();
- authError.setResponseCode(HttpServletResponse.SC_BAD_REQUEST);
- authError.setResponseMessage(errMsg);
-
- byte[] responseToSend = restResponseBytes(authError);
- httpResponse.setHeader("Content-Type", "application/json");
-
- // ideally the http response code should be 200, as this is a biz validation
- // failure. For now, keeping it consistent with other places.
- httpResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- httpResponse.getOutputStream().write(responseToSend);
- }
-
- private void populateMDCAndResponseHeader(Map<String, String> headerMap, String idKey, String mdcKey,
- boolean isRequired, HttpServletResponse httpResponse) {
-
- idKey = idKey.trim().toUpperCase();
-
- // 1. setting the keys & value in MDC for future use 2.setting the values in
- // http response header back to client.
- if (isRequired && (headerMap.containsKey(idKey))) {
- EELFLoggerDelegate.mdcPut(mdcKey, headerMap.get(idKey));
- httpResponse.addHeader(idKey, headerMap.get(idKey));
- } else {
- // do nothing
- }
- }
-
- private Map<String, String> getHeadersInfo(HttpServletRequest request) {
-
- Map<String, String> map = new HashMap<String, String>();
-
- Enumeration<String> headerNames = request.getHeaderNames();
- while (headerNames.hasMoreElements()) {
- String key = (String) headerNames.nextElement();
- String value = request.getHeader(key);
- map.put(key, value);
- }
-
- return map;
- }
-
- private byte[] restResponseBytes(AuthorizationError eErrorResponse) throws IOException {
- String serialized = new ObjectMapper().writeValueAsString(eErrorResponse);
- return serialized.getBytes();
- }
-}
diff --git a/src/main/java/org/onap/music/eelf/logging/format/AppMessages.java b/src/main/java/org/onap/music/eelf/logging/format/AppMessages.java
deleted file mode 100644
index 5af3661c..00000000
--- a/src/main/java/org/onap/music/eelf/logging/format/AppMessages.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017 AT&T Intellectual Property
- * Copyright (c) 2019 IBM 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.eelf.logging.format;
-
-/**
- * @author inam
- *
- */
-public enum AppMessages {
-
-
-
- /*
- * 100-199 Security/Permission Related - Authentication problems
- * [ERR100E] Missing Information
- * [ERR101E] Authentication error occured
- *
- * 200-299 Availability/Timeout Related/IO - connectivity error - connection timeout
- * [ERR200E] Connectivity
- * [ERR201E] Host not available
- * [ERR202E] Error while connecting to Cassandra cluster
- * [ERR203E] IO Error has occured
- * [ERR204E] Execution Interrupted
- * [ERR205E] Session Expired
- * [ERR206E] Cache not authenticated
- *
- *
- * 300-399 Data Access/Integrity Related
- * [ERR300E] Incorrect data
- *
- * 400-499 - Cassandra Query Related
- * [ERR400E] Error while processing prepared query object
- * [ERR401E] Executing Session Failure for Request
- * [ERR402E] Ill formed queryObject for the request
- * [ERR403E] Error processing Prepared Query Object
- *
- * 500-599 - Locking Related
- * [ERR500E] Invalid lock
- * [ERR501E] Locking Error has occured
- * [ERR502E] Deprecated
- * [ERR503E] Failed to aquire lock store handle
- * [ERR504E] Failed to create Lock Reference
- * [ERR505E] Lock does not exist
- * [ERR506E] Failed to aquire lock
- * [ERR507E] Lock not aquired
- * [ERR508E] Lock state not set
- * [ERR509E] Lock not destroyed
- * [ERR510E] Lock not released
- * [ERR511E] Lock not deleted
- * [ERR512E] Deprecated
- *
- *
- * 600 - 699 - Music Service Errors
- * [ERR600E] Error initializing the cache
- *
- * 700-799 Schema Interface Type/Validation - received Pay-load checksum is
- * invalid - received JSON is not valid
- *
- * 800-899 Business/Flow Processing Related - check out to service is not
- * allowed - Roll-back is done - failed to generate heat file
- *
- *
- * 900-999 Unknown Errors - Unexpected exception
- * [ERR900E] Unexpected error occured
- * [ERR901E] Number format exception
- *
- *
- * 1000-1099 Reserved - do not use
- *
- */
-
-
-
-
- MISSINGINFO("[ERR100E]", "Missing Information ","Details: NA", "Please check application credentials and/or headers"),
- AUTHENTICATIONERROR("[ERR101E]", "Authentication error occured ","Details: NA", "Please verify application credentials"),
- CONNCECTIVITYERROR("[ERR200E]"," Connectivity error","Details: NA ","Please check connectivity to external resources"),
- HOSTUNAVAILABLE("[ERR201E]","Host not available","Details: NA","Please verify the host details"),
- CASSANDRACONNECTIVITY("[ERR202E]","Error while connecting to Cassandra cluster",""," Please check cassandra cluster details"),
- IOERROR("[ERR203E]","IO Error has occured","","Please check IO"),
- EXECUTIONINTERRUPTED("[ERR204E]"," Execution Interrupted","",""),
- SESSIONEXPIRED("[ERR205E]"," Session Expired","","Session has expired."),
- CACHEAUTHENTICATION("[ERR206E]","Cache not authenticated",""," Cache not authenticated"),
-
- INCORRECTDATA("[ERR300E]"," Incorrect data",""," Please verify the request payload and try again"),
- MULTIPLERECORDS("[ERR301E]"," Multiple records found",""," Please verify the request payload and try again"),
- ALREADYEXIST("[ERR302E]"," Record already exist",""," Please verify the request payload and try again"),
- MISSINGDATA("[ERR300E]"," Incorrect data",""," Please verify the request payload and try again"),
-
- QUERYERROR("[ERR400E]","Error while processing prepared query object",""," Please verify the query"),
- SESSIONFAILED("[ERR401E]","Executing Session Failure for Request","","Please verify the session and request"),
-
- INVALIDLOCK("[ERR500E]"," Invalid lock or acquire failed",""," Lock is not valid to aquire"),
- LOCKINGERROR("[ERR501E]"," Locking Error has occured",""," Locking Error has occured"),
- LOCKHANDLE("[ERR503E]","Failed to aquire lock store handle",""," Failed to aquire lock store handle"),
- CREATELOCK("[ERR504E]","Failed to aquire lock store handle ","","Failed to aquire lock store handle "),
- LOCKSTATE("[ERR508E]"," Lock state not set",""," Lock state not set"),
- DESTROYLOCK("[ERR509E]"," Lock not destroyed",""," Lock not destroyed"),
- RELEASELOCK("[ERR510E]"," Lock not released",""," Lock not released"),
- DELTELOCK("[ERR511E]",""," Lock not deleted "," Lock not deleted "),
- CACHEERROR("[ERR600E]"," Error initializing the cache",""," Error initializing the cache"),
-
- UNKNOWNERROR("[ERR900E]"," Unexpected error occured",""," Please check logs for details");
-
-
-
-
- private ErrorTypes eType;
- private ErrorSeverity alarmSeverity;
- private ErrorSeverity errorSeverity;
- private String errorCode;
- private String errorDescription;
- private String details;
- private String resolution;
-
-
- AppMessages(String errorCode, String errorDescription, String details,String resolution) {
-
- this.errorCode = errorCode;
- this.errorDescription = errorDescription;
- this.details = details;
- this.resolution = resolution;
- }
-
-
- public ErrorTypes getEType() {
- return eType;
- }
-
- public ErrorSeverity getAlarmSeverity() {
- return alarmSeverity;
- }
- public ErrorSeverity getErrorSeverity() {
- return errorSeverity;
- }
-
- public void setDetails(String details){ this.details=details; }
-
- public String getDetails() {
- return this.details;
- }
-
- public void setResolution(String resolution){ this.resolution=resolution; }
-
- public String getResolution() {
- return this.resolution;
- }
-
- public void setErrorCode(String errorCode){ this.errorCode=errorCode; }
-
- public String getErrorCode() {
- return this.errorCode;
- }
-
- public void setErrorDescription(String errorDescription){ this.errorDescription=errorDescription; }
-
- public String getErrorDescription() {
- return this.errorDescription;
- }
-
-
-
-
-
-
-
-}
diff --git a/src/main/java/org/onap/music/eelf/logging/format/ErrorCodes.java b/src/main/java/org/onap/music/eelf/logging/format/ErrorCodes.java
deleted file mode 100644
index 91ee3473..00000000
--- a/src/main/java/org/onap/music/eelf/logging/format/ErrorCodes.java
+++ /dev/null
@@ -1,107 +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.eelf.logging.format;
-
-
-
-/**
- * @author inam
- *
- */
-public enum ErrorCodes {
-
-
- /*
- * 100-199 Security/Permission Related - Authentication problems
- * [ERR100E] Missing Information
- * [ERR101E] Authentication error occured
- *
- * 200-299 Availability/Timeout Related/IO - connectivity error - connection timeout
- * [ERR200E] Connectivity
- * [ERR201E] Host not available
- * [ERR202E] Error while connecting to Cassandra cluster
- * [ERR203E] IO Error has occured
- * [ERR204E] Execution Interrupted
- * [ERR205E] Session Expired
- * [ERR206E] Cache not authenticated
- *
- *
- * 300-399 Data Access/Integrity Related
- *
- * 400-499 - Cassandra Query Related
- * [ERR400E] Error while processing prepared query object
- * [ERR401E] Executing Session Failure for Request
- * [ERR402E] Ill formed queryObject for the request
- * [ERR403E] Error processing Prepared Query Object
- *
- * 500-599 - Zookeepr/Locking Related
- * [ERR500E] Invalid lock
- * [ERR501E] Locking Error has occured
- * [ERR502E] Zookeeper error has occured
- * [ERR503E] Failed to aquire lock store handle
- * [ERR504E] Failed to create Lock Reference
- * [ERR505E] Lock does not exist
- * [ERR506E] Failed to aquire lock
- * [ERR507E] Lock not aquired
- * [ERR508E] Lock state not set
- * [ERR509E] Lock not destroyed
- * [ERR510E] Lock not released
- * [ERR511E] Lock not deleted
- * [ERR512E] Failed to get Lock Handle
- *
- *
- * 600 - 699 - Music Service Errors
- * [ERR600E] Error initializing the cache
- *
- * 700-799 Schema Interface Type/Validation - received Pay-load checksum is
- * invalid - received JSON is not valid
- *
- * 800-899 Business/Flow Processing Related - check out to service is not
- * allowed - Roll-back is done - failed to generate heat file
- *
- *
- * 900-999 Unknown Errors - Unexpected exception
- * [ERR900E] Unexpected error occured
- * [ERR901E] Number format exception
- *
- *
- * 1000-1099 Reserved - do not use
- *
- */
-
- /*SUCCESS("Success"), FAILURE("Failure");
-
- private String result;
-
- ResultType(String result) {
- this.result = result;
- }
-
- public String getResult() {
- return result;
- }
-*/
-
-
-
-}
diff --git a/src/main/java/org/onap/music/eelf/logging/format/ErrorSeverity.java b/src/main/java/org/onap/music/eelf/logging/format/ErrorSeverity.java
deleted file mode 100644
index 4e798239..00000000
--- a/src/main/java/org/onap/music/eelf/logging/format/ErrorSeverity.java
+++ /dev/null
@@ -1,38 +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.eelf.logging.format;
-
-/**
- * @author inam
- *
- */
-public enum ErrorSeverity {
- INFO,
- WARN,
- ERROR,
- FATAL,
- CRITICAL,
- MAJOR,
- MINOR,
- NONE,
-}
diff --git a/src/main/java/org/onap/music/eelf/logging/format/ErrorTypes.java b/src/main/java/org/onap/music/eelf/logging/format/ErrorTypes.java
deleted file mode 100644
index 9bdbf20f..00000000
--- a/src/main/java/org/onap/music/eelf/logging/format/ErrorTypes.java
+++ /dev/null
@@ -1,46 +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.eelf.logging.format;
-
-import com.att.eelf.i18n.EELFResolvableErrorEnum;
-
-/**
- * @author inam
- *
- */
-public enum ErrorTypes implements EELFResolvableErrorEnum {
-
-
- CONNECTIONERROR,
- SESSIONEXPIRED,
- AUTHENTICATIONERROR,
- CACHEERROR,
- SERVICEUNAVAILABLE,
- QUERYERROR,
- DATAERROR,
- GENERALSERVICEERROR,
- MUSICSERVICEERROR,
- LOCKINGERROR,
- UNKNOWN,
-
-}
diff --git a/src/main/java/org/onap/music/exceptions/MusicAuthenticationException.java b/src/main/java/org/onap/music/exceptions/MusicAuthenticationException.java
deleted file mode 100644
index ab44fd6e..00000000
--- a/src/main/java/org/onap/music/exceptions/MusicAuthenticationException.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2019 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.exceptions;
-
-/**
- * @author inam
- *
- */
-public class MusicAuthenticationException extends Exception {
-
- /**
- *
- */
- public MusicAuthenticationException() {
-
- }
-
- /**
- * @param message
- */
- public MusicAuthenticationException(String message) {
- super(message);
-
- }
-
- /**
- * @param cause
- */
- public MusicAuthenticationException(Throwable cause) {
- super(cause);
-
- }
-
- /**
- * @param message
- * @param cause
- */
- public MusicAuthenticationException(String message, Throwable cause) {
- super(message, cause);
-
- }
-
- /**
- * @param message
- * @param cause
- * @param enableSuppression
- * @param writableStackTrace
- */
- public MusicAuthenticationException(String message, Throwable cause, boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
-
- }
-
-}
diff --git a/src/main/java/org/onap/music/exceptions/MusicDeadlockException.java b/src/main/java/org/onap/music/exceptions/MusicDeadlockException.java
deleted file mode 100644
index f5478e78..00000000
--- a/src/main/java/org/onap/music/exceptions/MusicDeadlockException.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2019 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.exceptions;
-
-public class MusicDeadlockException extends MusicLockingException {
-
- public String owner = null;
- public String keyspace = null;
- public String table = null;
- public String key = null;
-
- public MusicDeadlockException() {
- super();
- }
-
- public MusicDeadlockException(String message) {
- super(message);
- }
-
- public MusicDeadlockException(Throwable cause) {
- super(cause);
- }
-
- public MusicDeadlockException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public MusicDeadlockException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-
- public void setValues(String owner, String keyspace, String table, String key) {
- this.owner = owner;
- this.keyspace = keyspace;
- this.table = table;
- this.key = key;
- }
-
- public String getOwner() {
- return owner;
- }
-
- public String getKeyspace() {
- return keyspace;
- }
-
- public String getTable() {
- return table;
- }
-
- public String getKey() {
- return key;
- }
-
-
-}
diff --git a/src/main/java/org/onap/music/exceptions/MusicExceptionMapper.java b/src/main/java/org/onap/music/exceptions/MusicExceptionMapper.java
deleted file mode 100644
index c31fcf73..00000000
--- a/src/main/java/org/onap/music/exceptions/MusicExceptionMapper.java
+++ /dev/null
@@ -1,56 +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.exceptions;
-
-import java.io.EOFException;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
-
-import org.codehaus.jackson.map.exc.UnrecognizedPropertyException;
-import org.onap.music.main.ResultType;
-import org.onap.music.response.jsonobjects.JsonResponse;
-
-@Provider
-public class MusicExceptionMapper implements ExceptionMapper<Exception> {
- @Override
- public Response toResponse(Exception exception) {
- if(exception instanceof UnrecognizedPropertyException) {
- return Response.status(Response.Status.BAD_REQUEST).
- entity(new JsonResponse(ResultType.FAILURE).setError("Unknown field :"+((UnrecognizedPropertyException) exception).getUnrecognizedPropertyName()).toMap()).
- build();
- } else if(exception instanceof EOFException) {
- return Response.status(Response.Status.BAD_REQUEST).
- entity(new JsonResponse(ResultType.FAILURE).setError("Request body cannot be empty").toMap()).
- build();
- } else if(exception instanceof NullPointerException) {
- return Response.status(Response.Status.BAD_REQUEST).
- entity(new JsonResponse(ResultType.FAILURE).setError("NullPointerException - Please check to make sure all inputs are valid.").toMap()).
- build();
- } else {
- return Response.status(Response.Status.BAD_REQUEST).
- entity(new JsonResponse(ResultType.FAILURE).setError(exception.getMessage()).toMap()).
- build();
- }
- }
-}
diff --git a/src/main/java/org/onap/music/exceptions/MusicLockingException.java b/src/main/java/org/onap/music/exceptions/MusicLockingException.java
deleted file mode 100644
index ab70c54c..00000000
--- a/src/main/java/org/onap/music/exceptions/MusicLockingException.java
+++ /dev/null
@@ -1,75 +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.exceptions;
-
-/**
- * @author inam
- *
- */
-public class MusicLockingException extends Exception {
-
- /**
- *
- */
- public MusicLockingException() {
-
- }
-
- /**
- * @param message
- */
- public MusicLockingException(String message) {
- super(message);
-
- }
-
- /**
- * @param cause
- */
- public MusicLockingException(Throwable cause) {
- super(cause);
-
- }
-
- /**
- * @param message
- * @param cause
- */
- public MusicLockingException(String message, Throwable cause) {
- super(message, cause);
-
- }
-
- /**
- * @param message
- * @param cause
- * @param enableSuppression
- * @param writableStackTrace
- */
- public MusicLockingException(String message, Throwable cause, boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
-
- }
-
-}
diff --git a/src/main/java/org/onap/music/exceptions/MusicPolicyVoilationException.java b/src/main/java/org/onap/music/exceptions/MusicPolicyVoilationException.java
deleted file mode 100644
index f489cd45..00000000
--- a/src/main/java/org/onap/music/exceptions/MusicPolicyVoilationException.java
+++ /dev/null
@@ -1,82 +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.exceptions;
-
-/**
- * @author inam
- *
- */
-public class MusicPolicyVoilationException extends Exception {
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- /**
- *
- */
- public MusicPolicyVoilationException() {
-
- }
-
- /**
- * @param message
- */
- public MusicPolicyVoilationException(String message) {
- super(message);
-
- }
-
- /**
- * @param cause
- */
- public MusicPolicyVoilationException(Throwable cause) {
- super(cause);
-
- }
-
- /**
- * @param message
- * @param cause
- */
- public MusicPolicyVoilationException(String message, Throwable cause) {
- super(message, cause);
-
- }
-
- /**
- * @param message
- * @param cause
- * @param enableSuppression
- * @param writableStackTrace
- */
- public MusicPolicyVoilationException(String message, Throwable cause, boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
-
- }
-
-}
diff --git a/src/main/java/org/onap/music/exceptions/MusicQueryException.java b/src/main/java/org/onap/music/exceptions/MusicQueryException.java
deleted file mode 100644
index 803f993f..00000000
--- a/src/main/java/org/onap/music/exceptions/MusicQueryException.java
+++ /dev/null
@@ -1,90 +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.exceptions;
-
-
-
-/**
- * @author inam
- *
- */
-public class MusicQueryException extends Exception {
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private int errorCode;
-
-
- /**
- *
- */
- public MusicQueryException() {
- super();
- }
-
- /**
- * @param message
- */
- public MusicQueryException(String message) {
- super(message);
- }
-
-
-
- /**
- * @param message
- */
- public MusicQueryException(String message, int errorCode) {
- super(message);
- this.errorCode = errorCode;
- }
-
- /**
- * @param cause
- */
- public MusicQueryException(Throwable cause) {
- super(cause);
- }
-
- /**
- * @param message
- * @param cause
- */
- public MusicQueryException(String message, Throwable cause) {
- super(message, cause);
- }
-
- /**
- * @param message
- * @param cause
- * @param enableSuppression
- * @param writableStackTrace
- */
- public MusicQueryException(String message, Throwable cause, boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-
-}
diff --git a/src/main/java/org/onap/music/exceptions/MusicServiceException.java b/src/main/java/org/onap/music/exceptions/MusicServiceException.java
deleted file mode 100644
index 76e1f948..00000000
--- a/src/main/java/org/onap/music/exceptions/MusicServiceException.java
+++ /dev/null
@@ -1,88 +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.exceptions;
-
-/**
- * @author inam
- *
- */
-public class MusicServiceException extends Exception {
-
-
- private int errorCode;
- private String errorMessage;
-
- public MusicServiceException() {
- super();
- }
-
-
- public MusicServiceException(String message) {
- super(message);
-
- }
-
- public MusicServiceException(String message, int errorCode) {
- super(message);
- this.errorCode=errorCode;
- }
-
- public MusicServiceException(String message, int errorCode, String errorMessage) {
- super(message);
- this.errorCode=errorCode;
- this.errorMessage=errorMessage;
- }
-
- public MusicServiceException(Throwable cause) {
- super(cause);
-
- }
-
-
- public MusicServiceException(String message, Throwable cause) {
- super(message, cause);
-
- }
-
-
- public MusicServiceException(String message, Throwable cause, boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
-
- }
- public void setErrorCode(int errorCode) {
- this.errorCode=errorCode;
- }
-
- public int getErrorCode() {
- return errorCode;
- }
- public void setErrorMessage(String errorMessage) {
- this.errorMessage=errorMessage;
- }
- public String getErrorMessage() {
- return errorMessage;
- }
-}
diff --git a/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java b/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java
deleted file mode 100644
index 10898476..00000000
--- a/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java
+++ /dev/null
@@ -1,604 +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.lockingservice.cassandra;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.onap.music.datastore.MusicDataStore;
-import org.onap.music.datastore.PreparedQueryObject;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.exceptions.MusicLockingException;
-import org.onap.music.exceptions.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.DeadlockDetectionUtil;
-import org.onap.music.main.DeadlockDetectionUtil.OwnershipType;
-import org.onap.music.main.MusicUtil;
-import org.onap.music.main.ResultType;
-import org.onap.music.main.ReturnType;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
-import com.datastax.driver.extras.codecs.enums.EnumNameCodec;
-
-/*
- * This is the lock store that is built on top of Cassandra that is used by MUSIC to maintain lock state.
- */
-
-public class CassaLockStore {
-
- private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CassaLockStore.class);
- private static String table_prepend_name = "lockQ_";
- private MusicDataStore dsHandle;
-
- public CassaLockStore() {
- dsHandle = new MusicDataStore();
- }
-
- public CassaLockStore(MusicDataStore dsHandle) {
- this.dsHandle=dsHandle;
- }
- public class LockObject{
- private boolean isLockOwner;
- private String lockRef;
- private String createTime;
- private String acquireTime;
- private LockType locktype;
- // Owner is the self-declared client which "owns" this row. It is used for deadlock detection. It is not (directly) related to isLockOwner.
- private String owner;
- public LockObject(boolean isLockOwner, String lockRef, String createTime, String acquireTime, LockType locktype, String owner) {
- this.setIsLockOwner(isLockOwner);
- this.setLockRef(lockRef);
- this.setAcquireTime(acquireTime);
- this.setCreateTime(createTime);
- this.setLocktype(locktype);
- this.setOwner(owner);
- }
- public boolean getIsLockOwner() {
- return isLockOwner;
- }
- public void setIsLockOwner(boolean isLockOwner) {
- this.isLockOwner = isLockOwner;
- }
- public String getAcquireTime() {
- return acquireTime;
- }
- public void setAcquireTime(String acquireTime) {
- this.acquireTime = acquireTime;
- }
- public String getCreateTime() {
- return createTime;
- }
- public void setCreateTime(String createTime) {
- this.createTime = createTime;
- }
- public String getLockRef() {
- return lockRef;
- }
- public void setLockRef(String lockRef) {
- this.lockRef = lockRef;
- }
- public LockType getLocktype() {
- return locktype;
- }
- public void setLocktype(LockType locktype) {
- this.locktype = locktype;
- }
- public String getOwner() {
- return owner;
- }
- public void setOwner(String owner) {
- this.owner = owner;
- }
- }
-
- /**
- *
- * This method creates a shadow locking table for every main table in Cassandra. This table tracks all information regarding locks.
- * @param keyspace of the application.
- * @param table of the application.
- * @return true if the operation was successful.
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public boolean createLockQueue(String keyspace, String table) throws MusicServiceException, MusicQueryException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Create lock queue/table for " + keyspace+"."+table);
- table = table_prepend_name+table;
- String tabQuery = "CREATE TABLE IF NOT EXISTS "+keyspace+"."+table
- + " ( key text, lockReference bigint, createTime text, acquireTime text, guard bigint static, "
- + "lockType text, owner text, PRIMARY KEY ((key), lockReference) ) "
- + "WITH CLUSTERING ORDER BY (lockReference ASC);";
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- queryObject.appendQueryString(tabQuery);
- boolean result;
- result = dsHandle.executePut(queryObject, "eventual");
- return result;
- }
-
- /**
- * This method creates a lock reference for each invocation. The lock references are monotonically increasing timestamps.
- * @param keyspace of the locks.
- * @param table of the locks.
- * @param lockName is the primary key of the lock table
- * @param lockType is the type of lock (read/write)
- * @param owner is the owner of the lock (optional, for deadlock detection)
- * @return the UUID lock reference.
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public String genLockRefandEnQueue(String keyspace, String table, String lockName, LockType locktype, String owner) throws MusicServiceException, MusicQueryException, MusicLockingException {
- return genLockRefandEnQueue(keyspace, table, lockName, locktype, owner, 0);
- }
-
- private String genLockRefandEnQueue(String keyspace, String table, String lockName, LockType locktype, String owner, int count) throws MusicServiceException, MusicQueryException, MusicLockingException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Create " + locktype + " lock reference for " + keyspace + "." + table + "." + lockName);
- String lockTable ="";
- lockTable = table_prepend_name+table;
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
- String selectQuery = "SELECT guard FROM " + keyspace + "." + lockTable + " WHERE key=?;";
-
- queryObject.addValue(lockName);
- queryObject.appendQueryString(selectQuery);
- ResultSet gqResult = dsHandle.executeOneConsistencyGet(queryObject);
- List<Row> latestGuardRow = gqResult.all();
-
- long prevGuard = 0;
- long lockRef = 1;
- if (!latestGuardRow.isEmpty()) {
- prevGuard = latestGuardRow.get(0).getLong(0);
- lockRef = prevGuard + 1;
- }
-
- long lockEpochMillis = System.currentTimeMillis();
-
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Created lock reference for " + keyspace + "." + lockTable + "." + lockName + ":" + lockRef);
-
- queryObject = new PreparedQueryObject();
-
- String insQuery = "BEGIN BATCH" +
- " UPDATE " + keyspace + "." + lockTable +
- " SET guard=? WHERE key=? IF guard = " + (prevGuard == 0 ? "NULL" : "?") +";" +
- " INSERT INTO " + keyspace + "." + lockTable +
- "(key, lockReference, createTime, acquireTime, lockType, owner) VALUES (?,?,?,?,?,?) IF NOT EXISTS; APPLY BATCH;";
-
- queryObject.addValue(lockRef);
- queryObject.addValue(lockName);
- if (prevGuard != 0)
- queryObject.addValue(prevGuard);
-
- queryObject.addValue(lockName);
- queryObject.addValue(lockRef);
- queryObject.addValue(String.valueOf(lockEpochMillis));
- queryObject.addValue("0");
- queryObject.addValue(locktype);
- queryObject.addValue(owner);
- queryObject.appendQueryString(insQuery);
- boolean pResult = dsHandle.executePut(queryObject, "critical");
- if (!pResult) {// couldn't create lock ref, retry
- count++;
- if (count > MusicUtil.getRetryCount()) {
- logger.warn(EELFLoggerDelegate.applicationLogger, "Unable to create lock reference");
- throw new MusicLockingException("Unable to create lock reference");
- }
- return genLockRefandEnQueue(keyspace, table, lockName, locktype, owner, count);
- }
- return "$" + keyspace + "." + table + "." + lockName + "$" + String.valueOf(lockRef);
- }
-
- /**
- * Returns a result set containing the list of clients waiting for a particular lock
- *
- * @param keyspace
- * @param table
- * @param key
- * @return list of lockrefs in the queue
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public List<String> getLockQueue(String keyspace, String table, String key)
- throws MusicServiceException, MusicQueryException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Getting the queue for " + keyspace + "." + table + "." + key);
- table = table_prepend_name + table;
- String selectQuery = "select * from " + keyspace + "." + table + " where key='" + key + "';";
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(selectQuery);
- ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject);
- ArrayList<String> lockQueue = new ArrayList<>();
- for (Row row : rs) {
- lockQueue.add(Long.toString(row.getLong("lockReference")));
- }
- return lockQueue;
- }
-
-
- /**
- * Returns a result set containing the list of clients waiting for a particular lock
- *
- * @param keyspace
- * @param table
- * @param key
- * @return size of lockrefs queue
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public long getLockQueueSize(String keyspace, String table, String key)
- throws MusicServiceException, MusicQueryException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Getting the queue size for " + keyspace + "." + table + "." + key);
- table = table_prepend_name + table;
- String selectQuery = "select count(*) from " + keyspace + "." + table + " where key='" + key + "';";
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(selectQuery);
- ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject);
- return rs.one().getLong("count");
- }
-
-
- /**
- * This method returns the top of lock table/queue for the key.
- *
- * @param keyspace of the application.
- * @param table of the application.
- * @param key is the primary key of the application table
- * @return the UUID lock reference. Returns LockObject.isLockOwner=false if there is no owner or the
- * lock doesn't exist
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public LockObject peekLockQueue(String keyspace, String table, String key)
- throws MusicServiceException, MusicQueryException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Peek in lock table for " + keyspace + "." + table + "." + key);
- table = table_prepend_name + table;
- String selectQuery = "select * from " + keyspace + "." + table + " where key='" + key + "' LIMIT 1;";
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(selectQuery);
- ResultSet results = dsHandle.executeOneConsistencyGet(queryObject);
- Row row = results.one();
- if (row == null || row.isNull("lockReference")) {
- return new LockObject(false, null, null, null, null, null);
- }
- String lockReference = "" + row.getLong("lockReference");
- String createTime = row.getString("createTime");
- String acquireTime = row.getString("acquireTime");
- LockType locktype = row.get("lockType", LockType.class);
- String owner = row.getString("owner");
-
- return new LockObject(true, lockReference, createTime, acquireTime, locktype, owner);
- }
-
- public List<String> getCurrentLockHolders(String keyspace, String table, String key)
- throws MusicServiceException, MusicQueryException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Getting lockholders in lock table for " + keyspace + "." + table + "." + key);
- String origTable = table;
- table = table_prepend_name + table;
- String selectQuery = "select * from " + keyspace + "." + table + " where key=?;";
- List<String> lockHolders = new ArrayList<>();
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(selectQuery);
- queryObject.addValue(key);
- ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject);
- boolean topOfQueue = true;
- StringBuilder lock = new StringBuilder().
- append("$").append(keyspace).append(".").append(origTable).
- append(".").append(key).append("$");
- StringBuilder lockReference = new StringBuilder();
- for (Row row : rs) {
- if ( row.isNull("lockReference") ) {
- return lockHolders;
- }
- lockReference.append(lock).append(row.getLong("lockReference"));
- if (row.get("lockType", LockType.class)!=LockType.WRITE) {
- if (topOfQueue) {
- lockHolders.add(lockReference.toString());
- break;
- } else {
- break;
- }
- }
- // read lock
- lockHolders.add(lockReference.toString());
-
- topOfQueue = false;
- lockReference.delete(0,lockReference.length());
- }
- return lockHolders;
- }
-
- /**
- * Determine if the lock is a valid current lock holder.
- *
- * @param keyspace
- * @param table
- * @param key
- * @param lockRef
- * @return true if lockRef is a lock owner of key
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public boolean isLockOwner(String keyspace, String table, String key, String lockRef)
- throws MusicServiceException, MusicQueryException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Checking in lock table for " + keyspace + "." + table + "." + key);
- table = table_prepend_name + table;
- String selectQuery =
- "select * from " + keyspace + "." + table + " where key=?;";
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(selectQuery);
- queryObject.addValue(key);
- ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject);
-
- boolean topOfQueue = true;
- for (Row row : rs) {
- String lockReference = "" + row.getLong("lockReference");
- if (row.get("lockType", LockType.class)==LockType.WRITE) {
- if (topOfQueue && lockRef.equals(lockReference)) {
- return true;
- } else {
- return false;
- }
- }
- if (lockRef.equals(lockReference)) {
- return true;
- }
- topOfQueue = false;
- }
- logger.info(EELFLoggerDelegate.applicationLogger, "Could not find " + lockRef
- + " in the lock queue. It has expired and no longer exists.");
- return false;
- }
-
- /**
- * Determine if the lock is a valid current lock holder.
- *
- * @param keyspace
- * @param table
- * @param key
- * @param lockRef
- * @return true if lockRef is a lock owner of key
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public LockObject getLockInfo(String keyspace, String table, String key, String lockRef)
- throws MusicServiceException, MusicQueryException {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Checking in lock table for " + keyspace + "." + table + "." + key);
- String lockQ_table = table_prepend_name + table;
- String selectQuery =
- "select * from " + keyspace + "." + lockQ_table + " where key=? and lockReference=?;";
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(selectQuery);
- queryObject.addValue(key);
- queryObject.addValue(Long.parseLong(lockRef));
- ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject);
- Row row = rs.one();
- if (row == null || row.isNull("lockReference")) {
- return null;
- }
-
- String lockReference = "" + row.getLong("lockReference");
- String createTime = row.getString("createTime");
- String acquireTime = row.getString("acquireTime");
- LockType locktype = row.get("lockType", LockType.class);
- boolean isLockOwner = isLockOwner(keyspace, table, key, lockRef);
- String owner = row.getString("owner");
-
- return new LockObject(isLockOwner, lockReference, createTime, acquireTime, locktype, owner);
- }
-
-
-
- /**
- * This method removes the lock ref from the lock table/queue for the key.
- *
- * @param keyspace of the application.
- * @param table of the application.
- * @param key is the primary key of the application table
- * @param lockReference the lock reference that needs to be dequeued.
- * @throws MusicServiceException
- * @throws MusicQueryException
- * @throws MusicLockingException
- */
- public void deQueueLockRef(String keyspace, String table, String key, String lockReference, int n)
- throws MusicServiceException, MusicQueryException, MusicLockingException {
- String prependTable = table_prepend_name + table;
- PreparedQueryObject queryObject = new PreparedQueryObject();
- Long lockReferenceL = Long.parseLong(lockReference.substring(lockReference.lastIndexOf("$") + 1));
- String deleteQuery = "delete from " + keyspace + "." + prependTable + " where key='" + key
- + "' AND lockReference =" + lockReferenceL + " IF EXISTS;";
- queryObject.appendQueryString(deleteQuery);
- logger.info(EELFLoggerDelegate.applicationLogger, "Removing lock for key: "+key+ " and reference: "+lockReference);
- try {
- dsHandle.executePut(queryObject, "critical");
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Lock removed for key: " + key + " and reference: " + lockReference);
- } catch (MusicServiceException ex) {
- logger.error(logger, ex.getMessage(), ex);
- logger.error(EELFLoggerDelegate.applicationLogger,
- "Exception while deQueueLockRef for lockname: " + key + " reference:" + lockReference);
- if (n > 1) {
- logger.info(EELFLoggerDelegate.applicationLogger, "Trying again...");
- deQueueLockRef(keyspace, table, key, lockReference, n - 1);
- } else {
- logger.error(EELFLoggerDelegate.applicationLogger,
- "deQueueLockRef failed for lockname: " + key + " reference:" + lockReference);
- logger.error(logger, ex.getMessage(), ex);
- throw new MusicLockingException("Error while deQueueLockRef: " + ex.getMessage());
- }
- }
- }
-
-
- public void updateLockAcquireTime(String keyspace, String table, String key, String lockReference) {
- table = table_prepend_name + table;
- Long lockReferenceL = Long.parseLong(lockReference);
- String updateQuery = "update " + keyspace + "." + table + " set acquireTime='" + System.currentTimeMillis()
- + "' where key='" + key + "' AND lockReference = " + lockReferenceL + " IF EXISTS;";
-
- //cannot use executePut because we need to ignore music timestamp adjustments for lock store
- dsHandle.getSession().execute(updateQuery);
- }
-
- public boolean checkForDeadlock(String keyspace, String table, String lockName, LockType locktype, String owner, boolean forAcquire) throws MusicServiceException, MusicQueryException {
- if (locktype.equals(LockType.READ)) return false;
- if (owner==null || owner.length()==0) return false;
-
- String lockTable = table_prepend_name + table;
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString("SELECT key, acquiretime, owner FROM " + keyspace + "." + lockTable);
- queryObject.appendQueryString(" WHERE lockType = ? ALLOW FILTERING");
- queryObject.addValue(LockType.WRITE);
-
- DeadlockDetectionUtil ddu = new DeadlockDetectionUtil();
-
- ResultSet rs = dsHandle.executeQuorumConsistencyGet(queryObject);
- logger.debug("rs has " + rs.getAvailableWithoutFetching() + (rs.isFullyFetched()?"":" (or more!)") );
- Iterator<Row> it = rs.iterator();
- while (it.hasNext()) {
- Row row = it.next();
- logger.debug("key = " + row.getString("key") + ", time = " + row.getString("acquiretime") + ", owner = " + row.getString("owner") );
- ddu.setExisting(row.getString("key"), row.getString("owner"), ("0".equals(row.getString("acquiretime")))?OwnershipType.CREATED:OwnershipType.ACQUIRED);
- }
- boolean deadlock = ddu.checkForDeadlock(lockName, owner, forAcquire?OwnershipType.ACQUIRED:OwnershipType.CREATED);
- if (deadlock) logger.warn("Deadlock detected when " + owner + " tried to create lock on " + keyspace + "." + lockTable + "." + lockName);
- return deadlock;
- }
-
- public List<String> getAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicServiceException, MusicQueryException {
- List<String> toRet = new ArrayList<String>();
- String lockTable = table_prepend_name + table;
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString("SELECT key, lockreference FROM " + keyspace + "." + lockTable);
- queryObject.appendQueryString(" WHERE owner = '" + ownerId + "' ALLOW FILTERING");
-
- ResultSet rs = dsHandle.executeQuorumConsistencyGet(queryObject);
- Iterator<Row> it = rs.iterator();
- while (it.hasNext()) {
- Row row = it.next();
- toRet.add(row.getString("key") + "$" + row.getLong("lockreference"));
- }
- return toRet;
- }
-
- public ReturnType promoteLock(String keyspace, String table, String key, String lockRef)
- throws MusicLockingException, MusicServiceException, MusicQueryException {
- String lockqtable = table_prepend_name + table;
- String selectQuery = "select * from " + keyspace + "." + lockqtable + " where key=?;";
-
- PreparedQueryObject queryObject = new PreparedQueryObject();
- queryObject.appendQueryString(selectQuery);
- queryObject.addValue(key);
- ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject);
-
- long refToPromote = Long.parseLong(lockRef);
-
- boolean topOfQueue = true;
- boolean readBlock = false;
- boolean seenLockToPromote = false;
- boolean promotionOngoing = false;
- long readBlockStart = 0;
- long readBlockEnd = 0;
-
-
- for (Row row : rs) {
- long ref = row.getLong("lockreference");
- LockType lockType = row.get("lockType", LockType.class);
-
- if (refToPromote==ref) {
- if (promotionOngoing) {
- return new ReturnType(ResultType.FAILURE, "Can't promote, already promoting another lockref.");
- }
- seenLockToPromote = true;
- if (!topOfQueue) {
- readBlockStart = ref;
- readBlockEnd = ref;
- break;
- }
- } else if (!seenLockToPromote && refToPromote<ref) {
- return new ReturnType(ResultType.FAILURE, "Lockref does not exist.");
- }
-
- if (lockType==LockType.READ || lockType==LockType.PROMOTING) {
- if (!readBlock) {
- readBlockStart = ref;
- readBlock = true;
- }
- if (readBlock) {
- readBlockEnd = ref;
- }
- if (lockType==LockType.PROMOTING) {
- promotionOngoing = true;
- }
- }
-
- if (lockType==LockType.WRITE) {
- if (refToPromote==ref) {
- return new ReturnType(ResultType.FAILURE, "Lockref is already write.");
- }
- if (readBlock) {
- readBlock = false;
- promotionOngoing = false;
- if (seenLockToPromote) {
- break;
- }
- //can no longer be lock holder after this
- topOfQueue = false;
- }
- }
- }
-
- if (readBlockStart<=refToPromote && refToPromote<=readBlockEnd) {
- if (readBlockStart==refToPromote && refToPromote==readBlockEnd) {
- promoteLockTo(keyspace, lockqtable, key, lockRef, LockType.WRITE);
- return new ReturnType(ResultType.SUCCESS, "Lock has successfully been upgraded.");
- }
- promoteLockTo(keyspace, lockqtable, key, lockRef, LockType.PROMOTING);
- return new ReturnType(ResultType.FAILURE, "Your lock upgrade is in progress. Check again to see if successful.");
- }
-
- //shouldn't reach here?
- return new ReturnType(ResultType.FAILURE,"Promotion failed.");
- }
-
- private void promoteLockTo(String keyspace, String table, String key, String lockRef, LockType newLockType)
- throws MusicServiceException, MusicQueryException {
- PreparedQueryObject queryObject =
- new PreparedQueryObject("UPDATE " + keyspace + "." + table + " SET lockType=? WHERE key='" + key
- + "' AND lockReference = " + lockRef + " IF EXISTS;", newLockType);
-
- //cannot use executePut because we need to ignore music timestamp adjustments for lock store
- dsHandle.executePut(queryObject, MusicUtil.QUORUM);
- }
-
-
-
-}
diff --git a/src/main/java/org/onap/music/lockingservice/cassandra/LockType.java b/src/main/java/org/onap/music/lockingservice/cassandra/LockType.java
deleted file mode 100644
index 432b1c51..00000000
--- a/src/main/java/org/onap/music/lockingservice/cassandra/LockType.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2019 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.lockingservice.cassandra;
-
-
-public enum LockType {
- WRITE, READ, PROMOTING;
-}
-
diff --git a/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java b/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java
deleted file mode 100644
index 00187dc8..00000000
--- a/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java
+++ /dev/null
@@ -1,141 +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.lockingservice.cassandra;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-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;
-
-// the state variable that will be stored in the locking service, capturing the transitions of
-public class MusicLockState implements Serializable {
- public enum LockStatus {
- UNLOCKED, BEING_LOCKED, LOCKED
- };// captures the state of the lock
-
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicLockState.class);
- private LockStatus lockStatus;
- private boolean needToSyncQuorum = false;
- private String lockHolder;
- private long leasePeriod = Long.MAX_VALUE, leaseStartTime = -1;
- private String errorMessage = null;
-
- public MusicLockState(String errorMessage) {
- this.errorMessage = errorMessage;
- }
-
- public MusicLockState(LockStatus lockStatus, String lockHolder) {
- this.lockStatus = lockStatus;
- this.lockHolder = lockHolder;
- }
-
- public MusicLockState(LockStatus lockStatus, String lockHolder, boolean needToSyncQuorum) {
- this.lockStatus = lockStatus;
- this.lockHolder = lockHolder;
- this.needToSyncQuorum = needToSyncQuorum;
- }
-
-
- public long getLeasePeriod() {
- return leasePeriod;
- }
-
- public boolean isNeedToSyncQuorum() {
- return needToSyncQuorum;
- }
-
-
-
- public void setLeasePeriod(long leasePeriod) {
- this.leasePeriod = leasePeriod;
- }
-
-
- public long getLeaseStartTime() {
- return leaseStartTime;
- }
-
-
- public void setLeaseStartTime(long leaseStartTime) {
- this.leaseStartTime = leaseStartTime;
- }
-
-
-
- public LockStatus getLockStatus() {
- return lockStatus;
- }
-
- public void setLockStatus(LockStatus lockStatus) {
- this.lockStatus = lockStatus;
- }
-
- public String getLockHolder() {
- return lockHolder;
- }
-
- public void setLockHolder(String lockHolder) {
- this.lockHolder = lockHolder;
- }
-
- public String getErrorMessage() {
- return errorMessage;
- }
-
- public byte[] serialize() {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutput out = null;
- try {
- out = new ObjectOutputStream(bos);
- out.writeObject(this);
- } catch (IOException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.IOERROR, ErrorSeverity.ERROR,
- ErrorTypes.CONNECTIONERROR, e);
- }
- return bos.toByteArray();
- }
-
- public static MusicLockState deSerialize(byte[] data) {
- ByteArrayInputStream bis = new ByteArrayInputStream(data);
- Object o = null;
- ObjectInput in = null;
- try {
- in = new ObjectInputStream(bis);
- o = in.readObject();
- } catch (ClassNotFoundException | IOException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.UNKNOWNERROR, ErrorSeverity
- .ERROR, ErrorTypes.UNKNOWN, e);
- }
- return (MusicLockState) o;
- }
-}
diff --git a/src/main/java/org/onap/music/main/CipherUtil.java b/src/main/java/org/onap/music/main/CipherUtil.java
deleted file mode 100644
index 53333238..00000000
--- a/src/main/java/org/onap/music/main/CipherUtil.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017 AT&T Intellectual Property
- * ===================================================================
- * Modification 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.main;
-
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.UnsupportedEncodingException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.Scanner;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang3.ArrayUtils;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-
-public class CipherUtil {
-
-
- /**
- * Default key.
- */
- private static String keyString = MusicUtil.getCipherEncKey();
-
- private static final String ALGORITHM = "AES";
- private static final String ALGORYTHM_DETAILS = ALGORITHM + "/CBC/PKCS5PADDING";
- private static final int BLOCK_SIZE = 128;
- @SuppressWarnings("unused")
- private static SecretKeySpec secretKeySpec;
- private static IvParameterSpec ivspec;
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CipherUtil.class);
- /**
- * @deprecated Please use {@link #encryptPKC(String)} to encrypt the text.
- *
- * Encrypts the text using the specified secret key.
- *
- * @param plainText
- * Text to encrypt
- * @param secretKey
- * Key to use for encryption
- * @return encrypted version of plain text.
- * @
- * if any encryption step fails
- *
- */
- @Deprecated
- public static String encrypt(String plainText, String secretKey) {
- String encryptedString = null;
- try {
- byte[] encryptText = plainText.getBytes("UTF-8");
- byte[] rawKey = Base64.decodeBase64(secretKey);
- SecretKeySpec sKeySpec = new SecretKeySpec(rawKey, "AES");
- Cipher cipher = Cipher.getInstance("AES");
- cipher.init(Cipher.ENCRYPT_MODE, sKeySpec);
- encryptedString = Base64.encodeBase64String(cipher.doFinal(encryptText));
- } catch (BadPaddingException | IllegalBlockSizeException | InvalidKeyException | NoSuchAlgorithmException
- | NoSuchPaddingException | UnsupportedEncodingException ex) {
- }
- return encryptedString;
- }
-
- /**
- * @deprecated Please use {@link #encryptPKC(String)} to encrypt the text.
- * Encrypts the text using the secret key in key.properties file.
- *
- * @param plainText
- * Text to encrypt
- * @return Encrypted Text
- * @
- * if any decryption step fails
- */
- @Deprecated
- public static String encrypt(String plainText) {
- return CipherUtil.encrypt(plainText, keyString);
- }
-
- /**
- * Encrypts the text using a secret key.
- *
- * @param plainText
- * Text to encrypt
- * @return Encrypted Text
- * @
- * if any decryption step fails
- */
- public static String encryptPKC(String plainText) {
- return CipherUtil.encryptPKC(plainText, keyString);
- }
-
- /**
- *
- * @deprecated Please use {@link #decryptPKC(String)} to Decryption the text.
- *
- * Decrypts the text using the specified secret key.
- *
- * @param encryptedText
- * Text to decrypt
- * @param secretKey
- * Key to use for decryption
- * @return plain text version of encrypted text
- * @
- * if any decryption step fails
- *
- */
- @Deprecated
- public static String decrypt(String encryptedText, String secretKey) {
- String encryptedString = null;
- try {
- byte[] rawKey = Base64.decodeBase64(secretKey);
- SecretKeySpec sKeySpec = new SecretKeySpec(rawKey, "AES");
- byte[] encryptText = Base64.decodeBase64(encryptedText.getBytes("UTF-8"));
- Cipher cipher = Cipher.getInstance("AES");
- cipher.init(Cipher.DECRYPT_MODE, sKeySpec);
- encryptedString = new String(cipher.doFinal(encryptText));
- } catch (BadPaddingException | IllegalBlockSizeException | InvalidKeyException | NoSuchAlgorithmException
- | NoSuchPaddingException | UnsupportedEncodingException ex) {
- }
- return encryptedString;
- }
-
- private static SecretKeySpec getSecretKeySpec() {
- byte[] key = Base64.decodeBase64(keyString);
- return new SecretKeySpec(key, ALGORITHM);
- }
-
- private static SecretKeySpec getSecretKeySpec(String keyString) {
- byte[] key = Base64.decodeBase64(keyString);
- return new SecretKeySpec(key, ALGORITHM);
- }
-
- /**
- * Encrypt the text using the secret key in key.properties file
- *
- * @param value
- * @return The encrypted string
- * @throws BadPaddingException
- * @
- * In case of issue with the encryption
- */
- public static String encryptPKC(String value, String skey) {
- Cipher cipher = null;
- byte[] iv = null, finalByte = null;
-
- try {
- cipher = Cipher.getInstance(ALGORYTHM_DETAILS, "SunJCE");
-
- SecureRandom r = SecureRandom.getInstance("SHA1PRNG");
- iv = new byte[BLOCK_SIZE / 8];
- r.nextBytes(iv);
- ivspec = new IvParameterSpec(iv);
- cipher.init(Cipher.ENCRYPT_MODE, getSecretKeySpec(skey), ivspec);
- finalByte = cipher.doFinal(value.getBytes());
-
- } catch (Exception ex) {
-
- }
- return Base64.encodeBase64String(ArrayUtils.addAll(iv, finalByte));
- }
-
- /**
- * Decrypts the text using the secret key in key.properties file.
- *
- * @param message
- * The encrypted string that must be decrypted using the ecomp
- * Encryption Key
- * @return The String decrypted
- * @
- * if any decryption step fails
- */
- public static String decryptPKC(String message, String skey) {
- byte[] encryptedMessage = Base64.decodeBase64(message);
- Cipher cipher;
- byte[] decrypted = null;
- try {
- cipher = Cipher.getInstance(ALGORYTHM_DETAILS, "SunJCE");
- ivspec = new IvParameterSpec(ArrayUtils.subarray(encryptedMessage, 0, BLOCK_SIZE / 8));
- byte[] realData = ArrayUtils.subarray(encryptedMessage, BLOCK_SIZE / 8, encryptedMessage.length);
- cipher.init(Cipher.DECRYPT_MODE, getSecretKeySpec(skey), ivspec);
- decrypted = cipher.doFinal(realData);
-
- } catch (Exception ex) {
-
-
- }
-
- return new String(decrypted);
- }
-
- /**
- * @deprecated Please use {@link #decryptPKC(String)} to Decrypt the text.
- *
- * Decrypts the text using the secret key in key.properties file.
- *
- * @param encryptedText
- * Text to decrypt
- * @return Decrypted text
- * @
- * if any decryption step fails
- */
- @Deprecated
- public static String decrypt(String encryptedText) {
- return CipherUtil.decrypt(encryptedText, keyString);
- }
-
- /**
- *
- * Decrypts the text using the secret key in key.properties file.
- *
- * @param encryptedText
- * Text to decrypt
- * @return Decrypted text
- * @
- * if any decryption step fails
- */
- public static String decryptPKC(String encryptedText) {
- return CipherUtil.decryptPKC(encryptedText, keyString);
- }
-
-
- public static void readAndSetKeyString() {
- try (Scanner in = new Scanner(new FileReader("/opt/app/music/etc/properties.txt"))) {
-
- StringBuilder sb = new StringBuilder();
- while(in.hasNext()) {
- sb.append(in.next());
- }
- keyString = sb.toString();
- } catch (FileNotFoundException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage());
- }
- }
-
- /*public static void main(String[] args) {
-
- System.out.println("Encrypted password: "+encryptPKC("cassandra"));
-
- System.out.println("Decrypted password: "+decryptPKC("dDhqAp5/RwZbl9yRSZg15fN7Qul9eiE/JFkKemtTib0="));
- System.out.println("Decrypted password: "+decryptPKC("I/dOtD/YYzBStbtOYhKuUUyPHSW2G9ZzdSyB8bJp4vk="));
- System.out.println("Decrypted password: "+decryptPKC("g7zJqg74dLsH/fyL7I75b4eySy3pbMS2xVqkrB5lDl8="));
- }*/
-
-}
diff --git a/src/main/java/org/onap/music/main/DeadlockDetectionUtil.java b/src/main/java/org/onap/music/main/DeadlockDetectionUtil.java
deleted file mode 100644
index 4c9a74b7..00000000
--- a/src/main/java/org/onap/music/main/DeadlockDetectionUtil.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2019 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.main;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class DeadlockDetectionUtil {
- private Map<String, Node> nodeList = null;
- public enum OwnershipType {NONE, CREATED, ACQUIRED};
-
- private class Node implements Comparable<Node> {
- private String id;
- private List<Node> links;
- private boolean visited = false;
- private boolean onStack = false;
-
- @Override
- public String toString() {
- StringBuffer sb = new StringBuffer();
- for (Node link : links) sb.append(link.id);
- return "Node [id=" + id + ", links=" + sb.toString() + ", visited=" + visited + ", onStack=" + onStack + "]";
- }
-
- public Node(String id) {
- super();
- this.id = id;
- this.links = new ArrayList<Node>();
- }
-
- public List<Node> getLinks() {
- return links;
- }
-
- public void addLink(Node link) {
- this.links.add(link);
- }
-
- public void removeLink(Node link) {
- this.links.remove(link);
- }
-
- public boolean isVisited() {
- return visited;
- }
-
- public boolean isOnStack() {
- return onStack;
- }
-
- public void setVisited(boolean visited) {
- this.visited = visited;
- }
-
- public void setOnStack(boolean onStack) {
- this.onStack = onStack;
- }
-
- @Override
- public int compareTo(Node arg0) {
- return id.compareTo(arg0.id);
- }
- }
-
- public DeadlockDetectionUtil() {
- this.nodeList = new HashMap<String, Node>();
- }
-
- public void listAllNodes() {
- System.out.println("In DeadlockDetectionUtil: ");
- for (String key : nodeList.keySet()) {
- System.out.println(" " + key + " : " + nodeList.get(key));
- }
- }
-
- public boolean checkForDeadlock(String resource, String owner, OwnershipType operation) {
- setExisting(resource, owner, operation);
-
- Node currentNode = null;
- if (operation.equals(OwnershipType.ACQUIRED)) {
- currentNode = nodeList.get("r" + resource);
- } else if (operation.equals(OwnershipType.CREATED)) {
- currentNode = nodeList.get("o" + owner);
- }
-
- boolean cycle = findCycle(currentNode);
- return cycle;
- }
-
- private boolean findCycle(Node currentNode) {
- if (currentNode==null) return false;
- if (currentNode.isOnStack()) return true;
- if (currentNode.isVisited()) return false;
- currentNode.setOnStack(true);
- currentNode.setVisited(true);
- for (Node childNode : currentNode.getLinks()) {
- if (findCycle(childNode)) return true;
- }
- currentNode.setOnStack(false);
- return false;
- }
-
- public void setExisting(String resource, String owner, OwnershipType operation) {
- String resourceKey = "r" + resource;
- Node resourceNode = nodeList.get(resourceKey);
- if (resourceNode==null) {
- resourceNode = new Node(resourceKey);
- nodeList.put(resourceKey, resourceNode);
- }
-
- String ownerKey = "o" + owner;
- Node ownerNode = nodeList.get(ownerKey);
- if (ownerNode==null) {
- ownerNode = new Node(ownerKey);
- nodeList.put(ownerKey, ownerNode);
- }
-
- if (operation.equals(OwnershipType.ACQUIRED)) {
- resourceNode.addLink(ownerNode);
- ownerNode.removeLink(resourceNode);
- } else if (operation.equals(OwnershipType.CREATED)) {
- ownerNode.addLink(resourceNode);
- resourceNode.removeLink(ownerNode);
- }
- }
-
-}
diff --git a/src/main/java/org/onap/music/main/MusicCore.java b/src/main/java/org/onap/music/main/MusicCore.java
deleted file mode 100644
index 658f2124..00000000
--- a/src/main/java/org/onap/music/main/MusicCore.java
+++ /dev/null
@@ -1,260 +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.main;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.onap.music.datastore.Condition;
-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.exceptions.MusicLockingException;
-import org.onap.music.exceptions.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.lockingservice.cassandra.CassaLockStore;
-import org.onap.music.lockingservice.cassandra.LockType;
-import org.onap.music.lockingservice.cassandra.MusicLockState;
-import org.onap.music.service.MusicCoreService;
-
-import com.datastax.driver.core.ResultSet;
-
-public class MusicCore {
-
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicCore.class);
- private static MusicCoreService musicCore = MusicUtil.getMusicCoreService();
- private static CassaLockStore mLockHandle;
-
- public static CassaLockStore getmLockHandle() {
- return mLockHandle;
- }
-
- public static void setmLockHandle(CassaLockStore mLockHandleIn) {
- mLockHandle = mLockHandleIn;
- }
-
- /**
- * Acquire lock
- *
- * @param fullyQualifiedKey DO NOT RELY ON THIS KEY WORKING. INCLUDE THE KEY IN THE LOCKID.
- * @param lockId - the full lock id (key + lockRef)
- * @return
- * @throws MusicLockingException
- * @throws MusicQueryException
- * @throws MusicServiceException
- */
- public static ReturnType acquireLock(String fullyQualifiedKey, String lockId)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- return musicCore.acquireLock(fullyQualifiedKey, lockId);
- }
-
- public static ReturnType acquireLockWithLease(String key, String lockId, long leasePeriod)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- return musicCore.acquireLockWithLease(key, lockId, leasePeriod);
- }
-
- public static String createLockReference(String fullyQualifiedKey) throws MusicLockingException {
- return musicCore.createLockReference(fullyQualifiedKey);
- }
-
- public static String createLockReference(String fullyQualifiedKey, LockType locktype) throws MusicLockingException {
- return musicCore.createLockReference(fullyQualifiedKey, locktype);
- }
-
- public static String createLockReference(String fullyQualifiedKey, LockType locktype, String owner) throws MusicLockingException {
- return musicCore.createLockReference(fullyQualifiedKey, locktype, owner);
- }
-
- public static ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject,
- String consistency) throws MusicServiceException {
- return musicCore.createTable(keyspace, table, tableQueryObject, consistency);
- }
-
- public static ResultSet quorumGet(PreparedQueryObject query) {
- return musicCore.quorumGet(query);
- }
-
- /**
- * Gets the top of queue for fullyQualifiedKey
- *
- * @param fullyQualifiedKey
- * @return
- */
- public static String whoseTurnIsIt(String fullyQualifiedKey) {
- return musicCore.whoseTurnIsIt(fullyQualifiedKey);
- }
-
- /**
- * Gets the current lockholder(s) for fullyQualifiedKey
- *
- * @param fullyQualifiedKey
- * @return
- */
- public static List<String> getCurrentLockHolders(String fullyQualifiedKey) {
- return musicCore.getCurrentLockHolders(fullyQualifiedKey);
- }
-
- public static ReturnType promoteLock(String lockIdToPromote) throws MusicLockingException {
- return musicCore.promoteLock(lockIdToPromote);
- }
-
- public static void destroyLockRef(String lockId) throws MusicLockingException {
- musicCore.destroyLockRef(lockId);
- }
-
- public static ReturnType eventualPut(PreparedQueryObject queryObject) {
- return musicCore.eventualPut(queryObject);
- }
-
- public static ReturnType eventualPut_nb(PreparedQueryObject queryObject, String keyspace, String tablename,
- String primaryKey) {
- return musicCore.eventualPut_nb(queryObject, keyspace, tablename, primaryKey);
- }
-
- public static ReturnType criticalPut(String keyspace, String table, String primaryKeyValue,
- PreparedQueryObject queryObject, String lockReference, Condition conditionInfo) {
- return musicCore.criticalPut(keyspace, table, primaryKeyValue, queryObject, lockReference, conditionInfo);
- }
-
- public static ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency)
- throws MusicServiceException,MusicQueryException {
- return musicCore.nonKeyRelatedPut(queryObject, consistency);
- }
-
- public static ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException {
- return musicCore.get(queryObject);
- }
-
- public static ResultSet criticalGet(String keyspace, String table, String primaryKeyValue,
- PreparedQueryObject queryObject, String lockReference) throws MusicServiceException {
- return musicCore.criticalGet(keyspace, table, primaryKeyValue, queryObject, lockReference);
- }
-
- public static ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- return musicCore.atomicPut(keyspaceName, tableName, primaryKey, queryObject, conditionInfo);
- }
-
- public static ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException, MusicQueryException {
- return musicCore.atomicGet(keyspaceName, tableName, primaryKey, queryObject);
- }
-
- public static List<String> getLockQueue(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException {
- return musicCore.getLockQueue(fullyQualifiedKey);
- }
-
- public static long getLockQueueSize(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException {
- return musicCore.getLockQueueSize(fullyQualifiedKey);
- }
-
- public static void deleteLock(String lockName) throws MusicLockingException {
- musicCore.deleteLock(lockName);
- }
-
- public static ReturnType atomicPutWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo) throws MusicLockingException {
- return musicCore.atomicPutWithDeleteLock(keyspaceName, tableName, primaryKey, queryObject, conditionInfo);
- }
-
- public static ResultSet atomicGetWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException {
- return musicCore.atomicGetWithDeleteLock(keyspaceName, tableName, primaryKey, queryObject);
- }
-
- public static Map<String, Object> validateLock(String lockName) {
- return musicCore.validateLock(lockName);
- }
-
- public static MusicLockState releaseLock(String lockId, boolean voluntaryRelease) throws MusicLockingException {
- return musicCore.releaseLock(lockId, voluntaryRelease);
- }
-
- public static List<String> releaseAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicLockingException, MusicServiceException, MusicQueryException {
- return musicCore.releaseAllLocksForOwner(ownerId, keyspace, table);
- }
-
- //Added changes for orm implementation.
-
- public static ResultType createKeyspace(JsonKeySpace jsonKeySpaceObject, String consistencyInfo)
- throws MusicServiceException, MusicQueryException {
- return musicCore.createKeyspace(jsonKeySpaceObject,consistencyInfo);
- }
-
- public static ResultType dropKeyspace(JsonKeySpace josnKeyspaceObject, String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- return musicCore.dropKeyspace(josnKeyspaceObject, consistencyInfo);
- }
-
- public static ResultType createTable(JsonTable jsonTableObject,String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- return musicCore.createTable(jsonTableObject, consistencyInfo);
- }
-
- public static ResultType dropTable(JsonTable jsonTableObject, String consistencyInfo)
- throws MusicServiceException, MusicQueryException {
- return musicCore.dropTable(jsonTableObject, consistencyInfo);
- }
-
- public static ResultType createIndex(JsonIndex jsonIndexObject, String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- return musicCore.createIndex(jsonIndexObject, consistencyInfo);
- }
-
- public static ResultSet select(JsonSelect jsonSelect, MultivaluedMap<String, String> rowParams)
- throws MusicServiceException, MusicQueryException{
- return musicCore.select(jsonSelect, rowParams);
- }
-
- public static ResultSet selectCritical(JsonInsert jsonInsertObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException{
- return musicCore.selectCritical(jsonInsertObj, rowParams);
- }
-
-
- public static ReturnType insertIntoTable(JsonInsert jsonInsert) throws MusicLockingException, MusicQueryException, MusicServiceException{
- return musicCore.insertIntoTable(jsonInsert);
- }
-
- public static ReturnType updateTable(JsonUpdate jsonUpdateObj,MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException{
- return musicCore.updateTable(jsonUpdateObj, rowParams);
- }
-
- public static ReturnType deleteFromTable(JsonDelete jsonDeleteObj,MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException{
- return musicCore.deleteFromTable(jsonDeleteObj,rowParams);
- }
-
-}
diff --git a/src/main/java/org/onap/music/main/MusicUtil.java b/src/main/java/org/onap/music/main/MusicUtil.java
deleted file mode 100755
index d46e770e..00000000
--- a/src/main/java/org/onap/music/main/MusicUtil.java
+++ /dev/null
@@ -1,820 +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.main;
-
-import com.datastax.driver.core.ColumnDefinitions;
-import com.datastax.driver.core.ColumnDefinitions.Definition;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Scanner;
-import java.util.UUID;
-
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-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.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.service.MusicCoreService;
-import org.onap.music.service.impl.MusicCassaCore;
-
-import com.datastax.driver.core.ConsistencyLevel;
-import com.datastax.driver.core.DataType;
-
-/**
- * @author nelson24
- *
- * Properties This will take Properties and load them into MusicUtil.
- * This is a hack for now. Eventually it would bebest to do this in
- * another way.
- *
- */
-public class MusicUtil {
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicUtil.class);
-
- // Consistancy Constants
- public static final String ATOMIC = "atomic";
- public static final String EVENTUAL = "eventual";
- public static final String CRITICAL = "critical";
- public static final String EVENTUAL_NB = "eventual_nb";
- public static final String ALL = "all";
- public static final String QUORUM = "quorum";
- public static final String ONE = "one";
- public static final String ATOMICDELETELOCK = "atomic_delete_lock";
-
- // Header Constants
- private static final String XLATESTVERSION = "X-latestVersion";
- private static final String XMINORVERSION = "X-minorVersion";
- private static final String XPATCHVERSION = "X-patchVersion";
- public static final String AUTHORIZATION = "Authorization";
-
- // CQL Constants
- public static final String SELECT = "select";
- public static final String INSERT = "insert";
- public static final String UPDATE = "update";
- public static final String UPSERT = "upsert";
- public static final String USERID = "userId";
- public static final String PASSWORD = "";
- public static final String CASSANDRA = "cassandra";
-
- private static final String LOCALHOST = "localhost";
- private static final String PROPERTIES_FILE = "/opt/app/music/etc/music.properties";
- public static final String DEFAULTKEYSPACENAME = "TBD";
-
- private static long defaultLockLeasePeriod = 6000;
- // Amount of times to retry to delete a lock in atomic.
- private static int retryCount = 3;
- private static String lockUsing = MusicUtil.CASSANDRA;
- // Cadi OnOff
- private static boolean isCadi = false;
- // Keyspace Creation on/off
- private static boolean isKeyspaceActive = false;
- private static boolean debug = true;
- private static String version = "0.0.0";
- private static String build = "";
-
- private static String musicPropertiesFilePath = PROPERTIES_FILE;
- // private static final String[] propKeys = new String[] { MusicUtil.class.getDeclaredMethod(arg0, )"build","cassandra.host", "debug",
- // "version", "music.properties", "lock.lease.period", "cassandra.user",
- // "cassandra.password", "aaf.endpoint.url","admin.username","admin.password",
- // "music.namespace","admin.aaf.role","cassandra.port","lock.using","retry.count",
- // "transId.header.required","conversation.header.required","clientId.header.required",
- // "messageId.header.required","transId.header.prefix","conversation.header.prefix",
- // "clientId.header.prefix","messageId.header.prefix"};
- // Consistency Constants and variables.
- private static final String[] cosistencyLevel = new String[] {
- "ALL","EACH_QUORUM","QUORUM","LOCAL_QUORUM","ONE","TWO",
- "THREE","LOCAL_ONE","ANY","SERIAL","LOCAL_SERIAL"};
- private static final Map<String,ConsistencyLevel> consistencyName = new HashMap<>();
- static {
- consistencyName.put("ONE",ConsistencyLevel.ONE);
- consistencyName.put("TWO",ConsistencyLevel.TWO);
- consistencyName.put("THREE",ConsistencyLevel.THREE);
- consistencyName.put("SERIAL",ConsistencyLevel.SERIAL);
- consistencyName.put("ALL",ConsistencyLevel.ALL);
- consistencyName.put("EACH_QUORUM",ConsistencyLevel.EACH_QUORUM);
- consistencyName.put("QUORUM",ConsistencyLevel.QUORUM);
- consistencyName.put("LOCAL_QUORUM",ConsistencyLevel.LOCAL_QUORUM);
- consistencyName.put("LOCAL_ONE",ConsistencyLevel.LOCAL_ONE);
- consistencyName.put("LOCAL_SERIAL",ConsistencyLevel.LOCAL_SERIAL);
- }
-
- // Cassandra Values
- private static String cassName = "cassandra";
- private static String cassPwd;
- private static String myCassaHost = LOCALHOST;
- private static int cassandraPort = 9042;
-
- // AAF
- private static String musicAafNs = "org.onap.music.cadi";
-
- // Locking
- public static final long MusicEternityEpochMillis = 1533081600000L; // Wednesday, August 1, 2018 12:00:00 AM
- public static final long MaxLockReferenceTimePart = 1000000000000L; // millis after eternity (eq sometime in 2050)
- public static final long MaxCriticalSectionDurationMillis = 1L * 24 * 60 * 60 * 1000; // 1 day
-
- // Response/Request tracking headers
- private static String transIdPrefix = "false";
- private static String conversationIdPrefix = "false";
- private static String clientIdPrefix = "false";
- private static String messageIdPrefix = "false";
- private static Boolean transIdRequired = false;
- private static Boolean conversationIdRequired = false;
- private static Boolean clientIdRequired = false;
- private static Boolean messageIdRequired = false;
- private static String cipherEncKey = "";
-
- public MusicUtil() {
- throw new IllegalStateException("Utility Class");
- }
-
- public static String getLockUsing() {
- return lockUsing;
- }
-
- public static void setLockUsing(String lockUsing) {
- MusicUtil.lockUsing = lockUsing;
- }
-
- /**
- *
- * @return cassandra port
- */
- public static int getCassandraPort() {
- return cassandraPort;
- }
-
- /**
- * set cassandra port
- * @param cassandraPort
- */
- public static void setCassandraPort(int cassandraPort) {
- MusicUtil.cassandraPort = cassandraPort;
- }
- /**
- * @return the cassName
- */
- public static String getCassName() {
- return cassName;
- }
-
- /**
- * @return the cassPwd
- */
- public static String getCassPwd() {
- return cassPwd;
- }
-
- /**
- * Returns An array of property names that should be in the Properties
- * files.
- *
-// * @return
-// */
-// public static String[] getPropkeys() {
-// return propKeys.clone();
-// }
-
- /**
- * Get MusicPropertiesFilePath - Default = /opt/music/music.properties
- * property file value - music.properties
- *
- * @return
- */
- public static String getMusicPropertiesFilePath() {
- return musicPropertiesFilePath;
- }
-
- /**
- * Set MusicPropertiesFilePath
- *
- * @param musicPropertiesFilePath
- */
- public static void setMusicPropertiesFilePath(String musicPropertiesFilePath) {
- MusicUtil.musicPropertiesFilePath = musicPropertiesFilePath;
- }
-
- /**
- * Get DefaultLockLeasePeriod - Default = 6000 property file value -
- * lock.lease.period
- *
- * @return
- */
- public static long getDefaultLockLeasePeriod() {
- return defaultLockLeasePeriod;
- }
-
- /**
- * Set DefaultLockLeasePeriod
- *
- * @param defaultLockLeasePeriod
- */
- public static void setDefaultLockLeasePeriod(long defaultLockLeasePeriod) {
- MusicUtil.defaultLockLeasePeriod = defaultLockLeasePeriod;
- }
-
- /**
- * Set Debug
- *
- * @param debug
- */
- public static void setDebug(boolean debug) {
- MusicUtil.debug = debug;
- }
-
- /**
- * Is Debug - Default = true property file value - debug
- *
- * @return
- */
- public static boolean isDebug() {
- return debug;
- }
-
- /**
- * Set Version
- *
- * @param version
- */
- public static void setVersion(String version) {
- MusicUtil.version = version;
- }
-
- /**
- * Return the version property file value - version.
- *
- * @return
- */
- public static String getVersion() {
- return version;
- }
-
- /**
- * Set the build of project which is a combination of the
- * version and the date.
- *
- * @param build - version-date.
- */
- public static void setBuild(String build) {
- MusicUtil.build = build;
- }
-
- /**
- * Return the build version-date.
- */
- public static String getBuild() {
- return build;
- }
-
- /**
- * Get MyCassHost - Cassandra Hostname - Default = localhost property file
- * value - cassandra.host
- *
- * @return
- */
- public static String getMyCassaHost() {
- return myCassaHost;
- }
-
- /**
- * Set MyCassHost - Cassandra Hostname
- *
- * @param myCassaHost .
- */
- public static void setMyCassaHost(String myCassaHost) {
- MusicUtil.myCassaHost = myCassaHost;
- }
-
- /**
- * Gey default retry count
- * @return
- */
- public static int getRetryCount() {
- return retryCount;
- }
-
- /**
- * Set retry count
- * @param retryCount .
- */
- public static void setRetryCount(int retryCount) {
- MusicUtil.retryCount = retryCount;
- }
-
-
- /**
- * This is used to turn keyspace creation api on/off.
- *
- */
- public static void setKeyspaceActive(Boolean keyspaceActive) {
- MusicUtil.isKeyspaceActive = keyspaceActive;
- }
-
- /**
- * This is used to turn keyspace creation api on/off.
- * @return boolean isKeyspaceActive
- */
- public static boolean isKeyspaceActive() {
- return isKeyspaceActive;
- }
-
- /**
- * This method depricated as its not used or needed.
- *
- * @return String
- */
- @Deprecated
- public static String getTestType() {
- String testType = "";
- try {
- Scanner fileScanner = new Scanner(new File(""));
- testType = fileScanner.next();// ignore the my id line
- @SuppressWarnings("unused")
- String batchSize = fileScanner.next();// ignore the my public ip line
- fileScanner.close();
- } catch (FileNotFoundException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), e);
- }
- return testType;
-
- }
-
- /**
- * Method to do a Thread Sleep.
- * Used for adding a delay.
- *
- * @param time
- */
- public static void sleep(long time) {
- try {
- Thread.sleep(time);
- } catch (InterruptedException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), e);
- Thread.currentThread().interrupt();
- }
- }
-
- /**
- * Utility function to check if the query object is valid.
- *
- * @param withparams
- * @param queryObject
- * @return
- */
- public static boolean isValidQueryObject(boolean withparams, PreparedQueryObject queryObject) {
- if (withparams) {
- int noOfValues = queryObject.getValues().size();
- int noOfParams = 0;
- char[] temp = queryObject.getQuery().toCharArray();
- for (int i = 0; i < temp.length; i++) {
- if (temp[i] == '?')
- noOfParams++;
- }
- return (noOfValues == noOfParams);
- } else {
- return !queryObject.getQuery().isEmpty();
- }
-
- }
-
- public static void setCassName(String cassName) {
- MusicUtil.cassName = cassName;
- }
-
- public static void setCassPwd(String cassPwd) {
- MusicUtil.cassPwd = cassPwd;
- }
-
- @SuppressWarnings("unchecked")
- public static String convertToCQLDataType(DataType type, Object valueObj) throws Exception {
-
- String value = "";
- switch (type.getName()) {
- case UUID:
- value = valueObj + "";
- break;
- case TEXT:
- case VARCHAR:
- String valueString = valueObj + "";
- valueString = valueString.replace("'", "''");
- value = "'" + valueString + "'";
- break;
- case MAP: {
- Map<String, Object> otMap = (Map<String, Object>) valueObj;
- value = "{" + jsonMaptoSqlString(otMap, ",") + "}";
- break;
- }
- default:
- value = valueObj + "";
- break;
- }
- return value;
- }
-
- /**
- *
- * @param colType
- * @param valueObj
- * @return
- * @throws MusicTypeConversionException
- * @throws Exception
- */
- @SuppressWarnings("unchecked")
- public static Object convertToActualDataType(DataType colType, Object valueObj) throws Exception {
- String valueObjString = valueObj + "";
- switch (colType.getName()) {
- case UUID:
- return UUID.fromString(valueObjString);
- case VARINT:
- return BigInteger.valueOf(Long.parseLong(valueObjString));
- case BIGINT:
- return Long.parseLong(valueObjString);
- case INT:
- return Integer.parseInt(valueObjString);
- case FLOAT:
- return Float.parseFloat(valueObjString);
- case DOUBLE:
- return Double.parseDouble(valueObjString);
- case BOOLEAN:
- return Boolean.parseBoolean(valueObjString);
- case MAP:
- return (Map<String, Object>) valueObj;
- case LIST:
- return (List<Object>)valueObj;
- case BLOB:
-
- default:
- return valueObjString;
- }
- }
-
- public static ByteBuffer convertToActualDataType(DataType colType, byte[] valueObj) {
- ByteBuffer buffer = ByteBuffer.wrap(valueObj);
- return buffer;
- }
-
- /**
- *
- * Utility function to parse json map into sql like string
- *
- * @param jMap
- * @param lineDelimiter
- * @return
- */
-
- public static String jsonMaptoSqlString(Map<String, Object> jMap, String lineDelimiter) throws Exception{
- StringBuilder sqlString = new StringBuilder();
- int counter = 0;
- for (Map.Entry<String, Object> entry : jMap.entrySet()) {
- Object ot = entry.getValue();
- String value = ot + "";
- if (ot instanceof String) {
- value = "'" + value.replace("'", "''") + "'";
- }
- sqlString.append("'" + entry.getKey() + "':" + value);
- if (counter != jMap.size() - 1)
- sqlString.append(lineDelimiter);
- counter = counter + 1;
- }
- return sqlString.toString();
- }
-
- @SuppressWarnings("unused")
- public static String buildVersion(String major, String minor, String patch) {
- if (minor != null) {
- major += "." + minor;
- if (patch != null) {
- major += "." + patch;
- }
- }
- return major;
- }
-
- /**
- * Currently this will build a header with X-latestVersion, X-minorVersion and X-pathcVersion
- * X-latestVerstion will be equal to the latest full version.
- * X-minorVersion - will be equal to the latest minor version.
- * X-pathVersion - will be equal to the latest patch version.
- * Future plans will change this.
- * @param response
- * @param major
- * @param minor
- * @param patch
- * @return
- */
- public static ResponseBuilder buildVersionResponse(String major, String minor, String patch) {
- ResponseBuilder response = Response.noContent();
- String versionIn = buildVersion(major,minor,patch);
- String version = MusicUtil.getVersion();
- String[] verArray = version.split("\\.",3);
- if ( minor != null ) {
- response.header(XMINORVERSION,minor);
- } else {
- response.header(XMINORVERSION,verArray[1]);
- }
- if ( patch != null ) {
- response.header(XPATCHVERSION,patch);
- } else {
- response.header(XPATCHVERSION,verArray[2]);
- }
- response.header(XLATESTVERSION,version);
- logger.info(EELFLoggerDelegate.auditLogger,"Version In:" + versionIn);
- return response;
- }
-
- public static boolean isValidConsistency(String consistency) {
- for (String string : cosistencyLevel) {
- if (string.equalsIgnoreCase(consistency))
- return true;
- }
- return false;
-
- }
-
- public static ConsistencyLevel getConsistencyLevel(String consistency) {
- return consistencyName.get(consistency.toUpperCase());
- }
-
- /**
- * Given the time of write for an update in a critical section, this method provides a transformed timestamp
- * that ensures that a previous lock holder who is still alive can never corrupt a later critical section.
- * The main idea is to us the lock reference to clearly demarcate the timestamps across critical sections.
- * @param the UUID lock reference associated with the write.
- * @param the long timeOfWrite which is the actual time at which the write took place
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public static long v2sTimeStampInMicroseconds(long ordinal, long timeOfWrite) throws MusicServiceException, MusicQueryException {
- // TODO: use acquire time instead of music eternity epoch
- long ts = ordinal * MaxLockReferenceTimePart + (timeOfWrite - MusicEternityEpochMillis);
-
- return ts;
- }
-
- public static MusicCoreService getMusicCoreService() {
- if(getLockUsing().equals(MusicUtil.CASSANDRA))
- return MusicCassaCore.getInstance();
- else
- return MusicCassaCore.getInstance();
- }
-
- /**
- * @param lockName
- * @return
- */
- public static Map<String, Object> validateLock(String lockName) {
- Map<String, Object> resultMap = new HashMap<>();
- String[] locks = lockName.split("\\.");
- if(locks.length < 3) {
- resultMap.put("Error", "Invalid lock. Please make sure lock is of the type keyspaceName.tableName.primaryKey");
- return resultMap;
- }
- String keyspace= locks[0];
- if(keyspace.startsWith("$"))
- keyspace = keyspace.substring(1);
- resultMap.put("keyspace",keyspace);
- return resultMap;
- }
-
-
- public static void setIsCadi(boolean isCadi) {
- MusicUtil.isCadi = isCadi;
- }
-
- public static void writeBackToQuorum(PreparedQueryObject selectQuery, String primaryKeyName,
- PreparedQueryObject updateQuery, String keyspace, String table,
- Object cqlFormattedPrimaryKeyValue)
- throws Exception {
- try {
- ResultSet results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(selectQuery);
- // write it back to a quorum
- Row row = results.one();
- ColumnDefinitions colInfo = row.getColumnDefinitions();
- int totalColumns = colInfo.size();
- int counter = 1;
- StringBuilder fieldValueString = new StringBuilder("");
- for (Definition definition : colInfo) {
- String colName = definition.getName();
- if (colName.equals(primaryKeyName))
- continue;
- DataType colType = definition.getType();
- Object valueObj = MusicDataStoreHandle.getDSHandle().getColValue(row, colName, colType);
- Object valueString = MusicUtil.convertToActualDataType(colType, valueObj);
- fieldValueString.append(colName + " = ?");
- updateQuery.addValue(valueString);
- if (counter != (totalColumns - 1))
- fieldValueString.append(",");
- counter = counter + 1;
- }
- updateQuery.appendQueryString("UPDATE " + keyspace + "." + table + " SET "
- + fieldValueString + " WHERE " + primaryKeyName + "= ? " + ";");
- updateQuery.addValue(cqlFormattedPrimaryKeyValue);
-
- MusicDataStoreHandle.getDSHandle().executePut(updateQuery, "critical");
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.QUERYERROR +""+updateQuery ,
- ErrorSeverity.MAJOR, ErrorTypes.QUERYERROR, e);
- }
- }
-
- public static boolean getIsCadi() {
- return MusicUtil.isCadi;
- }
-
-
- /**
- * @return a random uuid
- */
- public static String generateUUID() {
- String uuid = UUID.randomUUID().toString();
- logger.info(EELFLoggerDelegate.applicationLogger,"New AID generated: "+uuid);
- return uuid;
- }
-
- private static String checkPrefix(String prefix){
- if (prefix == null || "".equals(prefix) || prefix.endsWith("-")) {
- return prefix;
- } else {
- return prefix + "-";
- }
- }
-
- /**
- * @return the transIdPrefix
- */
- public static String getTransIdPrefix() {
- return transIdPrefix;
- }
-
- /**
- * @param transIdPrefix the transIdPrefix to set
- */
- public static void setTransIdPrefix(String transIdPrefix) {
- MusicUtil.transIdPrefix = checkPrefix(transIdPrefix);
- }
-
- /**
- * @return the conversationIdPrefix
- */
- public static String getConversationIdPrefix() {
- return conversationIdPrefix;
- }
-
- /**
- * @param conversationIdPrefix the conversationIdPrefix to set
- */
- public static void setConversationIdPrefix(String conversationIdPrefix) {
- MusicUtil.conversationIdPrefix = checkPrefix(conversationIdPrefix);
- }
-
- /**
- * @return the clientIdPrefix
- */
- public static String getClientIdPrefix() {
- return clientIdPrefix;
- }
-
- /**
- * @param clientIdPrefix the clientIdPrefix to set
- */
- public static void setClientIdPrefix(String clientIdPrefix) {
- MusicUtil.clientIdPrefix = checkPrefix(clientIdPrefix);
- }
-
- /**
- * @return the messageIdPrefix
- */
- public static String getMessageIdPrefix() {
- return messageIdPrefix;
- }
-
- /**
- * @param messageIdPrefix the messageIdPrefix to set
- */
- public static void setMessageIdPrefix(String messageIdPrefix) {
- MusicUtil.messageIdPrefix = checkPrefix(messageIdPrefix);
- }
-
- /**
- * @return the transIdRequired
- */
- public static Boolean getTransIdRequired() {
- return transIdRequired;
- }
-
-
- /**
- * @param transIdRequired the transIdRequired to set
- */
- public static void setTransIdRequired(Boolean transIdRequired) {
- MusicUtil.transIdRequired = transIdRequired;
- }
-
-
- /**
- * @return the conversationIdRequired
- */
- public static Boolean getConversationIdRequired() {
- return conversationIdRequired;
- }
-
-
- /**
- * @param conversationIdRequired the conversationIdRequired to set
- */
- public static void setConversationIdRequired(Boolean conversationIdRequired) {
- MusicUtil.conversationIdRequired = conversationIdRequired;
- }
-
-
- /**
- * @return the clientIdRequired
- */
- public static Boolean getClientIdRequired() {
- return clientIdRequired;
- }
-
-
- /**
- * @param clientIdRequired the clientIdRequired to set
- */
- public static void setClientIdRequired(Boolean clientIdRequired) {
- MusicUtil.clientIdRequired = clientIdRequired;
- }
-
-
- /**
- * @return the messageIdRequired
- */
- public static Boolean getMessageIdRequired() {
- return messageIdRequired;
- }
-
- /**
- * @param messageIdRequired the messageIdRequired to set
- */
- public static void setMessageIdRequired(Boolean messageIdRequired) {
- MusicUtil.messageIdRequired = messageIdRequired;
- }
-
-
- public static String getCipherEncKey() {
- return MusicUtil.cipherEncKey;
- }
-
-
- public static void setCipherEncKey(String cipherEncKey) {
- MusicUtil.cipherEncKey = cipherEncKey;
- if ( null == cipherEncKey || cipherEncKey.equals("") ||
- cipherEncKey.equals("nothing to see here")) {
- logger.error(EELFLoggerDelegate.errorLogger, "Missing Cipher Encryption Key.");
- }
- }
-
- public static String getMusicAafNs() {
- return MusicUtil.musicAafNs;
- }
-
-
- public static void setMusicAafNs(String musicAafNs) {
- MusicUtil.musicAafNs = musicAafNs;
- }
-
-
-
-}
-
diff --git a/src/main/java/org/onap/music/main/PropertiesLoader.java b/src/main/java/org/onap/music/main/PropertiesLoader.java
deleted file mode 100644
index 8aac2672..00000000
--- a/src/main/java/org/onap/music/main/PropertiesLoader.java
+++ /dev/null
@@ -1,295 +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.main;
-
-import java.util.Properties;
-
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
-import org.springframework.stereotype.Component;
-
-@PropertySource(value = {"file:/opt/app/music/etc/music.properties", "classpath:/project.properties","file:/opt/app/music/etc/key.properties"})
-@Component
-public class PropertiesLoader implements InitializingBean {
-
- @Value("${cassandra.host}")
- public String cassandraHost;
-/*
- @Value("${music.ip}")
- public String musicIp;
-*/
- @Value("${debug}")
- public String debug;
-
- @Value("${version}")
- public String version;
-
- @Value("${build}")
- public String build;
-
- @Value("${music.properties}")
- public String musicProperties;
-
- @Value("${lock.lease.period}")
- public String lockLeasePeriod;
-
- @Value("${cassandra.user}")
- public String cassandraUser;
-
- @Value("${cassandra.password}")
- public String cassandraPassword;
-
- @Value("${cassandra.port}")
- public String cassandraPort;
-
- @Value("${cadi}")
- public String isCadi;
-
- @Value("${keyspace.active}")
- public String isKeyspaceActive;
-
- @Value("${retry.count}")
- public String rertryCount;
-
- @Value("${transId.header.prefix}")
- private String transIdPrefix;
-
- @Value("${conversation.header.prefix}")
- private String conversationIdPrefix;
-
- @Value("${clientId.header.prefix}")
- private String clientIdPrefix;
-
- @Value("${messageId.header.prefix}")
- private String messageIdPrefix;
-
- @Value("${transId.header.required}")
- private Boolean transIdRequired;
-
- @Value("${conversation.header.required}")
- private Boolean conversationIdRequired;
-
- @Value("${clientId.header.required}")
- private Boolean clientIdRequired;
-
- @Value("${messageId.header.required}")
- private Boolean messageIdRequired;
-
- @Value("${music.aaf.ns}")
- private String musicAafNs;
-
- @Value("${cipher.enc.key}")
- private String cipherEncKey;
-
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PropertiesLoader.class);
-
- @Bean
- public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
- //return new PropertySourcesPlaceholderConfigurer();
- PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
- pspc.setIgnoreResourceNotFound(true);
- pspc.setIgnoreUnresolvablePlaceholders(true);
- return pspc;
- }
-
- /**
- * .
- */
- public void loadProperties() {
- if(cipherEncKey != null) {
- MusicUtil.setCipherEncKey(cipherEncKey);
- }
- if (musicAafNs != null) {
- MusicUtil.setMusicAafNs(musicAafNs);
- }
- if (cassandraPort != null && !cassandraPort.equals("${cassandra.port}")) {
- MusicUtil.setCassandraPort(Integer.parseInt(cassandraPort));
- }
- if (cassandraUser != null && !cassandraUser.equals("${cassandra.user}")) {
- MusicUtil.setCassName(cassandraUser);
- }
- if (cassandraPassword != null && !cassandraPassword.equals("${cassandra.password}")) {
- MusicUtil.setCassPwd(cassandraPassword);
- }
- if (debug != null && !debug.equals("${debug}")) {
- MusicUtil.setDebug(Boolean.parseBoolean(debug));
- }
- if (lockLeasePeriod != null && !lockLeasePeriod.equals("${lock.lease.period}")) {
- MusicUtil.setDefaultLockLeasePeriod(Long.parseLong(lockLeasePeriod));
- }
- if (musicProperties != null && !musicProperties.equals("${music.properties}")) {
- MusicUtil.setMusicPropertiesFilePath(musicProperties);
- }
- if (cassandraHost != null && !cassandraHost.equals("${cassandra.host}")) {
- MusicUtil.setMyCassaHost(cassandraHost);
- }
- if (version != null && !version.equals("${version}")) {
- MusicUtil.setVersion(version);
- }
- if (build != null && !version.equals("${build}")) {
- MusicUtil.setBuild(build);
- }
- if (isCadi != null && !isCadi.equals("${cadi}")) {
- MusicUtil.setIsCadi(Boolean.parseBoolean(isCadi));
- }
- if (rertryCount != null && !rertryCount.equals("${retry.count}")) {
- MusicUtil.setRetryCount(Integer.parseInt(rertryCount));
- }
- if (isKeyspaceActive != null && !isKeyspaceActive.equals("${keyspace.active}")) {
- MusicUtil.setKeyspaceActive(Boolean.parseBoolean(isKeyspaceActive));
- }
- if(transIdPrefix!=null) {
- MusicUtil.setTransIdPrefix(transIdPrefix);
- }
-
- if(conversationIdPrefix!=null) {
- MusicUtil.setConversationIdPrefix(conversationIdPrefix);
- }
-
- if(clientIdPrefix!=null) {
- MusicUtil.setClientIdPrefix(clientIdPrefix);
- }
-
- if(messageIdPrefix!=null) {
- MusicUtil.setMessageIdPrefix(messageIdPrefix);
- }
-
- if(transIdRequired!=null) {
- MusicUtil.setTransIdRequired(transIdRequired);
- }
-
- if(conversationIdRequired!=null) {
- MusicUtil.setConversationIdRequired(conversationIdRequired);
- }
-
- if(clientIdRequired!=null) {
- MusicUtil.setClientIdRequired(clientIdRequired);
- }
-
- if(messageIdRequired!=null) {
- MusicUtil.setMessageIdRequired(messageIdRequired);
- }
- }
-
- public static void loadProperties(Properties properties) {
- if (properties.getProperty("cassandra.host")!=null) {
- MusicUtil.setMyCassaHost(properties.getProperty("cassandra.host"));
- }
-
- if (properties.getProperty("cassandra.port")!=null) {
- MusicUtil.setCassandraPort(Integer.parseInt(properties.getProperty("cassandra.port")));
- }
-
- if (properties.getProperty("cassandra.user")!=null) {
- MusicUtil.setCassName(properties.getProperty("cassandra.user"));
- }
-
- if (properties.getProperty("cassandra.password")!=null) {
- MusicUtil.setCassPwd(properties.getProperty("cassandra.password"));
- }
-
- if (properties.getProperty("music.properties")!=null) {
- MusicUtil.setMusicPropertiesFilePath(properties.getProperty("music.properties"));
- }
-
- if (properties.getProperty("debug")!=null) {
- MusicUtil.setDebug(Boolean.parseBoolean(properties.getProperty("debug")));
- }
-
- if (properties.getProperty("version")!=null) {
- MusicUtil.setVersion(properties.getProperty("version"));
- }
-
- if (properties.getProperty("build")!=null) {
- MusicUtil.setBuild(properties.getProperty("build"));
- }
-
- if (properties.getProperty("lock.lease.period")!=null) {
- MusicUtil.setDefaultLockLeasePeriod(Long.parseLong(properties.getProperty("lock.lease.period")));
- }
-
- if (properties.getProperty("cadi")!=null) {
- MusicUtil.setIsCadi(Boolean.parseBoolean(properties.getProperty("cadi")));
- }
-
- if (properties.getProperty("keyspace.active")!=null) {
- MusicUtil.setKeyspaceActive(Boolean.parseBoolean(properties.getProperty("keyspace.active")));
- }
-
- if (properties.getProperty("retry.count")!=null) {
- MusicUtil.setRetryCount(Integer.parseInt(properties.getProperty("retry.count")));
- }
-
- if (properties.getProperty("transId.header.prefix")!=null) {
- MusicUtil.setTransIdPrefix(properties.getProperty("transId.header.prefix"));
- }
-
- if (properties.getProperty("conversation.header.prefix")!=null) {
- MusicUtil.setConversationIdPrefix(properties.getProperty("conversation.header.prefix"));
- }
-
- if (properties.getProperty("clientId.header.prefix")!=null) {
- MusicUtil.setClientIdPrefix(properties.getProperty("clientId.header.prefix"));
- }
-
- if (properties.getProperty("messageId.header.prefix")!=null) {
- MusicUtil.setMessageIdPrefix(properties.getProperty("messageId.header.prefix"));
- }
-
- if (properties.getProperty("transId.header.required")!=null) {
- MusicUtil.setTransIdRequired(Boolean.parseBoolean(properties.getProperty("transId.header.required")));
- }
-
- if (properties.getProperty("conversation.header.required")!=null) {
- MusicUtil.setConversationIdRequired(Boolean.parseBoolean(properties.getProperty("conversation.header.required")));
- }
-
- if (properties.getProperty("clientId.header.required")!=null) {
- MusicUtil.setClientIdRequired(Boolean.parseBoolean(properties.getProperty("clientId.header.required")));
- }
-
- if (properties.getProperty("messageId.header.required")!=null) {
- MusicUtil.setMessageIdRequired(Boolean.parseBoolean(properties.getProperty("messageId.header.required")));
- }
-
- if (properties.getProperty("music.aaf.ns")!=null) {
- MusicUtil.setMusicAafNs(properties.getProperty("music.aaf.ns"));
- }
-
- if (properties.getProperty("cipher.enc.key")!=null) {
- MusicUtil.setCipherEncKey(properties.getProperty("cipher.enc.key"));
- }
-
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
- // TODO Auto-generated method stub
-
- }
-
-}
diff --git a/src/main/java/org/onap/music/main/ResultType.java b/src/main/java/org/onap/music/main/ResultType.java
deleted file mode 100644
index f5ef2070..00000000
--- a/src/main/java/org/onap/music/main/ResultType.java
+++ /dev/null
@@ -1,42 +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.main;
-
-public enum ResultType {
- SUCCESS("Success"), FAILURE("Failure"),
- SYNTAXERROR("SyntaxError"), EXCEPTION("Exception"),
- BODYMISSING("Incomplete Request body. Please correct your input request and retry.");
-
- private String result;
-
- ResultType(String result) {
- this.result = result;
- }
-
- public String getResult() {
- return result;
- }
-
-}
-
-
diff --git a/src/main/java/org/onap/music/main/ReturnType.java b/src/main/java/org/onap/music/main/ReturnType.java
deleted file mode 100644
index f02dabbf..00000000
--- a/src/main/java/org/onap/music/main/ReturnType.java
+++ /dev/null
@@ -1,75 +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.main;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class ReturnType {
- private ResultType result;
- private String message;
-
- private String timingInfo;
-
- public ReturnType(ResultType result, String message) {
- super();
- this.result = result;
- this.message = message;
- }
-
- public String getTimingInfo() {
- return timingInfo;
- }
-
- public void setTimingInfo(String timingInfo) {
- this.timingInfo = timingInfo;
- }
-
- public ResultType getResult() {
- return result;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public String toJson() {
- return "{ \"result\":\"" + result.getResult() + "\", \"message\":\"" + message + "\"}";
- }
-
- public String toString() {
- return result + " | " + message;
- }
-
- public Map<String, Object> toMap() {
- Map<String, Object> newMap = new HashMap<>();
- newMap.put("result", result.getResult());
- newMap.put("message", message);
- return newMap;
- }
-
-}
diff --git a/src/main/java/org/onap/music/response/jsonobjects/JsonResponse.java b/src/main/java/org/onap/music/response/jsonobjects/JsonResponse.java
deleted file mode 100644
index 5ae49f5d..00000000
--- a/src/main/java/org/onap/music/response/jsonobjects/JsonResponse.java
+++ /dev/null
@@ -1,322 +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.response.jsonobjects;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.onap.music.lockingservice.cassandra.MusicLockState.LockStatus;
-import org.onap.music.main.ResultType;
-
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-@ApiModel(value = "JsonResponse", description = "General Response JSON")
-public class JsonResponse {
-
- /* Status is required */
- private ResultType status;
-
- /* Standard informational fields */
- private String error;
- private String message;
-
- /* versioning */
- private String musicVersion;
- private String musicBuild;
-
- /* Data Fields */
- private Map<String, HashMap<String, Object>> dataResult;
-
- /* Locking fields */
- private String lock;
- private LockStatus lockStatus;
- private List<String> lockHolders;
- private String lockLease;
- private boolean isLockHolders=false;
-
- /**
- * Create a JSONLock Response
- * Use setters to provide more information as in
- * JsonLockResponse(ResultType.SUCCESS).setMessage("We did it").setLock(mylockname)
- * @param status
- */
- public JsonResponse(ResultType status) {
- this.status = status;
- }
-
- public boolean isLockHolders() {
- return isLockHolders;
- }
-
- public JsonResponse setisLockHolders(boolean isLockHolders) {
- this.isLockHolders = isLockHolders;
- return this;
- }
-
- /**
- *
- * @return
- */
- @ApiModelProperty(value = "Overall status of the response.",
- allowableValues = "Success,Failure")
- public ResultType getStatus() {
- return status;
- }
-
- /**
- *
- * @param status
- */
- public JsonResponse setStatus(ResultType status) {
- this.status = status;
- return this;
- }
-
- /**
- *
- * @return the error
- */
- @ApiModelProperty(value = "Error value")
- public String getError() {
- return error;
- }
-
- /**
- *
- * @param error
- */
- public JsonResponse setError(String error) {
- this.error = error;
- return this;
- }
-
- /**
- *
- * @return the message
- */
- @ApiModelProperty(value = "Message value")
- public String getMessage() {
- return message;
- }
-
- /**
- *
- * @param message
- */
- public JsonResponse setMessage(String message) {
- this.message = message;
- return this;
- }
-
-
- /**
- * .
- * @return the music version
- */
- public String getMusicVersion() {
- return this.musicVersion;
- }
-
- /**
- * .
- * @param version of music
- * @return
- */
- public JsonResponse setMusicVersion(String version) {
- this.musicVersion = version;
- return this;
- }
-
- /**
- * .
- * @return the music version
- */
- public String getMusicBuild() {
- return this.musicBuild;
- }
-
- /**
- * .
- * @param build of music
- * @return
- */
- public JsonResponse setMusicBuild(String build) {
- this.musicBuild = build;
- return this;
- }
-
-
- public Map<String, HashMap<String, Object>> getDataResult() {
- return this.dataResult;
- }
-
- public JsonResponse setDataResult(Map<String, HashMap<String, Object>> map) {
- this.dataResult = map;
- return this;
- }
-
- /**
- *
- * @return
- */
- public String getLock() {
- return lock;
- }
-
- /**
- *
- * @param lock
- */
- public JsonResponse setLock(String lock) {
- this.lock = lock;
- return this;
- }
-
- /**
- *
- * @return the lockStatus
- */
- @ApiModelProperty(value = "Status of the lock")
- public LockStatus getLockStatus() {
- return lockStatus;
- }
-
- /**
- *
- * @param lockStatus
- */
- public JsonResponse setLockStatus(LockStatus lockStatus) {
- this.lockStatus = lockStatus;
- return this;
- }
-
- /**
- *
- *
- * @return the lockHolder
- */
- @ApiModelProperty(value = "Holder of the Lock")
- public List<String> getLockHolder() {
- return lockHolders;
- }
-
- /**
- *
- * @param lockHolder
- */
- public JsonResponse setLockHolder(String lockHolder) {
- this.lockHolders = new ArrayList<String>();
- this.lockHolders.add(lockHolder);
- return this;
- }
-
- public JsonResponse setLockHolder(List<String> lockHolders) {
- this.lockHolders = lockHolders;
- return this;
- }
-
-
- /**
- * @return the lockLease
- */
- public String getLockLease() {
- return lockLease;
- }
-
- /**
- * @param lockLease the lockLease to set
- */
- public JsonResponse setLockLease(String lockLease) {
- this.lockLease = lockLease;
- return this;
- }
-
- /**
- * Convert to Map
- *
- * @return
- */
- public Map<String, Object> toMap() {
- Map<String, Object> fullMap = new HashMap<>();
- fullMap.put("status", status);
- if (error != null && !"".equals(error)) {
- fullMap.put("error", error);
- }
- if (message != null) {
- fullMap.put("message", message);
- }
-
- if (musicVersion != null) {
- fullMap.put("version", musicVersion);
- }
-
- if (musicBuild != null) {
- fullMap.put("build", musicBuild);
- }
-
- if (dataResult != null) {
- fullMap.put("result", dataResult);
- }
-
- if (lock != null) {
- Map<String, Object> lockMap = new HashMap<>();
- if (lock != null) {
- lockMap.put("lock", lock);
- }
- if (lockStatus != null) {
- lockMap.put("lock-status", lockStatus);
- }
- if (lockHolders != null && !lockHolders.isEmpty()) {
- if (lockHolders.size()==1 && !isLockHolders) {
- //for backwards compatability
- lockMap.put("lock-holder", lockHolders.get(0));
- } else {
- lockMap.put("lock-holder", lockHolders);
- }
- }
- if (lockLease != null) {
- lockMap.put("lock-lease", lockLease);
- }
- fullMap.put("lock", lockMap);
- }
-
- return fullMap;
- }
-
- /**
- * Convert to String
- */
- @Override
- public String toString() {
- return "JsonLockResponse [status=" + status + ", error=" + error + ", message=" + message
- + ", lock=" + lock + ", lockStatus=" + lockStatus + ", lockHolder="
- + lockHolders + "]";
- }
-
-}
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
diff --git a/src/main/java/org/onap/music/service/MusicCoreService.java b/src/main/java/org/onap/music/service/MusicCoreService.java
deleted file mode 100644
index b3226906..00000000
--- a/src/main/java/org/onap/music/service/MusicCoreService.java
+++ /dev/null
@@ -1,181 +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.service;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.onap.music.datastore.Condition;
-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.exceptions.MusicLockingException;
-import org.onap.music.exceptions.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.lockingservice.cassandra.LockType;
-import org.onap.music.lockingservice.cassandra.MusicLockState;
-import org.onap.music.main.ResultType;
-import org.onap.music.main.ReturnType;
-
-import com.datastax.driver.core.ResultSet;
-
-public interface MusicCoreService {
-
-
- // Core Music Database Methods
-
-
- public ReturnType eventualPut(PreparedQueryObject queryObject);
-
- public ReturnType eventualPut_nb(PreparedQueryObject queryObject,String keyspace,String tablename,String primaryKey);
-
- public ReturnType criticalPut(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, String lockId, Condition conditionInfo);
-
- public ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency)
- throws MusicServiceException,MusicQueryException;
-
- public ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException;
-
- public ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException, MusicQueryException;
-
- public ReturnType atomicPutWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo) throws MusicLockingException;
-
- public ResultSet atomicGetWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException;
-
- public ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo)
- throws MusicLockingException, MusicQueryException, MusicServiceException;
-
- public ResultSet criticalGet(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, String lockId) throws MusicServiceException;
-
- // Core Music Locking Service Methods
-
- /**
- * Create a lock ref in the music lock store.
- * Default is write as this is the safest semantically
- *
- * @param fullyQualifiedKey the key to create a lock on
- * @see {@link #creatLockReference(String, LockType)}
- */
- public String createLockReference(String fullyQualifiedKey) throws MusicLockingException; // lock name
-
- /**
- * Create a lock ref in the music lock store
- * @param fullyQualifiedKey the key to create a lock on
- * @param locktype the type of lock create, see {@link LockType}
- */
- public String createLockReference(String fullyQualifiedKey, LockType locktype) throws MusicLockingException;
-
- /**
- * Create a lock ref in the music lock store
- * @param fullyQualifiedKey the key to create a lock on
- * @param locktype the type of lock create, see {@link LockType}
- * @param owner the owner of the lock, for deadlock prevention
- */
- public String createLockReference(String fullyQualifiedKey, LockType locktype, String owner) throws MusicLockingException;
-
- public ReturnType acquireLockWithLease(String key, String lockReference, long leasePeriod)
- throws MusicLockingException, MusicQueryException, MusicServiceException; // key,lock id,time
-
- public ReturnType acquireLock(String key, String lockReference)
- throws MusicLockingException, MusicQueryException, MusicServiceException; // key,lock id
-
- public ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject,
- String consistency) throws MusicServiceException;
-
- public ResultSet quorumGet(PreparedQueryObject query);
-
- /**
- * Gets top of queue for fullyQualifiedKey
- * @param fullyQualifiedKey
- * @return
- */
- public String whoseTurnIsIt(String fullyQualifiedKey);// lock name
-
- /**
- * Gets the current lockholder(s) for lockName
- * @param lockName
- * @return
- */
- public List<String> getCurrentLockHolders(String fullyQualifiedKey);
-
- public void destroyLockRef(String lockId) throws MusicLockingException;
-
- public void deleteLock(String lockName) throws MusicLockingException;
-
- public ReturnType promoteLock(String lockIdToPromote) throws MusicLockingException;
-
- public List<String> getLockQueue(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException;
-
- public long getLockQueueSize(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException;
-
- public Map<String, Object> validateLock(String lockName);
-
- public MusicLockState releaseLock(String lockId, boolean voluntaryRelease) throws MusicLockingException;
-
- public List<String> releaseAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicLockingException, MusicServiceException, MusicQueryException;
-
-
- //Methods added for orm
-
-
- public ResultType createTable(JsonTable jsonTableObject, String consistencyInfo) throws MusicServiceException,MusicQueryException;
-
- public ResultType dropTable(JsonTable jsonTableObject, String consistencyInfo)
- throws MusicServiceException,MusicQueryException;
-
- public ResultType createKeyspace(JsonKeySpace jsonKeySpaceObject,String consistencyInfo) throws MusicServiceException,MusicQueryException;
-
- public ResultType dropKeyspace(JsonKeySpace jsonKeySpaceObject, String consistencyInfo)
- throws MusicServiceException,MusicQueryException;
-
- public ResultType createIndex(JsonIndex jsonIndexObject, String consistencyInfo) throws MusicServiceException,MusicQueryException;
-
- public ResultSet select(JsonSelect jsonSelect, MultivaluedMap<String, String> rowParams) throws MusicServiceException, MusicQueryException;
-
- public ResultSet selectCritical(JsonInsert jsonInsertObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException;
-
- public ReturnType insertIntoTable(JsonInsert jsonInsert) throws MusicLockingException, MusicQueryException, MusicServiceException;
-
- public ReturnType updateTable(JsonUpdate jsonUpdateObj,MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException;
-
- public ReturnType deleteFromTable(JsonDelete jsonDeleteObj,MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException;
-
-}
diff --git a/src/main/java/org/onap/music/service/impl/MusicCassaCore.java b/src/main/java/org/onap/music/service/impl/MusicCassaCore.java
deleted file mode 100644
index 0d2e3f0a..00000000
--- a/src/main/java/org/onap/music/service/impl/MusicCassaCore.java
+++ /dev/null
@@ -1,1149 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017 AT&T Intellectual Property
- * Modifications Copyright (c) 2018 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.service.impl;
-
-import java.io.StringWriter;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.onap.music.datastore.Condition;
-import org.onap.music.datastore.MusicDataStore;
-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.MusicDeadlockException;
-import org.onap.music.exceptions.MusicLockingException;
-import org.onap.music.exceptions.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.lockingservice.cassandra.CassaLockStore;
-import org.onap.music.lockingservice.cassandra.CassaLockStore.LockObject;
-import org.onap.music.lockingservice.cassandra.LockType;
-import org.onap.music.lockingservice.cassandra.MusicLockState;
-import org.onap.music.lockingservice.cassandra.MusicLockState.LockStatus;
-import org.onap.music.main.MusicUtil;
-import org.onap.music.main.ResultType;
-import org.onap.music.main.ReturnType;
-import org.onap.music.service.MusicCoreService;
-
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.TableMetadata;
-
-public class MusicCassaCore implements MusicCoreService {
-
- private static CassaLockStore mLockHandle = null;
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicCassaCore.class);
- private static MusicCassaCore musicCassaCoreInstance = null;
-
- private MusicCassaCore() {
- // not going to happen
- }
-
- public static CassaLockStore getmLockHandle() {
- return mLockHandle;
- }
-
- public static void setmLockHandle(CassaLockStore mLockHandle) {
- MusicCassaCore.mLockHandle = mLockHandle;
- }
-
- public static MusicCassaCore getInstance() {
-
- if(musicCassaCoreInstance == null) {
- musicCassaCoreInstance = new MusicCassaCore();
- }
- return musicCassaCoreInstance;
- }
-
-
-
-
- public static CassaLockStore getLockingServiceHandle() throws MusicLockingException {
- logger.info(EELFLoggerDelegate.applicationLogger,"Acquiring lock store handle");
- long start = System.currentTimeMillis();
-
- if (mLockHandle == null) {
- try {
- mLockHandle = new CassaLockStore(MusicDataStoreHandle.getDSHandle());
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKHANDLE,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
- throw new MusicLockingException("Failed to aquire Locl store handle " + e);
- }
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to acquire lock store handle:" + (end - start) + " ms");
- return mLockHandle;
- }
-
- public String createLockReference(String fullyQualifiedKey) throws MusicLockingException {
- return createLockReference(fullyQualifiedKey, LockType.WRITE);
- }
-
- public String createLockReference(String fullyQualifiedKey, LockType locktype) throws MusicLockingException {
- return createLockReference(fullyQualifiedKey, locktype, null);
- }
-
- public String createLockReference(String fullyQualifiedKey, LockType locktype, String owner) throws MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String lockName = splitString[2];
-
- logger.info(EELFLoggerDelegate.applicationLogger,"Creating lock reference for lock name:" + lockName);
- long start = System.currentTimeMillis();
- String lockReference = null;
-
- try {
- boolean deadlock = getLockingServiceHandle().checkForDeadlock(keyspace, table, lockName, locktype, owner, false);
- if (deadlock) {
- MusicDeadlockException e = new MusicDeadlockException("Deadlock detected when " + owner + " tried to create lock on " + keyspace + "." + table + "." + lockName);
- e.setValues(owner, keyspace, table, lockName);
- throw e;
- }
- } catch (MusicDeadlockException e) {
- //just threw this, no need to wrap it
- throw e;
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- throw new MusicLockingException("Unable to check for deadlock. " + e.getMessage(), e);
- }
-
- try {
- lockReference = "" + getLockingServiceHandle().genLockRefandEnQueue(keyspace, table, lockName, locktype, owner);
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- throw new MusicLockingException("Unable to create lock reference. " + e.getMessage(), e);
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- throw new MusicLockingException("Unable to create lock reference. " + e.getMessage(), e);
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to create lock reference:" + (end - start) + " ms");
- return lockReference;
- }
-
- public ReturnType promoteLock(String lockId) throws MusicLockingException {
- String[] splitString = lockId.split("\\.");
- String keyspace = splitString[0].substring(1);//remove '$'
- String table = splitString[1];
- String primaryKeyValue = splitString[2].substring(0, splitString[2].lastIndexOf("$"));
- String localFullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf("$")+1); //lockRef is "$" to end
-
- logger.info(EELFLoggerDelegate.applicationLogger,"Attempting to promote lock " + lockId);
-
- try {
- return getLockingServiceHandle().promoteLock(keyspace, table, primaryKeyValue, lockRef);
- } catch (MusicServiceException e) {
- throw new MusicLockingException("Unable to promote lock. ", e);
- } catch (MusicQueryException e) {
- throw new MusicLockingException("Unable to promote lock. ", e);
- }
-
- }
-
-
- public ReturnType acquireLockWithLease(String fullyQualifiedKey, String lockReference, long leasePeriod)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- evictExpiredLockHolder(fullyQualifiedKey,leasePeriod);
- return acquireLock(fullyQualifiedKey, lockReference);
- }
-
- private void evictExpiredLockHolder(String fullyQualifiedKey, long leasePeriod)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
-
- LockObject currentLockHolderObject = getLockingServiceHandle().peekLockQueue(keyspace, table, primaryKeyValue);
-
- if (!currentLockHolderObject.getIsLockOwner()) { // no lock holder
- return;
- }
- /*
- * Release the lock of the previous holder if it has expired. if the update to the acquire time has
- * not reached due to network delays, simply use the create time as the reference
- */
- long referenceTime = Math.max(Long.parseLong(currentLockHolderObject.getAcquireTime()),
- Long.parseLong(currentLockHolderObject.getCreateTime()));
- if ((System.currentTimeMillis() - referenceTime) > leasePeriod) {
- forciblyReleaseLock(fullyQualifiedKey, currentLockHolderObject.getLockRef() + "");
- logger.info(EELFLoggerDelegate.applicationLogger, currentLockHolderObject.getLockRef() + " forcibly released");
- }
- }
-
- public ReturnType acquireLock(String fullyQualifiedKey, String lockId)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- String[] splitString = lockId.split("\\.");
- String keyspace = splitString[0].substring(1);//remove '$'
- String table = splitString[1];
- String primaryKeyValue = splitString[2].substring(0, splitString[2].lastIndexOf("$"));
- String localFullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf("$")+1); //lockRef is "$" to end
-
- LockObject lockInfo = getLockingServiceHandle().getLockInfo(keyspace, table, primaryKeyValue, lockRef);
-
- if (!lockInfo.getIsLockOwner()) {
- return new ReturnType(ResultType.FAILURE, lockId + " is not a lock holder");//not top of the lock store q
- }
-
- if (getLockingServiceHandle().checkForDeadlock(keyspace, table, primaryKeyValue, lockInfo.getLocktype(), lockInfo.getOwner(), true)) {
- MusicDeadlockException e = new MusicDeadlockException("Deadlock detected when " + lockInfo.getOwner() + " tried to create lock on " + keyspace + "." + table + "." + primaryKeyValue);
- e.setValues(lockInfo.getOwner(), keyspace, table, primaryKeyValue);
- throw e;
- }
-
- //check to see if the value of the key has to be synced in case there was a forceful release
- String syncTable = keyspace+".unsyncedKeys_"+table;
- String query = "select * from "+syncTable+" where key='"+localFullyQualifiedKey+"';";
- PreparedQueryObject readQueryObject = new PreparedQueryObject();
- readQueryObject.appendQueryString(query);
- ResultSet results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(readQueryObject);
- if (!results.all().isEmpty()) {
- logger.info("In acquire lock: Since there was a forcible release, need to sync quorum!");
- try {
- syncQuorum(keyspace, table, primaryKeyValue);
- } catch (Exception e) {
- StringWriter sw = new StringWriter();
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), "[ERR506E] Failed to aquire lock ",
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR, e);
- String exceptionAsString = sw.toString();
- return new ReturnType(ResultType.FAILURE, "Exception thrown while syncing key:\n" + exceptionAsString);
- }
- String cleanQuery = "delete from " + syncTable + " where key='"+localFullyQualifiedKey+"';";
- PreparedQueryObject deleteQueryObject = new PreparedQueryObject();
- deleteQueryObject.appendQueryString(cleanQuery);
- MusicDataStoreHandle.getDSHandle().executePut(deleteQueryObject, "critical");
- }
-
- getLockingServiceHandle().updateLockAcquireTime(keyspace, table, primaryKeyValue, lockRef);
-
- return new ReturnType(ResultType.SUCCESS, lockRef+" is the lock holder for the key");
- }
-
-
-
- /**
- *
- * @param tableQueryObject
- * @param consistency
- * @return Boolean Indicates success or failure
- * @throws MusicServiceException
- *
- *
- */
- public ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject,
- String consistency) throws MusicServiceException {
- boolean result = false;
-
- try {
- // create shadow locking table
- result = getLockingServiceHandle().createLockQueue(keyspace, table);
- if (result == false)
- return ResultType.FAILURE;
-
- result = false;
-
- // create table to track unsynced_keys
- table = "unsyncedKeys_" + table;
-
- String tabQuery =
- "CREATE TABLE IF NOT EXISTS " + keyspace + "." + table + " ( key text,PRIMARY KEY (key) );";
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- queryObject.appendQueryString(tabQuery);
- result = false;
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, "eventual");
-
- // create actual table
- result = MusicDataStoreHandle.getDSHandle().executePut(tableQueryObject, consistency);
- } catch (MusicQueryException | MusicServiceException | MusicLockingException ex) {
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.UNKNOWNERROR, ErrorSeverity.WARN,
- ErrorTypes.MUSICSERVICEERROR);
- throw new MusicServiceException(ex.getMessage());
- }
- return result ? ResultType.SUCCESS : ResultType.FAILURE;
- }
-
- private static void syncQuorum(String keyspace, String table, String primaryKeyValue) throws Exception {
- logger.info(EELFLoggerDelegate.applicationLogger,"Performing sync operation---");
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- PreparedQueryObject updateQuery = new PreparedQueryObject();
-
- // get the primary key d
- TableMetadata tableInfo = MusicDataStoreHandle.returnColumnMetadata(keyspace, table);
- String primaryKeyName = tableInfo.getPrimaryKey().get(0).getName(); // we only support single
- // primary key
- DataType primaryKeyType = tableInfo.getPrimaryKey().get(0).getType();
- Object cqlFormattedPrimaryKeyValue =
- MusicUtil.convertToActualDataType(primaryKeyType, primaryKeyValue);
-
- // get the row of data from a quorum
- selectQuery.appendQueryString("SELECT * FROM " + keyspace + "." + table + " WHERE "
- + primaryKeyName + "= ?" + ";");
- selectQuery.addValue(cqlFormattedPrimaryKeyValue);
- MusicUtil.writeBackToQuorum(selectQuery, primaryKeyName, updateQuery, keyspace, table,
- cqlFormattedPrimaryKeyValue);
- }
-
- /**
- *
- * @param query
- * @return ResultSet
- */
- public ResultSet quorumGet(PreparedQueryObject query) {
- ResultSet results = null;
- try {
- results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(query);
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR,
- ErrorSeverity.MAJOR, ErrorTypes.GENERALSERVICEERROR, e);
-
- }
- return results;
- }
-
- public String whoseTurnIsIt(String fullyQualifiedKey) {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- LockObject lockOwner = getLockingServiceHandle().peekLockQueue(keyspace, table, primaryKeyValue);
- if (!lockOwner.getIsLockOwner()) {
- return null;
- }
- return "$" + fullyQualifiedKey + "$" + lockOwner.getLockRef();
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), AppMessages.LOCKINGERROR + fullyQualifiedKey,
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
- }
- return null;
- }
-
- public List<String> getCurrentLockHolders(String fullyQualifiedKey) {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- return getLockingServiceHandle().getCurrentLockHolders(keyspace, table, primaryKeyValue);
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKINGERROR+fullyQualifiedKey ,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
- }
- return null;
- }
-
- /**
- *
- * @param lockReference
- * @return
- */
- public static String getLockNameFromId(String lockReference) {
- StringTokenizer st = new StringTokenizer(lockReference);
- return st.nextToken("$");
- }
-
- @Override
- public void destroyLockRef(String lockId) throws MusicLockingException {
- long start = System.currentTimeMillis();
- String fullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf('$')+1);
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- getLockingServiceHandle().deQueueLockRef(keyspace, table, primaryKeyValue, lockRef,MusicUtil.getRetryCount());
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.DESTROYLOCK+lockRef,
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR, e);
- throw new MusicLockingException(e.getMessage());
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to destroy lock reference:" + (end - start) + " ms");
- }
-
- public MusicLockState destroyLockRef(String fullyQualifiedKey, String lockReference) throws MusicLockingException {
- long start = System.currentTimeMillis();
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- getLockingServiceHandle().deQueueLockRef(keyspace, table, primaryKeyValue, lockReference,MusicUtil.getRetryCount());
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.DESTROYLOCK + lockReference,
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR,e);
- throw new MusicLockingException(e.getMessage());
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to destroy lock reference:" + (end - start) + " ms");
- return new MusicLockState(LockStatus.UNLOCKED, "");
- }
-
- @Override
- public MusicLockState releaseLock(String lockId, boolean voluntaryRelease) throws MusicLockingException {
- String fullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf('$')+1);
- if (voluntaryRelease) {
- return voluntaryReleaseLock(fullyQualifiedKey, lockRef);
- } else {
- return forciblyReleaseLock(fullyQualifiedKey, lockRef);
- }
- }
-
- public MusicLockState voluntaryReleaseLock(String fullyQualifiedKey, String lockReference)
- throws MusicLockingException {
- MusicLockState result = null;
- try {
- result = destroyLockRef(fullyQualifiedKey, lockReference);
- } catch (Exception ex) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Exception in voluntaryReleaseLock() for " + fullyQualifiedKey + "ref: " + lockReference);
- throw new MusicLockingException(ex.getMessage());
- }
- return result;
- }
-
- public MusicLockState forciblyReleaseLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
-
- //leave a signal that this key could potentially be unsynchronized
- String syncTable = keyspace+".unsyncedKeys_"+table;
- PreparedQueryObject queryObject = new PreparedQueryObject();
- String values = "(?)";
- queryObject.addValue(fullyQualifiedKey);
- String insQuery = "insert into "+syncTable+" (key) values "+values+";";
- queryObject.appendQueryString(insQuery);
- try {
- MusicDataStoreHandle.getDSHandle().executePut(queryObject, "critical");
- } catch (Exception e) {
- logger.error("Cannot forcibly release lock: " + fullyQualifiedKey + " " + lockReference + ". "
- + e.getMessage(), e);
- }
-
- //now release the lock
- return destroyLockRef(fullyQualifiedKey, lockReference);
- }
-
- @Override
- public List<String> releaseAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicLockingException, MusicServiceException, MusicQueryException {
-// System.out.println("IN RELEASEALLLOCKSFOROWNER, ");
-
- List<String> lockIds = getLockingServiceHandle().getAllLocksForOwner(ownerId, keyspace, table);
- for (String lockId : lockIds) {
-// System.out.println(" LOCKID = " + lockId);
- //return "$" + keyspace + "." + table + "." + lockName + "$" + String.valueOf(lockRef);
- releaseLock("$" + keyspace + "." + table + "." + lockId, true);
- }
- return lockIds;
- }
-
- /**
- *
- * @param lockName
- * @throws MusicLockingException
- */
- @Deprecated
- public void deleteLock(String lockName) throws MusicLockingException {
- throw new MusicLockingException("Depreciated Method Delete Lock");
- }
-
- // Prepared Query Additions.
-
- /**
- *
- * @param queryObject
- * @return ReturnType
- * @throws MusicServiceException
- */
- public ReturnType eventualPut(PreparedQueryObject queryObject) {
- boolean result = false;
- try {
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, MusicUtil.EVENTUAL);
- } catch (MusicServiceException | MusicQueryException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), "[ERR512E] Failed to get Lock Handle " ,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage() + " " + ex.getCause() + " " + ex);
- return new ReturnType(ResultType.FAILURE, ex.getMessage());
- }
- if (result) {
- return new ReturnType(ResultType.SUCCESS, "Eventual Operation Successfully performed");
- } else {
- return new ReturnType(ResultType.FAILURE, "Eventual Operation failed to perform");
- }
- }
-
- /**
- *
- * @param queryObject
- * @return ReturnType
- * @throws MusicServiceException
- */
- public ReturnType eventualPut_nb(PreparedQueryObject queryObject,String keyspace,String tablename,String primaryKey) {
- boolean result = false;
- long guard = 0;
- PreparedQueryObject getGaurd = new PreparedQueryObject();
- getGaurd.appendQueryString("SELECT guard FROM "+keyspace+".lockq_"+tablename+ " WHERE key = ? ;");
- getGaurd.addValue(primaryKey);
- try {
- ResultSet getGaurdResult = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(getGaurd);
- Row row = getGaurdResult.one();
- if (row != null) {
- guard = row.getLong("guard");
- long timeOfWrite = System.currentTimeMillis();
- long ts = MusicUtil.v2sTimeStampInMicroseconds(guard, timeOfWrite);
- String query = queryObject.getQuery();
- if (!queryObject.getQuery().contains("USING TIMESTAMP")) {
- if (queryObject.getOperation().equalsIgnoreCase("delete"))
- query = query.replaceFirst("WHERE", " USING TIMESTAMP " + ts + " WHERE ");
- else
- query = query.replaceFirst("SET", "USING TIMESTAMP " + ts + " SET");
- }
- queryObject.replaceQueryString(query);
- }
-
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.applicationLogger,e.getMessage(), e);
- }
- try {
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, MusicUtil.EVENTUAL);
- } catch (MusicServiceException | MusicQueryException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(),"[ERR512E] Failed to get Lock Handle ",
- ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage() + " " + ex.getCause() + " ", ex);
- return new ReturnType(ResultType.FAILURE, ex.getMessage());
- }
- if (result) {
- return new ReturnType(ResultType.SUCCESS, "Eventual Operation Successfully performed");
- } else {
- return new ReturnType(ResultType.FAILURE, "Eventual Operation failed to perform");
- }
- }
-
- /**
- *
- * @param keyspace
- * @param table
- * @param primaryKeyValue
- * @param queryObject
- * @param lockId
- * @return
- */
- public ReturnType criticalPut(String keyspace, String table, String primaryKeyValue,
- PreparedQueryObject queryObject, String lockId, Condition conditionInfo) {
- long start = System.currentTimeMillis();
- try {
- String keyLock = lockId.substring(lockId.lastIndexOf(".") + 1,lockId.lastIndexOf("$"));
- if (lockId.contains(".") && !keyLock.equals(primaryKeyValue)) {
- return new ReturnType(ResultType.FAILURE,"Lock value '" + keyLock + "' and key value '"
- + primaryKeyValue + "' not match. Please check your values: "
- + lockId + " .");
- }
- LockObject lockObject = getLockingServiceHandle().getLockInfo(keyspace, table, primaryKeyValue,
- lockId.substring(lockId.lastIndexOf("$") + 1));
-
- if ( lockObject == null ) {
- return new ReturnType(ResultType.FAILURE, lockId + " does not exist.");
- } else if (!lockObject.getIsLockOwner()) {
- return new ReturnType(ResultType.FAILURE, lockId + " is not the lock holder");
- } else if (lockObject.getLocktype() != LockType.WRITE) {
- return new ReturnType(ResultType.FAILURE,
- "Attempting to do write operation, but " + lockId + " is a read lock");
- }
-
- if (conditionInfo != null) {
- try {
- if (conditionInfo.testCondition() == false)
- return new ReturnType(ResultType.FAILURE, "Lock acquired but the condition is not true");
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger, e);
- return new ReturnType(ResultType.FAILURE,
- "Exception thrown while checking the condition, check its sanctity:\n" + e.getMessage());
- }
- }
- String query = queryObject.getQuery();
- long timeOfWrite = System.currentTimeMillis();
- long lockOrdinal = Long.parseLong(lockId.substring(lockId.lastIndexOf("$") + 1));
- long ts = MusicUtil.v2sTimeStampInMicroseconds(lockOrdinal, timeOfWrite);
- // TODO: use Statement instead of modifying query
- if (!queryObject.getQuery().contains("USING TIMESTAMP")) {
- if (queryObject.getOperation().equalsIgnoreCase("delete"))
- query = query.replaceFirst("WHERE", " USING TIMESTAMP " + ts + " WHERE ");
- else if (queryObject.getOperation().equalsIgnoreCase("insert"))
- query = query.replaceFirst(";", " USING TIMESTAMP " + ts + " ; ");
- else
- query = query.replaceFirst("SET", "USING TIMESTAMP " + ts + " SET");
- }
- queryObject.replaceQueryString(query);
- MusicDataStore dsHandle = MusicDataStoreHandle.getDSHandle();
- dsHandle.executePut(queryObject, MusicUtil.CRITICAL);
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken for the critical put:" + (end - start) + " ms");
- } catch (MusicQueryException | MusicServiceException | MusicLockingException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), e);
- return new ReturnType(ResultType.FAILURE,
- "Exception thrown while doing the critical put: "
- + e.getMessage());
- }
- return new ReturnType(ResultType.SUCCESS, "Update performed");
- }
-
-
- /**
- *
- * @param queryObject
- * @param consistency
- * @return Boolean Indicates success or failure
- * @throws MusicServiceException
- *
- *
- */
- public ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency) throws MusicServiceException,MusicQueryException {
- // this is mainly for some functions like keyspace creation etc which does not
- // really need the bells and whistles of Music locking.
- boolean result = false;
-// try {
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, consistency);
-// } catch (MusicQueryException | MusicServiceException ex) {
- // logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.UNKNOWNERROR,
- // ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR, ex);
-// throw new MusicServiceException(ex.getMessage(),ex);
-// }
- return result ? ResultType.SUCCESS : ResultType.FAILURE;
- }
-
- /**
- * This method performs DDL operation on cassandra.
- *
- * @param queryObject query object containing prepared query and values
- * @return ResultSet
- * @throws MusicServiceException
- */
- public ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException {
- ResultSet results = null;
- try {
- results = MusicDataStoreHandle.getDSHandle().executeOneConsistencyGet(queryObject);
- } catch (MusicQueryException | MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), e);
- throw new MusicServiceException(e.getMessage());
- }
- return results;
- }
-
- /**
- * This method performs DDL operations on cassandra, if the the resource is available. Lock ID
- * is used to check if the resource is free.
- *
- * @param keyspace name of the keyspace
- * @param table name of the table
- * @param primaryKeyValue primary key value
- * @param queryObject query object containing prepared query and values
- * @param lockId lock ID to check if the resource is free to perform the operation.
- * @return ResultSet
- */
- public ResultSet criticalGet(String keyspace, String table, String primaryKeyValue,
- PreparedQueryObject queryObject, String lockId) throws MusicServiceException {
- ResultSet results = null;
- String keyLock = lockId.substring(lockId.lastIndexOf(".") + 1,lockId.lastIndexOf("$"));
- try {
- if (lockId.contains(".") && !keyLock.equals(primaryKeyValue)) {
- throw new MusicLockingException("Lock value '" + keyLock + "' and key value '"
- + primaryKeyValue + "' do not match. Please check your values: "
- + lockId + " .");
- }
- LockObject lockObject = getLockingServiceHandle().getLockInfo(keyspace, table, primaryKeyValue,
- lockId.substring(lockId.lastIndexOf("$") + 1));
- if (null == lockObject) {
- throw new MusicLockingException("No Lock Object. Please check if lock name or key is correct."
- + lockId + " .");
- }
- if ( !lockObject.getIsLockOwner()) {
- return null;// not top of the lock store q
- }
- results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(queryObject);
- } catch ( MusicLockingException e ) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity
- .WARN, ErrorTypes.MUSICSERVICEERROR);
- throw new MusicServiceException(
- "Cannot perform critical get for key: " + primaryKeyValue + " : " + e.getMessage());
- } catch (MusicQueryException | MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity
- .WARN, ErrorTypes.MUSICSERVICEERROR, e);
- throw new MusicServiceException(
- "Cannot perform critical get for key: " + primaryKeyValue + " : " + e.getMessage());
- }
- return results;
- }
-
- /**
- * This method performs DML operation on cassandra, when the lock of the dd is acquired.
- *
- * @param keyspaceName name of the keyspace
- * @param tableName name of the table
- * @param primaryKey primary key value
- * @param queryObject query object containing prepared query and values
- * @return ReturnType
- * @throws MusicLockingException
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- long start = System.currentTimeMillis();
- String fullyQualifiedKey = keyspaceName + "." + tableName + "." + primaryKey;
- String lockId = createLockReference(fullyQualifiedKey, LockType.WRITE);
- long lockCreationTime = System.currentTimeMillis();
- ReturnType lockAcqResult = null;
- logger.info(EELFLoggerDelegate.applicationLogger,
- "***Acquiring lock for atomicPut() query : " + queryObject.getQuery() + " : " + primaryKey);
- logger.info(EELFLoggerDelegate.applicationLogger,
- "***Acquiring lock for atomicPut() values: " + queryObject.getValues().toString());
- if (conditionInfo != null) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "***Acquiring lock for atomicPut() conditions: " + conditionInfo.toString());
- }
- try {
- lockAcqResult = acquireLockWithLease(fullyQualifiedKey, lockId, MusicUtil.getDefaultLockLeasePeriod());
- } catch (MusicLockingException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,
- "Exception while acquireLockWithLease() in atomic put for key: " + primaryKey);
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage());
- throw new MusicServiceException(
- "Cannot perform atomic put for key: " + primaryKey + " : " + ex.getMessage());
- }
- long lockAcqTime = System.currentTimeMillis();
-
- /*
- * if (!lockAcqResult.getResult().equals(ResultType.SUCCESS)) { logger.info(EELFLoggerDelegate.
- * applicationLogger,"unable to acquire lock, id " + lockId);
- * voluntaryReleaseLock(fullyQualifiedKey,lockId); return lockAcqResult; }
- */
-
- logger.info(EELFLoggerDelegate.applicationLogger, "acquired lock with id " + lockId);
- String lockRef = lockId.substring(lockId.lastIndexOf("$"));
- ReturnType criticalPutResult = null;
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- criticalPutResult = criticalPut(keyspaceName, tableName, primaryKey, queryObject, lockRef, conditionInfo);
- long criticalPutTime = System.currentTimeMillis();
- long lockDeleteTime = System.currentTimeMillis();
- String timingInfo = "|lock creation time:" + (lockCreationTime - start) + "|lock accquire time:"
- + (lockAcqTime - lockCreationTime) + "|critical put time:" + (criticalPutTime - lockAcqTime)
- + "|lock delete time:" + (lockDeleteTime - criticalPutTime) + "|";
- criticalPutResult.setTimingInfo(timingInfo);
- } else {
- logger.info(EELFLoggerDelegate.applicationLogger, "unable to acquire lock, id " + lockId);
- criticalPutResult = lockAcqResult;
- }
- try {
- voluntaryReleaseLock(fullyQualifiedKey, lockId);
- } catch (MusicLockingException ex) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Exception occured while deleting lock after atomic put for key: " + primaryKey);
- criticalPutResult.setMessage(criticalPutResult.getMessage() + "Lock release failed");
- }
- return criticalPutResult;
- }
-
-
-
- /**
- * This method performs DDL operation on cassasndra, when the lock for the resource is acquired.
- *
- * @param keyspaceName name of the keyspace
- * @param tableName name of the table
- * @param primaryKey primary key value
- * @param queryObject query object containing prepared query and values
- * @return ResultSet
- * @throws MusicServiceException
- * @throws MusicLockingException
- * @throws MusicQueryException
- */
- public ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException, MusicQueryException {
- String fullyQualifiedKey = keyspaceName + "." + tableName + "." + primaryKey;
- String lockId = createLockReference(fullyQualifiedKey, LockType.READ);
- long leasePeriod = MusicUtil.getDefaultLockLeasePeriod();
- ReturnType lockAcqResult = null;
- ResultSet result = null;
- logger.info(EELFLoggerDelegate.applicationLogger, "Acquiring lock for atomicGet() : " + queryObject.getQuery());
- try {
- lockAcqResult = acquireLockWithLease(fullyQualifiedKey, lockId, MusicUtil.getDefaultLockLeasePeriod());
- } catch (MusicLockingException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,
- "Exception while acquireLockWithLease() in atomic get for key: " + primaryKey);
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage());
- throw new MusicServiceException(
- "Cannot perform atomic get for key: " + primaryKey + " : " + ex.getMessage());
- }
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- logger.info(EELFLoggerDelegate.applicationLogger, "acquired lock with id " + lockId);
- String lockRef = lockId.substring(lockId.lastIndexOf("$"));
- result = criticalGet(keyspaceName, tableName, primaryKey, queryObject, lockRef);
- } else {
- logger.info(EELFLoggerDelegate.applicationLogger, "unable to acquire lock, id " + lockId);
- }
- try {
- voluntaryReleaseLock(fullyQualifiedKey, lockId);
- } catch (MusicLockingException ex) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Exception occured while deleting lock after atomic put for key: " + primaryKey);
- throw new MusicLockingException(ex.getMessage());
- }
-
- return result;
- }
-
-
-
- /**
- * @param lockName
- * @return
- */
- public Map<String, Object> validateLock(String lockName) {
- return MusicUtil.validateLock(lockName);
- }
-
- @Override
- @Deprecated
- public ReturnType atomicPutWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo) throws MusicLockingException {
- return null;
- }
-
- @Override
- public List<String> getLockQueue(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
-
- return getLockingServiceHandle().getLockQueue(keyspace, table, primaryKeyValue);
- }
- @Override
- public long getLockQueueSize(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
-
- return getLockingServiceHandle().getLockQueueSize(keyspace, table, primaryKeyValue);
- }
-
- @Override
- @Deprecated
- public ResultSet atomicGetWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException {
- //deprecated
- return null;
- }
-
- //Methods added for ORM changes
-
- public ResultType createKeyspace(JsonKeySpace jsonKeySpaceObject,String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- ResultType result = nonKeyRelatedPut(jsonKeySpaceObject.genCreateKeyspaceQuery(), consistencyInfo);
- logger.info(EELFLoggerDelegate.applicationLogger, " Keyspace Creation Process completed successfully");
-
- return result;
- }
-
- public ResultType dropKeyspace(JsonKeySpace jsonKeySpaceObject, String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- ResultType result = nonKeyRelatedPut(jsonKeySpaceObject.genDropKeyspaceQuery(),
- consistencyInfo);
- logger.info(EELFLoggerDelegate.applicationLogger, " Keyspace deletion Process completed successfully");
- return result;
- }
-
- public ResultType createTable(JsonTable jsonTableObject, String consistencyInfo)
- throws MusicServiceException, MusicQueryException {
- ResultType result = null;
- try {
- result = createTable(jsonTableObject.getKeyspaceName(),
- jsonTableObject.getTableName(), jsonTableObject.genCreateTableQuery(), consistencyInfo);
-
- } catch (MusicServiceException ex) {
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.UNKNOWNERROR, ErrorSeverity.WARN,
- ErrorTypes.MUSICSERVICEERROR);
- throw new MusicServiceException(ex.getMessage());
- }
- logger.info(EELFLoggerDelegate.applicationLogger, " Table Creation Process completed successfully ");
- return result;
- }
-
- public ResultType dropTable(JsonTable jsonTableObject,String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- ResultType result = nonKeyRelatedPut(jsonTableObject.genDropTableQuery(),
- consistencyInfo);
- logger.info(EELFLoggerDelegate.applicationLogger, " Table deletion Process completed successfully ");
-
- return result;
- }
-
- @Override
- public ResultType createIndex(JsonIndex jsonIndexObject, String consistencyInfo)
- throws MusicServiceException, MusicQueryException{
- ResultType result = nonKeyRelatedPut(jsonIndexObject.genCreateIndexQuery(),
- consistencyInfo);
-
- logger.info(EELFLoggerDelegate.applicationLogger, " Index creation Process completed successfully ");
- return result;
- }
-
- /**
- * This method performs DDL operation on cassandra.
- *
- * @param queryObject query object containing prepared query and values
- * @return ResultSet
- * @throws MusicServiceException
- */
- public ResultSet select(JsonSelect jsonSelect, MultivaluedMap<String, String> rowParams)
- throws MusicServiceException, MusicQueryException {
- ResultSet results = null;
- try {
- results = get(jsonSelect.genSelectQuery(rowParams));
- } catch (MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage());
- throw new MusicServiceException(e.getMessage());
- }
- return results;
- }
-
- /**
- * Select Critical
- */
- public ResultSet selectCritical(JsonInsert jsonInsertObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- ResultSet results = null;
- String consistency = "";
- if(null != jsonInsertObj && null != jsonInsertObj.getConsistencyInfo()) {
- consistency = jsonInsertObj.getConsistencyInfo().get("type");
- }
-
- String lockId = jsonInsertObj.getConsistencyInfo().get("lockId");
-
- PreparedQueryObject queryObject = jsonInsertObj.genSelectCriticalPreparedQueryObj(rowParams);
-
- if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- results = criticalGet(jsonInsertObj.getKeyspaceName(), jsonInsertObj.getTableName(),
- jsonInsertObj.getPrimaryKeyVal(), queryObject,lockId);
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- results = atomicGet(jsonInsertObj.getKeyspaceName(), jsonInsertObj.getTableName(),
- jsonInsertObj.getPrimaryKeyVal(), queryObject);
- }
-
- return results;
- }
-
- /**
- * this is insert row into Table
- */
- public ReturnType insertIntoTable(JsonInsert jsonInsertObj)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- String consistency = "";
- if(null != jsonInsertObj && null != jsonInsertObj.getConsistencyInfo()) {
- consistency = jsonInsertObj.getConsistencyInfo().get("type");
- }
-
- ReturnType result = null;
-
- try {
- PreparedQueryObject queryObj = null;
- queryObj = jsonInsertObj.genInsertPreparedQueryObj();
-
- if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL)) {
- result = eventualPut(jsonInsertObj.genInsertPreparedQueryObj());
- } else if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- String lockId = jsonInsertObj.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 new ReturnType(ResultType.FAILURE, "LockId cannot be null. Create lock "
- + "and acquire lock or use ATOMIC instead of CRITICAL");
- }
- result = criticalPut(jsonInsertObj.getKeyspaceName(),
- jsonInsertObj.getTableName(), jsonInsertObj.getPrimaryKeyVal(), jsonInsertObj.genInsertPreparedQueryObj(), lockId,null);
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- result = atomicPut(jsonInsertObj.getKeyspaceName(), jsonInsertObj.getTableName(),
- jsonInsertObj.getPrimaryKeyVal(), jsonInsertObj.genInsertPreparedQueryObj(), null);
- }
- } catch (Exception ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity
- .WARN, ErrorTypes.MUSICSERVICEERROR, ex);
- return new ReturnType(ResultType.FAILURE, ex.getMessage());
- }
-
- return result;
- }
-
- /**
- * This is insert row into Table
- */
- public ReturnType updateTable(JsonUpdate jsonUpdateObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- ReturnType result = null;
- String consistency = "";
- if(null != jsonUpdateObj && null != jsonUpdateObj.getConsistencyInfo()) {
- consistency = jsonUpdateObj.getConsistencyInfo().get("type");
- }
- PreparedQueryObject queryObject = jsonUpdateObj.genUpdatePreparedQueryObj(rowParams);
-
- Condition conditionInfo;
- if (jsonUpdateObj.getConditions() == null) {
- conditionInfo = null;
- } else {
- // to avoid parsing repeatedly, just send the select query to obtain row
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- selectQuery.appendQueryString("SELECT * FROM " + jsonUpdateObj.getKeyspaceName() + "." + jsonUpdateObj.getTableName() + " WHERE "
- + jsonUpdateObj.getRowIdString() + ";");
- selectQuery.addValue(jsonUpdateObj.getPrimarKeyValue());
- conditionInfo = new Condition(jsonUpdateObj.getConditions(), selectQuery);
- }
-
-
- if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL)) {
- result = eventualPut(queryObject);
- } else if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- String lockId = jsonUpdateObj.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 new ReturnType(ResultType.FAILURE, "LockId cannot be null. Create lock "
- + "and acquire lock or use ATOMIC instead of CRITICAL");
- }
- result = criticalPut(jsonUpdateObj.getKeyspaceName(), jsonUpdateObj.getTableName(), jsonUpdateObj.getPrimarKeyValue(),
- queryObject, lockId, conditionInfo);
- } else if (consistency.equalsIgnoreCase("atomic_delete_lock")) {
- // this function is mainly for the benchmarks
- try {
- result = atomicPutWithDeleteLock(jsonUpdateObj.getKeyspaceName(), jsonUpdateObj.getTableName(),
- jsonUpdateObj.getPrimarKeyValue(), queryObject, conditionInfo);
- } catch (MusicLockingException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN,
- ErrorTypes.GENERALSERVICEERROR, e);
- throw new MusicLockingException(AppMessages.UNKNOWNERROR.toString());
-
- }
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- try {
- result = atomicPut(jsonUpdateObj.getKeyspaceName(), jsonUpdateObj.getTableName(), jsonUpdateObj.getPrimarKeyValue(),
- queryObject, conditionInfo);
- } catch (MusicLockingException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR, e);
- throw new MusicLockingException(AppMessages.UNKNOWNERROR.toString());
- }
- } else if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL_NB)) {
- try {
- result = eventualPut_nb(queryObject, jsonUpdateObj.getKeyspaceName(),
- jsonUpdateObj.getTableName(), jsonUpdateObj.getPrimarKeyValue());
- }catch (Exception e) {
- return new ReturnType(ResultType.FAILURE, e.getMessage());
- }
-
- }
-
- return result;
- }
-
- /**
- * This method is for Delete From Table
- */
- public ReturnType deleteFromTable(JsonDelete jsonDeleteObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- ReturnType result = null;
- String consistency = "";
- if(null != jsonDeleteObj && null != jsonDeleteObj.getConsistencyInfo()) {
- consistency = jsonDeleteObj.getConsistencyInfo().get("type");
- }
- PreparedQueryObject queryObject = jsonDeleteObj.genDeletePreparedQueryObj(rowParams);
-
- // get the conditional, if any
- Condition conditionInfo;
- if (jsonDeleteObj.getConditions() == null) {
- conditionInfo = null;
- } else {
- // to avoid parsing repeatedly, just send the select query to obtain row
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- selectQuery.appendQueryString("SELECT * FROM " + jsonDeleteObj.getKeyspaceName() + "." + jsonDeleteObj.getTableName() + " WHERE "
- + jsonDeleteObj.getRowIdString() + ";");
- selectQuery.addValue(jsonDeleteObj.getPrimarKeyValue());
- conditionInfo = new Condition(jsonDeleteObj.getConditions(), selectQuery);
- }
-
- if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL))
- result = eventualPut(queryObject);
- else if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- String lockId = jsonDeleteObj.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 new ReturnType(ResultType.FAILURE, "LockId cannot be null. Create lock "
- + "and acquire lock or use ATOMIC instead of CRITICAL");
- }
- result = criticalPut(jsonDeleteObj.getKeyspaceName(),
- jsonDeleteObj.getTableName(), jsonDeleteObj.getPrimarKeyValue(),
- queryObject, lockId, conditionInfo);
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- result = atomicPut(jsonDeleteObj.getKeyspaceName(),
- jsonDeleteObj.getTableName(), jsonDeleteObj.getPrimarKeyValue(),
- queryObject, conditionInfo);
- } else if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL_NB)) {
- result = eventualPut_nb(queryObject, jsonDeleteObj.getKeyspaceName(),
- jsonDeleteObj.getTableName(), jsonDeleteObj.getPrimarKeyValue());
- }
-
- return result;
- }
-
-
-}