package net.ftlines.blog.cdidemo.web.app;
import javax.inject.Inject;
import net.ftlines.blog.cdidemo.model.Member;
import net.ftlines.blog.cdidemo.model.PositionsRepository;
import net.ftlines.blog.cdidemo.model.Team;
import net.ftlines.blog.cdidemo.web.EntityModel;
import net.ftlines.blog.cdidemo.web.UserAction;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
public class TeamEditPage extends BasePage {
@Inject
UserAction action;
public TeamEditPage(PageParameters params) {
action.begin();
Long teamId = params.get("id").toLong();
IModel<Team> team = new EntityModel<Team>(Team.class, teamId);
setDefaultModel(team);
Form form = new Form("form");
add(form);
form.add(new TextField("name", new PropertyModel(team, "name")));
final ModalWindow modal = new ModalWindow("modal");
form.add(modal);
form.add(new ListView<Member>("members", new PropertyModel(team, "members")) {
@Override
protected void populateItem(final ListItem<Member> item) {
item.setOutputMarkupId(true);
IModel<Member> member = item.getModel();
item.add(new Label("employee", new PropertyModel(member, "employee.fullName")));
item.add(new Label("effectiveDate", new PropertyModel(member, "effectiveDate")));
item.add(new Label("position", new PropertyModel(member, "position.name")));
item.add(new AjaxLink<Member>("edit", member) {
@Override
public void onClick(AjaxRequestTarget target) {
modal.setContent(new MemberEditPanel(ModalWindow.CONTENT_ID, getModel()) {
@Override
protected void onApply(AjaxRequestTarget target) {
modal.close(target);
target.add(item);
}
@Override
protected void onCancel(AjaxRequestTarget target) {
modal.close(target);
}
});
modal.show(target);
}
});
item.add(moveUpLink("up", item));
item.add(moveDownLink("down", item));
}
}.setReuseItems(true));
form.add(new Button("save") {
@Override
public void onSubmit() {
action.apply();
setResponsePage(TeamsListPage.class);
}
});
form.add(new Link("cancel") {
@Override
public void onClick() {
action.undo();
setResponsePage(TeamsListPage.class);
}
});
}
public static PageParameters forTeam(Team team) {
PageParameters params = new PageParameters();
params.set("id", team.getId());
return params;
}
}