Author: konstantin.mishin
Date: 2008-06-24 08:00:25 -0400 (Tue, 24 Jun 2008)
New Revision: 9177
Added:
trunk/framework/api/src/main/java/org/richfaces/event/RenderPhaseComponentVisitor.java
trunk/framework/impl/src/main/java/org/ajax4jsf/component/RenderPhaseUIDataAdaptorVisitor.java
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java
trunk/framework/impl/src/main/java/org/richfaces/event/RenderPhaseComponentListener.java
trunk/framework/impl/src/main/java/org/richfaces/util/RenderPhaseComponentVisitorUtils.java
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor
trunk/framework/test/src/test/java/org/richfaces/util/RenderPhaseComponentVisitorUtilsTest.java
Removed:
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.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/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java
Log:
RF-2815
Deleted:
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java 2008-06-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1,16 +0,0 @@
-package org.richfaces.event;
-
-import javax.faces.component.UIComponent;
-import javax.faces.event.PhaseEvent;
-
-public interface ComponentPhaseEventHandler {
-
- 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);
-
-}
Copied:
trunk/framework/api/src/main/java/org/richfaces/event/RenderPhaseComponentVisitor.java
(from rev 9154,
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java)
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/event/RenderPhaseComponentVisitor.java
(rev 0)
+++
trunk/framework/api/src/main/java/org/richfaces/event/RenderPhaseComponentVisitor.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -0,0 +1,16 @@
+package org.richfaces.event;
+
+import javax.faces.component.UIComponent;
+import javax.faces.event.PhaseEvent;
+
+public interface RenderPhaseComponentVisitor {
+
+ Object beforeRoot(PhaseEvent event);
+
+ void beforeComponent(UIComponent component, PhaseEvent event, Object state);
+
+ void afterComponent(UIComponent component, PhaseEvent event, Object state);
+
+ void afterRoot(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-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -38,8 +38,9 @@
import org.ajax4jsf.resource.InternetResourceBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.richfaces.event.ComponentViewPhaseListener;
+import org.richfaces.event.RenderPhaseComponentListener;
+
/**
* @author asmirnov(a)exadel.com (latest modification by $Author: alexsmirnov $)
* @version $Revision: 1.1.2.5 $ $Date: 2007/02/08 15:02:04 $
@@ -90,7 +91,7 @@
}
}
- riRoot.addPhaseListener(new ComponentViewPhaseListener());
+ riRoot.addPhaseListener(new RenderPhaseComponentListener());
return riRoot;
}
Copied:
trunk/framework/impl/src/main/java/org/ajax4jsf/component/RenderPhaseUIDataAdaptorVisitor.java
(from rev 9154,
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java)
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/component/RenderPhaseUIDataAdaptorVisitor.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/component/RenderPhaseUIDataAdaptorVisitor.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -0,0 +1,42 @@
+/**
+ *
+ */
+package org.ajax4jsf.component;
+
+import javax.faces.component.UIComponent;
+import javax.faces.event.PhaseEvent;
+
+import org.richfaces.event.RenderPhaseComponentVisitor;
+
+public class RenderPhaseUIDataAdaptorVisitor implements
+ RenderPhaseComponentVisitor {
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseBegin(javax.faces.event.PhaseEvent)
+ */
+ public Object beforeRoot(PhaseEvent event) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#componentBegin(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ public void beforeComponent(UIComponent component, PhaseEvent event,
+ Object state) {
+ if (component instanceof UIDataAdaptor) {
+ ((UIDataAdaptor) component).beforeRenderResponse(event.getFacesContext());
+
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#bcomponentEnd(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ public void afterComponent(UIComponent component, PhaseEvent event,
+ Object state) {}
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseEnd(javax.faces.event.PhaseEvent,
java.lang.Object)
+ */
+ public void afterRoot(PhaseEvent event, Object state) {}
+}
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-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1646,8 +1646,7 @@
super.setValue(value);
}
- public void beforeRenderResponse(PhaseEvent event) {
- FacesContext context = event.getFacesContext();
+ public void beforeRenderResponse(FacesContext context) {
resetDataModel();
this._encoded = null;
if (null != childState && !keepSaved(context)) {
Deleted:
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java 2008-06-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1,43 +0,0 @@
-/**
- *
- */
-package org.ajax4jsf.component;
-
-import javax.faces.component.UIComponent;
-import javax.faces.event.PhaseEvent;
-
-import org.richfaces.event.ComponentPhaseEventHandler;
-
-public class UIDataAdaptorPhaseEventHandler implements
- ComponentPhaseEventHandler {
-
- /* (non-Javadoc)
- * @see
org.richfaces.event.ComponentPhaseEventHandler#bcomponentEnd(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
- */
- 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).beforeRenderResponse(event);
-
- }
- }
-
-}
Copied:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java
(from rev 9154,
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java)
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -0,0 +1,475 @@
+/**
+ *
+ */
+package org.ajax4jsf.context;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.Renderer;
+
+import org.ajax4jsf.application.AjaxViewHandler;
+import org.ajax4jsf.renderkit.HeaderResourceProducer;
+import org.ajax4jsf.renderkit.UserResourceRenderer;
+import org.ajax4jsf.resource.InternetResourceBuilder;
+import org.ajax4jsf.resource.ResourceNotFoundException;
+import org.ajax4jsf.util.ELUtils;
+import org.ajax4jsf.webapp.BaseFilter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.richfaces.event.RenderPhaseComponentVisitor;
+import org.richfaces.skin.Skin;
+import org.richfaces.skin.SkinFactory;
+import org.richfaces.skin.SkinNotFoundException;
+
+public class RenderPhaseViewResourcesVisitor implements
+ RenderPhaseComponentVisitor {
+
+ private class State {
+
+ private RenderKit renderKit;
+ private boolean processStyles;
+ private boolean processScripts;
+ private LinkedHashSet<String> scripts;
+ private LinkedHashSet<String> styles;
+ // TODO remove if possible
+ private LinkedHashSet<String> userScripts;
+ private LinkedHashSet<String> userStyles;
+
+ private State(boolean processScripts, boolean processStyles,
+ RenderKit renderKit, LinkedHashSet<String> scripts,
+ LinkedHashSet<String> styles,
+ LinkedHashSet<String> userScripts,
+ LinkedHashSet<String> userStyles) {
+ super();
+ this.processScripts = processScripts;
+ this.processStyles = processStyles;
+ this.renderKit = renderKit;
+ this.scripts = scripts;
+ this.styles = styles;
+ this.userScripts = userScripts;
+ this.userStyles = userStyles;
+ }
+ }
+
+ private static final Log log =
LogFactory.getLog(RenderPhaseViewResourcesVisitor.class);
+
+ //TODO remove this in other
+ public static final String RESOURCES_PROCESSED =
"org.ajax4jsf.framework.HEADER_PROCESSED";
+ private static final String INIT_PARAMETER_PREFIX = "_init_parameter_";
+ private static final Object NULL = new Object();
+ private static final Pattern USER_AGENTS = Pattern.compile(" AppleWebKit/|^Opera/|
Opera ");
+ //todo
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseBegin(javax.faces.event.PhaseEvent)
+ */
+ public Object beforeRoot(PhaseEvent event) {
+ Object result = null;
+ FacesContext context = event.getFacesContext();
+
+ ExternalContext externalContext = context.getExternalContext();
+ Map<String,Object> requestMap = externalContext.getRequestMap();
+ if (!Boolean.TRUE.equals(requestMap.get(RESOURCES_PROCESSED))) {
+ if (null != requestMap.get(BaseFilter.RESPONSE_WRAPPER_ATTRIBUTE)) {
+
+ Boolean processStyles = true;
+ Boolean processScripts = true;
+
+ LinkedHashSet<String> scripts = new LinkedHashSet<String>();
+ LinkedHashSet<String> styles = new LinkedHashSet<String>();
+ LinkedHashSet<String> userScripts = new LinkedHashSet<String>();
+ LinkedHashSet<String> userStyles = new LinkedHashSet<String>();
+
+ boolean ajaxRequest =
AjaxContext.getCurrentInstance(context).isAjaxRequest(context);
+
+ if (log.isDebugEnabled()) {
+ log
+ .debug("Process component tree for collect used scripts and styles");
+ }
+ try {
+ Skin skin = SkinFactory.getInstance().getSkin(context);
+ // For a "NULL" skin, do not collect components stylesheets
+ if ("false".equals(skin.getParameter(context,
+ Skin.loadStyleSheets))) {
+ processStyles = false;
+ }
+ } catch (SkinNotFoundException e) {
+ log.warn("Current Skin is not found", e);
+ }
+ InternetResourceBuilder internetResourceBuilder = InternetResourceBuilder
+ .getInstance();
+ // Check init parameters for a resources processing.
+ String scriptStrategy = externalContext
+ .getInitParameter(InternetResourceBuilder.LOAD_SCRIPT_STRATEGY_PARAM);
+ if (null != scriptStrategy) {
+ if (InternetResourceBuilder.LOAD_NONE
+ .equals(scriptStrategy)) {
+ processScripts = false;
+ } else if (InternetResourceBuilder.LOAD_ALL
+ .equals(scriptStrategy)) {
+ processScripts = false;
+ // For an "ALL" strategy, it is not necessary to load scripts in the ajax
request
+ if (!ajaxRequest) {
+ try {
+ scripts.add(internetResourceBuilder
+ .createResource(
+ this,
+ InternetResourceBuilder.COMMON_FRAMEWORK_SCRIPT)
+ .getUri(context, null));
+ scripts.add(internetResourceBuilder
+ .createResource(
+ this,
+ InternetResourceBuilder.COMMON_UI_SCRIPT)
+ .getUri(context, null));
+
+ } catch (ResourceNotFoundException e) {
+ if (log.isWarnEnabled()) {
+ log
+ .warn("No aggregated javaScript library found "
+ + e.getMessage());
+ }
+ }
+
+ }
+ }
+ }
+
+ boolean useStdControlsSkinning = false;
+
+ String stdControlsSkinning = getInitParameterValue(context,
InternetResourceBuilder.STD_CONTROLS_SKINNING_PARAM);
+ if (stdControlsSkinning != null) {
+ useStdControlsSkinning =
InternetResourceBuilder.ENABLE.equals(stdControlsSkinning);
+ }
+
+ boolean useStdControlsSkinningClasses = true;
+
+ String stdControlsSkinningClasses = getInitParameterValue(context,
InternetResourceBuilder.STD_CONTROLS_SKINNING_CLASSES_PARAM);
+ if (stdControlsSkinningClasses != null) {
+ useStdControlsSkinningClasses =
InternetResourceBuilder.ENABLE.equals(stdControlsSkinningClasses);
+ }
+
+ boolean useExtendedSkinning = isExtendedSkinningEnabled(externalContext);
+
+ String styleStrategy = externalContext
+ .getInitParameter(InternetResourceBuilder.LOAD_STYLE_STRATEGY_PARAM);
+
+ if (InternetResourceBuilder.LOAD_NONE.equals(styleStrategy)) {
+ processStyles = false;
+ } else if (InternetResourceBuilder.LOAD_ALL
+ .equals(styleStrategy)) {
+ processStyles = false;
+ // For an "ALL" strategy, it is not necessary to load styles
+ // in the ajax request
+ if (!ajaxRequest) {
+ String commonStyle = InternetResourceBuilder.COMMON_STYLE_PREFIX;
+
+ if (useStdControlsSkinning
+ || useStdControlsSkinningClasses) {
+ if (isExtendedSkinningEnabled(externalContext)) {
+ commonStyle += "-ext";
+ } else {
+ commonStyle += "-bas";
+ }
+
+ if (useStdControlsSkinning
+ && useStdControlsSkinningClasses) {
+ commonStyle += "-both";
+ } else if (useStdControlsSkinning) {
+ commonStyle += "-styles";
+ } else if (useStdControlsSkinningClasses) {
+ commonStyle += "-classes";
+ }
+ }
+
+ commonStyle += InternetResourceBuilder.COMMON_STYLE_EXTENSION;
+
+ try {
+ styles.add(internetResourceBuilder
+ .createResource(this, commonStyle).getUri(
+ context, null));
+
+ } catch (ResourceNotFoundException e) {
+ if (log.isWarnEnabled()) {
+ log.warn("No aggregated stylesheet found "
+ + e.getMessage());
+ }
+ }
+
+ }
+ } else {
+ if (useStdControlsSkinning) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_BASIC_STYLE)
+ .getUri(context, null));
+
+ if (useExtendedSkinning) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_EXTENDED_STYLE)
+ .getUri(context, null));
+ }
+ }
+
+ if (useStdControlsSkinningClasses) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_BASIC_CLASSES_STYLE)
+ .getUri(context, null));
+
+ if (useExtendedSkinning) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_EXTENDED_CLASSES_STYLE)
+ .getUri(context, null));
+ }
+ }
+ }
+
+ RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
+ .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ RenderKit renderKit = rkFactory.getRenderKit(context, context
+ .getViewRoot().getRenderKitId());
+
+ result = new State(processScripts, processStyles, renderKit, scripts, styles,
userScripts, userStyles);
+ }
+ }
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#componentBegin(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ public void beforeComponent(UIComponent component, PhaseEvent event,
+ Object object) {
+ if (object != null) {
+ State state = (State) object;
+ FacesContext context = event.getFacesContext();
+ Renderer renderer = getRenderer(context, component, state.renderKit);
+ if (null != renderer) {
+ if ((state.processScripts || state.processStyles)
+ && renderer instanceof HeaderResourceProducer) {
+ HeaderResourceProducer producer = (HeaderResourceProducer) renderer;
+ if (state.processScripts) {
+ Set<String> set = producer.getHeaderScripts(context,
+ component);
+ if (null != set) {
+ state.scripts.addAll(set);
+ }
+
+ }
+ if (state.processStyles) {
+ Set<String> set = producer.getHeaderStyles(context,
+ component);
+ if (null != set) {
+ state.styles.addAll(set);
+ }
+
+ }
+ } else if (renderer instanceof UserResourceRenderer) {
+ UserResourceRenderer producer = (UserResourceRenderer) renderer;
+ Set<String> set = producer.getHeaderScripts(context,
+ component);
+ if (null != set) {
+ state.userScripts.addAll(set);
+ }
+ set = producer.getHeaderStyles(context, component);
+ if (null != set) {
+ state.userStyles.addAll(set);
+ }
+ }
+
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#componentEnd(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ public void afterComponent(UIComponent component, PhaseEvent event,
+ Object state) {}
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseEnd(javax.faces.event.PhaseEvent,
java.lang.Object)
+ */
+ public void afterRoot(PhaseEvent event, Object object) {
+ if (object != null) {
+ FacesContext context = event.getFacesContext();
+ ExternalContext externalContext = context.getExternalContext();
+ Map<String,Object> requestMap = externalContext.getRequestMap();
+ State state = (State) object;
+ if (state.scripts.size() > 0) {
+ if (log.isDebugEnabled()) {
+ StringBuffer buff = new StringBuffer(
+ "Scripts for insert into head : \n");
+ for (Iterator<String> iter = state.scripts.iterator(); iter.hasNext();) {
+ String script = iter.next();
+ buff.append(script).append("\n");
+ }
+ log.debug(buff.toString());
+ }
+ requestMap.put(AjaxContext.SCRIPTS_PARAMETER, state.scripts);
+ }
+
+ String skinStyleSheetUri = null;
+ String skinExtendedStyleSheetUri = null;
+ try {
+ Skin skin = SkinFactory.getInstance().getSkin(context);
+ // Set default style sheet for current skin.
+ skinStyleSheetUri = (String) skin.getParameter(context,
+ Skin.generalStyleSheet);
+ // Set default style sheet for current skin.
+ skinExtendedStyleSheetUri = (String) skin.getParameter(context,
+ Skin.extendedStyleSheet);
+ } catch (SkinNotFoundException e) {
+ log.warn("Current Skin is not found", e);
+ }
+
+ // Append Skin StyleSheet after a
+ if (null != skinStyleSheetUri) {
+ String resourceURL = context.getApplication()
+ .getViewHandler().getResourceURL(context,
+ skinStyleSheetUri);
+ state.styles.add(resourceURL);
+ }
+
+ if (null != skinExtendedStyleSheetUri &&
isExtendedSkinningEnabled(externalContext)) {
+ String resourceURL =
context.getApplication().getViewHandler().getResourceURL(context,
+ skinExtendedStyleSheetUri);
+ state.styles.add(resourceURL);
+ }
+ if (state.styles.size() > 0) {
+ if (log.isDebugEnabled()) {
+ StringBuffer buff = new StringBuffer(
+ "Styles for insert into head : \n");
+ for (Iterator<String> iter = state.styles.iterator(); iter.hasNext();) {
+ String style = (String) iter.next();
+ buff.append(style).append("\n");
+ }
+ log.debug(buff.toString());
+ }
+ requestMap.put(AjaxContext.STYLES_PARAMETER, state.styles);
+ }
+
+ if (state.userStyles.size() > 0) {
+ if (log.isDebugEnabled()) {
+ StringBuffer buff = new StringBuffer(
+ "User styles for insert into head : \n");
+ for (Iterator<String> iter = state.userStyles.iterator(); iter.hasNext();) {
+ String style = (String) iter.next();
+ buff.append(style).append("\n");
+ }
+ log.debug(buff.toString());
+ }
+ requestMap.put(AjaxContext.USER_STYLES_PARAMETER, state.userStyles);
+ }
+ // Mark as processed.
+ requestMap.put(RESOURCES_PROCESSED, Boolean.TRUE);
+ // Save viewId for a parser selection
+ requestMap.put(AjaxViewHandler.VIEW_ID_KEY, context.getViewRoot().getViewId());
+ }
+ }
+
+ /**
+ * Find renderer for given component.
+ *
+ * @param context
+ * @param comp
+ * @param renderKit
+ * @return
+ */
+ private static Renderer getRenderer(FacesContext context, UIComponent comp, RenderKit
renderKit) {
+ String rendererType = comp.getRendererType();
+ if (rendererType != null) {
+ return (renderKit.getRenderer(comp.getFamily(), rendererType));
+ } else {
+ return (null);
+ }
+
+ }
+
+ private static String getInitParameterValue(FacesContext context, String parameterName)
{
+
+ String key = INIT_PARAMETER_PREFIX + parameterName;
+
+ ExternalContext externalContext = context.getExternalContext();
+ Map<String, Object> applicationMap = externalContext.getApplicationMap();
+ Object mutex = externalContext.getRequest();
+ Object parameterValue = null;
+
+ synchronized (mutex) {
+ parameterValue = applicationMap.get(key);
+
+ if (parameterValue == null) {
+
+ String initParameter = externalContext.getInitParameter(parameterName);
+ if (initParameter != null) {
+
+ if (ELUtils.isValueReference(initParameter)) {
+ Application application = context.getApplication();
+ ExpressionFactory expressionFactory = application.getExpressionFactory();
+
+ parameterValue = expressionFactory.createValueExpression(context.getELContext(),
+ initParameter,
+ String.class);
+ } else {
+ parameterValue = initParameter;
+ }
+
+ } else {
+ parameterValue = NULL;
+ }
+
+ applicationMap.put(key, parameterValue);
+ }
+ }
+
+ return evaluate(context, parameterValue);
+ }
+
+ private static String evaluate(FacesContext context, Object parameterValue) {
+ if (parameterValue == NULL || parameterValue == null) {
+ return null;
+ } else if (parameterValue instanceof ValueExpression) {
+ ValueExpression expression = (ValueExpression) parameterValue;
+
+ return (String) expression.getValue(context.getELContext());
+ } else {
+ return parameterValue.toString();
+ }
+ }
+
+ private static boolean isExtendedSkinningEnabled(ExternalContext context) {
+ String userAgent = context.getRequestHeaderMap().get("User-Agent");
+ if (userAgent != null) {
+ boolean apply = !USER_AGENTS.matcher(userAgent).find();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Got User-Agent: " + userAgent);
+ log.debug("Applying extended CSS controls styling = " + apply);
+ }
+
+ return apply;
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("User-Agent is null, applying extended CSS controls styling");
+ }
+
+ return true;
+ }
+ }
+}
Deleted:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java 2008-06-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1,462 +0,0 @@
-/**
- *
- */
-package org.ajax4jsf.context;
-
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-
-import org.ajax4jsf.application.AjaxViewHandler;
-import org.ajax4jsf.renderkit.HeaderResourceProducer;
-import org.ajax4jsf.renderkit.UserResourceRenderer;
-import org.ajax4jsf.resource.InternetResourceBuilder;
-import org.ajax4jsf.resource.ResourceNotFoundException;
-import org.ajax4jsf.util.ELUtils;
-import org.ajax4jsf.webapp.BaseFilter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.richfaces.event.ComponentPhaseEventHandler;
-import org.richfaces.skin.Skin;
-import org.richfaces.skin.SkinFactory;
-import org.richfaces.skin.SkinNotFoundException;
-
-public class ViewResourcesPhaseEventHandler implements
- ComponentPhaseEventHandler {
-
- private static final Log log = LogFactory.getLog(ViewResourcesPhaseEventHandler.class);
-
- //TODO remove this in other
- public static final String RESOURCES_PROCESSED =
"org.ajax4jsf.framework.HEADER_PROCESSED";
- private static final String INIT_PARAMETER_PREFIX = "_init_parameter_";
- private static final Object NULL = new Object();
- private static final Pattern USER_AGENTS = Pattern.compile(" AppleWebKit/|^Opera/|
Opera ");
- //todo
-
- /* (non-Javadoc)
- * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseBegin(javax.faces.event.PhaseEvent)
- */
- public Object beforePhaseBegin(PhaseEvent event) {
- Object result = false;
- FacesContext context = event.getFacesContext();
-
- ExternalContext externalContext = context.getExternalContext();
- Map<String,Object> requestMap = externalContext.getRequestMap();
- if (!Boolean.TRUE.equals(requestMap.get(RESOURCES_PROCESSED))) {
- if (null != requestMap.get(BaseFilter.RESPONSE_WRAPPER_ATTRIBUTE)) {
-
- Boolean processStyles = true;
- Boolean processScripts = true;
-
- LinkedHashSet<String> scripts = new LinkedHashSet<String>();
- LinkedHashSet<String> styles = new LinkedHashSet<String>();
- LinkedHashSet<String> userScripts = new LinkedHashSet<String>();
- LinkedHashSet<String> userStyles = new LinkedHashSet<String>();
-
- boolean ajaxRequest =
AjaxContext.getCurrentInstance(context).isAjaxRequest(context);
-
- if (log.isDebugEnabled()) {
- log
- .debug("Process component tree for collect used scripts and styles");
- }
- try {
- Skin skin = SkinFactory.getInstance().getSkin(context);
- // For a "NULL" skin, do not collect components stylesheets
- if ("false".equals(skin.getParameter(context,
- Skin.loadStyleSheets))) {
- processStyles = false;
- }
- } catch (SkinNotFoundException e) {
- log.warn("Current Skin is not found", e);
- }
- InternetResourceBuilder internetResourceBuilder = InternetResourceBuilder
- .getInstance();
- // Check init parameters for a resources processing.
- String scriptStrategy = externalContext
- .getInitParameter(InternetResourceBuilder.LOAD_SCRIPT_STRATEGY_PARAM);
- if (null != scriptStrategy) {
- if (InternetResourceBuilder.LOAD_NONE
- .equals(scriptStrategy)) {
- processScripts = false;
- } else if (InternetResourceBuilder.LOAD_ALL
- .equals(scriptStrategy)) {
- processScripts = false;
- // For an "ALL" strategy, it is not necessary to load scripts in the ajax
request
- if (!ajaxRequest) {
- try {
- scripts.add(internetResourceBuilder
- .createResource(
- this,
- InternetResourceBuilder.COMMON_FRAMEWORK_SCRIPT)
- .getUri(context, null));
- scripts.add(internetResourceBuilder
- .createResource(
- this,
- InternetResourceBuilder.COMMON_UI_SCRIPT)
- .getUri(context, null));
-
- } catch (ResourceNotFoundException e) {
- if (log.isWarnEnabled()) {
- log
- .warn("No aggregated javaScript library found "
- + e.getMessage());
- }
- }
-
- }
- }
- }
-
- boolean useStdControlsSkinning = false;
-
- String stdControlsSkinning = getInitParameterValue(context,
InternetResourceBuilder.STD_CONTROLS_SKINNING_PARAM);
- if (stdControlsSkinning != null) {
- useStdControlsSkinning =
InternetResourceBuilder.ENABLE.equals(stdControlsSkinning);
- }
-
- boolean useStdControlsSkinningClasses = true;
-
- String stdControlsSkinningClasses = getInitParameterValue(context,
InternetResourceBuilder.STD_CONTROLS_SKINNING_CLASSES_PARAM);
- if (stdControlsSkinningClasses != null) {
- useStdControlsSkinningClasses =
InternetResourceBuilder.ENABLE.equals(stdControlsSkinningClasses);
- }
-
- boolean useExtendedSkinning = isExtendedSkinningEnabled(externalContext);
-
- String styleStrategy = externalContext
- .getInitParameter(InternetResourceBuilder.LOAD_STYLE_STRATEGY_PARAM);
-
- if (InternetResourceBuilder.LOAD_NONE.equals(styleStrategy)) {
- processStyles = false;
- } else if (InternetResourceBuilder.LOAD_ALL
- .equals(styleStrategy)) {
- processStyles = false;
- // For an "ALL" strategy, it is not necessary to load styles
- // in the ajax request
- if (!ajaxRequest) {
- String commonStyle = InternetResourceBuilder.COMMON_STYLE_PREFIX;
-
- if (useStdControlsSkinning
- || useStdControlsSkinningClasses) {
- if (isExtendedSkinningEnabled(externalContext)) {
- commonStyle += "-ext";
- } else {
- commonStyle += "-bas";
- }
-
- if (useStdControlsSkinning
- && useStdControlsSkinningClasses) {
- commonStyle += "-both";
- } else if (useStdControlsSkinning) {
- commonStyle += "-styles";
- } else if (useStdControlsSkinningClasses) {
- commonStyle += "-classes";
- }
- }
-
- commonStyle += InternetResourceBuilder.COMMON_STYLE_EXTENSION;
-
- try {
- styles.add(internetResourceBuilder
- .createResource(this, commonStyle).getUri(
- context, null));
-
- } catch (ResourceNotFoundException e) {
- if (log.isWarnEnabled()) {
- log.warn("No aggregated stylesheet found "
- + e.getMessage());
- }
- }
-
- }
- } else {
- if (useStdControlsSkinning) {
- styles.add(
- internetResourceBuilder.createResource(
- this, InternetResourceBuilder.STD_CONTROLS_BASIC_STYLE)
- .getUri(context, null));
-
- if (useExtendedSkinning) {
- styles.add(
- internetResourceBuilder.createResource(
- this, InternetResourceBuilder.STD_CONTROLS_EXTENDED_STYLE)
- .getUri(context, null));
- }
- }
-
- if (useStdControlsSkinningClasses) {
- styles.add(
- internetResourceBuilder.createResource(
- this, InternetResourceBuilder.STD_CONTROLS_BASIC_CLASSES_STYLE)
- .getUri(context, null));
-
- if (useExtendedSkinning) {
- styles.add(
- internetResourceBuilder.createResource(
- this, InternetResourceBuilder.STD_CONTROLS_EXTENDED_CLASSES_STYLE)
- .getUri(context, null));
- }
- }
- }
-
- RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
- .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
- RenderKit renderKit = rkFactory.getRenderKit(context, context
- .getViewRoot().getRenderKitId());
-
- result = new Object[] {renderKit, processStyles, processScripts, scripts, styles,
userScripts, userStyles};
- }
- }
- return result;
- }
-
- /* (non-Javadoc)
- * @see
org.richfaces.event.ComponentPhaseEventHandler#beforePhaseEnd(javax.faces.event.PhaseEvent,
java.lang.Object)
- */
- @SuppressWarnings("unchecked")
- public void beforePhaseEnd(PhaseEvent event, Object state) {
- if (!Boolean.FALSE.equals(state)) {
- FacesContext context = event.getFacesContext();
- ExternalContext externalContext = context.getExternalContext();
- Map<String,Object> requestMap = externalContext.getRequestMap();
- Object[] objects = (Object[]) state;
- Set<String> scripts = (Set<String>) objects[3];
- Set<String> styles = (Set<String>) objects[4];
- // TODO remove if possible
- Set<String> userScripts = (Set<String>) objects[5];
- Set<String> userStyles = (Set<String>) objects[6];
- if (scripts.size() > 0) {
- if (log.isDebugEnabled()) {
- StringBuffer buff = new StringBuffer(
- "Scripts for insert into head : \n");
- for (Iterator<String> iter = scripts.iterator(); iter.hasNext();) {
- String script = iter.next();
- buff.append(script).append("\n");
- }
- log.debug(buff.toString());
- }
- requestMap.put(AjaxContext.SCRIPTS_PARAMETER, scripts);
- }
-
- String skinStyleSheetUri = null;
- String skinExtendedStyleSheetUri = null;
- try {
- Skin skin = SkinFactory.getInstance().getSkin(context);
- // Set default style sheet for current skin.
- skinStyleSheetUri = (String) skin.getParameter(context,
- Skin.generalStyleSheet);
- // Set default style sheet for current skin.
- skinExtendedStyleSheetUri = (String) skin.getParameter(context,
- Skin.extendedStyleSheet);
- } catch (SkinNotFoundException e) {
- log.warn("Current Skin is not found", e);
- }
-
- // Append Skin StyleSheet after a
- if (null != skinStyleSheetUri) {
- String resourceURL = context.getApplication()
- .getViewHandler().getResourceURL(context,
- skinStyleSheetUri);
- styles.add(resourceURL);
- }
-
- if (null != skinExtendedStyleSheetUri &&
isExtendedSkinningEnabled(externalContext)) {
- String resourceURL =
context.getApplication().getViewHandler().getResourceURL(context,
- skinExtendedStyleSheetUri);
- styles.add(resourceURL);
- }
- if (styles.size() > 0) {
- if (log.isDebugEnabled()) {
- StringBuffer buff = new StringBuffer(
- "Styles for insert into head : \n");
- for (Iterator<String> iter = styles.iterator(); iter.hasNext();) {
- String style = (String) iter.next();
- buff.append(style).append("\n");
- }
- log.debug(buff.toString());
- }
- requestMap.put(AjaxContext.STYLES_PARAMETER, styles);
- }
-
- if (userStyles.size() > 0) {
- if (log.isDebugEnabled()) {
- StringBuffer buff = new StringBuffer(
- "User styles for insert into head : \n");
- for (Iterator<String> iter = userStyles.iterator(); iter.hasNext();) {
- String style = (String) iter.next();
- buff.append(style).append("\n");
- }
- log.debug(buff.toString());
- }
- requestMap.put(AjaxContext.USER_STYLES_PARAMETER, userStyles);
- }
- // Mark as processed.
- requestMap.put(RESOURCES_PROCESSED, Boolean.TRUE);
- // Save viewId for a parser selection
- requestMap.put(AjaxViewHandler.VIEW_ID_KEY, context.getViewRoot().getViewId());
- }
- }
-
- /* (non-Javadoc)
- * @see
org.richfaces.event.ComponentPhaseEventHandler#componentBegin(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
- */
- @SuppressWarnings("unchecked")
- public void componentBegin(UIComponent component, PhaseEvent event,
- Object state) {
- if (!Boolean.FALSE.equals(state)) {
- Object[] objects = (Object[]) state;
- RenderKit renderKit = (RenderKit) objects[0];
- boolean processStyles = (Boolean) objects[1];
- boolean processScripts = (Boolean) objects[2];
- Set<String> scripts = (Set<String>) objects[3];
- Set<String> styles = (Set<String>) objects[4];
- Set<String> userScripts = (Set<String>) objects[5];
- Set<String> userStyles = (Set<String>) objects[6];
- FacesContext context = event.getFacesContext();
- Renderer renderer = getRenderer(context, component, renderKit);
- if (null != renderer) {
- if ((processScripts || processStyles)
- && renderer instanceof HeaderResourceProducer) {
- HeaderResourceProducer producer = (HeaderResourceProducer) renderer;
- if (processScripts) {
- Set<String> set = producer.getHeaderScripts(context,
- component);
- if (null != set) {
- scripts.addAll(set);
- }
-
- }
- if (processStyles) {
- Set<String> set = producer.getHeaderStyles(context,
- component);
- if (null != set) {
- styles.addAll(set);
- }
-
- }
- } else if (renderer instanceof UserResourceRenderer) {
- UserResourceRenderer producer = (UserResourceRenderer) renderer;
- Set<String> set = producer.getHeaderScripts(context,
- component);
- if (null != set) {
- userScripts.addAll(set);
- }
- set = producer.getHeaderStyles(context, component);
- if (null != set) {
- userStyles.addAll(set);
- }
- }
-
- }
- }
- }
-
- /* (non-Javadoc)
- * @see
org.richfaces.event.ComponentPhaseEventHandler#componentEnd(javax.faces.component.UIComponent,
javax.faces.event.PhaseEvent, java.lang.Object)
- */
- public void componentEnd(UIComponent component, PhaseEvent event,
- Object state) {}
-
- /**
- * Find renderer for given component.
- *
- * @param context
- * @param comp
- * @param renderKit
- * @return
- */
- private static Renderer getRenderer(FacesContext context, UIComponent comp, RenderKit
renderKit) {
- String rendererType = comp.getRendererType();
- if (rendererType != null) {
- return (renderKit.getRenderer(comp.getFamily(), rendererType));
- } else {
- return (null);
- }
-
- }
-
- private static String getInitParameterValue(FacesContext context, String parameterName)
{
-
- String key = INIT_PARAMETER_PREFIX + parameterName;
-
- ExternalContext externalContext = context.getExternalContext();
- Map<String, Object> applicationMap = externalContext.getApplicationMap();
- Object mutex = externalContext.getRequest();
- Object parameterValue = null;
-
- synchronized (mutex) {
- parameterValue = applicationMap.get(key);
-
- if (parameterValue == null) {
-
- String initParameter = externalContext.getInitParameter(parameterName);
- if (initParameter != null) {
-
- if (ELUtils.isValueReference(initParameter)) {
- Application application = context.getApplication();
- ExpressionFactory expressionFactory = application.getExpressionFactory();
-
- parameterValue = expressionFactory.createValueExpression(context.getELContext(),
- initParameter,
- String.class);
- } else {
- parameterValue = initParameter;
- }
-
- } else {
- parameterValue = NULL;
- }
-
- applicationMap.put(key, parameterValue);
- }
- }
-
- return evaluate(context, parameterValue);
- }
-
- private static String evaluate(FacesContext context, Object parameterValue) {
- if (parameterValue == NULL || parameterValue == null) {
- return null;
- } else if (parameterValue instanceof ValueExpression) {
- ValueExpression expression = (ValueExpression) parameterValue;
-
- return (String) expression.getValue(context.getELContext());
- } else {
- return parameterValue.toString();
- }
- }
-
- private static boolean isExtendedSkinningEnabled(ExternalContext context) {
- String userAgent = context.getRequestHeaderMap().get("User-Agent");
- if (userAgent != null) {
- boolean apply = !USER_AGENTS.matcher(userAgent).find();
-
- if (log.isDebugEnabled()) {
- log.debug("Got User-Agent: " + userAgent);
- log.debug("Applying extended CSS controls styling = " + apply);
- }
-
- return apply;
- } else {
- if (log.isDebugEnabled()) {
- log.debug("User-Agent is null, applying extended CSS controls styling");
- }
-
- return true;
- }
- }
-}
Deleted:
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java 2008-06-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1,58 +0,0 @@
-package org.richfaces.event;
-
-import java.util.Iterator;
-
-import javax.faces.component.UIComponent;
-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.richfaces.util.ComponentPhaseEventHandlerUtils;
-
-public class ComponentViewPhaseListener implements PhaseListener {
-
- /**
- *
- */
- private static final long serialVersionUID = -2437433246178955788L;
-
- public void afterPhase(PhaseEvent event) {
- }
-
- private void beforePhase(PhaseEvent event, UIComponent component,
- ComponentPhaseEventHandler[] handlers, Object[] states) {
- 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(), handlers, states);
- }
- for (int i = 0; i < handlers.length; i++) {
- handlers[i].componentEnd(component, event, states[i]);
- }
- }
-
- public void beforePhase(PhaseEvent event) {
- ComponentPhaseEventHandler[] handlers = ComponentPhaseEventHandlerUtils.getHandlers();
- Object[] 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 && handlers != null) {
- beforePhase(event, viewRoot, handlers, states);
- }
- for (int i = 0; i < handlers.length; i++) {
- handlers[i].beforePhaseEnd(event, states[i]);
- }
- }
-
- public PhaseId getPhaseId() {
- return PhaseId.RENDER_RESPONSE;
- }
-
-}
Copied:
trunk/framework/impl/src/main/java/org/richfaces/event/RenderPhaseComponentListener.java
(from rev 9154,
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java)
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/event/RenderPhaseComponentListener.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/event/RenderPhaseComponentListener.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -0,0 +1,62 @@
+package org.richfaces.event;
+
+import java.util.Collection;
+
+import javax.faces.component.UIComponent;
+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.richfaces.util.RenderPhaseComponentVisitorUtils;
+
+public class RenderPhaseComponentListener implements PhaseListener {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2437433246178955788L;
+
+ public void afterPhase(PhaseEvent event) {
+ }
+
+ private void processComponents(PhaseEvent event, UIComponent component,
+ RenderPhaseComponentVisitor[] handlers, Object[] states) {
+ for (int i = 0; i < handlers.length; i++) {
+ handlers[i].beforeComponent(component, event, states[i]);
+ }
+ Collection<UIComponent> facets = component.getFacets().values();
+ for (UIComponent facet : facets) {
+ processComponents(event, facet, handlers, states);
+ }
+ Collection<UIComponent> children = component.getChildren();
+ for (UIComponent child : children) {
+ processComponents(event, child, handlers, states);
+ }
+ for (int i = 0; i < handlers.length; i++) {
+ handlers[i].afterComponent(component, event, states[i]);
+ }
+ }
+
+ public void beforePhase(PhaseEvent event) {
+ FacesContext facesContext = event.getFacesContext();
+ RenderPhaseComponentVisitor[] handlers =
RenderPhaseComponentVisitorUtils.getVisitors(facesContext);
+ UIViewRoot viewRoot = facesContext.getViewRoot();
+ if (viewRoot != null && handlers != null) {
+ Object[] states = new Object[handlers.length];
+ for (int i = 0; i < handlers.length; i++) {
+ states[i] = handlers[i].beforeRoot(event);
+ }
+ processComponents(event, viewRoot, handlers, states);
+ for (int i = 0; i < handlers.length; i++) {
+ handlers[i].afterRoot(event, states[i]);
+ }
+ }
+ }
+
+ public PhaseId getPhaseId() {
+ return PhaseId.RENDER_RESPONSE;
+ }
+
+}
Deleted:
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java 2008-06-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1,66 +0,0 @@
-package org.richfaces.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Scanner;
-
-import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
-
-import org.ajax4jsf.resource.util.URLToStreamHelper;
-import org.ajax4jsf.util.ServicesUtils;
-import org.richfaces.event.ComponentPhaseEventHandler;
-
-public class ComponentPhaseEventHandlerUtils{
-
- private static final String KEY = ComponentPhaseEventHandlerUtils.class.getName();
-
- private ComponentPhaseEventHandlerUtils() {}
-
- public static ComponentPhaseEventHandler[] getHandlers() {
- FacesContext context = FacesContext.getCurrentInstance();
- Map<String, Object> applicationMap =
context.getExternalContext().getApplicationMap();
- ComponentPhaseEventHandler[] handlers;
- synchronized(applicationMap) {
- handlers = (ComponentPhaseEventHandler[])applicationMap.get(KEY);
- if (handlers == null) {
- handlers = init();
- applicationMap.put(KEY, handlers);
- }
- }
- return handlers;
- }
-
- private static ComponentPhaseEventHandler[] init() {
- LinkedList<ComponentPhaseEventHandler> list = new
LinkedList<ComponentPhaseEventHandler>();
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- String resource =
"META-INF/services/org.richfaces.component.ComponentPhaseEventHandler";
- try {
- Enumeration<URL> resources = loader.getResources(resource);
- while (resources.hasMoreElements()) {
- InputStream stream = URLToStreamHelper.urlToStreamSafe(resources.nextElement());
- Scanner scanner = new Scanner(stream);
- while (scanner.hasNextLine()) {
- String handlerClassName = scanner.nextLine();
- try {
- Class<?> handlerClass = ServicesUtils.loadClass(loader, handlerClassName);
- Object handler = handlerClass.newInstance();
- if (handler instanceof ComponentPhaseEventHandler) {
- list.add((ComponentPhaseEventHandler) handler);
- }
- } catch (Exception e) {
- throw new FacesException("Error create instance for class "+
handlerClassName, e);
- }
- }
- scanner.close();
- }
- } catch (IOException e) {
- throw new FacesException("Error load resource "+ resource, e);
- }
- return list.toArray(new ComponentPhaseEventHandler[list.size()]);
- }
-}
Copied:
trunk/framework/impl/src/main/java/org/richfaces/util/RenderPhaseComponentVisitorUtils.java
(from rev 9154,
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java)
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/util/RenderPhaseComponentVisitorUtils.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/util/RenderPhaseComponentVisitorUtils.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -0,0 +1,83 @@
+package org.richfaces.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.resource.util.URLToStreamHelper;
+import org.ajax4jsf.util.ServicesUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.richfaces.event.RenderPhaseComponentVisitor;
+
+public class RenderPhaseComponentVisitorUtils{
+
+ private static final Log log =
LogFactory.getLog(RenderPhaseComponentVisitorUtils.class);
+
+ private static final String KEY = RenderPhaseComponentVisitorUtils.class.getName();
+
+ private RenderPhaseComponentVisitorUtils() {}
+
+ public static RenderPhaseComponentVisitor[] getVisitors(FacesContext context) {
+ Map<String, Object> applicationMap =
context.getExternalContext().getApplicationMap();
+ RenderPhaseComponentVisitor[] visitors;
+ synchronized(applicationMap) {
+ visitors = (RenderPhaseComponentVisitor[])applicationMap.get(KEY);
+ if (visitors == null) {
+ visitors = init();
+ applicationMap.put(KEY, visitors);
+ }
+ }
+ return visitors;
+ }
+
+ private static RenderPhaseComponentVisitor[] init() {
+ LinkedList<RenderPhaseComponentVisitor> list = new
LinkedList<RenderPhaseComponentVisitor>();
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ String resource =
"META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor";
+ try {
+ Enumeration<URL> resources = loader.getResources(resource);
+ while (resources.hasMoreElements()) {
+ InputStream stream = URLToStreamHelper.urlToStreamSafe(resources.nextElement());
+ BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
+ try {
+ String handlerClassName = null;
+ while ((handlerClassName = reader.readLine()) != null) {
+ if (handlerClassName.length() > 0) {
+ try {
+ Class<?> handlerClass = ServicesUtils.loadClass(
+ loader, handlerClassName);
+ Object handler = handlerClass.newInstance();
+ list.add((RenderPhaseComponentVisitor) handler);
+ } catch (Exception e) {
+ throw new FacesException(
+ "Error create instance for class "
+ + handlerClassName, e);
+ }
+ }
+ }
+
+ } finally {
+ try {
+ reader.close();
+ } catch (IOException e) {
+ if (log.isDebugEnabled()) {
+ log.debug(e.getLocalizedMessage(), e);
+ }
+ }
+ }
+ }
+ } catch (IOException e) {
+ throw new FacesException("Error load resource "+ resource, e);
+ }
+ return list.toArray(new RenderPhaseComponentVisitor[list.size()]);
+ }
+}
Deleted:
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-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1,2 +0,0 @@
-org.ajax4jsf.component.UIDataAdaptorPhaseEventHandler
-org.ajax4jsf.context.ViewResourcesPhaseEventHandler
\ No newline at end of file
Copied:
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor
(from rev 9154,
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.RenderPhaseComponentVisitor
(rev 0)
+++
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor 2008-06-24
12:00:25 UTC (rev 9177)
@@ -0,0 +1,2 @@
+org.ajax4jsf.component.RenderPhaseUIDataAdaptorVisitor
+org.ajax4jsf.context.RenderPhaseViewResourcesVisitor
\ No newline at end of file
Deleted:
trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java
===================================================================
---
trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java 2008-06-24
11:45:42 UTC (rev 9176)
+++
trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -1,24 +0,0 @@
-/**
- *
- */
-package org.richfaces.util;
-
-import org.apache.shale.test.base.AbstractJsfTestCase;
-import org.richfaces.event.ComponentPhaseEventHandler;
-
-public class ComponentPhaseEventHandlerUtilsTest extends AbstractJsfTestCase {
-
- public ComponentPhaseEventHandlerUtilsTest(String name) {
- super(name);
- }
-
- /**
- * Test method for {@link
org.richfaces.util.ComponentPhaseEventHandlerUtils#getHandlers()}.
- */
- public void testGetHandlers() {
- ComponentPhaseEventHandler[] handlers = ComponentPhaseEventHandlerUtils.getHandlers();
- assertNotNull(handlers);
- assertTrue(handlers.length > 0);
- }
-
-}
Copied:
trunk/framework/test/src/test/java/org/richfaces/util/RenderPhaseComponentVisitorUtilsTest.java
(from rev 9154,
trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java)
===================================================================
---
trunk/framework/test/src/test/java/org/richfaces/util/RenderPhaseComponentVisitorUtilsTest.java
(rev 0)
+++
trunk/framework/test/src/test/java/org/richfaces/util/RenderPhaseComponentVisitorUtilsTest.java 2008-06-24
12:00:25 UTC (rev 9177)
@@ -0,0 +1,24 @@
+/**
+ *
+ */
+package org.richfaces.util;
+
+import org.apache.shale.test.base.AbstractJsfTestCase;
+import org.richfaces.event.RenderPhaseComponentVisitor;
+
+public class RenderPhaseComponentVisitorUtilsTest extends AbstractJsfTestCase {
+
+ public RenderPhaseComponentVisitorUtilsTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Test method for {@link
org.richfaces.util.ComponentPhaseEventHandlerUtils#getHandlers()}.
+ */
+ public void testGetHandlers() {
+ RenderPhaseComponentVisitor[] handlers =
RenderPhaseComponentVisitorUtils.getVisitors(facesContext);
+ assertNotNull(handlers);
+ assertTrue(handlers.length > 0);
+ }
+
+}