Merge "Sonar Fix: CertResp.java"
authorJonathan Gathman <jonathan.gathman@att.com>
Wed, 12 Dec 2018 23:28:19 +0000 (23:28 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 12 Dec 2018 23:28:19 +0000 (23:28 +0000)
101 files changed:
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/Batch.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/Batch.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/BatchException.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/BatchException.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/BatchPrincipal.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/BatchPrincipal.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/CassBatch.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/CassBatch.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/Action.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/Action.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/ActionDAO.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/ActionDAO.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/ActionPuntDAO.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/ActionPuntDAO.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/CacheTouch.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/CacheTouch.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/CredDelete.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/CredDelete.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/CredPrint.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/CredPrint.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/CredPunt.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/CredPunt.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/Email.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/Email.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/EmailPrint.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/EmailPrint.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/FuturePrint.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/FuturePrint.java with 94% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/Key.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/Key.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/Message.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/Message.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/NSACreate.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/NSACreate.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/NSADelete.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/NSADelete.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/NSDescUpdate.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/NSDescUpdate.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/PermCreate.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/PermCreate.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/PermDelete.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/PermDelete.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/PermModify.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/PermModify.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/RoleCreate.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/RoleCreate.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/RoleDelete.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/RoleDelete.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/RoleModify.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/RoleModify.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URAdd.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URAdd.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URDelete.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URDelete.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URFutureApprove.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URFutureApprove.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URFutureApproveExec.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URFutureApproveExec.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URFuturePrint.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URFuturePrint.java with 93% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URModify.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URModify.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URPrint.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URPrint.java with 94% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/actions/URPunt.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/actions/URPunt.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Approval.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Approval.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Approver.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Approver.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CQLBatch.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/CQLBatch.java with 83% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CacheChange.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/CacheChange.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Creator.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Creator.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Cred.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Cred.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/ExpireRange.java [moved from auth/auth-core/src/main/java/org/onap/aaf/auth/org/ExpireRange.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Future.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Future.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/History.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/History.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/InputIterator.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/InputIterator.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Loader.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Loader.java with 96% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/MiscID.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/MiscID.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/MonthData.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/MonthData.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/NS.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/NS.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Notification.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Notification.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/NsAttrib.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/NsAttrib.java with 98% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Perm.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Perm.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Role.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Role.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/UserRole.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/UserRole.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/Visitor.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/Visitor.java with 76% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/X509.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/helpers/X509.java with 86% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/Expiring.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/reports/Expiring.java with 94% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/ExpiringOrig.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/update/ExpiringOrig.java with 95% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/ExpiringP2.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/update/ExpiringP2.java with 93% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/NotifyApprovals.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/update/NotifyApprovals.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/NotifyCredExpiring.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/update/NotifyCredExpiring.java with 97% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Remove.java [new file with mode: 0644]
auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Upload.java [moved from auth/auth-batch/src/main/java/org/onap/aaf/auth/update/Upload.java with 99% similarity]
auth/auth-batch/src/main/java/org/onap/aaf/auth/update/Remove.java [deleted file]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_ActionDAO.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_ActionDAO.java with 96% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_CredPrintTest.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_CredPrintTest.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_Email.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_Email.java with 96% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_EmailPrint.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_EmailPrint.java with 96% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_FuturePrintTest.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_FuturePrintTest.java with 92% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_Message.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_Message.java with 94% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_URFuturePrintTest.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_URFuturePrintTest.java with 92% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/actions/test/JU_URPrintTest.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/actions/test/JU_URPrintTest.java with 92% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/creators/RowCreator.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/creators/RowCreator.java with 99% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_Approval.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_Approval.java with 97% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_Approver.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_Approver.java with 92% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_CacheChange.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_CacheChange.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_Creator.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_Creator.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_Cred.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_Cred.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_ExpireRange.java [moved from auth/auth-core/src/test/java/org/onap/aaf/auth/org/test/JU_ExpireRange.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_Future.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_Future.java with 96% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_History.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_History.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_InputIterator.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_InputIterator.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_MiscID.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_MiscID.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_MonthData.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_MonthData.java with 94% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_NS.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_NS.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_NsAttrib.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_NsAttrib.java with 90% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_Perm.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_Perm.java with 96% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_Role.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_Role.java with 94% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/helpers/test/JU_UserRole.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/test/JU_UserRole.java with 94% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/test/JU_Batch.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/test/JU_Batch.java with 97% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/test/JU_BatchException.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/test/JU_BatchException.java with 95% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/test/JU_BatchPrincipal.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/test/JU_BatchPrincipal.java with 94% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/test/JU_CassBatch.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/test/JU_CassBatch.java with 96% similarity]
auth/auth-batch/src/test/java/org/onap/aaf/auth/batch/test/JU_NotificationTest.java [moved from auth/auth-batch/src/test/java/org/onap/aaf/auth/helpers/JU_NotificationTest.java with 88% similarity]
auth/auth-cass/src/main/java/org/onap/aaf/auth/dao/cass/HistoryDAO.java
auth/auth-cass/src/main/java/org/onap/aaf/auth/dao/hl/Question.java
auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/Version.java
auth/auth-cmd/src/main/java/org/onap/aaf/auth/cmd/role/ListByPerm.java
auth/auth-core/src/main/java/org/onap/aaf/auth/org/Organization.java
auth/auth-deforg/src/main/java/org/onap/aaf/org/DefaultOrg.java
auth/docker/.gitignore
auth/docker/agent.sh
auth/sample/.gitignore

@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth;
+package org.onap.aaf.auth.batch;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -33,6 +33,7 @@ import java.net.URL;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.GregorianCalendar;
 import java.util.HashSet;
 import java.util.List;
@@ -51,8 +52,8 @@ import org.onap.aaf.auth.org.Organization;
 import org.onap.aaf.auth.org.Organization.Identity;
 import org.onap.aaf.auth.org.OrganizationException;
 import org.onap.aaf.auth.org.OrganizationFactory;
-import org.onap.aaf.cadi.PropAccess;
 import org.onap.aaf.cadi.Access.Level;
+import org.onap.aaf.cadi.PropAccess;
 import org.onap.aaf.cadi.config.Config;
 import org.onap.aaf.misc.env.APIException;
 import org.onap.aaf.misc.env.Env;
@@ -77,6 +78,7 @@ public abstract class Batch {
     protected static AuthzEnv env;
     protected static Session session;
     protected static Set<String> specialNames;
+    protected static List<String> specialDomains;
     protected static boolean dryRun; 
     protected static String batchEnv;
 
@@ -131,14 +133,18 @@ public abstract class Batch {
 
         // Special names to allow behaviors beyond normal rules
         specialNames = new HashSet<>();
+        specialDomains = new ArrayList<>();
         String names = env.getProperty( "SPECIAL_NAMES" );
         if ( names != null )
         {
             env.info().log("Loading SPECIAL_NAMES");
-            for (String s :names.split(",") )
-            {
+            for (String s :names.split(",") ) {
                 env.info().log("\tspecial: " + s );
-                specialNames.add( s.trim() );
+                if(s.indexOf('@')>0) {
+                       specialNames.add( s.trim() );
+                } else {
+                       specialDomains.add(s.trim());
+                }
             }
         }
     }
@@ -156,13 +162,23 @@ public abstract class Batch {
     }
     
     public boolean isSpecial(String user) {
+       if(user==null) {
+               return false;
+       }
         if (specialNames != null && specialNames.contains(user)) {
             env.info().log("specialName: " + user);
-
             return (true);
         } else {
-            return (false);
+               if(specialDomains!=null) {
+                       for(String sd : specialDomains) {
+                               if(user.endsWith(sd)) {
+                                       env.info().log("specialDomain: " + user + " matches " + sd);
+                                       return (true);
+                               }
+                       }
+               }
         }
+        return (false);
     }
 
 
@@ -459,16 +475,16 @@ public abstract class Batch {
                     Class<?> cls;
                     String classifier = "";
                     try {
-                        cls = ClassLoader.getSystemClassLoader().loadClass("org.onap.aaf.auth.update." + toolName);
+                        cls = ClassLoader.getSystemClassLoader().loadClass("org.onap.aaf.auth.batch.update." + toolName);
                         classifier = "Update:";
                     } catch (ClassNotFoundException e) {
                         try {
-                            cls = ClassLoader.getSystemClassLoader().loadClass("org.onap.aaf.auth.reports." + toolName);
+                            cls = ClassLoader.getSystemClassLoader().loadClass("org.onap.aaf.auth.batch.reports." + toolName);
                             classifier = "Report:";
                         } catch (ClassNotFoundException e2) {
                             try {
                                 cls = ClassLoader.getSystemClassLoader()
-                                        .loadClass("org.onap.aaf.auth.temp." + toolName);
+                                        .loadClass("org.onap.aaf.auth.batch.temp." + toolName);
                                 classifier = "Temp Utility:";
                             } catch (ClassNotFoundException e3) {
                                 cls = null;
@@ -476,7 +492,7 @@ public abstract class Batch {
                         }
                     }
                     if (cls != null) {
-                        Constructor<?> cnst = cls.getConstructor(new Class[] { AuthzTrans.class });
+                        Constructor<?> cnst = cls.getConstructor(AuthzTrans.class);
                         batch = (Batch) cnst.newInstance(trans);
                         env.info().log("Begin", classifier, toolName);
                     }
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  *
  */
-package org.onap.aaf.auth;
+package org.onap.aaf.auth.batch;
 
 import org.onap.aaf.cadi.principal.TaggedPrincipal;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
@@ -45,6 +45,7 @@ public class CacheTouch extends ActionDAO<String,Void, String> {
             trans.info().printf("Would mark %s cache in DB for clearing: %s",table, text);
             return Result.ok();
         } else {
+               
             Result<Void> rv = q.clearCache(trans, table);
             trans.info().printf("Set DB Cache %s for clearing: %s",table, text);
             return rv;
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
+import org.onap.aaf.auth.batch.helpers.Future;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Future;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.util.Chrono;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.NsAttrib;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.NsAttrib;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.NsAttrib;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.NsAttrib;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.NS;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.NS;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.Perm;
 import org.onap.aaf.auth.dao.cass.PermDAO;
 import org.onap.aaf.auth.dao.cass.PermDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Perm;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.Perm;
 import org.onap.aaf.auth.dao.cass.PermDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Perm;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 import java.util.List;
 
+import org.onap.aaf.auth.batch.helpers.Perm;
+import org.onap.aaf.auth.batch.helpers.Role;
 import org.onap.aaf.auth.dao.cass.PermDAO;
 import org.onap.aaf.auth.dao.cass.RoleDAO;
 import org.onap.aaf.auth.dao.cass.Status;
 import org.onap.aaf.auth.dao.cass.PermDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Perm;
-import org.onap.aaf.auth.helpers.Role;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.Role;
 import org.onap.aaf.auth.dao.cass.RoleDAO;
 import org.onap.aaf.auth.dao.cass.RoleDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Role;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.Role;
 import org.onap.aaf.auth.dao.cass.RoleDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Role;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 import java.util.List;
 
+import org.onap.aaf.auth.batch.helpers.Perm;
+import org.onap.aaf.auth.batch.helpers.Role;
 import org.onap.aaf.auth.dao.cass.PermDAO;
 import org.onap.aaf.auth.dao.cass.RoleDAO;
 import org.onap.aaf.auth.dao.cass.Status;
 import org.onap.aaf.auth.dao.cass.RoleDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Perm;
-import org.onap.aaf.auth.helpers.Role;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 import org.onap.aaf.misc.env.util.Chrono;
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 import org.onap.aaf.misc.env.util.Chrono;
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 import java.util.Date;
 import java.util.GregorianCalendar;
 
+import org.onap.aaf.auth.batch.helpers.Approval;
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.dao.cass.FutureDAO;
 import org.onap.aaf.auth.dao.cass.NsDAO;
 import org.onap.aaf.auth.dao.hl.Function;
 import org.onap.aaf.auth.dao.hl.Question;
 import org.onap.aaf.auth.dao.hl.Function.FUTURE_OP;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Approval;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.auth.org.Organization.Expiration;
 import org.onap.aaf.misc.env.APIException;
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.onap.aaf.auth.batch.helpers.Approval;
+import org.onap.aaf.auth.batch.helpers.Future;
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.dao.cass.ApprovalDAO;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 import org.onap.aaf.auth.dao.cass.ApprovalDAO.Data;
@@ -32,9 +35,6 @@ import org.onap.aaf.auth.dao.hl.Function.FUTURE_OP;
 import org.onap.aaf.auth.dao.hl.Function.Lookup;
 import org.onap.aaf.auth.dao.hl.Function.OP_STATUS;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Approval;
-import org.onap.aaf.auth.helpers.Future;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.util.Chrono;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 import java.util.List;
 
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.dao.cass.Status;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.util.Chrono;
 
  *
  */
 
-package org.onap.aaf.auth.actions;
+package org.onap.aaf.auth.batch.actions;
 
 import java.io.IOException;
 import java.util.Date;
 import java.util.List;
 
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
 import org.onap.aaf.misc.env.util.Chrono;
  *
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.onap.aaf.auth.actions.Message;
+import org.onap.aaf.auth.batch.actions.Message;
 import org.onap.aaf.auth.org.Organization;
 
 public class Approver {
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Session;
@@ -66,6 +66,17 @@ public class CQLBatch {
                } else {
                        return execute();
                }
-               
+       }
+       
+       public void touch(String table, int begin, int end, boolean dryRun) {
+               StringBuilder sb = begin();
+               for(int i=begin;i<end;++i) {
+                       sb.append("UPDATE cache SET touched=dateof(now()) WHERE name='");
+                       sb.append(table);
+                       sb.append("' AND seg=");
+                       sb.append(i);
+                       sb.append(";\n");
+               }
+               execute(dryRun);
        }
 }
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -322,4 +322,14 @@ public class Cred  {
         return id.equals(obj);
     }
 
+
+       public static String histSubject(List<String> row) {
+               return row.get(1);
+       }
+
+
+       public static String histMemo(String fmt, String orgName, List<String> row) {
+               return String.format(fmt, row.get(1),orgName,row.get(4));
+       }
+
 }
\ No newline at end of file
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  */
 
-package org.onap.aaf.auth.org;
+package org.onap.aaf.auth.batch.helpers;
 
 import java.util.ArrayList;
 import java.util.Date;
  *
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.onap.aaf.auth.BatchException;
+import org.onap.aaf.auth.batch.BatchException;
 import org.onap.aaf.misc.env.Env;
 import org.onap.aaf.misc.env.TimeTaken;
 import org.onap.aaf.misc.env.Trans;
  *
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.TreeMap;
 
-import org.onap.aaf.auth.actions.Message;
+import org.onap.aaf.auth.batch.actions.Message;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.org.Organization;
 import org.onap.aaf.misc.env.Env;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 import java.io.PrintStream;
 import java.util.ArrayList;
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import org.onap.aaf.auth.actions.URDelete;
+import org.onap.aaf.auth.batch.actions.URDelete;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
@@ -106,6 +106,10 @@ public class UserRole implements Cloneable, CacheChange.Data  {
         return byRole;
     }
 
+    public static void load(Trans trans, Session session, Creator<UserRole> creator) {
+        load(trans,session,creator,null,new DataLoadVisitor());
+    }
+    
     public static void load(Trans trans, Session session, Creator<UserRole> creator, Visitor<UserRole> visitor ) {
         load(trans,session,creator,null,visitor);
     }
@@ -317,6 +321,12 @@ public class UserRole implements Cloneable, CacheChange.Data  {
        sb.append(row.get(3));
        sb.append("';\n");
     }
-    
 
+       public static String histMemo(String fmt, List<String> row) {
+               return String.format(fmt, row.get(1),row.get(2)+'.'+row.get(3), row.get(4));
+       }
+
+       public static String histSubject(List<String> row) {
+               return row.get(1) + '|' + row.get(2)+'.'+row.get(3);    
+       }
 }
\ No newline at end of file
  * ============LICENSE_END====================================================
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 public interface Visitor<T> {
        void visit(T t);
+       
+       public static class Multi<T> implements Visitor<T> {
+               private final Visitor<T>[] visitors;
+               @SafeVarargs
+               public Multi(Visitor<T> ... vs) {
+                       visitors  = vs;
+               }
+               
+               @Override
+               public void visit(T t) {
+                       for(Visitor<T> v : visitors) {
+                               v.visit(t);
+                       }
+               }
+       };
 }
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.helpers;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -33,6 +33,7 @@ import org.onap.aaf.misc.env.Env;
 import org.onap.aaf.misc.env.TimeTaken;
 import org.onap.aaf.misc.env.Trans;
 import org.onap.aaf.misc.env.util.Chrono;
+import org.onap.aaf.misc.env.util.Split;
 
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
@@ -59,7 +60,7 @@ public class X509 {
 
     private static void load(Trans trans, Session session, String query, Visitor<X509> visitor) {
         trans.info().log( "query: " + query );
-        TimeTaken tt = trans.start("Read Roles", Env.REMOTE);
+        TimeTaken tt = trans.start("Read X509", Env.REMOTE);
        
         ResultSet results;
         try {
@@ -116,4 +117,25 @@ public class X509 {
        sb.append(";\n");
        }
 
+
+       public static String histSubject(List<String> row) {
+               return row.get(4);
+       }
+
+
+       public static String histMemo(String fmt, List<String> row) {
+               String id="n/a";
+               for(String s : Split.splitTrim(',', row.get(4))) {
+                       if(s.startsWith("OU=") && s.indexOf('@')>=0) {
+                               int colon = s.indexOf(':');
+                               if(colon<0) {
+                                       colon=s.length();
+                               }
+                               id=s.substring(3,colon);
+                               break;
+                       }
+               }
+               return String.format(fmt, "Cert for " + id,"CA " + row.get(1),row.get(3));
+       }
+
 }
\ No newline at end of file
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.reports;
+package org.onap.aaf.auth.batch.reports;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -35,16 +35,16 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 
-import org.onap.aaf.auth.Batch;
+import org.onap.aaf.auth.batch.Batch;
+import org.onap.aaf.auth.batch.helpers.Cred;
+import org.onap.aaf.auth.batch.helpers.ExpireRange;
+import org.onap.aaf.auth.batch.helpers.UserRole;
+import org.onap.aaf.auth.batch.helpers.Visitor;
+import org.onap.aaf.auth.batch.helpers.X509;
+import org.onap.aaf.auth.batch.helpers.Cred.Instance;
+import org.onap.aaf.auth.batch.helpers.ExpireRange.Range;
 import org.onap.aaf.auth.dao.cass.CredDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Cred;
-import org.onap.aaf.auth.helpers.Cred.Instance;
-import org.onap.aaf.auth.helpers.UserRole;
-import org.onap.aaf.auth.helpers.Visitor;
-import org.onap.aaf.auth.helpers.X509;
-import org.onap.aaf.auth.org.ExpireRange;
-import org.onap.aaf.auth.org.ExpireRange.Range;
 import org.onap.aaf.auth.org.OrganizationException;
 import org.onap.aaf.cadi.configure.Factory;
 import org.onap.aaf.cadi.util.CSV;
@@ -80,7 +80,6 @@ public class Expiring extends Batch {
             
             // Load Cred.  We don't follow Visitor, because we have to gather up everything into Identity Anyway
             Cred.load(trans, session);
-            UserRole.load(trans, session, UserRole.v2_0_11, new UserRole.DataLoadVisitor());
 
             minOwners=1;
 
@@ -100,7 +99,7 @@ public class Expiring extends Batch {
                        cw.row(INFO,r.name(),Chrono.dateOnlyStamp(expireRange.now),r.reportingLevel());
                        writerList.put(r.name(),cw);
                        if("Delete".equals(r.name())) {
-                               deleteDate = r.getStart();
+                               deleteDate = r.getEnd();
                        }
                        }
                }
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.update;
+package org.onap.aaf.auth.batch.update;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -32,32 +32,32 @@ import java.util.GregorianCalendar;
 import java.util.List;
 import java.util.UUID;
 
-import org.onap.aaf.auth.Batch;
-import org.onap.aaf.auth.BatchPrincipal;
-import org.onap.aaf.auth.actions.Action;
-import org.onap.aaf.auth.actions.ActionDAO;
-import org.onap.aaf.auth.actions.CacheTouch;
-import org.onap.aaf.auth.actions.CredDelete;
-import org.onap.aaf.auth.actions.CredPrint;
-import org.onap.aaf.auth.actions.Email;
-import org.onap.aaf.auth.actions.Message;
-import org.onap.aaf.auth.actions.URDelete;
-import org.onap.aaf.auth.actions.URFutureApprove;
-import org.onap.aaf.auth.actions.URFutureApproveExec;
-import org.onap.aaf.auth.actions.URPrint;
+import org.onap.aaf.auth.batch.Batch;
+import org.onap.aaf.auth.batch.BatchPrincipal;
+import org.onap.aaf.auth.batch.actions.Action;
+import org.onap.aaf.auth.batch.actions.ActionDAO;
+import org.onap.aaf.auth.batch.actions.CacheTouch;
+import org.onap.aaf.auth.batch.actions.CredDelete;
+import org.onap.aaf.auth.batch.actions.CredPrint;
+import org.onap.aaf.auth.batch.actions.Email;
+import org.onap.aaf.auth.batch.actions.Message;
+import org.onap.aaf.auth.batch.actions.URDelete;
+import org.onap.aaf.auth.batch.actions.URFutureApprove;
+import org.onap.aaf.auth.batch.actions.URFutureApproveExec;
+import org.onap.aaf.auth.batch.actions.URPrint;
+import org.onap.aaf.auth.batch.helpers.Approval;
+import org.onap.aaf.auth.batch.helpers.Cred;
+import org.onap.aaf.auth.batch.helpers.Future;
+import org.onap.aaf.auth.batch.helpers.NS;
+import org.onap.aaf.auth.batch.helpers.Role;
+import org.onap.aaf.auth.batch.helpers.UserRole;
+import org.onap.aaf.auth.batch.helpers.Cred.Instance;
 import org.onap.aaf.auth.dao.cass.ApprovalDAO;
 import org.onap.aaf.auth.dao.cass.CredDAO;
 import org.onap.aaf.auth.dao.cass.FutureDAO;
 import org.onap.aaf.auth.dao.hl.Function.FUTURE_OP;
 import org.onap.aaf.auth.dao.hl.Function.OP_STATUS;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Approval;
-import org.onap.aaf.auth.helpers.Cred;
-import org.onap.aaf.auth.helpers.Future;
-import org.onap.aaf.auth.helpers.NS;
-import org.onap.aaf.auth.helpers.Role;
-import org.onap.aaf.auth.helpers.UserRole;
-import org.onap.aaf.auth.helpers.Cred.Instance;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.auth.org.OrganizationException;
 import org.onap.aaf.auth.org.Organization.Identity;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.update;
+package org.onap.aaf.auth.batch.update;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -30,14 +30,14 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.onap.aaf.auth.Batch;
-import org.onap.aaf.auth.BatchPrincipal;
-import org.onap.aaf.auth.actions.Action;
-import org.onap.aaf.auth.actions.ActionDAO;
-import org.onap.aaf.auth.actions.CacheTouch;
-import org.onap.aaf.auth.actions.URDelete;
+import org.onap.aaf.auth.batch.Batch;
+import org.onap.aaf.auth.batch.BatchPrincipal;
+import org.onap.aaf.auth.batch.actions.Action;
+import org.onap.aaf.auth.batch.actions.ActionDAO;
+import org.onap.aaf.auth.batch.actions.CacheTouch;
+import org.onap.aaf.auth.batch.actions.URDelete;
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.org.OrganizationException;
 import org.onap.aaf.cadi.util.Split;
 import org.onap.aaf.misc.env.APIException;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.update;
+package org.onap.aaf.auth.batch.update;
 
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -30,18 +30,18 @@ import java.util.GregorianCalendar;
 import java.util.List;
 import java.util.Map.Entry;
 
-import org.onap.aaf.auth.Batch;
-import org.onap.aaf.auth.BatchPrincipal;
-import org.onap.aaf.auth.actions.Email;
-import org.onap.aaf.auth.actions.EmailPrint;
-import org.onap.aaf.auth.actions.Message;
+import org.onap.aaf.auth.batch.Batch;
+import org.onap.aaf.auth.batch.BatchPrincipal;
+import org.onap.aaf.auth.batch.actions.Email;
+import org.onap.aaf.auth.batch.actions.EmailPrint;
+import org.onap.aaf.auth.batch.actions.Message;
+import org.onap.aaf.auth.batch.helpers.Approval;
+import org.onap.aaf.auth.batch.helpers.Future;
 import org.onap.aaf.auth.dao.CassAccess;
 import org.onap.aaf.auth.dao.cass.ApprovalDAO;
 import org.onap.aaf.auth.dao.cass.FutureDAO;
 import org.onap.aaf.auth.dao.cass.HistoryDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Approval;
-import org.onap.aaf.auth.helpers.Future;
 import org.onap.aaf.auth.org.Organization;
 import org.onap.aaf.auth.org.OrganizationException;
 import org.onap.aaf.auth.org.OrganizationFactory;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.update;
+package org.onap.aaf.auth.batch.update;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -38,19 +38,19 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeMap;
 
-import org.onap.aaf.auth.Batch;
-import org.onap.aaf.auth.BatchPrincipal;
-import org.onap.aaf.auth.actions.Email;
-import org.onap.aaf.auth.actions.EmailPrint;
-import org.onap.aaf.auth.actions.Message;
+import org.onap.aaf.auth.batch.Batch;
+import org.onap.aaf.auth.batch.BatchPrincipal;
+import org.onap.aaf.auth.batch.actions.Email;
+import org.onap.aaf.auth.batch.actions.EmailPrint;
+import org.onap.aaf.auth.batch.actions.Message;
+import org.onap.aaf.auth.batch.helpers.Cred;
+import org.onap.aaf.auth.batch.helpers.NS;
+import org.onap.aaf.auth.batch.helpers.Notification;
+import org.onap.aaf.auth.batch.helpers.UserRole;
+import org.onap.aaf.auth.batch.helpers.Notification.TYPE;
 import org.onap.aaf.auth.dao.cass.CredDAO;
 import org.onap.aaf.auth.dao.hl.Question;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Cred;
-import org.onap.aaf.auth.helpers.NS;
-import org.onap.aaf.auth.helpers.Notification;
-import org.onap.aaf.auth.helpers.Notification.TYPE;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.auth.org.EmailWarnings;
 import org.onap.aaf.auth.org.Organization;
diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Remove.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Remove.java
new file mode 100644 (file)
index 0000000..3e1a8df
--- /dev/null
@@ -0,0 +1,203 @@
+/**
+ * ============LICENSE_START====================================================
+ * org.onap.aaf
+ * ===========================================================================
+ * Copyright (c) 2018 AT&T Intellectual Property. 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.
+ * ============LICENSE_END====================================================
+ *
+ */
+
+package org.onap.aaf.auth.batch.update;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.onap.aaf.auth.batch.Batch;
+import org.onap.aaf.auth.batch.BatchPrincipal;
+import org.onap.aaf.auth.batch.helpers.CQLBatch;
+import org.onap.aaf.auth.batch.helpers.Cred;
+import org.onap.aaf.auth.batch.helpers.UserRole;
+import org.onap.aaf.auth.batch.helpers.X509;
+import org.onap.aaf.auth.dao.CassAccess;
+import org.onap.aaf.auth.dao.cass.CertDAO;
+import org.onap.aaf.auth.dao.cass.CredDAO;
+import org.onap.aaf.auth.dao.cass.HistoryDAO;
+import org.onap.aaf.auth.dao.cass.UserRoleDAO;
+import org.onap.aaf.auth.env.AuthzTrans;
+import org.onap.aaf.auth.org.OrganizationException;
+import org.onap.aaf.cadi.CadiException;
+import org.onap.aaf.cadi.client.Holder;
+import org.onap.aaf.cadi.util.CSV;
+import org.onap.aaf.misc.env.APIException;
+import org.onap.aaf.misc.env.Env;
+import org.onap.aaf.misc.env.TimeTaken;
+import org.onap.aaf.misc.env.util.Chrono;
+
+public class Remove extends Batch {
+    private final AuthzTrans noAvg;
+    private HistoryDAO historyDAO;
+       private CQLBatch cqlBatch;
+
+    public Remove(AuthzTrans trans) throws APIException, IOException, OrganizationException {
+        super(trans.env());
+        trans.info().log("Starting Connection Process");
+        
+        noAvg = env.newTransNoAvg();
+        noAvg.setUser(new BatchPrincipal("Remove"));
+
+        TimeTaken tt0 = trans.start("Cassandra Initialization", Env.SUB);
+        try {
+               historyDAO = new HistoryDAO(trans, cluster, CassAccess.KEYSPACE);
+            TimeTaken tt2 = trans.start("Connect to Cluster", Env.REMOTE);
+            try {
+                session = historyDAO.getSession(trans);
+            } finally {
+                tt2.done();
+            }
+            cqlBatch = new CQLBatch(session); 
+            
+
+        } finally {
+            tt0.done();
+        }
+    }
+
+    @Override
+    protected void run(AuthzTrans trans) {
+        final int maxBatch = 25;
+
+        // Create Intermediate Output 
+        File logDir = new File(logDir());
+        
+        List<File> remove = new ArrayList<>();
+        if(args().length>0) {
+               for(int i=0;i<args().length;++i) {
+                       remove.add(new File(logDir, args()[i]));
+               }
+        } else {
+               remove.add(new File(logDir,"Delete"+Chrono.dateOnlyStamp()+".csv"));
+        }
+        
+        final Holder<Boolean> ur = new Holder<>(false);
+        final Holder<Boolean> cred = new Holder<>(false);
+        final Holder<Boolean> x509 = new Holder<>(false);
+        final Holder<String> memoFmt = new Holder<String>("");
+        final HistoryDAO.Data hdd = new HistoryDAO.Data();
+        final String orgName = trans.org().getName();
+        
+        hdd.action="delete";
+        hdd.reconstruct = ByteBuffer.allocate(0);
+        hdd.user = noAvg.user();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
+        hdd.yr_mon = Integer.parseInt(sdf.format(new Date()));
+        
+        try { 
+               for(File f : remove) {
+                       trans.info().log("Processing ",f.getAbsolutePath(),"for Deletions");
+                       if(f.exists()) {
+                               CSV removeCSV = new CSV(f);
+                                       
+                               try {
+                                       final StringBuilder sb = cqlBatch.begin();
+                                   final Holder<Integer> hi = new Holder<Integer>(0);
+                                               removeCSV.visit(new CSV.Visitor() {
+                                                       @Override
+                                                       public void visit(List<String> row) throws IOException, CadiException {
+                                                               int i = hi.get();
+                                                               if(i>=maxBatch) {
+                                                                       cqlBatch.execute(dryRun);
+                                                                       hi.set(0);
+                                                                       cqlBatch.begin();
+                                                                       i=0;
+                                                               }
+                                                               switch(row.get(0)) {
+                                                                       case "info":
+                                                                               switch(row.get(1)) {
+                                                                                       case "Delete":
+                                                                                               memoFmt.set("%s expired from %s on %s");
+                                                                                               break;
+                                                                                       case "NotInOrgDelete":
+                                                                                               memoFmt.set("Identity %s was removed from %s on %s");
+                                                                                               break;
+                                                                               }
+                                                                               break;
+                                                                       case "ur":
+                                                                               if(!ur.get()) {
+                                                                                       ur.set(true);
+                                                                               }
+                                                                               hi.set(++i);
+                                                                               UserRole.row(sb,row);
+                                                                               hdd.target=UserRoleDAO.TABLE; 
+                                                                               hdd.subject=UserRole.histSubject(row);
+                                                                               hdd.memo=UserRole.histMemo(memoFmt.get(), row);
+                                                                               historyDAO.createBatch(sb, hdd);
+                                                                               break;
+                                                                       case "cred":
+                                                                               if(!cred.get()) {
+                                                                                       cred.set(true);
+                                                                               }
+                                                                               hi.set(++i);
+                                                                               Cred.row(sb,row);
+                                                                               hdd.target=CredDAO.TABLE; 
+                                                                               hdd.subject=Cred.histSubject(row);
+                                                                               hdd.memo=Cred.histMemo(memoFmt.get(), orgName,row);
+                                                                               historyDAO.createBatch(sb, hdd);
+                                                                       break;
+                                                                       case "x509":
+                                                                               if(!x509.get()) {
+                                                                                       x509.set(true);
+                                                                               }
+                                                                               hi.set(++i);
+                                                                               X509.row(sb,row);
+                                                                               hdd.target=CertDAO.TABLE; 
+                                                                               hdd.subject=X509.histSubject(row);
+                                                                               hdd.memo=X509.histMemo(memoFmt.get(),row);
+                                                                               historyDAO.createBatch(sb, hdd);
+                                                                               break;
+                                                               }
+                                                       }
+                                               });
+                                               cqlBatch.execute(dryRun);
+                                       } catch (IOException | CadiException e) {
+                                               e.printStackTrace();
+                                       }
+                       } else {
+                               trans.error().log("File",f.getAbsolutePath(),"does not exist.");
+                       }
+               }
+        } finally {
+               if(ur.get()) {
+                       cqlBatch.touch(UserRoleDAO.TABLE, 0, UserRoleDAO.CACHE_SEG, dryRun);
+               }
+               if(cred.get()) {
+                       cqlBatch.touch(CredDAO.TABLE, 0, CredDAO.CACHE_SEG, dryRun);
+               }
+               if(x509.get()) {
+                       cqlBatch.touch(CertDAO.TABLE, 0, CertDAO.CACHE_SEG, dryRun);
+               }
+        }
+    }
+    
+    @Override
+    protected void _close(AuthzTrans trans) {
+        session.close();
+    }
+
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  */
 
-package org.onap.aaf.auth.update;
+package org.onap.aaf.auth.batch.update;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -27,7 +27,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.onap.aaf.auth.Batch;
+import org.onap.aaf.auth.batch.Batch;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.org.OrganizationException;
 import org.onap.aaf.misc.env.APIException;
diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/update/Remove.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/update/Remove.java
deleted file mode 100644 (file)
index d35cfd3..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * ============LICENSE_START====================================================
- * org.onap.aaf
- * ===========================================================================
- * Copyright (c) 2018 AT&T Intellectual Property. 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.
- * ============LICENSE_END====================================================
- *
- */
-
-package org.onap.aaf.auth.update;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import org.onap.aaf.auth.Batch;
-import org.onap.aaf.auth.BatchPrincipal;
-import org.onap.aaf.auth.actions.CacheTouch;
-import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.CQLBatch;
-import org.onap.aaf.auth.helpers.Cred;
-import org.onap.aaf.auth.helpers.UserRole;
-import org.onap.aaf.auth.helpers.X509;
-import org.onap.aaf.auth.org.OrganizationException;
-import org.onap.aaf.cadi.CadiException;
-import org.onap.aaf.cadi.client.Holder;
-import org.onap.aaf.cadi.util.CSV;
-import org.onap.aaf.misc.env.APIException;
-import org.onap.aaf.misc.env.Env;
-import org.onap.aaf.misc.env.TimeTaken;
-import org.onap.aaf.misc.env.util.Chrono;
-
-public class Remove extends Batch {
-    private final AuthzTrans noAvg;
-       private CacheTouch cacheTouch;
-       private CQLBatch cqlBatch;
-
-    public Remove(AuthzTrans trans) throws APIException, IOException, OrganizationException {
-        super(trans.env());
-        trans.info().log("Starting Connection Process");
-        
-        noAvg = env.newTransNoAvg();
-        noAvg.setUser(new BatchPrincipal("batch:RemoveExpired"));
-
-        TimeTaken tt0 = trans.start("Cassandra Initialization", Env.SUB);
-        try {
-               cacheTouch = new CacheTouch(trans, cluster, dryRun);
-            TimeTaken tt2 = trans.start("Connect to Cluster", Env.REMOTE);
-            try {
-                session = cacheTouch.getSession(trans);
-            } finally {
-                tt2.done();
-            }
-            cqlBatch = new CQLBatch(session); 
-            
-
-        } finally {
-            tt0.done();
-        }
-    }
-
-    @Override
-    protected void run(AuthzTrans trans) {
-        final int maxBatch = 50;
-
-        // Create Intermediate Output 
-        File logDir = new File(logDir());
-        
-        File expired = new File(logDir,"Delete"+Chrono.dateOnlyStamp()+".csv");
-        CSV expiredCSV = new CSV(expired);
-        try {
-               final StringBuilder sb = cqlBatch.begin();
-            final Holder<Integer> hi = new Holder<Integer>(0);
-                       expiredCSV.visit(new CSV.Visitor() {
-                               @Override
-                               public void visit(List<String> row) throws IOException, CadiException {
-                                       int i = hi.get();
-                                       if(i>=maxBatch) {
-                                               cqlBatch.execute(dryRun);
-                                               hi.set(0);
-                                               cqlBatch.begin();
-                                               i=0;
-                                       }
-                                       switch(row.get(0)) {
-                                               case "ur":
-                                                       hi.set(++i);
-                                                       UserRole.row(sb,row);
-                                                       break;
-                                               case "cred":
-                                                       hi.set(++i);
-                                                       Cred.row(sb,row);
-                                               break;
-                                               case "x509":
-                                                       hi.set(++i);
-                                                       X509.row(sb,row);
-                                                       break;
-                                       }
-                               }
-                       });
-                       cqlBatch.execute(dryRun);
-               } catch (IOException | CadiException e) {
-                       e.printStackTrace();
-               }
-    }
-    
-    @Override
-    protected void _close(AuthzTrans trans) {
-        session.close();
-        cacheTouch.close(trans);
-    }
-
-}
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.actions.ActionDAO;
+import org.onap.aaf.auth.batch.actions.ActionDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.APIException;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
@@ -28,7 +28,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.onap.aaf.auth.actions.CredPrint;
+import org.onap.aaf.auth.batch.actions.CredPrint;
 import org.onap.aaf.auth.dao.cass.CredDAO;
 import org.onap.aaf.auth.dao.cass.CredDAO.Data;
 import org.onap.aaf.auth.env.AuthzTrans;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -28,8 +28,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.actions.Email;
-import org.onap.aaf.auth.actions.Message;
+import org.onap.aaf.auth.batch.actions.Email;
+import org.onap.aaf.auth.batch.actions.Message;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.org.Organization.Identity;
 import org.onap.aaf.auth.org.Organization;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.actions.EmailPrint;
+import org.onap.aaf.auth.batch.actions.EmailPrint;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.org.Organization;
 import org.onap.aaf.cadi.client.Future;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
@@ -31,9 +31,9 @@ import java.util.UUID;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.onap.aaf.auth.actions.FuturePrint;
+import org.onap.aaf.auth.batch.actions.FuturePrint;
+import org.onap.aaf.auth.batch.helpers.Future;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Future;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.LogTarget;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.actions.Message;
+import org.onap.aaf.auth.batch.actions.Message;
 
 import static org.mockito.Mockito.*;
 import org.junit.Test;
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  *
  */
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
@@ -29,9 +29,9 @@ import java.util.Calendar;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.onap.aaf.auth.actions.URFuturePrint;
+import org.onap.aaf.auth.batch.actions.URFuturePrint;
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.LogTarget;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.actions.test;
+package org.onap.aaf.auth.batch.actions.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
@@ -30,9 +30,9 @@ import java.util.Calendar;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.onap.aaf.auth.actions.URPrint;
+import org.onap.aaf.auth.batch.actions.URPrint;
+import org.onap.aaf.auth.batch.helpers.UserRole;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.UserRole;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.LogTarget;
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  *
  */
-package org.onap.aaf.auth.helpers.creators;
+package org.onap.aaf.auth.batch.helpers.creators;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
@@ -33,10 +33,10 @@ import java.util.UUID;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.onap.aaf.auth.batch.helpers.Approval;
+import org.onap.aaf.auth.batch.helpers.creators.RowCreator;
 import org.onap.aaf.auth.dao.cass.ApprovalDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Approval;
-import org.onap.aaf.auth.helpers.creators.RowCreator;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.LogTarget;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,8 +27,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.actions.Message;
-import org.onap.aaf.auth.helpers.Approver;
+import org.onap.aaf.auth.batch.actions.Message;
+import org.onap.aaf.auth.batch.helpers.Approver;
 import org.onap.aaf.auth.org.Organization;
 
 import static org.mockito.Mockito.*;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.helpers.CacheChange;
+import org.onap.aaf.auth.batch.helpers.CacheChange;
 
 import junit.framework.Assert;
 
@@ -20,7 +20,7 @@
  */
 
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -28,7 +28,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.helpers.Creator;
+import org.onap.aaf.auth.batch.helpers.Creator;
 
 import com.datastax.driver.core.Row;
 
@@ -20,7 +20,7 @@
  */
 
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -28,10 +28,10 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
+import org.onap.aaf.auth.batch.helpers.Cred;
+import org.onap.aaf.auth.batch.helpers.Cred.CredCount;
+import org.onap.aaf.auth.batch.helpers.Cred.Instance;
 import org.onap.aaf.auth.common.Define;
-import org.onap.aaf.auth.helpers.Cred;
-import org.onap.aaf.auth.helpers.Cred.CredCount;
-import org.onap.aaf.auth.helpers.Cred.Instance;
 import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.PropAccess;
 import org.onap.aaf.cadi.config.Config;
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  */
 
-package org.onap.aaf.auth.org.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 
@@ -26,7 +26,7 @@ import java.util.GregorianCalendar;
 import java.util.Set;
 
 import org.junit.Test;
-import org.onap.aaf.auth.org.ExpireRange;
+import org.onap.aaf.auth.batch.helpers.ExpireRange;
 import org.onap.aaf.cadi.PropAccess;
 
 public class JU_ExpireRange {
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
@@ -34,11 +34,11 @@ import java.util.UUID;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.onap.aaf.auth.batch.helpers.Creator;
+import org.onap.aaf.auth.batch.helpers.Future;
+import org.onap.aaf.auth.batch.helpers.creators.RowCreator;
 import org.onap.aaf.auth.dao.cass.FutureDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Creator;
-import org.onap.aaf.auth.helpers.Future;
-import org.onap.aaf.auth.helpers.creators.RowCreator;
 import org.onap.aaf.auth.layer.Result;
 import org.onap.aaf.misc.env.Env;
 import org.onap.aaf.misc.env.LogTarget;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.helpers.History;
+import org.onap.aaf.auth.batch.helpers.History;
 
 import junit.framework.Assert;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.helpers.InputIterator;
+import org.onap.aaf.auth.batch.helpers.InputIterator;
 
 import static org.mockito.Mockito.*;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,8 +27,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.BatchException;
-import org.onap.aaf.auth.helpers.MiscID;
+import org.onap.aaf.auth.batch.BatchException;
+import org.onap.aaf.auth.batch.helpers.MiscID;
 
 import com.datastax.driver.core.Row;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,8 +27,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.helpers.MonthData;
-import org.onap.aaf.auth.helpers.MonthData.Row;
+import org.onap.aaf.auth.batch.helpers.MonthData;
+import org.onap.aaf.auth.batch.helpers.MonthData.Row;
 
 import junit.framework.Assert;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
@@ -30,10 +30,10 @@ import java.util.ArrayList;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.onap.aaf.auth.helpers.Creator;
-import org.onap.aaf.auth.helpers.NS;
-import org.onap.aaf.auth.helpers.NS.NSSplit;
-import org.onap.aaf.auth.helpers.creators.RowCreator;
+import org.onap.aaf.auth.batch.helpers.Creator;
+import org.onap.aaf.auth.batch.helpers.NS;
+import org.onap.aaf.auth.batch.helpers.NS.NSSplit;
+import org.onap.aaf.auth.batch.helpers.creators.RowCreator;
 import org.onap.aaf.misc.env.Env;
 import org.onap.aaf.misc.env.LogTarget;
 import org.onap.aaf.misc.env.TimeTaken;
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.onap.aaf.auth.helpers.NsAttrib;
-import org.onap.aaf.auth.helpers.creators.RowCreator;
+import org.onap.aaf.auth.batch.helpers.NsAttrib;
+import org.onap.aaf.auth.batch.helpers.creators.RowCreator;
 
 import junit.framework.Assert;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.helpers.Perm;
+import org.onap.aaf.auth.batch.helpers.Perm;
 
 import junit.framework.Assert;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,8 +27,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.helpers.Perm;
-import org.onap.aaf.auth.helpers.Role;
+import org.onap.aaf.auth.batch.helpers.Perm;
+import org.onap.aaf.auth.batch.helpers.Role;
 
 import junit.framework.Assert;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.helpers.test;
+package org.onap.aaf.auth.batch.helpers.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
@@ -33,12 +33,12 @@ import java.util.List;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.onap.aaf.auth.actions.URDelete;
+import org.onap.aaf.auth.batch.actions.URDelete;
+import org.onap.aaf.auth.batch.helpers.Creator;
+import org.onap.aaf.auth.batch.helpers.UserRole;
+import org.onap.aaf.auth.batch.helpers.creators.RowCreator;
 import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Creator;
-import org.onap.aaf.auth.helpers.UserRole;
-import org.onap.aaf.auth.helpers.creators.RowCreator;
 import org.onap.aaf.misc.env.Env;
 import org.onap.aaf.misc.env.LogTarget;
 import org.onap.aaf.misc.env.TimeTaken;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.test;
+package org.onap.aaf.auth.batch.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.Batch;
+import org.onap.aaf.auth.batch.Batch;
 import org.onap.aaf.auth.env.AuthzEnv;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.org.Organization;
@@ -20,7 +20,7 @@
  */
 
 
-package org.onap.aaf.auth.test;
+package org.onap.aaf.auth.batch.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -28,7 +28,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.BatchException;
+import org.onap.aaf.auth.batch.BatchException;
 
 import static org.mockito.Mockito.*;
 import org.junit.Test;
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.test;
+package org.onap.aaf.auth.batch.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.BatchPrincipal;
+import org.onap.aaf.auth.batch.BatchPrincipal;
 
 import junit.framework.Assert;
 
@@ -19,7 +19,7 @@
  *
  */
 
-package org.onap.aaf.auth.test;
+package org.onap.aaf.auth.batch.test;
 
 import static org.junit.Assert.*;
 import org.junit.After;
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.aaf.auth.CassBatch;
+import org.onap.aaf.auth.batch.CassBatch;
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.auth.org.OrganizationException;
 import org.onap.aaf.misc.env.APIException;
@@ -18,7 +18,7 @@
  * ============LICENSE_END====================================================
  *
  */
-package org.onap.aaf.auth.helpers;
+package org.onap.aaf.auth.batch.test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -29,10 +29,12 @@ import static org.mockito.MockitoAnnotations.initMocks;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.onap.aaf.auth.actions.Message;
+import org.onap.aaf.auth.batch.actions.Message;
+import org.onap.aaf.auth.batch.helpers.Creator;
+import org.onap.aaf.auth.batch.helpers.Notification;
+import org.onap.aaf.auth.batch.helpers.Notification.TYPE;
+import org.onap.aaf.auth.batch.helpers.creators.RowCreator;
 import org.onap.aaf.auth.env.AuthzTrans;
-import org.onap.aaf.auth.helpers.Notification.TYPE;
-import org.onap.aaf.auth.helpers.creators.RowCreator;
 import org.onap.aaf.misc.env.Env;
 import org.onap.aaf.misc.env.LogTarget;
 import org.onap.aaf.misc.env.TimeTaken;
index a40b28f..69d1d26 100644 (file)
@@ -171,6 +171,24 @@ public class HistoryDAO extends CassDAOImpl<AuthzTrans, HistoryDAO.Data> {
         // data.day_time = Integer.parseInt(dayTimeFormat.format(now));
         return data;        
     }
+    
+    public void createBatch(StringBuilder sb, Data data) {
+       sb.append("INSERT INTO history (");
+       sb.append(helpers[FIELD_COMMAS]);
+       sb.append(") VALUES(now(),");
+       sb.append(data.yr_mon);
+       sb.append(",'");
+       sb.append(data.user);
+       sb.append("','");
+       sb.append(data.action);
+       sb.append("','");
+       sb.append(data.target);
+       sb.append("','");
+       sb.append(data.subject);
+       sb.append("','");
+       sb.append(data.memo);
+       sb.append("',null);\n");
+    }
 
     public Result<List<Data>> readByYYYYMM(AuthzTrans trans, int yyyymm) {
         Result<ResultSet> rs = readByYRMN.exec(trans, "yr_mon", yyyymm);
index f55e1c1..4a30769 100644 (file)
@@ -953,27 +953,27 @@ public class Question {
             rv = cacheInfoDAO.touch(trans, NsDAO.TABLE, seg);
         }
         if (all || PermDAO.TABLE.equals(cname)) {
-            int seg[] = series(NsDAO.CACHE_SEG);
+            int seg[] = series(PermDAO.CACHE_SEG);
             for (int i: seg) {cacheClear(trans, PermDAO.TABLE,i);}
             rv = cacheInfoDAO.touch(trans, PermDAO.TABLE,seg);
         }
         if (all || RoleDAO.TABLE.equals(cname)) {
-            int seg[] = series(NsDAO.CACHE_SEG);
+            int seg[] = series(RoleDAO.CACHE_SEG);
             for (int i: seg) {cacheClear(trans, RoleDAO.TABLE,i);}
             rv = cacheInfoDAO.touch(trans, RoleDAO.TABLE,seg);
         }
         if (all || UserRoleDAO.TABLE.equals(cname)) {
-            int seg[] = series(NsDAO.CACHE_SEG);
+            int seg[] = series(UserRoleDAO.CACHE_SEG);
             for (int i: seg) {cacheClear(trans, UserRoleDAO.TABLE,i);}
             rv = cacheInfoDAO.touch(trans, UserRoleDAO.TABLE,seg);
         }
         if (all || CredDAO.TABLE.equals(cname)) {
-            int seg[] = series(NsDAO.CACHE_SEG);
+            int seg[] = series(CredDAO.CACHE_SEG);
             for (int i: seg) {cacheClear(trans, CredDAO.TABLE,i);}
             rv = cacheInfoDAO.touch(trans, CredDAO.TABLE,seg);
         }
         if (all || CertDAO.TABLE.equals(cname)) {
-            int seg[] = series(NsDAO.CACHE_SEG);
+            int seg[] = series(CertDAO.CACHE_SEG);
             for (int i: seg) {cacheClear(trans, CertDAO.TABLE,i);}
             rv = cacheInfoDAO.touch(trans, CertDAO.TABLE,seg);
         }
index 1064c9b..1b1b183 100644 (file)
@@ -38,6 +38,6 @@ public class Version extends Cmd {
         pw().println("AAF Command Line Tool");
         pw().print("Version: ");
         pw().println(Config.AAF_DEFAULT_API_VERSION);
-        return 200 /*HttpStatus.OK_200;*/;
+        return 200;
     }
 }
index 3431a0e..feb1dec 100644 (file)
@@ -3,6 +3,7 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * 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.
@@ -49,8 +50,8 @@ public class ListByPerm extends Cmd {
     }
 
     @Override
-    public int _exec(int _idx, final String ... args) throws CadiException, APIException, LocatorException {
-            int idx = _idx;
+    public int _exec(int idx0, final String ... args) throws CadiException, APIException, LocatorException {
+            int idx = idx0;
         final String type=args[idx];
         final String instance=args[++idx];
         final String action=args[++idx];
index fd252fe..69cfc7d 100644 (file)
@@ -64,6 +64,18 @@ public interface Organization {
         public boolean isPerson();                // Whether a Person or a Machine (App)
         public Organization org();                 // Organization of Identity
 
+
+       public static String mixedCase(String in) {
+               StringBuilder sb = new StringBuilder();
+               for(int i=0;i<in.length();++i) {
+                       if(i==0) {
+                               sb.append(Character.toUpperCase(in.charAt(i)));
+                       } else {
+                               sb.append(Character.toLowerCase(in.charAt(i)));
+                       }
+               }
+               return sb.toString();
+       }
     }
 
 
@@ -83,9 +95,7 @@ public interface Organization {
 
     public void addSupportedRealm(String r);
 
-
-
-    String getDomain();
+    public String getDomain();
 
     /**
      * Get Identity information based on userID
@@ -95,6 +105,20 @@ public interface Organization {
      */
     public Identity getIdentity(AuthzTrans trans, String id) throws OrganizationException;
     
+    /**
+     * May AutoDelete
+     * 
+     * Deletion of an Identity that has been removed from an Organization can be dangerous.  Mistakes may have been made 
+     * in the Organization side, a Feed might be corrupted, an API might not be quite right.  
+     * 
+     * The implementation of this method can use a double check of some sort, such as comparsion of missing ID in Organization
+     * feed with a "Deleted ID" feed.  
+     * 
+     * The failure to be in Organization will still be reported, if returned "false", but if true, it is taken as an 
+     * ok to proceed with deletion. 
+     */
+       public boolean mayAutoDelete(AuthzTrans trans, String id);
+
 
     /**
      * Does the ID pass Organization Standards
@@ -516,15 +540,22 @@ public interface Organization {
                 }
 
             };
+            
+
         }
 
         @Override
         public String[] getPasswordRules() {
             return nullStringArray; 
         }
+        
+       @Override
+       public boolean mayAutoDelete(AuthzTrans trans, String id) {
+               // provide a corresponding feed that indicates that an ID has been intentionally removed from identities.dat table.
+               return false;
+       }
 
     };
-
 }
 
 
index 3c6176e..c7dd3d3 100644 (file)
@@ -597,4 +597,10 @@ public class DefaultOrg implements Organization {
             return 0;
         }
     }
+
+       @Override
+       public boolean mayAutoDelete(AuthzTrans trans, String user) {
+               // provide a corresponding feed that indicates that an ID has been intentionally removed from identities.dat table.
+               return false;
+       }
 }
index d3c3ab6..9e4bcf5 100644 (file)
@@ -4,3 +4,5 @@
 /aaf.props
 /cass.props
 /policy*
+/*.yaml
+/*.orig
index 88b8497..33db109 100644 (file)
@@ -18,8 +18,6 @@
 #  limitations under the License.
 #  ============LICENSE_END====================================================
 #
-
-
 # Fill out "aaf.props" if not filled out already
 if [ ! -e aaf.props ]; then
   > ./aaf.props
@@ -27,29 +25,53 @@ fi
  
 . ./aaf.props
 
-DOCKER=${DOCKER:=docker}
-CADI_VERSION=${CADI_VERSION:=2.1.9-SNAPSHOT}
+if [ -z "$ADMIN" ]; then
+  echo -n "Is the target [K]ubernetes or [D]ocker (K):"
+  read R
+  case $R in 
+    d|D) ADMIN=docker 
+         echo "ADMIN=docker" >> aaf.props
+         ;;
+    *) ADMIN=kubectl
+         echo "ADMIN=kubectl" >> aaf.props
+       ;;
+  esac
+fi
+   
+if [ "$ADMIN" = "docker" ]; then
+   PROPS="VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_FQI VOLUME DRIVER LATITUDE LONGITUDE"
+   DEF_AAF_FQDN=aaf-onap-test.osaaf.org
+else
+   PROPS="VERSION DOCKER_REPOSITORY NAMESPACE DEPLOY_FQI DEPLOY_PASSWORD AAF_FQDN APP_FQDN APP_FQI VOLUME PVC DRIVER LATITUDE LONGITUDE"
+   DEF_AAF_FQDN=aaf-locate
+fi
 
-for V in VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_FQI VOLUME DRIVER LATITUDE LONGITUDE; do
+for V in $PROPS; do
    if [ "$(grep $V ./aaf.props)" = "" ]; then
       unset DEF
       case $V in
         DOCKER_REPOSITORY) 
-               PROMPT="Docker Repo"
-               DEF=""
-               ;;
-         AAF_FQDN)   PROMPT="AAF's FQDN";;
-         DEPLOY_FQI) PROMPT="Deployer's FQI";;
+                    PROMPT="Docker Repo"; DEF="nexus3.onap.org:10003" ;;
+         AAF_FQDN)   PROMPT="AAF's FQDN" 
+                     if [ -z "$NAMESPACE" ]; then
+                      DEF=$DEF_AAF_FQDN
+                    else
+                       DEF=$DEF_AAF_FQDN.$NAMESPACE
+                    fi
+                     ;;                        
+         DEPLOY_FQI) PROMPT="Deployer's FQI"; DEF="deployer@people.osaaf.org" ;;
          AAF_FQDN_IP)
-               # Need AAF_FQDN's IP, because not might not be available in mini-container
-               PROMPT="AAF FQDN IP"
-               DEF=$(host $AAF_FQDN | grep "has address" | tail -1 | cut -f 4 -d ' ')
-                ;;
+                    # Need AAF_FQDN's IP, because not might not be available in mini-container
+                    PROMPT="AAF FQDN IP"
+                    DEF=$(host $AAF_FQDN | grep "has address" | tail -1 | cut -f 4 -d ' ')
+                     ;;
          APP_FQI)    PROMPT="App's FQI";; 
          APP_FQDN)   PROMPT="App's Root FQDN";; 
-         VOLUME)     PROMPT="APP's AAF Configuration Volume";;
+         VOLUME)     PROMPT="App's AAF Configuration Volume";DEF=${APP_FQDN/.*/}-config;;
          DRIVER)     PROMPT=$V;DEF=local;;
-        VERSION)    PROMPT="CADI Version";DEF=$CADI_VERSION;;
+        VERSION)    PROMPT="CADI Version";DEF=2.1.9-SNAPSHOT;;
+        NAMESPACE)  PROMPT="Kubernetes Namespace";DEF=onap;;
+        PVC)        PROMPT="Persistent Volume Claim";DEF=$VOLUME-pvc;;
          LATITUDE|LONGITUDE) PROMPT="$V of Node";;
          *)          PROMPT=$V;;
       esac
@@ -65,6 +87,7 @@ for V in VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_
             exit
          else
             VAR=$DEF
+            declare $V="$VAR"
          fi
       fi
       echo "$V=$VAR" >> ./aaf.props
@@ -72,19 +95,20 @@ for V in VERSION DOCKER_REPOSITORY AAF_FQDN AAF_FQDN_IP DEPLOY_FQI APP_FQDN APP_
 done
 . ./aaf.props
 
-# Make sure Container Volume exists
-if [ "$($DOCKER volume ls | grep ${VOLUME})" = "" ]; then
-  echo -n "Creating Volume: " 
-  $DOCKER volume create -d ${DRIVER} ${VOLUME}
-fi
-
 if [ -n "$DOCKER_REPOSITORY" ]; then
   PREFIX="$DOCKER_REPOSITORY/"
 else
   PREFIX=""
 fi 
 
-$DOCKER run \
+if [[ "$ADMIN" =~ docker ]]; then
+  # Make sure Container Volume exists
+  if [ "$($ADMIN volume ls | grep ${VOLUME})" = "" ]; then
+    echo -n "Creating Volume: $VOLUME" 
+    $ADMIN volume create -d ${DRIVER} ${VOLUME}
+  fi
+
+  $ADMIN run \
     -it \
     --rm \
     -v "${VOLUME}:/opt/app/osaaf" \
@@ -99,3 +123,117 @@ $DOCKER run \
     --name aaf_agent_$USER \
     "$PREFIX"onap/aaf/aaf_agent:$VERSION \
     /bin/bash "$@"
+else
+  NAMESPACE=${NAMESPACE:=onap}
+  YAML=${VOLUME}.yaml
+  # Make sure Container Volume exists
+  if [ -z "$($ADMIN -n $NAMESPACE get pv | grep ${VOLUME})" ]; then
+    if [ ! -r $YAML ]; then
+      SIZE=30M
+      echo "---" >> $YAML
+      echo "kind: PersistentVolume" >> $YAML
+      echo "apiVersion: v1" >> $YAML
+      echo "metadata:" >> $YAML
+      echo "  name: $VOLUME-pv" >> $YAML
+      echo "  namespace: $NAMESPACE" >> $YAML
+      echo "  labels:" >> $YAML
+      echo "    app: $VOLUME" >> $YAML
+      echo "    type: local" >> $YAML
+      echo "spec:" >> $YAML
+      echo "  capacity:" >> $YAML
+      echo "    storage: $SIZE" >> $YAML
+      echo "  accessModes:" >> $YAML
+      echo "    - ReadWriteOnce" >> $YAML
+      echo "  hostPath:" >> $YAML
+      echo "    path: \"/data/$VOLUME\"" >> $YAML
+      echo "  storageClassName: \"manual\"" >> $YAML
+      echo "---" >> $YAML
+      echo "kind: PersistentVolumeClaim" >> $YAML
+      echo "apiVersion: v1" >> $YAML
+      echo "metadata:" >> $YAML
+      echo "  name: $VOLUME-pvc" >> $YAML
+      echo "  namespace: $NAMESPACE" >> $YAML
+      echo "  labels:" >> $YAML
+      echo "    app: $VOLUME" >> $YAML
+      echo "    type: local" >> $YAML
+      echo "spec:" >> $YAML
+      echo "  selector:" >> $YAML
+      echo "    matchLabels:" >> $YAML
+      echo "      app: $VOLUME" >> $YAML
+      echo "  accessModes:" >> $YAML
+      echo "    - ReadWriteOnce" >> $YAML
+      echo "  resources:" >> $YAML
+      echo "    requests:" >> $YAML
+      echo "      storage: $SIZE" >> $YAML
+      echo "  storageClassName: "manual"" >> $YAML
+    fi
+    $ADMIN -n $NAMESPACE create -f $YAML
+  fi
+  POD=aaf-agent-$USER
+  $ADMIN run -n $NAMESPACE $POD \
+    -i --rm  \
+    --restart=Never \
+    --image="$PREFIX"onap/aaf/aaf_agent:$VERSION \
+    --overrides='
+{
+  "apiVersion": "v1",
+  "kind": "Pod",
+  "metadata": {
+    "name": "'$POD'"
+  },
+  "spec": {
+    "volumes": [{
+      "name": "'$VOLUME'",
+      "persistentVolumeClaim": {
+         "claimName": "'$VOLUME'-pvc"
+      }
+    }],
+    "containers": [
+      {
+        "name": "aaf-agent-'$USER'",
+        "imagePullPolicy": "IfNotPresent",
+        "image": "'$PREFIX'onap/aaf/aaf_agent:'$VERSION'",
+        "args": [
+          "/bin/bash",
+           "'$@'"
+        ],
+        "stdin": true,
+        "stdinOnce": true,
+        "tty": true,
+        "volumeMounts": [
+          {
+            "mountPath": "/opt/app/osaaf",
+            "name": "'$VOLUME'"
+          }
+        ],
+       "env": [
+          {
+            "name": "AAF_FQDN",
+            "value": "'$AAF_FQDN'"
+          },{
+            "name": "DEPLOY_FQI",
+            "value": "'$DEPLOY_FQI'"
+          },{
+            "name": "DEPLOY_PASSWORD",
+            "value": "'$DEPLOY_PASSWORD'"
+          },{
+            "name": "APP_FQI",
+            "value": "'$APP_FQI'"
+          },{
+            "name": "APP_FQDN",
+            "value": "'$APP_FQDN'"
+          },{
+            "name": "LATITUDE",
+            "value": "'$LATITUDE'"
+          },{
+            "name": "LONGITUDE",
+            "value": "'$LONGITUDE'"
+          }
+        ]
+      }
+    ]
+  }
+}'
+     
+
+fi
index 62fd177..80014ba 100644 (file)
@@ -1 +1,2 @@
 theme
+.DS_Store