X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cadi%2Fcore%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fcadi%2Futil%2FCSV.java;h=2c9bb8c44ab6c842a188a7f3bf6bbcc43ffa50ac;hb=07fb3ece74a9aa1fad8e2a9fab73b4de3e36853b;hp=c7fada74437fa9d54304940be20a951c58f97b41;hpb=b90e58e54dae6412eec1acf618e5d38fa3b8127b;p=aaf%2Fauthz.git diff --git a/cadi/core/src/main/java/org/onap/aaf/cadi/util/CSV.java b/cadi/core/src/main/java/org/onap/aaf/cadi/util/CSV.java index c7fada74..2c9bb8c4 100644 --- a/cadi/core/src/main/java/org/onap/aaf/cadi/util/CSV.java +++ b/cadi/core/src/main/java/org/onap/aaf/cadi/util/CSV.java @@ -30,6 +30,8 @@ import java.io.PrintStream; import java.util.ArrayList; import java.util.List; +import org.onap.aaf.cadi.Access; +import org.onap.aaf.cadi.Access.Level; import org.onap.aaf.cadi.CadiException; /** @@ -39,160 +41,250 @@ import org.onap.aaf.cadi.CadiException; * */ public class CSV { - private File csv; - - public CSV(File file) { - csv = file; - } - - public CSV(String csvFilename) { - csv = new File(csvFilename); - } - + private File csv; + private Access access; + private boolean processAll; + private char delimiter = ','; + private boolean go; + + public CSV(Access access, File file) { + this.access = access; + csv = file; + processAll = false; + go = true; + } + + public CSV(Access access, String csvFilename) { + this.access = access; + csv = new File(csvFilename); + processAll = false; + go = true; + } + + public CSV setDelimiter(char delimiter) { + this.delimiter = delimiter; + return this; + } + + public String name() { + return csv.getName(); + } - /** - * Create your code to accept the List row. - * - * Your code may keep the List... CSV does not hold onto it. - * - * @author Instrumental(Jonathan) - * - */ - public interface Visitor { - void visit(List row) throws IOException, CadiException; - } - - public void visit(Visitor visitor) throws IOException, CadiException { - BufferedReader br = new BufferedReader(new FileReader(csv)); - try { - String line; - StringBuilder sb = new StringBuilder(); - while((line = br.readLine())!=null) { - line=line.trim(); - if(!line.startsWith("#") && line.length()>0) { -// System.out.println(line); uncomment to debug - List row = new ArrayList<>(); - boolean quotes=false; - boolean escape=false; - char c; - for(int i=0;i0) { - row.add(sb.toString()); - sb.setLength(0); - } - visitor.visit(row); - } - } - } finally { - br.close(); - } - } - - public Writer writer() throws FileNotFoundException { - return new Writer(false); - } + public CSV processAll() { + processAll = true; + return this; + } + /* + * Create your code to accept the List row. + * + * Your code may keep the List... CSV does not hold onto it. + * + * @author Instrumental(Jonathan) + * + */ + public interface Visitor { + void visit(List row) throws IOException, CadiException; + } + + public void visit(Visitor visitor) throws IOException, CadiException { + BufferedReader br = new BufferedReader(new FileReader(csv)); + try { + String line; + StringBuilder sb = new StringBuilder(); + while(go && (line = br.readLine())!=null) { + line=line.trim(); + if(!line.startsWith("#") && line.length()>0) { +// System.out.println(line); uncomment to debug + List row = new ArrayList<>(); + boolean quotes=false; + boolean escape=false; + char c = 0; + for(int i=0;i0 || c==',') { + row.add(sb.toString()); + sb.setLength(0); + } + try { + visitor.visit(row); + } catch (CadiException e) { + if(processAll) { + access.log(Level.ERROR,e); + } else { + throw e; + } + } + } + } + } finally { + br.close(); + } + } + + public Writer writer() throws FileNotFoundException { + return new Writer(false); + } - public Writer writer(boolean append) throws FileNotFoundException { - return new Writer(append); - } + public Writer writer(boolean append) throws FileNotFoundException { + return new Writer(append); + } - public class Writer { - private PrintStream ps; - private Writer(final boolean append) throws FileNotFoundException { - ps = new PrintStream(new FileOutputStream(csv,append)); - } - public void row(Object ... strings) { - if(strings.length>0) { - boolean first = true; - boolean quote; - String s; - for(Object o : strings) { - if(first) { - first = false; - } else { - ps.append(','); - } - s = o.toString(); - quote = s.matches(".*[,|\"].*"); - if(quote) { - ps.append('"'); - ps.print(s.replace("\"", "\"\"") - .replace("'", "''") - .replace("\\", "\\\\")); - ps.append('"'); - } else { - ps.append(s); - } - } - ps.println(); - } - } - - /** - * Note: CSV files do not actually support Comments as a standard, but it is useful - * @param comment - */ - public void comment(String comment) { - ps.print("# "); - ps.println(comment); - } - - public void flush() { - ps.flush(); - } - - public void close() { - ps.close(); - } - - public String toString() { - return csv.getAbsolutePath(); - } - } + public interface RowSetter { + public void row(Object ... objs); + } + + public static class Saver implements RowSetter { + List ls= new ArrayList<>(); + + @Override + public void row(Object ... objs) { + if(objs.length>0) { + for(Object o : objs) { + if(o != null) { + if(o instanceof String[]) { + for(String str : (String[])o) { + ls.add(str); + } + } else { + ls.add(o.toString()); + } + } + } + } + } + + public List asList() { + List rv = ls; + ls = new ArrayList<>(); + return rv; + } + } - public void delete() { - csv.delete(); - } - - public String toString() { - return csv.getAbsolutePath(); - } + public class Writer implements RowSetter { + private PrintStream ps; + private Writer(final boolean append) throws FileNotFoundException { + ps = new PrintStream(new FileOutputStream(csv,append)); + } + + @Override + public void row(Object ... objs) { + if(objs.length>0) { + boolean first = true; + for(Object o : objs) { + if(first) { + first = false; + } else { + ps.append(delimiter); + } + if(o == null) { + } else if(o instanceof String[]) { + for(String str : (String[])o) { + print(str); + } + } else { + print(o.toString()); + } + } + ps.println(); + } + } + + private void print(String s) { + boolean quote = s.matches(".*[,|\"].*"); + if(quote) { + ps.append('"'); + ps.print(s.replace("\"", "\"\"") + .replace("'", "''") + .replace("\\", "\\\\")); + ps.append('"'); + } else { + ps.append(s); + } + + + } + /** + * Note: CSV files do not actually support Comments as a standard, but it is useful + * @param comment + */ + public void comment(String comment, Object ... objs) { + ps.print("# "); + ps.printf(comment,objs); + ps.println(); + } + + public void flush() { + ps.flush(); + } + + public void close() { + flush(); + ps.close(); + } + + public String toString() { + return csv.getAbsolutePath(); + } + } + + /** + * Provides a way to stop processing records from inside a Visit + */ + public void stop() { + go = false; + } + + public void delete() { + csv.delete(); + } + + public String toString() { + return csv.getAbsolutePath(); + } }