package com.googlecode.tawus.components; import org.apache.tapestry5.BindingConstants; import org.apache.tapestry5.ClientElement; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.MarkupWriter; import org.apache.tapestry5.annotations.Import; import org.apache.tapestry5.annotations.Parameter; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.json.JSONObject; import org.apache.tapestry5.services.javascript.JavaScriptSupport; import com.googlecode.tawus.TawusEvents; /** * A simple form cancel button implementation * */ @Import(library = "cancel-form.js") public class Cancel implements ClientElement { /** * JavaScript id to be used. If id is not supplied, it will be auto-generated */ @Parameter(value = "prop:componentResources.id", defaultPrefix = BindingConstants.LITERAL) private String clientId; /** * Text to be displayed on the button. It is used at the content of the * <button> tag */ @Parameter(value = "Cancel", defaultPrefix = BindingConstants.LITERAL, required = true, allowNull = false) private String value; /** * Zone to update */ @Parameter(defaultPrefix = BindingConstants.LITERAL) private String zone; @Inject private ComponentResources componentResources; @Inject private JavaScriptSupport javaScriptSupport; private String assignedClientId; @Parameter private Object[] context; public String getClientId() { return assignedClientId; } void setupRender() { assignedClientId = javaScriptSupport.allocateClientId(clientId); } boolean beginRender(MarkupWriter writer) { writer.element("button", "type", "button", "id", getClientId()); writer.write(value); writer.end(); addJavaScript(); return false; } private void addJavaScript() { JSONObject params = new JSONObject(); params.put("zone", zone); params.put("elementId", getClientId()); params.put("url", getCancelURL()); javaScriptSupport.addInitializerCall("cancelForm", params); } private String getCancelURL() { return componentResources.createEventLink(TawusEvents.CANCEL, context).toAbsoluteURI(); } }