Coverage Report - net.wotonomy.test.TestController
 
Classes in this File Line Coverage Branch Coverage Complexity
TestController
0% 
0% 
1.636
 
 1  0
 package net.wotonomy.test;
 2  
 
 3  
 import java.awt.event.ActionEvent;
 4  
 import java.awt.event.ActionListener;
 5  
 import java.awt.event.MouseAdapter;
 6  
 import java.awt.event.MouseEvent;
 7  
 import java.text.DateFormat;
 8  
 import java.util.Iterator;
 9  
 import java.util.LinkedList;
 10  
 import java.util.List;
 11  
 
 12  
 import javax.swing.AbstractButton;
 13  
 import javax.swing.Icon;
 14  
 import javax.swing.JButton;
 15  
 import javax.swing.JComponent;
 16  
 import javax.swing.JOptionPane;
 17  
 import javax.swing.UIManager;
 18  
 import javax.swing.table.TableColumn;
 19  
 
 20  
 import net.wotonomy.control.ChildDataSource;
 21  
 import net.wotonomy.control.EOEditingContext;
 22  
 import net.wotonomy.control.EOGlobalID;
 23  
 import net.wotonomy.control.EOKeyValueQualifier;
 24  
 import net.wotonomy.control.EOQualifier;
 25  
 import net.wotonomy.foundation.NSArray;
 26  
 import net.wotonomy.foundation.NSNotification;
 27  
 import net.wotonomy.ui.EOAssociation;
 28  
 import net.wotonomy.ui.EODisplayGroup;
 29  
 import net.wotonomy.ui.swing.ButtonAssociation;
 30  
 import net.wotonomy.ui.swing.ComboBoxAssociation;
 31  
 import net.wotonomy.ui.swing.DisplayGroupActionAssociation;
 32  
 import net.wotonomy.ui.swing.SliderAssociation;
 33  
 import net.wotonomy.ui.swing.TableColumnAssociation;
 34  
 import net.wotonomy.ui.swing.TextAssociation;
 35  
 import net.wotonomy.ui.swing.TreeColumnAssociation;
 36  
 import net.wotonomy.ui.swing.components.AlternatingRowCellRenderer;
 37  
 import net.wotonomy.ui.swing.components.FormattedCellRenderer;
 38  
 import net.wotonomy.ui.swing.components.IconCellRenderer;
 39  
 import net.wotonomy.ui.swing.components.KeyableCellEditor;
 40  
 
 41  
 /**
 42  
 * Controller for the TestPanel.
 43  
 */
 44  
 public class TestController implements ActionListener
 45  
 {    
 46  
         EODisplayGroup displayGroup;
 47  
         TestPanel panel;
 48  
 
 49  0
     public TestController( TestPanel aPanel )
 50  0
     {
 51  0
                 panel = aPanel;
 52  
                 
 53  
         // setup display group
 54  
 
 55  0
         displayGroup = new EODisplayGroup();        
 56  0
                 displayGroup.setSortOrderings( new NSArray( new Object[]
 57  0
                         { "firstName", "middleName", "lastName" } ) );
 58  
 
 59  
                 // fetch the data
 60  
 //        displayGroup.setUsesOptimisticRefresh( true );
 61  0
         displayGroup.setDataSource( new TestDataSource() );
 62  
 //        displayGroup.setSelectsFirstObjectAfterFetch( true );
 63  0
         displayGroup.fetch();
 64  0
         displayGroup.selectNext();
 65  
 
 66  0
 displayGroup.setDelegate( this );
 67  
 
 68  
                 // set up associations
 69  
 
 70  
         EOAssociation assoc;
 71  
                 
 72  
                 // table association
 73  
                 
 74  
                 TableColumn column;
 75  
                 
 76  0
                 column = new TableColumn();
 77  0
                 column.setHeaderValue( "First" );
 78  0
                 IconCellRenderer iconRenderer = new IconCellRenderer()
 79  
                 {
 80  0
             private Icon icon = UIManager.getIcon("FileChooser.homeFolderIcon");
 81  0
             public Icon getIconForContext(
 82  
                 JComponent container, Object value, 
 83  
                 int row, int col,
 84  
                 boolean isSelected, boolean hasFocus, 
 85  
                 boolean isExpanded, boolean isLeaf )
 86  
             {
 87  0
                 return icon;
 88  
             }
 89  
         };
 90  0
                 iconRenderer.addActionListener( this );
 91  0
                 column.setCellRenderer( new AlternatingRowCellRenderer( iconRenderer ) );
 92  
 //      column.setCellEditor( iconRenderer );
 93  
 //        assoc = new TableColumnAssociation( column );
 94  0
         assoc = new TreeColumnAssociation( column );
 95  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "firstName" );
 96  
 //new net.wotonomy.ui.swing.DisplayGroupInspector( displayGroup );
 97  
 //displayGroup = new EODisplayGroup();        
 98  
 //        assoc.bindAspect( EOAssociation.ChildrenAspect, displayGroup, "childList" );
 99  0
         assoc.bindAspect( EOAssociation.EditableAspect, null, "true" );
 100  0
         assoc.bindAspect( EOAssociation.IsLeafAspect, null, "childCount" );
 101  0
                 ((TableColumnAssociation)assoc).setTable( panel.table );
 102  0
                 assoc.establishConnection();
 103  0
                 ((TreeColumnAssociation)assoc).getTreeModelAssociation().setInsertingAfter( false );
 104  0
                 ((TreeColumnAssociation)assoc).getTreeModelAssociation().setInsertingChild( false );
 105  
 
 106  
 //                column.setCellRenderer( new AlternatingRowCellRenderer( column.getCellRenderer() ) );
 107  
 
 108  
 /*
 109  
         // test the standalone mode of the icon cell renderer
 110  
         panel.add( iconRenderer, java.awt.BorderLayout.SOUTH );
 111  
         iconRenderer.setText( "Hello World!" );
 112  
         iconRenderer.setIcon( UIManager.getIcon("FileChooser.homeFolderIcon") );
 113  
 */        
 114  
         
 115  0
                 column = new TableColumn();
 116  0
                 column.setHeaderValue( "Middle" );
 117  0
                 column.setCellRenderer( new AlternatingRowCellRenderer() );
 118  0
         assoc = new TableColumnAssociation( column );
 119  0
         ((TableColumnAssociation)assoc).setSortCaseSensitive( true );
 120  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "middleName" );
 121  0
                 ((TableColumnAssociation)assoc).setTable( panel.table );
 122  0
                 assoc.establishConnection();
 123  
         
 124  0
                 column = new TableColumn();
 125  0
                 column.setHeaderValue( "Last" );
 126  0
                 column.setCellRenderer( new AlternatingRowCellRenderer() );
 127  0
         column.setCellEditor( new KeyableCellEditor() );
 128  0
         assoc = new TableColumnAssociation( column );
 129  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "lastName" );
 130  0
         assoc.bindAspect( EOAssociation.EditableAspect, null, "true" );
 131  0
                 ((TableColumnAssociation)assoc).setTable( panel.table );
 132  0
                 assoc.establishConnection();
 133  
         
 134  0
                 column = new TableColumn();
 135  0
                 column.setHeaderValue( "Created" );
 136  0
                 FormattedCellRenderer renderer = new FormattedCellRenderer();
 137  0
                 renderer.setFormat( DateFormat.getDateInstance() );
 138  0
                 column.setCellRenderer( new AlternatingRowCellRenderer( renderer ) );
 139  0
         assoc = new TableColumnAssociation( column );
 140  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate" );
 141  0
                 ((TableColumnAssociation)assoc).setTable( panel.table );
 142  0
                 assoc.establishConnection();
 143  
      
 144  0
                 column = new TableColumn();
 145  0
                 column.setHeaderValue( "Special" );
 146  0
                 column.setCellRenderer( new AlternatingRowCellRenderer(
 147  0
             panel.table.getDefaultRenderer( Boolean.class ) ) );
 148  0
         assoc = new TableColumnAssociation( column );
 149  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "special" );
 150  0
         assoc.bindAspect( EOAssociation.EditableAspect, null, "true" );
 151  0
                 ((TableColumnAssociation)assoc).setTable( panel.table );
 152  0
                 assoc.establishConnection();
 153  
         
 154  
         // text associations
 155  
 
 156  0
         assoc = new TextAssociation( panel.firstNameField );
 157  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "firstName" );
 158  
 //EODisplayGroup controllerDisplayGroup = new EODisplayGroup();
 159  
 //controllerDisplayGroup.setObjectArray( new NSArray( this ) );
 160  
 //controllerDisplayGroup.selectNext();
 161  
 //assoc.bindAspect( EOAssociation.ValueAspect, controllerDisplayGroup, "filter" );
 162  0
                 assoc.establishConnection();
 163  
 
 164  0
         assoc = new TextAssociation( panel.middleNameField );
 165  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "middleName" );
 166  0
                 assoc.establishConnection();
 167  
         
 168  0
         assoc = new TextAssociation( panel.lastNameField );
 169  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "lastName" );
 170  0
         assoc.bindAspect( EOAssociation.LabelAspect, displayGroup, "special" );
 171  0
                 assoc.establishConnection();
 172  
                 
 173  0
         assoc = new ButtonAssociation( panel.checkbox );
 174  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "special" );
 175  
 //        assoc.bindAspect( EOAssociation.EnabledAspect, displayGroup, "special" );
 176  
 //        assoc.bindAspect( EOAssociation.VisibleAspect, displayGroup, "special" );
 177  0
                 assoc.establishConnection();
 178  
                 
 179  
                 // combo associations
 180  
                 
 181  0
         assoc = new ComboBoxAssociation( panel.dateBox );
 182  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.date" );
 183  
         // no titles aspect: uses existing combobox options
 184  0
                 assoc.establishConnection();
 185  
         
 186  0
         assoc = new ComboBoxAssociation( panel.monthBox );
 187  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.month" );
 188  0
                 EODisplayGroup monthTitlesGroup = new EODisplayGroup();
 189  0
                 monthTitlesGroup.setObjectArray( new NSArray( 
 190  0
                         new Object[] { "January", "February", "March", "April", "May", "June",  
 191  0
                                 "July", "August", "September", "October", "November", "December" } ) );
 192  0
                 assoc.bindAspect( EOAssociation.TitlesAspect, monthTitlesGroup, "" );
 193  
 
 194  0
                 EODisplayGroup monthObjectsGroup = new EODisplayGroup();
 195  0
                 monthObjectsGroup.setObjectArray( new NSArray( 
 196  0
                         new Object[] { new Integer( 0 ),
 197  0
                                 new Integer( 1 ), new Integer( 2 ), new Integer( 3 ), 
 198  0
                                 new Integer( 4 ), new Integer( 5 ), new Integer( 6 ), 
 199  0
                                 new Integer( 7 ), new Integer( 8 ), new Integer( 9 ), 
 200  0
                                 new Integer( 10 ), new Integer( 11 ) } ) );
 201  0
                 assoc.bindAspect( EOAssociation.ObjectsAspect, monthObjectsGroup, "" );
 202  
                 
 203  0
                 assoc.establishConnection();
 204  
                         
 205  
 
 206  0
                 assoc = new ComboBoxAssociation( panel.yearBox );
 207  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.year" );
 208  
                 
 209  0
                 EODisplayGroup yearTitlesGroup = new EODisplayGroup();
 210  0
                 yearTitlesGroup.setObjectArray( new NSArray( 
 211  0
                         new Object[] { "1999", "2000", "2001" } ) );
 212  0
                 assoc.bindAspect( EOAssociation.TitlesAspect, yearTitlesGroup, "" );
 213  
 
 214  0
                 EODisplayGroup yearObjectsGroup = new EODisplayGroup();
 215  0
                 yearObjectsGroup.setObjectArray( new NSArray( 
 216  0
                         new Object[] { new Integer( 99 ), new Integer( 100 ), new Integer( 101 ) } ) );
 217  0
                 assoc.bindAspect( EOAssociation.ObjectsAspect, yearObjectsGroup, "" );
 218  
                 
 219  0
                 assoc.establishConnection();
 220  
                 
 221  0
         assoc = new SliderAssociation( panel.slider );
 222  0
         assoc.bindAspect( EOAssociation.ValueAspect, displayGroup, "createDate.date" );
 223  0
         assoc.bindAspect( EOAssociation.VisibleAspect, displayGroup, "special" );
 224  0
                 assoc.establishConnection();
 225  
         
 226  0
         assoc = new TextAssociation( panel.infoPanel.getLabelForKey( "Day of Month" ) );
 227  0
         assoc.bindAspect( EOAssociation.VisibleAspect, displayGroup, "special" );
 228  0
                 assoc.establishConnection();
 229  
                 
 230  
                 // display group action associations
 231  
         AbstractButton button;
 232  
 
 233  0
                 button = (AbstractButton)
 234  0
                         panel.savePanel.getButton( "Refresh All" );
 235  0
                 button.addActionListener( new ActionListener()
 236  
                 {
 237  0
                         public void actionPerformed( ActionEvent evt )
 238  
                         { // panel.lastNameField.setText( panel.lastNameField.getText().trim() );
 239  
 
 240  
                 // test all three ways
 241  
                 
 242  0
                                 displayGroup.dataSource().editingContext().invalidateAllObjects();        
 243  
 //                                displayGroup.dataSource().editingContext().parentObjectStore().invalidateAllObjects();        
 244  
 //                                displayGroup.dataSource().editingContext().revert(); 
 245  0
                         }
 246  
                 } );
 247  
                 
 248  0
                 button = (AbstractButton)
 249  0
                         panel.savePanel.getButton( "Commit" );
 250  0
                 button.addActionListener( new ActionListener()
 251  
                 {
 252  0
                         public void actionPerformed( ActionEvent evt )
 253  
                         {
 254  
                 try
 255  
                 {
 256  0
                     displayGroup.dataSource().editingContext().saveChanges();        
 257  
                 }
 258  0
                 catch ( RuntimeException exc )
 259  
                 {
 260  0
                     JOptionPane.showMessageDialog( 
 261  0
                         (java.awt.Component)evt.getSource(), exc.getMessage() );   
 262  0
                     exc.printStackTrace();
 263  0
                 }
 264  0
                         }
 265  
                 } );
 266  
                 
 267  0
                 button = (AbstractButton)
 268  0
                         panel.buttonPanel.getButton( "Add" );
 269  0
                 button.addActionListener( new ActionListener()
 270  
                 {
 271  0
                         public void actionPerformed( ActionEvent evt )
 272  
                         {
 273  0
                                 displayGroup.insertNewObjectAtIndex( 0 );        
 274  0
                         }
 275  
                 } );
 276  
                 
 277  0
                 assoc = new DisplayGroupActionAssociation( 
 278  0
             panel.buttonPanel.getButton( "Remove" ) );
 279  0
                 assoc.bindAspect( EOAssociation.ActionAspect, displayGroup, "deleteSelection" );
 280  0
                 assoc.establishConnection();
 281  
 /*
 282  
                 assoc = new DisplayGroupActionAssociation( 
 283  
             panel.infoPanel.getButtonPanel().getButton( "Refresh" ) );
 284  
                 assoc.bindAspect( EOAssociation.ActionAspect, displayGroup, "updateDisplayedObjects" );
 285  
                 assoc.establishConnection();
 286  
 
 287  
                 assoc = new DisplayGroupActionAssociation( 
 288  
             panel.infoPanel.getButtonPanel().getButton( "Commit" ) );
 289  
                 assoc.bindAspect( EOAssociation.ActionAspect, displayGroup, "updateDisplayedObjects" );
 290  
                 assoc.establishConnection();
 291  
 */
 292  
                 // add MouseListener for table
 293  0
                 panel.table.addMouseListener( new MouseAdapter() 
 294  
                 {
 295  0
                         public void mouseClicked(MouseEvent e)
 296  
                         {
 297  0
                                 if ( e.getClickCount() == 2 )
 298  
                                 {
 299  0
                                         Object o = displayGroup.selectedObject();
 300  0
                                         if ( o != null )
 301  
                                         {
 302  
 //                                                new InspectorController( o );
 303  0
                                                 new EditController( 
 304  0
                             new ChildDataSource( 
 305  0
                                 displayGroup.dataSource(), o ) );
 306  
                                         }                
 307  
                                 }
 308  0
                         }
 309  
                 });
 310  
                 
 311  
                 // add ActionListener for tree button
 312  0
                 ((JButton) panel.buttonPanel.getButton( 
 313  0
                         "Tree View" ) ).addActionListener( new ActionListener()
 314  
                 {
 315  0
                         public void actionPerformed( ActionEvent evt )
 316  
                         {
 317  0
                 EOEditingContext parentContext = Test.editingContext;
 318  0
                 EOEditingContext childContext = new EOEditingContext( parentContext );
 319  
                 
 320  
                 // transpose objects to ids to faults
 321  0
                 List ids = new LinkedList();
 322  0
                 Iterator i = displayGroup.selectedObjects().iterator();
 323  0
                 while ( i.hasNext() )
 324  
                 {
 325  0
                     ids.add( parentContext.globalIDForObject( i.next() ) );
 326  0
                 }
 327  0
                 List objects = new LinkedList();
 328  0
                 i = ids.iterator();
 329  0
                 while( i.hasNext() )
 330  
                 {
 331  0
                     objects.add( childContext.faultForGlobalID( (EOGlobalID) i.next(), childContext ) );
 332  0
                 }
 333  
                 
 334  0
                                 EODisplayGroup treeGroup = new EODisplayGroup();
 335  0
                 treeGroup.setSortOrderings( new NSArray( "lastName" ) );
 336  0
                                 treeGroup.setObjectArray( objects );
 337  
 
 338  0
                 EODisplayGroup childGroup = new EODisplayGroup();
 339  
                 
 340  
                 //childGroup.setDelegate( new DebuggingDelegate() );
 341  
                                 //new TreeInspectorController( treeGroup, childGroup );        
 342  
                                 //new BindingController( treeGroup, childGroup );        
 343  
 
 344  0
                                 new TreeController( childContext, treeGroup, childGroup );        
 345  
 
 346  
                 //NOTE: ChildDataSource is fundamentally broken                    
 347  
 //                                new TreeController( new ChildDataSource(
 348  
 //                    displayGroup.dataSource(), displayGroup.selectedObjects() ) );        
 349  0
                         }
 350  
                 });
 351  
 
 352  
 /*
 353  
         NSNotificationCenter.defaultCenter().addObserver(
 354  
             this, 
 355  
             new NSSelector( "hitMe", new Class[] { NSNotification.class } ), 
 356  
             null, null );        
 357  
 */
 358  0
         }
 359  
     
 360  
     private String filter;
 361  
     public String getFilter()
 362  
     {
 363  0
         return filter;
 364  
     }
 365  
     
 366  
     public void setFilter( String aFilter )
 367  
     {
 368  0
         filter = aFilter;
 369  
         
 370  0
         EOQualifier qualifier = null;
 371  0
         if ( ! "".equals( aFilter ) )
 372  
         {
 373  0
             qualifier = new EOKeyValueQualifier(
 374  0
                 "firstName", EOQualifier.QualifierOperatorContains, filter );
 375  
         }
 376  0
         displayGroup.setQualifier( qualifier );
 377  0
         displayGroup.updateDisplayedObjects();
 378  0
     }
 379  
         
 380  
     public void hitMe( NSNotification aNote )
 381  
     {
 382  0
         System.out.println( aNote );   
 383  0
     }
 384  
 
 385  
         public void actionPerformed( ActionEvent evt )
 386  
         {
 387  0
         Object o = displayGroup.selectedObject();
 388  0
         if ( o != null )
 389  
         {
 390  
 //            new ObjectInspector( o );
 391  0
             new InspectorController( o );
 392  
         }                
 393  0
     }
 394  
     
 395  
 }