package org.appfuse.webapp.pages;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder;
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.link.Link;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.appfuse.model.User;
import org.appfuse.service.UserManager;
import org.wicketstuff.annotation.mount.MountPath;
/**
* Page to manage and display users.
*
* @author mraible
*/
@MountPath("users")
public class UserList extends AbstractWebPage {
private static final long serialVersionUID = -5202104862675278153L;
@SpringBean
private UserManager userManager;
public UserList() {
FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
add(feedbackPanel);
feedbackPanel.setVisible(false); // other pages will set this to visible
feedbackPanel.setEscapeModelStrings(false);
// Form and button for routing user to add a new user
Form form = new Form("form");
Button button = new Button("add-user") {
public void onSubmit() {
onEditUser(new User());
}
};
button.setDefaultFormProcessing(false);
form.add(button);
add(form);
SortableUserDataProvider dp = new SortableUserDataProvider(userManager);
final DataView<User> dataView = new DataView<User>("users", dp) {
protected void populateItem(final Item<User> item) {
User user = item.getModelObject();
Link<User> link = new Link<User>("edit-link", item.getModel()) {
public void onClick() {
onEditUser(getModelObject());
}
};
link.add(new Label("user.firstName", user.getFirstName()));
item.add(link);
item.add(new Label("user.lastName", user.getLastName()));
item.add(new Label("user.email", user.getEmail()));
item.add(new AttributeModifier("class", new LoadableDetachableModel() {
protected Object load() {
return (item.getIndex() % 2 == 1) ? "even" : "odd";
}
}));
}
};
dataView.setItemsPerPage(10);
add(new OrderByBorder<>("orderByFirstName", "firstName", dp));
add(new OrderByBorder<>("orderByLastName", "lastName", dp));
add(new OrderByBorder<>("orderByEmail", "email", dp));
add(dataView);
add(new PagingNavigator("navigator", dataView));
}
/**
* Listener for the edit action
*
* @param user
* user to be edited
*/
protected void onEditUser(User user) {
setResponsePage(new UserForm(this, user));
}
}