Author: alexsmirnov
Date: 2008-07-07 20:22:48 -0400 (Mon, 07 Jul 2008)
New Revision: 9439
Added:
trunk/extensions/flex/src/main/java/org/richfaces/renderkit/
trunk/extensions/flex/src/main/java/org/richfaces/renderkit/SwfRendererBase.java
trunk/extensions/flex/src/main/resources/org/richfaces/
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/AC_OETags.js
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/index.template.html
trunk/samples/flexSample/src/main/webapp/swf/
Modified:
trunk/extensions/flex/pom.xml
trunk/extensions/flex/src/main/config/component/swf.xml
trunk/extensions/flex/src/main/java/org/richfaces/component/UISwf.java
trunk/extensions/flex/src/main/templates/org/richfaces/ui/htmlSwf.jspx
trunk/samples/flexSample/src/main/webapp/pages/index.jsp
Log:
Create minimal flex component and Hello World sample.
Modified: trunk/extensions/flex/pom.xml
===================================================================
--- trunk/extensions/flex/pom.xml 2008-07-07 22:55:48 UTC (rev 9438)
+++ trunk/extensions/flex/pom.xml 2008-07-08 00:22:48 UTC (rev 9439)
@@ -9,7 +9,7 @@
<groupId>org.richfaces.extensions</groupId>
<artifactId>flex-jsf</artifactId>
<name>Flex and JSF integration library</name>
- <url>https://ajax4jsf.dev.java.net</url>
+ <
url>http://richfaces.org/flex</url>
<properties>
<jsfVersion>1.2</jsfVersion>
</properties>
@@ -55,8 +55,10 @@
</executions>
<configuration>
<library>
- <prefix>org.richfaces.ui</prefix>
+ <prefix>org.richfaces</prefix>
<taglib>
+ <
uri>http://richfaces.org/flex</uri>
+ <displayName>Jsf flex integration tags</displayName>
<shortName>fl</shortName>
</taglib>
</library>
Modified: trunk/extensions/flex/src/main/config/component/swf.xml
===================================================================
--- trunk/extensions/flex/src/main/config/component/swf.xml 2008-07-07 22:55:48 UTC (rev
9438)
+++ trunk/extensions/flex/src/main/config/component/swf.xml 2008-07-08 00:22:48 UTC (rev
9439)
@@ -3,21 +3,21 @@
<components>
<component>
- <name>org.richfaces.ui.Swf</name>
- <family>org.richfaces.ui.Swf</family>
- <classname>org.richfaces.ui.component.html.HtmlSwf</classname>
+ <name>org.richfaces.Swf</name>
+ <family>org.richfaces.Swf</family>
+ <classname>org.richfaces.component.html.HtmlSwf</classname>
<superclass>org.richfaces.component.UISwf</superclass>
<description>
<![CDATA[
]]>
</description>
<renderer generate="true" override="true">
- <name>org.richfaces.ui.SwfRenderer</name>
+ <name>org.richfaces.SwfRenderer</name>
<template>org/richfaces/ui/htmlSwf.jspx</template>
</renderer>
<tag>
<name>swf</name>
- <classname>org.richfaces.ui.taglib.SwfTag</classname>
+ <classname>org.richfaces.taglib.SwfTag</classname>
<superclass>
org.ajax4jsf.webapp.taglib.HtmlComponentTagBase
</superclass>
Modified: trunk/extensions/flex/src/main/java/org/richfaces/component/UISwf.java
===================================================================
--- trunk/extensions/flex/src/main/java/org/richfaces/component/UISwf.java 2008-07-07
22:55:48 UTC (rev 9438)
+++ trunk/extensions/flex/src/main/java/org/richfaces/component/UISwf.java 2008-07-08
00:22:48 UTC (rev 9439)
@@ -16,4 +16,69 @@
public static final String COMPONENT_FAMILY = "org.richfaces.ui.Swf";
+ /**
+ * Get Flex SWF object
+ * @return
+ */
+ public abstract Object getSrc();
+
+ /**
+ * Set Flex SWF object
+ * @param newvalue
+ */
+ public abstract void setSrc(Object newvalue);
+
+
+ /**
+ * Get Flex application name
+ * @return
+ */
+ public abstract String getApplication();
+
+ /**
+ * Set Flex application name
+ * @param newvalue
+ */
+ public abstract void setApplication(String newvalue);
+
+
+ /**
+ * Get player width
+ * @return
+ */
+ public abstract int getWidth();
+
+ /**
+ * Set player width
+ * @param newvalue
+ */
+ public abstract void setWidth(int newvalue);
+
+
+ /**
+ * Get Player height
+ * @return
+ */
+ public abstract int getHeight();
+
+ /**
+ * Set Player height
+ * @param newvalue
+ */
+ public abstract void setHeight(int newvalue);
+
+ /**
+ * Get Background color
+ * @return
+ */
+ public abstract String getBgcolor();
+
+ /**
+ * Set Background color
+ * @param newvalue
+ */
+ public abstract void setBgcolor(String newvalue);
+
+
+
}
Added: trunk/extensions/flex/src/main/java/org/richfaces/renderkit/SwfRendererBase.java
===================================================================
--- trunk/extensions/flex/src/main/java/org/richfaces/renderkit/SwfRendererBase.java
(rev 0)
+++
trunk/extensions/flex/src/main/java/org/richfaces/renderkit/SwfRendererBase.java 2008-07-08
00:22:48 UTC (rev 9439)
@@ -0,0 +1,64 @@
+/**
+ *
+ */
+package org.richfaces.renderkit;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIParameter;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.ajax4jsf.renderkit.AjaxComponentRendererBase;
+import org.ajax4jsf.resource.InternetResource;
+import org.richfaces.component.UISwf;
+
+/**
+ * @author asmirnov
+ *
+ */
+public abstract class SwfRendererBase extends AjaxComponentRendererBase {
+
+ public String getSwfUri(FacesContext context, UISwf component) {
+ if(null == component){
+ throw new NullPointerException();
+ }
+ Object src = component.getSrc();
+ if(null == src){
+ throw new NullPointerException();
+ }
+ if (src instanceof InternetResource) {
+ InternetResource resource = (InternetResource) src;
+ return resource.getUri(context, null);
+ } else {
+ return context.getApplication().getViewHandler().getResourceURL(context,
src.toString());
+ }
+ }
+
+ public String getScriptParams(FacesContext context, UISwf component) {
+ StringBuilder params = new StringBuilder();
+ for (UIComponent child : component.getChildren()) {
+ if (child instanceof UIParameter) {
+ UIParameter parameter = (UIParameter) child;
+ params.append(",\"").append(parameter.getName()).append("\",\"").append(parameter.getValue()).append("\"\n");
+ }
+ }
+ return params.toString();
+ }
+
+ public void encodeObjectParams(FacesContext context, UISwf component) throws IOException
{
+ ResponseWriter responseWriter = context.getResponseWriter();
+ for (UIComponent child : component.getChildren()) {
+ if (child instanceof UIParameter) {
+ UIParameter parameter = (UIParameter) child;
+ responseWriter.startElement("param", parameter);
+ responseWriter.writeAttribute("name", parameter.getName(),
"name");
+ responseWriter.writeAttribute("value", parameter.getValue(),
"value");
+ responseWriter.endElement("param");
+
+ }
+ }
+ }
+
+}
Property changes on:
trunk/extensions/flex/src/main/java/org/richfaces/renderkit/SwfRendererBase.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/AC_OETags.js
===================================================================
--- trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/AC_OETags.js
(rev 0)
+++
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/AC_OETags.js 2008-07-08
00:22:48 UTC (rev 9439)
@@ -0,0 +1,276 @@
+// Flash Player Version Detection - Rev 1.6
+// Detect Client Browser type
+// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
+var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
+var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true :
false;
+var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
+
+function ControlVersion()
+{
+ var version;
+ var axo;
+ var e;
+
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the
registry
+
+ try {
+ // version will be set for 7.X or greater players
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 6.X players only
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+
+ // installed player is some revision of 6.0
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
+ // so we have to be careful.
+
+ // default to the first public version
+ version = "WIN 6,0,21,0";
+
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
+ axo.AllowScriptAccess = "always";
+
+ // safe to call for 6.0r47 or greater
+ version = axo.GetVariable("$version");
+
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 4.X or 5.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 3.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = "WIN 3,0,18,0";
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 2.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ version = "WIN 2,0,0,11";
+ } catch (e) {
+ version = -1;
+ }
+ }
+
+ return version;
+}
+
+// JavaScript helper required to detect Flash Player PlugIn version information
+function GetSwfVer(){
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
+ var flashVer = -1;
+
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
+ if (navigator.plugins["Shockwave Flash 2.0"] ||
navigator.plugins["Shockwave Flash"]) {
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" :
"";
+ var flashDescription = navigator.plugins["Shockwave Flash" +
swVer2].description;
+ var descArray = flashDescription.split(" ");
+ var tempArrayMajor = descArray[2].split(".");
+ var versionMajor = tempArrayMajor[0];
+ var versionMinor = tempArrayMajor[1];
+ var versionRevision = descArray[3];
+ if (versionRevision == "") {
+ versionRevision = descArray[4];
+ }
+ if (versionRevision[0] == "d") {
+ versionRevision = versionRevision.substring(1);
+ } else if (versionRevision[0] == "r") {
+ versionRevision = versionRevision.substring(1);
+ if (versionRevision.indexOf("d") > 0) {
+ versionRevision = versionRevision.substring(0,
versionRevision.indexOf("d"));
+ }
+ }
+ var flashVer = versionMajor + "." + versionMinor + "." +
versionRevision;
+ }
+ }
+ // MSN/WebTV 2.6 supports Flash 4
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1)
flashVer = 4;
+ // WebTV 2.5 supports Flash 3
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1)
flashVer = 3;
+ // older WebTV supports Flash 2
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer =
2;
+ else if ( isIE && isWin && !isOpera ) {
+ flashVer = ControlVersion();
+ }
+ return flashVer;
+}
+
+// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or
greater is available
+function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
+{
+ versionStr = GetSwfVer();
+ if (versionStr == -1 ) {
+ return false;
+ } else if (versionStr != 0) {
+ if(isIE && isWin && !isOpera) {
+ // Given "WIN 2,0,0,11"
+ tempArray = versionStr.split(" "); // ["WIN",
"2,0,0,11"]
+ tempString = tempArray[1]; // "2,0,0,11"
+ versionArray = tempString.split(","); // ['2', '0',
'0', '11']
+ } else {
+ versionArray = versionStr.split(".");
+ }
+ var versionMajor = versionArray[0];
+ var versionMinor = versionArray[1];
+ var versionRevision = versionArray[2];
+
+ // is the major.revision >= requested major.revision AND the minor version
>= requested minor
+ if (versionMajor > parseFloat(reqMajorVer)) {
+ return true;
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
+ if (versionMinor > parseFloat(reqMinorVer))
+ return true;
+ else if (versionMinor == parseFloat(reqMinorVer)) {
+ if (versionRevision >= parseFloat(reqRevision))
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+function AC_AddExtension(src, ext)
+{
+// if (src.indexOf('?') != -1)
+// return src.replace(/\?/, ext+'?');
+// else
+ return src ; //+ ext;
+}
+
+function AC_Generateobj(objAttrs, params, embedAttrs)
+{
+ var str = '';
+ if (isIE && isWin && !isOpera)
+ {
+ str += '<object ';
+ for (var i in objAttrs)
+ str += i + '="' + objAttrs[i] + '" ';
+ str += '>';
+ for (var i in params)
+ str += '<param name="' + i + '" value="' +
params[i] + '" /> ';
+ str += '</object>';
+ } else {
+ str += '<embed ';
+ for (var i in embedAttrs)
+ str += i + '="' + embedAttrs[i] + '" ';
+ str += '> </embed>';
+ }
+
+ document.write(str);
+}
+
+function AC_FL_RunContent(){
+ var ret =
+ AC_GetArgs
+ ( arguments, ".swf", "movie",
"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ , "application/x-shockwave-flash"
+ );
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
+}
+
+function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
+ var ret = new Object();
+ ret.embedAttrs = new Object();
+ ret.params = new Object();
+ ret.objAttrs = new Object();
+ for (var i=0; i < args.length; i=i+2){
+ var currArg = args[i].toLowerCase();
+
+ switch (currArg){
+ case "classid":
+ break;
+ case "pluginspage":
+ ret.embedAttrs[args[i]] = args[i+1];
+ break;
+ case "src":
+ case "movie":
+ args[i+1] = AC_AddExtension(args[i+1], ext);
+ ret.embedAttrs["src"] = args[i+1];
+ ret.params[srcParamName] = args[i+1];
+ break;
+ case "onafterupdate":
+ case "onbeforeupdate":
+ case "onblur":
+ case "oncellchange":
+ case "onclick":
+ case "ondblClick":
+ case "ondrag":
+ case "ondragend":
+ case "ondragenter":
+ case "ondragleave":
+ case "ondragover":
+ case "ondrop":
+ case "onfinish":
+ case "onfocus":
+ case "onhelp":
+ case "onmousedown":
+ case "onmouseup":
+ case "onmouseover":
+ case "onmousemove":
+ case "onmouseout":
+ case "onkeypress":
+ case "onkeydown":
+ case "onkeyup":
+ case "onload":
+ case "onlosecapture":
+ case "onpropertychange":
+ case "onreadystatechange":
+ case "onrowsdelete":
+ case "onrowenter":
+ case "onrowexit":
+ case "onrowsinserted":
+ case "onstart":
+ case "onscroll":
+ case "onbeforeeditfocus":
+ case "onactivate":
+ case "onbeforedeactivate":
+ case "ondeactivate":
+ case "type":
+ case "codebase":
+ ret.objAttrs[args[i]] = args[i+1];
+ break;
+ case "id":
+ case "width":
+ case "height":
+ case "align":
+ case "vspace":
+ case "hspace":
+ case "class":
+ case "title":
+ case "accesskey":
+ case "name":
+ case "tabindex":
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
+ break;
+ default:
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
+ }
+ }
+ ret.objAttrs["classid"] = classid;
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
+ return ret;
+}
+
+
Property changes on:
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/AC_OETags.js
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ text/plain
Added:
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/index.template.html
===================================================================
---
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/index.template.html
(rev 0)
+++
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/index.template.html 2008-07-08
00:22:48 UTC (rev 9439)
@@ -0,0 +1,61 @@
+<!-- saved from url=(0014)about:internet -->
+<html lang="en">
+
+<!--
+Smart developers always View Source.
+
+This application was built using Adobe Flex, an open source framework
+for building rich Internet applications that get delivered via the
+Flash Player or to desktops via Adobe AIR.
+
+Learn more about Flex at
http://flex.org
+// -->
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"
/>
+<title>${title}</title>
+<script src="AC_OETags.js"
language="javascript"></script>
+<style>
+body { margin: 0px; overflow:hidden }
+</style>
+</head>
+
+<body scroll='no'>
+<script language="JavaScript" type="text/javascript">
+<!--
+ AC_FL_RunContent(
+ "src", "${swf}",
+ "width", "${width}",
+ "height", "${height}",
+ "align", "middle",
+ "id", "${application}",
+ "quality", "high",
+ "bgcolor", "${bgcolor}",
+ "name", "${application}",
+ "allowScriptAccess","sameDomain",
+ "type", "application/x-shockwave-flash",
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
+ );
+// -->
+</script>
+<noscript>
+ <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ id="${application}" width="${width}" height="${height}"
+
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/s...
+ <param name="movie" value="${swf}.swf" />
+ <param name="quality" value="high" />
+ <param name="bgcolor" value="${bgcolor}" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <embed src="${swf}.swf" quality="high"
bgcolor="${bgcolor}"
+ width="${width}" height="${height}"
name="${application}" align="middle"
+ play="true"
+ loop="false"
+ quality="high"
+ allowScriptAccess="sameDomain"
+ type="application/x-shockwave-flash"
+
pluginspage="http://www.adobe.com/go/getflashplayer">
+ </embed>
+ </object>
+</noscript>
+</body>
+</html>
Property changes on:
trunk/extensions/flex/src/main/resources/org/richfaces/renderkit/html/index.template.html
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ text/plain
Modified: trunk/extensions/flex/src/main/templates/org/richfaces/ui/htmlSwf.jspx
===================================================================
--- trunk/extensions/flex/src/main/templates/org/richfaces/ui/htmlSwf.jspx 2008-07-07
22:55:48 UTC (rev 9438)
+++ trunk/extensions/flex/src/main/templates/org/richfaces/ui/htmlSwf.jspx 2008-07-08
00:22:48 UTC (rev 9439)
@@ -5,13 +5,47 @@
xmlns:ui="
http://ajax4jsf.org/cdk/ui"
xmlns:u="
http://ajax4jsf.org/cdk/u"
xmlns:x="
http://ajax4jsf.org/cdk/x"
- class="org.richfaces.ui.renderkit.html.SwfRenderer"
- baseclass="org.ajax4jsf.renderkit.AjaxComponentRendererBase"
+ xmlns:h="
http://ajax4jsf.org/cdk/h"
+ class="org.richfaces.renderkit.html.SwfRenderer"
+ baseclass="org.richfaces.renderkit.SwfRendererBase"
component="org.richfaces.component.UISwf"
+ <h:scripts>/org/richfaces/renderkit/html/AC_OETags.js</h:scripts>
<f:clientid var="clientId"/>
- <div id="#{clientId}"
- x:passThruWithExclusions="value,name,type,id"
- >
- </div>
+<script language="JavaScript" type="text/javascript">
+ AC_FL_RunContent(
+ "src", "#{this:getSwfUri(context, component)}",
+ "width", "#{component.width}",
+ "height", "#{component.height}",
+ "align", "middle",
+ "id", "#{component.application}",
+ "quality", "high",
+ "bgcolor", "#{component.bgcolor}",
+ "name", "#{component.application}",
+ "allowScriptAccess","sameDomain",
+ "type", "application/x-shockwave-flash",
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
+ #{this:getScriptParams(context,component)}
+ );
+</script>
+<noscript>
+ <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ id="#{component.application}" width="#{component.width}"
height="#{component.height}"
+
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/s...
+ <param name="movie" value="#{this:getSwfUri(context,
component)}" />
+ <param name="quality" value="high" />
+ <param name="bgcolor" value="#{component.bgcolor}" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <f:call name="encodeObjectParams" />
+ <embed src="#{this:getSwfUri(context, component)}"
bgcolor="#{component.bgcolor}"
+ width="#{component.width}" height="#{component.height}"
name="#{component.application}" align="middle"
+ play="true"
+ loop="false"
+ quality="high"
+ allowScriptAccess="sameDomain"
+ type="application/x-shockwave-flash"
+
pluginspage="http://www.adobe.com/go/getflashplayer">
+ </embed>
+ </object>
+</noscript>
</f:root>
\ No newline at end of file
Modified: trunk/samples/flexSample/src/main/webapp/pages/index.jsp
===================================================================
--- trunk/samples/flexSample/src/main/webapp/pages/index.jsp 2008-07-07 22:55:48 UTC (rev
9438)
+++ trunk/samples/flexSample/src/main/webapp/pages/index.jsp 2008-07-08 00:22:48 UTC (rev
9439)
@@ -1,12 +1,16 @@
-<%@ taglib
uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib
uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib
uri="http://java.sun.com/jsf/core" prefix="f"%>
+<%@ taglib
uri="http://richfaces.org/flex" prefix="fl"%>
<html>
- <head>
- <title></title>
- </head>
- <body>
- <f:view>
-
- </f:view>
- </body>
-</html>
+<head>
+<title>Hello world Flex sample</title>
+</head>
+<body>
+<f:view>
+ <fl:swf src="/swf/helloworld.swf" application="HelloWorld"
bgcolor="#FFFFFF"
+ width="100" height="80">
+ <f:param name="text" value="Hello World"></f:param>
+ </fl:swf>
+</f:view>
+</body>
+</html>