content: /**
   * Manage rd5 diff-file creation
   *
   * @author ab
   */
  package btools.mapaccess;
  
  import java.io.File;
  
  final public class Rd5DiffValidator {
    public static void main(String[] args) throws Exception {
      validateDiffs(new File(args[0]), new File(args[1]));
    }
  
    /**
     * Validate diffs for all DF5 files
     */
    public static void validateDiffs(File oldDir, File newDir) throws Exception {
      File oldDiffDir = new File(oldDir, "diff");
      File newDiffDir = new File(newDir, "diff");
  
      File[] filesNew = newDir.listFiles();
  
      for (File fn : filesNew) {
        String name = fn.getName();
        if (!name.endsWith(".rd5")) {
          continue;
        }
        if (fn.length() < 1024 * 1024) {
          continue; // expecting no diff for small files
        }
        String basename = name.substring(0, name.length() - 4);
        File fo = new File(oldDir, name);
        if (!fo.isFile()) {
          continue;
        }
  
        // calculate MD5 of old file
        String md5 = Rd5DiffManager.getMD5(fo);
  
        String md5New = Rd5DiffManager.getMD5(fn);
  
        System.out.println("name=" + name + " md5=" + md5);
  
        File specificNewDiffs = new File(newDiffDir, basename);
  
        String diffFileName = md5 + ".df5";
        File diffFile = new File(specificNewDiffs, diffFileName);
  
        File fcmp = new File(oldDir, name + "_tmp");
  
        // merge old file and diff
        Rd5DiffTool.recoverFromDelta(fo, diffFile, fcmp, new Rd5DiffTool());
        String md5Cmp = Rd5DiffManager.getMD5(fcmp);
  
        if (!md5Cmp.equals(md5New)) {
          throw new RuntimeException("**************** md5 mismatch!! *****************");
        }
      }
    }
  
  }
  