package context.arch.widget;
import java.awt.Label;
import java.awt.Color;
import java.awt.Checkbox;
import java.awt.TextField;
import java.awt.List;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Insets;
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/**
* This class implements a frame that runs in its own thread. It contains
* a GUI that collects registration information for a tour guide. This
* information includes user name, affiliation, email, interests and name
* of handheld device, if any.
*
* @see Frame
* @see Runnable
* @see ActionListener
*/
public class RegistrationFrame extends Frame implements Runnable, ActionListener {
private static final long serialVersionUID = -2856326914853939259L;
/**
* Tag for the submit button
*/
public static final String SUBMIT = "submit";
/**
* Tag for the cancel button
*/
public static final String CANCEL = "cancel";
private ActionListener listener;
private Checkbox cb1,cb2,cb3,cb4,cb5,cb6,cb7,cb8;
private TextField name,affiliation,email,interest1,interest2,interest3;
private List device;
private String separator;
private Label message;
/**
* Constructor that creates the frame and GUI for displaying to the user.
*
* @param listener ActionListener to pass events to
* @param separator String to use to separate user interests
*/
public RegistrationFrame(ActionListener listener, String separator) {
this.listener = listener;
this.separator = separator;
setLayout(new BorderLayout());
Panel p4 = new Panel();
p4.setLayout(new BorderLayout());
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
Panel p1 = new Panel();
p1.setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.gridwidth = GridBagConstraints.RELATIVE;
c.insets = new Insets(10,10,10,10);
Label lName = new Label("Name: ");
gridbag.setConstraints(lName,c);
p1.add(lName);
c.gridwidth = GridBagConstraints.REMAINDER;
name = new TextField(40);
gridbag.setConstraints(name,c);
p1.add(name);
c.gridwidth = GridBagConstraints.RELATIVE;
Label lAffiliation = new Label("Affiliation: ");
gridbag.setConstraints(lAffiliation,c);
p1.add(lAffiliation);
c.gridwidth = GridBagConstraints.REMAINDER;
affiliation = new TextField(40);
gridbag.setConstraints(affiliation,c);
p1.add(affiliation);
c.gridwidth = GridBagConstraints.RELATIVE;
Label lEmail = new Label("Email Address: ");
gridbag.setConstraints(lEmail,c);
p1.add(lEmail);
c.gridwidth = GridBagConstraints.REMAINDER;
email = new TextField(40);
gridbag.setConstraints(email,c);
p1.add(email);
p4.add("North",p1);
Panel p2 = new Panel();
p2.setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.gridwidth = GridBagConstraints.REMAINDER;
Label lInterests = new Label("Interests: ");
gridbag.setConstraints(lInterests,c);
p2.add(lInterests);
c.gridwidth = GridBagConstraints.RELATIVE;
c.insets = new Insets(0,30,0,0);
cb1 = new Checkbox("context");
gridbag.setConstraints(cb1,c);
p2.add(cb1);
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(0,0,0,0);
cb2 = new Checkbox("applications");
gridbag.setConstraints(cb2,c);
p2.add(cb2);
c.gridwidth = GridBagConstraints.RELATIVE;
c.insets = new Insets(0,30,0,0);
cb3 = new Checkbox("virtual environments");
gridbag.setConstraints(cb3,c);
p2.add(cb3);
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(0,0,0,0);
cb4 = new Checkbox("demos");
gridbag.setConstraints(cb4,c);
p2.add(cb4);
c.gridwidth = GridBagConstraints.RELATIVE;
c.insets = new Insets(0,30,0,0);
cb5 = new Checkbox("capture");
gridbag.setConstraints(cb5,c);
p2.add(cb5);
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(0,0,0,0);
cb6 = new Checkbox("ubiquitous");
gridbag.setConstraints(cb6,c);
p2.add(cb6);
c.gridwidth = GridBagConstraints.RELATIVE;
c.insets = new Insets(0,30,0,0);
cb7 = new Checkbox("perception");
gridbag.setConstraints(cb7,c);
p2.add(cb7);
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(0,0,0,0);
cb8 = new Checkbox("errors");
gridbag.setConstraints(cb8,c);
p2.add(cb8);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 2;
c.anchor = GridBagConstraints.SOUTH;
c.insets = new Insets(10,10,10,10);
Label lInterestsFree = new Label("Interests (free-form):");
gridbag.setConstraints(lInterestsFree,c);
p2.add(lInterestsFree);
c.gridwidth = GridBagConstraints.RELATIVE;
Label lInterest1 = new Label("Interest #1: ");
gridbag.setConstraints(lInterest1,c);
p2.add(lInterest1);
c.gridwidth = GridBagConstraints.REMAINDER;
interest1 = new TextField(40);
gridbag.setConstraints(interest1,c);
p2.add(interest1);
c.gridwidth = GridBagConstraints.RELATIVE;
Label lInterest2 = new Label("Interest #2: ");
gridbag.setConstraints(lInterest2,c);
p2.add(lInterest2);
c.gridwidth = GridBagConstraints.REMAINDER;
interest2 = new TextField(40);
gridbag.setConstraints(interest2,c);
p2.add(interest2);
c.gridwidth = GridBagConstraints.RELATIVE;
Label lInterest3 = new Label("Interest #3: ");
gridbag.setConstraints(lInterest3,c);
p2.add(lInterest3);
c.gridwidth = GridBagConstraints.REMAINDER;
interest3 = new TextField(40);
gridbag.setConstraints(interest3,c);
p2.add(interest3);
p4.add("Center",p2);
Panel p3 = new Panel();
p3.setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.gridwidth = GridBagConstraints.RELATIVE;
c.gridheight = 2;
c.anchor = GridBagConstraints.SOUTH;
c.insets = new Insets(10,10,10,10);
Label lDevice = new Label("Handheld device:");
gridbag.setConstraints(lDevice,c);
p3.add(lDevice);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 1;
device = new List();
device.add("None");
device.add("WinCE #1");
device.add("WinCE #2");
device.add("WinCE #3");
device.add("WinCE #4");
device.add("WinCE #5");
device.select(0);
gridbag.setConstraints(device,c);
p3.add(device);
p4.add("South",p3);
add("North",p4);
Panel p5 = new Panel();
p5.setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.gridwidth = GridBagConstraints.RELATIVE;
Button submit = new Button("Submit");
submit.addActionListener(this);
submit.setActionCommand(SUBMIT);
gridbag.setConstraints(submit,c);
p5.add(submit);
c.gridwidth = GridBagConstraints.REMAINDER;
Button cancel = new Button("Cancel");
cancel.addActionListener(this);
cancel.setActionCommand(CANCEL);
gridbag.setConstraints(cancel,c);
p5.add(cancel);
message = new Label("");
message.setForeground(Color.red);
gridbag.setConstraints(message,c);
p5.add(message);
add("Center",p5);
}
/**
* Method required by the Runnable interface. It just makes the frame
* visible for the user
*/
public void run() {
setVisible(true);
}
/**
* Method required by the ActionListener interface. It handles the
* user interaction with the submit and cancel buttons. When the
* submit button is pressed, the user input is checked to see that
* a name, affiliation and email address have been entered. If
* the input is okay, it passes the event to the listener given in
* the constructor.
*
* @param evt ActionEvent caused by interaction with a button
*/
public void actionPerformed(ActionEvent evt) {
if (evt.getActionCommand().equals(SUBMIT)) {
if (name.getText().trim().length() == 0) {
message.setText("Please enter your name before submitting");
}
else if (affiliation.getText().trim().length() == 0) {
message.setText("Please enter your affiliation before submitting");
}
else if (email.getText().trim().length() == 0) {
message.setText("Please enter your email address before submitting");
}
else {
listener.actionPerformed(evt);
}
}
else if (evt.getActionCommand().equals(CANCEL)) {
listener.actionPerformed(evt);
}
}
/**
* Returns the name of the user
*
* @return Name of the user
*/
public String getName() {
return name.getText();
}
/**
* Returns the user's affiliation
*
* @return Affiliation of the user
*/
public String getAffiliation() {
return affiliation.getText();
}
/**
* Returns the email address of the user
*
* @return Email address of the user
*/
public String getEmail() {
return email.getText();
}
/**
* Returns the interests of the user, separated by the separator
* string passed into the constructor
*
* @return Interests of the user
*/
public String getInterests() {
StringBuffer interests = new StringBuffer();
if (cb1.getState()) {
interests.append(cb1.getLabel()+separator);
}
if (cb2.getState()) {
interests.append(cb2.getLabel()+separator);
}
if (cb3.getState()) {
interests.append(cb3.getLabel()+separator);
}
if (cb4.getState()) {
interests.append(cb4.getLabel()+separator);
}
if (cb5.getState()) {
interests.append(cb5.getLabel()+separator);
}
if (cb6.getState()) {
interests.append(cb6.getLabel()+separator);
}
if (cb7.getState()) {
interests.append(cb7.getLabel()+separator);
}
if (cb8.getState()) {
interests.append(cb8.getLabel()+separator);
}
if (interest1.getText().length() != 0) {
interests.append(interest1.getText().trim()+separator);
}
if (interest2.getText().length() != 0) {
interests.append(interest2.getText().trim()+separator);
}
if (interest3.getText().length() != 0) {
interests.append(interest3.getText().trim()+separator);
}
String result = interests.toString();
if (result.length() != 0) {
return result.substring(0,result.length()-separator.length());
}
return result;
}
/**
* Returns the handheld device carried by the user
*
* @return handheld device carried by the user
*/
public String getDevice() {
String result = device.getSelectedItem();
if (result == null) {
return new String("None");
}
if (result.equals("WinCE #1")) {
return new String("199.77.129.187");
}
if (result.equals("WinCE #2")) {
return new String("127.0.0.1");
}
if (result.equals("WinCE #3")) {
return new String("127.0.0.1");
}
if (result.equals("WinCE #4")) {
return new String("127.0.0.1");
}
if (result.equals("WinCE #5")) {
return new String("127.0.0.1");
}
return result;
}
}