package er.extensions.components; import com.webobjects.appserver.WOActionResults; import com.webobjects.appserver.WOContext; import com.webobjects.appserver.WORequest; import er.extensions.foundation.ERXStringUtilities; /** * Embeds a flash movie. You can add to the FlashVars by adding bindings with * "?" for simple values and "??" for actions on your page (which should return a WOActionResults). * @author ak * * @binding movieUrl optional, the full url of the movie file's location * @binding movieName optional, the filename of the movie relative to your WebServerResources (e.g. movies/mymovie.swf). Must provide a framework binding when using movieName * @binding framework optional, the framework in which the file specified by movieName resides. Must provide a movieName when using framework * @binding ? binding for simple FlashVars * @binding ?? binding to tie actions on your page to FlashVars (should return a WOActionResults) * */ public class ERXFlashMovie extends ERXStatelessComponent { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; public ERXFlashMovie(WOContext context) { super(context); } public String flashVars() { String result = ""; for (String key : bindingKeys()) { if(key.startsWith("?")) { String flashKey = key.substring(1); Object value = null; if(key.startsWith("??")) { String url = context().componentActionURL(); url = ERXStringUtilities.keyPathWithoutLastProperty(url); flashKey = key.substring(2); //ak: flag for keys containing "." like JWPlayer value = url + ".@" + flashKey; } else { value = valueForBinding(key); } if(value != null) { result += ERXStringUtilities.urlEncode(flashKey) + "=" + ERXStringUtilities.urlEncode(value.toString()) + "&"; } } } return result.length() == 0 ? null : result; } @Override public WOActionResults invokeAction(WORequest request, WOContext context) { WOActionResults result = null; String url = context.senderID(); if(url.startsWith(context.elementID() + ".@")) { String last = context.senderID().substring(context.elementID().length()+2); result = (WOActionResults) valueForBinding("??" + last); } else { result = super.invokeAction(request, context); } return result; } public String movieUrl() { String movieUrl = stringValueForBinding("movieUrl"); if(movieUrl == null) { String name = stringValueForBinding("movieName"); String framework = stringValueForBinding("framework"); movieUrl = application().resourceManager().urlForResourceNamed(name, framework, context().request().browserLanguages(), context().request()); } return movieUrl; } }