Clean LOCAL Dir based on VERSION
[aaf/authz.git] / cadi / core / src / main / java / org / onap / aaf / cadi / util / CSV.java
index a834db5..35d85b9 100644 (file)
@@ -31,8 +31,8 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.onap.aaf.cadi.Access;
-import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.Access.Level;
+import org.onap.aaf.cadi.CadiException;
 
 /**
  * Read CSV file for various purposes
@@ -44,6 +44,7 @@ public class CSV {
        private File csv;
        private Access access;
        private boolean processAll;
+       private char delimiter = ',';
        
        public CSV(Access access, File file) {
                this.access = access;
@@ -57,6 +58,15 @@ public class CSV {
                processAll = false;
        }
        
+       public CSV setDelimiter(char delimiter) {
+               this.delimiter = delimiter;
+               return this;
+       }
+       
+       public String name() {
+               return csv.getName();
+       }
+
        public CSV processAll() {
                processAll = true;
                return this;
@@ -85,7 +95,7 @@ public class CSV {
                                        List<String> row = new ArrayList<>();
                                        boolean quotes=false;
                                        boolean escape=false;
-                                       char c;
+                                       char c = 0;
                                        for(int i=0;i<line.length();++i) {
                                                switch(c=line.charAt(i)) {
                                                        case '"':
@@ -112,19 +122,28 @@ public class CSV {
                                                                        escape = true;
                                                                }
                                                                break;
-                                                       case ',':
-                                                               if(quotes) {
-                                                                       sb.append(c);
+                                                       case 'n':
+                                                               if(escape) {
+                                                                       sb.append("\\n");
+                                                                       escape=false;
                                                                } else {
-                                                                       row.add(sb.toString());
-                                                                       sb.setLength(0);
+                                                                       sb.append(c);
                                                                }
                                                                break;
                                                        default:
-                                                               sb.append(c);
+                                                               if(delimiter==c) {
+                                                                       if(quotes) {
+                                                                               sb.append(c);
+                                                                       } else {
+                                                                               row.add(sb.toString());
+                                                                               sb.setLength(0);
+                                                                       }
+                                                               } else {
+                                                                       sb.append(c);
+                                                               }
                                                }
                                        }
-                                       if(sb.length()>0) {
+                                       if(sb.length()>0 || c==',') {
                                                row.add(sb.toString());
                                                sb.setLength(0);
                                        }
@@ -152,11 +171,44 @@ public class CSV {
                return new Writer(append);
        }
 
-       public class Writer {
+       public interface RowSetter {
+               public void row(Object ... objs);
+       }
+       
+       public static class Saver implements RowSetter {
+               List<String> 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<String> asList() {
+                       List<String> rv = ls;
+                       ls = new ArrayList<>();
+                       return rv;
+               }
+       }
+
+       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;
@@ -164,7 +216,7 @@ public class CSV {
                                        if(first) {
                                                first = false;
                                        } else {
-                                               ps.append(',');
+                                               ps.append(delimiter);
                                        }
                                        if(o == null) {
                                        } else if(o instanceof String[]) {
@@ -197,9 +249,10 @@ public class CSV {
                 * Note: CSV files do not actually support Comments as a standard, but it is useful
                 * @param comment
                 */
-               public void comment(String comment) {
+               public void comment(String comment, Object ... objs) {
                        ps.print("# ");
-                       ps.println(comment);
+                       ps.printf(comment,objs);
+                       ps.println();
                }
                
                public void flush() {
@@ -207,6 +260,7 @@ public class CSV {
                }
                
                public void close() {
+                       flush();
                        ps.close();
                }