package org.appfuse.webapp.pages.admin;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapBookmarkablePageLink;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
import de.agilecoders.wicket.core.markup.html.bootstrap.image.GlyphIconType;
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.model.ResourceModel;
import org.appfuse.model.User;
import org.appfuse.webapp.pages.AbstractWebPage;
import org.appfuse.webapp.SSAuthenticatedWebSession;
import org.appfuse.webapp.pages.Home;
import org.wicketstuff.annotation.mount.MountPath;
import java.util.ArrayList;
import java.util.List;
/**
* Page displaying a list of users that have logged in and their sessions have not expired.
*
* TODO: MZA: Partial duplication with UserList. Can be removed?
*/
@MountPath("admin/activeUsers")
public class ActiveUsers extends AbstractWebPage {
public static final int ACTIVE_USERS_PER_PAGE = 20;
@Override
protected void onInitialize() {
super.onInitialize();
add(createPageTitleTag("activeUsers.title"));
add(createFeedbackPanel());
add(createPageHeading("activeUsers.heading"));
add(createDoneButton());
add(createActiveUsersTable());
}
private BootstrapBookmarkablePageLink<String> createDoneButton() {
return new BootstrapBookmarkablePageLink<String>("doneButton", Home.class, Buttons.Type.Primary)
.setLabel(new ResourceModel("button.done"))
.setIconType(GlyphIconType.ok);
}
private AjaxFallbackDefaultDataTable<User, String> createActiveUsersTable() {
List<User> userNames = ((SSAuthenticatedWebSession)getSession()).getActiveUsers();
StaticUserDataProvider userProvider = new StaticUserDataProvider(userNames);
return new AjaxFallbackDefaultDataTable<User, String>(
"activeUsersTable", createColumns(), userProvider, ACTIVE_USERS_PER_PAGE);
}
private List<IColumn<User, String>> createColumns() {
List<IColumn<User, String>> userListColumns = new ArrayList<IColumn<User, String>>();
userListColumns.add(createColumn("user.username", "username", "username"));
userListColumns.add(createColumn("activeUsers.fullName", "fullName", "fullName"));
return userListColumns;
}
private PropertyColumn<User, String> createColumn(String key, String sortProperty, String propertyExpression) {
return new PropertyColumn<User, String>(new ResourceModel(key), sortProperty, propertyExpression);
}
}