/*
	A basic extension of the java.applet.Applet class
 */

import java.awt.*;
import java.applet.*;

public class Algorithm13 extends Applet
{
	private PeriodRelation rel1;
	private PeriodRelation rel2;
	private PeriodRelation rel3;

	public void init()
	{
		// Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
		symantec.itools.lang.Context.setApplet(this);
	
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		setLayout(null);
		setSize(480,240);
		header.setText("13. Transition of period relations");
		header.setAlignment(java.awt.Label.CENTER);
		add(header);
		header.setFont(new Font("Dialog", Font.PLAIN, 14));
		header.setBounds(0,24,480,24);
		activePanel.setLayout(null);
		add(activePanel);
		activePanel.setBounds(96,84,288,72);
		activePanel.add(relation1);
		relation1.setBounds(0,0,216,24);
		label2.setText("transition");
		label2.setAlignment(java.awt.Label.CENTER);
		activePanel.add(label2);
		label2.setFont(new Font("Dialog", Font.BOLD, 12));
		label2.setBounds(216,0,72,24);
		activePanel.add(relation2);
		relation2.setBounds(0,24,216,24);
		label3.setText("is");
		label3.setAlignment(java.awt.Label.CENTER);
		activePanel.add(label3);
		label3.setFont(new Font("Dialog", Font.BOLD, 12));
		label3.setBounds(0,48,72,24);
		activePanel.add(result);
		result.setBounds(72,48,216,24);
		message.setText("Enter period relations (in Allen, symbolic or point notations) in the text boxes.");
		message.setAlignment(java.awt.Label.CENTER);
		add(message);
		message.setFont(new Font("Dialog", Font.PLAIN, 12));
		message.setBounds(0,168,480,24);
		//}}
	
		//{{REGISTER_LISTENERS
		SymText lSymText = new SymText();
		relation1.addTextListener(lSymText);
		relation2.addTextListener(lSymText);
		//}}
	}
	
	//{{DECLARE_CONTROLS
	java.awt.Label header = new java.awt.Label();
	java.awt.Panel activePanel = new java.awt.Panel();
	java.awt.TextField relation1 = new java.awt.TextField();
	java.awt.Label label2 = new java.awt.Label();
	java.awt.TextField relation2 = new java.awt.TextField();
	java.awt.Label label3 = new java.awt.Label();
	java.awt.Label result = new java.awt.Label();
	java.awt.Label message = new java.awt.Label();
	//}}

	class SymText implements java.awt.event.TextListener
	{
		public void textValueChanged(java.awt.event.TextEvent event)
		{
			Object object = event.getSource();
			if (object == relation1)
				relation1_TextValueChanged(event);
			else if (object == relation2)
				relation2_TextValueChanged(event);
		}
	}

	void relation1_TextValueChanged(java.awt.event.TextEvent event)
	{
		message.setText("");
		if (relation1.getText().equals(""))
		{
			result.setText("");
		}
		else
		{
			try
			{
				if (relation1.getText().charAt(0) == '[')
				{
					rel1 = new AllenPeriodRelation(relation1.getText());
				}
				else if (relation1.getText().charAt(0) == '(')
				{
					rel1 = new PointPeriodRelation(relation1.getText());
				}
				else
				{
					rel1 = new SymbolicPeriodRelation(relation1.getText());
				}
				if (!relation2.getText().equals(""))
				{
					if (rel2.isNull())
					{
						result.setText("");
						message.setText(relation2.getText()
							+ " is not a valid period relation");
					}
					else
					{
						rel3 = (PeriodRelation)rel1.transition(rel2);
						result.setText(rel3.toString());
					}
				}
			}
			catch (FormatException e)
			{
				result.setText("");
				rel1 = new AllenPeriodRelation();
				message.setText(relation1.getText()
					+ " is not a valid period relation");
			}
		}
	}

	void relation2_TextValueChanged(java.awt.event.TextEvent event)
	{
		message.setText("");
		if (relation2.getText().equals(""))
		{
			result.setText("");
		}
		else
		{
			try
			{
				if (relation2.getText().charAt(0) == '[')
				{
					rel2 = new AllenPeriodRelation(relation2.getText());
				}
				else if (relation2.getText().charAt(0) == '(')
				{
					rel2 = new PointPeriodRelation(relation2.getText());
				}
				else
				{
					rel2 = new SymbolicPeriodRelation(relation2.getText());
				}
				if (!relation1.getText().equals(""))
				{
					if (rel1.isNull())
					{
						result.setText("");
						message.setText(relation1.getText()
							+ " is not a valid period relation");
					}
					else
					{
						rel3 = (PeriodRelation)rel1.transition(rel2);
						result.setText(rel3.toString());
					}
				}
			}
			catch (FormatException e)
			{
				result.setText("");
				rel2 = new AllenPeriodRelation();
				message.setText(relation2.getText()
					+ " is not a valid period relation");
			}
		}
	}
}
