TROIKA.ASP - the MVC framework

FrontController.js

Summary

Contains Forward class.

This is part of Troika.ASP Framework - web development MVC framework for ASP 3.0. Please visit www.troika-asp.com for more details.



Version: $Revision: 1.4 $

Author: Pavel Chuchev pav@troika-asp.com


Class Summary
FrontController This is FrontController class - central access point for the requests to the framework.

/**
* @fileoverview Contains <tt>Forward</tt> class.
*
* <p>
* This is part of Troika.ASP Framework - web development MVC framework for ASP 3.0.
* Please visit {@link http://www.troika-asp.com www.troika-asp.com} for more details.
* </p>
*
* @author Pavel Chuchev pav@troika-asp.com
* @version $Revision: 1.4 $
*/
FrontController.ACTION_NAME = "cmd";
FrontController.APP_CONFIG = "config";
/**
* Constructs a new instance of Forward class.
*
* @class This is <tt>FrontController</tt> class - central access point for the requests to the framework.
*
* <ul>
* <li>Logical Resource Mapping</li>
* <li>Creating RequestContext</li>
* <li>Processing the RequestContext</li>
* <li>Dispatching ResponseContext to the View</li>
* </ul>
*
* @constructor
*/
function FrontController() {

    /**
    * Performs business logic here.
    */
    this.process = function () {

        var environment =  new Environment();
        var configStr = environment.application.get(FrontController.APP_CONFIG);

        var config =  new Config().valueOf(configStr);

        //set up logger
        Logger.log =  new Logger(config);

        var requestCtx = createRequestCtx(config, environment);

        var appController =  new AppController(config, environment);
        var responseCtx = appController.handleRequest(requestCtx);

        if (responseCtx) {

            new Dispatcher(environment).execute(requestCtx, responseCtx);
        }
    };

    function createRequestCtx(config, environment) {

        var result = undefined;

        var request = environment.request;
        var actionItems = request.get(FrontController.ACTION_NAME);

        if (!actionItems || !actionItems.size()) {

            var session = environment.session;

            actionItems = session.get(FrontController.ACTION_NAME);

            if (!actionItems || !actionItems.size()) {

                throw new Error("'" + FrontController.ACTION_NAME + "' parameter not specified");
            }
        }

        var action = "" + actionItems.get(0);

        var cmdMap = config.cmdMaps[action];
        if (!cmdMap) {

            throw new Error("Action '" + action + "' not found");
        }

        if (cmdMap.name) {

            var reqCtxMapType = config.reqCtxMaps[cmdMap.name];

            if (!reqCtxMapType) {

                throw new Error("RequestCtx(Form) '" + cmdMap.name + "' not found");
            }

            result = eval("new " + reqCtxMapType + "()").init(action);

            for (var key in result) {

                if (typeof (result[key]) == "function") {

                    continue;
                }

                var items = request.get(key);
                if (items && items.size && items.size() > 0) {

                    var values =  new ArrayList();

                    for (var i = 0; i < items.size(); i++) {

                        values.add("" + items.get(i));
                    }

                    result[key] = values;
                    result.action = action;
                }
            }
        }
        else {

            result =  new RequestContext(action);
        }

        return result;
    }
}

TROIKA.ASP - the MVC framework

www.troika-asp.com
Documentation generated on Sun Jun 15 17:59:32 2008