Browse Source

Use AJAX to manage the SSH keys panel

tags/v1.6.0
James Moger 10 years ago
parent
commit
b0658eedf4

+ 1
- 1
src/main/java/com/gitblit/wicket/pages/UserPage.java View File

private void addSshKeys(final UserModel user) { private void addSshKeys(final UserModel user) {
Fragment keysTab = new Fragment("sshKeysTab", "sshKeysTabFragment", this); Fragment keysTab = new Fragment("sshKeysTab", "sshKeysTabFragment", this);
keysTab.add(new SshKeysPanel("sshKeysPanel", user, getClass(), getPageParameters()));
keysTab.add(new SshKeysPanel("sshKeysPanel", user));
// add the SSH keys tab // add the SSH keys tab
add(new Fragment("sshKeysLink", "sshKeysLinkFragment", this).setRenderBodyOnly(true)); add(new Fragment("sshKeysLink", "sshKeysLinkFragment", this).setRenderBodyOnly(true));

+ 27
- 19
src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java View File

*/ */
package com.gitblit.wicket.panels; package com.gitblit.wicket.panels;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView; import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.ListDataProvider; import org.apache.wicket.markup.repeater.data.ListDataProvider;
/** /**
* A panel that enumerates and manages SSH public keys.
* A panel that enumerates and manages SSH public keys using AJAX.
* *
* @author James Moger * @author James Moger
* *
private final UserModel user; private final UserModel user;
private final Class<? extends WebPage> pageClass;
private final PageParameters params;
public SshKeysPanel(String wicketId, UserModel user, Class<? extends WebPage> pageClass, PageParameters params) {
public SshKeysPanel(String wicketId, UserModel user) {
super(wicketId); super(wicketId);
this.user = user; this.user = user;
this.pageClass = pageClass;
this.params = params;
} }
@Override @Override
protected void onInitialize() { protected void onInitialize() {
super.onInitialize(); super.onInitialize();
List<SshKey> keys = app().keys().getKeys(user.username);
setOutputMarkupId(true);
final List<SshKey> keys = new ArrayList<SshKey>(app().keys().getKeys(user.username));
final ListDataProvider<SshKey> dp = new ListDataProvider<SshKey>(keys); final ListDataProvider<SshKey> dp = new ListDataProvider<SshKey>(keys);
DataView<SshKey> keysView = new DataView<SshKey>("keys", dp) {
final DataView<SshKey> keysView = new DataView<SshKey>("keys", dp) {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
item.add(new Label("permission", key.getPermission().toString())); item.add(new Label("permission", key.getPermission().toString()));
item.add(new Label("algorithm", key.getAlgorithm())); item.add(new Label("algorithm", key.getAlgorithm()));
Link<Void> delete = new Link<Void>("delete") {
AjaxLink<Void> delete = new AjaxLink<Void>("delete") {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
public void onClick() {
public void onClick(AjaxRequestTarget target) {
if (app().keys().removeKey(user.username, key)) { if (app().keys().removeKey(user.username, key)) {
setRedirect(true);
setResponsePage(pageClass, params);
// reset the keys list
keys.clear();
keys.addAll(app().keys().getKeys(user.username));
// update the panel
target.addComponent(SshKeysPanel.this);
} }
} }
}; };
} }
if (app().keys().addKey(user.username, key)) { if (app().keys().addKey(user.username, key)) {
setRedirect(true);
setResponsePage(pageClass, params);
// reset add key fields
keyData.setObject("");
keyPermission.setObject(AccessPermission.PUSH);
keyComment.setObject("");
// reset the keys list
keys.clear();
keys.addAll(app().keys().getKeys(user.username));
// update the panel
target.addComponent(SshKeysPanel.this);
} }
} }
}); });

Loading…
Cancel
Save