Config.js
Summary
Contains Config 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.3 $
Author: Pavel Chuchev pav@troika-asp.com
|
Class Summary
|
| Config |
This is Config class which represents the application configuration information. |
function Config(xmlFile, root) {
if (arguments.length) {
this.init(xmlFile, root);
}
}
Config.prototype.init = function (xmlFile, root) {
var xPathParser = new XPathParser(root + xmlFile);
this.dBConnections = parseDBConnections();
this.logger = parseLogger();
this.reqCtxMaps = parseReqCtxMaps();
this.cmdMaps = parseCmdMaps();
this.securityConstraints = parseSecurityConstraints();
function readChild(node, name, defValue) {
var result = undefined;
var kids = node.childNodes;
for (var i = 0; i < kids.length; i++) {
var kid = kids.item(i);
var baseName = kid.baseName;
if (baseName == name) {
result = kid.text;
}
}
if (result) {
return result;
}
else {
if (typeof (defValue) != "undefined") {
return defValue;
}
else {
throw new Error("Child '" + name + "' not found");
}
}
}
function parseDBConnections() {
var result = {
};
var dbConns = xPathParser.apply("/config/db-connections/db-connection");
for (var i = 0; i < dbConns.length; i++) {
var dbConnAttr = dbConns(i).attributes;
var name = dbConnAttr.getNamedItem("name").value;
var connStr = dbConnAttr.getNamedItem("conn-string").value;
result[name] = connStr.expandVar("root", root);
}
return result;
}
function parseLogger() {
var loggerNode = xPathParser.apply("/config/logger");
var fileName = readChild(loggerNode(0), "file-name");
var maxSize = readChild(loggerNode(0), "max-size");
var generations = readChild(loggerNode(0), "generations");
var logLevel = readChild(loggerNode(0), "log-level");
return {
fileName : fileName.expandVar("root", root), maxSize : maxSize, generations : generations, logLevel : logLevel};
}
function parseForwards(xpath) {
var result = {
};
var gFwds = xPathParser.apply(xpath);
for (var i = 0; i < gFwds.length; i++) {
var fwdAttr = gFwds(i).attributes;
var name = fwdAttr.getNamedItem("name").value;
var redirect = fwdAttr.getNamedItem("redirect").value == "true";
var path = fwdAttr.getNamedItem("path").value;
result[name] = new Forward(redirect, path);
}
return result;
}
function parseReqCtxMaps() {
var result = {
};
var reqCtxMaps = xPathParser.apply("/config/req-ctx-maps/req-ctx-map");
for (var i = 0; i < reqCtxMaps.length; i++) {
var name = reqCtxMaps(i).attributes.getNamedItem("name").value;
var type = reqCtxMaps(i).attributes.getNamedItem("type").value;
result[name] = type;
}
return result;
}
function parseCmdMaps() {
var result = {
};
var cmdMaps = xPathParser.apply("/config/cmd-maps/cmd-map");
for (var i = 0; i < cmdMaps.length; i++) {
var cmdMapAttr = cmdMaps(i).attributes;
var cmdMap = {
};
var action = cmdMapAttr.getNamedItem("action").value;
var validAttr = cmdMapAttr.getNamedItem("validate");
cmdMap.validate = validAttr ? validAttr.value == "true" : false;
cmdMap.type = readChild(cmdMaps(i), "type");
cmdMap.name = readChild(cmdMaps(i), "name", null);
cmdMap.input = parseInput(action);
cmdMap.forwards = parseForwards("/config/cmd-maps/cmd-map[@action='" + action + "']/forwards/forward");
result[action] = cmdMap;
}
return result;
}
function parseInput(action) {
var inputXpath = "/config/cmd-maps/cmd-map[@action='" + action + "']/input";
var inputNode = xPathParser.apply(inputXpath);
if ( inputNode(0)) {
var redirect = inputNode(0).attributes.getNamedItem("redirect").value == "true";
var path = inputNode(0).attributes.getNamedItem("path").value;
return {
redirect : redirect, path : path};
}
else {
return undefined;
}
}
function parseSecurityConstraints() {
var security = xPathParser.apply("/config/security-constraints");
if (!security) {
return undefined;
}
var result = [];
var constraints = xPathParser.apply("/config/security-constraints/constraint");
for (var i = 0; i < constraints.length; i++) {
result.push(parseConstraint(i));
}
return result;
}
function parseConstraint(index) {
var result = {
};
result.urlPatterns = parseUrlPatterns(index);
result.authenticate = parseAuthenticate(index);
result.loginFormPath = parseLoginFormPath(index);
return result;
}
function parseLoginFormPath(index) {
var selector = "position() = " + (index + 1);
var xPath = "/config/security-constraints/constraint[" + selector + "]/login-form-path";
return xPathParser.apply(xPath)(0).text;
}
function parseUrlPatterns(index) {
var result = [];
var selector = "position() = " + (index + 1);
var urlPatternXPath = "/config/security-constraints/constraint[" + selector + "]/url-patterns/url-pattern";
var urlPatterns = xPathParser.apply(urlPatternXPath);
for (var i = 0; i < urlPatterns.length; i++) {
var urlPatternAttr = urlPatterns(i).attributes;
var urlPattern = {
};
urlPattern.requestCtxXpath = urlPatternAttr.getNamedItem("request-ctx-xpath").value;
urlPattern.matchPattern = readChild(urlPatterns(i), "match-pattern");
urlPattern.returnPath = readChild(urlPatterns(i), "return-path");
result.push(urlPattern);
}
return result;
}
function parseAuthenticate(index) {
var result = [];
var selector = "position() = " + (index + 1);
var rolesXPath = "/config/security-constraints/constraint[" + selector + "]/authenticate/role";
var roles = xPathParser.apply(rolesXPath);
for (var i = 0; i < roles.length; i++) {
result.push(roles(i).text);
}
return result;
}
return this;
};
www.troika-asp.com
Documentation generated on Sun Jun 15 17:59:32 2008