/* * Copyright (C) NetStruxr, Inc. All rights reserved. * * This software is published under the terms of the NetStruxr * Public Software License version 0.5, a copy of which has been * included with this distribution in the LICENSE.NPL file. */ package er.directtoweb.embed; import java.io.Serializable; import com.webobjects.appserver.WOComponent; import com.webobjects.appserver.WOContext; import com.webobjects.directtoweb.D2WEmbeddedComponent; import com.webobjects.directtoweb.D2WSwitchComponent; import com.webobjects.directtoweb.NextPageDelegate; import com.webobjects.eocontrol.EODataSource; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSMutableArray; import er.directtoweb.delegates.ERDBranchDelegate; import er.extensions.eof.ERXEOControlUtilities; public class D2WPick extends D2WEmbeddedComponent { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; public D2WPick(WOContext context) { super(context); } static class _D2WPickActionDelegate implements NextPageDelegate, Serializable { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; public static NextPageDelegate instance=new _D2WPickActionDelegate (); public WOComponent nextPage(WOComponent sender) { WOComponent target = D2WEmbeddedComponent.findTarget(sender); WOComponent nextPage = null; if (target.hasBinding("branchDelegate")) { ERDBranchDelegate delegate = (ERDBranchDelegate)target.valueForBinding("branchDelegate"); if (delegate == null) { throw new RuntimeException("Null branch delegate. Sender: " + sender + " Target: " + target); } else { nextPage = delegate.nextPage(sender); } } else { if (target.hasBinding("selectedObjects") && target.canSetValueForBinding("selectedObjects")) { target.setValueForBinding(sender.valueForKey("selectedObjects"),"selectedObjects"); } nextPage = (WOComponent)target.valueForBinding("action"); } //Here we refresh the list of selectedObjects after hitting any of the buttons on the PickList. sender.takeValueForKey(new NSMutableArray(), "selectedObjects"); return nextPage; } // public EODataSource dataSource() { // return dataSource(); // } } static { try { D2WSwitchComponent.addToPossibleBindings("selectedObjects"); // Used by D2WPick } catch (ExceptionInInitializerError e) { Throwable e2=e.getException(); e2.printStackTrace(); } } // Need to do this so that the action binding is not mandatory @Override public NextPageDelegate actionPageDelegate() { return _D2WPickActionDelegate.instance; } @Override public NextPageDelegate newPageDelegate() { return _D2WPickActionDelegate.instance; } /* public EODataSource dataSource() { EODataSource ds = null; if (hasBinding("list")) { NSArray list = (NSArray)valueForBinding("list"); ds = er.extensions.ERXExtensions.dataSourceForArray(list); } else if (hasBinding("dataSource")) { ds = (EODataSource)valueForBinding("dataSource"); } return ds; }*/ public EODataSource internalDataSource() { EODataSource ds = dataSource(); ds = (ds == null) ? ERXEOControlUtilities.dataSourceForArray(list()) : ds; return ds; } public void setInternalDataSource(Object foo) { /* do nothing you silly D2WPick! */ } public NSArray list() { return (hasBinding("list") ? (NSArray)valueForBinding("list") : null); } public EODataSource dataSource() { return hasBinding("dataSource") ? (EODataSource)valueForBinding("dataSource") : null; } }