13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypackage com.mot.dm.tool;
23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.io.*;
43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.*;
53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypublic class Diff {
73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  public static boolean VERBOSE = false;
83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private final String NULL = "NULL";
93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private File tmpDir = null;
103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private String path1, path2;
113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private ArrayList presentInFirstOnly = new ArrayList();
133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private ArrayList presentInSecondOnly = new ArrayList();
143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private HashMap differentValues = new HashMap();
153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  public void getDiff(String path1, String path2) throws Exception {
173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    this.path1 = path1;
183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    this.path2 = path2;
193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    tmpDir = new File("tmp_" + Calendar.getInstance().getTime().getTime());
203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    try {
213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      tmpDir.mkdirs();
223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      File f;
243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      f = new File(path1);
253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (!f.exists()) {
263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        throw new Exception("File doesn't exists: " + path1);
273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      f = new File(path2);
293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (!f.exists()) {
303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        throw new Exception("File doesn't exists: " + path2);
313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      String dmtsPath1 = prepareFile(path1, 1);
343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      String dmtsPath2 = prepareFile(path2, 2);
353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      diff(dmtsPath1, dmtsPath2);
373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    finally {
393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (tmpDir.exists()) {
403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Util.deleteDir(tmpDir);
413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private String prepareFile(String path, int num) throws Exception {
473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    String tmpPath = tmpDir.getAbsolutePath() + "/" + num;
483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    File f = new File(tmpPath);
493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!f.exists()) {
503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      f.mkdirs();
513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    f = new File(path);
533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (f.isDirectory()) {
543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      String dmtsName = f.getName() + ".dmts";
553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      DMTS dmts = new DMTS();
563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      dmts.dir2dmtsDir(path, tmpPath);
573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return tmpPath + "/" + dmtsName;
583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else if (path.toUpperCase().endsWith(".DMTS")) {
603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return path;
613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else if (path.toUpperCase().endsWith(".ZIP")) {
633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      Zip z = new Zip();
643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      z.unzip(path, tmpPath);
653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      DMTS dmts = new DMTS();
663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      dmts.dir2dmtsDir(tmpPath + "/Dmt", tmpPath);
673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return tmpPath + "/Dmt.dmts";
683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    else {
703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      throw new Exception("Diff doesn't support file format: " + path);
713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private void diff(String dmtsPath1, String dmtsPath2) throws Exception {
753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    HashMap map1 = dmtsToMap(dmtsPath1);
763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    HashMap map2 = dmtsToMap(dmtsPath2);
773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    HashMap parms1, parms2;
793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Object[] keys = map1.keySet().toArray();
813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    for (int i = 0; i < keys.length; i++) {
833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      String nodePath = (String) keys[i];
843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (!map2.containsKey(nodePath)) {
863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        presentInFirstOnly.add(nodePath);
873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        continue;
883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      parms1 = (HashMap) map1.get(nodePath);
903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      parms2 = (HashMap) map2.get(nodePath);
913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      ArrayList arr = compareParms(parms1, parms2);
933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (arr.size() > 0) {
943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        differentValues.put(nodePath, arr);
953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      map2.remove(nodePath);
973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    keys = map2.keySet().toArray();
1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    for (int i = 0; i < keys.length; i++) {
1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      presentInSecondOnly.add(keys[i]);
1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    displayDiff();
1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private HashMap dmtsToMap(String dmtsPath) throws Exception {
1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    HashMap map = new HashMap();
1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    HashMap hashParms = new HashMap();
1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    FileReader fr = new FileReader(dmtsPath);
1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    BufferedReader br = new BufferedReader(fr);
1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    String line;
1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    String currPath = null;
1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    String err;
1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    try
1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    {
1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      while ( (line = br.readLine()) != null) {
1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (line.startsWith("#")) {
1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          continue;
1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        if (line.startsWith("[")) {
1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if (currPath != null && !hashParms.isEmpty()) {
1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            map.put(currPath, hashParms);
1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          currPath = line;
1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          hashParms = new HashMap();
1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        else {
1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          if (line.trim().length() > 0) {
1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            err = addParmToHash(hashParms, line);
1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            if (err != null) {
1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby              throw new Exception(err + "\n Path: :" + currPath);
1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby            }
1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          }
1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }finally{
1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      br.close();
1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      fr.close();
1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return map;
1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private ArrayList compareParms(HashMap parms1, HashMap parms2) throws
1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      Exception {
1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    ArrayList arr = new ArrayList();
1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    String v1, v2;
1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    Object[] keys = parms1.keySet().toArray();
1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    for (int i = 0; i < keys.length; i++) {
1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      String name = (String) keys[i];
1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (!parms2.containsKey(name)) {
1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Parm p = new Parm();
1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p.name = name;
1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p.value1 = (String) parms1.get(name);
1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        arr.add(p);
1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        continue;
1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      v1 = (String) parms1.get(name);
1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      v2 = (String) parms2.get(name);
1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (v1.equals(v2)) {
1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        parms2.remove(name);
1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      else {
1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Parm p = new Parm();
1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p.name = name;
1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p.value1 = (String) parms1.get(name);
1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p.value2 = (String) parms2.get(name);
1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        arr.add(p);
1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        parms2.remove(name);
1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    // check rest of second parameters
1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!parms2.isEmpty()) {
1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      keys = parms2.keySet().toArray();
1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      for (int i = 0; i < keys.length; i++) {
1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        String name = (String) keys[i];
1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Parm p = new Parm();
1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p.name = name;
1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        p.value2 = (String) parms2.get(name);
1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        arr.add(p);
1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return arr;
1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private String addParmToHash(HashMap hashParms, String line) throws Exception {
1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    String name = "";
1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    String value = "";
1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    int i = line.indexOf(":");
1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (i <= 0) {
1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      name = line;
1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      value = NULL;
1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      //return "Error: attribute doesn't contain \":\".";
1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }else{
1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      name = line.substring(0, i);
1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      value = line.substring(i + 1, line.length());
1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*  if (name.length() == 0) {
1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return "Error: attribute name in a parm.txt cannot have 0 length.";
2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby   else if (value.length() == 0) {
2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      return "Error: value cannot have 0 length.";
2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby*/
2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    hashParms.put(name, value);
2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    return null;
2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  private void displayDiff() {
2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    boolean diffFound = false;
2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    System.out.println("\n*********************************** Diff Result ***********************************\n");
2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (presentInFirstOnly.size() > 0) {
2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      diffFound = true;
2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("=================== Nodes are presenting in the FIST file only ===================");
2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("== ( " + path1 + " ) ==");
2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      for (int i = 0; i < presentInFirstOnly.size(); i++) {
2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.out.println("   " + (String) presentInFirstOnly.get(i));
2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("====================================== END ========================================\n");
2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (presentInSecondOnly.size() > 0) {
2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      diffFound = true;
2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("=================== Nodes are presenting in the SECOND file only ===================");
2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("== ( " + path2 + " ) ==");
2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      for (int i = 0; i < presentInSecondOnly.size(); i++) {
2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.out.println("   " + (String) presentInSecondOnly.get(i));
2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("====================================== END ========================================\n");
2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!differentValues.isEmpty()) {
2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      diffFound = true;
2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      String diffPath;
2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("============ The following nodes has different values for attribute(s) ============");
2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("== f1 : " + path1);
2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("== f2 : " + path2);
2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("===================================================================================");
2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      Object[] keys = differentValues.keySet().toArray();
2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      for (int i = 0; i < keys.length; i++) {
2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        StringBuffer sb1 = new StringBuffer();
2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        StringBuffer sb2 = new StringBuffer();
2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        Parm p;
2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        diffPath = (String) keys[i];
2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.out.println("\n--> " + diffPath);
2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        ArrayList arr = (ArrayList) differentValues.get(diffPath);
2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        for (int j = 0; j < arr.size(); j++) {
2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          p = (Parm) arr.get(j);
2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          sb1.append("    f1 -> " + p.name + ":" + p.value1 + "\n");
2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby          sb2.append("    f2 -> " + p.name + ":" + p.value2 + "\n");
2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        }
2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.out.print(sb1.toString());
2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.out.println("--------------------");
2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.out.print(sb2.toString());
2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("====================================== END ========================================\n");
2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    if (!diffFound) {
2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("============================= The files are identical =============================\n");
2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      System.out.println("====================================== END ========================================\n");
2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  public static void main(String[] args) {
2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    try {
2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      if (args.length != 2) {
2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.out.println("Wrong arguments");
2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        DMTSTool.usage(true);
2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby        System.exit( -1);
2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      }
2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      Util.VERBOSE = true;
2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      Diff d = new Diff();
2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      d.getDiff(args[0], args[1]);
2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      //d.getDiff("Dmt.dmts", "Dmt.dmts");
2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      //d.getDiff("I:/tmp/Dmt", "I:/tmp/Dmt.zip");
2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    catch (Exception e) {
2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby      e.printStackTrace();
2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    }
2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  class Parm {
2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public String name = "";
2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public String value1 = "";
2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby    public String value2 = "";
2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby  }
2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby
2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}
292