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 ReadEdgeVisitor extends UniversalVisitor {
  protected EdgeContainer elements;
  public EdgeContainer get_elements() { return elements; }
  public void set_elements(EdgeContainer new_elements)
    { elements = new_elements; }
  ReadEdgeVisitor() { super(); }
  public ReadEdgeVisitor(EdgeContainer elements) {
    super();
    set_elements(elements);
  }
  public void before(UAltEdge host) {
		UID from=host.get_fromVertex();
		UID to=host.get_toVertex();
		UID uid=host.get_eid();
		Point bendPoint;
		if(host.get_bendpoint()==null)
			bendPoint = null;
		else
		{	
			BendPoint bp = host.get_bendpoint();
			int x = bp.get_position().get_x().get_x().intValue();
			int y = bp.get_position().get_y().get_y().intValue();
			bendPoint=new Point(x,y);
		}

		EdgeInfo edgeinfo = new EdgeInfo(null,null,null,null,from, to,uid,bendPoint);
		elements.get_alternation().addElement(edgeinfo);
	}
  public void before(UConstEdge host) {
		String edge_name = null;
		if(host.get_edgename()!=null)
					edge_name=host.get_edgename().get_name().toString();

		String card = host.get_card().get_lower().get_l() + 
			(host.get_card().get_upper()==null?"":".."+host.get_card().get_upper().get_u());
		UID from=host.get_fromVertex();
		UID to=host.get_toVertex();
		UID uid=host.get_eid();
		String before;
		if(host.get_beFore()==null)
			before = null;
		else
			before=host.get_beFore().get_syntax();
		String after;
		if(host.get_afTer()==null)
			after = null;
		else
			after=host.get_afTer().get_syntax();
		Point bendPoint;
		if(host.get_bendpoint()==null)
			bendPoint = null;
		else
		{	
			BendPoint bp = host.get_bendpoint();
			int x = bp.get_position().get_x().get_x().intValue();
			int y = bp.get_position().get_y().get_y().intValue();
			bendPoint=new Point(x,y);
		}

		EdgeInfo edgeinfo = new EdgeInfo(edge_name,card,before,after,from, to,uid,bendPoint);
		elements.get_construction().addElement(edgeinfo);
	}
  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_);
    elements.universal_trv0(_v_);
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }
}

