package org.richfaces.component.behavior;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ajax4jsf.javascript.ScriptStringBase;
public class AnonymousFunctionCall extends ScriptStringBase {
private StringBuffer body = new StringBuffer();
private List<Object> parameterNames = new ArrayList<Object>();
private List<Object> parameterValues = new ArrayList<Object>();
public AnonymousFunctionCall(Object... parameterNames) {
this.parameterNames.addAll(Arrays.asList(parameterNames));
}
@Override
public void appendScript(Appendable target) throws IOException {
target.append(LEFT_ROUND_BRACKET).append(FUNCTION).append(LEFT_ROUND_BRACKET);
boolean first = true;
for (Object element : parameterNames) {
if (!first) {
target.append(COMMA);
}
target.append(element.toString());
first = false;
}
target.append(RIGHT_ROUND_BRACKET).append(LEFT_CURLY_BRACKET).append(body).append(RIGHT_CURLY_BRACKET)
.append(RIGHT_ROUND_BRACKET).append(LEFT_ROUND_BRACKET);
first = true;
for (Object element : parameterValues) {
if (!first) {
target.append(COMMA);
}
target.append(element.toString());
first = false;
}
target.append(RIGHT_ROUND_BRACKET);
}
public AnonymousFunctionCall addParameterName(Object... param) {
parameterNames.addAll(Arrays.asList(param));
return this;
}
public AnonymousFunctionCall addParameterValue(Object... param) {
parameterValues.addAll(Arrays.asList(param));
return this;
}
public AnonymousFunctionCall addToBody(Object body) {
this.body.append(body);
return this;
}
}