|
Page Edited :
WICKET :
Open Flash Chart and Wicket
Open Flash Chart and Wicket has been edited by Ryan McKinley (Dec 05, 2008). Content:Here is a starter to use Open Flash Charts and Wicket: /** * @see <a href="" class="code-quote">"http://code.google.com/p/swfobject/">SWFObject</a> */ public class OpenFlashChart extends Panel implements IResourceListener { static final ResourceReference SWF = new ResourceReference( OpenFlashChart.class, "open-flash-chart.swf" ); final WebResource jsonResource; final SWFObject swf; final IModel<Chart> chart; public OpenFlashChart(final String id, final IModel<Chart> chart, final int width, final int height) { this( id, chart, width+"", height+"" ); } public OpenFlashChart(final String id, final IModel<Chart> chart, final String width, final String height) { super(id); this.chart = chart; final IResourceStream json = new AbstractStringResourceStream( "text/plain") { @Override public String getString() { return chart.getObject().toString(); } }; jsonResource = new WebResource() { @Override public IResourceStream getResourceStream() { return json; } }; jsonResource.setCacheable(false); String swfURL = RequestUtils.toAbsolutePath( urlFor( SWF ).toString() ); swf = new SWFObject( "chart", swfURL, "500", "300" ); add( swf ); } @Override protected void onBeforeRender() { CharSequence dataPath = RequestCycle.get().urlFor(OpenFlashChart.this, IResourceListener.INTERFACE); String data = "" dataPath.toString() ); swf.setFlashvar( "data-file", data ); swf.setParam( "allowScriptAccess", "sameDomain" ); super.onBeforeRender(); } /** * Actually handle the request */ public void onResourceRequested() { jsonResource.onResourceRequested(); } } Here is the general component to show SWF data: /** * @see <a href="" class="code-quote">"http://code.google.com/p/swfobject/">SWFObject</a> */ public final class SWFObject extends Panel { private static int foID = 100; private static final IModel<String> DEFAULT_ALTERNATIVE_CONTENT = new Model<String>( "<h1>Unable to display flash content!</h1>" + "<p>You either have _javascript_ disabled or your browser doesn't support "+ "SWFObject.</p>" + "<p><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>" + "</p>"); private static final String NL = "\r\n"; final Map<String, CharSequence> flashvars = new HashMap<String, CharSequence>(); final Map<String, CharSequence> params = new HashMap<String, CharSequence>(); final String flashObjectID; public SWFObject(String id, final String swfFullURL, final String width, final String height) { this(id, swfFullURL, width, height, "9", null); } public SWFObject(String id, final String swfFullURL, final String width, final String height, final String flashMinimumVersion, Object alternative ) { super(id); flashObjectID = "swf"+(foID++); // Add a header contributor add (HeaderContributor.forJavaScript( new ResourceReference(SWFObject.class, "swfobject.js") ) ); final WebMarkupContainer swf = new WebMarkupContainer("swf"); swf.setOutputMarkupId(true); add(swf); add(new Label("js", new AbstractReadOnlyModel<String>() { @Override public String getObject() { StringBuilder b = new StringBuilder(512); // var so = new SWFObject("/TTT/files/open-flash-chart.swf", "chart", "500", "300", "9", "#FFFFFF"); // so.addVariable("data-file", "/data.json" ); // so.addParam("allowScriptAccess", "sameDomain"); // so.write("my_chart"); b.append("<script type=\"text/_javascript_\">").append(NL) .append("<!--/*--><![CDATA[/*><!--*/").append(NL) .append("var "+flashObjectID+" = new SWFObject(\"") .append(swfFullURL).append("\",\"") .append( "xxxxxxxx\", \"") //swf.getMarkupId()).append("\" .append(width).append("\",\"") .append(height).append("\",\"") .append(flashMinimumVersion).append("\");" ).append( NL ); // // .append( // RequestUtils.toAbsolutePath(urlFor( // new ResourceReference(SWFObject.class, "expressInstall.swf")).toString())).append("\""); // if (!flashvars.isEmpty()) { for( Map.Entry<String, CharSequence> entry : flashvars.entrySet() ) { b.append( flashObjectID ).append( ".addVariable(\"" ) .append( entry.getKey()).append( "\", \"" ) .append( entry.getValue() ).append( "\" );" ).append( NL ); } } if (!params.isEmpty()) { for( Map.Entry<String, CharSequence> entry : params.entrySet() ) { b.append( flashObjectID ).append( ".addParam(\"" ) .append( entry.getKey()).append( "\", \"" ) .append( entry.getValue() ).append( "\" );" ).append( NL ); } } b.append( flashObjectID ).append( ".write( \"" ) .append( swf.getMarkupId()).append("\");").append( NL ); b.append("/*-->]]>*/").append(NL); b.append("</script>"); return b.toString(); } }).setRenderBodyOnly(true).setEscapeModelStrings(false)); Label alternativecontent; if (alternative == null) { alternativecontent = new Label("alternativecontent", DEFAULT_ALTERNATIVE_CONTENT); } else if (alternative instanceof String) { alternativecontent = new Label("alternativecontent", (String) alternative); } else if (alternative instanceof IModel) { alternativecontent = new Label("alternativecontent", (IModel) alternative); } else { alternativecontent = new Label("alternativecontent", ""+ alternative); } alternativecontent.setRenderBodyOnly(true); alternativecontent.setEscapeModelStrings(false); swf.add(alternativecontent); } static String formatMapForJS(Map<String, String> map) { if (map.isEmpty()) { return "{}"; } StringBuilder b = new StringBuilder(64); b.append("{ ").append(NL); Set<String> keySet = map.keySet(); int i = 0; for (String key : keySet) { b.append(key).append(" :\"").append(map.get(key)).append("\" "); if (++i >= keySet.size()) { b.append(NL); } else { b.append(", "); } } b.append(" }" ); return b.toString(); } public void setFlashvar(String name, CharSequence value) { flashvars.put(name, value); } public void unsetFlashvar(String name) { flashvars.remove(name); } public void setParam(String name, CharSequence value) { params.put(name, value); } public void unsetParam(String name) { params.remove(name); } } |
Powered by
Atlassian Confluence
(Version: 2.2.9 Build:#527 Sep 07, 2006)
-
Bug/feature request
Unsubscribe or edit your notifications preferences
Unsubscribe or edit your notifications preferences
