From 62ccc93a82954a3a75193e0d87a2219ec4106f16 Mon Sep 17 00:00:00 2001 From: Tomasz Zarna Date: Fri, 26 Jul 2013 10:37:14 +0200 Subject: 395059: allow to restore a change Bug: 395059 Change-Id: Id276bc20f043641626c96b97520e02a93422fb9d Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=395059 Signed-off-by: Tomasz Zarna --- .../internal/gerrit/core/client/GerritClient.java | 23 ++++++-- .../gerrit/core/client/rest/RestoreInput.java | 29 ++++++++++ .../tests/core/client/rest/AbandonInputTest.java | 6 +-- .../tests/core/client/rest/RestoreInputTest.java | 62 ++++++++++++++++++++++ .../core/remote/GerritReviewRemoteFactoryTest.java | 2 +- .../testdata/AbandonInput_emptyMessage.json | 1 - .../testdata/AbandonInput_message.json | 1 - .../testdata/EmptyMessage.json | 1 + .../testdata/Message.json | 1 + 9 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/rest/RestoreInput.java create mode 100644 org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/RestoreInputTest.java delete mode 100644 org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_emptyMessage.json delete mode 100644 org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_message.json create mode 100644 org.eclipse.mylyn.gerrit.tests/testdata/EmptyMessage.json create mode 100644 org.eclipse.mylyn.gerrit.tests/testdata/Message.json diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritClient.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritClient.java index 935f7b8f8..a70529af0 100644 --- a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritClient.java +++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritClient.java @@ -51,6 +51,7 @@ import org.eclipse.mylyn.internal.gerrit.core.client.compat.ProjectDetailX; import org.eclipse.mylyn.internal.gerrit.core.client.data.GerritQueryResult; import org.eclipse.mylyn.internal.gerrit.core.client.rest.AbandonInput; import org.eclipse.mylyn.internal.gerrit.core.client.rest.ChangeInfo; +import org.eclipse.mylyn.internal.gerrit.core.client.rest.RestoreInput; import org.eclipse.mylyn.internal.gerrit.core.client.rest.ReviewInfo; import org.eclipse.mylyn.internal.gerrit.core.client.rest.ReviewInput; import org.eclipse.mylyn.internal.gerrit.core.client.rest.SubmitInfo; @@ -673,12 +674,24 @@ public class GerritClient extends ReviewsClient { public ChangeDetail restore(String reviewId, int patchSetId, final String message, IProgressMonitor monitor) throws GerritException { final PatchSet.Id id = new PatchSet.Id(new Change.Id(id(reviewId)), patchSetId); - return execute(monitor, new Operation() { - @Override - public void execute(IProgressMonitor monitor) throws GerritException { - getChangeManageService(monitor).restoreChange(id, message, this); + if (hasJsonRpcApi(monitor)) { + return execute(monitor, new Operation() { + @Override + public void execute(IProgressMonitor monitor) throws GerritException { + getChangeManageService(monitor).restoreChange(id, message, this); + } + }); + } else { + final String uri = "/a/changes/" + id.getParentKey().get() + "/restore"; //$NON-NLS-1$ //$NON-NLS-2$ + try { + execute(uri, new RestoreInput(message), ChangeInfo.class, null/*no error handler*/, monitor); + } catch (GerritHttpException e) { + if (e.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) { + throw new GerritException("Not Found", e); //$NON-NLS-1$ + } } - }); + return getChangeDetail(id.getParentKey().get(), monitor); + } } /** diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/rest/RestoreInput.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/rest/RestoreInput.java new file mode 100644 index 000000000..8abc6965c --- /dev/null +++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/rest/RestoreInput.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2013 Tasktop Technologies and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.gerrit.core.client.rest; + +import org.eclipse.core.runtime.Assert; + +/** + * Data model object for RestoreInput. + */ +public class RestoreInput { + + @SuppressWarnings("unused") + private final String message; + + public RestoreInput(String msg) { + Assert.isLegal(msg != null); + this.message = msg; + } +} diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/AbandonInputTest.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/AbandonInputTest.java index ee6d0848b..39523f759 100644 --- a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/AbandonInputTest.java +++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/AbandonInputTest.java @@ -41,18 +41,18 @@ public class AbandonInputTest extends TestCase { assertNotNull(json); assertFalse(json.isEmpty()); - assertEquals(readFile("testdata/AbandonInput_emptyMessage.json"), json); + assertEquals(readFile("testdata/EmptyMessage.json"), json); } @Test public void testFromValid() throws Exception { - AbandonInput abandonInput = new AbandonInput("No go!"); + AbandonInput abandonInput = new AbandonInput("Whatever"); String json = new JSonSupport().getGson().toJson(abandonInput); assertNotNull(json); assertFalse(json.isEmpty()); - assertEquals(readFile("testdata/AbandonInput_message.json"), json); + assertEquals(readFile("testdata/Message.json"), json); } private String readFile(String path) throws IOException { diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/RestoreInputTest.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/RestoreInputTest.java new file mode 100644 index 000000000..c81d74d64 --- /dev/null +++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/rest/RestoreInputTest.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2013 Tasktop Technologies and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.gerrit.tests.core.client.rest; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil; +import org.eclipse.mylyn.internal.gerrit.core.client.JSonSupport; +import org.eclipse.mylyn.internal.gerrit.core.client.rest.RestoreInput; +import org.junit.Test; + +public class RestoreInputTest extends TestCase { + + @Test(expected = IllegalArgumentException.class) + public void testFromNull() throws Exception { + try { + new RestoreInput(null); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + @Test + public void testFromEmpty() throws Exception { + RestoreInput restoreInput = new RestoreInput(""); + + String json = new JSonSupport().getGson().toJson(restoreInput); + + assertNotNull(json); + assertFalse(json.isEmpty()); + assertEquals(readFile("testdata/EmptyMessage.json"), json); + } + + @Test + public void testFromValid() throws Exception { + RestoreInput restoreInput = new RestoreInput("Whatever"); + + String json = new JSonSupport().getGson().toJson(restoreInput); + + assertNotNull(json); + assertFalse(json.isEmpty()); + assertEquals(readFile("testdata/Message.json"), json); + } + + private String readFile(String path) throws IOException { + File file = CommonTestUtil.getFile(this, path); + return CommonTestUtil.read(file); + } +} diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/GerritReviewRemoteFactoryTest.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/GerritReviewRemoteFactoryTest.java index cb58f4875..c7408cfc9 100644 --- a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/GerritReviewRemoteFactoryTest.java +++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/internal/gerrit/core/remote/GerritReviewRemoteFactoryTest.java @@ -242,7 +242,7 @@ public class GerritReviewRemoteFactoryTest extends GerritRemoteTest { assertThat(comments.size(), is(2)); // abandon + restore IComment lastComment = comments.get(1); assertThat(lastComment.getAuthor().getDisplayName(), is("tests")); - assertThat(lastComment.getDescription(), is("Patch Set 1: Restored\n\n" + message2)); + assertThat(lastComment.getDescription(), endsWith("Restored\n\n" + message2)); } @Test diff --git a/org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_emptyMessage.json b/org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_emptyMessage.json deleted file mode 100644 index 740e21432..000000000 --- a/org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_emptyMessage.json +++ /dev/null @@ -1 +0,0 @@ -{"message":""} \ No newline at end of file diff --git a/org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_message.json b/org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_message.json deleted file mode 100644 index e544c1965..000000000 --- a/org.eclipse.mylyn.gerrit.tests/testdata/AbandonInput_message.json +++ /dev/null @@ -1 +0,0 @@ -{"message":"No go!"} \ No newline at end of file diff --git a/org.eclipse.mylyn.gerrit.tests/testdata/EmptyMessage.json b/org.eclipse.mylyn.gerrit.tests/testdata/EmptyMessage.json new file mode 100644 index 000000000..740e21432 --- /dev/null +++ b/org.eclipse.mylyn.gerrit.tests/testdata/EmptyMessage.json @@ -0,0 +1 @@ +{"message":""} \ No newline at end of file diff --git a/org.eclipse.mylyn.gerrit.tests/testdata/Message.json b/org.eclipse.mylyn.gerrit.tests/testdata/Message.json new file mode 100644 index 000000000..bdd5aa3a4 --- /dev/null +++ b/org.eclipse.mylyn.gerrit.tests/testdata/Message.json @@ -0,0 +1 @@ +{"message":"Whatever"} \ No newline at end of file -- cgit v1.2.3