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