Author: alexsmirnov
Date: 2007-09-27 18:12:10 -0400 (Thu, 27 Sep 2007)
New Revision: 3160
Added:
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/event/EventsQueue.java
Modified:
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/component/AjaxViewRoot.java
branches/3.1.x/framework/test/src/main/java/org/ajax4jsf/tests/MockViewRoot.java
branches/3.1.x/ui/drag-drop/src/test/java/org/richfaces/component/DragDropTest.java
branches/3.1.x/ui/menu-components/src/test/java/org/richfaces/component/MenuItemComponentTest.java
branches/3.1.x/ui/panelbar/src/test/java/org/richfaces/component/PanelBarComponentTest.java
branches/3.1.x/ui/togglePanel/src/test/java/org/richfaces/component/TogglePanelComponentTest.java
branches/3.1.x/ui/tree/src/test/java/org/richfaces/component/events/TreeEventsTest.java
Log:
fix for a
http://jira.jboss.org/jira/browse/RF-1004 merged from trunk.
Modified:
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/component/AjaxViewRoot.java
===================================================================
---
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/component/AjaxViewRoot.java 2007-09-27
20:55:15 UTC (rev 3159)
+++
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/component/AjaxViewRoot.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -22,6 +22,7 @@
package org.ajax4jsf.component;
import java.io.IOException;
+import java.util.NoSuchElementException;
import javax.faces.FacesException;
import javax.faces.component.UIComponent;
@@ -34,16 +35,13 @@
import org.ajax4jsf.Messages;
import org.ajax4jsf.application.AjaxSingleException;
-import org.ajax4jsf.component.AjaxContainer;
import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.context.AjaxContextImpl;
import org.ajax4jsf.context.InvokerCallback;
import org.ajax4jsf.context.ViewIdHolder;
import org.ajax4jsf.event.AjaxListener;
+import org.ajax4jsf.event.EventsQueue;
import org.ajax4jsf.renderkit.AjaxContainerRenderer;
-import org.apache.commons.collections.Buffer;
-import org.apache.commons.collections.BufferUnderflowException;
-import org.apache.commons.collections.UnboundedFifoBuffer;
/**
* Custom ViewRoot for support render parts of tree for Ajax requests. Main
@@ -149,9 +147,9 @@
* phase, for wich events must be processed.
*/
void broadcastEvents(FacesContext context, PhaseId phaseId) {
- Buffer[] events = getEvents(context);
- Buffer anyPhaseEvents = events[PhaseId.ANY_PHASE.getOrdinal()];
- Buffer phaseEvents = events[phaseId.getOrdinal()];
+ EventsQueue[] events = getEvents(context);
+ EventsQueue anyPhaseEvents = events[PhaseId.ANY_PHASE.getOrdinal()];
+ EventsQueue phaseEvents = events[phaseId.getOrdinal()];
if (phaseEvents.isEmpty() && anyPhaseEvents.isEmpty())
return;
// FacesEvent event = null;
@@ -176,7 +174,7 @@
* @param phaseEventsQueue
* @param havePhaseEvents
*/
- public void processEvents(Buffer phaseEventsQueue, boolean havePhaseEvents) {
+ public void processEvents(EventsQueue phaseEventsQueue, boolean havePhaseEvents) {
FacesEvent event;
while (havePhaseEvents) {
try {
@@ -195,20 +193,20 @@
// clearEvents();
// return;
}
- } catch (BufferUnderflowException e) {
+ } catch (NoSuchElementException e) {
havePhaseEvents = false;
}
}
}
public void broadcastAjaxEvents(FacesContext context) {
- Buffer queue = getAjaxEventsQueue(context);
+ EventsQueue queue = getAjaxEventsQueue(context);
processEvents(queue, !queue.isEmpty());
}
- private Buffer[] events;
+ private EventsQueue[] events;
- private Buffer ajaxEvents = new UnboundedFifoBuffer();
+ private EventsQueue ajaxEvents = new EventsQueue();
/**
* Use FIFO buffers for hold Faces Events. Hold this buffers in Request
@@ -219,14 +217,14 @@
* @param phase
* @return
*/
- protected Buffer getEventsQueue(FacesContext context, PhaseId phase) {
+ protected EventsQueue getEventsQueue(FacesContext context, PhaseId phase) {
return getEvents(context)[phase.getOrdinal()];
}
/**
* @return
*/
- protected Buffer[] getEvents(FacesContext context) {
+ protected EventsQueue[] getEvents(FacesContext context) {
if (events == null) {
clearEvents(context);
}
@@ -239,16 +237,16 @@
* @param context
* @return
*/
- protected Buffer getAjaxEventsQueue(FacesContext context) {
+ protected EventsQueue getAjaxEventsQueue(FacesContext context) {
return ajaxEvents;
}
public void clearEvents(FacesContext context) {
int len;
- events = new Buffer[len = PhaseId.VALUES.size()];
+ events = new EventsQueue[len = PhaseId.VALUES.size()];
for (int i = 0; i < len; i++) {
- events[i] = new UnboundedFifoBuffer();
+ events[i] = new EventsQueue();
}
}
Copied: branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/event/EventsQueue.java
(from rev 3159, trunk/framework/impl/src/main/java/org/ajax4jsf/event/EventsQueue.java)
===================================================================
--- branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/event/EventsQueue.java
(rev 0)
+++
branches/3.1.x/framework/impl/src/main/java/org/ajax4jsf/event/EventsQueue.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -0,0 +1,97 @@
+/**
+ *
+ */
+package org.ajax4jsf.event;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+
+import javax.faces.event.FacesEvent;
+
+/**
+ * Very simple implementation of FIFO buffer, to organize JSF events queue.
+ * @author asmirnov
+ *
+ */
+public class EventsQueue {
+
+ private QueueElement first;
+
+ private QueueElement last;
+
+ /**
+ * Remove and return first queued event.
+ * @return faces event form top of queue
+ * @throws NoSuchElementException , if queue is empty.
+ */
+ public FacesEvent remove() throws NoSuchElementException {
+ if(isEmpty()){
+ throw new NoSuchElementException("Events queue is empty");
+ }
+ FacesEvent element = first.getElement();
+ first = first.getPrevisious();
+ if(null == first){
+ last = null;
+ }
+ return element;
+ }
+
+ /**
+ * Add event to queue.
+ * @param element
+ */
+ public void add(FacesEvent element) {
+ QueueElement queueElement = new QueueElement(element);
+ if(isEmpty()){
+ first = last = queueElement;
+ } else {
+ last.setPrevisious(queueElement);
+ last = queueElement;
+ }
+ }
+
+ public void clear() {
+ first = last = null;
+ }
+
+ public boolean isEmpty() {
+ return null == first;
+ }
+
+ private static class QueueElement {
+
+ private QueueElement previsious;
+
+ private FacesEvent element;
+
+ public QueueElement(FacesEvent element) {
+ this.element = element;
+ }
+
+
+ /**
+ * @param previsious the previsious to set
+ */
+ public void setPrevisious(QueueElement previsious) {
+ this.previsious = previsious;
+ }
+
+
+ /**
+ * @return the previsious
+ */
+ public QueueElement getPrevisious() {
+ return previsious;
+ }
+
+ /**
+ * @return the element
+ */
+ public FacesEvent getElement() {
+ return element;
+ }
+
+ }
+}
Modified:
branches/3.1.x/framework/test/src/main/java/org/ajax4jsf/tests/MockViewRoot.java
===================================================================
---
branches/3.1.x/framework/test/src/main/java/org/ajax4jsf/tests/MockViewRoot.java 2007-09-27
20:55:15 UTC (rev 3159)
+++
branches/3.1.x/framework/test/src/main/java/org/ajax4jsf/tests/MockViewRoot.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -25,7 +25,7 @@
import javax.faces.event.PhaseId;
import org.ajax4jsf.component.AjaxViewRoot;
-import org.apache.commons.collections.Buffer;
+import org.ajax4jsf.event.EventsQueue;
/**
* @author Nick - mailto:nbelaevski@exadel.com
@@ -34,15 +34,15 @@
*/
public class MockViewRoot extends AjaxViewRoot {
- public Buffer getAjaxEventsQueue(FacesContext context) {
+ public EventsQueue getAjaxEventsQueue(FacesContext context) {
return super.getAjaxEventsQueue(context);
}
- public Buffer[] getEvents(FacesContext context) {
+ public EventsQueue[] getEvents(FacesContext context) {
return super.getEvents(context);
}
- public Buffer getEventsQueue(FacesContext context, PhaseId phase) {
+ public EventsQueue getEventsQueue(FacesContext context, PhaseId phase) {
return super.getEventsQueue(context, phase);
}
Modified:
branches/3.1.x/ui/drag-drop/src/test/java/org/richfaces/component/DragDropTest.java
===================================================================
---
branches/3.1.x/ui/drag-drop/src/test/java/org/richfaces/component/DragDropTest.java 2007-09-27
20:55:15 UTC (rev 3159)
+++
branches/3.1.x/ui/drag-drop/src/test/java/org/richfaces/component/DragDropTest.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -1,18 +1,23 @@
package org.richfaces.component;
-
+
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.NoSuchElementException;
import java.util.Set;
import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.component.html.HtmlForm;
+import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
+import org.ajax4jsf.event.EventsQueue;
+import org.ajax4jsf.resource.InternetResource;
+import org.ajax4jsf.resource.InternetResourceBuilder;
+import org.ajax4jsf.resource.ResourceBuilderImpl;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
import org.ajax4jsf.tests.MockViewRoot;
-import org.apache.commons.collections.Buffer;
import org.apache.commons.lang.StringUtils;
import org.richfaces.renderkit.DraggableRendererContributor;
import org.richfaces.renderkit.DropzoneRendererContributor;
@@ -21,13 +26,13 @@
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlScript;
- /**
- * Unit test for simple Component.
- */
+/**
+ * Unit test for simple Component.
+ */
public class DragDropTest extends AbstractAjax4JsfTestCase {
-
+
private UIDndParam dndparam;
-
+
private UIDragIndicator dndindicator;
private UIDragSupport dragsupport;
@@ -38,6 +43,8 @@
private UIComponent form;
+ private static final String CSS_FILE_PATH =
"org/richfaces/renderkit/html/css/dragIndicator.xcss";
+
private static Set javaScripts = new HashSet();
static {
javaScripts.add("org.ajax4jsf.javascript.PrototypeScript");
@@ -46,27 +53,20 @@
javaScripts.add("org.ajax4jsf.javascript.DnDScript");
javaScripts.add("scripts/events.js");
javaScripts.add("scripts/utils.js");
- javaScripts
- .add("scripts/simple-draggable.js");
- javaScripts
- .add("scripts/simple-dropzone.js");
+ javaScripts.add("scripts/simple-draggable.js");
+ javaScripts.add("scripts/simple-dropzone.js");
javaScripts.add("scripts/json/json-mini.js");
- javaScripts
- .add("scripts/json/json-dom.js");
- javaScripts
- .add("scripts/dnd/dnd-common.js");
- javaScripts
- .add("scripts/dnd/dnd-dropzone.js");
- javaScripts
- .add("scripts/dnd/dnd-draggable.js");
- javaScripts
- .add("scripts/drag-indicator.js");
+ javaScripts.add("scripts/json/json-dom.js");
+ javaScripts.add("scripts/dnd/dnd-common.js");
+ javaScripts.add("scripts/dnd/dnd-dropzone.js");
+ javaScripts.add("scripts/dnd/dnd-draggable.js");
+ javaScripts.add("scripts/drag-indicator.js");
}
private static Set eventsSet = new HashSet();
static {
eventsSet.add("org.richfaces.component.html.HtmlDragSupport");
eventsSet.add("org.richfaces.component.html.HtmlDropSupport");
-
+
}
public DragDropTest(String testName) {
@@ -185,30 +185,37 @@
}
public void testDecode() throws Exception {
-
- SetUp();
- externalContext.addRequestParameterMap(DraggableRendererContributor.DRAG_SOURCE_ID,
dragsupport.getClientId(facesContext));
- externalContext.addRequestParameterMap(DropzoneRendererContributor.DROP_TARGET_ID,
dropsupport.getClientId(facesContext));
-
+ externalContext.addRequestParameterMap(
+ DraggableRendererContributor.DRAG_SOURCE_ID, dragsupport
+ .getClientId(facesContext));
+ externalContext.addRequestParameterMap(
+ DropzoneRendererContributor.DROP_TARGET_ID, dropsupport
+ .getClientId(facesContext));
dragsupport.decode(facesContext);
dropsupport.decode(facesContext);
-
+
MockViewRoot root = (MockViewRoot) facesContext.getViewRoot();
- Buffer queue = root.getEventsQueue(facesContext, PhaseId.ANY_PHASE);
+ EventsQueue queue = root
+ .getEventsQueue(facesContext, PhaseId.ANY_PHASE);
assertNotNull(queue);
- Object[] events = queue.toArray();
- for(int i=0;i< events.length;i++)
- {
- boolean found = false;
- for (Iterator srcIt = eventsSet.iterator(); srcIt.hasNext();) {
- String src = (String) srcIt.next();
- found = events[i].toString().contains(src);
- if (found) {
- break;
+ while (true) {
+ try {
+ FacesEvent event = queue.remove();
+ boolean found = false;
+ for (Iterator srcIt = eventsSet.iterator(); srcIt.hasNext();) {
+ String src = (String) srcIt.next();
+ found = event.toString().contains(src);
+ if (found) {
+ break;
+ }
}
+ assertTrue(found);
+ } catch (NoSuchElementException e) {
+ break;
}
- assertTrue(found);
}
}
- }
+
+}
+
Modified:
branches/3.1.x/ui/menu-components/src/test/java/org/richfaces/component/MenuItemComponentTest.java
===================================================================
---
branches/3.1.x/ui/menu-components/src/test/java/org/richfaces/component/MenuItemComponentTest.java 2007-09-27
20:55:15 UTC (rev 3159)
+++
branches/3.1.x/ui/menu-components/src/test/java/org/richfaces/component/MenuItemComponentTest.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -39,7 +39,7 @@
import org.ajax4jsf.resource.image.ImageInfo;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
import org.ajax4jsf.tests.MockViewRoot;
-import org.apache.commons.collections.Buffer;
+import org.ajax4jsf.event.EventsQueue;
import org.apache.commons.lang.StringUtils;
import org.richfaces.component.html.HtmlMenuItem;
import org.richfaces.renderkit.html.images.background.MenuItemBackground;
@@ -319,10 +319,12 @@
menuItem.decode(facesContext);
MockViewRoot mockViewRoot = (MockViewRoot) facesContext.getViewRoot();
- Buffer events = mockViewRoot.getEventsQueue(facesContext,
+ EventsQueue events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.APPLY_REQUEST_VALUES);
assertNotNull(events);
- assertEquals(1, events.size());
+ assertFalse(events.isEmpty());
+ events.remove();
+ assertTrue(events.isEmpty());
}
/**
@@ -338,10 +340,12 @@
menuItem.decode(facesContext);
MockViewRoot mockViewRoot = (MockViewRoot) facesContext.getViewRoot();
- Buffer events = mockViewRoot.getEventsQueue(facesContext,
+ EventsQueue events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.INVOKE_APPLICATION);
assertNotNull(events);
- assertEquals(1, events.size());
+ assertFalse(events.isEmpty());
+ events.remove();
+ assertTrue(events.isEmpty());
}
/**
Modified:
branches/3.1.x/ui/panelbar/src/test/java/org/richfaces/component/PanelBarComponentTest.java
===================================================================
---
branches/3.1.x/ui/panelbar/src/test/java/org/richfaces/component/PanelBarComponentTest.java 2007-09-27
20:55:15 UTC (rev 3159)
+++
branches/3.1.x/ui/panelbar/src/test/java/org/richfaces/component/PanelBarComponentTest.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -31,9 +31,9 @@
import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
+import org.ajax4jsf.event.EventsQueue;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
import org.ajax4jsf.tests.MockViewRoot;
-import org.apache.commons.collections.Buffer;
import org.apache.commons.lang.StringUtils;
import org.richfaces.component.html.HtmlPanelBar;
import org.richfaces.component.html.HtmlPanelBarItem;
@@ -255,12 +255,12 @@
panelBar.decode(facesContext);
MockViewRoot mockViewRoot = (MockViewRoot) facesContext.getViewRoot();
- Buffer events = mockViewRoot.getEventsQueue(facesContext,
+ EventsQueue events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.APPLY_REQUEST_VALUES);
assertNotNull(events);
- assertEquals(1, events.size());
- FacesEvent event = (FacesEvent) events.iterator().next();
+ FacesEvent event = (FacesEvent) events.remove();
+ assertTrue(events.isEmpty());
assertTrue(event instanceof SwitchablePanelSwitchEvent);
SwitchablePanelSwitchEvent switchEvent = (SwitchablePanelSwitchEvent) event;
assertEquals(switchEvent.getValue(), "Swich");
@@ -275,9 +275,10 @@
panelBar.decode(facesContext);
MockViewRoot mockViewRoot = (MockViewRoot) facesContext.getViewRoot();
- Buffer events = mockViewRoot.getEventsQueue(facesContext,
+ EventsQueue events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.INVOKE_APPLICATION);
assertNotNull(events);
- assertEquals(0, events.size());
+ FacesEvent event = (FacesEvent) events.remove();
+ assertTrue(events.isEmpty());
}
}
Modified:
branches/3.1.x/ui/togglePanel/src/test/java/org/richfaces/component/TogglePanelComponentTest.java
===================================================================
---
branches/3.1.x/ui/togglePanel/src/test/java/org/richfaces/component/TogglePanelComponentTest.java 2007-09-27
20:55:15 UTC (rev 3159)
+++
branches/3.1.x/ui/togglePanel/src/test/java/org/richfaces/component/TogglePanelComponentTest.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -25,9 +25,9 @@
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlScript;
import org.richfaces.event.SwitchablePanelSwitchEvent;
+import org.ajax4jsf.event.EventsQueue;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
import org.ajax4jsf.tests.MockViewRoot;
-import org.apache.commons.collections.Buffer;
import org.apache.commons.lang.StringUtils;
import javax.faces.FacesException;
@@ -331,22 +331,24 @@
toggleControl.decode(facesContext);
MockViewRoot mockViewRoot = (MockViewRoot) facesContext.getViewRoot();
- Buffer events = mockViewRoot.getEventsQueue(facesContext,
+ EventsQueue events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.APPLY_REQUEST_VALUES);
assertNotNull(events);
- assertEquals(2, events.size());
- FacesEvent event = (FacesEvent) events.iterator().next();
+ FacesEvent event = (FacesEvent) events.remove();
assertTrue(event instanceof SwitchablePanelSwitchEvent);
SwitchablePanelSwitchEvent switchEvent = (SwitchablePanelSwitchEvent) event;
assertEquals(switchEvent.getValue(), "ABYBC");
+ events.remove();
+ assertTrue(events.isEmpty());
+
events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.INVOKE_APPLICATION);
assertNotNull(events);
- assertEquals(1, events.size());
- event = (FacesEvent) events.iterator().next();
+ event = (FacesEvent) events.remove();
+ assertTrue(events.isEmpty());
assertTrue(event instanceof ActionEvent);
ActionEvent actionEvent = (ActionEvent) event;
@@ -366,10 +368,10 @@
togglePanel.decode(facesContext);
MockViewRoot mockViewRoot = (MockViewRoot) facesContext.getViewRoot();
- Buffer events = mockViewRoot.getEventsQueue(facesContext,
+ EventsQueue events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.INVOKE_APPLICATION);
assertNotNull(events);
- assertEquals(0, events.size());
+ assertTrue(events.isEmpty());
togglePanel.setSwitchType(UITogglePanel.AJAX_METHOD);
externalContext.getRequestParameterMap().put(
@@ -383,7 +385,7 @@
events = mockViewRoot.getEventsQueue(facesContext,
PhaseId.INVOKE_APPLICATION);
assertNotNull(events);
- assertEquals(0, events.size());
+ assertTrue(events.isEmpty());
}
/**
Modified:
branches/3.1.x/ui/tree/src/test/java/org/richfaces/component/events/TreeEventsTest.java
===================================================================
---
branches/3.1.x/ui/tree/src/test/java/org/richfaces/component/events/TreeEventsTest.java 2007-09-27
20:55:15 UTC (rev 3159)
+++
branches/3.1.x/ui/tree/src/test/java/org/richfaces/component/events/TreeEventsTest.java 2007-09-27
22:12:10 UTC (rev 3160)
@@ -29,7 +29,7 @@
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
import org.ajax4jsf.tests.MockMethodBinding;
import org.ajax4jsf.tests.MockViewRoot;
-import org.apache.commons.collections.Buffer;
+import org.ajax4jsf.event.EventsQueue;
import org.richfaces.component.UITree;
import org.richfaces.component.UITreeNode;
import org.richfaces.event.AjaxSelectedEvent;
@@ -102,14 +102,14 @@
MockMethodBinding binding = new MockMethodBinding();
treeNode.setNodeSelectListener(binding);
- Buffer events = mockViewRoot.getAjaxEventsQueue(facesContext);
+ EventsQueue events = mockViewRoot.getAjaxEventsQueue(facesContext);
assertNotNull(events);
- assertEquals(0, events.size());
+ assertTrue(events.isEmpty());
AjaxSelectedEvent event = new AjaxSelectedEvent(treeNode, null);
TreeEvents.invokeListenerBindings(treeNode, event, facesContext);
- assertEquals(1, events.size());
+ assertFalse(events.isEmpty());
Object[][] args = binding.getInvocationArgs();
assertEquals(1, args.length);
@@ -125,16 +125,16 @@
MockMethodBinding binding = new MockMethodBinding();
treeNode.setNodeSelectListener(binding);
- Buffer events = mockViewRoot.getAjaxEventsQueue(facesContext);
+ EventsQueue events = mockViewRoot.getAjaxEventsQueue(facesContext);
assertNotNull(events);
- assertEquals(0, events.size());
+ assertTrue(events.isEmpty());
assertEquals(0, binding.getInvocationArgs().length);
AjaxSelectedEvent event = new AjaxSelectedEvent(treeNode, null);
TreeEvents.invokeListenerBindings(treeNode, event, facesContext);
assertNotNull(events);
- assertEquals(0, events.size());
+ assertTrue(events.isEmpty());
assertEquals(0, binding.getInvocationArgs().length);
}