Java tutorial
/* * 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); } }); } }); } }