Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Zarna2014-02-06 10:56:26 +0000
committerGerrit Code Review @ Eclipse.org2014-02-18 20:00:10 +0000
commitf4a4742e74ae1aa4a2b8bf1cb6f1aeb8eb29382f (patch)
tree1ec623cbfcdf82cbc38006fb6d521dc343a2a2fe
parentb98d8b27a3b346a6e6773c289d826de89f6f6d09 (diff)
downloadorg.eclipse.mylyn.reviews-f4a4742e74ae1aa4a2b8bf1cb6f1aeb8eb29382f.tar.gz
org.eclipse.mylyn.reviews-f4a4742e74ae1aa4a2b8bf1cb6f1aeb8eb29382f.tar.xz
org.eclipse.mylyn.reviews-f4a4742e74ae1aa4a2b8bf1cb6f1aeb8eb29382f.zip
425945: image compare does not work
* update EMF model to keep binary content * identify if the changed file is binary * if so, fetch its content (base and target) * works only in Gerrit 2.7+ Bug: 425945 Change-Id: I1487bd33dbff03cbbcaef8faf6cb21b425ea3665 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=425945 Signed-off-by: Tomasz Zarna <tomasz.zarna@tasktop.com>
-rw-r--r--org.eclipse.mylyn.gerrit.core.tests/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClientTest.java30
-rw-r--r--org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritClient.java59
-rw-r--r--org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClient.java9
-rw-r--r--org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/PatchSetContent.java13
-rw-r--r--org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchDetailService.java6
-rw-r--r--org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java50
-rw-r--r--org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/remote/PatchSetContentRemoteFactory.java15
-rw-r--r--org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java2
-rw-r--r--org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/compat/PatchScriptXTest.java57
-rw-r--r--org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_gif.json94
-rw-r--r--org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_java.json132
-rw-r--r--org.eclipse.mylyn.reviews.core/model/reviews.ecore1
-rw-r--r--org.eclipse.mylyn.reviews.core/model/reviews.genmodel1
-rw-r--r--org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/core/model/IFileVersion.java26
-rw-r--r--org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/FileVersion.java58
-rw-r--r--org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/ReviewsPackage.java37
-rw-r--r--org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/compare/CompareUtil.java8
17 files changed, 564 insertions, 34 deletions
diff --git a/org.eclipse.mylyn.gerrit.core.tests/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClientTest.java b/org.eclipse.mylyn.gerrit.core.tests/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClientTest.java
index 5d1274d2b..943b467e6 100644
--- a/org.eclipse.mylyn.gerrit.core.tests/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClientTest.java
+++ b/org.eclipse.mylyn.gerrit.core.tests/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClientTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011 Christian Trutz.
+ * Copyright (c) 2011 Christian Trutz 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
@@ -7,21 +7,31 @@
*
* Contributors:
* Christian Trutz - initial API and implementation
+ * Tasktop Technologies - ongoing maintenance
*******************************************************************************/
package org.eclipse.mylyn.internal.gerrit.core.client;
+import static org.junit.Assert.assertArrayEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
import java.io.IOException;
+import org.apache.commons.httpclient.HttpMethodBase;
import org.eclipse.core.runtime.AssertionFailedException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.mylyn.commons.net.AbstractWebLocation;
import org.eclipse.mylyn.internal.gerrit.core.client.GerritHttpClient.JsonEntity;
+import org.eclipse.mylyn.internal.gerrit.core.client.GerritHttpClient.Request;
+import org.eclipse.mylyn.internal.gerrit.core.client.GerritHttpClient.Request.HttpMethod;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
+import com.google.gson.reflect.TypeToken;
+
/**
* Unit tests for {@link GerritHttpClient}.
*
@@ -69,4 +79,22 @@ public class GerritHttpClientTest {
gerritHttpClient.postJsonRequest("not null", null, progressMonitor); //$NON-NLS-1$
}
+ @Test
+ public void restRequestCanReturnBinaryContent() throws IOException {
+ // given
+ final TypeToken<Byte[]> byteArrayType = new TypeToken<Byte[]>() {
+ };
+ Request<byte[]> request = new GerritHttpClient(abstractWebLocation).new RestRequest<byte[]>(HttpMethod.GET,
+ "serviceUri", null /*input*/, byteArrayType.getType(), null /*error handler*/); //$NON-NLS-1$
+ HttpMethodBase httpMethodBase = mock(HttpMethodBase.class);
+ byte[] binary = "binary".getBytes(); //$NON-NLS-1$
+ when(httpMethodBase.getResponseBody()).thenReturn(binary);
+
+ // when
+ byte[] result = request.process(httpMethodBase);
+
+ // then
+ assertArrayEquals(binary, result);
+ }
+
}
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 f271d06b7..1d7d4ba03 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
@@ -53,6 +53,7 @@ import org.eclipse.mylyn.internal.gerrit.core.client.compat.ChangeDetailX;
import org.eclipse.mylyn.internal.gerrit.core.client.compat.ChangeManageService;
import org.eclipse.mylyn.internal.gerrit.core.client.compat.GerritConfigX;
import org.eclipse.mylyn.internal.gerrit.core.client.compat.PatchDetailService;
+import org.eclipse.mylyn.internal.gerrit.core.client.compat.PatchScriptX;
import org.eclipse.mylyn.internal.gerrit.core.client.compat.PatchSetPublishDetailX;
import org.eclipse.mylyn.internal.gerrit.core.client.compat.ProjectAdminService;
import org.eclipse.mylyn.internal.gerrit.core.client.compat.ProjectDetailX;
@@ -87,7 +88,6 @@ import com.google.gerrit.common.data.ApprovalDetail;
import com.google.gerrit.common.data.ChangeDetail;
import com.google.gerrit.common.data.ChangeListService;
import com.google.gerrit.common.data.GerritConfig;
-import com.google.gerrit.common.data.PatchScript;
import com.google.gerrit.common.data.PatchSetDetail;
import com.google.gerrit.common.data.ReviewerResult;
import com.google.gerrit.common.data.SingleListChangeInfo;
@@ -98,6 +98,7 @@ import com.google.gerrit.reviewdb.ApprovalCategoryValue;
import com.google.gerrit.reviewdb.Change;
import com.google.gerrit.reviewdb.ContributorAgreement;
import com.google.gerrit.reviewdb.Patch;
+import com.google.gerrit.reviewdb.Patch.ChangeType;
import com.google.gerrit.reviewdb.PatchLineComment;
import com.google.gerrit.reviewdb.PatchSet;
import com.google.gerrit.reviewdb.PatchSet.Id;
@@ -110,7 +111,7 @@ import com.google.gwtjsonrpc.client.VoidResult;
/**
* Facade to the Gerrit RPC API.
- *
+ *
* @author Mikael Kober
* @author Thomas Westling
* @author Steffen Pingel
@@ -356,7 +357,7 @@ public class GerritClient extends ReviewsClient {
patchSetContent.setTargetDetail(targetDetail);
}
for (Patch patch : patchSetContent.getTargetDetail().getPatches()) {
- PatchScript patchScript = getPatchScript(patch.getKey(), baseId, targetId, monitor);
+ PatchScriptX patchScript = getPatchScript(patch.getKey(), baseId, targetId, monitor);
if (patchScript != null) {
patchSetContent.putPatchScriptByPatchKey(patch.getKey(), patchScript);
}
@@ -391,17 +392,32 @@ public class GerritClient extends ReviewsClient {
return new GerritSystemInfo(version, contributorAgreements, account);
}
- private PatchScript getPatchScript(final Patch.Key key, final PatchSet.Id leftId, final PatchSet.Id rightId,
+ private PatchScriptX getPatchScript(final Patch.Key key, final PatchSet.Id leftId, final PatchSet.Id rightId,
IProgressMonitor monitor) throws GerritException {
//final AccountDiffPreference diffPrefs = getDiffPreference(monitor);
//final AccountDiffPreference diffPrefs = new AccountDiffPreference(getAccount(monitor).getId());
final AccountDiffPreference diffPrefs = createAccountDiffPreference();
- return execute(monitor, new Operation<PatchScript>() {
+ PatchScriptX patchScript = execute(monitor, new Operation<PatchScriptX>() {
@Override
public void execute(IProgressMonitor monitor) throws GerritException {
- getPatchDetailService(monitor).patchScript(key, leftId, rightId, diffPrefs, this);
+ getPatchDetailService(monitor).patchScriptX(key, leftId, rightId, diffPrefs, this);
}
});
+ if (patchScript.isBinary() && isVersion27OrLater(monitor)) {
+ final TypeToken<Byte[]> byteArrayType = new TypeToken<Byte[]>() {
+ };
+ if (patchScript.getChangeType() != ChangeType.ADDED) {
+ String keyBaseEncoded = encode(key.toString() + "^1"); //$NON-NLS-1$
+ byte[] binBase = executeGetRestRequest("/cat/" + keyBaseEncoded, byteArrayType.getType(), monitor); //$NON-NLS-1$
+ patchScript.setBinaryA(binBase);
+ }
+ if (patchScript.getChangeType() != ChangeType.DELETED) {
+ String keyTargetEncoded = encode(key.toString() + "^0"); //$NON-NLS-1$
+ byte[] binTarget = executeGetRestRequest("/cat/" + keyTargetEncoded, byteArrayType.getType(), monitor); //$NON-NLS-1$
+ patchScript.setBinaryB(binTarget);
+ }
+ }
+ return patchScript;
}
private AccountDiffPreference createAccountDiffPreference() {
@@ -872,7 +888,7 @@ public class GerritClient extends ReviewsClient {
/**
* Sends a query for the changes visible to the caller to the gerrit server.
- *
+ *
* @param monitor
* A progress monitor
* @param queryString
@@ -888,7 +904,7 @@ public class GerritClient extends ReviewsClient {
/**
* Sends a query for the changes visible to the caller to the gerrit server with the possibility of adding options
* to the query.
- *
+ *
* @param monitor
* A progress monitor
* @param queryString
@@ -932,7 +948,7 @@ public class GerritClient extends ReviewsClient {
/**
* Sends a query for the changes visible to the caller to the gerrit server. Uses the gerrit REST API.
- *
+ *
* @param monitor
* A progress monitor
* @param queryString
@@ -948,7 +964,7 @@ public class GerritClient extends ReviewsClient {
/**
* Sends a query for the changes visible to the caller to the gerrit server with the possibility of adding options
* to the query. Uses the gerrit REST API.
- *
+ *
* @param monitor
* A progress monitor
* @param queryString
@@ -960,17 +976,13 @@ public class GerritClient extends ReviewsClient {
*/
public List<GerritQueryResult> executeQueryRest(IProgressMonitor monitor, final String queryString,
String optionString) throws GerritException {
- try {
- String uri = "/changes/?q=" + URLEncoder.encode(queryString, "UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$
- if (StringUtils.isNotBlank(optionString)) {
- uri += "&o=" + URLEncoder.encode(optionString, "UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- TypeToken<List<GerritQueryResult>> queryResultListType = new TypeToken<List<GerritQueryResult>>() {
- };
- return executeGetRestRequest(uri, queryResultListType.getType(), monitor);
- } catch (UnsupportedEncodingException e) {
- throw new GerritException(e);
+ String uri = "/changes/?q=" + encode(queryString); //$NON-NLS-1$
+ if (StringUtils.isNotBlank(optionString)) {
+ uri += "&o=" + encode(optionString); //$NON-NLS-1$
}
+ TypeToken<List<GerritQueryResult>> queryResultListType = new TypeToken<List<GerritQueryResult>>() {
+ };
+ return executeGetRestRequest(uri, queryResultListType.getType(), monitor);
}
/**
@@ -1235,4 +1247,11 @@ public class GerritClient extends ReviewsClient {
}
}
+ private static String encode(String string) throws GerritException {
+ try {
+ return URLEncoder.encode(string, "UTF-8"); //$NON-NLS-1$
+ } catch (UnsupportedEncodingException e) {
+ throw new GerritException(e);
+ }
+ }
}
diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClient.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClient.java
index 730c78996..326de52d2 100644
--- a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClient.java
+++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/GerritHttpClient.java
@@ -48,6 +48,7 @@ import com.google.gerrit.common.auth.SignInMode;
import com.google.gerrit.common.auth.openid.DiscoveryResult;
import com.google.gerrit.common.auth.openid.DiscoveryResult.Status;
import com.google.gerrit.common.auth.userpass.LoginResult;
+import com.google.gson.reflect.TypeToken;
/**
* Abstract class that handles the http communications with the Gerrit server.
@@ -107,7 +108,8 @@ public class GerritHttpClient {
}
- private class RestRequest<T> extends Request<T> {
+ // visible for testing
+ class RestRequest<T> extends Request<T> {
private final JSonSupport json = new JSonSupport();
@@ -154,8 +156,13 @@ public class GerritHttpClient {
return method;
}
+ @SuppressWarnings("unchecked")
@Override
public T process(HttpMethodBase method) throws IOException {
+ Type rawType = TypeToken.get(resultType).getRawType();
+ if (rawType == Byte[].class || rawType == byte[].class) {
+ return (T) method.getResponseBody();
+ }
String content = method.getResponseBodyAsString();
return json.parseResponse(content, resultType);
}
diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/PatchSetContent.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/PatchSetContent.java
index 7f11974db..6964de51c 100644
--- a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/PatchSetContent.java
+++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/PatchSetContent.java
@@ -14,7 +14,8 @@ package org.eclipse.mylyn.internal.gerrit.core.client;
import java.util.HashMap;
import java.util.Map;
-import com.google.gerrit.common.data.PatchScript;
+import org.eclipse.mylyn.internal.gerrit.core.client.compat.PatchScriptX;
+
import com.google.gerrit.common.data.PatchSetDetail;
import com.google.gerrit.reviewdb.Patch;
import com.google.gerrit.reviewdb.PatchSet;
@@ -35,7 +36,7 @@ public class PatchSetContent {
private PatchSetDetail targetDetail;
- Map<Patch.Key, PatchScript> patchScriptByPatchKey;
+ Map<Patch.Key, PatchScriptX> patchScriptByPatchKey;
/**
* Creates empty patch set content using detailed target.
@@ -47,7 +48,7 @@ public class PatchSetContent {
public PatchSetContent(PatchSet base, PatchSetDetail targetDetail) {
this.base = base;
this.targetDetail = targetDetail;
- this.patchScriptByPatchKey = new HashMap<Patch.Key, PatchScript>();
+ this.patchScriptByPatchKey = new HashMap<Patch.Key, PatchScriptX>();
}
/**
@@ -60,7 +61,7 @@ public class PatchSetContent {
public PatchSetContent(PatchSet base, PatchSet target) {
this.base = base;
this.target = target;
- this.patchScriptByPatchKey = new HashMap<Patch.Key, PatchScript>();
+ this.patchScriptByPatchKey = new HashMap<Patch.Key, PatchScriptX>();
}
public PatchSet getBase() {
@@ -88,11 +89,11 @@ public class PatchSetContent {
this.targetDetail = targetDetail;
}
- void putPatchScriptByPatchKey(Patch.Key key, PatchScript script) {
+ void putPatchScriptByPatchKey(Patch.Key key, PatchScriptX script) {
patchScriptByPatchKey.put(key, script);
}
- public PatchScript getPatchScript(Patch.Key key) {
+ public PatchScriptX getPatchScript(Patch.Key key) {
return patchScriptByPatchKey.get(key);
}
diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchDetailService.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchDetailService.java
index 01e7e7d58..8db438f8c 100644
--- a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchDetailService.java
+++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchDetailService.java
@@ -14,7 +14,10 @@ package org.eclipse.mylyn.internal.gerrit.core.client.compat;
import java.util.List;
import com.google.gerrit.common.data.ReviewerResult;
+import com.google.gerrit.reviewdb.AccountDiffPreference;
import com.google.gerrit.reviewdb.Change;
+import com.google.gerrit.reviewdb.Patch;
+import com.google.gerrit.reviewdb.PatchSet;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
@@ -24,4 +27,7 @@ public interface PatchDetailService extends com.google.gerrit.common.data.PatchD
void addReviewers(Change.Id id, List<String> reviewers, boolean confirmed, AsyncCallback<ReviewerResult> callback);
+ void patchScriptX(Patch.Key key, PatchSet.Id a, PatchSet.Id b, AccountDiffPreference diffPrefs,
+ AsyncCallback<PatchScriptX> callback);
+
}
diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java
new file mode 100644
index 000000000..f28dafa28
--- /dev/null
+++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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.compat;
+
+import com.google.gerrit.common.data.PatchScript;
+
+/**
+ * Provides support for binary content.
+ */
+public class PatchScriptX extends PatchScript {
+
+ private byte[] binaryA;
+
+ private byte[] binaryB;
+
+ public boolean isBinary() {
+ for (String header : getPatchHeader()) {
+ if (header.contains("Binary files differ")) { //$NON-NLS-1$
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public byte[] getBinaryA() {
+ return binaryA;
+ }
+
+ public void setBinaryA(byte[] binaryA) {
+ this.binaryA = binaryA;
+ }
+
+ public byte[] getBinaryB() {
+ return binaryB;
+ }
+
+ public void setBinaryB(byte[] binaryB) {
+ this.binaryB = binaryB;
+ }
+
+}
diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/remote/PatchSetContentRemoteFactory.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/remote/PatchSetContentRemoteFactory.java
index 0acf269f8..d3692f0cc 100644
--- a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/remote/PatchSetContentRemoteFactory.java
+++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/remote/PatchSetContentRemoteFactory.java
@@ -24,6 +24,7 @@ import org.eclipse.mylyn.internal.gerrit.core.GerritUtil;
import org.eclipse.mylyn.internal.gerrit.core.ReviewItemCache;
import org.eclipse.mylyn.internal.gerrit.core.client.GerritException;
import org.eclipse.mylyn.internal.gerrit.core.client.PatchSetContent;
+import org.eclipse.mylyn.internal.gerrit.core.client.compat.PatchScriptX;
import org.eclipse.mylyn.reviews.core.model.IComment;
import org.eclipse.mylyn.reviews.core.model.IFileItem;
import org.eclipse.mylyn.reviews.core.model.IFileVersion;
@@ -159,13 +160,17 @@ public abstract class PatchSetContentRemoteFactory<RemoteKeyType> extends
}
items.add(item);
- PatchScript patchScript = content.getPatchScript(patch.getKey());
+ PatchScriptX patchScript = content.getPatchScript(patch.getKey());
if (patchScript != null) {
IFileVersion baseVersion = (IFileVersion) getCache().getItem(baseId);
if (baseVersion == null) {
baseVersion = IReviewsFactory.INSTANCE.createFileVersion();
baseVersion.setId(baseId);
- baseVersion.setContent(patchScript.getA().asString());
+ if (patchScript.isBinary()) {
+ baseVersion.setBinaryContent(patchScript.getBinaryA());
+ } else {
+ baseVersion.setContent(patchScript.getA().asString());
+ }
baseVersion.setPath(patchScript.getA().getPath());
baseVersion.setDescription((content.getBase() != null) ? NLS.bind("Patch Set {0}",
content.getBase().getPatchSetId()) : "Base");
@@ -180,7 +185,11 @@ public abstract class PatchSetContentRemoteFactory<RemoteKeyType> extends
targetVersion = IReviewsFactory.INSTANCE.createFileVersion();
targetVersion.setId(targetId);
SparseFileContent target = patchScript.getB().apply(patchScript.getA(), patchScript.getEdits());
- targetVersion.setContent(target.asString());
+ if (patchScript.isBinary()) {
+ targetVersion.setBinaryContent(patchScript.getBinaryB());
+ } else {
+ targetVersion.setContent(target.asString());
+ }
targetVersion.setPath(patchScript.getB().getPath());
targetVersion.setDescription(NLS.bind("Patch Set {0}", content.getTargetDetail()
.getPatchSet()
diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java
index 9ac2e2a11..da348a5eb 100644
--- a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java
+++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/AllGerritTests.java
@@ -24,6 +24,7 @@ import org.eclipse.mylyn.gerrit.tests.core.client.GerritClientTest;
import org.eclipse.mylyn.gerrit.tests.core.client.GerritVersionTest;
import org.eclipse.mylyn.gerrit.tests.core.client.OpenIdAuthenticationTest;
import org.eclipse.mylyn.gerrit.tests.core.client.compat.ChangeDetailXTest;
+import org.eclipse.mylyn.gerrit.tests.core.client.compat.PatchScriptXTest;
import org.eclipse.mylyn.gerrit.tests.core.client.rest.AbandonInputTest;
import org.eclipse.mylyn.gerrit.tests.core.client.rest.AccountInfoTest;
import org.eclipse.mylyn.gerrit.tests.core.client.rest.AddReviewerResultTest;
@@ -74,6 +75,7 @@ public class AllGerritTests {
suite.addTestSuite(SubmitInfoTest.class);
suite.addTestSuite(SubmitInputTest.class);
suite.addTestSuite(ChangeDetailXTest.class);
+ suite.addTestSuite(PatchScriptXTest.class);
if (!configuration.isLocalOnly()) {
// network tests
suite.addTestSuite(OpenIdAuthenticationTest.class);
diff --git a/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/compat/PatchScriptXTest.java b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/compat/PatchScriptXTest.java
new file mode 100644
index 000000000..043ab00b3
--- /dev/null
+++ b/org.eclipse.mylyn.gerrit.tests/src/org/eclipse/mylyn/gerrit/tests/core/client/compat/PatchScriptXTest.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2014 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.compat;
+
+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.compat.PatchScriptX;
+import org.junit.Test;
+
+public class PatchScriptXTest extends TestCase {
+ @Test
+ public void testPatchScriptIsNotBinary() throws Exception {
+ PatchScriptX patchScript = parseFile("testdata/PatchScript_java.json");
+
+ assertFalse(patchScript.isBinary());
+ }
+
+ @Test
+ public void testPatchScriptIsBinary() throws Exception {
+ PatchScriptX patchScript = parseFile("testdata/PatchScript_gif.json");
+
+ assertTrue(patchScript.isBinary());
+ }
+
+ private PatchScriptX parseFile(String path) throws IOException {
+ File file = CommonTestUtil.getFile(this, path);
+ String content = CommonTestUtil.read(file);
+ PatchScriptXAsResult result = new JSonSupport().parseResponse(content, PatchScriptXAsResult.class);
+
+ assertEquals("2.0", result.jsonrpc);
+ assertTrue(result.id > 0); //any positive integer is acceptable
+ assertNotNull(result.result);
+ return result.result;
+ }
+
+ private class PatchScriptXAsResult {
+ private String jsonrpc;
+
+ private int id;
+
+ private PatchScriptX result;
+ }
+}
diff --git a/org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_gif.json b/org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_gif.json
new file mode 100644
index 000000000..fbd222a01
--- /dev/null
+++ b/org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_gif.json
@@ -0,0 +1,94 @@
+{
+ "jsonrpc" : "2.0",
+ "id" : 9,
+ "result" : {
+ "changeId" : {
+ "id" : "I4934f8b639737119d8ef28b08d24c4b47a02e23a"
+ },
+ "changeType" : "DELETED",
+ "newName" : "org.eclipse.egit.ui/icons/obj16/gerrit_fetch.gif",
+ "oldMode" : "FILE",
+ "newMode" : "FILE",
+ "header" : ["diff --git a/org.eclipse.egit.ui/icons/obj16/gerrit_fetch.gif b/org.eclipse.egit.ui/icons/obj16/gerrit_fetch.gif\n", "deleted file mode 100644\n", "index a61b2d6..0000000\n", "--- a/org.eclipse.egit.ui/icons/obj16/gerrit_fetch.gif\n", "+++ /dev/null\n", "Binary files differ\n"],
+ "diffPrefs" : {
+ "accountId" : {
+ "id" : 118
+ },
+ "ignoreWhitespace" : "N",
+ "tabSize" : 8,
+ "lineLength" : 100,
+ "syntaxHighlighting" : true,
+ "showWhitespaceErrors" : true,
+ "intralineDifference" : true,
+ "showTabs" : true,
+ "context" : 10,
+ "skipDeleted" : false,
+ "skipUncommented" : false,
+ "expandAllComments" : false,
+ "retainHeader" : false,
+ "manualReview" : false,
+ "showLineEndings" : true
+ },
+ "a" : {
+ "path" : "org.eclipse.egit.ui/icons/obj16/gerrit_fetch.gif",
+ "ranges" : [],
+ "size" : 2,
+ "missingNewlineAtEnd" : true
+ },
+ "b" : {
+ "ranges" : [],
+ "size" : 0,
+ "missingNewlineAtEnd" : false
+ },
+ "edits" : [],
+ "displayMethodA" : "DIFF",
+ "displayMethodB" : "NONE",
+ "comments" : {
+ "a" : [],
+ "b" : [],
+ "accounts" : {
+ "accounts" : []
+ }
+ },
+ "history" : [{
+ "key" : {
+ "patchSetId" : {
+ "changeId" : {
+ "id" : 20222
+ },
+ "patchSetId" : 1
+ },
+ "fileName" : "org.eclipse.egit.ui/icons/obj16/gerrit_fetch.gif"
+ },
+ "changeType" : "M",
+ "patchType" : "U",
+ "nbrComments" : 0,
+ "nbrDrafts" : 0,
+ "insertions" : 0,
+ "deletions" : 0,
+ "reviewedByCurrentUser" : false
+ }, {
+ "key" : {
+ "patchSetId" : {
+ "changeId" : {
+ "id" : 20222
+ },
+ "patchSetId" : 2
+ },
+ "fileName" : "org.eclipse.egit.ui/icons/obj16/gerrit_fetch.gif"
+ },
+ "changeType" : "M",
+ "patchType" : "U",
+ "nbrComments" : 0,
+ "nbrDrafts" : 0,
+ "insertions" : 0,
+ "deletions" : 0,
+ "reviewedByCurrentUser" : false
+ }
+ ],
+ "hugeFile" : false,
+ "intralineDifference" : false,
+ "intralineFailure" : false,
+ "intralineTimeout" : false
+ }
+}
diff --git a/org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_java.json b/org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_java.json
new file mode 100644
index 000000000..2f008af99
--- /dev/null
+++ b/org.eclipse.mylyn.gerrit.tests/testdata/PatchScript_java.json
@@ -0,0 +1,132 @@
+{
+ "jsonrpc" : "2.0",
+ "id" : 6,
+ "result" : {
+ "changeId" : {
+ "id" : "I1487bd33dbff03cbbcaef8faf6cb21b425ea3665"
+ },
+ "changeType" : "ADDED",
+ "newName" : "org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java",
+ "oldMode" : "FILE",
+ "newMode" : "FILE",
+ "header" : ["diff --git a/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java\n", "new file mode 100644\n", "index 0000000..088aa25\n", "--- /dev/null\n", "+++ b/org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java\n"],
+ "diffPrefs" : {
+ "accountId" : {
+ "id" : 118
+ },
+ "ignoreWhitespace" : "N",
+ "tabSize" : 8,
+ "lineLength" : 100,
+ "syntaxHighlighting" : true,
+ "showWhitespaceErrors" : true,
+ "intralineDifference" : true,
+ "showTabs" : true,
+ "context" : 10,
+ "skipDeleted" : false,
+ "skipUncommented" : false,
+ "expandAllComments" : false,
+ "retainHeader" : false,
+ "manualReview" : false,
+ "showLineEndings" : true
+ },
+ "a" : {
+ "ranges" : [],
+ "size" : 0,
+ "missingNewlineAtEnd" : false
+ },
+ "b" : {
+ "path" : "org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java",
+ "ranges" : [{
+ "base" : 0,
+ "lines" : ["/*******************************************************************************", " * Copyright (c) 2014 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.compat;", "", "import com.google.gerrit.common.data.PatchScript;", "", "/**", " * Provides support for binary content.", " * ", " * @author Tomasz Zarna", " */", "public class PatchScriptX extends PatchScript {", "", "\tprivate byte[] binaryA;", "", "\tprivate byte[] binaryB;", "", "\tpublic boolean isBinary() {", "\t\tfor (String header : getPatchHeader()) {", "\t\t\tif (header.contains(\"Binary files differ\")) { //$NON-NLS-1$", "\t\t\t\treturn true;", "\t\t\t}", "\t\t}", "\t\treturn false;", "\t}", "", "\tpublic byte[] getBinaryA() {", "\t\treturn binaryA;", "\t}", "", "\tpublic void setBinaryA(byte[] binaryA) {", "\t\tthis.binaryA \u003d binaryA;", "\t}", "", "\tpublic byte[] getBinaryB() {", "\t\treturn binaryB;", "\t}", "", "\tpublic void setBinaryB(byte[] binaryB) {", "\t\tthis.binaryB \u003d binaryB;", "\t}", "", "}"]
+ }
+ ],
+ "size" : 52,
+ "missingNewlineAtEnd" : false
+ },
+ "edits" : [[0, 0, 0, 52]],
+ "displayMethodA" : "NONE",
+ "displayMethodB" : "DIFF",
+ "comments" : {
+ "a" : [],
+ "b" : [],
+ "accounts" : {
+ "accounts" : []
+ }
+ },
+ "history" : [{
+ "key" : {
+ "patchSetId" : {
+ "changeId" : {
+ "id" : 21486
+ },
+ "patchSetId" : 1
+ },
+ "fileName" : "org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java"
+ },
+ "changeType" : "M",
+ "patchType" : "U",
+ "nbrComments" : 0,
+ "nbrDrafts" : 0,
+ "insertions" : 0,
+ "deletions" : 0,
+ "reviewedByCurrentUser" : false
+ }, {
+ "key" : {
+ "patchSetId" : {
+ "changeId" : {
+ "id" : 21486
+ },
+ "patchSetId" : 2
+ },
+ "fileName" : "org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java"
+ },
+ "changeType" : "M",
+ "patchType" : "U",
+ "nbrComments" : 0,
+ "nbrDrafts" : 0,
+ "insertions" : 0,
+ "deletions" : 0,
+ "reviewedByCurrentUser" : false
+ }, {
+ "key" : {
+ "patchSetId" : {
+ "changeId" : {
+ "id" : 21486
+ },
+ "patchSetId" : 3
+ },
+ "fileName" : "org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java"
+ },
+ "changeType" : "M",
+ "patchType" : "U",
+ "nbrComments" : 2,
+ "nbrDrafts" : 0,
+ "insertions" : 0,
+ "deletions" : 0,
+ "reviewedByCurrentUser" : false
+ }, {
+ "key" : {
+ "patchSetId" : {
+ "changeId" : {
+ "id" : 21486
+ },
+ "patchSetId" : 4
+ },
+ "fileName" : "org.eclipse.mylyn.gerrit.core/src/org/eclipse/mylyn/internal/gerrit/core/client/compat/PatchScriptX.java"
+ },
+ "changeType" : "M",
+ "patchType" : "U",
+ "nbrComments" : 0,
+ "nbrDrafts" : 0,
+ "insertions" : 0,
+ "deletions" : 0,
+ "reviewedByCurrentUser" : false
+ }
+ ],
+ "hugeFile" : false,
+ "intralineDifference" : false,
+ "intralineFailure" : false,
+ "intralineTimeout" : false
+ }
+}
diff --git a/org.eclipse.mylyn.reviews.core/model/reviews.ecore b/org.eclipse.mylyn.reviews.core/model/reviews.ecore
index 2f059d7bb..f5bec44f5 100644
--- a/org.eclipse.mylyn.reviews.core/model/reviews.ecore
+++ b/org.eclipse.mylyn.reviews.core/model/reviews.ecore
@@ -126,6 +126,7 @@
<eStructuralFeatures xsi:type="ecore:EReference" name="file" eType="#//FileItem"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="fileRevision" eType="#//IFileRevision"
transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="binaryContent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EByteArray"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Indexed" abstract="true" interface="true">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="index" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
diff --git a/org.eclipse.mylyn.reviews.core/model/reviews.genmodel b/org.eclipse.mylyn.reviews.core/model/reviews.genmodel
index 1da578d04..1a49097d2 100644
--- a/org.eclipse.mylyn.reviews.core/model/reviews.genmodel
+++ b/org.eclipse.mylyn.reviews.core/model/reviews.genmodel
@@ -121,6 +121,7 @@
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute reviews.ecore#//FileVersion/content"/>
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference reviews.ecore#//FileVersion/file"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute reviews.ecore#//FileVersion/fileRevision"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute reviews.ecore#//FileVersion/binaryContent"/>
</genClasses>
<genClasses image="false" ecoreClass="reviews.ecore#//Indexed">
<genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute reviews.ecore#//Indexed/index"/>
diff --git a/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/core/model/IFileVersion.java b/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/core/model/IFileVersion.java
index 61bae1792..695f3181c 100644
--- a/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/core/model/IFileVersion.java
+++ b/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/core/model/IFileVersion.java
@@ -22,6 +22,7 @@ import org.eclipse.team.core.history.IFileRevision;
* <li>{@link org.eclipse.mylyn.reviews.core.model.IFileVersion#getContent <em>Content</em>}</li>
* <li>{@link org.eclipse.mylyn.reviews.core.model.IFileVersion#getFile <em>File</em>}</li>
* <li>{@link org.eclipse.mylyn.reviews.core.model.IFileVersion#getFileRevision <em>File Revision</em>}</li>
+ * <li>{@link org.eclipse.mylyn.reviews.core.model.IFileVersion#getBinaryContent <em>Binary Content</em>}</li>
* </ul>
* </p>
*
@@ -151,4 +152,29 @@ public interface IFileVersion extends IReviewItem {
*/
void setFileRevision(IFileRevision value);
+ /**
+ * Returns the value of the '<em><b>Binary Content</b></em>' attribute. <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Binary Content</em>' attribute isn't clear, there really should be more of a
+ * description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Binary Content</em>' attribute.
+ * @see #setBinaryContent(byte[])
+ * @generated
+ */
+ byte[] getBinaryContent();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.mylyn.reviews.core.model.IFileVersion#getBinaryContent
+ * <em>Binary Content</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Binary Content</em>' attribute.
+ * @see #getBinaryContent()
+ * @generated
+ */
+ void setBinaryContent(byte[] value);
+
} // IFileVersion
diff --git a/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/FileVersion.java b/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/FileVersion.java
index 669e13eaa..308bd22f1 100644
--- a/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/FileVersion.java
+++ b/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/FileVersion.java
@@ -30,6 +30,7 @@ import org.eclipse.team.core.history.IFileRevision;
* <li>{@link org.eclipse.mylyn.reviews.internal.core.model.FileVersion#getContent <em>Content</em>}</li>
* <li>{@link org.eclipse.mylyn.reviews.internal.core.model.FileVersion#getFile <em>File</em>}</li>
* <li>{@link org.eclipse.mylyn.reviews.internal.core.model.FileVersion#getFileRevision <em>File Revision</em>}</li>
+ * <li>{@link org.eclipse.mylyn.reviews.internal.core.model.FileVersion#getBinaryContent <em>Binary Content</em>}</li>
* </ul>
* </p>
*
@@ -127,6 +128,26 @@ public class FileVersion extends ReviewItem implements IFileVersion {
protected IFileRevision fileRevision = FILE_REVISION_EDEFAULT;
/**
+ * The default value of the '{@link #getBinaryContent() <em>Binary Content</em>}' attribute. <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getBinaryContent()
+ * @generated
+ * @ordered
+ */
+ protected static final byte[] BINARY_CONTENT_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getBinaryContent() <em>Binary Content</em>}' attribute. <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getBinaryContent()
+ * @generated
+ * @ordered
+ */
+ protected byte[] binaryContent = BINARY_CONTENT_EDEFAULT;
+
+ /**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
@@ -292,6 +313,29 @@ public class FileVersion extends ReviewItem implements IFileVersion {
*
* @generated
*/
+ public byte[] getBinaryContent() {
+ return binaryContent;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setBinaryContent(byte[] newBinaryContent) {
+ byte[] oldBinaryContent = binaryContent;
+ binaryContent = newBinaryContent;
+ if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.SET, ReviewsPackage.FILE_VERSION__BINARY_CONTENT,
+ oldBinaryContent, binaryContent));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
@@ -308,6 +352,8 @@ public class FileVersion extends ReviewItem implements IFileVersion {
return basicGetFile();
case ReviewsPackage.FILE_VERSION__FILE_REVISION:
return getFileRevision();
+ case ReviewsPackage.FILE_VERSION__BINARY_CONTENT:
+ return getBinaryContent();
}
return super.eGet(featureID, resolve, coreType);
}
@@ -335,6 +381,9 @@ public class FileVersion extends ReviewItem implements IFileVersion {
case ReviewsPackage.FILE_VERSION__FILE_REVISION:
setFileRevision((IFileRevision) newValue);
return;
+ case ReviewsPackage.FILE_VERSION__BINARY_CONTENT:
+ setBinaryContent((byte[]) newValue);
+ return;
}
super.eSet(featureID, newValue);
}
@@ -362,6 +411,9 @@ public class FileVersion extends ReviewItem implements IFileVersion {
case ReviewsPackage.FILE_VERSION__FILE_REVISION:
setFileRevision(FILE_REVISION_EDEFAULT);
return;
+ case ReviewsPackage.FILE_VERSION__BINARY_CONTENT:
+ setBinaryContent(BINARY_CONTENT_EDEFAULT);
+ return;
}
super.eUnset(featureID);
}
@@ -384,6 +436,10 @@ public class FileVersion extends ReviewItem implements IFileVersion {
return file != null;
case ReviewsPackage.FILE_VERSION__FILE_REVISION:
return FILE_REVISION_EDEFAULT == null ? fileRevision != null : !FILE_REVISION_EDEFAULT.equals(fileRevision);
+ case ReviewsPackage.FILE_VERSION__BINARY_CONTENT:
+ return BINARY_CONTENT_EDEFAULT == null
+ ? binaryContent != null
+ : !BINARY_CONTENT_EDEFAULT.equals(binaryContent);
}
return super.eIsSet(featureID);
}
@@ -408,6 +464,8 @@ public class FileVersion extends ReviewItem implements IFileVersion {
result.append(content);
result.append(", fileRevision: "); //$NON-NLS-1$
result.append(fileRevision);
+ result.append(", binaryContent: "); //$NON-NLS-1$
+ result.append(binaryContent);
result.append(')');
return result.toString();
}
diff --git a/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/ReviewsPackage.java b/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/ReviewsPackage.java
index e6dde01a3..bbc344248 100644
--- a/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/ReviewsPackage.java
+++ b/org.eclipse.mylyn.reviews.core/src/org/eclipse/mylyn/reviews/internal/core/model/ReviewsPackage.java
@@ -1333,13 +1333,21 @@ public class ReviewsPackage extends EPackageImpl {
public static final int FILE_VERSION__FILE_REVISION = REVIEW_ITEM_FEATURE_COUNT + 4;
/**
+ * The feature id for the '<em><b>Binary Content</b></em>' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ public static final int FILE_VERSION__BINARY_CONTENT = REVIEW_ITEM_FEATURE_COUNT + 5;
+
+ /**
* The number of structural features of the '<em>File Version</em>' class. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @generated
* @ordered
*/
- public static final int FILE_VERSION_FEATURE_COUNT = REVIEW_ITEM_FEATURE_COUNT + 5;
+ public static final int FILE_VERSION_FEATURE_COUNT = REVIEW_ITEM_FEATURE_COUNT + 6;
/**
* The meta object id for the '{@link org.eclipse.mylyn.reviews.internal.core.model.ApprovalType
@@ -2771,6 +2779,20 @@ public class ReviewsPackage extends EPackageImpl {
}
/**
+ * Returns the meta object for the attribute '
+ * {@link org.eclipse.mylyn.reviews.core.model.IFileVersion#getBinaryContent <em>Binary Content</em>}'. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Binary Content</em>'.
+ * @see org.eclipse.mylyn.reviews.core.model.IFileVersion#getBinaryContent()
+ * @see #getFileVersion()
+ * @generated
+ */
+ public EAttribute getFileVersion_BinaryContent() {
+ return (EAttribute) fileVersionEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
* Returns the meta object for class '{@link org.eclipse.mylyn.reviews.core.model.IIndexed <em>Indexed</em>}'. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
@@ -3212,6 +3234,7 @@ public class ReviewsPackage extends EPackageImpl {
createEAttribute(fileVersionEClass, FILE_VERSION__CONTENT);
createEReference(fileVersionEClass, FILE_VERSION__FILE);
createEAttribute(fileVersionEClass, FILE_VERSION__FILE_REVISION);
+ createEAttribute(fileVersionEClass, FILE_VERSION__BINARY_CONTENT);
indexedEClass = createEClass(INDEXED);
createEAttribute(indexedEClass, INDEXED__INDEX);
@@ -3602,6 +3625,10 @@ public class ReviewsPackage extends EPackageImpl {
getFileVersion_FileRevision(),
this.getIFileRevision(),
"fileRevision", null, 0, 1, IFileVersion.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+ initEAttribute(
+ getFileVersion_BinaryContent(),
+ ecorePackage.getEByteArray(),
+ "binaryContent", null, 0, 1, IFileVersion.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
initEClass(indexedEClass, IIndexed.class, "Indexed", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
initEAttribute(
@@ -4331,6 +4358,14 @@ public class ReviewsPackage extends EPackageImpl {
public static final EAttribute FILE_VERSION__FILE_REVISION = eINSTANCE.getFileVersion_FileRevision();
/**
+ * The meta object literal for the '<em><b>Binary Content</b></em>' attribute feature. <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final EAttribute FILE_VERSION__BINARY_CONTENT = eINSTANCE.getFileVersion_BinaryContent();
+
+ /**
* The meta object literal for the '{@link org.eclipse.mylyn.reviews.core.model.IIndexed <em>Indexed</em>}'
* class. <!-- begin-user-doc --> <!-- end-user-doc -->
*
diff --git a/org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/compare/CompareUtil.java b/org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/compare/CompareUtil.java
index a3e3f621e..6e3d763e6 100644
--- a/org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/compare/CompareUtil.java
+++ b/org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/compare/CompareUtil.java
@@ -26,7 +26,11 @@ public class CompareUtil {
public static byte[] getContent(IFileVersion version) {
String content = version.getContent();
- return (content != null) ? content.getBytes() : new byte[0];
+ if (content != null) {
+ return content.getBytes();
+ }
+ byte[] binaryContent = version.getBinaryContent();
+ return binaryContent != null ? binaryContent : new byte[0];
}
static SourceViewer getSourceViewer(MergeSourceViewer sourceViewer) {
@@ -35,7 +39,7 @@ public class CompareUtil {
} else {
Object returnValue;
try {
- Method getSourceViewerRefl = MergeSourceViewer.class.getDeclaredMethod("getSourceViewer");
+ Method getSourceViewerRefl = MergeSourceViewer.class.getDeclaredMethod("getSourceViewer"); //$NON-NLS-1$
getSourceViewerRefl.setAccessible(true);
returnValue = getSourceViewerRefl.invoke(sourceViewer);
if (returnValue instanceof SourceViewer) {

Back to the top