/*
* Copyright 2009 Richard Nichols.
*
* 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.
* under the License.
*/
package com.visural.wicket.examples.submitters;
import com.visural.wicket.aturl.At;
import com.visural.wicket.component.submitters.IndicateModalSubmitLink;
import com.visural.wicket.component.submitters.IndicateRefreshAjaxLink;
import com.visural.wicket.component.submitters.IndicateRefreshAjaxSubmitLink;
import com.visural.wicket.examples.BasePage;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
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.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.PropertyModel;
/**
* @version $Id: SubmittersPage.java 119 2010-02-23 12:03:28Z tibes80@gmail.com $
* @author Richard Nichols
*/
@At(url="/submitters")
public class SubmittersPage extends BasePage {
public SubmittersPage() {
add(new SubmitForm("calcForm"));
}
class SubmitForm extends Form {
TextField<Integer> x;
IntHolder xm = new IntHolder();
TextField<Integer> y;
IntHolder ym = new IntHolder();
Label answerText;
Integer answer = null;
FeedbackPanel feedback;
public SubmitForm(String id) {
super(id);
add((feedback = new FeedbackPanel("feedback")).setOutputMarkupId(true));
add((x = new TextField<Integer>("numx", new PropertyModel(xm, "num"))).setRequired(true).setOutputMarkupId(true));
add((y = new TextField<Integer>("numy", new PropertyModel(ym, "num"))).setRequired(true).setOutputMarkupId(true));
add((answerText = new Label("answer", new AbstractReadOnlyModel() {
@Override
public Object getObject() {
return (answer == null ? "?" : answer+"");
}
})).setOutputMarkupId(true));
add(new IndicateRefreshAjaxSubmitLink("refreshingAjax") {
@Override
protected Collection<? extends Component> getIndicateRefreshContainers() {
return Arrays.asList(answerText);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.addComponent(feedback);
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.addComponent(answerText);
target.addComponent(feedback);
}
});
add(new IndicateRefreshAjaxLink("random") {
@Override
protected Collection<? extends Component> getIndicateRefreshContainers() {
return Arrays.asList(x, y, answerText);
}
@Override
public void onClick(AjaxRequestTarget target) {
xm.setNum((int)(Math.random()*200d-100d));
ym.setNum((int)(Math.random()*200d-100d));
answer = null;
target.addComponent(x);
target.addComponent(y);
target.addComponent(answerText);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
}
});
add(new IndicateModalSubmitLink("modal"));
}
@Override
protected void onSubmit() {
try {
calculate();
Thread.sleep(3000);
} catch (InterruptedException ex) {
}
}
private void calculate() {
if (x.getModelObject() != null && y.getModelObject() != null) {
answer = x.getModelObject() * y.getModelObject();
} else {
answer = null;
}
}
}
@Override
public String getPageTitle() {
return "Submitters and Links";
}
class IntHolder implements Serializable {
Integer num = (int)(Math.random()*200d-100d);
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
}