From c9b5038a6267c5cb6e50af1c4c7e36f0d262fe7e Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Thu, 11 Apr 2013 12:30:03 +0200 Subject: Builder: factory,ctor overrides, mass build https://fedorahosted.org/freeipa/ticket/3235 --- install/ui/src/freeipa/_base/Builder.js | 63 ++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) (limited to 'install/ui/src') diff --git a/install/ui/src/freeipa/_base/Builder.js b/install/ui/src/freeipa/_base/Builder.js index b6ed41c2..07c64f76 100644 --- a/install/ui/src/freeipa/_base/Builder.js +++ b/install/ui/src/freeipa/_base/Builder.js @@ -44,6 +44,10 @@ define(['dojo/_base/declare', */ spec_mod: null, + factory: null, + + constructor: null, + post_ops: [], pre_ops: [], @@ -51,11 +55,14 @@ define(['dojo/_base/declare', /** * Build object based on spec. * - * @param {String|Function|Object} Build spec + * @param {String|Function|Object|Array} Build spec + * @param {Object} build context + * @param {Object} overrides * * String: type name, queries registry * Function: factory or constructor * Object: spec object + * Array: array of spec objects * * Build control properies of spec object: * $constructor: Function @@ -66,11 +73,52 @@ define(['dojo/_base/declare', * $post_ops: [] * * All other properties will be passed to object construction method. + * + * Builder default factory and constructor is overridden by those specified + * in overrides when overrides are set. */ - build: function(spec, context) { + build: function(spec, context, overrides) { + + var f,c; + + context = context || {}; + + if (overrides) { + f = this.factory; + c = this.constructor; + if (typeof overrides === 'function') { + if (construct.is_constructor(overrides)) { + overrides = { constructor: overrides }; + } else { + overrides = { factory: overrides }; + } + } + this.factory = overrides.factory; + this.constructor = overrides.constructor; + } + var objects; + if (lang.isArray(spec)) { + objects = []; + for (var i=0; i