diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2013-04-15 19:20:56 +0200 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2013-05-06 16:22:26 +0200 |
commit | 849ece00e32747238c819eb7d3ac70f0bdc90833 (patch) | |
tree | f907840c827710906a5c1ebdb70a170010a4fceb | |
parent | 12e10f345b24e2131ce7a2376e96a139fef242b3 (diff) | |
download | freeipa-849ece00e32747238c819eb7d3ac70f0bdc90833.tar.gz freeipa-849ece00e32747238c819eb7d3ac70f0bdc90833.tar.xz freeipa-849ece00e32747238c819eb7d3ac70f0bdc90833.zip |
Builder: global builder and registry
https://fedorahosted.org/freeipa/ticket/3235
-rw-r--r-- | install/ui/src/freeipa/builder.js | 76 | ||||
-rw-r--r-- | install/ui/src/freeipa/ipa.js | 8 | ||||
-rw-r--r-- | install/ui/src/freeipa/reg.js | 83 |
3 files changed, 162 insertions, 5 deletions
diff --git a/install/ui/src/freeipa/builder.js b/install/ui/src/freeipa/builder.js new file mode 100644 index 000000000..0a8c39921 --- /dev/null +++ b/install/ui/src/freeipa/builder.js @@ -0,0 +1,76 @@ +/* Authors: + * Petr Vobornik <pvoborni@redhat.com> + * + * Copyright (C) 2013 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/** + * Global builder interface. + * + * Contains a map of builders for a specific object type. + * + */ +define(['dojo/_base/declare', + 'dojo/_base/array', + 'dojo/_base/lang', + './_base/Builder', + './_base/Singleton_registry' + ], function(declare, array, lang, Builder, Singleton_registry) { + + var builder_registry = new Singleton_registry(); + builder_registry.builder.ctor = Builder; + + var exp = { + builders: builder_registry, + + /** + * Get builder for object type + * + * @param {String} object type + */ + get: function(obj_type) { + return this.builders.get(obj_type); + }, + + /** + * Set builder for object type. + * + * @param {String} object type + * @param {Builder} builder + */ + set: function(obj_type, builder) { + this.builders.set(obj_type, builder); + }, + + /** + * Build object by builder for given object type. + * + * @param {String} object type. Uses generic builder if empty string. + * @param {String|Object|Function} spec + * @param {Object|null} context + * @param {Object|null} build overrides + */ + build: function(obj_type, spec, context, overrides) { + + obj_type = obj_type || 'generic'; + var builder = this.builders.get(obj_type); + return builder.build(spec, context, overrides); + } + }; + + return exp; +});
\ No newline at end of file diff --git a/install/ui/src/freeipa/ipa.js b/install/ui/src/freeipa/ipa.js index 1bcee8391..06172bb0b 100644 --- a/install/ui/src/freeipa/ipa.js +++ b/install/ui/src/freeipa/ipa.js @@ -24,12 +24,12 @@ define(['./jquery', './json2', - './_base/Builder', './_base/i18n', './_base/metadata_provider', + './builder', './entities', './text'], - function($, JSON, Builder, i18n, metadata_provider, entities, text) { + function($, JSON, i18n, metadata_provider, builder, entities, text) { var IPA = function() { @@ -1119,11 +1119,9 @@ IPA.concurrent_command = function(spec) { return that; }; -IPA.builder = new Builder(); - IPA.build = function(spec, context, overrides) { - return IPA.builder.build(spec, context, overrides); + return builder.build(null, spec, context, overrides); }; IPA.default_factory = function(spec) { diff --git a/install/ui/src/freeipa/reg.js b/install/ui/src/freeipa/reg.js new file mode 100644 index 000000000..3d2079fee --- /dev/null +++ b/install/ui/src/freeipa/reg.js @@ -0,0 +1,83 @@ +/* Authors: + * Petr Vobornik <pvoborni@redhat.com> + * + * Copyright (C) 2013 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/** + * Registry-like object which serves as a registry of registries. + * + * Registry object should implement `register` and `get; method as Singleton or + * Construct registry do. It's expected that there will be different types of + * registries for various object types. + * + * Existing registries can be access directly by properties. + * + * Use set method for setting new registry. + * Use get/registry method for getting/registering of object in a registry. + * + * Registries should be named by their object type in singular form. + * I.e.: + * * entity + * * widget + * * action + * * formatter + * * facet + * * dialog + */ +define(['dojo/_base/declare', + 'dojo/_base/array', + 'dojo/_base/lang', + './_base/Singleton_registry' + ], function(declare, array, lang, Singleton_registry) { + + var Registries_registry = declare([Singleton_registry], { + + get: function(object_type, type) { + + var registry = this.inherited([object_type]); + return registry.get(type); + }, + + register: function(object_type, type, func, default_spec) { + var registry = this.inherited([object_type]); + return registry.get(type, func, default_spec); + } + }); + + var reg = new Singleton_registry(); + reg.builder.ctor = Singleton_registry; + + var exp = reg._map; + exp.get = function(object_type, type) { + + var registry = reg.get(object_type); + return registry.get(type); + }; + + exp.register = function(object_type, type, func, default_spec) { + var registry = reg.get(object_type); + registry.register(type, func, default_spec); + }; + + exp.set = function(object_type, registry) { + reg.set(object_type, registry); + }; + + + return exp; +});
\ No newline at end of file |