All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.fhframework.binding.ActionBinding Maven / Gradle / Ivy

package pl.fhframework.binding;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import lombok.Getter;
import lombok.Setter;
import pl.fhframework.events.ViewEvent;

import java.io.IOException;
import java.util.function.Function;

/**
 * Binding of a form's action
 */
@JsonSerialize(using = ActionBinding.ActionBindingSerializer.class)
@Getter
@Setter
public abstract class ActionBinding {

    public static class ActionBindingSerializer extends StdSerializer {

        public ActionBindingSerializer() {
            super(ActionBinding.class);
        }

        @Override
        public void serialize(ActionBinding actionBinding, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeString(actionBinding.getActionBindingExpression());
        }
    }

    public static final String EVENT_KEYWORD = "EVENT";
    public static final String EVENT_KEYWORD_OLD = "this";

    /**
     * Form's action argument
     */
    @Getter
    @Setter
    public static class ActionArgument {

        public ActionArgument() {
        }

        public ActionArgument(String bindingExpression, Function, Object> valueBinding) {
            this.bindingExpression = bindingExpression;
            this.valueBinding = valueBinding;
        }

        private String bindingExpression;

        // returns argument value, takes supplier of viewEvent as input (supplier is used / event is build only when it is necessary)
        private Function, Object> valueBinding;

        /**
         * Returns value of argument
         * @param eventBuilder builder of event object
         * @return value of argument
         */
        public Object getValue(ViewEvent eventBuilder) {
            return valueBinding.apply(eventBuilder);
        }
    }

    private String actionBindingExpression;

    private String actionName;

    private ActionArgument[] arguments;

    public ActionBinding(String actionBindingExpression) {
        this.actionBindingExpression = actionBindingExpression.trim();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy