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 AltVisitor 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; } AltVisitor() { super(); } public AltVisitor(String return_val, Hashtable vtable, Hashtable etable) { super(return_val); set_vtable(vtable); set_etable(etable); } String vname = ""; String alts = ""; String parts = ""; String bef = ""; String aft = ""; boolean isrep = false; String srep = ""; String ext = ""; String impl = ""; boolean incoming = true; public void before(UVertex host) { vname = ""; alts = null; parts = ""; bef = ""; aft = ""; isrep = false; srep = ""; ext = "" ; impl = "" ; incoming = true; } public void before(UVertexName host) { vname = host.get_name().toString(); } 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 { if (ue instanceof UConstEdge) { 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; tempresult = pname ; tempresult = (ename!=null?("<"+ename+">"):" ") + tempresult; tempresult = (ebef!=null ? ("\""+ebef+"\"") : " ") + tempresult ; tempresult += (eaft!=null ? ("\""+eaft+"\"") : " ") ; if(opt == true) tempresult = "[" + tempresult + "] "; parts = (parts != null ? parts : " ") + tempresult; } else if (ue instanceof UAltEdge )//instance of UAltEdge { UVertex uv = (UVertex)vtable.get(ue.get_toVertex()); pname = uv.get_vertexname().get_name().toString(); alts = (alts != null ? (alts + " | ") : " ") + pname ; } } } public void after(UVertex host) { return_val = vname + " : " + (alts!=null ? alts : ""); return_val += (parts!=null? (" *common* " + parts) : ""); if(ext != "") return_val += " *extends* " + ext ; if(impl != "") return_val += " *implments* " + impl ; return_val += ".\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_); } }