trace

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/reader/Mode.java b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/Mode.java
new file mode 100644
index 0000000..74a9c3e
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/Mode.java
@@ -0,0 +1,14 @@
+/*
+ * 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.reader;
+
+/**
+ *
+ * @author romulo
+ */
+public enum Mode {
+    COMPLETE, PARTIAL, HASHED;
+}
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
new file mode 100644
index 0000000..4d14b69
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/HashFile.java
@@ -0,0 +1,103 @@
+/*
+ * 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.Parameter;
+import br.ufrgs.inf.prosoft.trace.Return;
+import br.ufrgs.inf.prosoft.trace.Trace;
+import br.ufrgs.inf.prosoft.trace.TraceConcrete;
+import br.ufrgs.inf.prosoft.trace.reader.TraceReader;
+import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.function.Consumer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ *
+ * @author romulo
+ */
+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];
+        }
+        try {
+            logger.log(Level.INFO, "Converting {0} traces", TraceReader.getLineCount(inputPath));
+            Stream<String> lines = Files.lines(Paths.get(inputPath));
+            FileWriter fileWriter = new FileWriter(outputPath, true);
+            lines.forEach(new Consumer<String>() {
+                private int index = 0;
+                private MessageDigest messageDigest;
+                private final Gson gson;
+
+                {
+                    this.gson = new Gson();
+                    try {
+                        this.messageDigest = MessageDigest.getInstance("sha-512");
+                    } catch (NoSuchAlgorithmException ex) {
+                    }
+                }
+
+                private String digest(java.lang.Object object) {
+                    return String.valueOf(messageDigest.digest(String.valueOf(object).getBytes()));
+                }
+
+                @Override
+                public void accept(String line) {
+                    try {
+                        Trace trace = gson.fromJson(line, TraceConcrete.class);
+                        trace = new TraceConcrete(trace.getInstance(), trace.getModifiers(),
+                                new Return(trace.getReturn().getType(), digest(trace.getReturn().getData())),
+                                trace.getName(),
+                                trace.getParameters().stream()
+                                        .map(parameter -> new Parameter(parameter.getType(), digest(parameter.getData())))
+                                        .collect(Collectors.toList()),
+                                trace.getStartTime(), trace.getEndTime(), trace.getUserSession());
+                        String toJson = gson.toJson(trace);
+                        fileWriter.write(toJson);
+
+                        System.out.print(".");
+                        System.out.flush();
+                        if (index != 0 && index % 100 == 0) {
+                            System.out.println();
+                        }
+                    } catch (JsonSyntaxException e) {
+                        if (line.length() > 2000) {
+                            line = line.substring(0, 2000);
+                        }
+                        logger.log(Level.INFO, "Malformed Trace {0}: {1}", new java.lang.Object[]{index, line});
+                    } catch (IOException ex) {
+                        Logger.getLogger(HashFile.class.getName()).log(Level.SEVERE, null, ex);
+                    } finally {
+                        index++;
+                    }
+                }
+            });
+            System.out.println();
+        } catch (IOException ex) {
+            logger.log(Level.SEVERE, null, ex);
+        }
+    }
+}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java
index b86072d..6c7fbc3 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java
@@ -5,6 +5,7 @@
  */
 package br.ufrgs.inf.prosoft.trace;
 
+import br.ufrgs.inf.prosoft.trace.reader.Traces;
 import java.util.List;
 
 /**