various Updates
[music.git] / src / main / java / org / onap / music / datastore / MusicDataStore.java
index c67c72e..563e07f 100644 (file)
@@ -24,16 +24,19 @@ 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;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.ColumnDefinitions;
 import com.datastax.driver.core.ColumnDefinitions.Definition;
@@ -46,13 +49,17 @@ import com.datastax.driver.core.ResultSet;
 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
  *
  */
 public class MusicDataStore {
+
     private Session session;
     private Cluster cluster;
 
@@ -64,6 +71,13 @@ public class MusicDataStore {
     public void setSession(Session session) {
         this.session = session;
     }
+    
+    /**
+     * @param session
+     */
+    public Session getSession() {
+        return session;
+    }
 
     /**
      * @param cluster
@@ -72,10 +86,9 @@ public class MusicDataStore {
         this.cluster = cluster;
     }
 
-    /**
-     * 
-     */
-    private static EELFLogger logger = EELFManager.getInstance().getLogger(MusicDataStore.class);
+
+
+    private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicDataStore.class);
 
     /**
      * 
@@ -103,7 +116,7 @@ public class MusicDataStore {
         try {
             connectToCassaCluster(remoteIp);
         } catch (MusicServiceException e) {
-            logger.error(e.getMessage());
+            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage());
         }
     }
 
@@ -124,7 +137,9 @@ public class MusicDataStore {
                 }
             }
         } catch (SocketException e) {
-            logger.error(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;
     }
@@ -136,22 +151,23 @@ public class MusicDataStore {
     private void connectToCassaCluster() {
         Iterator<String> it = getAllPossibleLocalIps().iterator();
         String address = "localhost";
-        logger.info("Connecting to cassa cluster: Iterating through possible ips:"
-                        + getAllPossibleLocalIps());
+        logger.info(EELFLoggerDelegate.applicationLogger,
+                        "Connecting to cassa cluster: Iterating through possible ips:"
+                                        + getAllPossibleLocalIps());
         while (it.hasNext()) {
             try {
                 cluster = Cluster.builder().withPort(9042)
                                 .withCredentials(MusicUtil.getCassName(), MusicUtil.getCassPwd())
                                 .addContactPoint(address).build();
                 Metadata metadata = cluster.getMetadata();
-                logger.info("Connected to cassa cluster " + metadata.getClusterName() + " at "
-                                + address);
+                logger.info(EELFLoggerDelegate.applicationLogger, "Connected to cassa cluster "
+                                + metadata.getClusterName() + " at " + address);
                 session = cluster.connect();
 
                 break;
             } catch (NoHostAvailableException e) {
                 address = it.next();
-                logger.error(e.getMessage());
+                logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.HOSTUNAVAILABLE, ErrorSeverity.ERROR, ErrorTypes.CONNECTIONERROR);
             }
         }
     }
@@ -173,11 +189,12 @@ public class MusicDataStore {
                         .withCredentials(MusicUtil.getCassName(), MusicUtil.getCassPwd())
                         .addContactPoint(address).build();
         Metadata metadata = cluster.getMetadata();
-        logger.info("Connected to cassa cluster " + metadata.getClusterName() + " at " + address);
+        logger.info(EELFLoggerDelegate.applicationLogger, "Connected to cassa cluster "
+                        + metadata.getClusterName() + " at " + address);
         try {
             session = cluster.connect();
         } catch (Exception ex) {
-            logger.error(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());
         }
@@ -238,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()) {
@@ -271,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++;
@@ -299,28 +330,47 @@ public class MusicDataStore {
         boolean result = false;
 
         if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
-            logger.error("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() + "]");
         }
-        logger.info("In preprared Execute Put: the actual insert query:" + queryObject.getQuery()
-                        + "; the values" + queryObject.getValues());
-        PreparedStatement preparedInsert = session.prepare(queryObject.getQuery());
+        logger.info(EELFLoggerDelegate.applicationLogger,
+                        "In preprared Execute Put: the actual insert query:"
+                                        + queryObject.getQuery() + "; the values"
+                                        + queryObject.getValues());
+        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("Executing critical put query");
+                logger.info(EELFLoggerDelegate.applicationLogger, "Executing critical put query");
                 preparedInsert.setConsistencyLevel(ConsistencyLevel.QUORUM);
             } else if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL)) {
-                logger.info("Executing simple put query");
+                logger.info(EELFLoggerDelegate.applicationLogger, "Executing simple put query");
                 preparedInsert.setConsistencyLevel(ConsistencyLevel.ONE);
             }
 
-            session.execute(preparedInsert.bind(queryObject.getValues().toArray()));
-            result = true;
-        } catch (Exception e) {
-            logger.error("Executing Session Failure for Request = " + "[" + queryObject.getQuery()
-                            + "]" + " Reason = " + e.getMessage());
-            throw new MusicServiceException("Executing Session Failure for Request = " + "["
+            ResultSet rs = session.execute(preparedInsert.bind(queryObject.getValues().toArray()));
+            result = rs.wasApplied();
+
+        }
+        catch (AlreadyExistsException ae) {
+            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, e.getMessage(),AppMessages.SESSIONFAILED+ " [" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR);
+               throw new MusicQueryException("Executing Session Failure for Request = " + "["
                             + queryObject.getQuery() + "]" + " Reason = " + e.getMessage());
         }
 
@@ -340,19 +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("Executing Eventual  get query:" + queryObject.getQuery());
-        PreparedStatement preparedEventualGet = session.prepare(queryObject.getQuery());
-        preparedEventualGet.setConsistencyLevel(ConsistencyLevel.ONE);
+        logger.info(EELFLoggerDelegate.applicationLogger,
+                        "Executing Eventual  get query:" + queryObject.getQuery());
+       
         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(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;
     }
@@ -369,23 +422,23 @@ public class MusicDataStore {
     public ResultSet executeCriticalGet(PreparedQueryObject queryObject)
                     throws MusicServiceException, MusicQueryException {
         if (!MusicUtil.isValidQueryObject(!queryObject.getValues().isEmpty(), queryObject)) {
-            logger.error("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("Executing Critical get query:" + 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(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;
 
     }
 
-
 }