package EDU.neu.ccs.demeter.tools.apstudio.graphedit; import java.awt.*; import java.io.*; import java.util.*; import EDU.neu.ccs.demeter.*; import EDU.neu.ccs.demeter.common.tg.*; import EDU.neu.ccs.demeter.*; class ConstVisitor extends cdStringVisitor { protected Hashtable vtable; public Hashtable get_vtable() { return vtable; } public void set_vtable(Hashtable new_vtable) { vtable = new_vtable; } protected Hashtable etable; public Hashtable get_etable() { return etable; } public void set_etable(Hashtable new_etable) { etable = new_etable; } ConstVisitor() { super(); } public ConstVisitor(String return_val, Hashtable vtable, Hashtable etable) { super(return_val); set_vtable(vtable); set_etable(etable); } String vname = ""; String parts = ""; String bef = ""; String aft = ""; boolean isrep = false; String srep = ""; String ext = ""; String impl = ""; boolean incoming = true; public void before(UVertex host) { vname = ""; parts = ""; bef = ""; aft = ""; isrep = false; srep = ""; ext = "" ; impl = "" ; incoming = true; //System.out.println("in *************Visitor:: before UVert"); } public void before(UVertexName host) { //System.out.println("in visitor:UconstVisitor: for - " + host.get_name()); vname = host.get_name().toString(); } public void before(UConstVertex host) { //System.out.println("in *************Visitor:: before UConstVert"); bef = host.get_beforeSyntax(); aft = host.get_afterSyntax(); } public void before(IEdge_List host) { incoming = true; } public void before(OEdge_List host) { incoming = false; } public void before(UID host) { UEdge ue = (UEdge)etable.get(host); String pname = ""; String tempresult = ""; if(incoming) //extends implements { UVertex uv = (UVertex)vtable.get(ue.get_fromVertex()); pname = uv.get_vertexname().get_name().toString(); if(ue instanceof UExtendEdge) { ext = pname; // no multiple inheritance } else if(ue instanceof UImplEdge) { impl = (impl !=null ? impl : " ") + pname; } } else // parts repetition { boolean opt = false; UVertex uv = (UVertex)vtable.get(ue.get_toVertex()); pname = uv.get_vertexname().get_name().toString(); Integer lower = ((UConstEdge)ue).get_card().get_lower().get_l(); String ebef = ((UConstEdge)ue).get_beforeSyntax(); String eaft = ((UConstEdge)ue).get_afterSyntax(); String ename = ""; if(((UConstEdge)ue).get_edgename()!=null) ename = ((UConstEdge)ue).get_edgename().get_name().toString(); if(lower.equals(new Integer(0))) opt = true; else opt = false; String upper = ""; if(((UConstEdge)ue).get_card().get_upper() != null) { upper = ((UConstEdge)ue).get_card().get_upper().get_u().toString(); if(upper.equals("*")) isrep = true; } tempresult = pname ; if(isrep) { tempresult = (ebef!=null ? ("\""+ebef+"\"") : " ") + tempresult ; tempresult += (eaft!=null ? ("\""+eaft+"\"") : " ") ; tempresult = "{" + tempresult + "}" ; if(opt == false) tempresult = pname + tempresult ; srep = tempresult; } else { tempresult = (ename!=null?("<"+ename+">"):" ") + tempresult; tempresult = (ebef!=null ? ("\""+ebef+"\"") : " ") + tempresult ; tempresult += (eaft!=null ? ("\""+eaft+"\"") : " ") ; if(opt == true) tempresult = "[" + tempresult + "] "; parts = (parts != null ? parts : " ") + tempresult; } } } public void after(UVertex host) { if(isrep) { return_val = vname + " ~ " + (bef!=null?("\""+bef+"\" "):" ") + srep + (aft!=null? (" \""+aft+"\""):" ") + ".\n"; } else { return_val = vname + " = " + (bef!=null?("\""+bef+"\""):" ")+ parts; if(ext != "") return_val += " *extends* " + ext ; if(impl != "") return_val += " *implments* " + impl ; return_val += (aft!=null? ("\""+aft+"\""):" ") + ".\n"; } } void universal_trv0_bef(UniversalVisitor _v_) { super.universal_trv0_bef(_v_); } void universal_trv0_aft(UniversalVisitor _v_) { super.universal_trv0_aft(_v_); } void universal_trv0(UniversalVisitor _v_) { universal_trv0_bef(_v_); super.universal_trv0(_v_); universal_trv0_aft(_v_); } }