Refine Local Agent.sh use
[aaf/authz.git] / cadi / core / src / main / java / org / onap / aaf / cadi / PropAccess.java
index 97984b0..bbc3086 100644 (file)
@@ -26,6 +26,8 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -139,7 +141,8 @@ public class PropAccess implements Access {
         
         specialConversions();
     }
-
+    
+   
     private void specialConversions() {
         // Critical - if no Security Protocols set, then set it.  We'll just get messed up if not
         if (props.get(Config.CADI_PROTOCOLS)==null) {
@@ -274,41 +277,53 @@ public class PropAccess implements Access {
             sb.append("] ");
         } else {
             int idx = 0;
-            if (elements[idx] instanceof Integer) {
+            if(elements[idx]!=null  && 
+               elements[idx] instanceof Integer) {
                 sb.append('-');
                 sb.append(elements[idx]);
                 ++idx;
             }
             sb.append("] ");
-            String s;
-            boolean first = true;
-            for (Object o : elements) {
-                if (o!=null) {
-                    s=o.toString();
-                    if (first) {
-                        first = false;
-                    } else {
-                        int l = s.length();
-                        if (l>0)    {
-                            switch(s.charAt(l-1)) {
-                                case ' ':
-                                    break;
-                                default:
-                                    sb.append(' ');
-                            }
-                        }
-                    }
-                    sb.append(s);
-                }
-            }
+            write(true,sb,elements);
         }
         return sb;
     }
+    
+    private static boolean write(boolean first, StringBuilder sb, Object[] elements) {
+       String s;
+        for (Object o : elements) {
+            if (o!=null) {
+               if(o.getClass().isArray()) {
+                       first = write(first,sb,(Object[])o);
+               } else {
+                       s=o.toString();
+                       if (first) {
+                           first = false;
+                       } else {
+                           int l = s.length();
+                           if (l>0)    {
+                               switch(s.charAt(l-1)) {
+                                   case ' ':
+                                       break;
+                                   default:
+                                       sb.append(' ');
+                               }
+                           }
+                       }
+                       sb.append(s);
+               }
+            }
+        }
+        return first;
+    }
 
     @Override
     public void log(Exception e, Object... elements) {
-        log(Level.ERROR,e.getMessage(),elements);
-        e.printStackTrace(System.err);
+       StringWriter sw = new StringWriter();
+       PrintWriter pw = new PrintWriter(sw);
+       pw.println();
+       e.printStackTrace(pw);
+        log(Level.ERROR,elements,sw.toString());
     }
 
     @Override
@@ -392,13 +407,16 @@ public class PropAccess implements Access {
             ps.println(buildMsg(level,elements));
             ps.flush();
         }
-        
     }
 
     public void set(LogIt logit) {
         logIt = logit;
     }
-    
+
+    public void setStreamLogIt(PrintStream ps) {
+        logIt = new StreamLogIt(ps);
+    }
+
     public String toString() {
        return props.toString();
     }