Schcmp{ traversal printClass(DisplayVisitor) { to *; } traversal toClassDef(ClistVisitor) {to ClassDef;} traversal toClassnames(ClassNameVisitor) {to Classname;} traversal toall(IsDiffVisitor) {to *;} void print_temp() (@ PrintWriter w = new PrintWriter(System.out, true); this.printClass(new DisplayVisitor(w)); w.flush(); @) void compare(Schcmp b) (@ ClistVisitor cVA = new ClistVisitor(); ClistVisitor cVB = new ClistVisitor(); this.toClassDef(cVA); b.toClassDef(cVB); ClassDef_List classlistA = cVA.get_clist(); ClassDef_List classlistB = cVB.get_clist(); System.out.println("\n"); ClassNameVisitor cNVA = new ClassNameVisitor(classlistB,false,true); System.out.println("The classes unique to SchemaA: "); this.toClassnames(cNVA); if(cNVA.get_same()) System.out.println("NONE"); ClassNameVisitor cNVB = new ClassNameVisitor(classlistA,false,true); System.out.println("\nThe classes unique to SchemaB: "); b.toClassnames(cNVB); if(cNVB.get_same()) System.out.println("NONE"); System.out.println("\nDefinition Differences for SchemaA"); //Class Definition Differences IsDiffVisitor idv=new IsDiffVisitor(classlistB,false,false,false,new ClassDef_List(null)); this.toall(idv); if(idv.get_clistdflag()){ } else System.out.println("NONE"); @) } ClistVisitor{ init (@ clist=new ClassDef_List(null); @) before ClassDef (@ if(clist.isEmpty()) clist.push(host); else clist.addElement(host); System.out.println("The classname is "+ host.get_classname().get_s()); @) } ClassNameVisitor{ init (@ inlist=false; same=true; @) before Classname (@ java.util.Enumeration cl=classlist.elements(); while(cl.hasMoreElements()){ ClassDef classdef= (ClassDef) cl.nextElement(); if(classdef.get_classname().get_s().equals(host.get_s())){ inlist=true; } } if(!inlist){ System.out.println(host.get_s()); same=false; } @) after ClassDef (@ inlist=false; @) } IsDiffVisitor{ init(@ clistdflag = false; dflag = false; inlist = false; ClassDef_List newClist=new ClassDef_List(null); //store diff list @) (@ protected boolean printObjectname = false; protected boolean printClassname = false; protected ClassDef cCD=new ClassDef(); //comparison ClassDef @) before ClassDef (@ java.util.Enumeration en=classlist.elements(); while(en.hasMoreElements()&&(!inlist)){ ClassDef classdef= (ClassDef) en.nextElement(); if(classdef.get_classname().get_s().equals(host.get_classname().get_s())){ inlist=true; cCD=classdef; } } @) before Flags (@ if(inlist){ java.util.Enumeration en=cCD.get_flist().elements(); while(en.hasMoreElements()){ Flags flag= (Flags) en.nextElement(); if(flag.get_s().equals(host.get_s())){ dflag=true; } } if(!dflag){ if(!printClassname){ System.out.println(cCD.get_classname().get_s()); printClassname=true; } if(!printObjectname){ System.out.println(" Flags"); printObjectname=true; } System.out.println(" "+host.get_s()); } } @) after Flags (@ dflag=false; @) after Flags_List(@ printObjectname=false; @) before SuperClasses (@ if(inlist){ java.util.Enumeration en=cCD.get_sclass().elements(); while(en.hasMoreElements()){ SuperClasses superclass= (SuperClasses) en.nextElement(); if(superclass.get_s().equals(host.get_s())){ dflag=true; } } if(!dflag){ if(!printClassname){ System.out.println(cCD.get_classname().get_s()); printClassname=true; } if(!printObjectname){ System.out.println(" SuperClasses"); printObjectname=true; } System.out.println(" "+host.get_s()); } } @) after SuperClasses(@ dflag=false; @) after SuperClasses_List(@ printObjectname=false; @) before Containment (@ if(inlist){ java.util.Enumeration en=cCD.get_clist().elements(); while(en.hasMoreElements()){ Containment c= (Containment) en.nextElement(); if(c.get_s().equals(host.get_s())){ dflag=true; } } if(!dflag){ if(!printClassname){ System.out.println(cCD.get_classname().get_s()); printClassname=true; } if(!printObjectname){ System.out.println(" Containment"); printObjectname=true; } System.out.println(" "+host.get_s()); } } @) after Containment (@ dflag=false; @) after Containment_List (@ printObjectname=false; @) before NamedBy (@ if(inlist){ java.util.Enumeration en=cCD.get_nlist().elements(); while(en.hasMoreElements()){ NamedBy n= (NamedBy) en.nextElement(); if(n.get_s().equals(host.get_s())){ dflag=true; } } if(!dflag){ if(!printClassname){ System.out.println(cCD.get_classname().get_s()); printClassname=true; } if(!printObjectname){ System.out.println(" NamedBy"); printObjectname=true; } System.out.println(" "+host.get_s()); } } @) after NamedBy (@ dflag=false; @) after NamedBy_List (@ printObjectname=false; @) before Mandatory (@ if(inlist){ java.util.Enumeration en=cCD.get_mlist().elements(); while(en.hasMoreElements()){ Mandatory m= (Mandatory) en.nextElement(); if(m.get_s().equals(host.get_s())){ dflag=true; } } if(!dflag){ if(!printClassname){ System.out.println(cCD.get_classname().get_s()); printClassname=true; } if(!printObjectname){ System.out.println(" Mandatory Attributes"); printObjectname=true; } System.out.println(" "+host.get_s()); } } @) after Mandatory (@ dflag=false; @) after Mandatory_List (@ printObjectname=false; @) before Opt (@ if(inlist){ java.util.Enumeration en=cCD.get_olist().elements(); while(en.hasMoreElements()){ Opt o= (Opt) en.nextElement(); if(o.get_s().equals(host.get_s())){ dflag=true; } } if(!dflag){ if(!printClassname){ System.out.println(cCD.get_classname().get_s()); printClassname=true; } if(!printObjectname){ System.out.println(" Optional Attributes"); printObjectname=true; } System.out.println(" "+host.get_s()); } } @) after Opt (@ dflag=false; @) after Opt_List (@ printObjectname=false; @) after ClassDef (@ if(printClassname) clistdflag=true; inlist=false; dflag=false; printObjectname=false; printClassname=false; @) } Main{ (@ public static void main(String[] argv) throws Exception { try { Schcmp schemaA = Schcmp.parse(new FileInputStream(argv[0])); Schcmp schemaB = Schcmp.parse(new FileInputStream(argv[1])); //schemaA.print_temp(); //schemaB.print_temp(); schemaA.compare(schemaB); } catch (ParseError e) { System.err.println("Failed to parse file."); e.printStackTrace(); System.exit(1); } catch (FileNotFoundException e) { System.err.println("Failed to open. "); System.exit(1); } } @) }