I cheated a bit here and extended the Home service so that it checks for a
Visit, if there is one - it'll load a page I have called LoggedInHome
instead of Home. I also extended the Page service so that if it ever sees a
request for a page called Home, it deferes the request to the Home service.

Geoff.

public class ORCAHomeService extends HomeService {

  public boolean service(IEngineServiceView engine, IRequestCycle cycle,
ResponseOutputStream output)
       throws RequestCycleException, ServletException, IOException {
    Visit visit = (Visit) engine.getVisit();
    boolean isLoggedIn = visit != null && visit.getLoggedInUsername() !=
null;
    IPage home;
    if (isLoggedIn) {
        home = cycle.getPage("LoggedInHome");
    } else {
        home = cycle.getPage(IEngine.HOME_PAGE);
    }
    home.validate(cycle);
    // If it validates, then render it.
    cycle.setPage(home);
    if (isLoggedIn) {
        engine.renderResponse(cycle, output);
    } else {
        ((ORCAEngine) engine).renderHomePageResponse(cycle, output);
    }
    return true;
}
}

public class ORCAPageService extends PageService {

    public boolean service(IEngineServiceView engine, IRequestCycle cycle,
ResponseOutputStream output)
        throws RequestCycleException, ServletException, IOException {

    RequestContext context = cycle.getRequestContext();
    String[] serviceContext = getServiceContext(context);
    if (serviceContext == null || serviceContext.length != 1)
        throw new ApplicationRuntimeException(Tapestry.getString(
            "service-single-parameter",  IEngineService.PAGE_SERVICE));
    String pageName = serviceContext[0];
    RequestContext rcontext = cycle.getRequestContext();
    HttpServletResponse response = rcontext.getResponse();

    if ("Home".equals(pageName) || "LoggedInHome".equals(pageName)) {
        IEngineService hservice =
engine.getService(AbstractService.HOME_SERVICE);
       reutrn hservice.service(engine, cycle, output);
    }
    IPage page = cycle.getPage(pageName);
    page.validate(cycle);
    cycle.setPage(page);
    engine.renderResponse(cycle, output);
    return true;
}

}


Geoffrey Longman
Intelligent Works Inc.


_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm

_______________________________________________
Tapestry-developer mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/tapestry-developer

Reply via email to