diff options
Diffstat (limited to 'common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing')
24 files changed, 0 insertions, 6622 deletions
diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/CheckBoxModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/CheckBoxModelAdapterTests.java deleted file mode 100644 index 47a7c8e320..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/CheckBoxModelAdapterTests.java +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 javax.swing.ButtonModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.EventListenerList; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.ReflectionTools; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.CheckBoxModelAdapter; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class CheckBoxModelAdapterTests extends TestCase { - private WritablePropertyValueModel<Boolean> booleanHolder; - private ButtonModel buttonModelAdapter; - boolean eventFired; - - public CheckBoxModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.booleanHolder = new SimplePropertyValueModel<Boolean>(Boolean.TRUE); - this.buttonModelAdapter = new CheckBoxModelAdapter(this.booleanHolder) { - @Override - protected PropertyChangeListener buildBooleanChangeListener() { - return this.buildBooleanChangeListener_(); - } - }; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testSetSelected() throws Exception { - this.eventFired = false; - this.buttonModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - CheckBoxModelAdapterTests.this.eventFired = true; - } - }); - this.buttonModelAdapter.setSelected(false); - assertTrue(this.eventFired); - assertEquals(Boolean.FALSE, this.booleanHolder.getValue()); - } - - public void testSetValue() throws Exception { - this.eventFired = false; - this.buttonModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - CheckBoxModelAdapterTests.this.eventFired = true; - } - }); - assertTrue(this.buttonModelAdapter.isSelected()); - this.booleanHolder.setValue(Boolean.FALSE); - assertTrue(this.eventFired); - assertFalse(this.buttonModelAdapter.isSelected()); - } - - public void testDefaultValue() throws Exception { - this.eventFired = false; - this.buttonModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - CheckBoxModelAdapterTests.this.eventFired = true; - } - }); - assertTrue(this.buttonModelAdapter.isSelected()); - this.booleanHolder.setValue(null); - assertTrue(this.eventFired); - assertFalse(this.buttonModelAdapter.isSelected()); - - this.eventFired = false; - this.booleanHolder.setValue(Boolean.FALSE); - assertFalse(this.eventFired); - assertFalse(this.buttonModelAdapter.isSelected()); - } - - public void testHasListeners() throws Exception { - SimplePropertyValueModel<Boolean> localBooleanHolder = (SimplePropertyValueModel<Boolean>) this.booleanHolder; - assertFalse(localBooleanHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.buttonModelAdapter); - - ChangeListener listener = new TestChangeListener(); - this.buttonModelAdapter.addChangeListener(listener); - assertTrue(localBooleanHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(this.buttonModelAdapter); - - this.buttonModelAdapter.removeChangeListener(listener); - assertFalse(localBooleanHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.buttonModelAdapter); - } - - private void verifyHasNoListeners(Object model) throws Exception { - EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList"); - assertEquals(0, listenerList.getListenerList().length); - } - - private void verifyHasListeners(Object model) throws Exception { - EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList"); - assertFalse(listenerList.getListenerList().length == 0); - } - - - // ********** member class ********** - private class TestChangeListener implements ChangeListener { - TestChangeListener() { - super(); - } - public void stateChanged(ChangeEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/CheckBoxModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/CheckBoxModelAdapterUITest.java deleted file mode 100644 index 6c7464e0f5..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/CheckBoxModelAdapterUITest.java +++ /dev/null @@ -1,314 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.ItemEvent; -import java.awt.event.ItemListener; -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.JCheckBox; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.WindowConstants; -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.CheckBoxModelAdapter; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; - -/** - * Play around with a set of check boxes. - */ -@SuppressWarnings("nls") -public class CheckBoxModelAdapterUITest { - - private TestModel testModel; - private WritablePropertyValueModel<TestModel> testModelHolder; - private WritablePropertyValueModel<Boolean> flag1Holder; - private WritablePropertyValueModel<Boolean> flag2Holder; - private WritablePropertyValueModel<Boolean> notFlag2Holder; - private ButtonModel flag1ButtonModel; - private ButtonModel flag2ButtonModel; - private ButtonModel notFlag2ButtonModel; - - public static void main(String[] args) throws Exception { - new CheckBoxModelAdapterUITest().exec(); - } - - private CheckBoxModelAdapterUITest() { - super(); - } - - private void exec() throws Exception { - this.testModel = new TestModel(true, true); - this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel); - this.flag1Holder = this.buildFlag1Holder(this.testModelHolder); - this.flag1ButtonModel = this.buildCheckBoxModelAdapter(this.flag1Holder); - this.flag2Holder = this.buildFlag2Holder(this.testModelHolder); - this.flag2ButtonModel = this.buildCheckBoxModelAdapter(this.flag2Holder); - this.notFlag2Holder = this.buildNotFlag2Holder(this.testModelHolder); - this.notFlag2ButtonModel = this.buildCheckBoxModelAdapter(this.notFlag2Holder); - this.openWindow(); - } - - private WritablePropertyValueModel<Boolean> buildFlag1Holder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, Boolean>(vm, TestModel.FLAG1_PROPERTY) { - @Override - protected Boolean buildValue_() { - return Boolean.valueOf(this.subject.isFlag1()); - } - @Override - protected void setValue_(Boolean value) { - this.subject.setFlag1(value.booleanValue()); - } - }; - } - - private WritablePropertyValueModel<Boolean> buildFlag2Holder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, Boolean>(vm, TestModel.FLAG2_PROPERTY) { - @Override - protected Boolean buildValue_() { - return Boolean.valueOf(this.subject.isFlag2()); - } - @Override - protected void setValue_(Boolean value) { - this.subject.setFlag2(value.booleanValue()); - } - }; - } - - private WritablePropertyValueModel<Boolean> buildNotFlag2Holder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, Boolean>(vm, TestModel.NOT_FLAG2_PROPERTY) { - @Override - protected Boolean buildValue_() { - return Boolean.valueOf(this.subject.isNotFlag2()); - } - @Override - protected void setValue_(Boolean value) { - this.subject.setNotFlag2(value.booleanValue()); - } - }; - } - - private ButtonModel buildCheckBoxModelAdapter(WritablePropertyValueModel<Boolean> booleanHolder) { - return new CheckBoxModelAdapter(booleanHolder); - } - - 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.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.buildCheckBoxPanel(), BorderLayout.NORTH); - mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); - return mainPanel; - } - - private Component buildCheckBoxPanel() { - JPanel taskListPanel = new JPanel(new GridLayout(1, 0)); - taskListPanel.add(this.buildFlag1CheckBox()); - taskListPanel.add(this.buildFlag2CheckBox()); - taskListPanel.add(this.buildNotFlag2CheckBox()); - taskListPanel.add(this.buildUnattachedCheckBox()); - return taskListPanel; - } - - private JCheckBox buildFlag1CheckBox() { - JCheckBox checkBox = new JCheckBox(); - checkBox.setText("flag 1"); - checkBox.setModel(this.flag1ButtonModel); - return checkBox; - } - - private JCheckBox buildFlag2CheckBox() { - JCheckBox checkBox = new JCheckBox(); - checkBox.setText("flag 2"); - checkBox.setModel(this.flag2ButtonModel); - return checkBox; - } - - private JCheckBox buildNotFlag2CheckBox() { - JCheckBox checkBox = new JCheckBox(); - checkBox.setText("not flag 2"); - checkBox.setModel(this.notFlag2ButtonModel); - return checkBox; - } - - private JCheckBox buildUnattachedCheckBox() { - JCheckBox checkBox = new JCheckBox("unattached"); - checkBox.getModel().addItemListener(this.buildUnattachedItemListener()); - return checkBox; - } - - private ItemListener buildUnattachedItemListener() { - return new ItemListener() { - public void itemStateChanged(ItemEvent e) { - System.out.println("unattached state changed: " + e); - } - }; - } - - private Component buildControlPanel() { - JPanel controlPanel = new JPanel(new GridLayout(1, 0)); - controlPanel.add(this.buildFlipFlag1Button()); - controlPanel.add(this.buildClearModelButton()); - controlPanel.add(this.buildRestoreModelButton()); - controlPanel.add(this.buildPrintModelButton()); - return controlPanel; - } - - private JButton buildFlipFlag1Button() { - return new JButton(this.buildFlipFlag1Action()); - } - - private Action buildFlipFlag1Action() { - Action action = new AbstractAction("flip flag 1") { - public void actionPerformed(ActionEvent event) { - CheckBoxModelAdapterUITest.this.flipFlag1(); - } - }; - action.setEnabled(true); - return action; - } - - void flipFlag1() { - this.testModel.setFlag1( ! this.testModel.isFlag1()); - } - - private JButton buildClearModelButton() { - return new JButton(this.buildClearModelAction()); - } - - private Action buildClearModelAction() { - Action action = new AbstractAction("clear model") { - public void actionPerformed(ActionEvent event) { - CheckBoxModelAdapterUITest.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) { - CheckBoxModelAdapterUITest.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) { - CheckBoxModelAdapterUITest.this.printModel(); - } - }; - action.setEnabled(true); - return action; - } - - void printModel() { - System.out.println("flag 1: " + this.testModel.isFlag1()); - System.out.println("flag 2: " + this.testModel.isFlag2()); - System.out.println("not flag 2: " + this.testModel.isNotFlag2()); - System.out.println("***"); - } - - - private class TestModel extends AbstractModel { - private boolean flag1; - public static final String FLAG1_PROPERTY = "flag1"; - private boolean flag2; - public static final String FLAG2_PROPERTY = "flag2"; - private boolean notFlag2; - public static final String NOT_FLAG2_PROPERTY = "notFlag2"; - - public TestModel(boolean flag1, boolean flag2) { - this.flag1 = flag1; - this.flag2 = flag2; - this.notFlag2 = ! flag2; - } - public boolean isFlag1() { - return this.flag1; - } - public void setFlag1(boolean flag1) { - boolean old = this.flag1; - this.flag1 = flag1; - this.firePropertyChanged(FLAG1_PROPERTY, old, flag1); - } - public boolean isFlag2() { - return this.flag2; - } - public void setFlag2(boolean flag2) { - boolean old = this.flag2; - this.flag2 = flag2; - this.firePropertyChanged(FLAG2_PROPERTY, old, flag2); - - old = this.notFlag2; - this.notFlag2 = ! flag2; - this.firePropertyChanged(NOT_FLAG2_PROPERTY, old, this.notFlag2); - } - public boolean isNotFlag2() { - return this.notFlag2; - } - public void setNotFlag2(boolean notFlag2) { - this.setFlag2( ! notFlag2); - } - @Override - public String toString() { - return "TestModel(" + this.isFlag1() + " - " + this.isFlag2() + ")"; - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterTests.java deleted file mode 100644 index 891611573d..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterTests.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.util.ArrayList; -import java.util.Collection; -import java.util.List; -import javax.swing.ComboBoxModel; -import javax.swing.ListModel; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.ReflectionTools; -import org.eclipse.jpt.common.utility.internal.model.value.SimpleListValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ComboBoxModelAdapter; -import org.eclipse.jpt.common.utility.internal.swing.Displayable; -import org.eclipse.jpt.common.utility.internal.swing.SimpleDisplayable; -import org.eclipse.jpt.common.utility.model.event.PropertyChangeEvent; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.model.value.CoordinatedList; - -@SuppressWarnings("nls") -public class ComboBoxModelAdapterTests extends TestCase { - - public ComboBoxModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - // nothing yet... - } - - @Override - protected void tearDown() throws Exception { - // nothing yet... - super.tearDown(); - } - - public void testHasListeners() throws Exception { - SimpleListValueModel<Displayable> listHolder = this.buildListHolder(); - assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - SimplePropertyValueModel<Object> selectionHolder = new SimplePropertyValueModel<Object>(listHolder.iterator().next()); - assertFalse(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - - ComboBoxModel comboBoxModel = new ComboBoxModelAdapter(listHolder, selectionHolder); - assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - assertFalse(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(comboBoxModel); - - CoordinatedList<Displayable> synchList = new CoordinatedList<Displayable>(comboBoxModel); - PropertyChangeListener selectionListener = this.buildSelectionListener(); - selectionHolder.addPropertyChangeListener(PropertyValueModel.VALUE, selectionListener); - assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - assertTrue(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(comboBoxModel); - - comboBoxModel.removeListDataListener(synchList); - selectionHolder.removePropertyChangeListener(PropertyValueModel.VALUE, selectionListener); - assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - assertFalse(selectionHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(comboBoxModel); - } - - private PropertyChangeListener buildSelectionListener() { - return new PropertyChangeListener() { - public void propertyChanged(PropertyChangeEvent evt) { - // do nothing... - } - }; - } - - private void verifyHasNoListeners(ListModel listModel) throws Exception { - boolean hasNoListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasNoListDataListeners")).booleanValue(); - assertTrue(hasNoListeners); - } - - private void verifyHasListeners(ListModel listModel) throws Exception { - boolean hasListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasListDataListeners")).booleanValue(); - assertTrue(hasListeners); - } - - private SimpleListValueModel<Displayable> buildListHolder() { - return new SimpleListValueModel<Displayable>(this.buildList()); - } - - private List<Displayable> buildList() { - List<Displayable> list = new ArrayList<Displayable>(); - this.populateCollection(list); - return list; - } - - private void populateCollection(Collection<Displayable> c) { - c.add(new SimpleDisplayable("foo")); - c.add(new SimpleDisplayable("bar")); - c.add(new SimpleDisplayable("baz")); - c.add(new SimpleDisplayable("joo")); - c.add(new SimpleDisplayable("jar")); - c.add(new SimpleDisplayable("jaz")); - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest.java deleted file mode 100644 index c750bdf997..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest.java +++ /dev/null @@ -1,393 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 java.util.ArrayList; -import java.util.List; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ComboBoxModel; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.ListCellRenderer; -import javax.swing.UIManager; -import javax.swing.WindowConstants; - -import org.eclipse.jpt.common.utility.internal.CollectionTools; -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.SimpleListValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ComboBoxModelAdapter; -import org.eclipse.jpt.common.utility.internal.swing.FilteringListBrowser; -import org.eclipse.jpt.common.utility.internal.swing.ListChooser; -import org.eclipse.jpt.common.utility.internal.swing.SimpleListCellRenderer; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; - - -/** - * Play around with a set of combo-boxes. - * - * DefaultLongListBrowserDialogUITest subclasses this class; so be - * careful when making changes. - */ -@SuppressWarnings("nls") -public class ComboBoxModelAdapterUITest { - - protected JFrame window; - private TestModel testModel; - private WritablePropertyValueModel<TestModel> testModelHolder; - private WritablePropertyValueModel<Object> colorHolder; - private SimpleListValueModel<String> colorListHolder; - protected ComboBoxModel colorComboBoxModel; - private int nextColorNumber = 0; - - public static void main(String[] args) throws Exception { - new ComboBoxModelAdapterUITest().exec(); - } - - protected ComboBoxModelAdapterUITest() { - super(); - } - - protected void exec() throws Exception { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); -// UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); // Metal LAF -// UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel.class.getName()); -// UIManager.setLookAndFeel(com.sun.java.swing.plaf.motif.MotifLookAndFeel.class.getName()); -// UIManager.setLookAndFeel(oracle.bali.ewt.olaf.OracleLookAndFeel.class.getName()); - this.testModel = this.buildTestModel(); - this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel); - this.colorHolder = this.buildColorHolder(this.testModelHolder); - this.colorListHolder = this.buildColorListHolder(); - this.colorComboBoxModel = this.buildComboBoxModelAdapter(this.colorListHolder, this.colorHolder); - this.openWindow(); - } - - private WritablePropertyValueModel<Object> buildColorHolder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, Object>(vm, TestModel.COLOR_PROPERTY) { - @Override - protected String buildValue_() { - return this.subject.getColor(); - } - @Override - protected void setValue_(Object value) { - this.subject.setColor((String) value); - } - }; - } - - protected TestModel buildTestModel() { - return new TestModel(); - } - - private SimpleListValueModel<String> buildColorListHolder() { - return new SimpleListValueModel<String>(TestModel.validColors()); -// return new AbstractReadOnlyListValueModel() { -// public Object value() { -// return new ArrayListIterator(TestModel.VALID_COLORS); -// } -// public int size() { -// return TestModel.VALID_COLORS.length; -// } -// }; - } - - protected ListValueModel<String> uiColorListHolder() { - return this.colorListHolder; - } - - private ComboBoxModel buildComboBoxModelAdapter(ListValueModel<String> listHolder, WritablePropertyValueModel<Object> selectionHolder) { - return new ComboBoxModelAdapter(listHolder, selectionHolder); - } - - private void openWindow() { - this.window = new JFrame(this.getClass().getSimpleName()); - this.window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); - this.window.addWindowListener(this.buildWindowListener()); - this.window.getContentPane().add(this.buildMainPanel(), "Center"); - this.window.setLocation(300, 300); - this.window.setSize(400, 150); - this.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.buildComboBoxPanel(), BorderLayout.NORTH); - mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); - return mainPanel; - } - - protected JPanel buildComboBoxPanel() { - JPanel panel = new JPanel(new GridLayout(1, 0)); - panel.add(this.buildComboBox()); - panel.add(this.buildComboBox()); - panel.add(this.buildListChooser1()); - panel.add(this.buildListChooser2()); - return panel; - } - - private JComboBox buildComboBox() { - JComboBox comboBox = new JComboBox(this.colorComboBoxModel); - comboBox.setRenderer(this.buildComboBoxRenderer()); - return comboBox; - } - - protected ListCellRenderer buildComboBoxRenderer() { - return new SimpleListCellRenderer() { - @Override - protected String buildText(Object value) { - return super.buildText(value); - } - }; - } - - private ListChooser buildListChooser1() { - return new LocalListChooser1(this.colorComboBoxModel); - } - - private ListChooser buildListChooser2() { - return new LocalListChooser2(this.colorComboBoxModel); - } - - private Component buildControlPanel() { - JPanel controlPanel = new JPanel(new GridLayout(2, 0)); - controlPanel.add(this.buildResetColorButton()); - controlPanel.add(this.buildClearModelButton()); - controlPanel.add(this.buildRestoreModelButton()); - controlPanel.add(this.buildPrintModelButton()); - controlPanel.add(this.buildAddTenButton()); - controlPanel.add(this.buildRemoveTenButton()); - return controlPanel; - } - - // ********** reset color button ********** - private JButton buildResetColorButton() { - return new JButton(this.buildResetColorAction()); - } - - private Action buildResetColorAction() { - Action action = new AbstractAction("reset color") { - public void actionPerformed(ActionEvent event) { - ComboBoxModelAdapterUITest.this.resetColor(); - } - }; - action.setEnabled(true); - return action; - } - - void resetColor() { - this.testModel.setColor(TestModel.DEFAULT_COLOR); - } - - // ********** clear model button ********** - private JButton buildClearModelButton() { - return new JButton(this.buildClearModelAction()); - } - - private Action buildClearModelAction() { - Action action = new AbstractAction("clear model") { - public void actionPerformed(ActionEvent event) { - ComboBoxModelAdapterUITest.this.clearModel(); - } - }; - action.setEnabled(true); - return action; - } - - void clearModel() { - this.testModelHolder.setValue(null); - } - - // ********** restore model button ********** - private JButton buildRestoreModelButton() { - return new JButton(this.buildRestoreModelAction()); - } - - private Action buildRestoreModelAction() { - Action action = new AbstractAction("restore model") { - public void actionPerformed(ActionEvent event) { - ComboBoxModelAdapterUITest.this.restoreModel(); - } - }; - action.setEnabled(true); - return action; - } - - void restoreModel() { - this.testModelHolder.setValue(this.testModel); - } - - // ********** print model button ********** - private JButton buildPrintModelButton() { - return new JButton(this.buildPrintModelAction()); - } - - private Action buildPrintModelAction() { - Action action = new AbstractAction("print model") { - public void actionPerformed(ActionEvent event) { - ComboBoxModelAdapterUITest.this.printModel(); - } - }; - action.setEnabled(true); - return action; - } - - void printModel() { - System.out.println(this.testModel); - } - - // ********** add 20 button ********** - private JButton buildAddTenButton() { - return new JButton(this.buildAddTenAction()); - } - - private Action buildAddTenAction() { - Action action = new AbstractAction("add 20") { - public void actionPerformed(ActionEvent event) { - ComboBoxModelAdapterUITest.this.addTen(); - } - }; - action.setEnabled(true); - return action; - } - - void addTen() { - for (int i = this.nextColorNumber; i < this.nextColorNumber + 20; i++) { - this.colorListHolder.add(this.colorListHolder.size(), "color" + i); - } - this.nextColorNumber += 20; - } - - // ********** remove 20 button ********** - private JButton buildRemoveTenButton() { - return new JButton(this.buildRemoveTenAction()); - } - - private Action buildRemoveTenAction() { - Action action = new AbstractAction("remove 20") { - public void actionPerformed(ActionEvent event) { - ComboBoxModelAdapterUITest.this.removeTen(); - } - }; - action.setEnabled(true); - return action; - } - - void removeTen() { - for (int i = 0; i < 20; i++) { - if (this.colorListHolder.size() > 0) { - this.colorListHolder.remove(this.colorListHolder.size() - 1); - } - } - } - - - protected 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 ORANGE = "orange"; - public static final String YELLOW = "yellow"; - public static final String GREEN = "green"; - public static final String BLUE = "blue"; - public static final String INDIGO = "indigo"; - public static final String VIOLET = "violet"; - public static final String DEFAULT_COLOR = RED; - public static List<String> validColors; - public static final String[] DEFAULT_VALID_COLORS = { - RED, - ORANGE, - YELLOW, - GREEN, - BLUE, - INDIGO, - VIOLET - }; - - public static List<String> validColors() { - if (validColors == null) { - validColors = buildDefaultValidColors(); - } - return validColors; - } - public static List<String> buildDefaultValidColors() { - List<String> result = new ArrayList<String>(); - CollectionTools.addAll(result, DEFAULT_VALID_COLORS); - return result; - } - - public TestModel() { - this(DEFAULT_COLOR); - } - public TestModel(String color) { - this.color = color; - } - public String getColor() { - return this.color; - } - public void setColor(String color) { - this.checkColor(color); - Object old = this.color; - this.color = color; - this.firePropertyChanged(COLOR_PROPERTY, old, color); - } - public void checkColor(String c) { - if ( ! validColors().contains(c)) { - throw new IllegalArgumentException(c); - } - } - @Override - public String toString() { - return "TestModel(" + this.color + ")"; - } - } - - - private class LocalListChooser1 extends ListChooser { - public LocalListChooser1(ComboBoxModel model) { - super(model); - } - } - - - private class LocalListChooser2 extends ListChooser { - public LocalListChooser2(ComboBoxModel model) { - super(model); - } - @Override - protected ListBrowser buildBrowser() { - return new FilteringListBrowser<String>(); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest2.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest2.java deleted file mode 100644 index ed00f4cf18..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ComboBoxModelAdapterUITest2.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 javax.swing.ListCellRenderer; -import org.eclipse.jpt.common.utility.internal.model.value.ExtendedListValueModelWrapper; -import org.eclipse.jpt.common.utility.internal.swing.SimpleListCellRenderer; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; - -/** - * - */ -@SuppressWarnings("nls") -public class ComboBoxModelAdapterUITest2 extends ComboBoxModelAdapterUITest { - - public static void main(String[] args) throws Exception { - new ComboBoxModelAdapterUITest2().exec(); - } - - public ComboBoxModelAdapterUITest2() { - super(); - } - - /** - * use a different model that allows the color to be set to null - */ - @Override - protected TestModel buildTestModel() { - return new TestModel2(); - } - - /** - * add a null to the front of the list - */ - @Override - protected ListValueModel<String> uiColorListHolder() { - // the default is to prepend the wrapped list with a null item - return new ExtendedListValueModelWrapper<String>(super.uiColorListHolder()); - } - - /** - * convert null to some text - */ - @Override - protected ListCellRenderer buildComboBoxRenderer() { - return new SimpleListCellRenderer() { - @Override - protected String buildText(Object value) { - return (value == null) ? "<none selected>" : super.buildText(value); - } - }; - } - - - protected static class TestModel2 extends TestModel { - /** - * null is OK here - */ - @Override - public void checkColor(String color) { - if (color == null) { - return; - } - super.checkColor(color); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DateSpinnerModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DateSpinnerModelAdapterTests.java deleted file mode 100644 index 2b09c75e48..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DateSpinnerModelAdapterTests.java +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.util.Date; -import javax.swing.SpinnerModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.DateSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class DateSpinnerModelAdapterTests extends TestCase { - private WritablePropertyValueModel<Object> valueHolder; - private SpinnerModel spinnerModelAdapter; - boolean eventFired; - - public DateSpinnerModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.valueHolder = new SimplePropertyValueModel<Object>(new Date()); - this.spinnerModelAdapter = new DateSpinnerModelAdapter(this.valueHolder) { - @Override - protected PropertyChangeListener buildDateChangeListener() { - return this.buildDateChangeListener_(); - } - }; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testSetValueSpinnerModel() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - DateSpinnerModelAdapterTests.this.eventFired = true; - } - }); - Date newDate = new Date(); - newDate.setTime(777777); - this.spinnerModelAdapter.setValue(newDate); - assertTrue(this.eventFired); - assertEquals(777777, ((Date) this.valueHolder.getValue()).getTime()); - } - - public void testSetValueValueHolder() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - DateSpinnerModelAdapterTests.this.eventFired = true; - } - }); - Date newDate = new Date(); - newDate.setTime(777777); - this.valueHolder.setValue(newDate); - assertTrue(this.eventFired); - assertEquals(777777, ((Date) this.spinnerModelAdapter.getValue()).getTime()); - } - - public void testDefaultValue() throws Exception { - Date newDate = new Date(); - newDate.setTime(777777); - this.valueHolder.setValue(newDate); - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - DateSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(777777, ((Date) this.spinnerModelAdapter.getValue()).getTime()); - this.valueHolder.setValue(null); - assertTrue(this.eventFired); - assertFalse(((Date) this.spinnerModelAdapter.getValue()).getTime() == 777777); - } - - public void testHasListeners() throws Exception { - SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder; - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - - ChangeListener listener = new TestChangeListener(); - this.spinnerModelAdapter.addChangeListener(listener); - assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(this.spinnerModelAdapter); - - this.spinnerModelAdapter.removeChangeListener(listener); - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - } - - private void verifyHasNoListeners(SpinnerModel adapter) throws Exception { - assertEquals(0, ((DateSpinnerModelAdapter) adapter).getChangeListeners().length); - } - - private void verifyHasListeners(Object adapter) throws Exception { - assertFalse(((DateSpinnerModelAdapter) adapter).getChangeListeners().length == 0); - } - - public void testNullInitialValue() { - Date today = new Date(); - this.valueHolder = new SimplePropertyValueModel<Object>(); - this.spinnerModelAdapter = new DateSpinnerModelAdapter(this.valueHolder, today) { - @Override - protected PropertyChangeListener buildDateChangeListener() { - return this.buildDateChangeListener_(); - } - }; - - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - DateSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(today, this.spinnerModelAdapter.getValue()); - - Date newDate = new Date(); - newDate.setTime(777777); - this.valueHolder.setValue(newDate); - - assertTrue(this.eventFired); - assertEquals(777777, ((Date) this.spinnerModelAdapter.getValue()).getTime()); - } - - - // ********** inner class ********** - private class TestChangeListener implements ChangeListener { - TestChangeListener() { - super(); - } - public void stateChanged(ChangeEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DocumentAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DocumentAdapterTests.java deleted file mode 100644 index 52206d000e..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DocumentAdapterTests.java +++ /dev/null @@ -1,159 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.event.DocumentEvent.EventType; -import javax.swing.text.Document; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.ReflectionTools; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.DocumentAdapter; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class DocumentAdapterTests extends TestCase { - private WritablePropertyValueModel<String> stringHolder; - Document documentAdapter; - boolean eventFired; - - public DocumentAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.stringHolder = new SimplePropertyValueModel<String>("0123456789"); - this.documentAdapter = new DocumentAdapter(this.stringHolder) { - @Override - protected PropertyChangeListener buildStringListener() { - return this.buildStringListener_(); - } - }; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testRemove() throws Exception { - this.eventFired = false; - this.documentAdapter.addDocumentListener(new TestDocumentListener() { - @Override - public void removeUpdate(DocumentEvent e) { - DocumentAdapterTests.this.eventFired = true; - assertEquals(EventType.REMOVE, e.getType()); - assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument()); - // this will be the removal of "23456" - assertEquals(2, e.getOffset()); - assertEquals(5, e.getLength()); - } - }); - this.documentAdapter.remove(2, 5); - assertTrue(this.eventFired); - assertEquals("01789", this.stringHolder.getValue()); - } - - public void testInsert() throws Exception { - this.eventFired = false; - this.documentAdapter.addDocumentListener(new TestDocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - DocumentAdapterTests.this.eventFired = true; - assertEquals(EventType.INSERT, e.getType()); - assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument()); - // this will be the insert of "xxxxxx" - assertEquals(2, e.getOffset()); - assertEquals(5, e.getLength()); - } - }); - this.documentAdapter.insertString(2, "xxxxx", null); - assertTrue(this.eventFired); - assertEquals("01xxxxx23456789", this.stringHolder.getValue()); - } - - public void testSetValue() throws Exception { - this.eventFired = false; - this.documentAdapter.addDocumentListener(new TestDocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - DocumentAdapterTests.this.eventFired = true; - assertEquals(EventType.INSERT, e.getType()); - assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument()); - // this will be the insert of "foo" - assertEquals(0, e.getOffset()); - assertEquals(3, e.getLength()); - } - @Override - public void removeUpdate(DocumentEvent e) { - assertEquals(EventType.REMOVE, e.getType()); - assertEquals(DocumentAdapterTests.this.documentAdapter, e.getDocument()); - // this will be the removal of "0123456789" - assertEquals(0, e.getOffset()); - assertEquals(10, e.getLength()); - } - }); - assertEquals("0123456789", this.documentAdapter.getText(0, this.documentAdapter.getLength())); - this.stringHolder.setValue("foo"); - assertTrue(this.eventFired); - assertEquals("foo", this.documentAdapter.getText(0, this.documentAdapter.getLength())); - } - - public void testHasListeners() throws Exception { - SimplePropertyValueModel<String> localStringHolder = (SimplePropertyValueModel<String>) this.stringHolder; - assertFalse(localStringHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.documentAdapter); - - DocumentListener listener = new TestDocumentListener(); - this.documentAdapter.addDocumentListener(listener); - assertTrue(localStringHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(this.documentAdapter); - - this.documentAdapter.removeDocumentListener(listener); - assertFalse(localStringHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.documentAdapter); - } - - private void verifyHasNoListeners(Object document) throws Exception { - Object delegate = ReflectionTools.getFieldValue(document, "delegate"); - Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getDocumentListeners"); - assertEquals(0, listeners.length); - } - - private void verifyHasListeners(Object document) throws Exception { - Object delegate = ReflectionTools.getFieldValue(document, "delegate"); - Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getDocumentListeners"); - assertFalse(listeners.length == 0); - } - - -private class TestDocumentListener implements DocumentListener { - TestDocumentListener() { - super(); - } - public void changedUpdate(DocumentEvent e) { - fail("unexpected event"); - } - public void insertUpdate(DocumentEvent e) { - fail("unexpected event"); - } - public void removeUpdate(DocumentEvent e) { - fail("unexpected event"); - } -} - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DocumentAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DocumentAdapterUITest.java deleted file mode 100644 index f199f51150..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/DocumentAdapterUITest.java +++ /dev/null @@ -1,256 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.WindowConstants; -import javax.swing.text.AbstractDocument; -import javax.swing.text.AttributeSet; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; -import javax.swing.text.PlainDocument; -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.DocumentAdapter; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; - -/** - * Play around with a set of entry fields. - */ -@SuppressWarnings("nls") -public class DocumentAdapterUITest { - - private TestModel testModel; - private static final String DEFAULT_NAME = "Scooby Doo"; - private WritablePropertyValueModel<TestModel> testModelHolder; - private WritablePropertyValueModel<String> nameHolder; - private Document nameDocument; - private Document upperCaseNameDocument; - - public static void main(String[] args) throws Exception { - new DocumentAdapterUITest().exec(); - } - - private DocumentAdapterUITest() { - super(); - } - - private void exec() throws Exception { - this.testModel = new TestModel(DEFAULT_NAME); - this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel); - this.nameHolder = this.buildNameHolder(this.testModelHolder); - this.nameDocument = this.buildNameDocument(this.nameHolder); - this.upperCaseNameDocument = this.buildUpperCaseNameDocument(this.nameHolder); - this.openWindow(); - } - - private WritablePropertyValueModel<String> buildNameHolder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, String>(vm, TestModel.NAME_PROPERTY) { - @Override - protected String buildValue_() { - return this.subject.getName(); - } - @Override - protected void setValue_(String value) { - this.subject.setName(value); - } - }; - } - - private Document buildNameDocument(WritablePropertyValueModel<String> stringHolder) { - return new DocumentAdapter(stringHolder); - } - - private Document buildUpperCaseNameDocument(WritablePropertyValueModel<String> stringHolder) { - return new DocumentAdapter(stringHolder, this.buildUpperCaseNameDocumentDelegate()); - } - - private AbstractDocument buildUpperCaseNameDocumentDelegate() { - return new PlainDocument() { - @Override - public void insertString(int offset, String string, AttributeSet a) throws BadLocationException { - if (string == null) { - return; - } - char[] upper = string.toCharArray(); - for (int i = 0; i < upper.length; i++) { - upper[i] = Character.toUpperCase(upper[i]); - } - super.insertString(offset, new String(upper), a); - } - }; - } - - 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.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.buildTextFieldPanel(), BorderLayout.NORTH); - mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); - return mainPanel; - } - - private Component buildTextFieldPanel() { - JPanel taskListPanel = new JPanel(new GridLayout(1, 0)); - taskListPanel.add(this.buildNameTextField()); - taskListPanel.add(this.buildReadOnlyNameTextField()); - taskListPanel.add(this.buildUpperCaseNameTextField()); - return taskListPanel; - } - - private JTextField buildNameTextField() { - return new JTextField(this.nameDocument, null, 0); - } - - private JTextField buildReadOnlyNameTextField() { - JTextField nameTextField = this.buildNameTextField(); - nameTextField.setEditable(false); - return nameTextField; - } - - private JTextField buildUpperCaseNameTextField() { - return new JTextField(this.upperCaseNameDocument, null, 0); - } - - private Component buildControlPanel() { - JPanel controlPanel = new JPanel(new GridLayout(1, 0)); - controlPanel.add(this.buildResetNameButton()); - controlPanel.add(this.buildClearModelButton()); - controlPanel.add(this.buildRestoreModelButton()); - controlPanel.add(this.buildPrintModelButton()); - return controlPanel; - } - - private JButton buildResetNameButton() { - return new JButton(this.buildResetNameAction()); - } - - private Action buildResetNameAction() { - Action action = new AbstractAction("reset name") { - public void actionPerformed(ActionEvent event) { - DocumentAdapterUITest.this.resetName(); - } - }; - action.setEnabled(true); - return action; - } - - void resetName() { - this.testModel.setName(DEFAULT_NAME); - } - - private JButton buildClearModelButton() { - return new JButton(this.buildClearModelAction()); - } - - private Action buildClearModelAction() { - Action action = new AbstractAction("clear model") { - public void actionPerformed(ActionEvent event) { - DocumentAdapterUITest.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) { - DocumentAdapterUITest.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) { - DocumentAdapterUITest.this.printModel(); - } - }; - action.setEnabled(true); - return action; - } - - void printModel() { - System.out.println("name: " + this.testModel.getName()); - } - - - private class TestModel extends AbstractModel { - private String name; - public static final String NAME_PROPERTY = "name"; - - public TestModel(String name) { - this.name = name; - } - public String getName() { - return this.name; - } - public void setName(String name) { - Object old = this.name; - this.name = name; - this.firePropertyChanged(NAME_PROPERTY, old, name); - } - @Override - public String toString() { - return "TestModel(" + this.getName() + ")"; - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/JptUtilityModelValueSwingTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/JptUtilityModelValueSwingTests.java deleted file mode 100644 index 93c6b41c9d..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/JptUtilityModelValueSwingTests.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 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 junit.framework.Test; -import junit.framework.TestSuite; - -public class JptUtilityModelValueSwingTests { - - public static Test suite() { - TestSuite suite = new TestSuite(JptUtilityModelValueSwingTests.class.getPackage().getName()); - - suite.addTestSuite(CheckBoxModelAdapterTests.class); - suite.addTestSuite(ComboBoxModelAdapterTests.class); - suite.addTestSuite(DateSpinnerModelAdapterTests.class); - suite.addTestSuite(DocumentAdapterTests.class); - suite.addTestSuite(ListModelAdapterTests.class); - suite.addTestSuite(ListSpinnerModelAdapterTests.class); - suite.addTestSuite(NumberSpinnerModelAdapterTests.class); - suite.addTestSuite(ObjectListSelectionModelTests.class); - suite.addTestSuite(PrimitiveListTreeModelTests.class); - suite.addTestSuite(RadioButtonModelAdapterTests.class); - suite.addTestSuite(SpinnerModelAdapterTests.class); - suite.addTestSuite(TableModelAdapterTests.class); - suite.addTestSuite(TreeModelAdapterTests.class); - - return suite; - } - - private JptUtilityModelValueSwingTests() { - super(); - throw new UnsupportedOperationException(); - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java deleted file mode 100644 index 0be426de9f..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java +++ /dev/null @@ -1,320 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.SortedSet; -import java.util.TreeSet; - -import javax.swing.ListModel; - -import junit.framework.TestCase; - -import org.eclipse.jpt.common.utility.internal.Bag; -import org.eclipse.jpt.common.utility.internal.HashBag; -import org.eclipse.jpt.common.utility.internal.ReflectionTools; -import org.eclipse.jpt.common.utility.internal.model.value.SimpleCollectionValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SimpleListValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelWrapper; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ListModelAdapter; -import org.eclipse.jpt.common.utility.model.listener.ListChangeListener; -import org.eclipse.jpt.common.utility.model.value.CollectionValueModel; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.tests.internal.model.value.CoordinatedList; - -@SuppressWarnings("nls") -public class ListModelAdapterTests extends TestCase { - - public ListModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - // nothing yet... - } - - @Override - protected void tearDown() throws Exception { - // nothing yet... - super.tearDown(); - } - - private ListModelAdapter buildListModel(ListValueModel<String> listHolder) { - return new ListModelAdapter(listHolder) { - @Override - protected ListChangeListener buildListChangeListener() { - return this.buildListChangeListener_(); - } - }; - } - - private ListModel buildListModel(CollectionValueModel<String> collectionHolder) { - return new ListModelAdapter(collectionHolder) { - @Override - protected ListChangeListener buildListChangeListener() { - return this.buildListChangeListener_(); - } - }; - } - - public void testCollectionSynchronization() { - SimpleCollectionValueModel<String> collectionHolder = this.buildCollectionHolder(); - ListModel listModel = this.buildListModel(collectionHolder); - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - assertEquals(6, synchList.size()); - this.compare(listModel, synchList); - - collectionHolder.add("tom"); - collectionHolder.add("dick"); - collectionHolder.add("harry"); - collectionHolder.add(null); - assertEquals(10, synchList.size()); - this.compare(listModel, synchList); - - collectionHolder.remove("foo"); - collectionHolder.remove("jar"); - collectionHolder.remove("harry"); - collectionHolder.remove(null); - assertEquals(6, synchList.size()); - this.compare(listModel, synchList); - } - - public void testListSynchronization() { - SimpleListValueModel<String> listHolder = this.buildListHolder(); - ListModel listModel = this.buildListModel(listHolder); - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - assertEquals(6, synchList.size()); - this.compare(listModel, synchList); - - listHolder.add(6, "tom"); - listHolder.add(7, "dick"); - listHolder.add(8, "harry"); - listHolder.add(9, null); - assertEquals(10, synchList.size()); - this.compare(listModel, synchList); - - listHolder.remove(9); - listHolder.remove(8); - listHolder.remove(4); - listHolder.remove(0); - assertEquals(6, synchList.size()); - this.compare(listModel, synchList); - } - - public void testSetModel() { - SimpleListValueModel<String> listHolder1 = this.buildListHolder(); - ListModelAdapter listModel = this.buildListModel(listHolder1); - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - assertTrue(listHolder1.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - assertEquals(6, synchList.size()); - this.compare(listModel, synchList); - - SimpleListValueModel<String> listHolder2 = this.buildListHolder2(); - listModel.setModel(listHolder2); - assertEquals(3, synchList.size()); - this.compare(listModel, synchList); - assertTrue(listHolder1.hasNoListChangeListeners(ListValueModel.LIST_VALUES)); - assertTrue(listHolder2.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - - listModel.setModel(new SimpleListValueModel<String>()); - assertEquals(0, synchList.size()); - this.compare(listModel, synchList); - assertTrue(listHolder1.hasNoListChangeListeners(ListValueModel.LIST_VALUES)); - assertTrue(listHolder2.hasNoListChangeListeners(ListValueModel.LIST_VALUES)); - } - - private void compare(ListModel listModel, List<String> list) { - assertEquals(listModel.getSize(), list.size()); - for (int i = 0; i < listModel.getSize(); i++) { - assertEquals(listModel.getElementAt(i), list.get(i)); - } - } - - public void testCollectionSort() { - this.verifyCollectionSort(null); - } - - public void testListSort() { - this.verifyListSort(null); - } - - public void testCustomCollectionSort() { - this.verifyCollectionSort(this.buildCustomComparator()); - } - - public void testCustomListSort() { - this.verifyListSort(this.buildCustomComparator()); - } - - private Comparator<String> buildCustomComparator() { - // sort with reverse order - return new Comparator<String>() { - public int compare(String s1, String s2) { - return s2.compareTo(s1); - } - }; - } - - private void verifyCollectionSort(Comparator<String> comparator) { - SimpleCollectionValueModel<String> collectionHolder = this.buildCollectionHolder(); - ListModel listModel = this.buildListModel(new SortedListValueModelAdapter<String>(collectionHolder, comparator)); - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - assertEquals(6, synchList.size()); - this.compareSort(listModel, synchList, comparator); - - collectionHolder.add("tom"); - collectionHolder.add("dick"); - collectionHolder.add("harry"); - assertEquals(9, synchList.size()); - this.compareSort(listModel, synchList, comparator); - - collectionHolder.remove("foo"); - collectionHolder.remove("jar"); - collectionHolder.remove("harry"); - assertEquals(6, synchList.size()); - this.compareSort(listModel, synchList, comparator); - } - - private void verifyListSort(Comparator<String> comparator) { - SimpleListValueModel<String> listHolder = this.buildListHolder(); - ListModel listModel = this.buildListModel(new SortedListValueModelWrapper<String>(listHolder, comparator)); - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - assertEquals(6, synchList.size()); - this.compareSort(listModel, synchList, comparator); - - listHolder.add(0, "tom"); - listHolder.add(0, "dick"); - listHolder.add(0, "harry"); - assertEquals(9, synchList.size()); - this.compareSort(listModel, synchList, comparator); - - listHolder.remove(8); - listHolder.remove(4); - listHolder.remove(0); - listHolder.remove(5); - assertEquals(5, synchList.size()); - this.compareSort(listModel, synchList, comparator); - } - - private void compareSort(ListModel listModel, List<String> list, Comparator<String> comparator) { - SortedSet<String> ss = new TreeSet<String>(comparator); - for (int i = 0; i < listModel.getSize(); i++) { - ss.add((String) listModel.getElementAt(i)); - } - assertEquals(ss.size(), list.size()); - for (Iterator<String> stream1 = ss.iterator(), stream2 = list.iterator(); stream1.hasNext(); ) { - assertEquals(stream1.next(), stream2.next()); - } - } - - public void testHasListeners() throws Exception { - SimpleListValueModel<String> listHolder = this.buildListHolder(); - assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - - ListModel listModel = this.buildListModel(listHolder); - assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - this.verifyHasNoListeners(listModel); - - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - this.verifyHasListeners(listModel); - - listModel.removeListDataListener(synchList); - assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES)); - this.verifyHasNoListeners(listModel); - } - - public void testGetSize() throws Exception { - SimpleListValueModel<String> listHolder = this.buildListHolder(); - ListModel listModel = this.buildListModel(listHolder); - this.verifyHasNoListeners(listModel); - assertEquals(6, listModel.getSize()); - - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - this.verifyHasListeners(listModel); - assertEquals(6, listModel.getSize()); - - listModel.removeListDataListener(synchList); - this.verifyHasNoListeners(listModel); - assertEquals(6, listModel.getSize()); - } - - public void testGetElementAt() throws Exception { - SimpleListValueModel<String> listHolder = this.buildListHolder(); - ListModel listModel = this.buildListModel(new SortedListValueModelWrapper<String>(listHolder)); - CoordinatedList<String> synchList = new CoordinatedList<String>(listModel); - this.verifyHasListeners(listModel); - assertEquals("bar", listModel.getElementAt(0)); - assertEquals("bar", synchList.get(0)); - } - - private void verifyHasNoListeners(ListModel listModel) throws Exception { - boolean hasNoListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasNoListDataListeners")).booleanValue(); - assertTrue(hasNoListeners); - } - - private void verifyHasListeners(ListModel listModel) throws Exception { - boolean hasListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasListDataListeners")).booleanValue(); - assertTrue(hasListeners); - } - - private SimpleCollectionValueModel<String> buildCollectionHolder() { - return new SimpleCollectionValueModel<String>(this.buildCollection()); - } - - private Collection<String> buildCollection() { - Bag<String> bag = new HashBag<String>(); - this.populateCollection(bag); - return bag; - } - - private SimpleListValueModel<String> buildListHolder() { - return new SimpleListValueModel<String>(this.buildList()); - } - - private List<String> buildList() { - List<String> list = new ArrayList<String>(); - this.populateCollection(list); - return list; - } - - private void populateCollection(Collection<String> c) { - c.add("foo"); - c.add("bar"); - c.add("baz"); - c.add("joo"); - c.add("jar"); - c.add("jaz"); - } - - private SimpleListValueModel<String> buildListHolder2() { - return new SimpleListValueModel<String>(this.buildList2()); - } - - private List<String> buildList2() { - List<String> list = new ArrayList<String>(); - this.populateCollection2(list); - return list; - } - - private void populateCollection2(Collection<String> c) { - c.add("tom"); - c.add("dick"); - c.add("harry"); - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterUITest.java deleted file mode 100644 index 17fd76236d..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterUITest.java +++ /dev/null @@ -1,370 +0,0 @@ -/******************************************************************************* - * 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.TextField; -import java.awt.event.ActionEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Date; -import java.util.List; -import java.util.ListIterator; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.ListModel; -import javax.swing.WindowConstants; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.model.AbstractModel; -import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelWrapper; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ListModelAdapter; -import org.eclipse.jpt.common.utility.internal.swing.Displayable; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; - -/** - * an example UI for testing various permutations of the ListModelAdapter - */ -@SuppressWarnings("nls") -public class ListModelAdapterUITest { - - private WritablePropertyValueModel<TaskList> taskListHolder; - private TextField taskTextField; - - public static void main(String[] args) throws Exception { - new ListModelAdapterUITest().exec(args); - } - - private ListModelAdapterUITest() { - super(); - } - - private void exec(@SuppressWarnings("unused") String[] args) throws Exception { - this.taskListHolder = new SimplePropertyValueModel<TaskList>(new TaskList()); - this.openWindow(); - } - - 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(800, 400); - 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.buildTaskListPanel(), BorderLayout.CENTER); - mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); - return mainPanel; - } - - private Component buildTaskListPanel() { - JPanel taskListPanel = new JPanel(new GridLayout(0, 1)); - taskListPanel.add(this.buildPrimitiveTaskListPanel()); - taskListPanel.add(this.buildDisplayableTaskListPanel()); - return taskListPanel; - } - - private Component buildPrimitiveTaskListPanel() { - JPanel taskListPanel = new JPanel(new GridLayout(1, 0)); - taskListPanel.add(this.buildUnsortedPrimitiveListPanel()); - taskListPanel.add(this.buildStandardSortedPrimitiveListPanel()); - taskListPanel.add(this.buildCustomSortedPrimitiveListPanel()); - return taskListPanel; - } - - private Component buildDisplayableTaskListPanel() { - JPanel taskListPanel = new JPanel(new GridLayout(1, 0)); - taskListPanel.add(this.buildUnsortedDisplayableListPanel()); - taskListPanel.add(this.buildStandardSortedDisplayableListPanel()); - taskListPanel.add(this.buildCustomSortedDisplayableListPanel()); - return taskListPanel; - } - - private Component buildUnsortedPrimitiveListPanel() { - return this.buildListPanel("primitive unsorted", this.buildUnsortedPrimitiveListModel()); - } - - private Component buildStandardSortedPrimitiveListPanel() { - return this.buildListPanel("primitive sorted", this.buildStandardSortedPrimitiveListModel()); - } - - private Component buildCustomSortedPrimitiveListPanel() { - return this.buildListPanel("primitive reverse sorted", this.buildCustomSortedPrimitiveListModel()); - } - - private Component buildUnsortedDisplayableListPanel() { - return this.buildListPanel("displayable unsorted", this.buildUnsortedDisplayableListModel()); - } - - private Component buildStandardSortedDisplayableListPanel() { - return this.buildListPanel("displayable sorted", this.buildStandardSortedDisplayableListModel()); - } - - private Component buildCustomSortedDisplayableListPanel() { - return this.buildListPanel("displayable reverse sorted", this.buildCustomSortedDisplayableListModel()); - } - - private ListModel buildUnsortedPrimitiveListModel() { - return new ListModelAdapter(this.buildPrimitiveTaskListAdapter()); - } - - private ListModel buildStandardSortedPrimitiveListModel() { - return new ListModelAdapter(new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter())); - } - - private ListModel buildCustomSortedPrimitiveListModel() { - return new ListModelAdapter(new SortedListValueModelWrapper<String>(this.buildPrimitiveTaskListAdapter(), this.buildCustomStringComparator())); - } - - private ListModel buildUnsortedDisplayableListModel() { - return new ListModelAdapter(this.buildDisplayableTaskListAdapter()); - } - - private ListModel buildStandardSortedDisplayableListModel() { - return new ListModelAdapter(new SortedListValueModelWrapper<Task>(this.buildDisplayableTaskListAdapter())); - } - - private ListModel buildCustomSortedDisplayableListModel() { - return new ListModelAdapter(new SortedListValueModelWrapper<Task>(this.buildDisplayableTaskListAdapter(), this.buildCustomTaskObjectComparator())); - } - - private Component buildListPanel(String label, ListModel listModel) { - JPanel listPanel = new JPanel(new BorderLayout()); - JLabel listLabel = new JLabel(" " + label); - listPanel.add(listLabel, BorderLayout.NORTH); - - JList listBox = new JList(); - listBox.setModel(listModel); - listBox.setDoubleBuffered(true); - listLabel.setLabelFor(listBox); - listPanel.add(new JScrollPane(listBox), BorderLayout.CENTER); - return listPanel; - } - - private Comparator<String> buildCustomStringComparator() { - return new Comparator<String>() { - public int compare(String s1, String s2) { - return s2.compareTo(s1); - } - }; - } - - private Comparator<Task> buildCustomTaskObjectComparator() { - return new Comparator<Task>() { - public int compare(Task to1, Task to2) { - return to2.displayString().compareTo(to1.displayString()); - } - }; - } - - private ListValueModel<String> buildPrimitiveTaskListAdapter() { - return new ListAspectAdapter<TaskList, String>(TaskList.TASK_NAMES_LIST, this.taskList()) { - @Override - protected ListIterator<String> listIterator_() { - return this.subject.taskNames(); - } - }; - } - - private ListValueModel<Task> buildDisplayableTaskListAdapter() { - return new ListAspectAdapter<TaskList, Task>(TaskList.TASKS_LIST, this.taskList()) { - @Override - protected ListIterator<Task> listIterator_() { - return this.subject.tasks(); - } - }; - } - - private Component buildControlPanel() { - JPanel controlPanel = new JPanel(new BorderLayout()); - controlPanel.add(this.buildAddRemoveTaskPanel(), BorderLayout.CENTER); - controlPanel.add(this.buildClearButton(), BorderLayout.EAST); - return controlPanel; - } - - private Component buildAddRemoveTaskPanel() { - JPanel addRemoveTaskPanel = new JPanel(new BorderLayout()); - addRemoveTaskPanel.add(this.buildAddButton(), BorderLayout.WEST); - addRemoveTaskPanel.add(this.buildTaskTextField(), BorderLayout.CENTER); - addRemoveTaskPanel.add(this.buildRemoveButton(), BorderLayout.EAST); - return addRemoveTaskPanel; - } - - private String getTask() { - return this.taskTextField.getText(); - } - - private TaskList taskList() { - return this.taskListHolder.getValue(); - } - - void addTask() { - String task = this.getTask(); - if (task.length() != 0) { - this.taskList().addTask(task); - } - } - - void removeTask() { - String task = this.getTask(); - if (task.length() != 0) { - this.taskList().removeTask(task); - } - } - - void clearTasks() { - this.taskList().clearTasks(); - } - - private TextField buildTaskTextField() { - this.taskTextField = new TextField(); - return this.taskTextField; - } - - private JButton buildAddButton() { - return new JButton(this.buildAddAction()); - } - - private Action buildAddAction() { - Action action = new AbstractAction("add") { - public void actionPerformed(ActionEvent event) { - ListModelAdapterUITest.this.addTask(); - } - }; - action.setEnabled(true); - return action; - } - - private JButton buildRemoveButton() { - return new JButton(this.buildRemoveAction()); - } - - private Action buildRemoveAction() { - Action action = new AbstractAction("remove") { - public void actionPerformed(ActionEvent event) { - ListModelAdapterUITest.this.removeTask(); - } - }; - action.setEnabled(true); - return action; - } - - private JButton buildClearButton() { - return new JButton(this.buildClearAction()); - } - - private Action buildClearAction() { - Action action = new AbstractAction("clear") { - public void actionPerformed(ActionEvent event) { - ListModelAdapterUITest.this.clearTasks(); - } - }; - action.setEnabled(true); - return action; - } - - public class TaskList extends AbstractModel { - private List<String> taskNames = new ArrayList<String>(); - private List<Task> taskObjects = new ArrayList<Task>(); - public static final String TASK_NAMES_LIST = "taskNames"; - public static final String TASKS_LIST = "tasks"; - TaskList() { - super(); - } - public ListIterator<String> taskNames() { - return this.taskNames.listIterator(); - } - public ListIterator<Task> tasks() { - return this.taskObjects.listIterator(); - } - public void addTask(String taskName) { - int index = this.taskNames.size(); - this.taskNames.add(index, taskName); - this.fireItemAdded(TASK_NAMES_LIST, index, taskName); - - Task taskObject = new Task(taskName); - this.taskObjects.add(index, taskObject); - this.fireItemAdded(TASKS_LIST, index, taskObject); - } - public void removeTask(String taskName) { - int index = this.taskNames.indexOf(taskName); - if (index != -1) { - Object removedTask = this.taskNames.remove(index); - this.fireItemRemoved(TASK_NAMES_LIST, index, removedTask); - // assume the indexes match... - Object removedTaskObject = this.taskObjects.remove(index); - this.fireItemRemoved(TASKS_LIST, index, removedTaskObject); - } - } - public void clearTasks() { - this.taskNames.clear(); - this.fireListChanged(TASK_NAMES_LIST, this.taskNames); - this.taskObjects.clear(); - this.fireListChanged(TASKS_LIST, this.taskObjects); - } - } - - public class Task extends AbstractModel implements Displayable { - private String name; - private Date creationTimeStamp; - public Task(String name) { - this.name = name; - this.creationTimeStamp = new Date(); - } - public String displayString() { - return this.name + ": " + this.creationTimeStamp.getTime(); - } - public Icon icon() { - return null; - } - public String getName() { - return this.name; - } - public void setName(String name) { - Object old = this.name; - this.name = name; - this.firePropertyChanged(DISPLAY_STRING_PROPERTY, old, name); - } - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.displayString()); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListSpinnerModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListSpinnerModelAdapterTests.java deleted file mode 100644 index 8260698bf7..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListSpinnerModelAdapterTests.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 javax.swing.SpinnerModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ListSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class ListSpinnerModelAdapterTests extends TestCase { - private WritablePropertyValueModel<Object> valueHolder; - private SpinnerModel spinnerModelAdapter; - boolean eventFired; - private static final String[] VALUE_LIST = {"red", "green", "blue"}; - private static final String DEFAULT_VALUE = VALUE_LIST[0]; - - public ListSpinnerModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.valueHolder = new SimplePropertyValueModel<Object>(DEFAULT_VALUE); - this.spinnerModelAdapter = new ListSpinnerModelAdapter(this.valueHolder, VALUE_LIST) { - @Override - protected PropertyChangeListener buildValueChangeListener() { - return this.buildValueChangeListener_(); - } - }; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testSetValueSpinnerModel() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - ListSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(DEFAULT_VALUE, this.valueHolder.getValue()); - this.spinnerModelAdapter.setValue(VALUE_LIST[2]); - assertTrue(this.eventFired); - assertEquals(VALUE_LIST[2], this.valueHolder.getValue()); - } - - public void testSetValueValueHolder() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - ListSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(DEFAULT_VALUE, this.spinnerModelAdapter.getValue()); - this.valueHolder.setValue(VALUE_LIST[2]); - assertTrue(this.eventFired); - assertEquals(VALUE_LIST[2], this.spinnerModelAdapter.getValue()); - } - - public void testDefaultValue() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - ListSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(DEFAULT_VALUE, this.spinnerModelAdapter.getValue()); - - this.valueHolder.setValue(VALUE_LIST[2]); - assertTrue(this.eventFired); - assertEquals(VALUE_LIST[2], this.spinnerModelAdapter.getValue()); - - this.eventFired = false; - this.valueHolder.setValue(null); - assertTrue(this.eventFired); - assertEquals(VALUE_LIST[0], this.spinnerModelAdapter.getValue()); - } - - public void testHasListeners() throws Exception { - SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder; - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - - ChangeListener listener = new TestChangeListener(); - this.spinnerModelAdapter.addChangeListener(listener); - assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(this.spinnerModelAdapter); - - this.spinnerModelAdapter.removeChangeListener(listener); - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - } - - private void verifyHasNoListeners(SpinnerModel adapter) throws Exception { - assertEquals(0, ((ListSpinnerModelAdapter) adapter).getChangeListeners().length); - } - - private void verifyHasListeners(Object adapter) throws Exception { - assertFalse(((ListSpinnerModelAdapter) adapter).getChangeListeners().length == 0); - } - - - private class TestChangeListener implements ChangeListener { - TestChangeListener() { - super(); - } - public void stateChanged(ChangeEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/NumberSpinnerModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/NumberSpinnerModelAdapterTests.java deleted file mode 100644 index be5d8e16db..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/NumberSpinnerModelAdapterTests.java +++ /dev/null @@ -1,148 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 javax.swing.SpinnerModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.NumberSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class NumberSpinnerModelAdapterTests extends TestCase { - private WritablePropertyValueModel<Number> valueHolder; - private SpinnerModel spinnerModelAdapter; - boolean eventFired; - - public NumberSpinnerModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.valueHolder = new SimplePropertyValueModel<Number>(new Integer(0)); - this.spinnerModelAdapter = new NumberSpinnerModelAdapter(this.valueHolder, -33, 33, 1) { - @Override - protected PropertyChangeListener buildNumberChangeListener() { - return this.buildNumberChangeListener_(); - } - }; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testSetValueSpinnerModel() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - NumberSpinnerModelAdapterTests.this.eventFired = true; - } - }); - this.spinnerModelAdapter.setValue(new Integer(5)); - assertTrue(this.eventFired); - assertEquals(new Integer(5), this.valueHolder.getValue()); - } - - public void testSetValueValueHolder() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - NumberSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(new Integer(0), this.spinnerModelAdapter.getValue()); - this.valueHolder.setValue(new Integer(7)); - assertTrue(this.eventFired); - assertEquals(new Integer(7), this.spinnerModelAdapter.getValue()); - } - - public void testDefaultValue() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - NumberSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(new Integer(0), this.spinnerModelAdapter.getValue()); - this.valueHolder.setValue(null); - assertTrue(this.eventFired); - assertEquals(new Integer(-33), this.spinnerModelAdapter.getValue()); - } - - public void testHasListeners() throws Exception { - SimplePropertyValueModel<Number> localValueHolder = (SimplePropertyValueModel<Number>) this.valueHolder; - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - - ChangeListener listener = new TestChangeListener(); - this.spinnerModelAdapter.addChangeListener(listener); - assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(this.spinnerModelAdapter); - - this.spinnerModelAdapter.removeChangeListener(listener); - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - } - - private void verifyHasNoListeners(SpinnerModel adapter) throws Exception { - assertEquals(0, ((NumberSpinnerModelAdapter) adapter).getChangeListeners().length); - } - - private void verifyHasListeners(Object adapter) throws Exception { - assertFalse(((NumberSpinnerModelAdapter) adapter).getChangeListeners().length == 0); - } - - public void testNullInitialValue() { - this.valueHolder = new SimplePropertyValueModel<Number>(); - this.spinnerModelAdapter = new NumberSpinnerModelAdapter(this.valueHolder, new Integer(-33), new Integer(33), new Integer(1), new Integer(0)) { - @Override - protected PropertyChangeListener buildNumberChangeListener() { - return this.buildNumberChangeListener_(); - } - }; - - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - NumberSpinnerModelAdapterTests.this.eventFired = true; - } - }); - assertEquals(new Integer(0), this.spinnerModelAdapter.getValue()); - this.valueHolder.setValue(new Integer(7)); - assertTrue(this.eventFired); - assertEquals(new Integer(7), this.spinnerModelAdapter.getValue()); - } - - - // ********** inner class ********** - private class TestChangeListener implements ChangeListener { - TestChangeListener() { - super(); - } - public void stateChanged(ChangeEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ObjectListSelectionModelTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ObjectListSelectionModelTests.java deleted file mode 100644 index 4f55864415..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ObjectListSelectionModelTests.java +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* - * 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 javax.swing.DefaultListModel; -import javax.swing.ListModel; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; - -import junit.framework.TestCase; - -import org.eclipse.jpt.common.utility.internal.ArrayTools; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ObjectListSelectionModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class ObjectListSelectionModelTests extends TestCase { - private DefaultListModel listModel; - private ObjectListSelectionModel selectionModel; - - public ObjectListSelectionModelTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.listModel = this.buildListModel(); - this.selectionModel = this.buildSelectionModel(this.listModel); - } - - private DefaultListModel buildListModel() { - DefaultListModel lm = new DefaultListModel(); - lm.addElement("foo"); - lm.addElement("bar"); - lm.addElement("baz"); - return lm; - } - - private ObjectListSelectionModel buildSelectionModel(ListModel lm) { - return new ObjectListSelectionModel(lm); - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testListDataListener() { - this.selectionModel.addListSelectionListener(this.buildListSelectionListener()); - this.selectionModel.setSelectionInterval(0, 0); - assertEquals("foo", this.selectionModel.selectedValue()); - this.listModel.set(0, "jar"); - assertEquals("jar", this.selectionModel.selectedValue()); - } - - public void testGetSelectedValue() { - this.selectionModel.setSelectionInterval(0, 0); - assertEquals("foo", this.selectionModel.selectedValue()); - } - - public void testGetSelectedValues() { - this.selectionModel.setSelectionInterval(0, 0); - this.selectionModel.addSelectionInterval(2, 2); - assertEquals(2, this.selectionModel.selectedValues().length); - assertTrue(ArrayTools.contains(this.selectionModel.selectedValues(), "foo")); - assertTrue(ArrayTools.contains(this.selectionModel.selectedValues(), "baz")); - } - - public void testSetSelectedValue() { - this.selectionModel.setSelectedValue("foo"); - assertEquals(0, this.selectionModel.getMinSelectionIndex()); - assertEquals(0, this.selectionModel.getMaxSelectionIndex()); - } - - public void testSetSelectedValues() { - this.selectionModel.setSelectedValues(new Object[] {"foo", "baz"}); - assertEquals(0, this.selectionModel.getMinSelectionIndex()); - assertEquals(2, this.selectionModel.getMaxSelectionIndex()); - } - - public void testAddSelectedValue() { - this.listModel.addElement("joo"); - this.listModel.addElement("jar"); - this.listModel.addElement("jaz"); - this.selectionModel.setSelectedValue("foo"); - this.selectionModel.addSelectedValue("jaz"); - assertEquals(0, this.selectionModel.getMinSelectionIndex()); - assertEquals(5, this.selectionModel.getMaxSelectionIndex()); - assertTrue(this.selectionModel.isSelectedIndex(0)); - assertFalse(this.selectionModel.isSelectedIndex(1)); - assertFalse(this.selectionModel.isSelectedIndex(2)); - assertFalse(this.selectionModel.isSelectedIndex(3)); - assertFalse(this.selectionModel.isSelectedIndex(4)); - assertTrue(this.selectionModel.isSelectedIndex(5)); - } - - public void testAddSelectedValues() { - this.listModel.addElement("joo"); - this.listModel.addElement("jar"); - this.listModel.addElement("jaz"); - this.selectionModel.setSelectedValue("foo"); - this.selectionModel.addSelectedValues(new Object[] {"bar", "jar"}); - assertEquals(0, this.selectionModel.getMinSelectionIndex()); - assertEquals(4, this.selectionModel.getMaxSelectionIndex()); - assertTrue(this.selectionModel.isSelectedIndex(0)); - assertTrue(this.selectionModel.isSelectedIndex(1)); - assertFalse(this.selectionModel.isSelectedIndex(2)); - assertFalse(this.selectionModel.isSelectedIndex(3)); - assertTrue(this.selectionModel.isSelectedIndex(4)); - assertFalse(this.selectionModel.isSelectedIndex(5)); - } - - public void testRemoveSelectedValue() { - this.listModel.addElement("joo"); - this.listModel.addElement("jar"); - this.listModel.addElement("jaz"); - this.selectionModel.setSelectedValues(new Object[] {"foo", "baz", "jar"}); - this.selectionModel.removeSelectedValue("jar"); - assertEquals(0, this.selectionModel.getMinSelectionIndex()); - assertEquals(2, this.selectionModel.getMaxSelectionIndex()); - assertTrue(this.selectionModel.isSelectedIndex(0)); - assertFalse(this.selectionModel.isSelectedIndex(1)); - assertTrue(this.selectionModel.isSelectedIndex(2)); - assertFalse(this.selectionModel.isSelectedIndex(3)); - assertFalse(this.selectionModel.isSelectedIndex(4)); - assertFalse(this.selectionModel.isSelectedIndex(5)); - } - - public void testRemoveSelectedValues() { - this.listModel.addElement("joo"); - this.listModel.addElement("jar"); - this.listModel.addElement("jaz"); - this.selectionModel.setSelectedValues(new Object[] {"foo", "baz", "joo", "jar"}); - this.selectionModel.removeSelectedValues(new Object[] {"foo", "joo"}); - assertEquals(2, this.selectionModel.getMinSelectionIndex()); - assertEquals(4, this.selectionModel.getMaxSelectionIndex()); - assertFalse(this.selectionModel.isSelectedIndex(0)); - assertFalse(this.selectionModel.isSelectedIndex(1)); - assertTrue(this.selectionModel.isSelectedIndex(2)); - assertFalse(this.selectionModel.isSelectedIndex(3)); - assertTrue(this.selectionModel.isSelectedIndex(4)); - assertFalse(this.selectionModel.isSelectedIndex(5)); - } - - public void testGetAnchorSelectedValue() { - this.selectionModel.setAnchorSelectionIndex(1); - assertEquals("bar", this.selectionModel.getAnchorSelectedValue()); - } - - public void testGetLeadSelectedValue() { - this.selectionModel.setSelectedValue("bar"); - assertEquals("bar", this.selectionModel.getLeadSelectedValue()); - this.selectionModel.setSelectedValues(new Object[] {"foo", "baz"}); - assertEquals("baz", this.selectionModel.getLeadSelectedValue()); - } - - public void testGetMinMaxSelectedValue() { - this.listModel.addElement("joo"); - this.listModel.addElement("jar"); - this.listModel.addElement("jaz"); - this.selectionModel.setSelectedValue("foo"); - this.selectionModel.addSelectedValues(new Object[] {"bar", "jar"}); - assertEquals("foo", this.selectionModel.getMinSelectedValue()); - assertEquals("jar", this.selectionModel.getMaxSelectedValue()); - } - - public void testValueIsSelected() { - this.listModel.addElement("joo"); - this.listModel.addElement("jar"); - this.listModel.addElement("jaz"); - this.selectionModel.setSelectedValue("foo"); - this.selectionModel.addSelectedValues(new Object[] {"bar", "jar"}); - assertTrue(this.selectionModel.valueIsSelected("foo")); - assertTrue(this.selectionModel.valueIsSelected("bar")); - assertTrue(this.selectionModel.valueIsSelected("jar")); - assertFalse(this.selectionModel.valueIsSelected("baz")); - } - - public void testHasListeners() throws Exception { - ListSelectionListener listener = this.buildListSelectionListener(); - assertEquals(0, this.listModel.getListDataListeners().length); - this.selectionModel.addListSelectionListener(listener); - assertEquals(1, this.listModel.getListDataListeners().length); - this.selectionModel.removeListSelectionListener(listener); - assertEquals(0, this.listModel.getListDataListeners().length); - } - - private ListSelectionListener buildListSelectionListener() { - return new ListSelectionListener() { - public void valueChanged(ListSelectionEvent e) { - // do nothing for now... - } - }; - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/PrimitiveListTreeModelTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/PrimitiveListTreeModelTests.java deleted file mode 100644 index eca1bee8dd..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/PrimitiveListTreeModelTests.java +++ /dev/null @@ -1,198 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.ListIterator; -import javax.swing.event.TreeModelEvent; -import javax.swing.event.TreeModelListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreeModel; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.iterators.ReadOnlyListIterator; -import org.eclipse.jpt.common.utility.internal.model.AbstractModel; -import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.PrimitiveListTreeModel; -import org.eclipse.jpt.common.utility.model.listener.ListChangeListener; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class PrimitiveListTreeModelTests extends TestCase { - TestModel testModel; - private TreeModel treeModel; - - public PrimitiveListTreeModelTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.testModel = this.buildTestModel(); - this.treeModel = this.buildTreeModel(); - } - - private TestModel buildTestModel() { - return new TestModel(); - } - - private TreeModel buildTreeModel() { - return new PrimitiveListTreeModel(this.buildListValueModel()) { - @Override - protected void primitiveChanged(int index, Object newValue) { - if ( ! newValue.equals("")) { - PrimitiveListTreeModelTests.this.testModel.replaceName(index, (String) newValue); - } - } - @Override - protected ListChangeListener buildListChangeListener() { - return this.buildListChangeListener_(); - } - }; - } - - private ListValueModel<?> buildListValueModel() { - return new ListAspectAdapter<TestModel, String>(TestModel.NAMES_LIST, this.testModel) { - @Override - protected ListIterator<String> listIterator_() { - return this.subject.names(); - } - @Override - public String get(int index) { - return this.subject.getName(index); - } - @Override - public int size() { - return this.subject.namesSize(); - } - }; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testAddPrimitive() { - this.treeModel.addTreeModelListener(new TestTreeModelListener() { - @Override - public void treeNodesInserted(TreeModelEvent e) { - PrimitiveListTreeModelTests.this.verifyTreeModelEvent(e, new int[] {0}, new String[] {"foo"}); - } - }); - this.testModel.addName("foo"); - } - - public void testRemovePrimitive() { - this.testModel.addName("foo"); - this.testModel.addName("bar"); - this.testModel.addName("baz"); - this.treeModel.addTreeModelListener(new TestTreeModelListener() { - @Override - public void treeNodesRemoved(TreeModelEvent e) { - PrimitiveListTreeModelTests.this.verifyTreeModelEvent(e, new int[] {1}, new String[] {"bar"}); - } - }); - String name = this.testModel.removeName(1); - assertEquals("bar", name); - } - - public void testReplacePrimitive() { - this.testModel.addName("foo"); - this.testModel.addName("bar"); - this.testModel.addName("baz"); - this.treeModel.addTreeModelListener(new TestTreeModelListener() { - @Override - public void treeNodesChanged(TreeModelEvent e) { - PrimitiveListTreeModelTests.this.verifyTreeModelEvent(e, new int[] {1}, new String[] {"jar"}); - } - }); - String name = this.testModel.replaceName(1, "jar"); - assertEquals("bar", name); - } - - void verifyTreeModelEvent(TreeModelEvent e, int[] expectedChildIndices, String[] expectedNames) { - assertTrue(Arrays.equals(expectedChildIndices, e.getChildIndices())); - Object[] actualChildren = e.getChildren(); - assertEquals(expectedNames.length, actualChildren.length); - for (int i = 0; i < expectedNames.length; i++) { - DefaultMutableTreeNode node = (DefaultMutableTreeNode) actualChildren[i]; - assertEquals(expectedNames[i], node.getUserObject()); - } - assertEquals(1, e.getPath().length); - assertEquals(this.treeModel.getRoot(), e.getPath()[0]); - assertEquals(this.treeModel, e.getSource()); - } - - -// ********** inner classes ********** - - class TestModel extends AbstractModel { - private final List<String> names; - static final String NAMES_LIST = "names"; - - TestModel() { - super(); - this.names = new ArrayList<String>(); - } - - public ListIterator<String> names() { - return new ReadOnlyListIterator<String>(this.names); - } - public int namesSize() { - return this.names.size(); - } - public String getName(int index) { - return this.names.get(index); - } - public void addName(int index, String name) { - this.addItemToList(index, name, this.names, NAMES_LIST); - } - public void addName(String name) { - this.addName(this.namesSize(), name); - } - public void addNames(int index, List<String> list) { - this.addItemsToList(index, this.names, list, NAMES_LIST); - } - public void addNames(List<String> list) { - this.addNames(this.namesSize(), list); - } - public String removeName(int index) { - return this.removeItemFromList(index, this.names, NAMES_LIST); - } - public List<String> removeNames(int index, int length) { - return this.removeItemsFromList(index, length, this.names, NAMES_LIST); - } - public String replaceName(int index, String newName) { - return this.setItemInList(index, newName, this.names, NAMES_LIST); - } - } - - - public class TestTreeModelListener implements TreeModelListener { - public void treeNodesChanged(TreeModelEvent e) { - fail("unexpected event"); - } - public void treeNodesInserted(TreeModelEvent e) { - fail("unexpected event"); - } - public void treeNodesRemoved(TreeModelEvent e) { - fail("unexpected event"); - } - public void treeStructureChanged(TreeModelEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterTests.java deleted file mode 100644 index edd9e93504..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterTests.java +++ /dev/null @@ -1,230 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 javax.swing.ButtonModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.EventListenerList; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.ReflectionTools; -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.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class RadioButtonModelAdapterTests extends TestCase { - private WritablePropertyValueModel<Object> valueHolder; - - private ButtonModel redButtonModelAdapter; - private ChangeListener redListener; - boolean redEventFired; - - private ButtonModel greenButtonModelAdapter; - private ChangeListener greenListener; - boolean greenEventFired; - - private ButtonModel blueButtonModelAdapter; - private ChangeListener blueListener; - boolean blueEventFired; - -// private ButtonGroup buttonGroup; // DO NOT use a ButtonGroup - - private static final String RED = "red"; - private static final String GREEN = "green"; - private static final String BLUE = "blue"; - - public RadioButtonModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.valueHolder = new SimplePropertyValueModel<Object>(null); -// buttonGroup = new ButtonGroup(); - - this.redButtonModelAdapter = this.buildButtonModel(this.valueHolder, RED); -// this.redButtonModelAdapter.setGroup(buttonGroup); - this.redListener = new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - RadioButtonModelAdapterTests.this.redEventFired = true; - } - }; - - this.greenButtonModelAdapter = this.buildButtonModel(this.valueHolder, GREEN); -// this.greenButtonModelAdapter.setGroup(buttonGroup); - this.greenListener = new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - RadioButtonModelAdapterTests.this.greenEventFired = true; - } - }; - - this.blueButtonModelAdapter = this.buildButtonModel(this.valueHolder, BLUE); -// this.blueButtonModelAdapter.setGroup(buttonGroup); - this.blueListener = new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - RadioButtonModelAdapterTests.this.blueEventFired = true; - } - }; - - this.clearFlags(); - } - - private ButtonModel buildButtonModel(WritablePropertyValueModel<Object> pvm, Object buttonValue) { - return new RadioButtonModelAdapter(pvm, buttonValue) { - @Override - protected PropertyChangeListener buildBooleanChangeListener() { - return this.buildBooleanChangeListener_(); - } - }; - } - - private void listenToModelAdapters() { - this.redButtonModelAdapter.addChangeListener(this.redListener); - this.greenButtonModelAdapter.addChangeListener(this.greenListener); - this.blueButtonModelAdapter.addChangeListener(this.blueListener); - } - - private void clearFlags() { - this.redEventFired = false; - this.greenEventFired = false; - this.blueEventFired = false; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testSetSelected() throws Exception { - this.listenToModelAdapters(); - - this.greenButtonModelAdapter.setSelected(true); - assertFalse(this.redEventFired); - assertTrue(this.greenEventFired); - assertFalse(this.blueEventFired); - assertEquals(GREEN, this.valueHolder.getValue()); - - this.clearFlags(); - this.blueButtonModelAdapter.setSelected(true); - assertFalse(this.redEventFired); - assertTrue(this.greenEventFired); - assertTrue(this.blueEventFired); - assertEquals(BLUE, this.valueHolder.getValue()); - - this.clearFlags(); - this.redButtonModelAdapter.setSelected(true); - assertTrue(this.redEventFired); - assertFalse(this.greenEventFired); - assertTrue(this.blueEventFired); - assertEquals(RED, this.valueHolder.getValue()); - } - - public void testSetValue() throws Exception { - this.listenToModelAdapters(); - - this.greenButtonModelAdapter.setSelected(true); - - this.clearFlags(); - this.valueHolder.setValue(BLUE); - assertFalse(this.redEventFired); - assertTrue(this.greenEventFired); - assertTrue(this.blueEventFired); - assertFalse(this.redButtonModelAdapter.isSelected()); - assertFalse(this.greenButtonModelAdapter.isSelected()); - assertTrue(this.blueButtonModelAdapter.isSelected()); - - this.clearFlags(); - this.valueHolder.setValue(RED); - assertTrue(this.redEventFired); - assertFalse(this.greenEventFired); - assertTrue(this.blueEventFired); - assertTrue(this.redButtonModelAdapter.isSelected()); - assertFalse(this.greenButtonModelAdapter.isSelected()); - assertFalse(this.blueButtonModelAdapter.isSelected()); - } - - public void testDefaultValue() throws Exception { - this.listenToModelAdapters(); - - this.valueHolder.setValue(GREEN); - assertFalse(this.redButtonModelAdapter.isSelected()); - assertTrue(this.greenButtonModelAdapter.isSelected()); - assertFalse(this.blueButtonModelAdapter.isSelected()); - - this.clearFlags(); - this.valueHolder.setValue(null); - assertFalse(this.redEventFired); - assertTrue(this.greenEventFired); - assertFalse(this.blueEventFired); - assertFalse(this.redButtonModelAdapter.isSelected()); - assertFalse(this.greenButtonModelAdapter.isSelected()); - assertFalse(this.blueButtonModelAdapter.isSelected()); - - this.clearFlags(); - this.valueHolder.setValue(BLUE); - assertFalse(this.redEventFired); - assertFalse(this.greenEventFired); - assertTrue(this.blueEventFired); - assertFalse(this.redButtonModelAdapter.isSelected()); - assertFalse(this.greenButtonModelAdapter.isSelected()); - assertTrue(this.blueButtonModelAdapter.isSelected()); - } - - public void testHasListeners() throws Exception { - SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder; - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.redButtonModelAdapter); - this.verifyHasNoListeners(this.greenButtonModelAdapter); - this.verifyHasNoListeners(this.blueButtonModelAdapter); - - ChangeListener listener = new TestChangeListener(); - this.redButtonModelAdapter.addChangeListener(listener); - assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(this.redButtonModelAdapter); - this.verifyHasNoListeners(this.greenButtonModelAdapter); - this.verifyHasNoListeners(this.blueButtonModelAdapter); - - this.redButtonModelAdapter.removeChangeListener(listener); - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.redButtonModelAdapter); - this.verifyHasNoListeners(this.greenButtonModelAdapter); - this.verifyHasNoListeners(this.blueButtonModelAdapter); - } - - private void verifyHasNoListeners(Object model) throws Exception { - EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList"); - assertEquals(0, listenerList.getListenerList().length); - } - - private void verifyHasListeners(Object model) throws Exception { - EventListenerList listenerList = (EventListenerList) ReflectionTools.getFieldValue(model, "listenerList"); - assertFalse(listenerList.getListenerList().length == 0); - } - - - private class TestChangeListener implements ChangeListener { - TestChangeListener() { - super(); - } - public void stateChanged(ChangeEvent e) { - fail("unexpected event"); - } - } - -} 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 deleted file mode 100644 index 0b4ff59108..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/RadioButtonModelAdapterUITest.java +++ /dev/null @@ -1,260 +0,0 @@ -/******************************************************************************* - * 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 + ")"; - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ReadOnlyTableModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ReadOnlyTableModelAdapterUITest.java deleted file mode 100644 index 72cb1d2d31..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ReadOnlyTableModelAdapterUITest.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2008 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 org.eclipse.jpt.common.utility.internal.model.value.swing.ColumnAdapter; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TableModelAdapterTests.PersonColumnAdapter; - -/** - * Make it easy to test the table model adapter and - * renderers without any editing allowed. - */ -public class ReadOnlyTableModelAdapterUITest extends TableModelAdapterUITest { - - public static void main(String[] args) throws Exception { - new ReadOnlyTableModelAdapterUITest().exec(args); - } - - protected ReadOnlyTableModelAdapterUITest() { - super(); - } - - @Override - protected ColumnAdapter buildColumnAdapter() { - return new PersonColumnAdapter() { - @Override - public boolean columnIsEditable(int index) { - return false; - } - }; - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/SpinnerModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/SpinnerModelAdapterTests.java deleted file mode 100644 index 76a1c158f4..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/SpinnerModelAdapterTests.java +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 javax.swing.SpinnerModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.ReflectionTools; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.SpinnerModelAdapter; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class SpinnerModelAdapterTests extends TestCase { - private WritablePropertyValueModel<Object> valueHolder; - SpinnerModel spinnerModelAdapter; - boolean eventFired; - - public SpinnerModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.valueHolder = new SimplePropertyValueModel<Object>(new Integer(0)); - this.spinnerModelAdapter = new SpinnerModelAdapter(this.valueHolder) { - @Override - protected PropertyChangeListener buildValueListener() { - return this.buildValueListener_(); - } - }; - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testSetValueSpinnerModel() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - SpinnerModelAdapterTests.this.eventFired = true; - assertEquals(SpinnerModelAdapterTests.this.spinnerModelAdapter, e.getSource()); - } - }); - this.spinnerModelAdapter.setValue(new Integer(5)); - assertTrue(this.eventFired); - assertEquals(new Integer(5), this.valueHolder.getValue()); - } - - public void testSetValueValueHolder() throws Exception { - this.eventFired = false; - this.spinnerModelAdapter.addChangeListener(new TestChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - SpinnerModelAdapterTests.this.eventFired = true; - assertEquals(SpinnerModelAdapterTests.this.spinnerModelAdapter, e.getSource()); - } - }); - assertEquals(new Integer(0), this.spinnerModelAdapter.getValue()); - this.valueHolder.setValue(new Integer(7)); - assertTrue(this.eventFired); - assertEquals(new Integer(7), this.spinnerModelAdapter.getValue()); - } - - public void testHasListeners() throws Exception { - SimplePropertyValueModel<Object> localValueHolder = (SimplePropertyValueModel<Object>) this.valueHolder; - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - - ChangeListener listener = new TestChangeListener(); - this.spinnerModelAdapter.addChangeListener(listener); - assertTrue(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasListeners(this.spinnerModelAdapter); - - this.spinnerModelAdapter.removeChangeListener(listener); - assertFalse(localValueHolder.hasAnyPropertyChangeListeners(PropertyValueModel.VALUE)); - this.verifyHasNoListeners(this.spinnerModelAdapter); - } - - private void verifyHasNoListeners(Object adapter) throws Exception { - Object delegate = ReflectionTools.getFieldValue(adapter, "delegate"); - Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getChangeListeners"); - assertEquals(0, listeners.length); - } - - private void verifyHasListeners(Object adapter) throws Exception { - Object delegate = ReflectionTools.getFieldValue(adapter, "delegate"); - Object[] listeners = (Object[]) ReflectionTools.executeMethod(delegate, "getChangeListeners"); - assertFalse(listeners.length == 0); - } - - - private class TestChangeListener implements ChangeListener { - TestChangeListener() { - super(); - } - public void stateChanged(ChangeEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/SpinnerModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/SpinnerModelAdapterUITest.java deleted file mode 100644 index 26976caed9..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/SpinnerModelAdapterUITest.java +++ /dev/null @@ -1,344 +0,0 @@ -/******************************************************************************* - * 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 java.util.Calendar; -import java.util.Date; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JSpinner; -import javax.swing.SpinnerModel; -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.DateSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ListSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.NumberSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; - -/** - * Play around with a set of spinners. - */ -@SuppressWarnings("nls") -public class SpinnerModelAdapterUITest { - - private TestModel testModel; - private WritablePropertyValueModel<TestModel> testModelHolder; - - private WritablePropertyValueModel<Object> birthDateHolder; - private SpinnerModel birthDateSpinnerModel; - - private WritablePropertyValueModel<Number> ageHolder; - private SpinnerModel ageSpinnerModel; - - private WritablePropertyValueModel<Object> eyeColorHolder; - private SpinnerModel eyeColorSpinnerModel; - - - public static void main(String[] args) throws Exception { - new SpinnerModelAdapterUITest().exec(); - } - - private SpinnerModelAdapterUITest() { - super(); - } - - private void exec() throws Exception { - this.testModel = new TestModel(); - this.testModelHolder = new SimplePropertyValueModel<TestModel>(this.testModel); - - this.birthDateHolder = this.buildBirthDateHolder(this.testModelHolder); - this.birthDateSpinnerModel = this.buildBirthDateSpinnerModel(this.birthDateHolder); - - this.ageHolder = this.buildAgeHolder(this.testModelHolder); - this.ageSpinnerModel = this.buildAgeSpinnerModel(this.ageHolder); - - this.eyeColorHolder = this.buildEyeColorHolder(this.testModelHolder); - this.eyeColorSpinnerModel = this.buildEyeColorSpinnerModel(this.eyeColorHolder); - - this.openWindow(); - } - - private WritablePropertyValueModel<Object> buildBirthDateHolder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, Object>(vm, TestModel.BIRTH_DATE_PROPERTY) { - @Override - protected Object buildValue_() { - return this.subject.getBirthDate(); - } - @Override - protected void setValue_(Object value) { - this.subject.setBirthDate((Date) value); - } - }; - } - - private SpinnerModel buildBirthDateSpinnerModel(WritablePropertyValueModel<Object> valueHolder) { - return new DateSpinnerModelAdapter(valueHolder); - } - - private WritablePropertyValueModel<Number> buildAgeHolder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, Number>(vm, TestModel.AGE_PROPERTY) { - @Override - protected Number buildValue_() { - return new Integer(this.subject.getAge()); - } - @Override - protected void setValue_(Number value) { - this.subject.setAge(value.intValue()); - } - }; - } - - private SpinnerModel buildAgeSpinnerModel(WritablePropertyValueModel<Number> valueHolder) { - return new NumberSpinnerModelAdapter(valueHolder, valueHolder.getValue().intValue(), TestModel.MIN_AGE, TestModel.MAX_AGE, 1); - } - - private WritablePropertyValueModel<Object> buildEyeColorHolder(PropertyValueModel<TestModel> vm) { - return new PropertyAspectAdapter<TestModel, Object>(vm, TestModel.EYE_COLOR_PROPERTY) { - @Override - protected Object buildValue_() { - return this.subject.getEyeColor(); - } - @Override - protected void setValue_(Object value) { - this.subject.setEyeColor((String) value); - } - }; - } - - private SpinnerModel buildEyeColorSpinnerModel(WritablePropertyValueModel<Object> valueHolder) { - return new ListSpinnerModelAdapter(valueHolder, TestModel.VALID_EYE_COLORS); - } - - 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(600, 100); - 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.buildSpinnerPanel(), BorderLayout.NORTH); - mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); - return mainPanel; - } - - private Component buildSpinnerPanel() { - JPanel taskListPanel = new JPanel(new GridLayout(1, 0)); - taskListPanel.add(this.buildBirthDateSpinner()); - taskListPanel.add(this.buildAgeSpinner()); - taskListPanel.add(this.buildEyeColorSpinner()); - return taskListPanel; - } - - private JSpinner buildBirthDateSpinner() { - return new JSpinner(this.birthDateSpinnerModel); - } - - private JSpinner buildAgeSpinner() { - return new JSpinner(this.ageSpinnerModel); - } - - private JSpinner buildEyeColorSpinner() { - return new JSpinner(this.eyeColorSpinnerModel); - } - - private Component buildControlPanel() { - JPanel controlPanel = new JPanel(new GridLayout(1, 0)); - controlPanel.add(this.buildResetModelButton()); - controlPanel.add(this.buildClearModelButton()); - controlPanel.add(this.buildRestoreModelButton()); - controlPanel.add(this.buildPrintModelButton()); - return controlPanel; - } - - private JButton buildResetModelButton() { - return new JButton(this.buildResetModelAction()); - } - - private Action buildResetModelAction() { - Action action = new AbstractAction("reset model") { - public void actionPerformed(ActionEvent event) { - SpinnerModelAdapterUITest.this.resetModel(); - } - }; - action.setEnabled(true); - return action; - } - - void resetModel() { - this.testModel.setBirthDate(TestModel.DEFAULT_BIRTH_DATE); - this.testModel.setEyeColor(TestModel.DEFAULT_EYE_COLOR); - } - - private JButton buildClearModelButton() { - return new JButton(this.buildClearModelAction()); - } - - private Action buildClearModelAction() { - Action action = new AbstractAction("clear model") { - public void actionPerformed(ActionEvent event) { - SpinnerModelAdapterUITest.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) { - SpinnerModelAdapterUITest.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) { - SpinnerModelAdapterUITest.this.printModel(); - } - }; - action.setEnabled(true); - return action; - } - - void printModel() { - System.out.println("birth date: " + this.testModel.getBirthDate()); - System.out.println("age: " + this.testModel.getAge()); - System.out.println("eyes: " + this.testModel.getEyeColor()); - } - - - static class TestModel extends AbstractModel { - private Calendar birthCal = Calendar.getInstance(); - // "virtual" properties - public static final String BIRTH_DATE_PROPERTY = "birthDate"; - public static final String AGE_PROPERTY = "age"; - public static final Date DEFAULT_BIRTH_DATE = new Date(); - public static final int DEFAULT_AGE = 0; - public static final int MIN_AGE = 0; - public static final int MAX_AGE = 150; - private String eyeColor; - public static final String EYE_COLOR_PROPERTY = "eyeColor"; - public static final String[] VALID_EYE_COLORS = {"blue", "brown", "green", "hazel", "pink"}; - public static final String DEFAULT_EYE_COLOR = VALID_EYE_COLORS[3]; - - TestModel() { - this(DEFAULT_BIRTH_DATE, DEFAULT_EYE_COLOR); - } - public TestModel(Date birthDate, String eyeColor) { - this.setBirthDate(birthDate); - this.setEyeColor(eyeColor); - } - public Date getBirthDate() { - return (Date) this.birthCal.getTime().clone(); - } - public void setBirthDate(Date birthDate) { - Date oldBirthDate = this.getBirthDate(); - int oldAge = this.getAge(); - this.birthCal.setTimeInMillis(birthDate.getTime()); - int newAge = this.getAge(); - if (newAge < MIN_AGE || newAge > MAX_AGE) { - throw new IllegalArgumentException(birthDate.toString()); - } - this.firePropertyChanged(BIRTH_DATE_PROPERTY, oldBirthDate, this.getBirthDate()); - this.firePropertyChanged(AGE_PROPERTY, oldAge, newAge); - } - public int getAge() { - Calendar currentCal = Calendar.getInstance(); - int age = currentCal.get(Calendar.YEAR) - this.birthCal.get(Calendar.YEAR); - if (currentCal.get(Calendar.MONTH) < this.birthCal.get(Calendar.MONTH)) { - age--; - } else if (currentCal.get(Calendar.MONTH) == this.birthCal.get(Calendar.MONTH)) { - if (currentCal.get(Calendar.DAY_OF_MONTH) < this.birthCal.get(Calendar.DAY_OF_MONTH)) { - age--; - } - } - return age; - } - public void setAge(int newAge) { - if (newAge < MIN_AGE || newAge > MAX_AGE) { - throw new IllegalArgumentException(String.valueOf(newAge)); - } - - int oldAge = this.getAge(); - int delta = newAge - oldAge; - - Calendar newBirthCal = Calendar.getInstance(); - newBirthCal.setTimeInMillis(this.birthCal.getTime().getTime()); - // if the age increased, the birth date must be "decreased"; and vice versa - newBirthCal.set(Calendar.YEAR, newBirthCal.get(Calendar.YEAR) - delta); - this.setBirthDate(newBirthCal.getTime()); - } - public String getEyeColor() { - return this.eyeColor; - } - public void setEyeColor(String eyeColor) { - if ( ! ArrayTools.contains(VALID_EYE_COLORS, eyeColor)) { - throw new IllegalArgumentException(eyeColor); - } - Object old = this.eyeColor; - this.eyeColor = eyeColor; - this.firePropertyChanged(EYE_COLOR_PROPERTY, old, eyeColor); - } - @Override - public String toString() { - return "TestModel(birth: " + this.getBirthDate() + " - eyes: " + this.eyeColor + ")"; - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TableModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TableModelAdapterTests.java deleted file mode 100644 index d7125a42ff..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TableModelAdapterTests.java +++ /dev/null @@ -1,641 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.text.DateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; -import junit.framework.TestCase; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterators.CloneIterator; -import org.eclipse.jpt.common.utility.internal.iterators.TransformationIterator; -import org.eclipse.jpt.common.utility.internal.model.AbstractModel; -import org.eclipse.jpt.common.utility.internal.model.value.CollectionAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ColumnAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.TableModelAdapter; -import org.eclipse.jpt.common.utility.model.listener.ListChangeListener; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.value.CollectionValueModel; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.TestTools; - -@SuppressWarnings("nls") -public class TableModelAdapterTests extends TestCase { - private Crowd crowd; - TableModelEvent event; - - public TableModelAdapterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - this.crowd = this.buildCrowd(); - } - - @Override - protected void tearDown() throws Exception { - TestTools.clear(this); - super.tearDown(); - } - - public void testGetRowCount() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - assertEquals(0, tableModelAdapter.getRowCount()); - // we need to add a listener to wake up the adapter - tableModelAdapter.addTableModelListener(this.buildTableModelListener()); - assertEquals(this.crowd.peopleSize(), tableModelAdapter.getRowCount()); - } - - public void testGetColumnCount() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - assertEquals(PersonColumnAdapter.COLUMN_COUNT, tableModelAdapter.getColumnCount()); - } - - public void testGetValueAt() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - tableModelAdapter.addTableModelListener(this.buildTableModelListener()); - - List<String> sortedNames = this.sortedNames(); - for (int i = 0; i < this.crowd.peopleSize(); i++) { - assertEquals(sortedNames.get(i), tableModelAdapter.getValueAt(i, PersonColumnAdapter.NAME_COLUMN)); - } - } - - public void testSetValueAt() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - this.event = null; - tableModelAdapter.addTableModelListener(new TestTableModelListener() { - @Override - public void tableChanged(TableModelEvent e) { - TableModelAdapterTests.this.event = e; - } - }); - - Person person = this.crowd.personNamed("Gollum"); - assertEquals(Person.EYE_COLOR_BLUE, person.getEyeColor()); - assertFalse(person.isEvil()); - assertEquals(0, person.getRank()); - - for (int i = 0; i < tableModelAdapter.getRowCount(); i++) { - if (tableModelAdapter.getValueAt(i, PersonColumnAdapter.NAME_COLUMN).equals("Gollum")) { - tableModelAdapter.setValueAt(Person.EYE_COLOR_HAZEL, i, PersonColumnAdapter.EYE_COLOR_COLUMN); - tableModelAdapter.setValueAt(Boolean.TRUE, i, PersonColumnAdapter.EVIL_COLUMN); - tableModelAdapter.setValueAt(new Integer(-1), i, PersonColumnAdapter.RANK_COLUMN); - break; - } - } - assertNotNull(this.event); - assertEquals(Person.EYE_COLOR_HAZEL, person.getEyeColor()); - assertTrue(person.isEvil()); - assertEquals(-1, person.getRank()); - } - - public void testAddRow() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - this.event = null; - tableModelAdapter.addTableModelListener(this.buildSingleEventListener()); - // add a person to the end of the list so we only trigger one event - this.crowd.addPerson("Zzzzz"); - assertNotNull(this.event); - assertEquals(TableModelEvent.INSERT, this.event.getType()); - assertEquals(TableModelEvent.ALL_COLUMNS, this.event.getColumn()); - } - - public void testRemoveRow() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - this.event = null; - tableModelAdapter.addTableModelListener(this.buildSingleEventListener()); - // removing a person should only trigger one event, since a re-sort is not needed - this.crowd.removePerson(this.crowd.personNamed("Gollum")); - assertNotNull(this.event); - assertEquals(TableModelEvent.DELETE, this.event.getType()); - assertEquals(TableModelEvent.ALL_COLUMNS, this.event.getColumn()); - } - - public void testChangeCell() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - this.event = null; - tableModelAdapter.addTableModelListener(this.buildSingleEventListener()); - // add a person to the end of the list so we only trigger one event - Person person = this.crowd.personNamed("Gollum"); - person.setEvil(true); - assertNotNull(this.event); - assertEquals(TableModelEvent.UPDATE, this.event.getType()); - assertEquals(PersonColumnAdapter.EVIL_COLUMN, this.event.getColumn()); - } - - public void testLazyListListener() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - TableModelListener listener = this.buildTableModelListener(); - assertTrue(this.crowd.hasNoCollectionChangeListeners(Crowd.PEOPLE_COLLECTION)); - tableModelAdapter.addTableModelListener(listener); - assertTrue(this.crowd.hasAnyCollectionChangeListeners(Crowd.PEOPLE_COLLECTION)); - tableModelAdapter.removeTableModelListener(listener); - assertTrue(this.crowd.hasNoCollectionChangeListeners(Crowd.PEOPLE_COLLECTION)); - } - - public void testLazyCellListener() throws Exception { - TableModelAdapter<Person> tableModelAdapter = this.buildTableModelAdapter(); - TableModelListener listener = this.buildTableModelListener(); - Person person = this.crowd.personNamed("Gollum"); - assertTrue(person.hasNoPropertyChangeListeners(Person.NAME_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.BIRTH_DATE_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.EYE_COLOR_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.EVIL_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.RANK_PROPERTY)); - - tableModelAdapter.addTableModelListener(listener); - assertTrue(person.hasAnyPropertyChangeListeners(Person.NAME_PROPERTY)); - assertTrue(person.hasAnyPropertyChangeListeners(Person.BIRTH_DATE_PROPERTY)); - assertTrue(person.hasAnyPropertyChangeListeners(Person.EYE_COLOR_PROPERTY)); - assertTrue(person.hasAnyPropertyChangeListeners(Person.EVIL_PROPERTY)); - assertTrue(person.hasAnyPropertyChangeListeners(Person.RANK_PROPERTY)); - - tableModelAdapter.removeTableModelListener(listener); - assertTrue(person.hasNoPropertyChangeListeners(Person.NAME_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.BIRTH_DATE_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.EYE_COLOR_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.EVIL_PROPERTY)); - assertTrue(person.hasNoPropertyChangeListeners(Person.RANK_PROPERTY)); - } - - private TableModelAdapter<Person> buildTableModelAdapter() { - return new TableModelAdapter<Person>(this.buildSortedPeopleAdapter(), this.buildColumnAdapter()) { - @Override - protected PropertyChangeListener buildCellListener() { - return this.buildCellListener_(); - } - @Override - protected ListChangeListener buildListChangeListener() { - return this.buildListChangeListener_(); - } - }; - } - - private ListValueModel<Person> buildSortedPeopleAdapter() { - return new SortedListValueModelAdapter<Person>(this.buildPeopleAdapter()); - } - - private CollectionValueModel<Person> buildPeopleAdapter() { - return new CollectionAspectAdapter<Crowd, Person>(Crowd.PEOPLE_COLLECTION, this.crowd) { - @Override - protected Iterator<Person> iterator_() { - return this.subject.people(); - } - @Override - protected int size_() { - return this.subject.peopleSize(); - } - }; - } - - private Crowd buildCrowd() { - Crowd result = new Crowd(); - result.addPerson("Bilbo"); - result.addPerson("Gollum"); - result.addPerson("Frodo"); - result.addPerson("Samwise"); - return result; - } - - private ColumnAdapter buildColumnAdapter() { - return new PersonColumnAdapter(); - } - - private TableModelListener buildTableModelListener() { - return new TestTableModelListener(); - } - - private List<String> sortedNames() { - return new ArrayList<String>(CollectionTools.sortedSet(this.crowd.peopleNames())); - } - - private TableModelListener buildSingleEventListener() { - return new TestTableModelListener() { - @Override - public void tableChanged(TableModelEvent e) { - // we expect only a single event - if (TableModelAdapterTests.this.event == null) { - TableModelAdapterTests.this.event = e; - } else { - fail("unexpected event"); - } - } - }; - } - - - // ********** classes ********** - - public static class PersonColumnAdapter implements ColumnAdapter { - public static final int COLUMN_COUNT = 7; - - public static final int NAME_COLUMN = 0; - public static final int BIRTH_DATE_COLUMN = 1; - public static final int GONE_WEST_DATE_COLUMN = 2; - public static final int EYE_COLOR_COLUMN = 3; - public static final int EVIL_COLUMN = 4; - public static final int RANK_COLUMN = 5; - public static final int ADVENTURE_COUNT_COLUMN = 6; - - private static final String[] COLUMN_NAMES = new String[] { - "Name", - "Birth", - "Gone West", - "Eyes", - "Evil", - "Rank", - "Adventures" - }; - - - public int columnCount() { - return COLUMN_COUNT; - } - - public String columnName(int index) { - return COLUMN_NAMES[index]; - } - - public Class<?> columnClass(int index) { - switch (index) { - case NAME_COLUMN: return Object.class; - case BIRTH_DATE_COLUMN: return Date.class; - case GONE_WEST_DATE_COLUMN: return Date.class; - case EYE_COLOR_COLUMN: return Object.class; - case EVIL_COLUMN: return Boolean.class; - case RANK_COLUMN: return Integer.class; - case ADVENTURE_COUNT_COLUMN:return Integer.class; - default: return Object.class; - } - } - - public boolean columnIsEditable(int index) { - return index != NAME_COLUMN; - } - - public WritablePropertyValueModel<Object>[] cellModels(Object subject) { - Person person = (Person) subject; - @SuppressWarnings("unchecked") - WritablePropertyValueModel<Object>[] result = new WritablePropertyValueModel[COLUMN_COUNT]; - - result[NAME_COLUMN] = this.buildNameAdapter(person); - result[BIRTH_DATE_COLUMN] = this.buildBirthDateAdapter(person); - result[GONE_WEST_DATE_COLUMN] = this.buildGoneWestDateAdapter(person); - result[EYE_COLOR_COLUMN] = this.buildEyeColorAdapter(person); - result[EVIL_COLUMN] = this.buildEvilAdapter(person); - result[RANK_COLUMN] = this.buildRankAdapter(person); - result[ADVENTURE_COUNT_COLUMN] = this.buildAdventureCountAdapter(person); - - return result; - } - - private WritablePropertyValueModel<Object> buildNameAdapter(Person person) { - return new PropertyAspectAdapter<Person, Object>(Person.NAME_PROPERTY, person) { - @Override - protected String buildValue_() { - return this.subject.getName(); - } - @Override - protected void setValue_(Object value) { - this.subject.setName((String) value); - } - }; - } - - private WritablePropertyValueModel<Object> buildBirthDateAdapter(Person person) { - return new PropertyAspectAdapter<Person, Object>(Person.BIRTH_DATE_PROPERTY, person) { - @Override - protected Date buildValue_() { - return this.subject.getBirthDate(); - } - @Override - protected void setValue_(Object value) { - this.subject.setBirthDate((Date) value); - } - }; - } - - private WritablePropertyValueModel<Object> buildGoneWestDateAdapter(Person person) { - return new PropertyAspectAdapter<Person, Object>(Person.GONE_WEST_DATE_PROPERTY, person) { - @Override - protected Date buildValue_() { - return this.subject.getGoneWestDate(); - } - @Override - protected void setValue_(Object value) { - this.subject.setGoneWestDate((Date) value); - } - }; - } - - private WritablePropertyValueModel<Object> buildEyeColorAdapter(Person person) { - return new PropertyAspectAdapter<Person, Object>(Person.EYE_COLOR_PROPERTY, person) { - @Override - protected String buildValue_() { - return this.subject.getEyeColor(); - } - @Override - protected void setValue_(Object value) { - this.subject.setEyeColor((String) value); - } - }; - } - - private WritablePropertyValueModel<Object> buildEvilAdapter(Person person) { - return new PropertyAspectAdapter<Person, Object>(Person.EVIL_PROPERTY, person) { - @Override - protected Boolean buildValue_() { - return Boolean.valueOf(this.subject.isEvil()); - } - @Override - protected void setValue_(Object value) { - this.subject.setEvil(((Boolean)value).booleanValue()); - } - }; - } - - private WritablePropertyValueModel<Object> buildRankAdapter(Person person) { - return new PropertyAspectAdapter<Person, Object>(Person.RANK_PROPERTY, person) { - @Override - protected Integer buildValue_() { - return new Integer(this.subject.getRank()); - } - @Override - protected void setValue_(Object value) { - this.subject.setRank(((Integer) value).intValue()); - } - }; - } - - private WritablePropertyValueModel<Object> buildAdventureCountAdapter(Person person) { - return new PropertyAspectAdapter<Person, Object>(Person.ADVENTURE_COUNT_PROPERTY, person) { - @Override - protected Integer buildValue_() { - return new Integer(this.subject.getAdventureCount()); - } - @Override - protected void setValue_(Object value) { - this.subject.setAdventureCount(((Integer) value).intValue()); - } - }; - } - - } - - - public static class Crowd extends AbstractModel { - private final Collection<Person> people; - public static final String PEOPLE_COLLECTION = "people"; - - public Crowd() { - super(); - this.people = new ArrayList<Person>(); - } - - - public Iterator<Person> people() { - return new CloneIterator<Person>(this.people) { - @Override - protected void remove(Person person) { - Crowd.this.removePerson(person); - } - }; - } - - public int peopleSize() { - return this.people.size(); - } - - public Person addPerson(String name) { - this.checkPersonName(name); - return this.addPerson(new Person(this, name)); - } - - private Person addPerson(Person person) { - this.addItemToCollection(person, this.people, PEOPLE_COLLECTION); - return person; - } - - public void removePerson(Person person) { - this.removeItemFromCollection(person, this.people, PEOPLE_COLLECTION); - } - - public void removePeople(Collection<Person> persons) { - this.removeItemsFromCollection(persons, this.people, PEOPLE_COLLECTION); - } - - public void removePeople(Iterator<Person> persons) { - this.removeItemsFromCollection(persons, this.people, PEOPLE_COLLECTION); - } - - void checkPersonName(String personName) { - if (personName == null) { - throw new NullPointerException(); - } - if (CollectionTools.contains(this.peopleNames(), personName)) { - throw new IllegalArgumentException(personName); - } - } - - public Iterator<String> peopleNames() { - return new TransformationIterator<Person, String>(this.people.iterator()) { - @Override - protected String transform(Person person) { - return person.getName(); - } - }; - } - - public Person personNamed(String name) { - for (Iterator<Person> stream = this.people.iterator(); stream.hasNext(); ) { - Person person = stream.next(); - if (person.getName().equals(name)) { - return person; - } - } - return null; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, String.valueOf(this.people.size()) + " people"); - } - - } - - - public static class Person extends AbstractModel implements Comparable<Person> { - private Crowd crowd; - private String name; - public static final String NAME_PROPERTY= "name"; - private Date birthDate; - public static final String BIRTH_DATE_PROPERTY= "birthDate"; - private Date goneWestDate; - public static final String GONE_WEST_DATE_PROPERTY= "goneWestDate"; - private String eyeColor; - public static final String EYE_COLOR_PROPERTY= "eyeColor"; - public static final String EYE_COLOR_BLUE = "blue"; - public static final String EYE_COLOR_GREEN = "green"; - public static final String EYE_COLOR_BROWN = "brown"; - public static final String EYE_COLOR_HAZEL = "hazel"; - public static final String EYE_COLOR_PINK = "pink"; - private static Collection<String> validEyeColors; - public static final String DEFAULT_EYE_COLOR = EYE_COLOR_BLUE; - private boolean evil; - public static final String EVIL_PROPERTY= "evil"; - private int rank; - public static final String RANK_PROPERTY= "rank"; - private int adventureCount; - public static final String ADVENTURE_COUNT_PROPERTY= "adventureCount"; - - Person(Crowd crowd, String name) { - super(); - this.crowd = crowd; - this.name = name; - this.birthDate = new Date(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.YEAR, 250); - this.goneWestDate = new Date(c.getTimeInMillis()); - this.eyeColor = DEFAULT_EYE_COLOR; - this.evil = false; - this.rank = 0; - this.adventureCount = 0; - } - - public static Collection<String> getValidEyeColors() { - if (validEyeColors == null) { - validEyeColors = buildValidEyeColors(); - } - return validEyeColors; - } - - private static Collection<String> buildValidEyeColors() { - Collection<String> result = new ArrayList<String>(); - result.add(EYE_COLOR_BLUE); - result.add(EYE_COLOR_GREEN); - result.add(EYE_COLOR_BROWN); - result.add(EYE_COLOR_HAZEL); - result.add(EYE_COLOR_PINK); - return result; - } - - public Crowd getCrowd() { - return this.crowd; - } - - public String getName() { - return this.name; - } - public void setName(String name) { - this.crowd.checkPersonName(name); - Object old = this.name; - this.name = name; - this.firePropertyChanged(NAME_PROPERTY, old, name); - } - - public Date getBirthDate() { - return this.birthDate; - } - public void setBirthDate(Date birthDate) { - Object old = this.birthDate; - this.birthDate = birthDate; - this.firePropertyChanged(BIRTH_DATE_PROPERTY, old, birthDate); - } - - public Date getGoneWestDate() { - return this.goneWestDate; - } - public void setGoneWestDate(Date goneWestDate) { - Object old = this.goneWestDate; - this.goneWestDate = goneWestDate; - this.firePropertyChanged(GONE_WEST_DATE_PROPERTY, old, goneWestDate); - } - - public String getEyeColor() { - return this.eyeColor; - } - public void setEyeColor(String eyeColor) { - if (! getValidEyeColors().contains(eyeColor)) { - throw new IllegalArgumentException(eyeColor); - } - Object old = this.eyeColor; - this.eyeColor = eyeColor; - this.firePropertyChanged(EYE_COLOR_PROPERTY, old, eyeColor); - } - - public boolean isEvil() { - return this.evil; - } - public void setEvil(boolean evil) { - boolean old = this.evil; - this.evil = evil; - this.firePropertyChanged(EVIL_PROPERTY, old, evil); - } - - public int getRank() { - return this.rank; - } - public void setRank(int rank) { - int old = this.rank; - this.rank = rank; - this.firePropertyChanged(RANK_PROPERTY, old, rank); - } - - public int getAdventureCount() { - return this.adventureCount; - } - public void setAdventureCount(int adventureCount) { - int old = this.adventureCount; - this.adventureCount = adventureCount; - this.firePropertyChanged(ADVENTURE_COUNT_PROPERTY, old, adventureCount); - } - - public int compareTo(Person p) { - return this.name.compareToIgnoreCase(p.name); - } - - @Override - public String toString() { - return this.name + - "\tborn: " + DateFormat.getDateInstance().format(this.birthDate) + - "\tgone west: " + DateFormat.getDateInstance().format(this.goneWestDate) + - "\teyes: " + this.eyeColor + - "\tevil: " + this.evil + - "\trank: " + this.rank + - "\tadventures: " + this.adventureCount - ; - } - - } - - - private class TestTableModelListener implements TableModelListener { - TestTableModelListener() { - super(); - } - public void tableChanged(TableModelEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TableModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TableModelAdapterUITest.java deleted file mode 100644 index 07a614cb44..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TableModelAdapterUITest.java +++ /dev/null @@ -1,733 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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 java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ButtonModel; -import javax.swing.ComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JFrame; -import javax.swing.JList; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JSpinner; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.ListCellRenderer; -import javax.swing.ListSelectionModel; -import javax.swing.SpinnerModel; -import javax.swing.UIManager; -import javax.swing.WindowConstants; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.table.TableColumn; -import javax.swing.table.TableModel; -import javax.swing.text.Document; - -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.model.value.CollectionAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.ItemPropertyListValueModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.SimpleCollectionValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelWrapper; -import org.eclipse.jpt.common.utility.internal.model.value.swing.CheckBoxModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ColumnAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ComboBoxModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.DateSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.DocumentAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ListModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.NumberSpinnerModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.swing.ObjectListSelectionModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.TableModelAdapter; -import org.eclipse.jpt.common.utility.internal.swing.CheckBoxTableCellRenderer; -import org.eclipse.jpt.common.utility.internal.swing.ComboBoxTableCellRenderer; -import org.eclipse.jpt.common.utility.internal.swing.SpinnerTableCellRenderer; -import org.eclipse.jpt.common.utility.internal.swing.TableCellEditorAdapter; -import org.eclipse.jpt.common.utility.model.value.CollectionValueModel; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TableModelAdapterTests.Crowd; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TableModelAdapterTests.Person; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TableModelAdapterTests.PersonColumnAdapter; - -/** - * an example UI for testing the TableModelAdapter - * "name" column is read-only text field - * "birth date" column is date text field - * "gone west date" column is date spinner - * "eye color" column is combo-box - * "evil" column is check box - * "rank" column is number text field - * "adventure count" column is number spinner - * - * Note that the table model and row selection model share the same - * list value model (the sorted people adapter) - */ -@SuppressWarnings("nls") -public class TableModelAdapterUITest { - private SimpleCollectionValueModel<Object> eyeColorsHolder; // Object because it adapts to a combo-box - private WritablePropertyValueModel<Crowd> crowdHolder; - private WritablePropertyValueModel<Person> selectedPersonHolder; - private ListValueModel<Person> sortedPeopleAdapter; - private TableModel tableModel; - private ObjectListSelectionModel rowSelectionModel; - private Action removeAction; - private Action renameAction; - - public static void main(String[] args) throws Exception { - new TableModelAdapterUITest().exec(args); - } - - protected TableModelAdapterUITest() { - super(); - } - - protected void exec(@SuppressWarnings("unused") String[] args) throws Exception { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - this.eyeColorsHolder = this. buildEyeColorCollectionHolder(); - this.crowdHolder = this.buildCrowdHolder(); - this.selectedPersonHolder = this.buildSelectedPersonHolder(); - this.sortedPeopleAdapter = this.buildSortedPeopleAdapter(); - this.tableModel = this.buildTableModel(); - this.rowSelectionModel = this.buildRowSelectionModel(); - this.openWindow(); - } - - private SimpleCollectionValueModel<Object> buildEyeColorCollectionHolder() { - return new SimpleCollectionValueModel<Object>(new ArrayList<Object>(Person.getValidEyeColors())); - } - - private WritablePropertyValueModel<Crowd> buildCrowdHolder() { - return new SimplePropertyValueModel<Crowd>(this.buildCrowd()); - } - - private Crowd buildCrowd() { - Crowd crowd = new Crowd(); - - Person p = crowd.addPerson("Bilbo"); - p.setEyeColor(Person.EYE_COLOR_BROWN); - p.setRank(22); - p.setAdventureCount(1); - - p = crowd.addPerson("Gollum"); - p.setEyeColor(Person.EYE_COLOR_PINK); - p.setEvil(true); - p.setRank(2); - p.setAdventureCount(50); - - p = crowd.addPerson("Frodo"); - p.setEyeColor(Person.EYE_COLOR_BLUE); - p.setRank(34); - p.setAdventureCount(1); - - p = crowd.addPerson("Samwise"); - p.setEyeColor(Person.EYE_COLOR_GREEN); - p.setRank(19); - p.setAdventureCount(1); - - return crowd; - } - - private WritablePropertyValueModel<Person> buildSelectedPersonHolder() { - return new SimplePropertyValueModel<Person>(); - } - - private ListValueModel<Person> buildSortedPeopleAdapter() { - return new SortedListValueModelWrapper<Person>(this.buildPeopleNameAdapter()); - } - - // the list will need to be re-sorted if a name changes - private ListValueModel<Person> buildPeopleNameAdapter() { - return new ItemPropertyListValueModelAdapter<Person>(this.buildPeopleAdapter(), Person.NAME_PROPERTY); - } - - private CollectionValueModel<Person> buildPeopleAdapter() { - return new CollectionAspectAdapter<Crowd, Person>(this.crowdHolder, Crowd.PEOPLE_COLLECTION) { - @Override - protected Iterator<Person> iterator_() { - return this.subject.people(); - } - @Override - protected int size_() { - return this.subject.peopleSize(); - } - }; - } - - private TableModel buildTableModel() { - return new TableModelAdapter<Person>(this.sortedPeopleAdapter, this.buildColumnAdapter()); - } - - protected ColumnAdapter buildColumnAdapter() { - return new PersonColumnAdapter(); - } - - private ObjectListSelectionModel buildRowSelectionModel() { - ObjectListSelectionModel rsm = new ObjectListSelectionModel(new ListModelAdapter(this.sortedPeopleAdapter)); - rsm.addListSelectionListener(this.buildRowSelectionListener()); - rsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - return rsm; - } - - private ListSelectionListener buildRowSelectionListener() { - return new ListSelectionListener() { - public void valueChanged(ListSelectionEvent e) { - if (e.getValueIsAdjusting()) { - return; - } - TableModelAdapterUITest.this.rowSelectionChanged(e); - } - }; - } - - void rowSelectionChanged(@SuppressWarnings("unused") ListSelectionEvent event) { - Person selection = (Person) this.rowSelectionModel.selectedValue(); - this.selectedPersonHolder.setValue(selection); - boolean personSelected = (selection != null); - this.removeAction.setEnabled(personSelected); - this.renameAction.setEnabled(personSelected); - } - - private void openWindow() { - JFrame window = new JFrame(this.getClass().getSimpleName()); - window.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); - window.addWindowListener(this.buildWindowListener()); - window.getContentPane().add(this.buildMainPanel(), "Center"); - window.setLocation(200, 200); - window.setSize(600, 400); - 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.buildTablePane(), BorderLayout.CENTER); - mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); - return mainPanel; - } - - private Component buildTablePane() { - return new JScrollPane(this.buildTable()); - } - - private JTable buildTable() { - JTable table = new JTable(this.tableModel); - table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); // see Java bug 5007652 - table.setSelectionModel(this.rowSelectionModel); - table.setDoubleBuffered(true); - table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); - int rowHeight = 20; // start with minimum of 20 - - // gone west column (spinner) - TableColumn column = table.getColumnModel().getColumn(PersonColumnAdapter.GONE_WEST_DATE_COLUMN); - SpinnerTableCellRenderer spinnerRenderer = this.buildDateSpinnerRenderer(); - column.setCellRenderer(spinnerRenderer); - column.setCellEditor(new TableCellEditorAdapter(this.buildDateSpinnerRenderer())); - rowHeight = Math.max(rowHeight, spinnerRenderer.preferredHeight()); - - // eye color column (combo-box) - // the jdk combo-box renderer looks like a text field - // until the user starts an edit - use a custom one - column = table.getColumnModel().getColumn(PersonColumnAdapter.EYE_COLOR_COLUMN); - ComboBoxTableCellRenderer eyeColorRenderer = this.buildEyeColorComboBoxRenderer(); - column.setCellRenderer(eyeColorRenderer); - column.setCellEditor(new TableCellEditorAdapter(this.buildEyeColorComboBoxRenderer())); - rowHeight = Math.max(rowHeight, eyeColorRenderer.preferredHeight()); - - // evil (check box) - // the jdk check box renderer and editor suck - use a custom ones - column = table.getColumnModel().getColumn(PersonColumnAdapter.EVIL_COLUMN); - CheckBoxTableCellRenderer evilRenderer = new CheckBoxTableCellRenderer(); - column.setCellRenderer(evilRenderer); - column.setCellEditor(new TableCellEditorAdapter(new CheckBoxTableCellRenderer())); - rowHeight = Math.max(rowHeight, evilRenderer.preferredHeight()); - - // adventure count column (spinner) - column = table.getColumnModel().getColumn(PersonColumnAdapter.ADVENTURE_COUNT_COLUMN); - spinnerRenderer = this.buildNumberSpinnerRenderer(); - column.setCellRenderer(spinnerRenderer); - column.setCellEditor(new TableCellEditorAdapter(this.buildNumberSpinnerRenderer())); - rowHeight = Math.max(rowHeight, spinnerRenderer.preferredHeight()); - - table.setRowHeight(rowHeight); - return table; - } - - private SpinnerTableCellRenderer buildDateSpinnerRenderer() { - return new SpinnerTableCellRenderer(new DateSpinnerModelAdapter(new SimplePropertyValueModel<Object>())); - } - - private SpinnerTableCellRenderer buildNumberSpinnerRenderer() { - return new SpinnerTableCellRenderer(new NumberSpinnerModelAdapter(new SimplePropertyValueModel<Number>())); - } - - private ComboBoxTableCellRenderer buildEyeColorComboBoxRenderer() { - return new ComboBoxTableCellRenderer(this.buildReadOnlyEyeColorComboBoxModel(), this.buildEyeColorRenderer()); - } - - private ComboBoxModel buildReadOnlyEyeColorComboBoxModel() { - return new ComboBoxModelAdapter(this.eyeColorsHolder, new SimplePropertyValueModel<Object>()); - } - - private ListCellRenderer buildEyeColorRenderer() { - return new EyeColorRenderer(); - } - - private Component buildControlPanel() { - JPanel controlPanel = new JPanel(new GridLayout(0, 1)); - controlPanel.add(this.buildButtonPanel()); - controlPanel.add(this.buildPersonPanel()); - return controlPanel; - } - - private Component buildButtonPanel() { - JPanel buttonPanel = new JPanel(new GridLayout(1, 0)); - buttonPanel.add(this.buildAddButton()); - buttonPanel.add(this.buildRemoveButton()); - buttonPanel.add(this.buildRenameButton()); - buttonPanel.add(this.buildAddEyeColorButton()); - buttonPanel.add(this.buildPrintButton()); - buttonPanel.add(this.buildResetButton()); - return buttonPanel; - } - - private Component buildPersonPanel() { - JPanel personPanel = new JPanel(new GridLayout(1, 0)); - personPanel.add(this.buildNameTextField()); - personPanel.add(this.buildBirthDateSpinner()); - personPanel.add(this.buildGoneWestDateSpinner()); - personPanel.add(this.buildEyeColorComboBox()); - personPanel.add(this.buildEvilCheckBox()); - personPanel.add(this.buildRankSpinner()); - personPanel.add(this.buildAdventureCountSpinner()); - return personPanel; - } - - - // ********** add button ********** - - private JButton buildAddButton() { - return new JButton(this.buildAddAction()); - } - - private Action buildAddAction() { - Action action = new AbstractAction("add") { - public void actionPerformed(ActionEvent event) { - TableModelAdapterUITest.this.addPerson(); - } - }; - action.setEnabled(true); - return action; - } - - void addPerson() { - String name = this.getNameFromUser(); - if (name != null) { - this.setSelectedPerson(this.crowd().addPerson(name)); - } - } - - - // ********** remove button ********** - - private JButton buildRemoveButton() { - return new JButton(this.buildRemoveAction()); - } - - private Action buildRemoveAction() { - this.removeAction = new AbstractAction("remove") { - public void actionPerformed(ActionEvent event) { - TableModelAdapterUITest.this.removePerson(); - } - }; - this.removeAction.setEnabled(false); - return this.removeAction; - } - - void removePerson() { - Person person = this.selectedPerson(); - if (person != null) { - this.crowd().removePerson(person); - } - } - - - // ********** rename button ********** - - private JButton buildRenameButton() { - return new JButton(this.buildRenameAction()); - } - - private Action buildRenameAction() { - this.renameAction = new AbstractAction("rename") { - public void actionPerformed(ActionEvent event) { - TableModelAdapterUITest.this.renamePerson(); - } - }; - this.renameAction.setEnabled(false); - return this.renameAction; - } - - void renamePerson() { - Person person = this.selectedPerson(); - if (person != null) { - String name = this.promptUserForName(person.getName()); - if (name != null) { - person.setName(name); - this.setSelectedPerson(person); - } - } - } - - - // ********** add eye color button ********** - - private JButton buildAddEyeColorButton() { - return new JButton(this.buildAddEyeColorAction()); - } - - private Action buildAddEyeColorAction() { - Action action = new AbstractAction("add eye color") { - public void actionPerformed(ActionEvent event) { - TableModelAdapterUITest.this.addEyeColor(); - } - }; - action.setEnabled(true); - return action; - } - - void addEyeColor() { - String color = this.promptUserForEyeColor(); - if (color != null) { - this.eyeColorsHolder.add(color); - } - } - - private String promptUserForEyeColor() { - while (true) { - String eyeColor = JOptionPane.showInputDialog("Eye Color"); - if (eyeColor == null) { - return null; // user pressed <Cancel> - } - if ((eyeColor.length() == 0)) { - JOptionPane.showMessageDialog(null, "The eye color is required.", "Invalid Eye Color", JOptionPane.ERROR_MESSAGE); - } else if (CollectionTools.contains(this.eyeColorsHolder.iterator(), eyeColor)) { - JOptionPane.showMessageDialog(null, "The eye color already exists.", "Invalid Eye Color", JOptionPane.ERROR_MESSAGE); - } else { - return eyeColor; - } - } - } - - - // ********** print button ********** - - private JButton buildPrintButton() { - return new JButton(this.buildPrintAction()); - } - - private Action buildPrintAction() { - Action action = new AbstractAction("print") { - public void actionPerformed(ActionEvent event) { - TableModelAdapterUITest.this.printCrowd(); - } - }; - action.setEnabled(true); - return action; - } - - void printCrowd() { - System.out.println(this.crowd()); - for (Iterator<Person> stream = this.crowd().people(); stream.hasNext(); ) { - System.out.println("\t" + stream.next()); - } - } - - - // ********** reset button ********** - - private JButton buildResetButton() { - return new JButton(this.buildResetAction()); - } - - private Action buildResetAction() { - Action action = new AbstractAction("reset") { - public void actionPerformed(ActionEvent event) { - TableModelAdapterUITest.this.reset(); - } - }; - action.setEnabled(true); - return action; - } - - void reset() { - this.crowdHolder.setValue(this.buildCrowd()); - } - - - // ********** new name dialog ********** - - private String getNameFromUser() { - return this.promptUserForName(null); - } - - private String promptUserForName(@SuppressWarnings("unused") String originalName) { - while (true) { - String name = JOptionPane.showInputDialog("Person Name"); - if (name == null) { - return null; // user pressed <Cancel> - } - if ((name.length() == 0)) { - JOptionPane.showMessageDialog(null, "The name is required.", "Invalid Name", JOptionPane.ERROR_MESSAGE); - } else if (CollectionTools.contains(this.crowd().peopleNames(), name)) { - JOptionPane.showMessageDialog(null, "The name already exists.", "Invalid Name", JOptionPane.ERROR_MESSAGE); - } else { - return name; - } - } - } - - - // ********** name text field ********** - - private Component buildNameTextField() { - JTextField textField = new JTextField(this.buildNameDocument(), null, 0); - textField.setEditable(false); - return textField; - } - - private Document buildNameDocument() { - return new DocumentAdapter(this.buildNameAdapter()); - } - - private WritablePropertyValueModel<String> buildNameAdapter() { - return new PropertyAspectAdapter<Person, String>(this.selectedPersonHolder, Person.NAME_PROPERTY) { - @Override - protected String buildValue_() { - return this.subject.getName(); - } - @Override - protected void setValue_(String value) { - this.subject.setName(value); - } - }; - } - - - // ********** birth date spinner ********** - - private JSpinner buildBirthDateSpinner() { - return new JSpinner(this.buildBirthDateSpinnerModel()); - } - - private SpinnerModel buildBirthDateSpinnerModel() { - return new DateSpinnerModelAdapter(this.buildBirthDateAdapter()); - } - - private WritablePropertyValueModel<Object> buildBirthDateAdapter() { - return new PropertyAspectAdapter<Person, Object>(this.selectedPersonHolder, Person.BIRTH_DATE_PROPERTY) { - @Override - protected Date buildValue_() { - return this.subject.getBirthDate(); - } - @Override - protected void setValue_(Object value) { - this.subject.setBirthDate((Date) value); - } - }; - } - - - // ********** gone west date spinner ********** - - private JSpinner buildGoneWestDateSpinner() { - return new JSpinner(this.buildGoneWestDateSpinnerModel()); - } - - private SpinnerModel buildGoneWestDateSpinnerModel() { - return new DateSpinnerModelAdapter(this.buildGoneWestDateAdapter()); - } - - private WritablePropertyValueModel<Object> buildGoneWestDateAdapter() { - return new PropertyAspectAdapter<Person, Object>(this.selectedPersonHolder, Person.GONE_WEST_DATE_PROPERTY) { - @Override - protected Date buildValue_() { - return this.subject.getGoneWestDate(); - } - @Override - protected void setValue_(Object value) { - this.subject.setGoneWestDate((Date) value); - } - }; - } - - - // ********** eye color combo-box ********** - - private JComboBox buildEyeColorComboBox() { - return new JComboBox(this.buildEyeColorComboBoxModel()); - } - - private ComboBoxModel buildEyeColorComboBoxModel() { - return new ComboBoxModelAdapter(this.eyeColorsHolder, this.buildEyeColorAdapter()); - } - - private WritablePropertyValueModel<Object> buildEyeColorAdapter() { - return new PropertyAspectAdapter<Person, Object>(this.selectedPersonHolder, Person.EYE_COLOR_PROPERTY) { - @Override - protected Object buildValue_() { - return this.subject.getEyeColor(); - } - @Override - protected void setValue_(Object value) { - this.subject.setEyeColor((String) value); - } - }; - } - - - // ********** evil check box ********** - - private JCheckBox buildEvilCheckBox() { - JCheckBox checkBox = new JCheckBox(); - checkBox.setText("evil"); - checkBox.setModel(this.buildEvilCheckBoxModel()); - return checkBox; - } - - private ButtonModel buildEvilCheckBoxModel() { - return new CheckBoxModelAdapter(this.buildEvilAdapter()); - } - - private WritablePropertyValueModel<Boolean> buildEvilAdapter() { - return new PropertyAspectAdapter<Person, Boolean>(this.selectedPersonHolder, Person.EVIL_PROPERTY) { - @Override - protected Boolean buildValue_() { - return Boolean.valueOf(this.subject.isEvil()); - } - @Override - protected void setValue_(Boolean value) { - this.subject.setEvil(value.booleanValue()); - } - }; - } - - - // ********** rank spinner ********** - - private JSpinner buildRankSpinner() { - return new JSpinner(this.buildRankSpinnerModel()); - } - - private SpinnerModel buildRankSpinnerModel() { - return new NumberSpinnerModelAdapter(this.buildRankAdapter()); - } - - private WritablePropertyValueModel<Number> buildRankAdapter() { - return new PropertyAspectAdapter<Person, Number>(this.selectedPersonHolder, Person.RANK_PROPERTY) { - @Override - protected Number buildValue_() { - return new Integer(this.subject.getRank()); - } - @Override - protected void setValue_(Number value) { - this.subject.setRank(value.intValue()); - } - }; - } - - - // ********** adventure count spinner ********** - - private JSpinner buildAdventureCountSpinner() { - return new JSpinner(this.buildAdventureCountSpinnerModel()); - } - - private SpinnerModel buildAdventureCountSpinnerModel() { - return new NumberSpinnerModelAdapter(this.buildAdventureCountAdapter()); - } - - private WritablePropertyValueModel<Number> buildAdventureCountAdapter() { - return new PropertyAspectAdapter<Person, Number>(this.selectedPersonHolder, Person.ADVENTURE_COUNT_PROPERTY) { - @Override - protected Number buildValue_() { - return new Integer(this.subject.getAdventureCount()); - } - @Override - protected void setValue_(Number value) { - this.subject.setAdventureCount(value.intValue()); - } - }; - } - - - // ********** queries ********** - - private Crowd crowd() { - return this.crowdHolder.getValue(); - } - - private Person selectedPerson() { - if (this.rowSelectionModel.isSelectionEmpty()) { - return null; - } - return (Person) this.rowSelectionModel.selectedValue(); - } - - private void setSelectedPerson(Person person) { - this.rowSelectionModel.setSelectedValue(person); - } - - - // ********** custom renderer ********** - - /** - * This is simply an example of a renderer for the embedded combo-box. - * It does nothing special unless you uncomment the code below.... - */ - private class EyeColorRenderer extends DefaultListCellRenderer { - EyeColorRenderer() { - super(); - } - @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - // just do something to show the renderer is working... - // value = ">" + value; - return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TreeModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TreeModelAdapterTests.java deleted file mode 100644 index 77d6ac00d8..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TreeModelAdapterTests.java +++ /dev/null @@ -1,812 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.StringWriter; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; - -import javax.swing.Icon; -import javax.swing.JTree; -import javax.swing.event.TreeModelEvent; -import javax.swing.event.TreeModelListener; -import javax.swing.tree.TreeModel; - -import junit.framework.TestCase; - -import org.eclipse.jpt.common.utility.IndentingPrintWriter; -import org.eclipse.jpt.common.utility.internal.HashBag; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterators.ReadOnlyIterator; -import org.eclipse.jpt.common.utility.internal.model.AbstractModel; -import org.eclipse.jpt.common.utility.internal.model.value.AbstractTreeNodeValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.CollectionAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.ItemPropertyListValueModelAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.NullListValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; -import org.eclipse.jpt.common.utility.internal.model.value.SimpleListValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelWrapper; -import org.eclipse.jpt.common.utility.internal.model.value.StaticPropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.TransformationListValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.TreeModelAdapter; -import org.eclipse.jpt.common.utility.internal.swing.Displayable; -import org.eclipse.jpt.common.utility.model.event.PropertyChangeEvent; -import org.eclipse.jpt.common.utility.model.listener.ListChangeListener; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.listener.StateChangeListener; -import org.eclipse.jpt.common.utility.model.value.CollectionValueModel; -import org.eclipse.jpt.common.utility.model.value.ListValueModel; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.common.utility.model.value.TreeNodeValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; - -@SuppressWarnings("nls") -public class TreeModelAdapterTests extends TestCase { - boolean eventFired; - - public TreeModelAdapterTests(String name) { - super(name); - } - - public void testGetRoot() { - TreeModel treeModel = this.buildSortedTreeModel(); - treeModel.addTreeModelListener(new TestTreeModelListener()); - TestNode rootNode = (TestNode) treeModel.getRoot(); - TestModel root = rootNode.getTestModel(); - assertEquals("root", root.getName()); -// root.dump(); -// rootNode.dump(); - } - - public void testGetChild() { - TreeModel treeModel = this.buildSortedTreeModel(); - treeModel.addTreeModelListener(new TestTreeModelListener()); - TestNode rootNode = (TestNode) treeModel.getRoot(); - - TestNode expected = rootNode.childNamed("node 1"); - TestNode actual = (TestNode) treeModel.getChild(rootNode, 1); - assertEquals(expected, actual); - - expected = rootNode.childNamed("node 2"); - actual = (TestNode) treeModel.getChild(rootNode, 2); - assertEquals(expected, actual); - } - - public void testGetChildCount() { - TreeModel treeModel = this.buildSortedTreeModel(); - treeModel.addTreeModelListener(new TestTreeModelListener()); - TestNode rootNode = (TestNode) treeModel.getRoot(); - - assertEquals(5, treeModel.getChildCount(rootNode)); - - TestNode node = rootNode.childNamed("node 1"); - assertEquals(1, treeModel.getChildCount(node)); - } - - public void testGetIndexOfChild() { - TreeModel treeModel = this.buildSortedTreeModel(); - treeModel.addTreeModelListener(new TestTreeModelListener()); - TestNode rootNode = (TestNode) treeModel.getRoot(); - - TestNode child = rootNode.childNamed("node 0"); - assertEquals(0, treeModel.getIndexOfChild(rootNode, child)); - - child = rootNode.childNamed("node 1"); - assertEquals(1, treeModel.getIndexOfChild(rootNode, child)); - - child = rootNode.childNamed("node 2"); - assertEquals(2, treeModel.getIndexOfChild(rootNode, child)); - TestNode grandchild = child.childNamed("node 2.2"); - assertEquals(2, treeModel.getIndexOfChild(child, grandchild)); - } - - public void testIsLeaf() { - TreeModel treeModel = this.buildSortedTreeModel(); - treeModel.addTreeModelListener(new TestTreeModelListener()); - TestNode rootNode = (TestNode) treeModel.getRoot(); - assertFalse(treeModel.isLeaf(rootNode)); - TestNode node = rootNode.childNamed("node 1"); - assertFalse(treeModel.isLeaf(node)); - node = rootNode.childNamed("node 3"); - assertTrue(treeModel.isLeaf(node)); - } - - - public void testTreeNodesChanged() { - // the only way to trigger a "node changed" event is to use an unsorted tree; - // a sorted tree will will trigger only "node removed" and "node inserted" events - TreeModel treeModel = this.buildUnsortedTreeModel(); - this.eventFired = false; - treeModel.addTreeModelListener(new TestTreeModelListener() { - @Override - public void treeNodesChanged(TreeModelEvent e) { - TreeModelAdapterTests.this.eventFired = true; - } - }); - TestNode rootNode = (TestNode) treeModel.getRoot(); - TestNode node = rootNode.childNamed("node 1"); - TestModel tm = node.getTestModel(); - tm.setName("node 1++"); - assertTrue(this.eventFired); - - this.eventFired = false; - node = node.childNamed("node 1.1"); - tm = node.getTestModel(); - tm.setName("node 1.1++"); - assertTrue(this.eventFired); - } - - public void testTreeNodesInserted() { - // use an unsorted tree so the nodes are not re-shuffled... - TreeModel treeModel = this.buildUnsortedTreeModel(); - this.eventFired = false; - treeModel.addTreeModelListener(new TestTreeModelListener() { - @Override - public void treeNodesInserted(TreeModelEvent e) { - TreeModelAdapterTests.this.eventFired = true; - } - }); - TestNode rootNode = (TestNode) treeModel.getRoot(); - TestNode node = rootNode.childNamed("node 1"); - TestModel tm = node.getTestModel(); - tm.addChild("new child..."); - assertTrue(this.eventFired); - - this.eventFired = false; - node = node.childNamed("node 1.1"); - tm = node.getTestModel(); - tm.addChild("another new child..."); - assertTrue(this.eventFired); - } - - public void testTreeNodesRemoved() { - TreeModel treeModel = this.buildUnsortedTreeModel(); - this.eventFired = false; - treeModel.addTreeModelListener(new TestTreeModelListener() { - @Override - public void treeNodesRemoved(TreeModelEvent e) { - TreeModelAdapterTests.this.eventFired = true; - } - }); - TestNode rootNode = (TestNode) treeModel.getRoot(); - TestModel root = rootNode.getTestModel(); - root.removeChild(root.childNamed("node 3")); - assertTrue(this.eventFired); - - this.eventFired = false; - TestNode node = rootNode.childNamed("node 2"); - TestModel tm = node.getTestModel(); - tm.removeChild(tm.childNamed("node 2.2")); - assertTrue(this.eventFired); - } - - public void testTreeStructureChanged() { - WritablePropertyValueModel<TreeNodeValueModel<Object>> nodeHolder = new SimplePropertyValueModel<TreeNodeValueModel<Object>>(this.buildSortedRootNode()); - TreeModel treeModel = this.buildTreeModel(nodeHolder); - this.eventFired = false; - treeModel.addTreeModelListener(new TestTreeModelListener() { - @Override - public void treeNodesInserted(TreeModelEvent e) { - // do nothing - } - @Override - public void treeNodesRemoved(TreeModelEvent e) { - // do nothing - } - @Override - public void treeStructureChanged(TreeModelEvent e) { - TreeModelAdapterTests.this.eventFired = true; - } - }); - nodeHolder.setValue(this.buildUnsortedRootNode()); - assertTrue(this.eventFired); - } - - /** - * test a problem we had where removing a child from a tree would cause - * the JTree to call #equals(Object) on each node removed (actually, it was - * TreePath, but that was because its own #equals(Object) was called by - * JTree); and since we had already removed the last listener from the - * aspect adapter, the aspect adapter would say its value was null; this - * would cause a NPE until we tweaked TreeModelAdapter to remove its - * listeners from a node only *after* the node had been completely - * removed from the JTree - * @see TreeModelAdapter#removeNode(Object[], int, TreeNodeValueModel) - * @see TreeModelAdapter#addNode(Object[], int, TreeNodeValueModel) - */ - public void testLazyInitialization() { - TreeModel treeModel = this.buildSpecialTreeModel(); - JTree jTree = new JTree(treeModel); - TestNode rootNode = (TestNode) treeModel.getRoot(); - TestModel root = rootNode.getTestModel(); - // this would cause a NPE: - root.removeChild(root.childNamed("node 3")); - assertEquals(treeModel, jTree.getModel()); - } - - - private TreeModel buildSortedTreeModel() { - return this.buildTreeModel(this.buildSortedRootNode()); - } - - private TestNode buildSortedRootNode() { - return new SortedTestNode(this.buildRoot()); - } - - private TreeModel buildUnsortedTreeModel() { - return this.buildTreeModel(this.buildUnsortedRootNode()); - } - - private TestNode buildUnsortedRootNode() { - return new UnsortedTestNode(this.buildRoot()); - } - - private TreeModel buildSpecialTreeModel() { - return this.buildTreeModel(this.buildSpecialRootNode()); - } - - private TestNode buildSpecialRootNode() { - return new SpecialTestNode(this.buildRoot()); - } - - private TestModel buildRoot() { - TestModel root = new TestModel("root"); - /*Node node_0 = */root.addChild("node 0"); - TestModel node_1 = root.addChild("node 1"); - TestModel node_1_1 = node_1.addChild("node 1.1"); - /*Node node_1_1_1 = */node_1_1.addChild("node 1.1.1"); - TestModel node_2 = root.addChild("node 2"); - /*Node node_2_0 = */node_2.addChild("node 2.0"); - /*Node node_2_1 = */node_2.addChild("node 2.1"); - /*Node node_2_2 = */node_2.addChild("node 2.2"); - /*Node node_2_3 = */node_2.addChild("node 2.3"); - /*Node node_2_4 = */node_2.addChild("node 2.4"); - /*Node node_2_5 = */node_2.addChild("node 2.5"); - /*Node node_3 = */root.addChild("node 3"); - /*Node node_4 = */root.addChild("node 4"); - return root; - } - - - // ********** member classes ********** - - /** - * This is a typical model class with the typical change notifications - * for #name and #children. - */ - public static class TestModel extends AbstractModel { - - // the parent is immutable; the root's parent is null - private final TestModel parent; - - // the name is mutable; so I guess it isn't the "primary key" :-) - private String name; - public static final String NAME_PROPERTY = "name"; - - private final Collection<TestModel> children; - public static final String CHILDREN_COLLECTION = "children"; - - - public TestModel(String name) { // root ctor - this(null, name); - } - private TestModel(TestModel parent, String name) { - super(); - this.parent = parent; - this.name = name; - this.children = new HashBag<TestModel>(); - } - - public TestModel getParent() { - return this.parent; - } - - public String getName() { - return this.name; - } - public void setName(String name) { - Object old = this.name; - this.name = name; - this.firePropertyChanged(NAME_PROPERTY, old, name); - } - - public Iterator<TestModel> children() { - return new ReadOnlyIterator<TestModel>(this.children); - } - public int childrenSize() { - return this.children.size(); - } - public TestModel addChild(String childName) { - TestModel child = new TestModel(this, childName); - this.addItemToCollection(child, this.children, CHILDREN_COLLECTION); - return child; - } - public TestModel[] addChildren(String[] childNames) { - TestModel[] newChildren = new TestModel[childNames.length]; - for (int i = 0; i < childNames.length; i++) { - newChildren[i] = new TestModel(this, childNames[i]); - } - this.addItemsToCollection(newChildren, this.children, CHILDREN_COLLECTION); - return newChildren; - } - public void removeChild(TestModel child) { - this.removeItemFromCollection(child, this.children, CHILDREN_COLLECTION); - } - public void removeChildren(TestModel[] testModels) { - this.removeItemsFromCollection(testModels, this.children, CHILDREN_COLLECTION); - } - public void clearChildren() { - this.clearCollection(this.children, CHILDREN_COLLECTION); - } - public TestModel childNamed(String childName) { - for (TestModel child : this.children) { - if (child.getName().equals(childName)) { - return child; - } - } - throw new RuntimeException("child not found: " + childName); - } - - public String dumpString() { - StringWriter sw = new StringWriter(); - IndentingPrintWriter ipw = new IndentingPrintWriter(sw); - this.dumpOn(ipw); - return sw.toString(); - } - public void dumpOn(IndentingPrintWriter writer) { - writer.println(this); - writer.indent(); - for (TestModel child : this.children) { - child.dumpOn(writer); - } - writer.undent(); - } - public void dumpOn(OutputStream stream) { - IndentingPrintWriter writer = new IndentingPrintWriter(new OutputStreamWriter(stream)); - this.dumpOn(writer); - writer.flush(); - } - public void dump() { - this.dumpOn(System.out); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.name); - } - - } - - - /** - * This Node wraps a TestModel and converts into something that can - * be used by TreeModelAdapter. It converts changes to the TestModel's - * name into "state changes" to the Node; and converts the - * TestModel's children into a ListValueModel of Nodes whose order is - * determined by subclass implementations. - */ - public static abstract class TestNode extends AbstractTreeNodeValueModel<Object> implements Displayable, Comparable<TestNode> { - /** the model object wrapped by this node */ - private final TestModel testModel; - /** this node's parent node; null for the root node */ - private final TestNode parent; - /** this node's child nodes */ - private final ListValueModel<TreeNodeValueModel<Object>> childrenModel; - /** a listener that notifies us when the model object's "internal state" changes */ - private final PropertyChangeListener testModelListener; - - - // ********** constructors/initialization ********** - - /** - * root node constructor - */ - public TestNode(TestModel testModel) { - this(null, testModel); - } - - /** - * branch or leaf node constructor - */ - public TestNode(TestNode parent, TestModel testModel) { - super(); - this.parent = parent; - this.testModel = testModel; - this.childrenModel = this.buildChildrenModel(testModel); - this.testModelListener = this.buildTestModelListener(); - } - - private PropertyChangeListener buildTestModelListener() { - return new PropertyChangeListener() { - public void propertyChanged(PropertyChangeEvent e) { - TestNode.this.testModelChanged(e); - } - }; - } - - /** - * subclasses decide the order of the child nodes - */ - protected abstract ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel model); - - /** - * used by subclasses; - * transform the test model children into nodes - */ - protected ListValueModel<TreeNodeValueModel<Object>> buildNodeAdapter(TestModel model) { - return new TransformationListValueModel<TestModel, TreeNodeValueModel<Object>>(this.buildChildrenAdapter(model)) { - @Override - protected TestNode transformItem(TestModel item) { - return TestNode.this.buildChildNode(item); - } - }; - } - - /** - * subclasses must build a concrete node for the specified test model - */ - protected abstract TestNode buildChildNode(TestModel childTestModel); - - /** - * return a collection value model on the specified model's children - */ - protected CollectionValueModel<TestModel> buildChildrenAdapter(TestModel model) { - return new CollectionAspectAdapter<TestModel, TestModel>(TestModel.CHILDREN_COLLECTION, model) { - @Override - protected Iterator<TestModel> iterator_() { - return this.subject.children(); - } - @Override - protected int size_() { - return this.subject.childrenSize(); - } - }; - } - - - // ********** TreeNodeValueModel implementation ********** - - public TestModel getValue() { - return this.testModel; - } - - public TreeNodeValueModel<Object> parent() { - return this.parent; - } - - public ListValueModel<TreeNodeValueModel<Object>> childrenModel() { - return this.childrenModel; - } - - - // ********** AbstractTreeNodeValueModel implementation ********** - - @Override - protected void engageValue() { - this.testModel.addPropertyChangeListener(TestModel.NAME_PROPERTY, this.testModelListener); - } - - @Override - protected void disengageValue() { - this.testModel.removePropertyChangeListener(TestModel.NAME_PROPERTY, this.testModelListener); - } - - - // ********** Displayable implementation ********** - - public String displayString() { - return this.testModel.getName(); - } - - public Icon icon() { - return null; - } - - - // ********** debugging support ********** - - public String dumpString() { - StringWriter sw = new StringWriter(); - IndentingPrintWriter ipw = new IndentingPrintWriter(sw); - this.dumpOn(ipw); - return sw.toString(); - } - - public void dumpOn(IndentingPrintWriter writer) { - writer.println(this); - writer.indent(); - for (Iterator<TreeNodeValueModel<Object>> stream = this.childrenModel.iterator(); stream.hasNext(); ) { - // cast to a TestNode (i.e. this won't work with a NameTestNode in the tree) - ((TestNode) stream.next()).dumpOn(writer); - } - writer.undent(); - } - - public void dumpOn(OutputStream stream) { - IndentingPrintWriter writer = new IndentingPrintWriter(new OutputStreamWriter(stream)); - this.dumpOn(writer); - writer.flush(); - } - - public void dump() { - this.dumpOn(System.out); - } - - - // ********** behavior ********** - - /** - * the model's name has changed, forward the event to our listeners - */ - protected void testModelChanged(PropertyChangeEvent e) { - // we need to notify listeners that our "internal state" has changed - this.fireStateChanged(); - // our display string stays in synch with the model's name - this.firePropertyChanged(DISPLAY_STRING_PROPERTY, e.getOldValue(), e.getNewValue()); - } - - - // ********** queries ********** - - public TestModel getTestModel() { - return this.testModel; - } - - /** - * testing convenience method - */ - public TestNode childNamed(String name) { - for (Iterator<TreeNodeValueModel<Object>> stream = this.childrenModel.iterator(); stream.hasNext(); ) { - TreeNodeValueModel<Object> childNode = stream.next(); - if (childNode instanceof TestNode) { - if (((TestNode) childNode).getTestModel().getName().equals(name)) { - return (TestNode) childNode; - } - } - } - throw new IllegalArgumentException("child not found: " + name); - } - - - // ********** standard methods ********** - - public int compareTo(TestNode o) { - return this.displayString().compareTo(o.displayString()); - } - - @Override - public String toString() { - return "Node(" + this.testModel + ")"; - } - - } - - /** - * concrete implementation that keeps its children sorted - */ - public static class SortedTestNode extends TestNode { - - // ********** constructors ********** - public SortedTestNode(TestModel testModel) { - super(testModel); - } - public SortedTestNode(TestNode parent, TestModel testModel) { - super(parent, testModel); - } - - // ********** initialization ********** - /** the list should be sorted */ - @Override - protected ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel testModel) { - return new SortedListValueModelWrapper<TreeNodeValueModel<Object>>(this.buildDisplayStringAdapter(testModel)); - } - /** the display string (name) of each node can change */ - protected ListValueModel<TreeNodeValueModel<Object>> buildDisplayStringAdapter(TestModel testModel) { - return new ItemPropertyListValueModelAdapter<TreeNodeValueModel<Object>>(this.buildNodeAdapter(testModel), DISPLAY_STRING_PROPERTY); - } - /** children are also sorted nodes */ - @Override - protected TestNode buildChildNode(TestModel childNode) { - return new SortedTestNode(this, childNode); - } - - } - - - /** - * concrete implementation that leaves its children unsorted - */ - public static class UnsortedTestNode extends TestNode { - - // ********** constructors ********** - public UnsortedTestNode(TestModel testModel) { - super(testModel); - } - public UnsortedTestNode(TestNode parent, TestModel testModel) { - super(parent, testModel); - } - - // ********** initialization ********** - /** the list should NOT be sorted */ - @Override - protected ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel testModel) { - return this.buildNodeAdapter(testModel); - } - /** children are also unsorted nodes */ - @Override - protected TestNode buildChildNode(TestModel childNode) { - return new UnsortedTestNode(this, childNode); - } - - } - - - /** - * concrete implementation that leaves its children unsorted - * and has a special set of children for "node 3" - */ - public static class SpecialTestNode extends UnsortedTestNode { - - // ********** constructors ********** - public SpecialTestNode(TestModel testModel) { - super(testModel); - } - public SpecialTestNode(TestNode parent, TestModel testModel) { - super(parent, testModel); - } - - // ********** initialization ********** - /** return a different list of children for "node 3" */ - @Override - protected ListValueModel<TreeNodeValueModel<Object>> buildChildrenModel(TestModel testModel) { - if (testModel.getName().equals("node 3")) { - return this.buildSpecialChildrenModel(); - } - return super.buildChildrenModel(testModel); - } - protected ListValueModel<TreeNodeValueModel<Object>> buildSpecialChildrenModel() { - TreeNodeValueModel<Object>[] children = new NameTestNode[1]; - children[0] = new NameTestNode(this); - return new SimpleListValueModel<TreeNodeValueModel<Object>>(Arrays.asList(children)); - } - /** children are also special nodes */ - @Override - protected TestNode buildChildNode(TestModel childNode) { - return new SpecialTestNode(this, childNode); - } - - } - - - public static class NameTestNode extends AbstractTreeNodeValueModel<Object> { - private final WritablePropertyValueModel<String> nameAdapter; - private final SpecialTestNode specialNode; // parent node - private final PropertyChangeListener nameListener; - private final ListValueModel<TreeNodeValueModel<Object>> childrenModel; - - // ********** construction/initialization ********** - - public NameTestNode(SpecialTestNode specialNode) { - super(); - this.nameListener = this.buildNameListener(); - this.specialNode = specialNode; - this.nameAdapter = this.buildNameAdapter(); - this.childrenModel = new NullListValueModel<TreeNodeValueModel<Object>>(); - } - protected PropertyChangeListener buildNameListener() { - return new PropertyChangeListener() { - public void propertyChanged(PropertyChangeEvent e) { - NameTestNode.this.nameChanged(e); - } - }; - } - protected WritablePropertyValueModel<String> buildNameAdapter() { - return new PropertyAspectAdapter<TestModel, String>(TestModel.NAME_PROPERTY, this.getTestModel()) { - @Override - protected String buildValue_() { - return this.subject.getName(); - } - @Override - protected void setValue_(String value) { - this.subject.setName(value); - } - }; - } - - public TestModel getTestModel() { - return this.specialNode.getTestModel(); - } - - // ********** TreeNodeValueModel implementation ********** - - public String getValue() { - return this.nameAdapter.getValue(); - } - @Override - public void setValue(Object value) { - this.nameAdapter.setValue((String) value); - } - public TreeNodeValueModel<Object> parent() { - return this.specialNode; - } - public ListValueModel<TreeNodeValueModel<Object>> childrenModel() { - return this.childrenModel; - } - - // ********** AbstractTreeNodeValueModel implementation ********** - - @Override - protected void engageValue() { - this.nameAdapter.addPropertyChangeListener(PropertyValueModel.VALUE, this.nameListener); - } - @Override - protected void disengageValue() { - this.nameAdapter.removePropertyChangeListener(PropertyValueModel.VALUE, this.nameListener); - } - - // ********** behavior ********** - - protected void nameChanged(PropertyChangeEvent e) { - // we need to notify listeners that our "value" has changed - this.firePropertyChanged(VALUE, e.getOldValue(), e.getNewValue()); - } - } - - private TreeModel buildTreeModel(TestNode root) { - return this.buildTreeModel(new StaticPropertyValueModel<TreeNodeValueModel<Object>>(root)); - } - - private TreeModel buildTreeModel(PropertyValueModel<TreeNodeValueModel<Object>> rootHolder) { - return new TreeModelAdapter<Object>(rootHolder) { - @Override - protected ListChangeListener buildChildrenListener() { - return this.buildChildrenListener_(); - } - @Override - protected StateChangeListener buildNodeStateListener() { - return this.buildNodeStateListener_(); - } - @Override - protected PropertyChangeListener buildNodeValueListener() { - return this.buildNodeValueListener_(); - } - @Override - protected PropertyChangeListener buildRootListener() { - return this.buildRootListener_(); - } - }; - } - - - - /** - * listener that will blow up with any event; - * override and implement expected event methods - */ - public class TestTreeModelListener implements TreeModelListener { - public void treeNodesChanged(TreeModelEvent e) { - fail("unexpected event"); - } - public void treeNodesInserted(TreeModelEvent e) { - fail("unexpected event"); - } - public void treeNodesRemoved(TreeModelEvent e) { - fail("unexpected event"); - } - public void treeStructureChanged(TreeModelEvent e) { - fail("unexpected event"); - } - } - -} diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TreeModelAdapterUITest.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TreeModelAdapterUITest.java deleted file mode 100644 index 967a02783e..0000000000 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/TreeModelAdapterUITest.java +++ /dev/null @@ -1,425 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 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.TextField; -import java.awt.event.ActionEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import java.util.Collection; -import java.util.Collections; -import java.util.Enumeration; -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTree; -import javax.swing.WindowConstants; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultTreeSelectionModel; -import javax.swing.tree.TreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.iterators.EnumerationIterator; -import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; -import org.eclipse.jpt.common.utility.internal.model.value.swing.TreeModelAdapter; -import org.eclipse.jpt.common.utility.internal.swing.Displayable; -import org.eclipse.jpt.common.utility.model.value.TreeNodeValueModel; -import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TreeModelAdapterTests.SortedTestNode; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TreeModelAdapterTests.TestModel; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TreeModelAdapterTests.TestNode; -import org.eclipse.jpt.common.utility.tests.internal.model.value.swing.TreeModelAdapterTests.UnsortedTestNode; - -/** - * an example UI for testing the TreeModelAdapter - */ -@SuppressWarnings("nls") -public class TreeModelAdapterUITest { - - // hold the tree so we can restore its expansion state - private JTree tree; - private WritablePropertyValueModel<TreeNodeValueModel<Object>> rootNodeHolder; - private boolean sorted; - private TreeModel treeModel; - private TreeSelectionModel treeSelectionModel; - private TextField nameTextField; - - public static void main(String[] args) throws Exception { - new TreeModelAdapterUITest().exec(); - } - - private TreeModelAdapterUITest() { - super(); - } - - private void exec() throws Exception { - this.rootNodeHolder = this.buildRootNodeHolder(); - this.sorted = this.rootNodeHolder.getValue() instanceof SortedTestNode; - this.treeModel = this.buildTreeModel(); - this.treeSelectionModel = this.buildTreeSelectionModel(); - this.nameTextField = new TextField(); - this.openWindow(); - } - - private WritablePropertyValueModel<TreeNodeValueModel<Object>> buildRootNodeHolder() { - return new SimplePropertyValueModel<TreeNodeValueModel<Object>>(this.buildSortedRootNode()); - } - - private TestNode buildSortedRootNode() { - return new SortedTestNode(this.buildRoot()); - } - - private TestNode buildUnsortedRootNode() { - return new UnsortedTestNode(this.buildRoot()); - } - - private TestModel buildRoot() { - TestModel root = new TestModel("root"); - - TestModel node_1 = root.addChild("node 1"); - /*Node node_1_1 = */node_1.addChild("node 1.1"); - - TestModel node_2 = root.addChild("node 2"); - /*Node node_2_1 = */node_2.addChild("node 2.1"); - TestModel node_2_2 = node_2.addChild("node 2.2"); - /*Node node_2_2_1 = */node_2_2.addChild("node 2.2.1"); - /*Node node_2_2_2 = */node_2_2.addChild("node 2.2.2"); - /*Node node_2_3 = */node_2.addChild("node 2.3"); - /*Node node_2_4 = */node_2.addChild("node 2.4"); - /*Node node_2_5 = */node_2.addChild("node 2.5"); - - TestModel node_3 = root.addChild("node 3"); - TestModel node_3_1 = node_3.addChild("node 3.1"); - TestModel node_3_1_1 = node_3_1.addChild("node 3.1.1"); - /*Node node_3_1_1_1 = */node_3_1_1.addChild("node 3.1.1.1"); - - /*Node node_4 = */root.addChild("node 4"); - - return root; - } - - private TreeModel buildTreeModel() { - return new TreeModelAdapter<Object>(this.rootNodeHolder); - } - - private TreeSelectionModel buildTreeSelectionModel() { - TreeSelectionModel tsm = new DefaultTreeSelectionModel(); - tsm.addTreeSelectionListener(this.buildTreeSelectionListener()); - tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); - return tsm; - } - - private TreeSelectionListener buildTreeSelectionListener() { - return new TreeSelectionListener() { - public void valueChanged(TreeSelectionEvent e) { - TreeModelAdapterUITest.this.treeSelectionChanged(e); - } - }; - } - - void treeSelectionChanged(@SuppressWarnings("unused") TreeSelectionEvent e) { - TestModel selectedTestModel = this.selectedTestModel(); - if (selectedTestModel != null) { - this.nameTextField.setText(selectedTestModel.getName()); - } - } - - 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.setLocation(300, 300); - window.setSize(400, 400); - 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.buildTreePane(), BorderLayout.CENTER); - mainPanel.add(this.buildControlPanel(), BorderLayout.SOUTH); - return mainPanel; - } - - private Component buildTreePane() { - return new JScrollPane(this.buildTree()); - } - - private JTree buildTree() { - this.tree = new JTree(this.treeModel) { - @Override - public String convertValueToText(Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { - return ((Displayable) value).displayString(); - } - }; - this.tree.setSelectionModel(this.treeSelectionModel); - this.tree.setRootVisible(true); - this.tree.setShowsRootHandles(true); - this.tree.setRowHeight(20); - this.tree.setDoubleBuffered(true); - return this.tree; - } - - private Component buildControlPanel() { - JPanel controlPanel = new JPanel(new GridLayout(0, 1)); - controlPanel.add(this.buildAddRenameNodePanel()); - controlPanel.add(this.buildMiscPanel()); - return controlPanel; - } - - private Component buildAddRenameNodePanel() { - JPanel addRenameNodePanel = new JPanel(new BorderLayout()); - addRenameNodePanel.add(this.buildAddButton(), BorderLayout.WEST); - addRenameNodePanel.add(this.nameTextField, BorderLayout.CENTER); - addRenameNodePanel.add(this.buildRenameButton(), BorderLayout.EAST); - return addRenameNodePanel; - } - - private Component buildMiscPanel() { - JPanel miscPanel = new JPanel(new GridLayout(1, 0)); - miscPanel.add(this.buildClearChildrenButton()); - miscPanel.add(this.buildRemoveButton()); - miscPanel.add(this.buildResetButton()); - return miscPanel; - } - - private String getName() { - return this.nameTextField.getText(); - } - - // ********** queries ********** - private TestNode selectedNode() { - if (this.treeSelectionModel.isSelectionEmpty()) { - return null; - } - return (TestNode) this.treeSelectionModel.getSelectionPath().getLastPathComponent(); - } - - private TestModel selectedTestModel() { - if (this.treeSelectionModel.isSelectionEmpty()) { - return null; - } - return this.selectedNode().getValue(); - } - - private TestNode rootNode() { - return (TestNode) this.treeModel.getRoot(); - } - - private TestModel root() { - return this.rootNode().getValue(); - } - - private Collection<TreePath> expandedPaths() { - Enumeration<TreePath> stream = this.tree.getExpandedDescendants(new TreePath(this.rootNode())); - if (stream == null) { - return Collections.emptyList(); - } - return CollectionTools.list(new EnumerationIterator<TreePath>(stream)); - } - - // ********** behavior ********** - private void setSelectedNode(TestNode selectedNode) { - this.treeSelectionModel.setSelectionPath(new TreePath(selectedNode.path())); - } - - private void expandPaths(Collection<TreePath> paths) { - for (TreePath path : paths) { - this.tree.expandPath(path); - } - } - - // ********** add ********** - private JButton buildAddButton() { - return new JButton(this.buildAddAction()); - } - - private Action buildAddAction() { - Action action = new AbstractAction("add") { - public void actionPerformed(ActionEvent event) { - TreeModelAdapterUITest.this.addNode(); - } - }; - action.setEnabled(true); - return action; - } - - /** - * adding causes the tree to be sorted and nodes to be - * removed and re-added; so we have to fiddle with the expansion state - */ - void addNode() { - TestModel selectedTestModel = this.selectedTestModel(); - if (selectedTestModel != null) { - String name = this.getName(); - // save the expansion state and restore it after the add - Collection<TreePath> paths = this.expandedPaths(); - - selectedTestModel.addChild(name); - - this.expandPaths(paths); - this.setSelectedNode(this.selectedNode().childNamed(name)); - } - } - - // ********** remove ********** - private JButton buildRemoveButton() { - return new JButton(this.buildRemoveAction()); - } - - private Action buildRemoveAction() { - Action action = new AbstractAction("remove") { - public void actionPerformed(ActionEvent event) { - TreeModelAdapterUITest.this.removeNode(); - } - }; - action.setEnabled(true); - return action; - } - - /** - * we need to figure out which node to select after - * the selected node is deleted - */ - void removeNode() { - TestModel selectedTestModel = this.selectedTestModel(); - // do not allow the root to be removed - if ((selectedTestModel != null) && (selectedTestModel != this.root())) { - // save the parent and index, so we can select another, nearby, node - // once the selected node is removed - TestNode parentNode = (TestNode) this.selectedNode().parent(); - int childIndex = parentNode.indexOfChild(this.selectedNode()); - - selectedTestModel.getParent().removeChild(selectedTestModel); - - int childrenSize = parentNode.childrenSize(); - if (childIndex < childrenSize) { - // select the child that moved up and replaced the just-deleted child - this.setSelectedNode((TestNode) parentNode.child(childIndex)); - } else { - if (childrenSize == 0) { - // if there are no more children, select the parent - this.setSelectedNode(parentNode); - } else { - // if the child at the bottom of the list was deleted, select the next child up - this.setSelectedNode((TestNode) parentNode.child(childIndex - 1)); - } - } - } - } - - // ********** rename ********** - private JButton buildRenameButton() { - return new JButton(this.buildRenameAction()); - } - - private Action buildRenameAction() { - Action action = new AbstractAction("rename") { - public void actionPerformed(ActionEvent event) { - TreeModelAdapterUITest.this.renameNode(); - } - }; - action.setEnabled(true); - return action; - } - - /** - * renaming causes the tree to be sorted and nodes to be - * removed and re-added; so we have to fiddle with the expansion state - */ - void renameNode() { - TestModel selectedTestModel = this.selectedTestModel(); - if (selectedTestModel != null) { - // save the node and re-select it after the rename - TestNode selectedNode = this.selectedNode(); - // save the expansion state and restore it after the rename - Collection<TreePath> paths = this.expandedPaths(); - - selectedTestModel.setName(this.getName()); - - this.expandPaths(paths); - this.setSelectedNode(selectedNode); - } - } - - // ********** clear children ********** - private JButton buildClearChildrenButton() { - return new JButton(this.buildClearChildrenAction()); - } - - private Action buildClearChildrenAction() { - Action action = new AbstractAction("clear children") { - public void actionPerformed(ActionEvent event) { - TreeModelAdapterUITest.this.clearChildren(); - } - }; - action.setEnabled(true); - return action; - } - - /** - * nothing special, we just want to test #fireCollectionChanged(String) - */ - void clearChildren() { - TestModel selectedTestModel = this.selectedTestModel(); - if (selectedTestModel != null) { - selectedTestModel.clearChildren(); - } - } - - // ********** reset ********** - private JButton buildResetButton() { - return new JButton(this.buildResetAction()); - } - - private Action buildResetAction() { - Action action = new AbstractAction("reset") { - public void actionPerformed(ActionEvent event) { - TreeModelAdapterUITest.this.reset(); - } - }; - action.setEnabled(true); - return action; - } - - /** - * test the adapter's root node holder; - * toggle between sorted and unsorted lists - */ - void reset() { - this.sorted = ! this.sorted; - if (this.sorted) { - this.rootNodeHolder.setValue(this.buildSortedRootNode()); - } else { - this.rootNodeHolder.setValue(this.buildUnsortedRootNode()); - } - this.tree.expandPath(new TreePath(this.rootNode())); - } - -} |