Merge "AAFcli.java -Declare "value" on a separate line"
[aaf/authz.git] / auth / auth-cass / src / main / java / org / onap / aaf / auth / dao / cass / NsDAO.java
index 30f0d6b..24bd01d 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
@@ -54,9 +54,9 @@ import com.datastax.driver.core.exceptions.DriverException;
 
 /**
  * NsDAO
- * 
+ *
  * Data Access Object for Namespace Data
- * 
+ *
  * @author Jonathan
  *
  */
@@ -64,6 +64,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
     public static final String TABLE = "ns";
     public static final String TABLE_ATTRIB = "ns_attrib";
     public static final int CACHE_SEG = 0x40; // yields segment 0x0-0x3F
+    public static final int USER = 0;
     public static final int ROOT = 1;
     public static final int COMPANY=2;
     public static final int APP = 3;
@@ -72,7 +73,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
     private static final String APPLY_BATCH = "\nAPPLY BATCH;\n";
     private static final String SQSCCR = "';\n";
     private static final String SQCSQ = "','";
-    
+
     private HistoryDAO historyDAO;
     private CacheInfoDAO infoDAO;
     private PSInfo psNS;
@@ -96,7 +97,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
     private static final int KEYLIMIT = 1;
     /**
      * Data class that matches the Cassandra Table "role"
-     * 
+     *
      * @author Jonathan
      */
     public static class Data extends CacheableData implements Bytification {
@@ -134,42 +135,42 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
             NSLoader.deflt.marshal(this,new DataOutputStream(baos));
             return ByteBuffer.wrap(baos.toByteArray());
         }
-        
+
         @Override
         public void reconstitute(ByteBuffer bb) throws IOException {
             NSLoader.deflt.unmarshal(this,toDIS(bb));
         }
-        
+
         @Override
         public String toString() {
             return name;
         }
-        
+
     }
-    
+
     private void init(AuthzTrans trans) throws APIException, IOException {
         // Set up sub-DAOs
-        if(historyDAO==null) {
+        if (historyDAO==null) {
         historyDAO = new HistoryDAO(trans, this);
     }
-        if(infoDAO==null) {
+        if (infoDAO==null) {
         infoDAO = new CacheInfoDAO(trans,this);
     }
 
         String[] helpers = setCRUD(trans, TABLE, Data.class, NSLoader.deflt,4/*need to skip attrib */);
-        
+
         psNS = new PSInfo(trans, SELECT_SP + helpers[FIELD_COMMAS] + " FROM " + TABLE +
                 " WHERE parent = ?", new NSLoader(1),readConsistency);
 
     }
-    
+
     private static final class NSLoader extends Loader<Data> implements Streamer<Data> {
         public static final int MAGIC=250935515;
         public static final int VERSION=1;
         public static final int BUFF_SIZE=48;
 
         public static final NSLoader deflt = new NSLoader(KEYLIMIT);
-        
+
         public NSLoader(int keylimit) {
             super(keylimit);
         }
@@ -197,7 +198,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
             obj[++idx]=data.description;
             obj[++idx]=data.parent;
         }
-        
+
         @Override
         public void marshal(Data data, DataOutputStream os) throws IOException {
             writeHeader(os,MAGIC,VERSION);
@@ -205,11 +206,11 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
             os.writeInt(data.type);
             writeString(os,data.description);
             writeString(os,data.parent);
-            if(data.attrib==null) {
+            if (data.attrib==null) {
                 os.writeInt(-1);
             } else {
                 os.writeInt(data.attrib.size());
-                for(Entry<String, String> es : data.attrib(false).entrySet()) {
+                for (Entry<String, String> es : data.attrib(false).entrySet()) {
                     writeString(os,es.getKey());
                     writeString(os,es.getValue());
                 }
@@ -220,28 +221,28 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         public void unmarshal(Data data, DataInputStream is) throws IOException {
             /*int version = */readHeader(is,MAGIC,VERSION);
             // If Version Changes between Production runs, you'll need to do a switch Statement, and adequately read in fields
-            
+
             byte[] buff = new byte[BUFF_SIZE];
             data.name = readString(is, buff);
             data.type = is.readInt();
             data.description = readString(is,buff);
             data.parent = readString(is,buff);
             int count = is.readInt();
-            if(count>0) {
+            if (count>0) {
                 Map<String, String> da = data.attrib(true);
-                for(int i=0;i<count;++i) {
+                for (int i=0;i<count;++i) {
                     da.put(readString(is,buff), readString(is,buff));
                 }
             }
         }
 
     }
-    
+
     @Override
     public Result<Data> create(AuthzTrans trans, Data data) {
         String ns = data.name;
         // Ensure Parent is set
-        if(data.parent==null) {
+        if (data.parent==null) {
             return Result.err(Result.ERR_BadData, "Need parent for %s", ns);
         }
 
@@ -252,9 +253,9 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         stmt.append(APPLY_BATCH);
         try {
             getSession(trans).execute(stmt.toString());
-//// TEST CODE for Exception                
-//            boolean force = true; 
-//            if(force) {
+//// TEST CODE for Exception
+//            boolean force = true;
+//            if (force) {
 //                throw new com.datastax.driver.core.exceptions.NoHostAvailableException(new HashMap<>());
 ////                throw new com.datastax.driver.core.exceptions.AuthenticationException(new InetSocketAddress(9999),"Sample Message");
 //            }
@@ -272,7 +273,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
     public Result<Void> update(AuthzTrans trans, Data data) {
         String ns = data.name;
         // Ensure Parent is set
-        if(data.parent==null) {
+        if (data.parent==null) {
             return Result.err(Result.ERR_BadData, "Need parent for %s", ns);
         }
 
@@ -281,26 +282,26 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         try {
             Map<String, String> localAttr = data.attrib;
             Result<Map<String, String>> rremoteAttr = readAttribByNS(trans,ns);
-            if(rremoteAttr.notOK()) {
+            if (rremoteAttr.notOK()) {
                 return Result.err(rremoteAttr);
             }
             // update Attributes
             String str;
-            for(Entry<String, String> es : localAttr.entrySet()) {
+            for (Entry<String, String> es : localAttr.entrySet()) {
                 str = rremoteAttr.value.get(es.getKey());
-                if(str==null || !str.equals(es.getValue())) {
+                if (str==null || !str.equals(es.getValue())) {
                     attribUpdateStmt(stmt, ns, es.getKey(),es.getValue());
                 }
             }
-            
+
             // No point in deleting... insert overwrites...
-//            for(Entry<String, String> es : remoteAttr.entrySet()) {
+//            for (Entry<String, String> es : remoteAttr.entrySet()) {
 //                str = localAttr.get(es.getKey());
-//                if(str==null || !str.equals(es.getValue())) {
+//                if (str==null || !str.equals(es.getValue())) {
 //                    attribDeleteStmt(stmt, ns, es.getKey());
 //                }
 //            }
-            if(stmt.length()>BEGIN_BATCH.length()) {
+            if (stmt.length()>BEGIN_BATCH.length()) {
                 stmt.append(APPLY_BATCH);
                 getSession(trans).execute(stmt.toString());
             }
@@ -319,12 +320,12 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
     @Override
     public Result<List<Data>> read(AuthzTrans trans, Data data) {
         Result<List<Data>> rld = super.read(trans, data);
-        
-        if(rld.isOKhasData()) {
-            for(Data d : rld.value) {
+
+        if (rld.isOKhasData()) {
+            for (Data d : rld.value) {
                 // Note: Map is null at this point, save time/mem by assignment
                 Result<Map<String, String>> rabn = readAttribByNS(trans,d.name);
-                if(rabn.isOK()) {
+                if (rabn.isOK()) {
                     d.attrib = rabn.value;
                 } else {
                     return Result.err(rabn);
@@ -341,11 +342,11 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
     public Result<List<Data>> read(AuthzTrans trans, Object... key) {
         Result<List<Data>> rld = super.read(trans, key);
 
-        if(rld.isOKhasData()) {
-            for(Data d : rld.value) {
+        if (rld.isOKhasData()) {
+            for (Data d : rld.value) {
                 // Note: Map is null at this point, save time/mem by assignment
                 Result<Map<String, String>> rabn = readAttribByNS(trans,d.name);
-                if(rabn.isOK()) {
+                if (rabn.isOK()) {
                     d.attrib = rabn.value;
                 } else {
                     return Result.err(rabn);
@@ -374,18 +375,18 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         return super.delete(trans, data, reread);
 
     }
-    
+
     public Result<Map<String,String>> readAttribByNS(AuthzTrans trans, String ns) {
         Map<String,String> map = new HashMap<>();
         TimeTaken tt = trans.start("readAttribByNS " + ns, Env.REMOTE);
         try {
-            ResultSet rs = getSession(trans).execute("SELECT key,value FROM " 
-                    + TABLE_ATTRIB 
+            ResultSet rs = getSession(trans).execute("SELECT key,value FROM "
+                    + TABLE_ATTRIB
                     + " WHERE ns='"
                     + ns
                     + "';");
-            
-            for(Iterator<Row> iter = rs.iterator();iter.hasNext(); ) {
+
+            for (Iterator<Row> iter = rs.iterator();iter.hasNext(); ) {
                 Row r = iter.next();
                 map.put(r.getString(0), r.getString(1));
             }
@@ -402,13 +403,13 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         Set<String> set = new HashSet<>();
         TimeTaken tt = trans.start("readNsBykey " + key, Env.REMOTE);
         try {
-            ResultSet rs = getSession(trans).execute("SELECT ns FROM " 
-                + TABLE_ATTRIB 
+            ResultSet rs = getSession(trans).execute("SELECT ns FROM "
+                + TABLE_ATTRIB
                 + " WHERE key='"
                 + key
                 + "';");
-        
-            for(Iterator<Row> iter = rs.iterator();iter.hasNext(); ) {
+
+            for (Iterator<Row> iter = rs.iterator();iter.hasNext(); ) {
                 Row r = iter.next();
                 set.add(r.getString(0));
             }
@@ -430,7 +431,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
             return Result.err(Result.ERR_Backend, CassAccess.ERR_ACCESS_MSG);
         }
     }
-    
+
     private StringBuilder attribInsertStmt(StringBuilder sb, String ns, String key, String value) {
         sb.append("INSERT INTO ");
         sb.append(TABLE_ATTRIB);
@@ -456,7 +457,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         sb.append("';");
         return sb;
     }
-    
+
 
     public Result<Void> attribRemove(AuthzTrans trans, String ns, String key) {
         try {
@@ -467,7 +468,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
             return Result.err(Result.ERR_Backend, CassAccess.ERR_ACCESS_MSG);
         }
     }
-    
+
     private StringBuilder attribDeleteStmt(StringBuilder stmt, String ns, String key) {
         stmt.append("DELETE FROM ");
         stmt.append(TABLE_ATTRIB);
@@ -478,7 +479,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         stmt.append("';");
         return stmt;
     }
-    
+
     private void attribDeleteAllStmt(StringBuilder stmt, Data data) {
         stmt.append("  DELETE FROM ");
         stmt.append(TABLE_ATTRIB);
@@ -489,7 +490,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
 
     private void attribInsertStmts(StringBuilder stmt, Data data) {
         // INSERT new Attrib
-        for(Entry<String,String> es : data.attrib(false).entrySet() ) {
+        for (Entry<String,String> es : data.attrib(false).entrySet() ) {
             stmt.append("  ");
             attribInsertStmt(stmt,data.name,es.getKey(),es.getValue());
         }
@@ -504,7 +505,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
      */
     public Result<Void> addDescription(AuthzTrans trans, String ns, String description) {
         try {
-            getSession(trans).execute(UPDATE_SP + TABLE + " SET description = '" 
+            getSession(trans).execute(UPDATE_SP + TABLE + " SET description = '"
                 + description.replace("'", "''") + "' WHERE name = '" + ns + "';");
         } catch (DriverException | APIException | IOException e) {
             reportPerhapsReset(trans,e);
@@ -520,11 +521,11 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
     public Result<List<Data>> getChildren(AuthzTrans trans, String parent) {
         return psNS.read(trans, R_TEXT, new Object[]{parent});
     }
-        
+
 
     /**
      * Log Modification statements to History
-     * 
+     *
      * @param modified           which CRUD action was done
      * @param data               entity data that needs a log entry
      * @param overrideMessage    if this is specified, we use it rather than crafting a history message based on data
@@ -541,7 +542,7 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
         hd.target = TABLE;
         hd.subject = subject ? override[1] : data.name;
         hd.memo = memo ? override[0] : (data.name + " was "  + modified.name() + 'd' );
-        if(modified==CRUD.delete) {
+        if (modified==CRUD.delete) {
             try {
                 hd.reconstruct = data.bytify();
             } catch (IOException e) {
@@ -549,10 +550,10 @@ public class NsDAO extends CassDAOImpl<AuthzTrans,NsDAO.Data> {
             }
         }
 
-        if(historyDAO.create(trans, hd).status!=Status.OK) {
+        if (historyDAO.create(trans, hd).status!=Status.OK) {
         trans.error().log("Cannot log to History");
     }
-        if(infoDAO.touch(trans, TABLE,data.invalidate(cache)).notOK()) {
+        if (infoDAO.touch(trans, TABLE,data.invalidate(cache)).notOK()) {
         trans.error().log("Cannot touch CacheInfo");
     }
     }