various Updates
[music.git] / src / main / java / org / onap / music / datastore / MusicDataStore.java
index e1ae5b0..563e07f 100644 (file)
@@ -24,12 +24,16 @@ 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.main.MusicUtil;
@@ -46,7 +50,9 @@ import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.TableMetadata;
 import com.datastax.driver.core.exceptions.AlreadyExistsException;
+import com.datastax.driver.core.exceptions.InvalidQueryException;
 import com.datastax.driver.core.exceptions.NoHostAvailableException;
+import com.sun.jersey.core.util.Base64;
 
 /**
  * @author nelson24
@@ -65,6 +71,13 @@ public class MusicDataStore {
     public void setSession(Session session) {
         this.session = session;
     }
+    
+    /**
+     * @param session
+     */
+    public Session getSession() {
+        return session;
+    }
 
     /**
      * @param cluster
@@ -124,7 +137,9 @@ public class MusicDataStore {
                 }
             }
         } catch (SocketException e) {
-            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage());
+            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), AppMessages.CONNCECTIVITYERROR, ErrorSeverity.ERROR, ErrorTypes.CONNECTIONERROR);
+        }catch(Exception e) {
+               logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), ErrorSeverity.ERROR, ErrorTypes.GENERALSERVICEERROR);
         }
         return allPossibleIps;
     }
@@ -152,7 +167,7 @@ public class MusicDataStore {
                 break;
             } catch (NoHostAvailableException e) {
                 address = it.next();
-                logger.error(EELFLoggerDelegate.errorLogger, e.getMessage());
+                logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.HOSTUNAVAILABLE, ErrorSeverity.ERROR, ErrorTypes.CONNECTIONERROR);
             }
         }
     }
@@ -179,7 +194,7 @@ public class MusicDataStore {
         try {
             session = cluster.connect();
         } catch (Exception ex) {
-            logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage());
+            logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.CASSANDRACONNECTIVITY, ErrorSeverity.ERROR, ErrorTypes.SERVICEUNAVAILABLE);
             throw new MusicServiceException(
                             "Error while connecting to Cassandra cluster.. " + ex.getMessage());
         }
@@ -240,12 +255,20 @@ public class MusicDataStore {
                 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);
+       byte[] data = bb.array();
+       return data;
+    }
 
-    public boolean doesRowSatisfyCondition(Row row, Map<String, Object> condition) {
+    public boolean doesRowSatisfyCondition(Row row, Map<String, Object> condition) throws Exception {
         ColumnDefinitions colInfo = row.getColumnDefinitions();
 
         for (Map.Entry<String, Object> entry : condition.entrySet()) {
@@ -273,9 +296,15 @@ public class MusicDataStore {
             ColumnDefinitions colInfo = row.getColumnDefinitions();
             HashMap<String, Object> resultOutput = new HashMap<String, Object>();
             for (Definition definition : colInfo) {
-                if (!definition.getName().equals("vector_ts"))
-                    resultOutput.put(definition.getName(),
+                if (!definition.getName().equals("vector_ts")) {
+                       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++;
@@ -301,8 +330,7 @@ public class MusicDataStore {
         boolean result = false;
 
         if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
-            logger.error(EELFLoggerDelegate.errorLogger,
-                            "Error while processing prepared query object");
+               logger.error(EELFLoggerDelegate.errorLogger, queryObject.getQuery(),AppMessages.QUERYERROR, ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
             throw new MusicQueryException("Ill formed queryObject for the request = " + "["
                             + queryObject.getQuery() + "]");
         }
@@ -310,7 +338,19 @@ public class MusicDataStore {
                         "In preprared Execute Put: the actual insert query:"
                                         + queryObject.getQuery() + "; the values"
                                         + queryObject.getValues());
-        PreparedStatement preparedInsert = session.prepare(queryObject.getQuery());
+        PreparedStatement preparedInsert = null;
+        try {
+               
+                               preparedInsert = session.prepare(queryObject.getQuery());
+                       
+        } catch(InvalidQueryException iqe) {
+               logger.error(EELFLoggerDelegate.errorLogger, iqe.getMessage(),AppMessages.QUERYERROR, ErrorSeverity.CRITICAL, ErrorTypes.QUERYERROR);
+               throw new MusicQueryException(iqe.getMessage());
+        }catch(Exception e) {
+               logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.QUERYERROR, ErrorSeverity.CRITICAL, ErrorTypes.QUERYERROR);
+               throw new MusicQueryException(e.getMessage());
+        }
+        
         try {
             if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
                 logger.info(EELFLoggerDelegate.applicationLogger, "Executing critical put query");
@@ -325,13 +365,12 @@ public class MusicDataStore {
 
         }
         catch (AlreadyExistsException ae) {
-               logger.error(EELFLoggerDelegate.errorLogger, "Executing Session Failure for Request = "
-                    + "[" + queryObject.getQuery() + "]" + " Reason = " + ae.getMessage());
+            logger.error(EELFLoggerDelegate.errorLogger, ae.getMessage(),AppMessages.SESSIONFAILED+ " [" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
+               throw new MusicServiceException(ae.getMessage());
         }
         catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, "Executing Session Failure for Request = "
-                            + "[" + queryObject.getQuery() + "]" + " Reason = " + e.getMessage());
-            throw new MusicServiceException("Executing Session Failure for Request = " + "["
+               logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.SESSIONFAILED+ " [" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
+               throw new MusicQueryException("Executing Session Failure for Request = " + "["
                             + queryObject.getQuery() + "]" + " Reason = " + e.getMessage());
         }
 
@@ -351,20 +390,22 @@ public class MusicDataStore {
                     throws MusicServiceException, MusicQueryException {
 
         if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
-            throw new MusicQueryException("Ill formed queryObject for the request = " + "["
+               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());
-        PreparedStatement preparedEventualGet = session.prepare(queryObject.getQuery());
-        preparedEventualGet.setConsistencyLevel(ConsistencyLevel.ONE);
+       
         ResultSet results = null;
         try {
-            results = session.execute(preparedEventualGet.bind(queryObject.getValues().toArray()));
+                PreparedStatement preparedEventualGet = session.prepare(queryObject.getQuery());
+             preparedEventualGet.setConsistencyLevel(ConsistencyLevel.ONE);
+             results = session.execute(preparedEventualGet.bind(queryObject.getValues().toArray()));
 
         } catch (Exception ex) {
-            logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage());
-            throw new MusicServiceException(ex.getMessage());
+               logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.UNKNOWNERROR+ "[" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
+               throw new MusicServiceException(ex.getMessage());
         }
         return results;
     }
@@ -381,8 +422,8 @@ public class MusicDataStore {
     public ResultSet executeCriticalGet(PreparedQueryObject queryObject)
                     throws MusicServiceException, MusicQueryException {
         if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
-            logger.error(EELFLoggerDelegate.errorLogger, "Error processing Prepared Query Object");
-            throw new MusicQueryException("Ill formed queryObject for the request = " + "["
+               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,
@@ -393,8 +434,8 @@ public class MusicDataStore {
         try {
             results = session.execute(preparedEventualGet.bind(queryObject.getValues().toArray()));
         } catch (Exception ex) {
-            logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage());
-            throw new MusicServiceException(ex.getMessage());
+               logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.UNKNOWNERROR+ "[" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
+               throw new MusicServiceException(ex.getMessage());
         }
         return results;