From f11592770694e9d0a391a31fa23f455bc05756c1 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 31 Oct 2014 09:22:01 -0400
Subject: [PATCH] Merged #212 "Gracefully handle missing integration branch in ticket page"

---
 src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java |   46 +++++++++++++++++++++++++++-------------------
 1 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java b/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java
index 03cb93c..15ebd67 100644
--- a/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/SshKeysPanel.java
@@ -15,16 +15,15 @@
  */
 package com.gitblit.wicket.panels;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.wicket.PageParameters;
 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.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 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.data.DataView;
 import org.apache.wicket.markup.repeater.data.ListDataProvider;
@@ -39,7 +38,7 @@
 
 
 /**
- * A panel that enumerates and manages SSH public keys.
+ * A panel that enumerates and manages SSH public keys using AJAX.
  *
  * @author James Moger
  *
@@ -50,25 +49,21 @@
 
 	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);
 
 		this.user = user;
-		this.pageClass = pageClass;
-		this.params = params;
 	}
 
 	@Override
 	protected void 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);
-		DataView<SshKey> keysView = new DataView<SshKey>("keys", dp) {
+		final DataView<SshKey> keysView = new DataView<SshKey>("keys", dp) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -79,15 +74,19 @@
 				item.add(new Label("permission", key.getPermission().toString()));
 				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;
 
 					@Override
-					public void onClick() {
+					public void onClick(AjaxRequestTarget target) {
 						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);
 						}
 					}
 				};
@@ -150,8 +149,17 @@
 				}
 
 				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);
 				}
 			}
 		});

--
Gitblit v1.9.1