package manuelbarzi.wicket.flash;

import org.apache.wicket.Component;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.transformer.AbstractTransformerBehavior;

/**
 * simple & rude flash container using transformer :-)
 * 
 * example:
 * 
 * + html:
 * 
 * <object wicket:id="flash" />
 * 
 * + java:
 * 
 * Flash flash = new Flash("flash");
 * flash.setMovie("http://www.notcelebrity.co.uk/flashcontent/flashHeader.swf?thename=Wicket");
 * flash.setWidth("425");
 * flash.setHeight("280");
 * flash.setQuality("high");
 * flash.setWmode("transparent");
 * add(flash);
 *  
 * + output:
 * 
 * <object width="425" height="280">
 * 	<param name="movie" value="http://www.notcelebrity.co.uk/flashcontent/flashHeader.swf?thename=Wicket" />
 * 	<param name="wmode" value="transparent" />
 * 	<param name="quality" value="high" />
 * 	<embed src="http://www.notcelebrity.co.uk/flashcontent/flashHeader.swf?thename=Wicket" type="application/x-shockwave-flash" wmode="transparent" quality="high" width="425" height="280" />
 * </object>
 * 
 * @author manuelbarzi
 *
 */
public class Flash extends WebMarkupContainer {

	private static final long serialVersionUID = 1L;

	private String movie;
	private String wmode;
	private String width;
	private String height;
	private String quality;

	public Flash(String id) {
		super(id);
		add(new AbstractTransformerBehavior() {

			private static final long serialVersionUID = 1L;

			@Override
			public CharSequence transform(Component component, CharSequence output) throws Exception {
				StringBuilder sb = new StringBuilder();
				sb.append("<object");
				if (width != null) {
					appendParamAttribute(sb, "width", width);
				}
				if (height != null) {
					appendParamAttribute(sb, "height", height);
				}
				sb.append(">");
				if (movie != null) {
					appendParamTag(sb, "movie", movie);
				}
				if (quality != null) {
					appendParamTag(sb, "quality", quality);
				}
				if (wmode != null) {
					appendParamTag(sb, "wmode", wmode);
				}
				sb.append("<embed");
				if (width != null) {
					appendParamAttribute(sb, "width", width);
				}
				if (height != null) {
					appendParamAttribute(sb, "height", height);
				}
				if (movie != null) {
					appendParamAttribute(sb, "src", movie);
				}
				if (quality != null) {
					appendParamAttribute(sb, "quality", quality);
				}
				if (wmode != null) {
					appendParamAttribute(sb, "wmode", wmode);
				}
				appendParamAttribute(sb, "type", "application/x-shockwave-flash");
				sb.append(" />");
				sb.append("</object>");
				return sb;
			}
			
			private void appendParamAttribute(StringBuilder sb, String name, String value) {
				sb.append(" ");
				sb.append(name);
				sb.append("=\"");
				sb.append(value);
				sb.append("\"");
			}
			
			private void appendParamTag(StringBuilder sb, String name, String value) {
				sb.append("<param");
				appendParamAttribute(sb, "name", name);
				appendParamAttribute(sb, "value", value);
				sb.append(" />");
			}
			
		});
	}

	
	public void setMovie(String value) {
		movie = value;
	}
	
	public void setWmode(String value) {
		wmode = value;
	}
	
	public void setWidth(String value) {
		width = value;
	}
	
	public void setHeight(String value) {
		height = value;
	}
	
	public void setQuality(String value) {
		quality = value;
	}

}