Author: nbelaevski
Date: 2008-11-11 14:51:05 -0500 (Tue, 11 Nov 2008)
New Revision: 11092
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/AjaxRendererUtils.java
trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js
trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js
Log:
Queue: discovery services & renderer updated
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/AjaxRendererUtils.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/AjaxRendererUtils.java 2008-11-11
19:06:29 UTC (rev 11091)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/AjaxRendererUtils.java 2008-11-11
19:51:05 UTC (rev 11092)
@@ -317,24 +317,29 @@
options.put("status", status);
}
String queue = (String) componentAttributes.get(AJAX_QUEUE_ATTR);
+ String implicitQueue = null;
+
Integer requestDelay = (Integer) componentAttributes
.get(AJAX_DELAY_ATTR);
if (null != requestDelay && requestDelay.intValue() > 0) {
options.put(AJAX_DELAY_ATTR, requestDelay);
-// if (null == queue) {
-// queue = clientId;
-// }
+ if (null == queue) {
+ implicitQueue = clientId;
+ }
}
Boolean ignoreDupResponses = (Boolean) componentAttributes
.get(AJAX_ABORT_ATTR);
if (null != ignoreDupResponses && ignoreDupResponses.booleanValue()) {
options.put(AJAX_ABORT_ATTR, JSReference.TRUE);
-// if (null == queue) {
-// queue = clientId;
-// }
+ if (null == queue) {
+ implicitQueue = clientId;
+ }
}
+
if (null != queue) {
options.put(AJAX_QUEUE_ATTR, queue);
+ } else if (implicitQueue != null) {
+ options.put("implicitEventsQueue", clientId);
}
String namespace = facesContext.getExternalContext().encodeNamespace("");
Modified: trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js
===================================================================
--- trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js 2008-11-11 19:06:29 UTC
(rev 11091)
+++ trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js 2008-11-11 19:51:05 UTC
(rev 11092)
@@ -792,7 +792,7 @@
A4J.AJAX.Submit = function( containerId, formId, event , options ) {
var query = A4J.AJAX.PrepareQuery(containerId, formId, event, options);
if (query) {
- var queue = A4J.AJAX.EventQueue.getOrCreateQueue(options.eventsQueue,
options.requestId, options.namespace, formId);
+ var queue = A4J.AJAX.EventQueue.getOrCreateQueue(options, formId);
if (queue) {
queue.push(query, options);
Modified: trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js
===================================================================
--- trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js 2008-11-11 19:06:29 UTC (rev
11091)
+++ trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js 2008-11-11 19:51:05 UTC (rev
11092)
@@ -31,34 +31,51 @@
//TODO A4J.AJAX.EventQueue.getQueue ?
-A4J.AJAX.EventQueue.getOrCreateQueue = function(queueName, requestId, namespace, formId)
{
- //uncomment to switch on global queue
- var name = queueName || A4J.AJAX.EventQueue.DEFAULT_QUEUE_NAME;
+A4J.AJAX.EventQueue.getOrCreateQueue = function(){
+ var qualifyName = function(name, prefix) {
+ if (prefix) {
+ return prefix + ':' + name;
+ } else {
+ return name;
+ }
+ };
+
+ return function(options, formId) {
+ var queueName = options.eventsQueue;
+ var namespace = options.namespace;
- var queue;
- if (formId) {
- queue = A4J.AJAX._eventQueues[formId + ":" + name];
- }
-
- if (!queue) {
- queue = A4J.AJAX._eventQueues[namespace ? (namespace + ":" + name) : name];
- }
-
- if (!queue) {
- name = queueName || requestId;
- if (namespace) {
- name = namespace + ":" + name;
+ var formQueueName;
+ var viewQueueName;
+ var implicitQueueName;
+
+ if (queueName) {
+ formQueueName = qualifyName(queueName, formId);
+ viewQueueName = qualifyName(queueName, namespace);
+
+ //TODO nick - support settings for default queue scope
+ implicitQueueName = viewQueueName;
+ } else {
+ formQueueName = formId;
+ viewQueueName = qualifyName(A4J.AJAX.EventQueue.DEFAULT_QUEUE_NAME, namespace);
+
+ implicitQueueName = options.implicitEventsQueue;
}
- LOG.debug("Creating new transient queue '" + name + "' with
default settings");
- queue = new A4J.AJAX.EventQueue(name);
- queue._transient = true;
+ var queue = A4J.AJAX._eventQueues[formQueueName];
+ if (!queue) {
+ queue = A4J.AJAX._eventQueues[viewQueueName];
+ if (!queue && implicitQueueName) {
+ LOG.debug("Creating new transient queue '" + implicitQueueName +
"' with default settings");
+ queue = new A4J.AJAX.EventQueue(implicitQueueName);
+ queue._transient = true;
+
+ A4J.AJAX.EventQueue.addQueue(queue);
+ }
+ }
- A4J.AJAX.EventQueue.addQueue(queue);
- }
-
- return queue;
-};
+ return queue;
+ }
+}();
A4J.AJAX.EventQueue.prototype = function() {
@@ -151,12 +168,18 @@
submit: function() {
if (!this.request) {
- var queueData = this.queue.shift();
+ var queueData = this.queue[0];
+
if (queueData) {
- LOG.debug("Queue '" + this.name + "' will submit request
NOW");
-
- this.request = queueData.submit();
- this.request.queue = this;
+ if (queueData.delayPassed) {
+ this.queue.shift();
+ LOG.debug("Queue '" + this.name + "' will submit request
NOW");
+
+ this.request = queueData.submit();
+ this.request.queue = this;
+ } else {
+ LOG.debug("Delay for request not passed yet, have to wait");
+ }
} else {
LOG.debug("Queue '" + this.name + "' is empty, nothing to
submit");
}
@@ -189,6 +212,10 @@
nextQueueData.abortDelay();
}
+ //barrier element could be removed
+ //next element can be ready for submit
+ this.submit();
+
return nextQueueData;
};
@@ -248,10 +275,7 @@
}
} else {
LOG.debug("After request: queue not empty, processing next event in queue
'" + this.name + "'");
- var queueData = this.queue[0];
- if (queueData.delayPassed) {
- this.submit();
- }
+ this.submit();
}
}
}
Show replies by date