package org.springmodules.xt.examples.ajax;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.springmodules.template.TemplateResolver;
import org.springmodules.xt.ajax.AbstractAjaxHandler;
import org.springmodules.xt.ajax.AjaxAction;
import org.springmodules.xt.ajax.AjaxActionEvent;
import org.springmodules.xt.ajax.AjaxResponse;
import org.springmodules.xt.ajax.AjaxResponseImpl;
import org.springmodules.xt.ajax.action.AbstractExecuteJavascriptAction;
import org.springmodules.xt.ajax.action.AppendAsFirstContentAction;
import org.springmodules.xt.ajax.action.AppendContentAction;
import org.springmodules.xt.ajax.action.ExecuteJavascriptFunctionAction;
import org.springmodules.xt.ajax.action.InsertContentAfterAction;
import org.springmodules.xt.ajax.action.InsertContentBeforeAction;
import org.springmodules.xt.ajax.action.RemoveContentAction;
import org.springmodules.xt.ajax.action.RemoveElementAction;
import org.springmodules.xt.ajax.action.ReplaceContentAction;
import org.springmodules.xt.ajax.action.ReplaceElementAction;
import org.springmodules.xt.ajax.action.SetAttributeAction;
import org.springmodules.xt.ajax.action.matcher.SelectorMatcher;
import org.springmodules.xt.ajax.action.prototype.HideElement;
import org.springmodules.xt.ajax.action.prototype.ShowElement;
import org.springmodules.xt.ajax.action.prototype.scriptaculous.AddDroppable;
import org.springmodules.xt.ajax.action.prototype.scriptaculous.Draggable;
import org.springmodules.xt.ajax.action.prototype.scriptaculous.Effect;
import org.springmodules.xt.ajax.component.InputField;
import org.springmodules.xt.ajax.component.SimpleText;
import org.springmodules.xt.ajax.component.TaggedText;
import org.springmodules.xt.ajax.component.dynamic.JspComponent;
import org.springmodules.xt.ajax.component.dynamic.TemplateComponent;
/**
* Ajax handler for testing actions.
*
* @author Sergio Bossa
*/
public class TestActionsHandler extends AbstractAjaxHandler {
private TemplateResolver velocityViewResolver;
public AjaxResponse appendNumber(AjaxActionEvent event) {
String number = new Integer((new Random()).nextInt()).toString();
// Create the text component holding the number:
SimpleText text = new SimpleText(number + "   ");
// Create an ajax action for appending it:
AppendContentAction action = new AppendContentAction("num", text);
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse replaceNumbers(AjaxActionEvent event) {
String number = new Integer((new Random()).nextInt()).toString();
// Create the text component holding the number:
SimpleText text = new SimpleText(number);
// Create an ajax action for replacing all previously set numbers:
ReplaceContentAction action = new ReplaceContentAction("num", text);
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse removeNumbers(AjaxActionEvent event) {
// Create an ajax action for removing all numbers:
RemoveContentAction action = new RemoveContentAction("num");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse replaceElement(AjaxActionEvent event) {
// Create the new input field:
InputField field = new InputField("replaced", "Replaced", InputField.InputType.TEXT);
// Create an ajax action for replacing the old element:
ReplaceElementAction action = new ReplaceElementAction("toReplace", field);
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse removeElement(AjaxActionEvent event) {
// Create an ajax action for removing the element:
RemoveElementAction action = new RemoveElementAction("toRemove");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse insertAfter(AjaxActionEvent event) {
// Create an ajax action for inserting content after:
InsertContentAfterAction action = new InsertContentAfterAction("toInsertAfter", new TaggedText(", Spring Modules user", TaggedText.Tag.SPAN));
// Disable the event:
SetAttributeAction disableAction = new SetAttributeAction("insertAfterButton", "onclick", "");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the actions:
response.addAction(action);
response.addAction(disableAction);
return response;
}
public AjaxResponse insertBefore(AjaxActionEvent event) {
// Create an ajax action for inserting content before:
InsertContentBeforeAction action = new InsertContentBeforeAction("toInsertBefore", new TaggedText("Hello, ", TaggedText.Tag.SPAN));
// Disable the event:
SetAttributeAction disableAction = new SetAttributeAction("insertBeforeButton", "onclick", "");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the actions:
response.addAction(action);
response.addAction(disableAction);
return response;
}
public AjaxResponse appendAsFirst(AjaxActionEvent event) {
// Create an ajax action for appending content as first child:
AppendAsFirstContentAction action = new AppendAsFirstContentAction("toAppendAsFirst", new TaggedText("Hello, ", TaggedText.Tag.SPAN));
// Disable the event:
SetAttributeAction disableAction = new SetAttributeAction("appendAsFirstButton", "onclick", "");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the actions:
response.addAction(action);
response.addAction(disableAction);
return response;
}
public AjaxResponse includeJsp(AjaxActionEvent event) {
// Create the component for including jsp content:
event.getHttpRequest().setAttribute("jspVar2", event.getParameters().get("jspVar2"));
JspComponent jsp = new JspComponent(event.getHttpRequest(), "/includes/include.jsp");
// Create an ajax action for appending it:
AppendContentAction action = new AppendContentAction("jsp", jsp);
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse includeVelocity(AjaxActionEvent event) {
// Create the component for including velocity content:
TemplateComponent velocity = new TemplateComponent(this.velocityViewResolver, "include");
Map model = new HashMap();
model.put("velocity", "Velocity");
velocity.setTemplateModel(model);
// Create an ajax action for appending it:
AppendContentAction action = new AppendContentAction("velocity", velocity);
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse executeFunction(AjaxActionEvent event) {
Map<String, Object> options = new HashMap<String, Object>();
options.put("message", "Greetings!");
// Create an ajax action for executing a Javascript function:
ExecuteJavascriptFunctionAction action = new ExecuteJavascriptFunctionAction("showAlert", options);
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse showElement(AjaxActionEvent event) {
// Create an ajax action for showing an element:
ShowElement action = new ShowElement("toShow");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse hideElement(AjaxActionEvent event) {
// Create an ajax action for hiding an element:
HideElement action = new HideElement("toHide");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse highlightElement(AjaxActionEvent event) {
// Create an ajax action for highlighting an element:
Effect action = new Effect("Highlight", "toApplyEffect");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse puffElement(AjaxActionEvent event) {
// Create an ajax action for making an element puff:
Effect action = new Effect("Puff", "toApplyEffect");
action.addOption("duration", "3");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse pulsateElement(AjaxActionEvent event) {
// Create an ajax action for making pulsate an element:
Effect action = new Effect("Pulsate", "toApplyEffect");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse shrinkElement(AjaxActionEvent event) {
// Create an ajax action for shrinking an element:
Effect action = new Effect("Shrink", "toApplyEffect");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse growElement(AjaxActionEvent event) {
// Create an ajax action for making grow an element:
Effect action = new Effect("Grow", "toApplyEffect");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse enableDnD(AjaxActionEvent event) {
// Make the draggable:
Draggable action1 = new Draggable("draggable");
action1.addOption("revert", true);
// Add the droppable:
AddDroppable action2 = new AddDroppable("droppable");
action2.addOption("onDrop", "function(draggable, droppable) { showAlertOnDrop(draggable, droppable); }");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the actions:
response.addAction(action1);
response.addAction(action2);
return response;
}
public AjaxResponse changeColor(AjaxActionEvent event) {
// CSS Selector matcher for selecting list item elements descending by the element with changeColorDataRow id:
SelectorMatcher matcher = new SelectorMatcher(Arrays.asList("#changeColorDataRow li"));
// Action for changing the style attribute to matching elements:
SetAttributeAction action = new SetAttributeAction(matcher, "style", "color : red");
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the actions:
response.addAction(action);
return response;
}
public AjaxResponse testErrorHandler(AjaxActionEvent event) {
AjaxAction action = new AbstractExecuteJavascriptAction() {
protected String getJavascript() {
return "throw {'message' : 'This is a javascript error!'};";
}
};
// Create a concrete ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the actions:
response.addAction(action);
return response;
}
public void setVelocityViewResolver(TemplateResolver velocityViewResolver) {
this.velocityViewResolver = velocityViewResolver;
}
}