package jdepend.client.report.history; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import org.apache.commons.jrcs.diff.Diff; import org.apache.commons.jrcs.diff.DifferentiationFailedException; import org.apache.commons.jrcs.diff.Revision; import org.jmeld.JMeldException; import org.jmeld.ui.BufferDiffPanel; import org.jmeld.ui.JMeldPanel; import org.jmeld.util.node.JMDiffNode; import org.jmeld.util.node.JMDiffNodeFactory; public class ReportHistoryComparor { public static String compare(String group, String v1, String v2) { String file1 = (new ReportHistory(group)).getFilePath(v1); String file2 = (new ReportHistory(group)).getFilePath(v2); try { Object[] orig = loadFile(file1); Object[] rev = loadFile(file2); Diff df = new Diff(orig); Revision r = df.diff(rev); return r.toString(); } catch (IOException e) { e.printStackTrace(); } catch (DifferentiationFailedException e) { e.printStackTrace(); } return null; } public static JComponent comparePanel(String group, String v1, String v2) { File leftFile = new File((new ReportHistory(group)).getFilePath(v1)); File rightFile = new File((new ReportHistory(group)).getFilePath(v2)); JMDiffNode diffNode = JMDiffNodeFactory.create(leftFile.getName(), leftFile, rightFile.getName(), rightFile); try { diffNode.diff(); } catch (JMeldException e) { e.printStackTrace(); } BufferDiffPanel panel = new BufferDiffPanel(new JMeldPanel()); panel.setDiffNode(diffNode); panel.doGoToFirst(); return panel; } static final String[] loadFile(String name) throws IOException { BufferedReader data = new BufferedReader(new FileReader(name)); List lines = new ArrayList(); String s; while ((s = data.readLine()) != null) { lines.add(s); } return (String[]) lines.toArray(new String[lines.size()]); } }