name.marcelomorales.siqisiqi.examples.crud.parameters.ListParameters.java Source code

Java tutorial

Introduction

Here is the source code for name.marcelomorales.siqisiqi.examples.crud.parameters.ListParameters.java

Source

/*
 * Copyright 2013 Marcelo Morales me@marcelomorales.name
 *
 *    Licensed 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 name.marcelomorales.siqisiqi.examples.crud.parameters;

import com.google.common.collect.Lists;
import name.marcelomorales.siqisiqi.parameters.api.ParametersEdit;
import name.marcelomorales.siqisiqi.parameters.entities.Parameter;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.string.Strings;
import org.apache.wicket.validation.validator.StringValidator;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.ExecutionException;

/**
 * @author Marcelo Morales
 *         Date: 9/11/13
 */
public class ListParameters extends WebPage {

    @Inject
    private ParametersEdit parametersEdit;

    private final Component table;

    private final Component queryForm;

    public ListParameters() {

        add(table = new AjaxFallbackDefaultDataTable<>("parameters", new ArrayList<IColumn<Parameter, String>>() {
            {
                add(new PropertyColumn<Parameter, String>(Model.of("Name"), "name"));
            }
        }, new SortableDataProvider<Parameter, String>() {

            @Override
            public Iterator<? extends Parameter> iterator(long first, long count) {
                return parametersEdit.list(null, first, count).iterator();
            }

            @Override
            public long size() {
                return parametersEdit.count(null);
            }

            @Override
            public IModel<Parameter> model(Parameter object) {
                return Model.of(object);
            }
        }, 10).setOutputMarkupId(true));

        add(queryForm = new Form<String>("query param form", Model.of("")) {

            private final Component queryParamValueLabel;

            {
                setOutputMarkupId(true);

                add(queryParamValueLabel = new Label("value", new AbstractReadOnlyModel<Object>() {

                    @Override
                    public Object getObject() {
                        final String formModelObject = getModelObject();
                        if (Strings.isEmpty(formModelObject)) {
                            return "";
                        }

                        try {
                            return parametersEdit.getString(formModelObject);
                        } catch (ExecutionException e) {
                            return "Error: " + e.getMessage();
                        }
                    }
                }).setOutputMarkupId(true));

                add(new TextField<>("param", getModel()).setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {

                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        target.add(queryParamValueLabel);
                    }
                }));
            }
        });

        add(new Form<ArrayList<String>>("set parameter form", new Model<>(Lists.newArrayList("", ""))) {

            {
                setOutputMarkupId(true);

                add(new TextField<>("param name", new PropertyModel<>(getModel(), "0"))
                        .add(StringValidator.maximumLength(200)).setOutputMarkupId(true));
                add(new TextField<>("param value", new PropertyModel<>(getModel(), "1"))
                        .add(StringValidator.maximumLength(2000)).setOutputMarkupId(true));

                add(new AjaxButton("submit", this) {

                    @Override
                    protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                        ArrayList<String> strings = (ArrayList<String>) form.getModelObject();

                        Parameter parameter = new Parameter();
                        parameter.setName(strings.get(0));

                        parametersEdit.customize(parameter, strings.get(1));

                        target.add(form);
                        target.add(queryForm);
                        target.add(table);
                    }
                });

            }
        });
    }
}