Mediatorパターン

awt初めて触ったー。javascriptでも実装したいな。

% find . -name "*.java" -print0 |xargs -0 cat                                                                               []
public interface Colleague {
	public abstract void setMediator(Mediator mediator);

	public abstract void setCollegueEnabled(boolean enabled);
}
import java.awt.Button;

public class ColleagueButton extends Button implements Colleague {
	private Mediator mediator;

	public ColleagueButton(String caption) {
		super(caption);
	}

	@Override
	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}

	@Override
	public void setCollegueEnabled(boolean enabled) {
		setEnabled(enabled);
	}

}
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class ColleagueCheckBox extends Checkbox implements ItemListener,
		Colleague {
	private Mediator mediator;

	public ColleagueCheckBox(String caption, CheckboxGroup group, boolean state) {
		super(caption, group, state);
	}

	@Override
	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}

	@Override
	public void setCollegueEnabled(boolean enabled) {
		setEnabled(enabled);
	}

	@Override
	public void itemStateChanged(ItemEvent e) {
		mediator.colleagueChanged();
	}
}
import java.awt.Color;
import java.awt.TextField;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

public class ColleagueTextFileld extends TextField implements TextListener,
		Colleague {
	private Mediator mediator;

	public ColleagueTextFileld(String text, int column) {
		super(text, column);
	}

	@Override
	public void setMediator(Mediator mediator) {
		this.mediator = mediator;
	}

	@Override
	public void setCollegueEnabled(boolean enabled) {
		setEnabled(enabled);
		setBackground(enabled ? Color.white : Color.lightGray);
	}

	@Override
	public void textValueChanged(TextEvent e) {
		mediator.colleagueChanged();
	}

}
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginFrame extends Frame implements ActionListener, Mediator {

	private ColleagueCheckBox checkGuest;
	private ColleagueCheckBox checkLogin;
	private ColleagueTextFileld textUser;
	private ColleagueTextFileld textPass;
	private ColleagueButton buttonOk;
	private ColleagueButton buttonCancel;

	public LoginFrame(String title) {
		super(title);
		setBackground(Color.lightGray);
		setLayout(new GridLayout(4, 2));

		createColleagues();

		add(checkGuest);
		add(checkLogin);
		add(new Label("Username:"));
		add(textUser);
		add(new Label("Password:"));
		add(textPass);
		add(buttonOk);
		add(buttonCancel);

		colleagueChanged();

		pack();
		show();
	}

	@Override
	public void createColleagues() {
		CheckboxGroup g = new CheckboxGroup();
		checkGuest = new ColleagueCheckBox("Guest", g, true);
		checkLogin = new ColleagueCheckBox("Login", g, false);
		textUser = new ColleagueTextFileld("", 10);
		textPass = new ColleagueTextFileld("", 10);
		textPass.setEchoChar('*');
		buttonOk = new ColleagueButton("OK");
		buttonCancel = new ColleagueButton("Cancel");

		checkGuest.setMediator(this);
		checkLogin.setMediator(this);
		textUser.setMediator(this);
		textPass.setMediator(this);
		buttonOk.setMediator(this);
		buttonCancel.setMediator(this);

		checkGuest.addItemListener(checkGuest);
		checkLogin.addItemListener(checkLogin);
		textUser.addTextListener(textUser);
		textPass.addTextListener(textPass);
		buttonOk.addActionListener(this);
		buttonCancel.addActionListener(this);

	}

	@Override
	public void colleagueChanged() {
		if (checkGuest.getState()) {
			textUser.setCollegueEnabled(false);
			textPass.setCollegueEnabled(false);
			buttonOk.setCollegueEnabled(true);
		} else {
			textUser.setCollegueEnabled(true);
			userpassChanged();
		}

	}

	private void userpassChanged() {
		if (textUser.getText().length() > 0) {
			textPass.setCollegueEnabled(true);
			if (textPass.getText().length() > 0) {
				buttonOk.setCollegueEnabled(true);
			} else {
				buttonOk.setCollegueEnabled(false);
			}
		} else {
			textPass.setCollegueEnabled(false);
			buttonOk.setCollegueEnabled(false);
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String label = ((ColleagueButton) e.getSource()).getLabel();
		System.out.println(label);
		if ("OK".equals(label)) {
			System.out.println("ログイン確認へ");
		}
		System.out.println(textUser.getText());
		System.out.println(textPass.getText());
		System.out.println(e.toString());
		System.exit(0);
	}

}
public class Main {

	public static void main(String[] args) {
		new LoginFrame("Mediator Sample");
	}

}
public interface Mediator {
	public abstract void createColleagues();

	public abstract void colleagueChanged();
}