JBoss Rich Faces SVN: r9180 - in trunk/docs/cdkguide/en/src/main/docbook: includes and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: artdaw
Date: 2008-06-24 08:26:06 -0400 (Tue, 24 Jun 2008)
New Revision: 9180
Added:
trunk/docs/cdkguide/en/src/main/docbook/includes/ui.xml
Removed:
trunk/docs/cdkguide/en/src/main/docbook/includes/rssubclass.xml
trunk/docs/cdkguide/en/src/main/docbook/includes/rules.xml
Modified:
trunk/docs/cdkguide/en/src/main/docbook/includes/skin.xml
trunk/docs/cdkguide/en/src/main/docbook/master.xml
trunk/docs/cdkguide/en/src/main/docbook/modules/ide.xml
Log:
http://jira.jboss.com/jira/browse/RF-3692 - TOC was fixed
Deleted: trunk/docs/cdkguide/en/src/main/docbook/includes/rssubclass.xml
===================================================================
--- trunk/docs/cdkguide/en/src/main/docbook/includes/rssubclass.xml 2008-06-24 12:17:55 UTC (rev 9179)
+++ trunk/docs/cdkguide/en/src/main/docbook/includes/rssubclass.xml 2008-06-24 12:26:06 UTC (rev 9180)
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<section id="rssubclass" xreflabel="rssubclass">
- <?dbhtml filename="rssubclass.html"?>
- <sectioninfo>
- <keywordset>
- <keyword>renderer</keyword>
- <keyword>UI</keyword>
- <keyword>CDK</keyword>
- <keyword>Guide</keyword>
- </keywordset>
- </sectioninfo>
- <title>Creating a renderer-specific subclass</title>
- <para>
- renderer-specific subclass
- </para>
-
-</section>
-
-
Deleted: trunk/docs/cdkguide/en/src/main/docbook/includes/rules.xml
===================================================================
--- trunk/docs/cdkguide/en/src/main/docbook/includes/rules.xml 2008-06-24 12:17:55 UTC (rev 9179)
+++ trunk/docs/cdkguide/en/src/main/docbook/includes/rules.xml 2008-06-24 12:26:06 UTC (rev 9180)
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<section id="rules" xreflabel="rules">
- <?dbhtml filename="rules.html"?>
- <sectioninfo>
- <keywordset>
- <keyword>project</keyword>
- <keyword>component</keyword>
- <keyword>CDK</keyword>
- <keyword>Guide</keyword>
- </keywordset>
- </sectioninfo>
- <title>Limitation and rules</title>
- <para>
- Rules
- </para>
-
-</section>
-
-
Modified: trunk/docs/cdkguide/en/src/main/docbook/includes/skin.xml
===================================================================
--- trunk/docs/cdkguide/en/src/main/docbook/includes/skin.xml 2008-06-24 12:17:55 UTC (rev 9179)
+++ trunk/docs/cdkguide/en/src/main/docbook/includes/skin.xml 2008-06-24 12:26:06 UTC (rev 9180)
@@ -19,11 +19,4 @@
XCSS
</para>
</section>
-
- <section>
- <title>Plug-n-Skin feature</title>
- <para>
- Feature
- </para>
- </section>
</section>
\ No newline at end of file
Added: trunk/docs/cdkguide/en/src/main/docbook/includes/ui.xml
===================================================================
--- trunk/docs/cdkguide/en/src/main/docbook/includes/ui.xml (rev 0)
+++ trunk/docs/cdkguide/en/src/main/docbook/includes/ui.xml 2008-06-24 12:26:06 UTC (rev 9180)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="uicomponent" xreflabel="uicomponent">
+ <?dbhtml filename="uicomponent.html"?>
+ <sectioninfo>
+ <keywordset>
+ <keyword>uicomponent</keyword>
+ <keyword>component</keyword>
+ <keyword>CDK</keyword>
+ <keyword>Guide</keyword>
+ </keywordset>
+ </sectioninfo>
+ <title>Creating UI Component class</title>
+ <para>
+ UI Component
+ </para>
+
+</section>
+
+
Modified: trunk/docs/cdkguide/en/src/main/docbook/master.xml
===================================================================
--- trunk/docs/cdkguide/en/src/main/docbook/master.xml 2008-06-24 12:17:55 UTC (rev 9179)
+++ trunk/docs/cdkguide/en/src/main/docbook/master.xml 2008-06-24 12:26:06 UTC (rev 9180)
@@ -15,10 +15,9 @@
<!ENTITY pcreate SYSTEM "includes/pcreate.xml">
<!ENTITY ccreate SYSTEM "includes/ccreate.xml">
-<!ENTITY rules SYSTEM "includes/rules.xml">
+<!ENTITY ui SYSTEM "includes/ui.xml">
<!ENTITY protoui SYSTEM "includes/protoui.xml">
<!ENTITY csrenderer SYSTEM "includes/csrenderer.xml">
-<!ENTITY rssubclass SYSTEM "includes/rssubclass.xml">
<!ENTITY template SYSTEM "includes/template.xml">
<!ENTITY skin SYSTEM "includes/skin.xml">
<!ENTITY register SYSTEM "includes/register.xml">
@@ -58,26 +57,43 @@
<?dbhtml filename="compdev.html"?>
<chapterinfo>
<keywordset>
- <keyword>development</keyword>
+ <keyword>inputDate</keyword>
<keyword>component</keyword>
<keyword>CDK</keyword>
<keyword>Guide</keyword>
</keywordset>
</chapterinfo>
- <title>Calendar component development</title>
+ <title>inputDate component development</title>
<para>
Some info
</para>
- &rules;
&pcreate;
&ccreate;
&protoui;
+ &ui;
&csrenderer;
- &rssubclass;
+
+<section id="rssubclass" xreflabel="rssubclass">
+ <?dbhtml filename="rssubclass.html"?>
+ <sectioninfo>
+ <keywordset>
+ <keyword>renderer</keyword>
+ <keyword>UI</keyword>
+ <keyword>CDK</keyword>
+ <keyword>Guide</keyword>
+ </keywordset>
+ </sectioninfo>
+ <title>Creating a renderer-specific subclass</title>
+ <para>
+ renderer-specific subclass
+ </para>
+
&template;
&skin;
+</section>
+
®ister;
&taghandler;
@@ -98,7 +114,7 @@
</chapterinfo>
<title>Button component development</title>
<para>
- Command Ajax components TBD with RichFaces CDK
+ Command Ajax components TBD with RichFaces CDK.
</para>
</chapter>
Modified: trunk/docs/cdkguide/en/src/main/docbook/modules/ide.xml
===================================================================
--- trunk/docs/cdkguide/en/src/main/docbook/modules/ide.xml 2008-06-24 12:17:55 UTC (rev 9179)
+++ trunk/docs/cdkguide/en/src/main/docbook/modules/ide.xml 2008-06-24 12:26:06 UTC (rev 9180)
@@ -9,7 +9,7 @@
</keywordset>
</chapterinfo>
- <title>IDE Integration</title>
+ <title>CDK usage and development in different IDEs</title>
<para>
Integration with Eclipse, IDEA.
</para>
15 years, 10 months
JBoss Rich Faces SVN: r9179 - trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng.
by richfaces-svn-commits@lists.jboss.org
Author: alevkovsky
Date: 2008-06-24 08:17:55 -0400 (Tue, 24 Jun 2008)
New Revision: 9179
Modified:
trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxOutputPanelTest.java
Log:
Move template to methods parameter
Modified: trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxOutputPanelTest.java
===================================================================
--- trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxOutputPanelTest.java 2008-06-24 12:00:39 UTC (rev 9178)
+++ trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxOutputPanelTest.java 2008-06-24 12:17:55 UTC (rev 9179)
@@ -9,8 +9,6 @@
import org.ajax4jsf.template.Template;
import org.richfaces.SeleniumTestBase;
import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
/**
@@ -39,6 +37,8 @@
private final static String BUTTON4_ID = "b4";
+ private final static String RESET_BUTTON_ID = "reset";
+
private final static String TEXT_SUFFIX = "_text";
private final static String RESULT_SUFFIX = "_result";
@@ -47,27 +47,16 @@
return "pages/ajaxOutputPanel/ajaxOutputPanelTest.xhtml";
}
- /**
- * This method are invoking before selenium tests started
- */
- @BeforeMethod
- @Parameters( { "browser", "filterPrefix" })
- public void startSelenium(String browser, String filterPrefix) {
- super.startSelenium(browser, filterPrefix);
-
- // TODO remove template - it should pass as parameter
- renderPage(Template.SIMPLE);
- }
-
- @Test
- public void testLayoutAttribute() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testLayoutAttribute(Template template) throws Exception {
+ renderPage(template);
// panel_1 has layout=inline(default)
// panel_2 has layout=block
// panel_3 has layout=none
writeStatus("Testing layout attribute...");
- String panelId = FORM_ID + PANEL1_ID;
- String panel2Id = FORM_ID + PANEL2_ID;
+ String panelId = getParentId() + FORM_ID + PANEL1_ID;
+ String panel2Id = getParentId() + FORM_ID + PANEL2_ID;
String panel3Id = getParentId() + FORM_ID + PANEL3_ID;
Assert.assertTrue(isPresentById(panelId));
@@ -92,11 +81,12 @@
// rendered with id of a child component and display:none style
Assert.assertTrue(isPresentById(panel3Id + "_text"), "panel_3 has layout=none and should peresent if no child component is rendered with id of a child component");
Assert.assertFalse(isVisibleById(panel3Id + "_text"), "panel_3 has layout=none and should peresent if no child component is rendered with display:none style");
-
+ clickReset();
}
- @Test
- public void testRenderedAttribute() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testRenderedAttribute(Template template) throws Exception {
+ renderPage(template);
writeStatus("Testing rendered attribute...");
String panelId = getParentId() + FORM_ID + PANEL4_ID;
@@ -111,10 +101,12 @@
// panel_4 has rendered=false and should not present on page
AssertNotRendered(panelId);
+ clickReset();
}
- @Test
- public void testAjaxRenderedAttribute() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testAjaxRenderedAttribute(Template template) throws Exception {
+ renderPage(template);
// panel_1 has ajaxRendered=false and is reRender by b1
// panel_2 has ajaxRendered=true
writeStatus("Testing ajaxRendered attribute...");
@@ -139,11 +131,13 @@
waitForAjaxCompletion();
// panel text should NOT be visible as it reRendered by b1
Assert.assertFalse(isPresentById(panelId), "panel_1 text should not be visible as it reRendered by b1");
+ clickReset();
}
- @Test
- public void testAjaxRenderedAttributeWithLimitToList() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testAjaxRenderedAttributeWithLimitToList(Template template) throws Exception {
+ renderPage(template);
// panel_1 has ajaxRendered=false and is reRender by b1 with
// limitToList=true
// panel_2 has ajaxRendered=true
@@ -168,11 +162,12 @@
// panel_2 text should not be visible as it has ajaxRendered=true and b2
// has limitToList=false
Assert.assertFalse(isPresentById(panelId2), "panel_2 text should not be visible as it has ajaxRendered=true and b2 has limitToList=false");
-
+ clickReset();
}
- @Test
- public void testOnDoubleClickEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnDoubleClickEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_5";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -182,8 +177,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnKeyDownEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnKeyDownEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_6";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -193,8 +189,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnKeyPressEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnKeyPressEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_7";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -204,8 +201,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnKeyUpEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnKeyUpEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_8";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -215,8 +213,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnMouseDownEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnMouseDownEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_9";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -226,8 +225,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnMouseMoveEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnMouseMoveEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_10";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -237,8 +237,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnMouseOutEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnMouseOutEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_11";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -248,8 +249,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnMouseOverEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnMouseOverEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_12";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -259,8 +261,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnMouseUpEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnMouseUpEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_13";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -270,8 +273,9 @@
AssertTextEquals(panelResultId, "Yes");
}
- @Test
- public void testOnClickEvent() throws Exception {
+ @Test(dataProvider = "templates")
+ public void testOnClickEvent(Template template) throws Exception {
+ renderPage(template);
String parentId = getParentId() + FORM_ID;
String panelId = parentId + "panel_14";
String panelResultId = panelId + RESULT_SUFFIX;
@@ -280,4 +284,10 @@
selenium.click(panelId);
AssertTextEquals(panelResultId, "Yes");
}
+
+ private void clickReset() {
+ String buttonId = getParentId() + FORM_ID + RESET_BUTTON_ID;
+ writeStatus("Click reset button");
+ clickCommandAndWait(buttonId);
+ }
}
15 years, 10 months
JBoss Rich Faces SVN: r9178 - in trunk/ui/datascroller/src/main: resources/META-INF/services and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: konstantin.mishin
Date: 2008-06-24 08:00:39 -0400 (Tue, 24 Jun 2008)
New Revision: 9178
Added:
trunk/ui/datascroller/src/main/java/org/richfaces/component/RenderPhaseDataScrollerVisitor.java
trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor
Removed:
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
Log:
RF-2815
Deleted: trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
===================================================================
--- trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-06-24 12:00:25 UTC (rev 9177)
+++ trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-06-24 12:00:39 UTC (rev 9178)
@@ -1,224 +0,0 @@
-/**
- * License Agreement.
- *
- * JBoss RichFaces - Ajax4jsf Component Library
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.richfaces.component;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.el.Expression;
-import javax.el.ValueExpression;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIData;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseEvent;
-
-import org.ajax4jsf.Messages;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.richfaces.component.util.MessageUtil;
-import org.richfaces.event.ComponentPhaseEventHandler;
-
-
-/**
- * Created 08.03.2008
- * @author Nick Belaevski
- * @since 3.2
- */
-
-public class DataScrollerViewPhaseListener implements ComponentPhaseEventHandler {
-
- private static final Log log = LogFactory.getLog(DataScrollerViewPhaseListener.class);
-
- private static final class ComponentConnections {
- private final Map<UIData, List<UIDatascroller>> map =
- new HashMap<UIData, List<UIDatascroller>>();
-
- public void addConnection(UIData one, UIDatascroller multi) {
- List<UIDatascroller> list = map.get(one);
- if (list == null) {
- list = new ArrayList<UIDatascroller>(1);
- map.put(one, list);
- }
-
- list.add(multi);
- }
-
- public Iterator<Entry<UIData, List<UIDatascroller>>> iterator() {
- return map.entrySet().iterator();
- }
-
- @Override
- public String toString() {
- return this.getClass().getSimpleName() + ": " + map;
- }
- }
-
- private static boolean isRendered(List<UIComponent> components) {
- boolean rendered;
-
- for (UIComponent component : components) {
- rendered = false;
-
- try {
- rendered = component.isRendered();
- } catch (Exception e) {
- //ignore that
- if (log.isDebugEnabled()) {
- log.debug(e.getLocalizedMessage(), e);
- }
- }
-
- if (!rendered) {
- return false;
- }
- }
-
- return true;
- }
-
- public void componentBegin(UIComponent component, PhaseEvent event, Object state) {
- Object[] objects = (Object[]) state;
- ComponentConnections connections = (ComponentConnections) objects[0];
- LinkedList<UIComponent> parentComponents = (LinkedList<UIComponent>) objects[1];
- parentComponents.addLast(component);
-
- if (component instanceof UIDatascroller && isRendered(parentComponents)) {
- UIDatascroller datascroller = (UIDatascroller) component;
- UIData dataTable = datascroller.getDataTable();
-
- connections.addConnection(dataTable, datascroller);
- }
- }
-
- private static boolean same(Object o1, Object o2) {
- if (o1 instanceof ValueExpression && o2 instanceof ValueExpression) {
- ValueExpression ve1 = (ValueExpression) o1;
- ValueExpression ve2 = (ValueExpression) o2;
-
- if (same(ve1.getExpressionString(), ve2.getExpressionString()) && same(ve1.getExpectedType(), ve2.getExpectedType())) {
- return true;
- }
- }
-
- return (o1 != null && o1.equals(o2)) || (o1 == null && o2 == null);
- }
-
- public void beforePhaseEnd(PhaseEvent event, Object state) {
- Object[] objects = (Object[]) state;
- ComponentConnections connections = (ComponentConnections) objects[0];
- FacesContext facesContext = event.getFacesContext();
- Iterator<Entry<UIData, List<UIDatascroller>>> entries =
- connections.iterator();
-
- while (entries.hasNext()) {
- Entry<UIData, List<UIDatascroller>> entry = entries.next();
- List<UIDatascroller> scrollers = entry.getValue();
- if (!scrollers.isEmpty()) {
- List<Object> values = new ArrayList<Object>(scrollers.size());
-
- UIData data = entry.getKey();
- UIDatascroller activeComponent = null;
-
- Map<String, Object> attributes = data.getAttributes();
- Object pageValue = attributes.get(UIDatascroller.SCROLLER_STATE_ATTRIBUTE);
-
- if (pageValue == null) {
- boolean valid = true;
-
- for (UIDatascroller datascroller : scrollers) {
- Object nextPageValue = null;
-
- if (datascroller.isLocalPageSet()) {
- nextPageValue = datascroller.getPage();
- attributes.put(UIDatascroller.SCROLLER_STATE_ATTRIBUTE, nextPageValue);
- datascroller.resetLocalPage();
- } else {
- nextPageValue = datascroller.getValueExpression("page");
- }
-
- if (!values.isEmpty() && !same(values.get(values.size() - 1), nextPageValue)) {
- valid = false;
- }
-
- values.add(nextPageValue);
-
- if (nextPageValue != null) {
- activeComponent = datascroller;
- pageValue = nextPageValue;
- }
- }
-
- if (!valid) {
- StringBuilder builder = new StringBuilder("\n[");
- Iterator<UIDatascroller> scrollerItr = scrollers.iterator();
- Iterator<Object> valueItr = values.iterator();
-
- while (scrollerItr.hasNext()) {
- UIDatascroller next = scrollerItr.next();
- builder.append(MessageUtil.getLabel(facesContext, next));
- builder.append(": ");
-
- Object value = valueItr.next();
- if (value instanceof Expression) {
- builder.append(((Expression) value).getExpressionString());
- } else {
- builder.append(value);
- }
-
- builder.append(scrollerItr.hasNext() ? ",\n" : "]");
- }
-
- String formattedMessage = Messages.getMessage(Messages.DATASCROLLER_PAGES_DIFFERENT,
- new Object[] {MessageUtil.getLabel(facesContext, data), builder});
-
-
- log.error(formattedMessage);
- }
-
- }
-
- if (activeComponent == null) {
- activeComponent = scrollers.get(scrollers.size() - 1);
- }
-
- if (pageValue != null) {
- activeComponent.setupFirstRowValue();
- }
- }
- }
- }
-
- public Object beforePhaseBegin(PhaseEvent event) {
- return new Object[] {new ComponentConnections(), new LinkedList<UIComponent>()};
- }
-
- public void componentEnd(UIComponent component, PhaseEvent event, Object state) {
- Object[] objects = (Object[]) state;
- LinkedList<?> parentComponents = (LinkedList<?>) objects[1];
- parentComponents.removeLast();
- }
-}
Copied: trunk/ui/datascroller/src/main/java/org/richfaces/component/RenderPhaseDataScrollerVisitor.java (from rev 9154, trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java)
===================================================================
--- trunk/ui/datascroller/src/main/java/org/richfaces/component/RenderPhaseDataScrollerVisitor.java (rev 0)
+++ trunk/ui/datascroller/src/main/java/org/richfaces/component/RenderPhaseDataScrollerVisitor.java 2008-06-24 12:00:39 UTC (rev 9178)
@@ -0,0 +1,232 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.el.Expression;
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+
+import org.ajax4jsf.Messages;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.richfaces.component.util.MessageUtil;
+import org.richfaces.event.RenderPhaseComponentVisitor;
+
+
+/**
+ * Created 08.03.2008
+ * @author Nick Belaevski
+ * @since 3.2
+ */
+
+public class RenderPhaseDataScrollerVisitor implements RenderPhaseComponentVisitor {
+
+ private class State {
+
+ private ComponentConnections connections;
+ private LinkedList<UIComponent> components;
+
+ private State(LinkedList<UIComponent> components,
+ ComponentConnections connections) {
+ this.components = components;
+ this.connections = connections;
+ }
+ }
+
+ private static final class ComponentConnections {
+ private final Map<UIData, List<UIDatascroller>> map =
+ new HashMap<UIData, List<UIDatascroller>>();
+
+ public void addConnection(UIData one, UIDatascroller multi) {
+ List<UIDatascroller> list = map.get(one);
+ if (list == null) {
+ list = new ArrayList<UIDatascroller>(1);
+ map.put(one, list);
+ }
+
+ list.add(multi);
+ }
+
+ public Iterator<Entry<UIData, List<UIDatascroller>>> iterator() {
+ return map.entrySet().iterator();
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName() + ": " + map;
+ }
+ }
+
+ private static final Log log = LogFactory.getLog(RenderPhaseDataScrollerVisitor.class);
+
+ public Object beforeRoot(PhaseEvent event) {
+ return new State(new LinkedList<UIComponent>(), new ComponentConnections());
+ }
+
+ public void beforeComponent(UIComponent component, PhaseEvent event, Object object) {
+ State state = (State) object;
+ state.components.addLast(component);
+
+ if (component instanceof UIDatascroller && isRendered(state.components)) {
+ UIDatascroller datascroller = (UIDatascroller) component;
+ UIData dataTable = datascroller.getDataTable();
+
+ state.connections.addConnection(dataTable, datascroller);
+ }
+ }
+
+ public void afterComponent(UIComponent component, PhaseEvent event, Object object) {
+ State state = (State) object;
+ state.components.removeLast();
+ }
+
+ public void afterRoot(PhaseEvent event, Object object) {
+ State state = (State) object;
+ FacesContext facesContext = event.getFacesContext();
+ Iterator<Entry<UIData, List<UIDatascroller>>> entries =
+ state.connections.iterator();
+
+ while (entries.hasNext()) {
+ Entry<UIData, List<UIDatascroller>> entry = entries.next();
+ List<UIDatascroller> scrollers = entry.getValue();
+ if (!scrollers.isEmpty()) {
+ List<Object> values = new ArrayList<Object>(scrollers.size());
+
+ UIData data = entry.getKey();
+ UIDatascroller activeComponent = null;
+
+ Map<String, Object> attributes = data.getAttributes();
+ Object pageValue = attributes.get(UIDatascroller.SCROLLER_STATE_ATTRIBUTE);
+
+ if (pageValue == null) {
+ boolean valid = true;
+
+ for (UIDatascroller datascroller : scrollers) {
+ Object nextPageValue = null;
+
+ if (datascroller.isLocalPageSet()) {
+ nextPageValue = datascroller.getPage();
+ attributes.put(UIDatascroller.SCROLLER_STATE_ATTRIBUTE, nextPageValue);
+ datascroller.resetLocalPage();
+ } else {
+ nextPageValue = datascroller.getValueExpression("page");
+ }
+
+ if (!values.isEmpty() && !same(values.get(values.size() - 1), nextPageValue)) {
+ valid = false;
+ }
+
+ values.add(nextPageValue);
+
+ if (nextPageValue != null) {
+ activeComponent = datascroller;
+ pageValue = nextPageValue;
+ }
+ }
+
+ if (!valid) {
+ StringBuilder builder = new StringBuilder("\n[");
+ Iterator<UIDatascroller> scrollerItr = scrollers.iterator();
+ Iterator<Object> valueItr = values.iterator();
+
+ while (scrollerItr.hasNext()) {
+ UIDatascroller next = scrollerItr.next();
+ builder.append(MessageUtil.getLabel(facesContext, next));
+ builder.append(": ");
+
+ Object value = valueItr.next();
+ if (value instanceof Expression) {
+ builder.append(((Expression) value).getExpressionString());
+ } else {
+ builder.append(value);
+ }
+
+ builder.append(scrollerItr.hasNext() ? ",\n" : "]");
+ }
+
+ String formattedMessage = Messages.getMessage(Messages.DATASCROLLER_PAGES_DIFFERENT,
+ new Object[] {MessageUtil.getLabel(facesContext, data), builder});
+
+
+ log.error(formattedMessage);
+ }
+
+ }
+
+ if (activeComponent == null) {
+ activeComponent = scrollers.get(scrollers.size() - 1);
+ }
+
+ if (pageValue != null) {
+ activeComponent.setupFirstRowValue();
+ }
+ }
+ }
+ }
+
+ private static boolean isRendered(List<UIComponent> components) {
+ boolean rendered;
+
+ for (UIComponent component : components) {
+ rendered = false;
+
+ try {
+ rendered = component.isRendered();
+ } catch (Exception e) {
+ //ignore that
+ if (log.isDebugEnabled()) {
+ log.debug(e.getLocalizedMessage(), e);
+ }
+ }
+
+ if (!rendered) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static boolean same(Object o1, Object o2) {
+ if (o1 instanceof ValueExpression && o2 instanceof ValueExpression) {
+ ValueExpression ve1 = (ValueExpression) o1;
+ ValueExpression ve2 = (ValueExpression) o2;
+
+ if (same(ve1.getExpressionString(), ve2.getExpressionString()) && same(ve1.getExpectedType(), ve2.getExpectedType())) {
+ return true;
+ }
+ }
+
+ return (o1 != null && o1.equals(o2)) || (o1 == null && o2 == null);
+ }
+}
Deleted: trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
===================================================================
--- trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler 2008-06-24 12:00:25 UTC (rev 9177)
+++ trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler 2008-06-24 12:00:39 UTC (rev 9178)
@@ -1 +0,0 @@
-org.richfaces.component.DataScrollerViewPhaseListener
\ No newline at end of file
Copied: trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor (from rev 9154, trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler)
===================================================================
--- trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor (rev 0)
+++ trunk/ui/datascroller/src/main/resources/META-INF/services/org.richfaces.component.RenderPhaseComponentVisitor 2008-06-24 12:00:39 UTC (rev 9178)
@@ -0,0 +1 @@
+org.richfaces.component.RenderPhaseDataScrollerVisitor
\ No newline at end of file
15 years, 10 months
JBoss Rich Faces SVN: r9177 - in trunk/framework: impl/src/main/java/org/ajax4jsf/application and 6 other directories.
by richfaces-svn-commits@lists.jboss.org
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);
+ }
+
+}
15 years, 10 months
JBoss Rich Faces SVN: r9176 - in trunk/test-applications/seleniumTest/src: main/webapp/WEB-INF and 3 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: dsvyatobatsko
Date: 2008-06-24 07:45:42 -0400 (Tue, 24 Jun 2008)
New Revision: 9176
Added:
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/AjaxListenerTestBean.java
trunk/test-applications/seleniumTest/src/main/webapp/pages/ajaxListener/
trunk/test-applications/seleniumTest/src/main/webapp/pages/ajaxListener/ajaxListenerTest.xhtml
trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxListenerTest.java
Modified:
trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml
Log:
http://jira.jboss.com/jira/browse/RF-3766 started
Added: trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/AjaxListenerTestBean.java
===================================================================
--- trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/AjaxListenerTestBean.java (rev 0)
+++ trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/AjaxListenerTestBean.java 2008-06-24 11:45:42 UTC (rev 9176)
@@ -0,0 +1,42 @@
+package org.ajax4jsf.bean;
+
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.component.UIAjaxCommandLink;
+import org.ajax4jsf.event.AjaxEvent;
+import org.ajax4jsf.event.AjaxListener;
+
+public class AjaxListenerTestBean implements AjaxListener{
+
+ private long number = 0l;
+
+ /**
+ * Gets value of number field.
+ * @return value of number field
+ */
+ public long getNumber() {
+ return number;
+ }
+
+ /**
+ * Set a new value for number field.
+ * @param number a new value for number field
+ */
+ public void setNumber(long number) {
+ this.number = number;
+ }
+
+ /**
+ * @see AjaxListener#processAjax(AjaxEvent)
+ */
+ public void processAjax(AjaxEvent event) {
+ FacesContext ctx = FacesContext.getCurrentInstance();
+ UIAjaxCommandLink link = (UIAjaxCommandLink) event.getComponent();
+ if(ctx.getMessages().hasNext()) {
+ link.setValue("Validation failed, but ajax listener is invoked anyway");
+ } else {
+ link.setValue("Ajax listener has been invoked successfully");
+ }
+ }
+
+}
Property changes on: trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/AjaxListenerTestBean.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Id Revision Date
Name: svn:eol-style
+ native
Modified: trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml 2008-06-24 11:05:51 UTC (rev 9175)
+++ trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml 2008-06-24 11:45:42 UTC (rev 9176)
@@ -140,4 +140,9 @@
<managed-bean-class>org.ajax4jsf.bean.A4JFormTestBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
+ <managed-bean>
+ <managed-bean-name>ajaxListenerBean</managed-bean-name>
+ <managed-bean-class>org.ajax4jsf.bean.AjaxListenerTestBean</managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
+ </managed-bean>
</faces-config>
\ No newline at end of file
Added: trunk/test-applications/seleniumTest/src/main/webapp/pages/ajaxListener/ajaxListenerTest.xhtml
===================================================================
(Binary files differ)
Property changes on: trunk/test-applications/seleniumTest/src/main/webapp/pages/ajaxListener/ajaxListenerTest.xhtml
___________________________________________________________________
Name: svn:mime-type
+ application/xhtml+xml
Added: trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxListenerTest.java
===================================================================
--- trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxListenerTest.java (rev 0)
+++ trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxListenerTest.java 2008-06-24 11:45:42 UTC (rev 9176)
@@ -0,0 +1,19 @@
+package org.richfaces.testng;
+
+import org.ajax4jsf.template.Template;
+import org.richfaces.SeleniumTestBase;
+import org.testng.annotations.Test;
+
+public class AjaxListenerTest extends SeleniumTestBase {
+
+ @Test(dataProvider = "templates")
+ public void testAjaxListenerComponent(Template template) {
+ renderPage(template);
+ }
+
+ @Override
+ public String getTestUrl() {
+ return "pages/ajaxListener/ajaxListenerTest.xhtml";
+ }
+
+}
Property changes on: trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/AjaxListenerTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Id Revision Date
Name: svn:eol-style
+ native
15 years, 10 months
JBoss Rich Faces SVN: r9175 - trunk/framework/impl/src/main/java/org/ajax4jsf/webapp.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2008-06-24 07:05:51 -0400 (Tue, 24 Jun 2008)
New Revision: 9175
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java
Log:
http://jira.jboss.com/jira/browse/RF-3549
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java 2008-06-24 11:04:51 UTC (rev 9174)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/BaseFilter.java 2008-06-24 11:05:51 UTC (rev 9175)
@@ -149,6 +149,11 @@
public static final String FILE_UPLOAD_INDICATOR = "_richfaces_upload_file_indicator";
/**
+ * Request parameter that allow to send HTTP error instead of html message
+ */
+ public static final String SEND_HTTP_ERROR = "_richfaces_send_http_error";
+
+ /**
* Initialize the filter.
*/
public void init(FilterConfig config) throws ServletException {
@@ -295,10 +300,15 @@
Map<String, MultipartRequest> sessionsMap = null;
Map<String, Object> percentMap = null;
+ boolean sendError = Boolean.parseBoolean(request.getParameter(SEND_HTTP_ERROR));
try {
if (isFileSizeRestricted(request, maxRequestSize)) {
- printResponse(response,
- "<html id=\"_richfaces_file_upload_size_restricted\"></html>");
+ if (sendError) {
+ response.sendError(413);
+ } else {
+ printResponse(response,
+ "<html id=\"_richfaces_file_upload_size_restricted\"></html>");
+ }
} else if (!checkFileCount(httpRequest)) {
printResponse(response,
"<html id=\"_richfaces_file_upload_forbidden\"></html>");
15 years, 10 months
JBoss Rich Faces SVN: r9174 - trunk/samples/fileUploadDemo/src/main/webapp/pages.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2008-06-24 07:04:51 -0400 (Tue, 24 Jun 2008)
New Revision: 9174
Modified:
trunk/samples/fileUploadDemo/src/main/webapp/pages/index.jsp
Log:
http://jira.jboss.com/jira/browse/RF-3549
Modified: trunk/samples/fileUploadDemo/src/main/webapp/pages/index.jsp
===================================================================
--- trunk/samples/fileUploadDemo/src/main/webapp/pages/index.jsp 2008-06-24 11:04:07 UTC (rev 9173)
+++ trunk/samples/fileUploadDemo/src/main/webapp/pages/index.jsp 2008-06-24 11:04:51 UTC (rev 9174)
@@ -47,7 +47,8 @@
listWidth="#{bean.width}"
listHeight="#{bean.height}"
maxFilesQuantity="#{bean.maxFiles}"
- acceptedTypes="#{bean.fileTypes}">
+ acceptedTypes="#{bean.fileTypes}"
+ allowFlash="auto">
<f:facet name="label">
<h:outputText value="{_KB}KB from {KB}KB uploaded --- {mm}:{ss}"></h:outputText>
</f:facet>
15 years, 10 months
JBoss Rich Faces SVN: r9173 - in trunk/ui/fileUpload/src/main: resources/org/richfaces/renderkit/html and 3 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2008-06-24 07:04:07 -0400 (Tue, 24 Jun 2008)
New Revision: 9173
Added:
trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/swf/
trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/swf/fileUploadComponent.swf
Modified:
trunk/ui/fileUpload/src/main/config/component/fileUpload.xml
trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/js/FileUpload.js
trunk/ui/fileUpload/src/main/templates/org/richfaces/fileUpload.jspx
Log:
http://jira.jboss.com/jira/browse/RF-3549
flash mode doesn't work under IE yet
Modified: trunk/ui/fileUpload/src/main/config/component/fileUpload.xml
===================================================================
--- trunk/ui/fileUpload/src/main/config/component/fileUpload.xml 2008-06-24 10:50:21 UTC (rev 9172)
+++ trunk/ui/fileUpload/src/main/config/component/fileUpload.xml 2008-06-24 11:04:07 UTC (rev 9173)
@@ -371,6 +371,15 @@
<description>
ID (in format of call UIComponent.findComponent()) of Request status component </description>
</property>
+
+ <property>
+ <name>allowFlash</name>
+ <classname>java.lang.String</classname>
+ <description>
+ Attribute which allow the component to use the flash module that provides file upload functionality [false, true, auto].
+ </description>
+ <defaultvalue>"false"</defaultvalue>
+ </property>
<property elonly="true" hidden="true" existintag="false" exist="false" >
<name>size</name>
Modified: trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/js/FileUpload.js
===================================================================
--- trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/js/FileUpload.js 2008-06-24 10:50:21 UTC (rev 9172)
+++ trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/js/FileUpload.js 2008-06-24 11:04:07 UTC (rev 9173)
@@ -142,7 +142,11 @@
upload: function() {
this.setState(FileUploadEntry.UPLOAD_IN_PROGRESS);
this.setupProgressBar();
- this.uploadObject.submitForm(this);
+ if (this.uploadObject.isFlash) {
+ this.uploadObject._flashSubmitForm(this);
+ } else {
+ this.uploadObject.submitForm(this);
+ }
},
setupProgressBar: function () {
@@ -435,6 +439,7 @@
this.actionUrl = actionUrl;
this.options = options || {};
+ this.initFlashModule(options.allowFlash);
this.initEvents();
this.setupAutoUpload();
this.checkFrame();
@@ -561,7 +566,7 @@
this.progressBar.options.onerror = function (e) {
this.errorHandler(e);
}.bind(this);
- this.progressBar.enable();
+ if (!this.isFlash) this.progressBar.enable();
},
errorHandler: function (e) {
@@ -638,16 +643,18 @@
remove: function(entry) {
entry.clear();
+ if (this.isFlash) this._flashRemoveFile(this.entries.indexOf(entry));
this.entries = this.entries.without(entry);
},
_selectEntryForUpload: function() {
+ this.uploadIndex = -1;
var l = this.entries.length;
for (var i = 0; i < l; i++) {
var entry = this.entries[i];
if (entry.state == FileUploadEntry.READY || entry.state == FileUploadEntry.INITIALIZED || entry.state == FileUploadEntry.UPLOAD_CANCELED) {
-
+ this.uploadIndex = i;
return entry;
}
}
@@ -680,7 +687,8 @@
this.runUpload = false;
if (this.activeEntry) {
- this.activeEntry.stop();
+ if (this.isFlash) this._flashStop();
+ else this.activeEntry.stop();
}
return false;
},
@@ -1026,7 +1034,181 @@
parentForm.enctype = oldEnctype;
this.getFileSizeScript(entry.uid, this.formId);
}
+ },
+
+ initFlashModule: function ()
+ {
+ var allowFlash = this.options.allowFlash;
+ if (allowFlash=="auto" || allowFlash=="true")
+ {
+ var object = document.createElement('div');
+ object.innerHTML = '<a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a>';
+ var oid = this.id+":flashContainer";
+ object.style.display = allowFlash=="true" ? "" : "none";
+ object.id = oid;
+ this.element.appendChild(object);
+ this.isFlash = swfobject.hasFlashPlayerVersion("8.0.0");
+ if (this.isFlash)
+ {
+ var flashvars = {fileUploadId:this.id};
+ var params = {allowscriptaccess:true};
+ var attributes = {};
+ swfobject.embedSWF(this.options.flashComponentUrl, oid, "0", "0", "8.0.0", false, flashvars, params, attributes);
+
+ this.currentInput.parentNode.innerHTML = '<input type="text" style="cursor: pointer; right: 0px; top: 0px; font-size: 10em; position: absolute; padding: 0px" class="rich-fileupload-hidden" id="'+this.id+':file" name="'+this.id+':file"></input>'
+ this.currentInput = $(this.id + ":file");
+
+ //this.currentInput.type="text";
+ //this.currentInput.onchange = null;
+ this.currentInput.onmousedown=(function (){this.createFrame();}).bind(this);
+ this.currentInput.onclick = this._flashOnOpenFileDialog.bind(this);
+ }
+
+ }
+ },
+
+ _flashOnOpenFileDialog: function (event) {
+ // call flash
+ this.flashComponent.browse();
+ return false;
+ },
+
+ _flashSetComponent: function() {
+ var flashId = this.id+":flashContainer";
+ this.flashComponent = (document[flashId]) ? document[flashId] : window[flashId];
+ this.flashComponent.setProperties({
+ acceptedTypes: this.acceptedTypes,
+ noDuplicate: this.options.noDuplicate,
+ maxFiles: this.maxFileBatchSize });
+ },
+
+ _flashAdd: function(files) {
+ if (this.disabled) return;
+
+ for (var i=this.entries.length; i<files.length;i++)
+ {
+ this.currentInput.value = files[i].name;
+ this.createFrame();
+ var newEntry = new FileUploadEntry(this.currentInput, this);
+ this.entries.push(newEntry);
+
+ if (this.runUpload) {
+ newEntry.setState(FileUploadEntry.READY);
+ } else {
+ newEntry.setState(FileUploadEntry.INITIALIZED);
+ }
+
+ var newUpload = this.currentInput.cloneNode(true);
+ newUpload.onclick = this._flashOnOpenFileDialog.bind(this);
+ //this.currentInput.onchange = null;
+ this.currentInput.style.cssText = "position: absolute; right: 0px; top: 0px; display: none; visibility: hidden;";
+ newUpload.id = this.id + ":file" + (this.idCounter++);
+ newUpload.value = '';
+ this.currentInput.parentNode.appendChild(newUpload);
+ this.currentInput = newUpload;
+ }
+
+ /*if (this.runUpload) {
+ this.upload();
+ }*/
+ },
+
+ _flashRemoveFile: function(index)
+ {
+ this.flashComponent.removeFile(index);
+ },
+
+ _flashFireEvent: function(eventName, object)
+ {
+ if (this.events[eventName])
+ {
+ this.element.fire("rich:"+eventName, object);
+ }
+ },
+
+ _flashSubmitForm: function(entry) {
+
+ entry.uid = encodeURIComponent(Math.random().toString());
+
+ var action = this.actionUrl + (/\?/.test(this.actionUrl) ? '&_richfaces_upload_uid' : '?_richfaces_upload_uid') + '=' + encodeURI(entry.uid) + "&id=" + this.id + "&_richfaces_upload_file_indicator=true&_richfaces_send_http_error=true";
+
+ var size = this.flashComponent.uploadFile(this.uploadIndex, action);
+ if (this.labelMarkup) {
+ this.progressData = new ProgressData(size);
+ }
+
+ },
+
+ _flashStop: function() {
+ if (this.uploadIndex>=0) {
+ this.flashComponent.cancelUploadFile(this.uploadIndex);
+ this._flashError(FileUploadEntry.UPLOAD_CANCELED);
+ }
+ },
+
+ _flashOnProgress: function (bytesLoaded, bytesTotal)
+ {
+ var entry = this.entries[this.uploadIndex];
+ if (entry) {
+ var p = bytesLoaded*100/bytesTotal;
+ this.progressBar.setValue(p);
+ if (entry.state == FileUploadEntry.UPLOAD_IN_PROGRESS) {
+ var content = this.labelMarkup.invoke('getContent', this.progressData.getContext(p)).join('');
+ entry.statusLabel.innerHTML = content;
+ }
+ }
+ },
+
+ _flashOnComplete: function () {
+ this.finishProgressBar();
+ this._flashSetEntryState(this.uploadIndex, FileUploadEntry.UPLOAD_SUCCESS);
+
+/*
+ !!! var restr = iframeDocument.getElementById('_richfaces_file_upload_size_restricted');
+
+ } else if (restr) {
+ this.callback(FileUploadEntry.UPLOAD_SIZE_ERROR);
+ */
+ },
+
+ _flashHTTPError: function (httpErrorNumber) {
+ if (httpErrorNumber==413) this._flashError(FileUploadEntry.UPLOAD_SIZE_ERROR);
+ else this._flashError();
+ },
+
+ _flashIOError: function () {
+ this._flashError();
+ },
+
+ _flashOnSecurityError: function (errorString) {
+ this._flashError();
+ },
+
+ _flashError: function (error)
+ {
+ this.finishProgressBar();
+ this._flashSetEntryState(this.uploadIndex, (error==undefined ? FileUploadEntry.UPLOAD_TRANSFER_ERROR : error));
+ },
+
+ _flashSetEntryState: function (entryIndex, state) {
+ var entry = this.entries[entryIndex];
+ if (entry) {
+ entry.setState(state);
+ }
}
});
+FlashFileUpload = {
+ getComponent: function(componentId) {
+ return $(componentId).component;
+ },
+ ASTrace: function (msg)
+ {
+ console.log(msg);
+ },
+ ASAlert: function (msg)
+ {
+ alert(msg);
+ }
+}
\ No newline at end of file
Added: trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/swf/fileUploadComponent.swf
===================================================================
(Binary files differ)
Property changes on: trunk/ui/fileUpload/src/main/resources/org/richfaces/renderkit/html/swf/fileUploadComponent.swf
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/ui/fileUpload/src/main/templates/org/richfaces/fileUpload.jspx
===================================================================
--- trunk/ui/fileUpload/src/main/templates/org/richfaces/fileUpload.jspx 2008-06-24 10:50:21 UTC (rev 9172)
+++ trunk/ui/fileUpload/src/main/templates/org/richfaces/fileUpload.jspx 2008-06-24 11:04:07 UTC (rev 9173)
@@ -17,12 +17,15 @@
/org/richfaces/renderkit/html/scripts/utils.js,
/org/richfaces/renderkit/html/scripts/json/json-dom.js,
/org/richfaces/renderkit/html/js/FileUpload.js,
+ /org/richfaces/renderkit/html/js/swfobject.js,
/org/richfaces/renderkit/html/js/progressBar.js,
/org/ajax4jsf/javascript/scripts/form.js,
</h:scripts>
<f:clientId var="clientId" />
+ <f:resource var="flashComponent" name="/org/richfaces/renderkit/html/swf/fileUploadComponent.swf"/>
+
<jsp:scriptlet>
<![CDATA[
Integer max = initMaxFilesCount(context, component, clientId);
@@ -118,6 +121,13 @@
<div class="rich-fileupload-list-overflow #{uploadListClass}" style="width: 100%; height: #{listHeight}" id="#{clientId}:fileItems"></div>
+ <jsp:scriptlet>
+ <![CDATA[
+ String useFlashComponent = ((String) component.getAttributes().get("allowFlash")).trim().toLowerCase();
+ variables.setVariable("allowFlash", useFlashComponent);
+ ]]>
+ </jsp:scriptlet>
+
<span>
<script type="text/javascript">
FileUpload.CLASSES = {
@@ -177,7 +187,7 @@
onclear : #{this:getAsEventHandler(context, component, "onclear")}
};
- new FileUpload('#{clientId}','#{formId}','#{actionUrl}',#{this:getStopScript(context, component)}, #{this:getFileSizeScript(context, component)} ,'#{this:getProgressBarId(context, component)}', FileUpload.CLASSES, #{this:getLabelMarkup(context, component)}, #{maxCount}, events, #{component.attributes["disabled"]}, #{this:getAcceptedTypes(context, component)}, {'autoclear':#{component.attributes["autoclear"]},'autoUpload':#{component.attributes["immediateUpload"]},'noDuplicate':#{component.attributes["noDuplicate"]}},#{this:_getLabels(labels)},#{this:getChildrenParams(context, component)});
+ new FileUpload('#{clientId}','#{formId}','#{actionUrl}',#{this:getStopScript(context, component)}, #{this:getFileSizeScript(context, component)} ,'#{this:getProgressBarId(context, component)}', FileUpload.CLASSES, #{this:getLabelMarkup(context, component)}, #{maxCount}, events, #{component.attributes["disabled"]}, #{this:getAcceptedTypes(context, component)}, {'autoclear':#{component.attributes["autoclear"]},'autoUpload':#{component.attributes["immediateUpload"]},'noDuplicate':#{component.attributes["noDuplicate"]}, 'allowFlash':'#{allowFlash}', 'flashComponentUrl':'#{flashComponent}'},#{this:_getLabels(labels)},#{this:getChildrenParams(context, component)});
</script>
</span>
<f:call name="utils.encodeEndFormIfNessesary" />
15 years, 10 months
JBoss Rich Faces SVN: r9172 - trunk/sandbox/ui/extendedDataTable.
by richfaces-svn-commits@lists.jboss.org
Author: pkawiak
Date: 2008-06-24 06:50:21 -0400 (Tue, 24 Jun 2008)
New Revision: 9172
Added:
trunk/sandbox/ui/extendedDataTable/ant-devtools.xml
Log:
a development utility script
Added: trunk/sandbox/ui/extendedDataTable/ant-devtools.xml
===================================================================
--- trunk/sandbox/ui/extendedDataTable/ant-devtools.xml (rev 0)
+++ trunk/sandbox/ui/extendedDataTable/ant-devtools.xml 2008-06-24 10:50:21 UTC (rev 9172)
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+ 17.06.2008
+ pkawiak
+ -->
+
+
+<project name="dev-tools" default="merge-scripts">
+
+ <description>
+ Tools speeding up developement
+ </description>
+
+ <target name="merge-scripts">
+ <property name="resources-dir" value="./src/main/javascript"></property>
+ <property name="target-dir" value="../../../../g3-demonstration/WebContent/JS/"></property>
+ <property name="script-path" value=""></property>
+ <property name="gen-script-name" value="extended-data-table.js"></property>
+ <property name="gen-script-full-name" value="${target-dir}/${script-path}/${gen-script-name}"></property>
+ <concat append="false" binary="false" destfile="${gen-script-full-name}">
+ <filelist>
+ <file name="${resources-dir}/ClientUILib.js"/>
+ <file name="${resources-dir}/ClientUI/common/utils/Utils.js"/>
+ <file name="${resources-dir}/ClientUI/common/utils/StringBuilder.js"/>
+ <file name="${resources-dir}/ClientUI/common/utils/Validators.js"/>
+ <file name="${resources-dir}/ClientUI/common/box/Box.js"/>
+ <file name="${resources-dir}/ClientUI/controls/dataTable/ExtendedDataTable.js"/>
+ <file name="${resources-dir}/ClientUI/controls/datatable/ExtendedDataTableHeader.js"/>
+ <file name="${resources-dir}/ClientUI/controls/datatable/ExtendedDataTableSelection.js"/>
+ </filelist>
+ </concat>
+ </target>
+
+</project>
+
15 years, 10 months
JBoss Rich Faces SVN: r9171 - trunk/test-applications/jsp/src/main/webapp/Tree.
by richfaces-svn-commits@lists.jboss.org
Author: mvitenkov
Date: 2008-06-24 06:44:09 -0400 (Tue, 24 Jun 2008)
New Revision: 9171
Modified:
trunk/test-applications/jsp/src/main/webapp/Tree/Tree.jsp
Log:
ajaxSubmitSelection="true"
Modified: trunk/test-applications/jsp/src/main/webapp/Tree/Tree.jsp
===================================================================
--- trunk/test-applications/jsp/src/main/webapp/Tree/Tree.jsp 2008-06-24 10:36:53 UTC (rev 9170)
+++ trunk/test-applications/jsp/src/main/webapp/Tree/Tree.jsp 2008-06-24 10:44:09 UTC (rev 9171)
@@ -167,6 +167,7 @@
</rich:tree>
<rich:spacer></rich:spacer>
+ <!-- Drag and Drop API for rich:tree component -->
<div style="FONT-WEIGHT: bold;">Drag & Drop example</div>
<br />
<h:form>
@@ -186,7 +187,7 @@
<rich:tree id="leftTree" style="width:300px"
nodeSelectListener="#{treeDndBean.processLSelection}"
- reRender="selectedNodeL" ajaxSubmitSelection="false"
+ reRender="selectedNodeL" ajaxSubmitSelection="true"
switchType="client" value="#{treeDndBean.treeNodeLeft}"
changeExpandListener="#{treeDndBean.onExpand}"
binding="#{treeDndBean.leftTree}"
@@ -196,9 +197,9 @@
dropListener="#{treeDndBean.onDrop}"
dragListener="#{treeDndBean.onDrag}" dragIndicator="treeIndicator"
acceptedTypes="treeNode" dragType="treeNode" rowKeyVar="key"
- var="item">
+ var="item" >
- <rich:dndParam name="treeParam" value="leftTree" />
+ <rich:dndParam name="treeParam" value="leftTree" />
</rich:tree>
</h:panelGroup>
@@ -211,7 +212,7 @@
<rich:tree id="rightTree" style="width:300px"
nodeSelectListener="#{treeDndBean.processRSelection}"
- reRender="selectedNodeR" ajaxSubmitSelection="false"
+ reRender="selectedNodeR,rightContainer" ajaxSubmitSelection="true"
switchType="client" value="#{treeDndBean.treeNodeRight}"
changeExpandListener="#{treeDndBean.onExpand}"
binding="#{treeDndBean.rightTree}"
15 years, 10 months