package org.github.etcd.viewer.html.pages;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Application;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.link.StatelessLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.github.etcd.viewer.EtcdWebSession;
import org.github.etcd.viewer.EtcdWebSession.AuthenticationData;
public class SignOutPanel extends Panel {
private static final long serialVersionUID = 1L;
private IModel<List<AuthenticationData>> authentications = new LoadableDetachableModel<List<AuthenticationData>>() {
private static final long serialVersionUID = 1L;
@Override
protected List<AuthenticationData> load() {
return new ArrayList<>(EtcdWebSession.get().getAuthentications());
}
};
public SignOutPanel(String id) {
super(id);
add(new Label("authCount", new LoadableDetachableModel<Integer>() {
private static final long serialVersionUID = 1L;
@Override
protected Integer load() {
return authentications.getObject().size();
}
}));
add(new ListView<AuthenticationData>("authentications", authentications) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<AuthenticationData> item) {
Link<AuthenticationData> signOut;
item.add(signOut = new Link<AuthenticationData>("signOut", item.getModel()) {
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
String username = getModelObject().getUsername();
String cluster = getModelObject().getCluster();
if (EtcdWebSession.get().signOut(cluster, username)) {
info("Successfully signed out user: " + username + " from: " + cluster);
} else {
error("Failed to sign out user: " + username + " from: " + cluster);
}
setResponsePage(getPage().getPageClass(), getPage().getPageParameters());
}
});
signOut.add(new Label("username", new PropertyModel<>(item.getModel(), "username")));
signOut.add(new Label("cluster", new PropertyModel<String>(item.getModel(), "cluster")));
}
});
add(new StatelessLink<Void>("signOutAll") {
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
EtcdWebSession.get().invalidate();
setResponsePage(Application.get().getHomePage());
}
});
}
@Override
protected void onDetach() {
super.onDetach();
authentications.detach();
}
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(!authentications.getObject().isEmpty());
}
}