application-tracer

append traces to file, added long classes name and jsonify names

9/22/2018 6:54:52 AM

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/applicationsdumpler/Dumpler.java b/src/main/java/br/ufrgs/inf/prosoft/applicationsdumpler/Dumpler.java
index beb38bf..69ac1d1 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/applicationsdumpler/Dumpler.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/applicationsdumpler/Dumpler.java
@@ -5,6 +5,16 @@
  */
 package br.ufrgs.inf.prosoft.applicationsdumpler;
 
+import java.io.BufferedOutputStream;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -24,17 +34,27 @@ public class Dumpler {
 
     @Around("anyMethodExecution()")
     public Object serializeMethodCall(ProceedingJoinPoint joinPoint) throws Throwable {
+        String longsignature = joinPoint.getSignature().toLongString();
+        int indexOfParenthesis = longsignature.lastIndexOf("(");
+        String[] argumentClassesName = longsignature.substring(indexOfParenthesis + 1, longsignature.length() - 1).split(", ");
+        String returnClassName = longsignature.substring(0, indexOfParenthesis);
+        returnClassName = returnClassName.substring(0, returnClassName.lastIndexOf(" "));
+        int indexOfEndOfModifiersSpace = returnClassName.lastIndexOf(" ");
+        String modifiers = returnClassName.substring(0, indexOfEndOfModifiersSpace);
+        returnClassName = returnClassName.substring(indexOfEndOfModifiersSpace + 1, returnClassName.length());
         StringBuilder signature = new StringBuilder();
         signature.append(joinPoint.getSignature().getDeclaringTypeName());
         signature.append(".");
         signature.append(joinPoint.getSignature().getName());
-        signature.append("(");
+        signature.append("(").append("[");
         Object[] args = joinPoint.getArgs();
         if (args.length != 0) {
             int i = 0;
             while (true) {
+                signature.append("\"").append(argumentClassesName[i]).append("\":");
                 if (args[i] instanceof String) {
-                    signature.append("\"").append(args[i]).append("\" ");
+                    String argument = (String) args[i];
+                    signature.append("\"").append(argument.replace("\n", "\\n")).append("\"");
                 } else {
                     JSONObject jsonobject = new JSONObject(args[i]);
                     signature.append(jsonobject);
@@ -45,15 +65,20 @@ public class Dumpler {
                 signature.append(", ");
             }
         }
-        signature.append(")");
+        signature.append("]").append(")");
         Object proceed = joinPoint.proceed();
         if (proceed instanceof String) {
-            signature.insert(0, "\"" + proceed + "\" ");
+            String proceedCast = (String) proceed;
+            signature.insert(0, "\"" + proceedCast.replace("\n", "\\n") + "\" ");
         } else {
             JSONObject jsonobject = new JSONObject(proceed);
             signature.insert(0, jsonobject + " ");
         }
-        System.out.println(signature);
+        signature.insert(0, "\"" + returnClassName + "\":");
+        signature.insert(0, modifiers + " ");
+        signature.append("\n");
+        Files.write(Paths.get("./trace"), signature.toString().getBytes(), StandardOpenOption.APPEND);
+        System.out.print(signature);
         return proceed;
     }
 }