summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestController.java
diff options
context:
space:
mode:
Diffstat (limited to 'projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestController.java')
-rw-r--r--projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestController.java395
1 files changed, 395 insertions, 0 deletions
diff --git a/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestController.java b/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestController.java
new file mode 100644
index 0000000..8bbb452
--- /dev/null
+++ b/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TestController.java
@@ -0,0 +1,395 @@
+package net.wotonomy.test;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.text.DateFormat;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.swing.AbstractButton;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.UIManager;
+import javax.swing.table.TableColumn;
+
+import net.wotonomy.control.ChildDataSource;
+import net.wotonomy.control.EOEditingContext;
+import net.wotonomy.control.EOGlobalID;
+import net.wotonomy.control.EOKeyValueQualifier;
+import net.wotonomy.control.EOQualifier;
+import net.wotonomy.foundation.NSArray;
+import net.wotonomy.foundation.NSNotification;
+import net.wotonomy.ui.EOAssociation;
+import net.wotonomy.ui.EODisplayGroup;
+import net.wotonomy.ui.swing.ButtonAssociation;
+import net.wotonomy.ui.swing.ComboBoxAssociation;
+import net.wotonomy.ui.swing.DisplayGroupActionAssociation;
+import net.wotonomy.ui.swing.SliderAssociation;
+import net.wotonomy.ui.swing.TableColumnAssociation;
+import net.wotonomy.ui.swing.TextAssociation;
+import net.wotonomy.ui.swing.TreeColumnAssociation;
+import net.wotonomy.ui.swing.components.AlternatingRowCellRenderer;
+import net.wotonomy.ui.swing.components.FormattedCellRenderer;
+import net.wotonomy.ui.swing.components.IconCellRenderer;
+import net.wotonomy.ui.swing.components.KeyableCellEditor;
+
+/**
+* Controller for the TestPanel.
+*/
+public class TestController implements ActionListener
+{
+ EODisplayGroup displayGroup;
+ TestPanel panel;
+
+ public TestController( TestPanel aPanel )
+ {
+ panel = aPanel;
+
+ // setup display group
+
+ displayGroup = new EODisplayGroup();
+ displayGroup.setSortOrderings( new NSArray( new Object[]
+ { "firstName", "middleName", "lastName" } ) );
+
+ // fetch the data
+// displayGroup.setUsesOptimisticRefresh( true );
+ displayGroup.setDataSource( new TestDataSource() );
+// displayGroup.setSelectsFirstObjectAfterFetch( true );
+ displayGroup.fetch();
+ displayGroup.selectNext();
+
+displayGroup.setDelegate( this );
+
+ // set up associations
+
+ EOAssociation assoc;
+
+ // table association
+
+ TableColumn column;
+
+ column = new TableColumn();
+ column.setHeaderValue( "First" );
+ IconCellRenderer iconRenderer = new IconCellRenderer()
+ {
+ private Icon icon = UIManager.getIcon("FileChooser.homeFolderIcon");
+ public Icon getIconForContext(
+ JComponent container, Object value,
+ int row, int col,
+ boolean isSelected, boolean hasFocus,
+ boolean isExpanded, boolean isLeaf )
+ {
+ return icon;
+ }
+ };
+ iconRenderer.addActionListener( this );
+ column.setCellRenderer( new AlternatingRowCellRenderer( iconRenderer ) );
+// column.setCellEditor( iconRenderer );
+// assoc = new TableColumnAssociation( column );
+ assoc = new TreeColumnAssociation( column );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "firstName" );
+//new net.wotonomy.ui.swing.DisplayGroupInspector( displayGroup );
+//displayGroup = new EODisplayGroup();
+// assoc.bindAspect( EOAssociation.ChildrenAspect, displayGroup, "childList" );
+ assoc.bindAspect( EOAssociation.EditableAspect, null, "true" );
+ assoc.bindAspect( EOAssociation.IsLeafAspect, null, "childCount" );
+ ((TableColumnAssociation)assoc).setTable( panel.table );
+ assoc.establishConnection();
+ ((TreeColumnAssociation)assoc).getTreeModelAssociation().setInsertingAfter( false );
+ ((TreeColumnAssociation)assoc).getTreeModelAssociation().setInsertingChild( false );
+
+// column.setCellRenderer( new AlternatingRowCellRenderer( column.getCellRenderer() ) );
+
+/*
+ // test the standalone mode of the icon cell renderer
+ panel.add( iconRenderer, java.awt.BorderLayout.SOUTH );
+ iconRenderer.setText( "Hello World!" );
+ iconRenderer.setIcon( UIManager.getIcon("FileChooser.homeFolderIcon") );
+*/
+
+ column = new TableColumn();
+ column.setHeaderValue( "Middle" );
+ column.setCellRenderer( new AlternatingRowCellRenderer() );
+ assoc = new TableColumnAssociation( column );
+ ((TableColumnAssociation)assoc).setSortCaseSensitive( true );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "middleName" );
+ ((TableColumnAssociation)assoc).setTable( panel.table );
+ assoc.establishConnection();
+
+ column = new TableColumn();
+ column.setHeaderValue( "Last" );
+ column.setCellRenderer( new AlternatingRowCellRenderer() );
+ column.setCellEditor( new KeyableCellEditor() );
+ assoc = new TableColumnAssociation( column );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "lastName" );
+ assoc.bindAspect( EOAssociation.EditableAspect, null, "true" );
+ ((TableColumnAssociation)assoc).setTable( panel.table );
+ assoc.establishConnection();
+
+ column = new TableColumn();
+ column.setHeaderValue( "Created" );
+ FormattedCellRenderer renderer = new FormattedCellRenderer();
+ renderer.setFormat( DateFormat.getDateInstance() );
+ column.setCellRenderer( new AlternatingRowCellRenderer( renderer ) );
+ assoc = new TableColumnAssociation( column );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate" );
+ ((TableColumnAssociation)assoc).setTable( panel.table );
+ assoc.establishConnection();
+
+ column = new TableColumn();
+ column.setHeaderValue( "Special" );
+ column.setCellRenderer( new AlternatingRowCellRenderer(
+ panel.table.getDefaultRenderer( Boolean.class ) ) );
+ assoc = new TableColumnAssociation( column );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "special" );
+ assoc.bindAspect( EOAssociation.EditableAspect, null, "true" );
+ ((TableColumnAssociation)assoc).setTable( panel.table );
+ assoc.establishConnection();
+
+ // text associations
+
+ assoc = new TextAssociation( panel.firstNameField );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "firstName" );
+//EODisplayGroup controllerDisplayGroup = new EODisplayGroup();
+//controllerDisplayGroup.setObjectArray( new NSArray( this ) );
+//controllerDisplayGroup.selectNext();
+//assoc.bindAspect( EOAssociation.ValueAspect, controllerDisplayGroup, "filter" );
+ assoc.establishConnection();
+
+ assoc = new TextAssociation( panel.middleNameField );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "middleName" );
+ assoc.establishConnection();
+
+ assoc = new TextAssociation( panel.lastNameField );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "lastName" );
+ assoc.bindAspect( EOAssociation.LabelAspect, displayGroup, "special" );
+ assoc.establishConnection();
+
+ assoc = new ButtonAssociation( panel.checkbox );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "special" );
+// assoc.bindAspect( EOAssociation.EnabledAspect, displayGroup, "special" );
+// assoc.bindAspect( EOAssociation.VisibleAspect, displayGroup, "special" );
+ assoc.establishConnection();
+
+ // combo associations
+
+ assoc = new ComboBoxAssociation( panel.dateBox );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.date" );
+ // no titles aspect: uses existing combobox options
+ assoc.establishConnection();
+
+ assoc = new ComboBoxAssociation( panel.monthBox );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.month" );
+ EODisplayGroup monthTitlesGroup = new EODisplayGroup();
+ monthTitlesGroup.setObjectArray( new NSArray(
+ new Object[] { "January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December" } ) );
+ assoc.bindAspect( EOAssociation.TitlesAspect, monthTitlesGroup, "" );
+
+ EODisplayGroup monthObjectsGroup = new EODisplayGroup();
+ monthObjectsGroup.setObjectArray( new NSArray(
+ new Object[] { new Integer( 0 ),
+ new Integer( 1 ), new Integer( 2 ), new Integer( 3 ),
+ new Integer( 4 ), new Integer( 5 ), new Integer( 6 ),
+ new Integer( 7 ), new Integer( 8 ), new Integer( 9 ),
+ new Integer( 10 ), new Integer( 11 ) } ) );
+ assoc.bindAspect( EOAssociation.ObjectsAspect, monthObjectsGroup, "" );
+
+ assoc.establishConnection();
+
+
+ assoc = new ComboBoxAssociation( panel.yearBox );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.year" );
+
+ EODisplayGroup yearTitlesGroup = new EODisplayGroup();
+ yearTitlesGroup.setObjectArray( new NSArray(
+ new Object[] { "1999", "2000", "2001" } ) );
+ assoc.bindAspect( EOAssociation.TitlesAspect, yearTitlesGroup, "" );
+
+ EODisplayGroup yearObjectsGroup = new EODisplayGroup();
+ yearObjectsGroup.setObjectArray( new NSArray(
+ new Object[] { new Integer( 99 ), new Integer( 100 ), new Integer( 101 ) } ) );
+ assoc.bindAspect( EOAssociation.ObjectsAspect, yearObjectsGroup, "" );
+
+ assoc.establishConnection();
+
+ assoc = new SliderAssociation( panel.slider );
+ assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.date" );
+ assoc.bindAspect( EOAssociation.VisibleAspect, displayGroup, "special" );
+ assoc.establishConnection();
+
+ assoc = new TextAssociation( panel.infoPanel.getLabelForKey( "Day of Month" ) );
+ assoc.bindAspect( EOAssociation.VisibleAspect, displayGroup, "special" );
+ assoc.establishConnection();
+
+ // display group action associations
+ AbstractButton button;
+
+ button = (AbstractButton)
+ panel.savePanel.getButton( "Refresh All" );
+ button.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ { // panel.lastNameField.setText( panel.lastNameField.getText().trim() );
+
+ // test all three ways
+
+ displayGroup.dataSource().editingContext().invalidateAllObjects();
+// displayGroup.dataSource().editingContext().parentObjectStore().invalidateAllObjects();
+// displayGroup.dataSource().editingContext().revert();
+ }
+ } );
+
+ button = (AbstractButton)
+ panel.savePanel.getButton( "Commit" );
+ button.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ {
+ try
+ {
+ displayGroup.dataSource().editingContext().saveChanges();
+ }
+ catch ( RuntimeException exc )
+ {
+ JOptionPane.showMessageDialog(
+ (java.awt.Component)evt.getSource(), exc.getMessage() );
+ exc.printStackTrace();
+ }
+ }
+ } );
+
+ button = (AbstractButton)
+ panel.buttonPanel.getButton( "Add" );
+ button.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ {
+ displayGroup.insertNewObjectAtIndex( 0 );
+ }
+ } );
+
+ assoc = new DisplayGroupActionAssociation(
+ panel.buttonPanel.getButton( "Remove" ) );
+ assoc.bindAspect( EOAssociation.ActionAspect, displayGroup, "deleteSelection" );
+ assoc.establishConnection();
+/*
+ assoc = new DisplayGroupActionAssociation(
+ panel.infoPanel.getButtonPanel().getButton( "Refresh" ) );
+ assoc.bindAspect( EOAssociation.ActionAspect, displayGroup, "updateDisplayedObjects" );
+ assoc.establishConnection();
+
+ assoc = new DisplayGroupActionAssociation(
+ panel.infoPanel.getButtonPanel().getButton( "Commit" ) );
+ assoc.bindAspect( EOAssociation.ActionAspect, displayGroup, "updateDisplayedObjects" );
+ assoc.establishConnection();
+*/
+ // add MouseListener for table
+ panel.table.addMouseListener( new MouseAdapter()
+ {
+ public void mouseClicked(MouseEvent e)
+ {
+ if ( e.getClickCount() == 2 )
+ {
+ Object o = displayGroup.selectedObject();
+ if ( o != null )
+ {
+// new InspectorController( o );
+ new EditController(
+ new ChildDataSource(
+ displayGroup.dataSource(), o ) );
+ }
+ }
+ }
+ });
+
+ // add ActionListener for tree button
+ ((JButton) panel.buttonPanel.getButton(
+ "Tree View" ) ).addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ {
+ EOEditingContext parentContext = Test.editingContext;
+ EOEditingContext childContext = new EOEditingContext( parentContext );
+
+ // transpose objects to ids to faults
+ List ids = new LinkedList();
+ Iterator i = displayGroup.selectedObjects().iterator();
+ while ( i.hasNext() )
+ {
+ ids.add( parentContext.globalIDForObject( i.next() ) );
+ }
+ List objects = new LinkedList();
+ i = ids.iterator();
+ while( i.hasNext() )
+ {
+ objects.add( childContext.faultForGlobalID( (EOGlobalID) i.next(), childContext ) );
+ }
+
+ EODisplayGroup treeGroup = new EODisplayGroup();
+ treeGroup.setSortOrderings( new NSArray( "lastName" ) );
+ treeGroup.setObjectArray( objects );
+
+ EODisplayGroup childGroup = new EODisplayGroup();
+
+ //childGroup.setDelegate( new DebuggingDelegate() );
+ //new TreeInspectorController( treeGroup, childGroup );
+ //new BindingController( treeGroup, childGroup );
+
+ new TreeController( childContext, treeGroup, childGroup );
+
+ //NOTE: ChildDataSource is fundamentally broken
+// new TreeController( new ChildDataSource(
+// displayGroup.dataSource(), displayGroup.selectedObjects() ) );
+ }
+ });
+
+/*
+ NSNotificationCenter.defaultCenter().addObserver(
+ this,
+ new NSSelector( "hitMe", new Class[] { NSNotification.class } ),
+ null, null );
+*/
+ }
+
+ private String filter;
+ public String getFilter()
+ {
+ return filter;
+ }
+
+ public void setFilter( String aFilter )
+ {
+ filter = aFilter;
+
+ EOQualifier qualifier = null;
+ if ( ! "".equals( aFilter ) )
+ {
+ qualifier = new EOKeyValueQualifier(
+ "firstName", EOQualifier.QualifierOperatorContains, filter );
+ }
+ displayGroup.setQualifier( qualifier );
+ displayGroup.updateDisplayedObjects();
+ }
+
+ public void hitMe( NSNotification aNote )
+ {
+ System.out.println( aNote );
+ }
+
+ public void actionPerformed( ActionEvent evt )
+ {
+ Object o = displayGroup.selectedObject();
+ if ( o != null )
+ {
+// new ObjectInspector( o );
+ new InspectorController( o );
+ }
+ }
+
+}