import java.awt.*;
import java.applet.*;

/**	class LoopConnector
 *  draws a connector for repetition structures
 *  there is a begin and an end diagram
 *  the heights and the connector locations are used to  determine
 *  the height of the connector
 */
public class LoopConnector extends Diagram{

	private int connectorHeight;
	private int lowerHeight;
	private int upperHeight;
	private int lowerTerminal;
	private int upperTerminal;
	private String type;

	// Constructor
	// sets private data
	// connector location for connector same as
	// for the first diagram sent
	public LoopConnector (String direction,
					int t1, int h1,
					int t2, int h2){
		type = direction;
		lowerHeight = h1;
		upperHeight = h2;
		lowerTerminal = t1;
		upperTerminal = t2;
		connectorLocation = t1;
	}


	// overrides paint
	// draw a line to connect to previous drawing
	// draw an arc to rejoin after looping
	// or before looping (based on "begin" or "end" parameter
	// draw vertical line
	// and arc at the top of the diagram
	// draw connecting horizontal line
	public void paint (Graphics g){
		int bottom = upperHeight + lowerHeight + verticalSpacing;
		int currentLine = bottom - lowerHeight + lowerTerminal;

		g.drawLine (0, currentLine, connectorSize,
					currentLine);
			if (type.equals("begin")){
			g.drawArc (0, currentLine - connectorSize,
						connectorSize, connectorSize, 180, 90);
			g.drawLine (0, currentLine - connectorSize / 2,
						0, upperTerminal + connectorSize / 2);
			g.drawArc (0, upperTerminal, connectorSize,
							connectorSize, 90, 90);
			g.drawLine (connectorSize / 2, upperTerminal,
						connectorSize, upperTerminal);
		}
		else{
			g.drawArc (0, currentLine - connectorSize,
				connectorSize, connectorSize, 0,-90);
			g.drawLine (connectorSize, currentLine - connectorSize / 2 ,
						connectorSize, upperTerminal + connectorSize / 2);
			g.drawArc (0, upperTerminal, connectorSize,
						connectorSize, 0, 90);
			g.drawLine (0, upperTerminal,connectorSize / 2,
							upperTerminal);
		}

	}

	// override preferredSize
	// width is connector size set in Diagram
	// height is the heights of the 2 diagrams plus
	// vertical spacing
	public Dimension preferredSize () {
		return new Dimension (connectorSize + 1, lowerHeight +
										upperHeight + verticalSpacing);
    }

}
