THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
check: http://teethgrinder.co.uk/open-flash-chart-2/ http://code.google.com/p/ofcj/ http://code.google.com/p/swfobject/
We need a component for loading SWF objects (this is not specific to Open Flash Charts, it can be used for any swf object).
Code Block | ||||
---|---|---|---|---|
| ||||
package com.mycompany.ofc2;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.AbstractBehavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.resources.CompressedResourceReference;
/**
*
*/
public class SWFObject extends AbstractBehavior implements IHeaderContributor {
private static final CompressedResourceReference SWFOBJECT_JS =
new CompressedResourceReference(SWFObject.class, "swfobject-2.1.js");
private static final long serialVersionUID = 1L;
private Map<String, String> parameters = new HashMap<String, String>();
private String version;
private String flashUrl;
private String width;
private String height;
private Component component;
@Override
public void bind(Component component) {
this.component = component;
component.setOutputMarkupId(true);
}
public void renderHead(IHeaderResponse response) {
response.renderJavascriptReference(SWFOBJECT_JS);
final String id = component.getMarkupId();
String parObj = buildDataObject(getParameters());
String attObj = buildDataObject(getVariables());
// embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj)
String js = String.format("swfobject.embedSWF('%s','%s', '%s', '%s', '%s', '%s', %s, %s );",
flashUrl, id, width, height, version, "expressInstall.swf", parObj, attObj);
response.renderJavascript(js, null);
}
/**
* Construct.
* <p/>
* version can be a string in the format of 'majorVersion.minorVersion.revision'.
* An example would be: "6.0.65". Or you can just require the major version, such as "6".
*
* @param flashUrl The url of your swf file.
* @param width width of swf
* @param height height of movie
* @param version Flash version to support
*/
public SWFObject(final String flashUrl, final int width, final int height, final String version) {
this(flashUrl, String.valueOf(width), String.valueOf(height), version);
}
/**
* Construct.
* @param flashUrl URL to load up for swf
* @param width width of swf
* @param height height of movie
* @param version Flash version to support
*/
public SWFObject(final String flashUrl, final String width, final String height, final String version) {
if (flashUrl == null) {
throw new IllegalArgumentException("Argument [flashUrl] cannot be null");
}
this.flashUrl = flashUrl;
this.width = width;
this.height = height;
this.version = version;
}
private String buildDataObject(Map<String,String> data) {
final String quote = "'";
if (data != null && !data.isEmpty()) {
StringBuilder result = new StringBuilder();
result.append("{");
for (Map.Entry<String, String> e : getParameters().entrySet()) {
result.append(quote).append(e.getKey()).append(quote + ":" + quote).append(e.getValue()).append(quote);
}
result.append("}");
return result.toString();
}
return "{}";
}
@Override
public void onComponentTag(final Component component, final ComponentTag tag) {
}
protected Map<String, String> getParameters() {
return parameters;
}
protected Map<String, String> getVariables() {
return Collections.emptyMap();
}
public void addParameter(String name, String value) {
parameters.put(name, value);
}
}
|
Code Block | ||||
---|---|---|---|---|
| ||||
/** * @see <a href="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 = RequestUtils.toAbsolutePath( dataPath.toString() ); swf.setFlashvar( "data-file", data ); swf.setParam( "allowScriptAccess", "sameDomain" ); super.onBeforeRender(); } /** * Actually handle the request */ public void onResourceRequested() { jsonResource.onResourceRequested(); } } |
...