diff options
Diffstat (limited to 'common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java')
-rw-r--r-- | common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java new file mode 100644 index 0000000000..0b4ff59108 --- /dev/null +++ b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java @@ -0,0 +1,260 @@ +/******************************************************************************* + * Copyright (c) 2007, 2009 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.common.utility.tests.internal.model.value.swing; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.ButtonModel; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.WindowConstants; + +import org.eclipse.jpt.common.utility.internal.ArrayTools; +import org.eclipse.jpt.common.utility.internal.model.AbstractModel; +import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; +import org.eclipse.jpt.common.utility.internal.model.value.swing.RadioButtonModelAdapter; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; + + +/** + * Play around with a set of radio buttons. + */ +@SuppressWarnings("nls") +public class RadioButtonModelAdapterUITest { + + private TestModel testModel; + private WritablePropertyValueModel<TestModel> testModelHolder; + private WritablePropertyValueModel<Object> colorHolder; + private ButtonModel redButtonModel; + private ButtonModel greenButtonModel; + private ButtonModel blueButtonModel; + + public static void main(String[] args) throws Exception { + new RadioButtonModelAdapterUITest().exec(); + } + + private RadioButtonModelAdapterUITest() { + super(); + } + + private void exec() throws Exception { + this.testModel = new TestModel(); + this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel); + this.colorHolder = this.buildColorHolder(this.testModelHolder); + this.redButtonModel = this.buildRadioButtonModelAdapter(this.colorHolder, TestModel.RED); + this.greenButtonModel = this.buildRadioButtonModelAdapter(this.colorHolder, TestModel.GREEN); + this.blueButtonModel = this.buildRadioButtonModelAdapter(this.colorHolder, TestModel.BLUE); + this.openWindow(); + } + + private WritablePropertyValueModel<Object> buildColorHolder(PropertyValueModel<TestModel> subjectHolder) { + return new PropertyAspectAdapter<TestModel, Object>(subjectHolder, TestModel.COLOR_PROPERTY) { + @Override + protected Object buildValue_() { + return this.subject.getColor(); + } + @Override + protected void setValue_(Object value) { + this.subject.setColor((String) value); + } + }; + } + + private ButtonModel buildRadioButtonModelAdapter(WritablePropertyValueModel<Object> colorPVM, String color) { + return new RadioButtonModelAdapter(colorPVM, color); + } + + private void openWindow() { + JFrame window = new JFrame(this.getClass().getName()); + window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); + window.addWindowListener(this.buildWindowListener()); + window.getContentPane().add(this.buildMainPanel(), "Center"); + window.setSize(400, 100); + window.setLocation(200, 200); + window.setVisible(true); + } + + private WindowListener buildWindowListener() { + return new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + e.getWindow().setVisible(false); + System.exit(0); + } + }; + } + + private Component buildMainPanel() { + JPanel mainPanel = new JPanel(new BorderLayout()); + mainPanel.add(this.buildRadioButtonPanel(), BorderLayout.NORTH); + mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); + return mainPanel; + } + + private Component buildRadioButtonPanel() { + JPanel taskListPanel = new JPanel(new GridLayout(1, 0)); + taskListPanel.add(this.buildRedRadioButton()); + taskListPanel.add(this.buildGreenRadioButton()); + taskListPanel.add(this.buildBlueRadioButton()); + return taskListPanel; + } + + private JRadioButton buildRedRadioButton() { + JRadioButton radioButton = new JRadioButton(); + radioButton.setText("red"); + radioButton.setModel(this.redButtonModel); + return radioButton; + } + + private JRadioButton buildGreenRadioButton() { + JRadioButton radioButton = new JRadioButton(); + radioButton.setText("green"); + radioButton.setModel(this.greenButtonModel); + return radioButton; + } + + private JRadioButton buildBlueRadioButton() { + JRadioButton radioButton = new JRadioButton(); + radioButton.setText("blue"); + radioButton.setModel(this.blueButtonModel); + return radioButton; + } + + private Component buildControlPanel() { + JPanel controlPanel = new JPanel(new GridLayout(1, 0)); + controlPanel.add(this.buildResetColorButton()); + controlPanel.add(this.buildClearModelButton()); + controlPanel.add(this.buildRestoreModelButton()); + controlPanel.add(this.buildPrintModelButton()); + return controlPanel; + } + + private JButton buildResetColorButton() { + return new JButton(this.buildResetColorAction()); + } + + private Action buildResetColorAction() { + Action action = new AbstractAction("reset color") { + public void actionPerformed(ActionEvent event) { + RadioButtonModelAdapterUITest.this.resetColor(); + } + }; + action.setEnabled(true); + return action; + } + + void resetColor() { + this.testModel.setColor(TestModel.DEFAULT_COLOR); + } + + private JButton buildClearModelButton() { + return new JButton(this.buildClearModelAction()); + } + + private Action buildClearModelAction() { + Action action = new AbstractAction("clear model") { + public void actionPerformed(ActionEvent event) { + RadioButtonModelAdapterUITest.this.clearModel(); + } + }; + action.setEnabled(true); + return action; + } + + void clearModel() { + this.testModelHolder.setValue(null); + } + + private JButton buildRestoreModelButton() { + return new JButton(this.buildRestoreModelAction()); + } + + private Action buildRestoreModelAction() { + Action action = new AbstractAction("restore model") { + public void actionPerformed(ActionEvent event) { + RadioButtonModelAdapterUITest.this.restoreModel(); + } + }; + action.setEnabled(true); + return action; + } + + void restoreModel() { + this.testModelHolder.setValue(this.testModel); + } + + private JButton buildPrintModelButton() { + return new JButton(this.buildPrintModelAction()); + } + + private Action buildPrintModelAction() { + Action action = new AbstractAction("print model") { + public void actionPerformed(ActionEvent event) { + RadioButtonModelAdapterUITest.this.printModel(); + } + }; + action.setEnabled(true); + return action; + } + + void printModel() { + System.out.println(this.testModel); + } + + + private static class TestModel extends AbstractModel { + private String color; + public static final String COLOR_PROPERTY = "color"; + public static final String RED = "red"; + public static final String GREEN = "green"; + public static final String BLUE = "blue"; + public static final String DEFAULT_COLOR = RED; + public static final String[] VALID_COLORS = { + RED, + GREEN, + BLUE + }; + + public TestModel() { + this(DEFAULT_COLOR); + } + public TestModel(String color) { + this.color = color; + } + public String getColor() { + return this.color; + } + public void setColor(String color) { + if ( ! ArrayTools.contains(VALID_COLORS, color)) { + throw new IllegalArgumentException(color); + } + Object old = this.color; + this.color = color; + this.firePropertyChanged(COLOR_PROPERTY, old, color); + } + @Override + public String toString() { + return "TestModel(" + this.color + ")"; + } + } + +} |