trace

implemented diff tool

2/12/2019 2:54:40 PM

Details

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index 0b71e51..32496bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,7 +47,7 @@
                         <manifest>
                             <addClasspath>true</addClasspath>
                             <classpathPrefix>lib</classpathPrefix> 
-                            <mainClass>br.ufrgs.inf.prosoft.trace.tools.HashFile</mainClass>
+                            <mainClass>br.ufrgs.inf.prosoft.trace.tools.Main</mainClass>
                         </manifest>
                         <manifestEntries>
                             <Class-Path>lib/</Class-Path>
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/Object.java b/src/main/java/br/ufrgs/inf/prosoft/trace/Object.java
index 3143cd2..362d699 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/Object.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/Object.java
@@ -27,4 +27,9 @@ public abstract class Object {
         return d;
     }
 
+    @Override
+    public String toString() {
+        return String.valueOf(this.d);
+    }
+
 }
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/tools/DiffTraces.java b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/DiffTraces.java
new file mode 100644
index 0000000..ae14eac
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/DiffTraces.java
@@ -0,0 +1,78 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package br.ufrgs.inf.prosoft.trace.tools;
+
+import br.ufrgs.inf.prosoft.trace.Trace;
+import br.ufrgs.inf.prosoft.trace.TraceConcrete;
+import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Stream;
+
+/**
+ *
+ * @author romulo
+ */
+public class DiffTraces {
+
+    private static final Logger logger = Logger.getLogger(DiffTraces.class.getName());
+
+    public static void diff(String firstPath, String secondPath) {
+        try {
+            Stream<String> linesFirst = Files.lines(Paths.get(firstPath));
+            Iterator<String> iteratorFirst = linesFirst.iterator();
+            Stream<String> linesSecond = Files.lines(Paths.get(secondPath));
+            Iterator<String> iteratorSecond = linesSecond.iterator();
+            int index = 0;
+            Gson gson = new Gson();
+            while (true) {
+                String lineFirst = iteratorFirst.next();
+                String lineSecond = iteratorSecond.next();
+                if (lineFirst == null || lineSecond == null) {
+                    break;
+                }
+                try {
+                    Trace traceFirst = gson.fromJson(lineFirst, TraceConcrete.class);
+                    Trace traceSecond = gson.fromJson(lineSecond, TraceConcrete.class);
+                    if (!traceFirst.getName().equals(traceSecond.getName())) {
+                        System.out.println(index + " < " + traceFirst.getName());
+                        System.out.println(index + " > " + traceSecond.getName());
+                        continue;
+                    }
+                    if (!traceFirst.getParameters().toString().equals(traceSecond.getParameters().toString())) {
+                        System.out.println(index + " < " + traceFirst.getParameters().toString());
+                        System.out.println(index + " > " + traceSecond.getParameters().toString());
+                        continue;
+                    }
+                    if (!traceFirst.getReturn().toString().equals(traceSecond.getReturn().toString())) {
+                        System.out.println(index + " < " + traceFirst.getReturn().toString());
+                        System.out.println(index + " > " + traceSecond.getReturn().toString());
+                        continue;
+                    }
+                    System.out.print(".");
+                    System.out.flush();
+                    if (index != 0 && index % 100 == 0) {
+                        System.out.println();
+                    }
+                } catch (JsonSyntaxException e) {
+                    if (lineFirst.length() > 2000) {
+                        lineFirst = lineFirst.substring(0, 2000);
+                    }
+                    logger.log(Level.INFO, "Malformed Trace {0}: {1}", new java.lang.Object[]{index, lineFirst});
+                } finally {
+                    index++;
+                }
+            }
+        } catch (IOException ex) {
+            logger.log(Level.SEVERE, null, ex);
+        }
+    }
+}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/tools/HashFile.java b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/HashFile.java
index 4d14b69..4245db3 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/tools/HashFile.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/HashFile.java
@@ -3,6 +3,7 @@
  * To change this template file, choose Tools | Templates
  * and open the template in the editor.
  */
+
 package br.ufrgs.inf.prosoft.trace.tools;
 
 import br.ufrgs.inf.prosoft.trace.Parameter;
@@ -32,17 +33,7 @@ public class HashFile {
 
     private static final Logger logger = Logger.getLogger(HashFile.class.getName());
 
-    public static void main(String[] args) {
-        System.setProperty("java.util.logging.SimpleFormatter.format", "[%1$tF %1$tT+%1$tL] [%4$-7s] [Trace] %5$s %n");
-        String inputPath = null;
-        String outputPath = null;
-        if (args.length < 2) {
-            System.err.println("<InputTracePath> <OutputTracePath>");
-            System.exit(1);
-        } else {
-            inputPath = args[0];
-            outputPath = args[1];
-        }
+    public static void convert(String inputPath, String outputPath) {
         try {
             logger.log(Level.INFO, "Converting {0} traces", TraceReader.getLineCount(inputPath));
             Stream<String> lines = Files.lines(Paths.get(inputPath));
@@ -95,7 +86,6 @@ public class HashFile {
                     }
                 }
             });
-            System.out.println();
         } catch (IOException ex) {
             logger.log(Level.SEVERE, null, ex);
         }
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Main.java b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Main.java
new file mode 100644
index 0000000..25d84f3
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Main.java
@@ -0,0 +1,38 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package br.ufrgs.inf.prosoft.trace.tools;
+
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author romulo
+ */
+public class Main {
+
+    private static final Logger logger = Logger.getLogger(Main.class.getName());
+
+    public static void main(String[] args) {
+        System.setProperty("java.util.logging.SimpleFormatter.format", "[%1$tF %1$tT+%1$tL] [%4$-7s] [Trace] %5$s %n");
+        String tool = null;
+        String firstPath = null;
+        String secondPath = null;
+        if (args.length < 2) {
+            System.err.println("<diff> <FirstTracePath> <SecondTracePath>");
+            System.err.println("<hash> <InputTracePath> <OutputTracePath>");
+            System.exit(1);
+        } else {
+            tool = args[0];
+            firstPath = args[1];
+            secondPath = args[2];
+        }
+        if (tool.equals("diff")) {
+            DiffTraces.diff(firstPath, secondPath);
+        } else {
+            HashFile.convert(firstPath, secondPath);
+        }
+    }
+}