Package er.examples.movies

Source Code of er.examples.movies.EditOrCreateDirectors$CreateDirectorDelegate

package er.examples.movies;

import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.directtoweb.D2W;
import com.webobjects.directtoweb.EditPageInterface;
import com.webobjects.directtoweb.NextPageDelegate;
import com.webobjects.eoaccess.EOUtilities;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.eocontrol.EOEnterpriseObject;

import er.directtoweb.interfaces.ERDEditPageInterface;
import er.directtoweb.interfaces.ERDObjectSaverInterface;
import er.extensions.eof.ERXEC;
import er.extensions.eof.ERXEOControlUtilities;
import er.extensions.logging.ERXLogger;

public class EditOrCreateDirectors extends WOComponent {

    public EditOrCreateDirectors(WOContext context) {
        super(context);
    }

    @Override
    public boolean isStateless() {
        return true;
    }

    public EOEnterpriseObject movie() {
        return (EOEnterpriseObject)valueForBinding("object");
    }
   
    public WOComponent newDirector() {
        // Could use a child context if we didn't want the talent to go to the database
        EOEditingContext ec = ERXEC.newEditingContext();
        EOEnterpriseObject director = ERXEOControlUtilities.createAndInsertObject(ec, "Talent");
       
        // Let's throw to a regular edit page
        EditPageInterface epi = (EditPageInterface)D2W.factory().pageForConfigurationNamed("EditTalent", session());
        epi.setObject(director);
        epi.setNextPageDelegate(new CreateDirectorDelegate(movie(), context().page()));
        return (WOComponent)epi;
    }

    public static class CreateDirectorDelegate implements NextPageDelegate {

        public static final ERXLogger log = ERXLogger.getERXLogger(CreateDirectorDelegate.class);
       
        protected EOEnterpriseObject movie;
        protected WOComponent nextPage;

        public CreateDirectorDelegate(EOEnterpriseObject movie, WOComponent nextPage) {
            this.movie = movie;
            this.nextPage = nextPage;
        }

        public WOComponent nextPage(WOComponent sender) {
            if (sender instanceof ERDObjectSaverInterface) {
                if (((ERDObjectSaverInterface)sender).objectWasSaved()) {
                    // The user saved the object instead of hitting cancel, better hook it up
                    // to the releationship
                    // Have to use our interface as EditPageInterface doesn't have object().
                    EOEnterpriseObject talent = EOUtilities.localInstanceOfObject(movie.editingContext(),
                                                               ((ERDEditPageInterface)sender).object());
                    movie.addObjectToBothSidesOfRelationshipWithKey(talent, "directors");
                }
            } else {
                log.error("Using CreateDirectorDelegate with a sender that does not implement ERDObjectSaverInterface! Sender class: " + sender.getClass().getName());
            }
            return nextPage;
        }
    }
   
}
TOP

Related Classes of er.examples.movies.EditOrCreateDirectors$CreateDirectorDelegate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.