Any_vertex { void display() to * (DisplayVisitor); void print() to * (PrintVisitor); } Any_vertex_List { void display() to * (DisplayVisitor); void print() to * (PrintVisitor); } Adjacency { void print() to * (PrintVisitor); } FlattenVisitor { {{ private Neighbors trueId; void before (Adjacency host) { trueId = host.get_ns(); if (trueId instanceof Construct_ns) { // System.out.println("This is a Construct_ns object"); Set cycle_set = new HashSet(); Adjacency temp_parent = host.get_myparent(); while (temp_parent != null) { // temp_parent.print(); if (temp_parent == host || cycle_set.contains(temp_parent)) break; // System.out.println(temp_parent.get_source().get_vertex_name()); cycle_set.add(temp_parent); Any_vertex_List cp_list = temp_parent.get_common_parts(); Enumeration listPointer = cp_list.elements(); Any_vertex_List avl = host.get_construct_part(); while (listPointer.hasMoreElements()) { // avl.print(); // cp_list.print(); avl.addElement((Any_vertex) listPointer.nextElement()); } temp_parent = temp_parent.get_myparent(); } } /* if (trueId instanceof Alternat_ns) { System.out.println("This is an Alternat_ns object"); } */ } }} } RemoveCommonVisitor { before Adjacency {{ host.remove_common_parts(); }} } Adjacency { Any_vertex_List get_common_parts() to Alternat_ns { {{ Any_vertex_List common_parts; }} init {{ common_parts = new Any_vertex_List(); }} before Alternat_ns {{ common_parts = host.get_construct_ns(); }} after Adjacency {{ return_val = common_parts; }} } void remove_common_parts() to Alternat_ns { before Alternat_ns {{ host.get_construct_ns().set_first(null); }} } Any_vertex_List get_construct_part() to Any_vertex_List { before Any_vertex_List {{ return_val = host; }} } }