X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=auth%2Fauth-batch%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fauth%2Fbatch%2Fhelpers%2FCQLBatchLoop.java;h=9bb2fa329b0031a24d9578ccfd0f14ae36bcf62e;hb=HEAD;hp=ca264d14764a5fe9c505e254c578e0b498a0c90c;hpb=2b5103e038a7727734097a671d331db9aaab77ba;p=aaf%2Fauthz.git diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CQLBatchLoop.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CQLBatchLoop.java index ca264d14..9bb2fa32 100644 --- a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CQLBatchLoop.java +++ b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/CQLBatchLoop.java @@ -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. @@ -21,49 +22,110 @@ 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(); + } }