/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.wicket.ajax.attributes; import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; /** * {@code CallbackParameter} is a specification of a parameter that is used in an * {@linkplain AbstractDefaultAjaxBehavior#getCallbackFunction(CallbackParameter...) AJAX callback * function}. It specifies if and how the parameter is added to the function declaration, if and how * it is added to the AJAX callback and what code to use to generate the contents. * * @author papegaaij */ public class CallbackParameter { /** * Add a parameter to the function declaration. This parameter will not be passed to the AJAX * callback. For example, the following code: * * <pre> * {@literal * getCallbackFunction(context("event"), context("ui")); * } * </pre> * * generates a function with two parameters, like <code>function(event, ui) {...}</code>. * * @param name * @return The parameter */ public static CallbackParameter context(String name) { return new CallbackParameter(name, null, null); } /** * Add a parameter to the function declaration that is also passed to the AJAX callback. For * example, the following code: * * <pre> * {@literal * getCallbackFunction(explicit("param")); * } * </pre> * * generates a function with one parameter, like <code>function(param) {...}</code> where * 'param' is passed literally as extra parameter to the AJAX callback. * * @param name * @return The parameter */ public static CallbackParameter explicit(String name) { return new CallbackParameter(name, name, name); } /** * Add a parameter to the AJAX callback that is resolved inside the function, it will not be * added as function parameter. For example, the following code: * * <pre> * {@literal * getCallbackFunction(resolved("param", "global.substring(0, 3)")); * } * </pre> * * generates a function without parameters, like <code>function() {...}</code> where the first 3 * characters of the global variable 'global' are passed as extra parameter to the AJAX callback * under the name 'param'. * * @param name * @param code * @return The parameter */ public static CallbackParameter resolved(String name, String code) { return new CallbackParameter(null, name, code); } /** * Add a parameter to the function declaration that is also passed to the AJAX callback, but * converted. For example, the following code: * * <pre> * {@literal * getCallbackFunction(converted("param", "param.substring(0, 3)")); * } * </pre> * * generates a function with one parameter, like <code>function(param) {...}</code> where the * first 3 characters of 'param' are passed as extra parameter to the AJAX callback. * * @param name * @param code * @return The parameter */ public static CallbackParameter converted(String name, String code) { return new CallbackParameter(name, name, code); } private String functionParameterName; private String ajaxParameterName; private String ajaxParameterCode; private CallbackParameter(String functionParameterName, String ajaxParameterName, String ajaxParameterCode) { this.functionParameterName = functionParameterName; this.ajaxParameterName = ajaxParameterName; this.ajaxParameterCode = ajaxParameterCode; } /** * @return the name of the parameter to add to the function declaration, or null if no parameter * should be added. */ public String getFunctionParameterName() { return functionParameterName; } /** * @return the name of the parameter to add to the AJAX callback, or null if no parameter should * be added. */ public String getAjaxParameterName() { return ajaxParameterName; } /** * @return the javascript code to use to fill the parameter for the AJAX callback. */ public String getAjaxParameterCode() { return ajaxParameterCode; } }