Author: reebalazs
Date: Tue Dec 25 12:59:00 2007
New Revision: 50082
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/ (props changed)
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/errors.js
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/kukit.js
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/oper.js
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/resourcedata.js
Log:
Make kukit run with the full binding cycle.
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/errors.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/errors.js
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/errors.js
Tue Dec 25 12:59:00 2007
@@ -183,12 +183,11 @@
;;; };
-;;; err.eventBindError = function(e, eventNames, eventNamespaces){
+;;; err.eventBindError = function(e, eventNames){
;;; var kw = {};
;;; kw.eventNames = eventNames;
-;;; kw.eventNamespaces = eventNamespaces;
;;; var message = 'When binding event name(s) [' + eventNames;
-;;; message += '] in namespace [' + eventNamespaces + '].';
+;;; message += '].';
;;; return setErrorInfo(e, 'EventBindError', message, kw);
;;; };
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
Tue Dec 25 12:59:00 2007
@@ -50,7 +50,7 @@
_EventRegistry.prototype.register =
function(namespace, eventName, binderClass, bindMethodName,
- bindMethodName, defaultActionMethodName) {
+ defaultActionMethodName) {
this.registerForAllEvents(namespace, eventName, binderClass,
bindMethodName,
defaultActionMethodName, 'EachLegacy');
};
@@ -86,7 +86,6 @@
// with the specified iterator
var binditerations = kukit.interfaces.global.get('binditerations',
kukit.interfaces.BindIterationDescriptor);
binditerations.getMethodDescriptor('').register({
- namespace: namespace,
eventNames: namespacedEventNames,
iterName: iterName,
binderClass: binderClass,
@@ -344,13 +343,12 @@
/* (default) method call handling */
-var _EventBinder_callMethod = function(namespace, name, oper, methodName) {
+var _EventBinder_callMethod = function(name, oper, methodName) {
// hidden method for calling just a method and checking that is exists.
// (called from oper)
var method = this[methodName];
if (! method) {
;;; kukit.E = 'Could not trigger event name [' + name;
-;;; kukit.E += '] on namespace [' + namespace;
;;; kukit.E += '], because the method [' + methodName + '] does not
exist.';
throw new Error(kukit.E);
}
@@ -393,36 +391,31 @@
this.info = {};
};
+/* This is used to force creation of binder info and instance for
+ * a given kss selector on a node.
+ * The binder info is returned, it contains binding information
+ * and a reference link to the actual binder instance.
+ */
er.BinderInfoRegistry.prototype.getOrCreateBinderInfo =
function (kssSelector, node) {
// We use the key as the selector's merge id.
var key = kssSelector.getMergeId();
- // Get or create the event.
+ // Get or create the binder and the binder info.
var binderInfo = this.info[key];
if (typeof(binderInfo) == 'undefined') {
- // Create a new event.
-;;; var msg = 'Instantiating event id [' + id + '], className [';
-;;; msg += className + '], namespace [' + namespace + '].';
-;;; kukit.logDebug(msg);
-
//
// The creation of binder instances happens from here.
//
+ //kukit.logWarning(kssSelector.getBindIteration());
var binderClass = kssSelector.getBindIteration().binderClass;
+;;; var msg = 'Instantiating event binder with id [' + kssSelector.getId()
+ '], className [';
+;;; msg += binderClass.prototype.__className__ + '].';
+;;; kukit.logDebug(msg);
+
// Create the binder instance and the binder info
var binder = new binderClass();
binderInfo = this.info[key] = new _BinderInfo(binder);
-
- // store the bound rules
- //binder.__bound_rules__ = [];
- } else if (binderInfo.getBinder().__binderClassName__ !=
- className) {
- // just paranoia
-;;; kukit.E = 'Conflicting class for event id [' + id + '], [';
-;;; kukit.E += binderInfo.getBinder().__binderClassName__;
-;;; kukit.E += '] != [' + className + '].';
- throw new Error(kukit.E);
}
return binderInfo;
};
@@ -437,11 +430,15 @@
return binderInfo;
};
+/* Not used from kukit actually */
+/*
er.BinderInfoRegistry.prototype.getSingletonBinderInfoByName =
function (namespace, name) {
//Get className
- // XXX XXX XXX
- var className = kukit.eventsGlobalRegistry.get(namespace, name).className;
+ if (namespace) {
+ name = namespace + '-' + name;
+ }
+ kukit.eventsGlobalRegistry.get(namespace, name).className;
// Get an event.
var id = er.makeId(namespace, className);
var binderInfo = this.info[id];
@@ -452,6 +449,7 @@
}
return binderInfo;
};
+*/
er.BinderInfoRegistry.prototype.startBindingPhase = function () {
// At the end of the binding phase, we want to process our events. This
@@ -590,24 +588,33 @@
// XXX This will need refactoring.
/// We would only want to lookup from our registry and not the other way
around.
//
-// own registry means eventsets need to be registered in the instance. (klass)
-//
-//
_OperRegistry.prototype.processBindingEvents =
function (binder) {
- var eventRegistry = kukit.eventsGlobalRegistry;
- for (var i=0; i < eventRegistry.eventSets.length; i++) {
- var eventSet = eventRegistry.eventSets[i];
- // Only process binding events (and ignore non-binding ones)
- if (eventSet.bindMethodName) {
- if (binder.__eventNamespace__ == eventSet.namespace) {
- // Process the binding event set.
- // This will call the actual bindmethods
- // according to the specified iterator.
- var iterator = er.getBindIterator(eventSet.iterName);
- iterator.call(this, eventSet, binder);
- }
- }
+ var interfaces = kukit.interfaces.global;
+ // Let's see all our events in a cycle.
+ processed = {};
+ for (var eventName in interfaces.binditerations) {
+ // We only iterate an event once and we greedily iterate
+ // all events which are in the same eventset - so we may
+ // get here by this event name already processed.
+ if (processed[eventName]) {
+ continue;
+ }
+ // One iteration consists of more events. Process all these.
+ var iteration = interfaces.binditerations[eventName];
+ // Let's exit if this element does not exist
+ // (the interface registry finalizes invalid methods to undefined)
+ if (! iteration) {
+ continue;
+ }
+ var eventSet = iteration.eventNames;
+ // Make sure we exclude this element,
+ for (var i=0; i<eventSet.length; i++) {
+ processed[eventSet[i]] = true;
+ }
+ // Finally we call the iterator which will do the binding
+ var iterator = er.getBindIterator(iteration.iterName);
+ iterator.call(this, iteration, binder);
}
};
@@ -680,15 +687,13 @@
};
_OperRegistry.prototype.callBindMethod =
- function (eventSet, binder, p1, p2, p3, p4, p5, p6) {
- var method = binder[eventSet.bindMethodName];
+ function (iteration, binder, p1, p2, p3, p4, p5, p6) {
+ var method = binder[iteration.bindMethodName];
// Protect the binding for better logging
;;; try {
method.call(binder, p1, p2, p3, p4, p5, p6);
;;; } catch(e) {
-;;; var names = eventSet.names;
-;;; var namespace = eventSet.namespace;
-;;; kukit.E = kukit.err.eventBindError(e, names, namespace);
+;;; kukit.E = kukit.err.eventBindError(e, iteration.eventNames);
;;; throw new Error(kukit.E);
;;; }
};
@@ -697,15 +702,15 @@
// Eventname and funcToBind are passed too.
// this is the legacy ([EachLegacy]) way
_OperRegistry.prototype._iterateEachLegacy =
- function (eventSet, binder) {
- for (var i=0; i<eventSet.names.length; i++) {
- var rulesPerName = this.infoPerName[eventSet.names[i]];
+ function (iteration, binder) {
+ for (var i=0; i<iteration.eventNames.length; i++) {
+ var rulesPerName = this.infoPerName[iteration.eventNames[i]];
if (typeof(rulesPerName) != 'undefined') {
for (var nodeHash in rulesPerName) {
var oper = rulesPerName[nodeHash];
var eventName = oper.getEventName();
var funcToBind = oper.makeExecuteActionsHook();
- this.callBindMethod(eventSet, binder, eventName,
+ this.callBindMethod(iteration, binder, eventName,
funcToBind, oper);
}
}
@@ -717,13 +722,13 @@
// Eventname and funcToBind are passed too.
// this is the preferred ([Each]) way. Parameters are different from
EachLegacy.
_OperRegistry.prototype._iterateEach =
- function (eventSet, binder) {
- for (var i=0; i<eventSet.names.length; i++) {
- var rulesPerName = this.infoPerName[eventSet.names[i]];
+ function (iteration, binder) {
+ for (var i=0; i<iteration.eventNames.length; i++) {
+ var rulesPerName = this.infoPerName[iteration.eventNames[i]];
if (typeof(rulesPerName) != 'undefined') {
for (var nodeHash in rulesPerName) {
var oper = rulesPerName[nodeHash];
- this.callBindMethod(eventSet, binder, oper);
+ this.callBindMethod(iteration, binder, oper);
}
}
}
@@ -731,30 +736,30 @@
// This calls the bind method by the list of bound opers
_OperRegistry.prototype._iterateOpers =
- function (eventSet, binder) {
+ function (iteration, binder) {
var opers = [];
- for (var i=0; i<eventSet.names.length; i++) {
- var rulesPerName = this.infoPerName[eventSet.names[i]];
+ for (var i=0; i<iteration.eventNames.length; i++) {
+ var rulesPerName = this.infoPerName[iteration.eventNames[i]];
if (typeof(rulesPerName) != 'undefined') {
for (var nodeHash in rulesPerName) {
opers.push(rulesPerName[nodeHash]);
}
}
}
- this.callBindMethod(eventSet, binder, opers);
+ this.callBindMethod(iteration, binder, opers);
};
// This calls the bind method by a mapping eventName:oper
// per each bound node individually
_OperRegistry.prototype._iterateNode =
- function (eventSet, binder) {
+ function (iteration, binder) {
for (var nodeHash in this.infoPerNode) {
var rulesPerNode = this.infoPerNode[nodeHash];
// filter only the events we are interested in
var filteredRules = {};
var operFound = false;
- for (var i=0; i<eventSet.names.length; i++) {
- var name = eventSet.names[i];
+ for (var i=0; i<iteration.eventNames.length; i++) {
+ var name = iteration.eventNames[i];
var oper = rulesPerNode[name];
if (typeof(oper) != 'undefined') {
filteredRules[name] = oper;
@@ -766,7 +771,7 @@
// we use it as a second parameter to the call.
// The method may or may not want to use this.
if (operFound) {
- this.callBindMethod(eventSet, binder, filteredRules,
+ this.callBindMethod(iteration, binder, filteredRules,
operFound.node);
}
}
@@ -776,7 +781,7 @@
// items, where item.node is the node and item.opersByEventName nodeHash:item
// in item there is item.node and item.opersByEventName
_OperRegistry.prototype._iterateAllNodes =
- function (eventSet, binder) {
+ function (iteration, binder) {
var items = [];
var hasResult = false;
for (var nodeHash in this.infoPerNode) {
@@ -784,8 +789,8 @@
// filter only the events we are interested in
var filteredRules = {};
var operFound = false;
- for (var i=0; i<eventSet.names.length; i++) {
- var name = eventSet.names[i];
+ for (var i=0; i<iteration.eventNames.length; i++) {
+ var name = iteration.eventNames[i];
var oper = rulesPerNode[name];
if (typeof(oper) != 'undefined') {
filteredRules[name] = oper;
@@ -801,7 +806,7 @@
}
// call the binder method
if (hasResult) {
- this.callBindMethod(eventSet, binder, items);
+ this.callBindMethod(iteration, binder, items);
}
};
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
Tue Dec 25 12:59:00 2007
@@ -24,8 +24,8 @@
* and "provide service" sections can be in different javascript files
(plugins),
* and the final outcome is independent of the order of their execution.
*
- * The order in which this is made is irrelevant, after kukit.interfaces is
- * included.
+ * The order in which they are loaded is irrelevant, provided they load
+ * after interfaces.js.
*
* An interface needs to be finalized before being used, and all
* methods will be finalized this time as well.
@@ -242,6 +242,7 @@
// We have a loading method. Let's add our needs.
loader.add(this.fallbackProvider);
// ... and simply go on.
+ return;
} else {
// We raise an error.
;;; kukit.E = 'Could not finalize method [';
@@ -251,17 +252,18 @@
;;; kukit.E += this.preferredProviders + ']';
throw new Error(kukit.E);
}
- }
- if (this.checker) {
- // if there is a checker, merge them together
- var self = this;
- return function() {
- self.checker(null, arguments);
- return func(null, arguments);
- };
} else {
- // else, just store the function
- return func;
+ if (this.checker) {
+ // if there is a checker, merge them together
+ var self = this;
+ return function() {
+ self.checker.apply(null, arguments);
+ return func.apply(null, arguments);
+ };
+ } else {
+ // else, just store the function
+ return func;
+ }
}
};
@@ -320,7 +322,7 @@
// Register config to all event names individually.
// Take names from the config.
for (var i = 0; i < config.eventNames.length; i++) {
- name = config.eventNames[i];
+ var name = config.eventNames[i];
this.iface.getMethodDescriptor(name)._register(config);
}
};
Modified: kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/kukit.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/kukit.js
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/kukit.js
Tue Dec 25 12:59:00 2007
@@ -240,7 +240,7 @@
;;; kukit.log('[initializeRules] is called twice.');
return;
}
-;;; kukit.log('Initializing interfaces.');
+;;; kukit.log('Finalizing interfaces.');
// We finalize the core interface.
var interfaces = kukit.interfaces.global;
interfaces.get('core',
kukit.interfaces.ServiceMethodDescriptor).finalize({});
Modified: kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/oper.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/oper.js
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/oper.js
Tue Dec 25 12:59:00 2007
@@ -175,14 +175,14 @@
;;; throw new Error(kukit.E);
;;; }
//
- var namespace = this.binder.__eventNamespace__;
- var kssevent = kukit.eventsGlobalRegistry.get(namespace, name);
- var methodName = kssevent.defaultActionMethodName;
+ var interface = kukit.interfaces.global;
+ var methodName = interface.events[name].defaultActionMethodName;
+
var success = false;
if (! methodName) {
;;; if (! optional) {
;;; kukit.E = 'Could not trigger event [' + name;
-;;; kukit.E += '] from namespace [' + namespace + '], because this';
+;;; kukit.E += '], because this';
;;; kukit.E += ' event has no default method registered.';
;;; throw new Error(kukit.E);
;;; }
@@ -197,7 +197,7 @@
this.parms = {};
}
this.binder._EventBinder_callMethod(
- namespace, name, this, methodName);
+ name, this, methodName);
success = true;
}
return success;
@@ -227,11 +227,6 @@
return this.eventRule.kssSelector.name;
};
-kukit.op.Oper.prototype.getEventNamespace = function () {
- // Gets event name
- return this.eventRule.kssSelector.namespace;
-};
-
kukit.op.Oper.prototype.hasExecuteActions = function () {
// Decide if there are any actions (or a default action)
// to execute. This can speed up execution if in case
@@ -246,6 +241,9 @@
// The reason for this check is, that a default action is also
// valid, even if it received no parms in the eventRule,
// in which case it is not present as an action.
+ //
+ // XXX XXX XXX XXX XXX
+ return false;
var kssevent = kukit.eventsGlobalRegistry.get(
this.getEventNamespace(), this.getEventName())
var methodName = kssevent.defaultActionMethodName;
Modified:
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/resourcedata.js
==============================================================================
---
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/resourcedata.js
(original)
+++
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/resourcedata.js
Tue Dec 25 12:59:00 2007
@@ -166,7 +166,7 @@
// name cannot contain a @
// id can be any string
// so the merge id will be unique
- return className + '@' + name + '@' + id;
+ return className + '@' + this.name + '@' + id;
}
};
_______________________________________________
Kukit-checkins mailing list
[email protected]
http://codespeak.net/mailman/listinfo/kukit-checkins