Merge "restore a couple of fields' access to public"
[aaf/authz.git] / auth / auth-batch / src / main / java / org / onap / aaf / auth / batch / helpers / CQLBatchLoop.java
index ca264d1..9bb2fa3 100644 (file)
@@ -3,13 +3,14 @@
  * org.onap.aaf
  * ===========================================================================
  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 IBM.
  * ===========================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 package org.onap.aaf.auth.batch.helpers;
 
 public class CQLBatchLoop {
-       
-       private final CQLBatch cqlBatch;
-       private final int maxBatch;
-       private final StringBuilder sb;
-       private final boolean dryRun;
-       private int i;
-       
-       public CQLBatchLoop(CQLBatch cb, int max, boolean dryRun) {
-               cqlBatch = cb;
-               i=0;
-               maxBatch = max;
-               sb = cqlBatch.begin();
-               this.dryRun = dryRun;
-       }
+    private static final int MAX_CHARS = (50 * 1024)/2;
 
-       /**
-        * Put at the first part of your Loop Logic... It checks if you have enough lines to
-        * push a batch.
-        */
-       public void preLoop() {
-               if(i<0) {
-                       cqlBatch.begin();
-               } else if(i>=maxBatch) {
-                       cqlBatch.execute(dryRun);
-                       cqlBatch.begin();
-                       i=0;
-               }
-       }
-       
-       /**
-        * Assume this is another line in the Batch
-        * @return
-        */
-       public StringBuilder inc() {
-               ++i;
-               return sb;
-       }
-       
-       /**
-        * Close up when done.  However, can go back to "preLoop" safely.
-        */
-       public void flush() {
-               cqlBatch.execute(dryRun);
-               i=-1;
-       }
+    private final CQLBatch cqlBatch;
+    private final int maxBatch;
+    private final StringBuilder sb;
+    private final boolean dryRun;
+    private int i;
+    private int total;
+    private int batches;
+    private final StringBuilder current;
+    private boolean showProgress;
+
+    public CQLBatchLoop(CQLBatch cb, int max, boolean dryRun) {
+        cqlBatch = cb;
+        i=0;
+        total = 0;
+        maxBatch = max;
+        sb = cqlBatch.begin();
+        current = new StringBuilder();
+        this.dryRun = dryRun;
+        showProgress = false;
+    }
+
+    public CQLBatchLoop showProgress() {
+        showProgress = true;
+        return this;
+    }
+    /**
+     * Assume this is another line in the Batch
+     * @return
+     */
+    public StringBuilder inc() {
+        if((i>=maxBatch || current.length() + sb.length() > MAX_CHARS) && (i > 0)) {
+
+                cqlBatch.execute(dryRun);
+                i = -1;
+                incBatch();
+    }
+        if(i < 0) {
+            cqlBatch.begin();
+            i = 0;
+        }
+        if(current.length() > MAX_CHARS) {
+            cqlBatch.singleExec(current, dryRun);
+        } else {
+            sb.append(current);
+        }
+        current.setLength(0);
+        ++i;
+        ++total;
+        return current;
+    }
+
+    /**
+     * Close up when finished.
+     */
+    public void flush() {
+        if(current.length() + sb.length() > MAX_CHARS) {
+            if(i > 0) {
+                cqlBatch.execute(dryRun);
+                incBatch();
+            }
+            if(current.length() > 0) {
+                cqlBatch.singleExec(current, dryRun);
+                current.setLength(0);
+                incBatch();
+            }
+        } else {
+            if(i < 0) {
+                cqlBatch.begin();
+            }
+            sb.append(current);
+            current.setLength(0);
+            cqlBatch.execute(dryRun);
+            incBatch();
+        }
+        i = -1;
+    }
+
+    private void incBatch() {
+        ++batches;
+        if(showProgress) {
+            System.out.print('.');
+            if(batches%70 == 0) {
+                System.out.println();
+            }
+        }
+    }
+
+    public int total() {
+        return total;
+    }
+
+    public int batches() {
+        return batches;
+    }
+
+    public void reset() {
+        total = 0;
+        batches = 0;
+        i = -1;
+    }
+
+    public String toString() {
+        return cqlBatch.toString();
+    }
 }