Author: nbelaevski
Date: 2008-08-04 09:33:51 -0400 (Mon, 04 Aug 2008)
New Revision: 9888
Added:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ResponseWriterContentHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResources.java
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/ProducerContextImpl.java
Removed:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor
Log:
https://jira.jboss.org/jira/browse/RF-4014
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java 2008-08-04
13:25:50 UTC (rev 9887)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java 2008-08-04
13:33:51 UTC (rev 9888)
@@ -24,9 +24,13 @@
import java.io.IOException;
import java.util.Map;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
import javax.faces.FacesException;
+import javax.faces.application.Application;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
@@ -34,9 +38,11 @@
import org.ajax4jsf.component.AjaxViewRoot;
import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.context.ViewIdHolder;
+import org.ajax4jsf.context.ViewResources;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.ajax4jsf.resource.InternetResource;
import org.ajax4jsf.resource.InternetResourceBuilder;
+import org.ajax4jsf.util.ELUtils;
import org.ajax4jsf.webapp.BaseFilter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -50,6 +56,8 @@
*/
public class AjaxViewHandler extends ViewHandlerWrapper {
+ public static final String RESOURCES_PROCESSED =
"org.ajax4jsf.framework.HEADER_PROCESSED";
+
public static final String STATE_MARKER_KEY = "org.ajax4jsf.view.state";
public static final String SERIALIZED_STATE_KEY =
"org.ajax4jsf.view.serializedstate";
@@ -60,6 +68,9 @@
public static final String VIEW_ID_KEY = "org.ajax4jsf.VIEW_ID";
+ private static final String INIT_PARAMETER_PREFIX = "_init_parameter_";
+ private static final Object NULL = new Object();
+
/**
* @param parent
*/
@@ -198,6 +209,43 @@
Map<String,Object> requestMap = context.getExternalContext().getRequestMap();
if (null != requestMap.get(BaseFilter.RESPONSE_WRAPPER_ATTRIBUTE)) {
+ if (!Boolean.TRUE.equals(requestMap.get(RESOURCES_PROCESSED))) {
+
+ ViewResources viewResources = new ViewResources();
+
+ viewResources.setExtendedSkinningAllowed(true);
+ viewResources.setScriptStrategy(getInitParameterValue(context,
+ InternetResourceBuilder.LOAD_SCRIPT_STRATEGY_PARAM));
+
+ boolean useStdControlsSkinning = false;
+
+ String stdControlsSkinning = getInitParameterValue(context,
InternetResourceBuilder.STD_CONTROLS_SKINNING_PARAM);
+ if (stdControlsSkinning != null) {
+ useStdControlsSkinning =
InternetResourceBuilder.ENABLE.equals(stdControlsSkinning);
+ }
+
+ viewResources.setUseStdControlsSkinning(useStdControlsSkinning);
+
+ boolean useStdControlsSkinningClasses = true;
+
+ String stdControlsSkinningClasses = getInitParameterValue(context,
InternetResourceBuilder.STD_CONTROLS_SKINNING_CLASSES_PARAM);
+ if (stdControlsSkinningClasses != null) {
+ useStdControlsSkinningClasses =
InternetResourceBuilder.ENABLE.equals(stdControlsSkinningClasses);
+ }
+
+ viewResources.setUseStdControlsSkinningClasses(useStdControlsSkinningClasses);
+
+ viewResources.setStyleStrategy(getInitParameterValue(context,
+ InternetResourceBuilder.LOAD_STYLE_STRATEGY_PARAM));
+
+
+ viewResources.processHeadResources(context);
+
+ requestMap.put(AjaxContext.HEAD_EVENTS_PARAMETER, viewResources.getHeadEvents());
+
+ // Mark as processed.
+ requestMap.put(RESOURCES_PROCESSED, Boolean.TRUE);
+ }
// Save viewId for a parser selection
requestMap.put(AjaxViewHandler.VIEW_ID_KEY, context.getViewRoot().getViewId());
}
@@ -215,4 +263,55 @@
ajaxRoot.broadcastAjaxEvents(context);
}
+ 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();
+ }
+ }
+
}
Deleted:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java 2008-08-04
13:25:50 UTC (rev 9887)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/context/RenderPhaseViewResourcesVisitor.java 2008-08-04
13:33:51 UTC (rev 9888)
@@ -1,631 +0,0 @@
-/**
- *
- */
-package org.ajax4jsf.context;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.el.ExpressionFactory;
-import javax.el.ValueExpression;
-import javax.faces.FacesException;
-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.context.ResponseWriter;
-import javax.faces.event.PhaseEvent;
-import javax.faces.render.RenderKit;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.render.Renderer;
-
-import org.ajax4jsf.io.SAXResponseWriter;
-import org.ajax4jsf.renderkit.HeaderResourceProducer;
-import org.ajax4jsf.renderkit.HeaderResourceProducer2;
-import org.ajax4jsf.renderkit.UserResourceRenderer;
-import org.ajax4jsf.renderkit.UserResourceRenderer2;
-import org.ajax4jsf.renderkit.RendererUtils.HTML;
-import org.ajax4jsf.resource.InternetResource;
-import org.ajax4jsf.resource.InternetResourceBuilder;
-import org.ajax4jsf.resource.ResourceNotFoundException;
-import org.ajax4jsf.resource.ResourceRenderer;
-import org.ajax4jsf.resource.URIInternetResource;
-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;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-
-public class RenderPhaseViewResourcesVisitor implements
- RenderPhaseComponentVisitor {
-
- public static final String COMPONENT_RESOURCE_LINK_CLASS = "component";
-
- public static final String USER_RESOURCE_LINK_CLASS = "user";
-
- private class ResponseWriterContentHandler implements ContentHandler {
-
- private List<Object> events = new ArrayList<Object>();
-
- private String linkClass;
-
- public ResponseWriterContentHandler(String linkClass) {
- super();
- this.linkClass = linkClass;
- }
-
- public void characters(char[] ch, int start, int length)
- throws SAXException {
-
- events.add(new SAXTextEvent(new String(ch, start, length)));
- }
-
- public void endDocument() throws SAXException {
- }
-
- public void endElement(String uri, String localName, String name)
- throws SAXException {
- events.add(new SAXEndElementEvent(localName));
- }
-
- public void endPrefixMapping(String prefix) throws SAXException {
- throw new UnsupportedOperationException();
- }
-
- public void ignorableWhitespace(char[] ch, int start, int length)
- throws SAXException {
- }
-
- public void processingInstruction(String target, String data)
- throws SAXException {
- throw new UnsupportedOperationException();
- }
-
- public void setDocumentLocator(Locator locator) {
- throw new UnsupportedOperationException();
- }
-
- public void skippedEntity(String name) throws SAXException {
- throw new UnsupportedOperationException();
- }
-
- public void startDocument() throws SAXException {
- }
-
- public void startElement(String uri, String localName,
- String name, Attributes atts) throws SAXException {
-
- Map<String, String> attsMap = new HashMap<String,
String>(atts.getLength());
- int length = atts.getLength();
-
- for (int i = 0; i < length; i++) {
- attsMap.put(atts.getLocalName(i), atts.getValue(i));
- }
-
- if (HTML.LINK_ELEMENT.equals(localName)) {
- attsMap.put(HTML.class_ATTRIBUTE, linkClass);
- }
-
- events.add(new SAXStartElementEvent(localName, attsMap));
- }
-
- public void startPrefixMapping(String prefix, String uri)
- throws SAXException {
- throw new UnsupportedOperationException();
- }
-
- };
-
- class HeadResponseWriter extends SAXResponseWriter {
-
- public List getEventsList() {
- return ((ResponseWriterContentHandler) getXmlConsumer()).events;
- }
-
- public HeadResponseWriter(String linkClass) {
- super(new ResponseWriterContentHandler(linkClass));
-
- }
- }
-
- private class State {
-
- private RenderKit renderKit;
- private boolean processStyles;
- private boolean processScripts;
-
- private HeadResponseWriter component;
- private HeadResponseWriter user;
-
- private InternetResourceBuilder resourceBuilder;
- private boolean useSkinning;
- private boolean ajaxRequest;
-
- private Skin skin;
-
- protected HeadResponseWriter getComponentWriter() {
- return component;
- }
-
- protected HeadResponseWriter getUserWriter() {
- return user;
- }
-
- protected Object[] getEvents() {
- List componentList = component.getEventsList();
- List userList = user.getEventsList();
-
- Object[] result = new Object[componentList.size() + userList.size()];
- componentList.toArray(result);
- System.arraycopy(userList.toArray(), 0, result, componentList.size(),
userList.size());
-
- return result;
- }
-
- public State(boolean processScripts, boolean processStyles, boolean useSkinning,
- RenderKit renderKit, InternetResourceBuilder resourceBuilder,
- HeadResponseWriter component,
- HeadResponseWriter user,
- boolean ajaxRequest, Skin skin) {
- super();
- this.processScripts = processScripts;
- this.processStyles = processStyles;
- this.useSkinning = useSkinning;
- this.renderKit = renderKit;
- this.resourceBuilder = resourceBuilder;
- this.component = component;
- this.user = user;
- this.ajaxRequest = ajaxRequest;
- this.skin = skin;
- }
-
- }
-
- 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();
- //todo
-
- private static final Map<String, Object> EXTENDED_SKINNING = new
HashMap<String, Object>(1);
-
- static {
- EXTENDED_SKINNING.put(HTML.media_ATTRIBUTE, "rich-extended-skinning");
- }
-
- public static final String SKINNING_STYLES_PATH =
"/org/richfaces/renderkit/html/css/";
-
- private boolean extendedSkinningAllowed = true;
-
- private boolean encodeSkinningResources(FacesContext context, InternetResourceBuilder
resourceBuilder) throws IOException, FacesException {
- 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);
- }
-
- String resourceSuffix = null;
-
- if (useStdControlsSkinning) {
- if (useStdControlsSkinningClasses) {
- resourceSuffix = "_both.xcss";
- } else {
- resourceSuffix = ".xcss";
- }
- } else {
- if (useStdControlsSkinningClasses) {
- resourceSuffix = "_classes.xcss";
- } else {
- //no resources
- }
- }
-
- if (resourceSuffix != null) {
- resourceBuilder.createResource(
- this,
SKINNING_STYLES_PATH.concat("basic").concat(resourceSuffix)).encode(context,
null);
-
- if (extendedSkinningAllowed) {
- resourceBuilder.createResource(
- this,
SKINNING_STYLES_PATH.concat("extended").concat(resourceSuffix)).encode(context,
null, EXTENDED_SKINNING);
- }
-
- return true;
- }
-
- return false;
- }
-
- /* (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;
- boolean useSkinning = false;
-
- boolean ajaxRequest =
AjaxContext.getCurrentInstance(context).isAjaxRequest(context);
-
- if (log.isDebugEnabled()) {
- log
- .debug("Process component tree for collect used scripts and styles");
- }
-
- Skin skin = null;
- try {
- 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();
-
- ResponseWriter oldResponseWriter = context.getResponseWriter();
-
- HeadResponseWriter componentWriter = new HeadResponseWriter("component");
- HeadResponseWriter userWriter = new HeadResponseWriter("user");
-
- try {
- componentWriter.startDocument();
- userWriter.startDocument();
-
- context.setResponseWriter(componentWriter);
-
- // 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 {
- internetResourceBuilder
- .createResource(
- this,
- InternetResourceBuilder.COMMON_FRAMEWORK_SCRIPT).encode(context, null);
- internetResourceBuilder
- .createResource(
- this,
- InternetResourceBuilder.COMMON_UI_SCRIPT).encode(context, null);
-
- } catch (ResourceNotFoundException e) {
- if (log.isWarnEnabled()) {
- log
- .warn("No aggregated javaScript library found "
- + e.getMessage());
- }
- }
-
- }
- }
- }
-
- 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) {
-
- try {
- useSkinning = encodeSkinningResources(context, internetResourceBuilder);
-
- internetResourceBuilder
- .createResource(this, InternetResourceBuilder.COMMON_STYLE).encode(context,
null);
-
- } catch (ResourceNotFoundException e) {
- if (log.isWarnEnabled()) {
- log.warn("No stylesheet found "
- + e.getMessage());
- }
- }
-
- }
- } else {
- useSkinning = encodeSkinningResources(context, internetResourceBuilder);
- }
- } catch (IOException e) {
- throw new FacesException(e.getLocalizedMessage(), e);
- } finally {
- context.setResponseWriter(oldResponseWriter);
- }
-
- RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
- .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
- RenderKit renderKit = rkFactory.getRenderKit(context, context
- .getViewRoot().getRenderKitId());
-
- result = new State(processScripts, processStyles, useSkinning, renderKit,
- internetResourceBuilder, componentWriter, userWriter, ajaxRequest, skin);
- }
- }
- return result;
- }
-
- private void encodeResources(FacesContext context, ResourceRenderer renderer,
Set<String> set) throws IOException {
-
- if (set != null) {
- URIInternetResource resourceImpl = new URIInternetResource();
-
- for (String uri : set) {
- resourceImpl.setUri(uri);
- renderer.encode(resourceImpl, context, 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 object) {
- if (object != null) {
- State state = (State) object;
- FacesContext context = event.getFacesContext();
- Renderer renderer = getRenderer(context, component, state.renderKit);
- if (null != renderer) {
- ResponseWriter oldResponseWriter = context.getResponseWriter();
- try {
- if ((state.processScripts || state.processStyles)
- && (renderer instanceof HeaderResourceProducer2 || renderer instanceof
HeaderResourceProducer)) {
-
- context.setResponseWriter(state.getComponentWriter());
-
- if (renderer instanceof HeaderResourceProducer2) {
- HeaderResourceProducer2 producer = (HeaderResourceProducer2) renderer;
-
- producer.encodeToHead(context, component, state.processStyles,
- state.processScripts);
- } else if (renderer instanceof HeaderResourceProducer) {
- HeaderResourceProducer producer = (HeaderResourceProducer) renderer;
-
- if (state.processScripts) {
- encodeResources(context, state.resourceBuilder.getScriptRenderer(),
producer.getHeaderScripts(context,
- component));
- }
- if (state.processStyles) {
- encodeResources(context, state.resourceBuilder.getStyleRenderer(),
producer.getHeaderStyles(context,
- component));
- }
- }
- } else if (renderer instanceof UserResourceRenderer2) {
- context.setResponseWriter(state.getUserWriter());
-
- UserResourceRenderer2 producer = (UserResourceRenderer2) renderer;
- producer.encodeToHead(context, component);
- } else if (renderer instanceof UserResourceRenderer) {
- context.setResponseWriter(state.getUserWriter());
-
- UserResourceRenderer producer = (UserResourceRenderer) renderer;
-
- encodeResources(context, state.resourceBuilder.getScriptRenderer(),
producer.getHeaderScripts(context,
- component));
-
- encodeResources(context, state.resourceBuilder.getStyleRenderer(),
producer.getHeaderStyles(context,
- component));
- }
- } catch (IOException e) {
- throw new FacesException(e.getLocalizedMessage(), e);
- } finally {
- context.setResponseWriter(oldResponseWriter);
- }
- }
- }
- }
-
- /* (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;
-
- String skinStyleSheetUri = null;
- String skinExtendedStyleSheetUri = null;
-
- if (state.skin != null) {
- // Set default style sheet for current skin.
- skinStyleSheetUri = (String) state.skin.getParameter(context,
- Skin.generalStyleSheet);
- // Set default style sheet for current skin.
- skinExtendedStyleSheetUri = (String) state.skin.getParameter(context,
- Skin.extendedStyleSheet);
- }
-
- boolean useSkinning = state.useSkinning;
- try {
- ResponseWriter oldWriter = context.getResponseWriter();
-
- try {
- HeadResponseWriter responseWriter = state.getComponentWriter();
- context.setResponseWriter(responseWriter);
-
- // Append Skin StyleSheet after a
- if (null != skinStyleSheetUri) {
- String resourceURL = context.getApplication()
- .getViewHandler().getResourceURL(context,
- skinStyleSheetUri);
-
- URIInternetResource resourceImpl = new URIInternetResource();
- resourceImpl.setUri(resourceURL);
- resourceImpl.setRenderer(state.resourceBuilder.getStyleRenderer());
- resourceImpl.encode(context, null);
-
- useSkinning = true;
- }
-
- if (null != skinExtendedStyleSheetUri && extendedSkinningAllowed) {
- String resourceURL =
context.getApplication().getViewHandler().getResourceURL(context,
- skinExtendedStyleSheetUri);
-
- URIInternetResource resourceImpl = new URIInternetResource();
- resourceImpl.setUri(resourceURL);
- resourceImpl.setRenderer(state.resourceBuilder.getStyleRenderer());
- resourceImpl.encode(context, null, EXTENDED_SKINNING);
-
- useSkinning = true;
- }
-
- if (!state.ajaxRequest && useSkinning && extendedSkinningAllowed) {
- //skinning levels aren't dynamic, page-level setting cannot be changed
- //by AJAX request
- responseWriter.startElement("script", null);
- responseWriter.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
- responseWriter.writeText("window.RICH_FACES_EXTENDED_SKINNING_ON=true;",
null);
- responseWriter.endElement("script");
- }
-
- if (state.processScripts) {
- InternetResource resource = state.resourceBuilder.createResource(null,
- "/org/richfaces/renderkit/html/scripts/skinning.js");
-
- resource.encode(context, null);
- }
-
- } finally {
- context.setResponseWriter(oldWriter);
- }
-
- state.getComponentWriter().endDocument();
- state.getUserWriter().endDocument();
- } catch (IOException e) {
- throw new FacesException(e.getLocalizedMessage(), e);
- }
-
- Object[] stateEvents = state.getEvents();
-
- if (log.isDebugEnabled()) {
- log.debug(Arrays.toString(stateEvents));
- }
-
- requestMap.put(AjaxContext.HEAD_EVENTS_PARAMETER, stateEvents);
-
- // Mark as processed.
- requestMap.put(RESOURCES_PROCESSED, Boolean.TRUE);
- }
- }
-
- /**
- * 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();
- }
- }
-
-}
Added:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ResponseWriterContentHandler.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ResponseWriterContentHandler.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ResponseWriterContentHandler.java 2008-08-04
13:33:51 UTC (rev 9888)
@@ -0,0 +1,106 @@
+/**
+ * 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.ajax4jsf.context;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.ajax4jsf.renderkit.RendererUtils.HTML;
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+
+class ResponseWriterContentHandler implements ContentHandler {
+
+ List<Object> events = new ArrayList<Object>();
+
+ private String linkClass;
+
+ public ResponseWriterContentHandler(String linkClass) {
+ super();
+ this.linkClass = linkClass;
+ }
+
+ public void characters(char[] ch, int start, int length)
+ throws SAXException {
+
+ events.add(new SAXTextEvent(new String(ch, start, length)));
+ }
+
+ public void endDocument() throws SAXException {
+ }
+
+ public void endElement(String uri, String localName, String name)
+ throws SAXException {
+ events.add(new SAXEndElementEvent(localName));
+ }
+
+ public void endPrefixMapping(String prefix) throws SAXException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void ignorableWhitespace(char[] ch, int start, int length)
+ throws SAXException {
+ }
+
+ public void processingInstruction(String target, String data)
+ throws SAXException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setDocumentLocator(Locator locator) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void skippedEntity(String name) throws SAXException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startDocument() throws SAXException {
+ }
+
+ public void startElement(String uri, String localName,
+ String name, Attributes atts) throws SAXException {
+
+ Map<String, String> attsMap = new HashMap<String,
String>(atts.getLength());
+ int length = atts.getLength();
+
+ for (int i = 0; i < length; i++) {
+ attsMap.put(atts.getLocalName(i), atts.getValue(i));
+ }
+
+ if (HTML.LINK_ELEMENT.equals(localName)) {
+ attsMap.put(HTML.class_ATTRIBUTE, linkClass);
+ }
+
+ events.add(new SAXStartElementEvent(localName, attsMap));
+ }
+
+ public void startPrefixMapping(String prefix, String uri)
+ throws SAXException {
+ throw new UnsupportedOperationException();
+ }
+
+}
\ No newline at end of file
Added: trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResources.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResources.java
(rev 0)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResources.java 2008-08-04
13:33:51 UTC (rev 9888)
@@ -0,0 +1,481 @@
+/**
+ * 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.ajax4jsf.context;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.faces.FacesException;
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.Renderer;
+
+import org.ajax4jsf.io.SAXResponseWriter;
+import org.ajax4jsf.renderkit.HeaderResourceProducer;
+import org.ajax4jsf.renderkit.HeaderResourceProducer2;
+import org.ajax4jsf.renderkit.ProducerContext;
+import org.ajax4jsf.renderkit.ProducerContextImpl;
+import org.ajax4jsf.renderkit.UserResourceRenderer;
+import org.ajax4jsf.renderkit.UserResourceRenderer2;
+import org.ajax4jsf.renderkit.RendererUtils.HTML;
+import org.ajax4jsf.resource.InternetResource;
+import org.ajax4jsf.resource.InternetResourceBase;
+import org.ajax4jsf.resource.InternetResourceBuilder;
+import org.ajax4jsf.resource.ResourceNotFoundException;
+import org.ajax4jsf.resource.ResourceRenderer;
+import org.ajax4jsf.resource.URIInternetResource;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.richfaces.skin.Skin;
+import org.richfaces.skin.SkinFactory;
+import org.richfaces.skin.SkinNotFoundException;
+
+/**
+ * @author Nick Belaevski
+ */
+
+public class ViewResources {
+
+ private String scriptStrategy;
+
+ private String styleStrategy;
+
+ private boolean useStdControlsSkinning;
+
+ private boolean useStdControlsSkinningClasses;
+
+ private HeadResponseWriter componentWriter;
+
+ private HeadResponseWriter userWriter;
+
+ private RenderKit renderKit;
+
+ private Object[] result = null;
+
+ private static final InternetResource EXTENDED_SKINNING_ON_RESOURCE = new
InternetResourceBase() {
+
+ @Override
+ public void encode(FacesContext context, Object data)
+ throws IOException {
+
+ encode(context, data, Collections.EMPTY_MAP);
+ }
+
+ @Override
+ public void encode(FacesContext context, Object data,
+ Map<String, Object> attributes) throws IOException {
+
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement(HTML.SCRIPT_ELEM, null);
+
+ if (!attributes.containsKey(HTML.TYPE_ATTR)) {
+ writer.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
+ }
+
+ for (Map.Entry<String, Object> entry : attributes.entrySet()) {
+ writer.writeAttribute(entry.getKey(), entry.getValue(), null);
+ }
+
+ writer.writeText("window.RICH_FACES_EXTENDED_SKINNING_ON=true;", null);
+
+ writer.endElement(HTML.SCRIPT_ELEM);
+ }
+ };
+
+ public void setScriptStrategy(String scriptsStrategy) {
+ this.scriptStrategy = scriptsStrategy;
+ }
+
+ public void setStyleStrategy(String stylesStrategy) {
+ this.styleStrategy = stylesStrategy;
+ }
+
+ public void setUseStdControlsSkinning(boolean stdControlsSkinning) {
+ this.useStdControlsSkinning = stdControlsSkinning;
+ }
+
+ public void setUseStdControlsSkinningClasses(boolean stdControlsSkinningClasses) {
+ this.useStdControlsSkinningClasses = stdControlsSkinningClasses;
+ }
+
+ public void setExtendedSkinningAllowed(boolean extendedSkinningAllowed) {
+ this.extendedSkinningAllowed = extendedSkinningAllowed;
+ }
+
+ public Object getHeadEvents() {
+ List componentList = componentWriter.getEventsList();
+ List userList = userWriter.getEventsList();
+
+ result = new Object[componentList.size() + userList.size()];
+ componentList.toArray(result);
+ System.arraycopy(userList.toArray(), 0, result, componentList.size(),
userList.size());
+
+ return result;
+ }
+
+ private static final Log log = LogFactory.getLog(ViewResources.class);
+
+ //todo
+
+ private static final Map<String, Object> EXTENDED_SKINNING = new
HashMap<String, Object>(1);
+
+ static {
+ EXTENDED_SKINNING.put(HTML.media_ATTRIBUTE, "rich-extended-skinning");
+ }
+
+ public static final String SKINNING_STYLES_PATH =
"/org/richfaces/renderkit/html/css/";
+
+ private boolean extendedSkinningAllowed = true;
+
+ private boolean processScripts;
+
+ private boolean processStyles;
+
+ private boolean useSkinning;
+
+ private InternetResourceBuilder resourceBuilder;
+
+ private boolean ajaxRequest;
+
+ private ProducerContext producerContext;
+
+ public static final String COMPONENT_RESOURCE_LINK_CLASS = "component";
+
+ public static final String USER_RESOURCE_LINK_CLASS = "user";
+
+ class HeadResponseWriter extends SAXResponseWriter {
+
+ public List getEventsList() {
+ return ((ResponseWriterContentHandler) getXmlConsumer()).events;
+ }
+
+ public HeadResponseWriter(String linkClass) {
+ super(new ResponseWriterContentHandler(linkClass));
+
+ }
+ }
+
+ private void encodeResources(FacesContext context, ResourceRenderer renderer,
Set<String> set) throws IOException {
+
+ if (set != null) {
+ URIInternetResource resourceImpl = new URIInternetResource();
+
+ for (String uri : set) {
+ resourceImpl.setUri(uri);
+ renderer.encode(resourceImpl, context, null);
+ }
+ }
+ }
+
+ private boolean encodeSkinningResources(FacesContext context, InternetResourceBuilder
resourceBuilder) throws IOException, FacesException {
+ String resourceSuffix = null;
+
+ if (useStdControlsSkinning) {
+ if (useStdControlsSkinningClasses) {
+ resourceSuffix = "_both.xcss";
+ } else {
+ resourceSuffix = ".xcss";
+ }
+ } else {
+ if (useStdControlsSkinningClasses) {
+ resourceSuffix = "_classes.xcss";
+ } else {
+ //no resources
+ }
+ }
+
+ if (resourceSuffix != null) {
+ resourceBuilder.createResource(
+ this,
SKINNING_STYLES_PATH.concat("basic").concat(resourceSuffix)).encode(context,
null);
+
+ if (extendedSkinningAllowed) {
+ resourceBuilder.createResource(
+ this,
SKINNING_STYLES_PATH.concat("extended").concat(resourceSuffix)).encode(context,
null, EXTENDED_SKINNING);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ protected void processComponent(FacesContext context, UIComponent component) throws
IOException, FacesException {
+ Renderer renderer = getRenderer(context, component);
+ if (null != renderer) {
+ ResponseWriter oldResponseWriter = context.getResponseWriter();
+ try {
+ if ((processScripts || processStyles)
+ && (renderer instanceof HeaderResourceProducer2 || renderer instanceof
HeaderResourceProducer)) {
+
+ context.setResponseWriter(componentWriter);
+
+ if (renderer instanceof HeaderResourceProducer2) {
+ HeaderResourceProducer2 producer = (HeaderResourceProducer2) renderer;
+
+ if (producerContext == null) {
+ producerContext = new ProducerContextImpl(processScripts, processStyles);
+ }
+
+ producer.encodeToHead(context, component, producerContext);
+ } else if (renderer instanceof HeaderResourceProducer) {
+ HeaderResourceProducer producer = (HeaderResourceProducer) renderer;
+
+ if (processScripts) {
+ encodeResources(context, resourceBuilder.getScriptRenderer(),
producer.getHeaderScripts(context,
+ component));
+ }
+ if (processStyles) {
+ encodeResources(context, resourceBuilder.getStyleRenderer(),
producer.getHeaderStyles(context,
+ component));
+ }
+ }
+ } else if (renderer instanceof UserResourceRenderer2) {
+ context.setResponseWriter(userWriter);
+
+ UserResourceRenderer2 producer = (UserResourceRenderer2) renderer;
+ producer.encodeToHead(context, component);
+ } else if (renderer instanceof UserResourceRenderer) {
+ context.setResponseWriter(userWriter);
+
+ UserResourceRenderer producer = (UserResourceRenderer) renderer;
+
+ encodeResources(context, resourceBuilder.getScriptRenderer(),
producer.getHeaderScripts(context,
+ component));
+
+ encodeResources(context, resourceBuilder.getStyleRenderer(),
producer.getHeaderStyles(context,
+ component));
+ }
+ } finally {
+ context.setResponseWriter(oldResponseWriter);
+ }
+ }
+
+ }
+
+ /**
+ * Find renderer for given component.
+ *
+ * @param context
+ * @param comp
+ * @param renderKit
+ * @return
+ */
+ private Renderer getRenderer(FacesContext context, UIComponent comp) {
+
+ String rendererType = comp.getRendererType();
+ if (rendererType != null) {
+ return (renderKit.getRenderer(comp.getFamily(), rendererType));
+ } else {
+ return (null);
+ }
+ }
+
+ protected void traverse(FacesContext context, UIComponent component) throws IOException,
FacesException {
+ if (component != null) {
+ processComponent(context, component);
+
+ if (component.getChildCount() > 0) {
+ for (UIComponent child : component.getChildren()) {
+ traverse(context, child);
+ }
+ }
+
+ if (component.getFacetCount() > 0) {
+ for (UIComponent child : component.getFacets().values()) {
+ traverse(context, child);
+ }
+ }
+ }
+ }
+
+ public void processHeadResources(FacesContext context) throws FacesException {
+
+ RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
+ .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ renderKit = rkFactory.getRenderKit(context, context
+ .getViewRoot().getRenderKitId());
+
+ processStyles = true;
+ processScripts = true;
+ useSkinning = false;
+
+ ajaxRequest = AjaxContext.getCurrentInstance(context).isAjaxRequest(context);
+
+ if (log.isDebugEnabled()) {
+ log
+ .debug("Process component tree for collect used scripts and styles");
+ }
+
+ String skinStyleSheetUri = null;
+ String skinExtendedStyleSheetUri = null;
+
+ Skin skin = null;
+ try {
+ skin = SkinFactory.getInstance().getSkin(context);
+ // For a "NULL" skin, do not collect components stylesheets
+ if ("false".equals(skin.getParameter(context,
+ Skin.loadStyleSheets))) {
+ processStyles = false;
+ }
+ // 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);
+ }
+
+ resourceBuilder = InternetResourceBuilder.getInstance();
+
+ ResponseWriter oldResponseWriter = context.getResponseWriter();
+
+ componentWriter = new HeadResponseWriter("component");
+ userWriter = new HeadResponseWriter("user");
+
+ try {
+ componentWriter.startDocument();
+ userWriter.startDocument();
+
+ context.setResponseWriter(componentWriter);
+
+ // Check init parameters for a resources processing.
+ 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 {
+ resourceBuilder
+ .createResource(
+ this,
+ InternetResourceBuilder.COMMON_FRAMEWORK_SCRIPT).encode(context, null);
+ resourceBuilder
+ .createResource(
+ this,
+ InternetResourceBuilder.COMMON_UI_SCRIPT).encode(context, null);
+
+ } catch (ResourceNotFoundException e) {
+ if (log.isWarnEnabled()) {
+ log
+ .warn("No aggregated javaScript library found "
+ + e.getMessage());
+ }
+ }
+
+ }
+ }
+ }
+
+ 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) {
+
+ try {
+ useSkinning = encodeSkinningResources(context, resourceBuilder);
+
+ resourceBuilder
+ .createResource(this, InternetResourceBuilder.COMMON_STYLE).encode(context, null);
+
+ } catch (ResourceNotFoundException e) {
+ if (log.isWarnEnabled()) {
+ log.warn("No stylesheet found "
+ + e.getMessage());
+ }
+ }
+
+ }
+ } else {
+ useSkinning = encodeSkinningResources(context, resourceBuilder);
+ }
+
+ //traverse components
+ traverse(context, context.getViewRoot());
+
+ context.setResponseWriter(componentWriter);
+
+ // Append Skin StyleSheet after a
+ if (null != skinStyleSheetUri) {
+ String resourceURL = context.getApplication()
+ .getViewHandler().getResourceURL(context,
+ skinStyleSheetUri);
+
+ URIInternetResource resourceImpl = new URIInternetResource();
+ resourceImpl.setUri(resourceURL);
+ resourceImpl.setRenderer(resourceBuilder.getStyleRenderer());
+ resourceImpl.encode(context, null);
+
+ useSkinning = true;
+ }
+
+ if (null != skinExtendedStyleSheetUri && extendedSkinningAllowed) {
+ String resourceURL =
context.getApplication().getViewHandler().getResourceURL(context,
+ skinExtendedStyleSheetUri);
+
+ URIInternetResource resourceImpl = new URIInternetResource();
+ resourceImpl.setUri(resourceURL);
+ resourceImpl.setRenderer(resourceBuilder.getStyleRenderer());
+ resourceImpl.encode(context, null, EXTENDED_SKINNING);
+
+ useSkinning = true;
+ }
+
+ if (!ajaxRequest && useSkinning && extendedSkinningAllowed) {
+ //skinning levels aren't dynamic, page-level setting cannot be changed
+ //by AJAX request
+ EXTENDED_SKINNING_ON_RESOURCE.encode(context, null);
+ }
+
+ if (processScripts) {
+ InternetResource resource = resourceBuilder.createResource(null,
+ "/org/richfaces/renderkit/html/scripts/skinning.js");
+
+ resource.encode(context, null);
+ }
+
+ componentWriter.endDocument();
+ userWriter.endDocument();
+ } catch (IOException e) {
+ throw new FacesException(e.getLocalizedMessage(), e);
+ } finally {
+ context.setResponseWriter(oldResponseWriter);
+ }
+ }
+}
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java 2008-08-04
13:25:50 UTC (rev 9887)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java 2008-08-04
13:33:51 UTC (rev 9888)
@@ -146,10 +146,9 @@
}
}
- public void encodeToHead(FacesContext context, UIComponent component,
- boolean processStyles, boolean processScripts) throws IOException {
+ public void encodeToHead(FacesContext context, UIComponent component, ProducerContext
pc) throws IOException {
- if (processScripts) {
+ if (pc.isProcessScripts()) {
InternetResource[] scripts = getScripts();
if (scripts != null) {
for (InternetResource resource : scripts) {
@@ -158,7 +157,7 @@
}
}
- if (processStyles) {
+ if (pc.isProcessStyles()) {
InternetResource[] styles = getStyles();
if (styles != null) {
for (InternetResource resource : styles) {
Added: trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/ProducerContextImpl.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/ProducerContextImpl.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/ProducerContextImpl.java 2008-08-04
13:33:51 UTC (rev 9888)
@@ -0,0 +1,50 @@
+/**
+ * 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.ajax4jsf.renderkit;
+
+
+/**
+ * @author Nick Belaevski
+ * @since 3.2.2
+ */
+
+public class ProducerContextImpl implements ProducerContext {
+
+ private boolean processScripts;
+
+ private boolean processStyles;
+
+ public boolean isProcessScripts() {
+ return processScripts;
+ }
+
+ public boolean isProcessStyles() {
+ return processStyles;
+ }
+
+ public ProducerContextImpl(boolean processScripts, boolean processStyles) {
+ super();
+ this.processScripts = processScripts;
+ this.processStyles = processStyles;
+ }
+
+}
Modified:
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor
===================================================================
---
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor 2008-08-04
13:25:50 UTC (rev 9887)
+++
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor 2008-08-04
13:33:51 UTC (rev 9888)
@@ -1,2 +1 @@
org.ajax4jsf.component.RenderPhaseUIDataAdaptorVisitor
-org.ajax4jsf.context.RenderPhaseViewResourcesVisitor
\ No newline at end of file