diff --git a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoader.java b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoader.java index cb7cb2b..d8f4eef 100644 --- a/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoader.java +++ b/src/main/java/edu/lu/uni/serval/FixPatternParser/violations/MultiThreadTreeLoader.java @@ -9,6 +9,8 @@ import com.github.gumtreediff.matchers.Matchers; import com.github.gumtreediff.tree.ITree; import edu.lu.uni.serval.MultipleThreadsParser.MessageFile; import edu.lu.uni.serval.MultipleThreadsParser.WorkMessage; +import edu.lu.uni.serval.utils.FileHelper; +import javafx.util.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,7 +42,37 @@ public class MultiThreadTreeLoader { } -// String inputPath = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutput2/"; + + calculatePairs(inputPath,outputPath); + processMessages(outputPath ); + + +// List loaded = null; +// try { +// FileInputStream fi = new FileInputStream(new File(outputPath + "messageFile")); +// ObjectInputStream oi = new ObjectInputStream(fi); +// loaded = (List) oi.readObject(); +// oi.close(); +// fi.close(); +// +// +// } catch (FileNotFoundException e) { +// System.out.println("File not found"); +// } catch (IOException e) { +// System.out.println("Error initializing stream"); +// } catch (ClassNotFoundException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// +// +// log.info(String.valueOf(msgFiles.size())); +// log.info(String.valueOf(loaded.size())); +// msgFiles.parallelStream() +// .forEach(m -> coreLoop(m,outputPath)); + } + + public static void calculatePairs(String inputPath,String outputPath){ File folder = new File(inputPath); File[] listOfFiles = folder.listFiles(); Stream stream = Arrays.stream(listOfFiles); @@ -60,28 +92,27 @@ public class MultiThreadTreeLoader { } System.out.println("a"); // compareAll(fileToCompare); - final List msgFiles = readMessageFiles(fileToCompare); + readMessageFiles(fileToCompare,outputPath); + } - FileOutputStream f = null; + public static void processMessages(String outputPath){ + File folder = new File(outputPath+ "dumps/"); + File[] listOfFiles = folder.listFiles(); + Stream stream = Arrays.stream(listOfFiles); + List pjs = stream + .filter(x -> !x.getName().startsWith(".")) + .collect(Collectors.toList()); + FileHelper.createDirectory(outputPath + "comparison/"); + pjs.parallelStream() + .forEach(m -> coreLoop(m,outputPath)); + } + + public static ITree getSimpliedTree(String fn) { + ITree tree = null; try { - - - f = new FileOutputStream(new File(outputPath + "messageFile")); - ObjectOutputStream o = new ObjectOutputStream(f); - o.writeObject(msgFiles); - - o.close(); - f.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - List loaded = null; - try { - FileInputStream fi = new FileInputStream(new File(outputPath + "messageFile")); + FileInputStream fi = new FileInputStream(new File(fn)); ObjectInputStream oi = new ObjectInputStream(fi); - loaded = (List) oi.readObject(); + tree = (ITree) oi.readObject(); oi.close(); fi.close(); @@ -95,72 +126,110 @@ public class MultiThreadTreeLoader { e.printStackTrace(); } + tree.setLabel(""); + tree.setParent(null); + List descendants = tree.getDescendants(); + for (ITree descendant : descendants) { + descendant.setLabel(""); + } + + return tree; - log.info(String.valueOf(msgFiles.size())); - log.info(String.valueOf(loaded.size())); -// msgFiles.parallelStream() -// .forEach(m -> m.dosomething())); } -// private static coreLoop(){ -// try { -// BufferedWriter writer = new BufferedWriter(new FileWriter("output2.txt", true)); -// ITree oldTree = getSimpliedTree(treesFileNames.get(i)); -// -// ITree newTree = getSimpliedTree(treesFileNames.get(j)); -// -// Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree); -// m.match(); -// -// ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings()); -// ag.generate(); -// List actions = ag.getActions(); -// writer.write(String.valueOf(i)); -// writer.write("\t"); -// writer.write(String.valueOf(j)); -// writer.write("\t"); -// -// writer.write(String.format("%1.2f", m.chawatheSimilarity(oldTree, newTree))); -// writer.write("\t"); -// writer.write(String.format("%1.2f", m.diceSimilarity(oldTree, newTree))); -// writer.write("\t"); -// writer.write(String.format("%1.2f", m.jaccardSimilarity(oldTree, newTree))); -// writer.write("\t"); -// writer.write(String.valueOf(actions.size())); -// writer.write("\t"); -// writer.write(treesFileNames.get(i)); -// writer.write("\t"); -// writer.write(treesFileNames.get(j)); -// writer.write("\n"); -// -// writer.close(); -// } catch (FileNotFoundException e) { -// System.out.println("File not found"); -// } catch (IOException e) { -// System.out.println("Error initializing stream"); -// -// } -// } + private static void coreLoop(File mes,String outputPath){ + try { + FileInputStream fi = new FileInputStream(mes); + ObjectInputStream oi = new ObjectInputStream(fi); + Message loaded = (Message) oi.readObject(); + oi.close(); + fi.close(); + Pair first = loaded.first; + Pair second = loaded.second; + int i = first.getKey(); + int j = second.getKey(); + String firstValue = first.getValue(); + String secondValue = second.getValue(); - private static List readMessageFiles(List folders) { + BufferedWriter writer = new BufferedWriter(new FileWriter(outputPath +"comparison/" + "output_"+String.valueOf(i)+"_"+String.valueOf(j)+".txt", true)); + ITree oldTree = getSimpliedTree(firstValue); + + ITree newTree = getSimpliedTree(secondValue); + + Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree); + m.match(); + + ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings()); + ag.generate(); + List actions = ag.getActions(); + writer.write(String.valueOf(i)); + writer.write("\t"); + writer.write(String.valueOf(j)); + writer.write("\t"); + + writer.write(String.format("%1.2f", m.chawatheSimilarity(oldTree, newTree))); + writer.write("\t"); + writer.write(String.format("%1.2f", m.diceSimilarity(oldTree, newTree))); + writer.write("\t"); + writer.write(String.format("%1.2f", m.jaccardSimilarity(oldTree, newTree))); + writer.write("\t"); + writer.write(String.valueOf(actions.size())); + writer.write("\t"); + writer.write(firstValue); + writer.write("\t"); + writer.write(secondValue); + writer.write("\n"); + + writer.close(); + } catch (FileNotFoundException e) { + System.out.println("File not found"); + } catch (IOException e) { + System.out.println("Error initializing stream"); + + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private static void readMessageFiles(List folders,String outputPath) { List treesFileNames = new ArrayList<>(); - List msgFiles = new ArrayList<>(); + for (File target : folders) { treesFileNames.add(target.toString()); } + FileHelper.createDirectory(outputPath + "dumps/"); log.info("Calculating pairs"); +// treesFileNames = treesFileNames.subList(0,10); for (int i = 0; i < treesFileNames.size(); i++) { for (int j = i + 1; j < treesFileNames.size(); j++) { Message msgFile = new Message(i, treesFileNames.get(i), j, treesFileNames.get(j)); - msgFiles.add(msgFile); +// msgFiles.add(msgFile); + + FileOutputStream f = null; + try { + + + f = new FileOutputStream(new File(outputPath + "dumps/" + "messageFile_"+String.valueOf(i)+"_"+String.valueOf(j))); + ObjectOutputStream o = new ObjectOutputStream(f); + o.writeObject(msgFile); + + o.close(); + f.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } } } - return msgFiles; + log.info("Done pairs"); +// return msgFiles; }