Author: nbelaevski
Date: 2008-11-20 19:57:50 -0500 (Thu, 20 Nov 2008)
New Revision: 11284
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIQueue.java
trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js
trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js
Log:
Latest fixes for a4j:queue
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIQueue.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIQueue.java 2008-11-21
00:26:49 UTC (rev 11283)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIQueue.java 2008-11-21
00:57:50 UTC (rev 11284)
@@ -55,6 +55,9 @@
public abstract String getOnerror();
public abstract void setOnerror(String onerror);
+ public abstract String getOnsizeexceeded();
+ public abstract void setOnsizeexceeded(String onsizeexceeded);
+
public abstract boolean isDisabled();
public abstract void setDisabled(boolean disabled);
Modified: trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js
===================================================================
--- trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js 2008-11-21 00:26:49 UTC
(rev 11283)
+++ trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js 2008-11-21 00:57:50 UTC
(rev 11284)
@@ -809,7 +809,7 @@
var queue = A4J.AJAX.EventQueue.getOrCreateQueue(options, formId);
if (queue) {
- queue.push(query, options);
+ queue.push(query, options, event);
} else {
A4J.AJAX.SubmitQuery(query, options);
}
Modified: trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js
===================================================================
--- trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js 2008-11-21 00:26:49 UTC (rev
11283)
+++ trunk/framework/impl/src/main/javascript/ajaxjsf/queue.js 2008-11-21 00:57:50 UTC (rev
11284)
@@ -60,18 +60,19 @@
addEvent: function(data) {
if (!this.isFull()) {
-
this.items.push(data);
-
- if (!this.request) {
- this.submit();
- }
-
} else {
//log error
}
},
+ //TODO new good name!
+ submitEvent: function() {
+ if (!this.request && !this.isEmpty()) {
+ this.submit();
+ }
+ },
+
submitNext: function() {
this.clearRequest();
@@ -90,7 +91,7 @@
return this.getSize() == 0;
},
- hasNextItem: function() {
+ hasNext: function() {
return this.items.length != 0;
},
@@ -102,8 +103,8 @@
}
},
- abortDupResponces: function(data) {
- if (!this.hasNextItem() && data.getRequestId() == this.requestId) {
+ abortDupResponses: function(data) {
+ if (!this.hasNext() && data.getRequestId() == this.requestId) {
this.abortCurrentRequest();
}
}
@@ -152,12 +153,14 @@
if (this.pipeline.isEmpty()) {
this.pipeline.addEvent(this.pop());
+ this.pipeline.submitEvent();
}
},
transferIfReady: function() {
if (this.delayPassed) {
this.pipeline.addEvent(this.pop());
+ this.pipeline.submitEvent();
}
},
@@ -180,7 +183,7 @@
return function(data) {
if (data.isIgnoreDupResponses()) {
- this.pipeline.abortDupResponces(data);
+ this.pipeline.abortDupResponses(data);
}
var requestId = data.getRequestId();
@@ -196,17 +199,31 @@
this.pipeline.addEvent(this.pop());
}
+ var newDataHandled = false;
+
if (this.pipeline.isFull()) {
var behavior = data.getSizeExceededBehavior();
+
+ var queue = data.queue;
+ var queueOptions = queue.queueOptions;
+
+ if (queueOptions.onsizeexceeded) {
+ var query = data.query;
+ var options = data.options;
+ var event = data.event;
+
+ queueOptions.onsizeexceeded.call(data.queue, query, options, event);
+ }
+
if (behavior == DROP_NEW ||
- (behavior == DROP_NEXT && !this.pipeline.hasNextItem())) {
+ (behavior == DROP_NEXT && !(this.pipeline.hasNext()))) {
- return;
+ newDataHandled = true;
} else if (behavior == FIRE_NEW ||
- (behavior == FIRE_NEXT && !this.pipeline.hasNextItem())) {
+ (behavior == FIRE_NEXT && !(this.pipeline.hasNext()))) {
data.submit();
- return;
+ newDataHandled = true;
} else if (behavior == DROP_NEXT) {
this.pipeline.dropFirst();
} else if (behavior == FIRE_NEXT) {
@@ -215,9 +232,13 @@
}
- this.data = data;
- this.requestId = requestId;
- this.startRequestDelay();
+ this.pipeline.submitEvent();
+
+ if (!newDataHandled) {
+ this.data = data;
+ this.requestId = requestId;
+ this.startRequestDelay();
+ }
}
}
}()
@@ -401,9 +422,11 @@
* }
*/
- var EventQueueData = function(queue, query, options) {
+ var EventQueueData = function(queue, query, options, event) {
this.queue = queue;
this.query = query;
+ this.event = event;
+
this.options = options || {};
this.eventsCount = 1;
@@ -469,7 +492,7 @@
}
for (var name in this.requestOptions) {
- if (!opts[name]) {
+ if (typeof opts[name] == 'undefined') {
opts[name] = this.requestOptions[name];
}
}
@@ -493,9 +516,9 @@
return policy;
},
- push: function(query, opts) {
+ push: function(query, opts, event) {
var options = extendOptions.call(this, opts);
- var queueData = new EventQueueData(this, query, options);
+ var queueData = new EventQueueData(this, query, options, event);
this.gate.push(queueData);
},