Author: konstantin.mishin
Date: 2008-06-17 12:29:43 -0400 (Tue, 17 Jun 2008)
New Revision: 9080
Removed:
trunk/ui/datascroller/src/main/config/faces/
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java
Modified:
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
Log:
RF-2815
Modified:
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -7,6 +7,12 @@
public interface ComponentPhaseEventHandler extends Serializable {
- void beforePhase(UIComponent component, PhaseEvent event);
+ Object beforePhaseBegin(PhaseEvent event);
+ void componentBegin(UIComponent component, PhaseEvent event, Object state);
+
+ void componentEnd(UIComponent component, PhaseEvent event, Object state);
+
+ void beforePhaseEnd(PhaseEvent event, Object state);
+
}
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -22,7 +22,6 @@
package org.ajax4jsf.application;
import java.io.IOException;
-import java.util.List;
import javax.faces.FacesException;
import javax.faces.application.ViewHandler;
@@ -39,9 +38,7 @@
import org.ajax4jsf.resource.InternetResourceBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.richfaces.event.ComponentPhaseEventHandler;
import org.richfaces.event.ComponentViewPhaseListener;
-import org.richfaces.util.ComponentPhaseEventHandlerUtils;
/**
* @author asmirnov(a)exadel.com (latest modification by $Author: alexsmirnov $)
@@ -93,9 +90,7 @@
}
}
- List<ComponentPhaseEventHandler> handlers =
ComponentPhaseEventHandlerUtils.getHandlers();
- ComponentViewPhaseListener phaseListener = new ComponentViewPhaseListener(handlers);
- riRoot.addPhaseListener(phaseListener);
+ riRoot.addPhaseListener(new ComponentViewPhaseListener());
return riRoot;
}
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -1647,7 +1647,7 @@
super.setValue(value);
}
- public void beforePhase(PhaseEvent event) {
+ public void beforeRenderResponse(PhaseEvent event) {
FacesContext context = event.getFacesContext();
resetDataModel();
if (null != childState && !keepSaved(context)) {
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -14,17 +14,35 @@
/**
*
*/
- private static final long serialVersionUID = -9027449995146628492L;
+ private static final long serialVersionUID = -1356035330152521515L;
/* (non-Javadoc)
- * @see
org.richfaces.component.ComponentPhaseEventHandler#beforePhase(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#bcomponentEnd(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
*/
- public void beforePhase(UIComponent component, PhaseEvent event) {
+ public void componentEnd(UIComponent component, PhaseEvent event,
+ Object state) {}
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseBegin(javax.faces.event.PhaseEvent)
+ */
+ public Object beforePhaseBegin(PhaseEvent event) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseEnd(javax.faces.event.PhaseEvent,
java.lang.Object)
+ */
+ public void beforePhaseEnd(PhaseEvent event, Object state) {}
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#componentBegin(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ public void componentBegin(UIComponent component, PhaseEvent event,
+ Object state) {
if (component instanceof UIDataAdaptor) {
- ((UIDataAdaptor) component).beforePhase(event);
+ ((UIDataAdaptor) component).beforeRenderResponse(event);
}
-
}
}
Modified:
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -1,7 +1,6 @@
package org.richfaces.event;
import java.util.Iterator;
-import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
@@ -10,6 +9,8 @@
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
+import org.richfaces.util.ComponentPhaseEventHandlerUtils;
+
public class ComponentViewPhaseListener implements PhaseListener {
/**
@@ -17,34 +18,39 @@
*/
private static final long serialVersionUID = -2437433246178955788L;
- private List<ComponentPhaseEventHandler> handlers = null;
-
- public ComponentViewPhaseListener(List<ComponentPhaseEventHandler> handlers) {
- this.handlers = handlers;
- }
+ private static ComponentPhaseEventHandler[] handlers =
ComponentPhaseEventHandlerUtils.getHandlers();
+ private static Object[] states = null;
public void afterPhase(PhaseEvent event) {
}
- private void doBeforePhase(PhaseEvent event, UIComponent component) {
- if (component.isRendered() && handlers != null) {
- for (ComponentPhaseEventHandler handler : handlers) {
- handler.beforePhase(component, event);
- }
- Iterator<UIComponent> children = component.getFacetsAndChildren();
- while (children.hasNext()) {
- doBeforePhase(event, children.next());
- }
+ private void beforePhase(PhaseEvent event, UIComponent component) {
+ for (int i = 0; i < handlers.length; i++) {
+ handlers[i].componentBegin(component, event, states[i]);
}
-
+ Iterator<UIComponent> children = component.getFacetsAndChildren();
+ while (children.hasNext()) {
+ beforePhase(event, children.next());
+ }
+ for (int i = 0; i < handlers.length; i++) {
+ handlers[i].componentEnd(component, event, states[i]);
+ }
}
public void beforePhase(PhaseEvent event) {
+ states = new Object[handlers.length];
+ for (int i = 0; i < handlers.length; i++) {
+ states[i] = handlers[i].beforePhaseBegin(event);
+ }
FacesContext facesContext = event.getFacesContext();
UIViewRoot viewRoot = facesContext.getViewRoot();
- if (viewRoot != null) {
- doBeforePhase(event, viewRoot);
+ if (viewRoot != null && handlers != null) {
+ beforePhase(event, viewRoot);
}
+ for (int i = 0; i < handlers.length; i++) {
+ handlers[i].beforePhaseEnd(event, states[i]);
+ }
+ states = null;
}
public PhaseId getPhaseId() {
Modified:
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -3,9 +3,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
-import java.util.ArrayList;
import java.util.Enumeration;
-import java.util.List;
+import java.util.LinkedList;
import java.util.Scanner;
import javax.faces.FacesException;
@@ -16,11 +15,11 @@
public class ComponentPhaseEventHandlerUtils{
- static private List<ComponentPhaseEventHandler> handlers = null;
+ static private ComponentPhaseEventHandler[] handlers = null;
private ComponentPhaseEventHandlerUtils() {}
- public static List<ComponentPhaseEventHandler> getHandlers() {
+ public static ComponentPhaseEventHandler[] getHandlers() {
if (handlers == null) {
synchronized(ComponentPhaseEventHandlerUtils.class) {
if (handlers == null) {
@@ -32,7 +31,7 @@
}
private static void init() {
- handlers = new ArrayList<ComponentPhaseEventHandler>();
+ LinkedList<ComponentPhaseEventHandler> list = new
LinkedList<ComponentPhaseEventHandler>();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
String resource =
"META-INF/services/org.richfaces.component.ComponentPhaseEventHandler";
try {
@@ -46,7 +45,7 @@
Class<?> handlerClass = ServicesUtils.loadClass(loader, handlerClassName);
Object handler = handlerClass.newInstance();
if (handler instanceof ComponentPhaseEventHandler) {
- handlers.add((ComponentPhaseEventHandler) handler);
+ list.add((ComponentPhaseEventHandler) handler);
}
} catch (Exception e) {
throw new FacesException("Error create instance for class "+
handlerClassName, e);
@@ -57,5 +56,6 @@
} catch (IOException e) {
throw new FacesException("Error load resource "+ resource, e);
}
+ handlers = list.toArray(new ComponentPhaseEventHandler[list.size()]);
}
}
Modified:
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
===================================================================
---
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler 2008-06-17
16:29:43 UTC (rev 9080)
@@ -1 +1 @@
-org.ajax4jsf.component.UIDataAdaptorPhaseEventHandler
\ No newline at end of file
+org.richfaces.component.DataScrollerViewPhaseListener
\ No newline at end of file
Deleted:
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java
===================================================================
---
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -1,64 +0,0 @@
-/**
- * License Agreement.
- *
- * JBoss RichFaces - Ajax4jsf Component Library
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.richfaces.component;
-
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-
-/**
- * Created 08.03.2008
- * @author Nick Belaevski
- * @since 3.2
- */
-
-public class DataScrollerPhaseListener implements PhaseListener {
-
- /**
- *
- */
- private static final long serialVersionUID = -3614288642745891577L;
-
- private static final String ATTRIBUTE_NAME = DataScrollerPhaseListener.class.getName();
-
- private PhaseListener listener = new DataScrollerViewPhaseListener();
-
- public void afterPhase(PhaseEvent event) {
- }
-
- public void beforePhase(PhaseEvent event) {
- FacesContext facesContext = event.getFacesContext();
- UIViewRoot viewRoot = facesContext.getViewRoot();
- if (viewRoot != null && !Boolean.TRUE.equals(
- viewRoot.getAttributes().get(ATTRIBUTE_NAME))) {
- viewRoot.addPhaseListener(listener);
- viewRoot.getAttributes().put(ATTRIBUTE_NAME, Boolean.TRUE);
- }
- }
-
- public PhaseId getPhaseId() {
- return PhaseId.RENDER_RESPONSE;
- }
-
-}
Modified:
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
===================================================================
---
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-06-17
15:01:56 UTC (rev 9079)
+++
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-06-17
16:29:43 UTC (rev 9080)
@@ -33,16 +33,14 @@
import javax.el.ValueExpression;
import javax.faces.component.UIComponent;
import javax.faces.component.UIData;
-import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
import org.ajax4jsf.Messages;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.richfaces.component.util.MessageUtil;
+import org.richfaces.event.ComponentPhaseEventHandler;
/**
@@ -51,7 +49,7 @@
* @since 3.2
*/
-public class DataScrollerViewPhaseListener implements PhaseListener {
+public class DataScrollerViewPhaseListener implements ComponentPhaseEventHandler {
/**
*
@@ -84,9 +82,6 @@
}
}
- public void afterPhase(PhaseEvent event) {
- }
-
private static boolean isRendered(List<UIComponent> components) {
boolean rendered;
@@ -110,7 +105,10 @@
return true;
}
- private void collectConnections(UIComponent component, ComponentConnections connections,
LinkedList<UIComponent> parentComponents) {
+ public void componentBegin(UIComponent component, PhaseEvent event, Object state) {
+ Object[] objects = (Object[]) state;
+ ComponentConnections connections = (ComponentConnections) objects[0];
+ LinkedList<UIComponent> parentComponents = (LinkedList<UIComponent>)
objects[1];
parentComponents.addLast(component);
if (component instanceof UIDatascroller && isRendered(parentComponents)) {
@@ -119,13 +117,6 @@
connections.addConnection(dataTable, datascroller);
}
-
- Iterator<UIComponent> children = component.getFacetsAndChildren();
- while(children.hasNext()) {
- collectConnections(children.next(), connections, parentComponents);
- }
-
- parentComponents.removeLast();
}
private static boolean same(Object o1, Object o2) {
@@ -141,96 +132,98 @@
return (o1 != null && o1.equals(o2)) || (o1 == null && o2 == null);
}
- public void beforePhase(PhaseEvent event) {
+ public void beforePhaseEnd(PhaseEvent event, Object state) {
+ Object[] objects = (Object[]) state;
+ ComponentConnections connections = (ComponentConnections) objects[0];
FacesContext facesContext = event.getFacesContext();
- UIViewRoot viewRoot = facesContext.getViewRoot();
- if (viewRoot != null) {
- ComponentConnections connections = new ComponentConnections();
- collectConnections(viewRoot, connections, new LinkedList<UIComponent>());
- Iterator<Entry<UIData, List<UIDatascroller>>> entries =
- connections.iterator();
+ Iterator<Entry<UIData, List<UIDatascroller>>> entries =
+ connections.iterator();
- while (entries.hasNext()) {
- Entry<UIData, List<UIDatascroller>> entry = entries.next();
- List<UIDatascroller> scrollers = entry.getValue();
- if (!scrollers.isEmpty()) {
- List<Object> values = new ArrayList<Object>(scrollers.size());
-
- UIData data = entry.getKey();
- UIDatascroller activeComponent = null;
-
- Map<String, Object> attributes = data.getAttributes();
- Object pageValue = attributes.get(UIDatascroller.SCROLLER_STATE_ATTRIBUTE);
+ while (entries.hasNext()) {
+ Entry<UIData, List<UIDatascroller>> entry = entries.next();
+ List<UIDatascroller> scrollers = entry.getValue();
+ if (!scrollers.isEmpty()) {
+ List<Object> values = new ArrayList<Object>(scrollers.size());
+
+ UIData data = entry.getKey();
+ UIDatascroller activeComponent = null;
+
+ Map<String, Object> attributes = data.getAttributes();
+ Object pageValue = attributes.get(UIDatascroller.SCROLLER_STATE_ATTRIBUTE);
- if (pageValue == null) {
- boolean valid = true;
+ if (pageValue == null) {
+ boolean valid = true;
- for (UIDatascroller datascroller : scrollers) {
- Object nextPageValue = null;
+ for (UIDatascroller datascroller : scrollers) {
+ Object nextPageValue = null;
- if (datascroller.isLocalPageSet()) {
- nextPageValue = datascroller.getPage();
- attributes.put(UIDatascroller.SCROLLER_STATE_ATTRIBUTE, nextPageValue);
- datascroller.resetLocalPage();
- } else {
- nextPageValue = datascroller.getValueExpression("page");
- }
+ if (datascroller.isLocalPageSet()) {
+ nextPageValue = datascroller.getPage();
+ attributes.put(UIDatascroller.SCROLLER_STATE_ATTRIBUTE, nextPageValue);
+ datascroller.resetLocalPage();
+ } else {
+ nextPageValue = datascroller.getValueExpression("page");
+ }
- if (!values.isEmpty() && !same(values.get(values.size() - 1),
nextPageValue)) {
- valid = false;
- }
-
- values.add(nextPageValue);
-
- if (nextPageValue != null) {
- activeComponent = datascroller;
- pageValue = nextPageValue;
- }
+ if (!values.isEmpty() && !same(values.get(values.size() - 1),
nextPageValue)) {
+ valid = false;
}
+
+ values.add(nextPageValue);
- if (!valid) {
- StringBuilder builder = new StringBuilder("\n[");
- Iterator<UIDatascroller> scrollerItr = scrollers.iterator();
- Iterator<Object> valueItr = values.iterator();
+ if (nextPageValue != null) {
+ activeComponent = datascroller;
+ pageValue = nextPageValue;
+ }
+ }
+
+ if (!valid) {
+ StringBuilder builder = new StringBuilder("\n[");
+ Iterator<UIDatascroller> scrollerItr = scrollers.iterator();
+ Iterator<Object> valueItr = values.iterator();
+
+ while (scrollerItr.hasNext()) {
+ UIDatascroller next = scrollerItr.next();
+ builder.append(MessageUtil.getLabel(facesContext, next));
+ builder.append(": ");
- while (scrollerItr.hasNext()) {
- UIDatascroller next = scrollerItr.next();
- builder.append(MessageUtil.getLabel(facesContext, next));
- builder.append(": ");
-
- Object value = valueItr.next();
- if (value instanceof Expression) {
- builder.append(((Expression) value).getExpressionString());
- } else {
- builder.append(value);
- }
-
- builder.append(scrollerItr.hasNext() ? ",\n" : "]");
+ Object value = valueItr.next();
+ if (value instanceof Expression) {
+ builder.append(((Expression) value).getExpressionString());
+ } else {
+ builder.append(value);
}
- String formattedMessage =
Messages.getMessage(Messages.DATASCROLLER_PAGES_DIFFERENT,
- new Object[] {MessageUtil.getLabel(facesContext, data), builder});
-
-
- log.error(formattedMessage);
+ builder.append(scrollerItr.hasNext() ? ",\n" : "]");
}
- }
+ String formattedMessage =
Messages.getMessage(Messages.DATASCROLLER_PAGES_DIFFERENT,
+ new Object[] {MessageUtil.getLabel(facesContext, data), builder});
- if (activeComponent == null) {
- activeComponent = scrollers.get(scrollers.size() - 1);
+
+ log.error(formattedMessage);
}
+
+ }
- if (pageValue != null) {
- activeComponent.setupFirstRowValue();
- }
+ if (activeComponent == null) {
+ activeComponent = scrollers.get(scrollers.size() - 1);
}
+
+ if (pageValue != null) {
+ activeComponent.setupFirstRowValue();
+ }
}
}
}
- public PhaseId getPhaseId() {
- return PhaseId.RENDER_RESPONSE;
+ public Object beforePhaseBegin(PhaseEvent event) {
+ return new Object[] {new ComponentConnections(), new LinkedList<UIComponent>()};
}
+ public void componentEnd(UIComponent component, PhaseEvent event, Object state) {
+ Object[] objects = (Object[]) state;
+ LinkedList<?> parentComponents = (LinkedList<?>) objects[1];
+ parentComponents.removeLast();
+ }
}