Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutRequest.java101
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutUpdateTask.java276
2 files changed, 208 insertions, 169 deletions
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutRequest.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutRequest.java
index 4699cb91f..4a1447d7d 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutRequest.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutRequest.java
@@ -11,14 +11,92 @@
package org.eclipse.mylyn.internal.bugzilla.rest.core;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Set;
+
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.entity.StringEntity;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.mylyn.commons.repositories.core.RepositoryLocation;
import org.eclipse.mylyn.commons.repositories.http.core.CommonHttpClient;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+
+import com.google.common.base.Function;
+import com.google.common.base.Throwables;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.TypeAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
public abstract class BugzillaRestPutRequest<T> extends BugzillaRestRequest<T> {
- public BugzillaRestPutRequest(CommonHttpClient client, String urlSuffix, boolean authenticationRequired) {
+ class TaskAttributes {
+ private final Set<TaskAttribute> taskAttributes;
+
+ public TaskAttributes(Set<TaskAttribute> taskAttributes) {
+ super();
+ this.taskAttributes = taskAttributes;
+ }
+
+ public Set<TaskAttribute> getTaskAttributes() {
+ return taskAttributes;
+ }
+
+ public boolean contains(TaskAttribute taskAttribute) {
+ return taskAttributes.contains(taskAttribute);
+ }
+
+ }
+
+ protected TaskAttributes taskAttributes;
+
+ protected final Function<String, String> function = new Function<String, String>() {
+
+ @Override
+ public String apply(String input) {
+ return BugzillaRestGsonUtil.convertString2GSonString(input);
+ }
+ };
+
+ class TaskAttributesTypeAdapter extends TypeAdapter<TaskAttributes> {
+ RepositoryLocation location;
+
+ public TaskAttributesTypeAdapter(RepositoryLocation location) {
+ super();
+ this.location = location;
+ }
+
+ @Override
+ public void write(JsonWriter out, TaskAttributes taskAttributes) throws IOException {
+ out.beginObject();
+ addAuthenticationToGson(out, location);
+ addPrefixToOutput(out);
+ for (TaskAttribute element : taskAttributes.taskAttributes) {
+ addAttributeToOutput(out, element);
+ }
+ addSuffixToOutput(out);
+ out.endObject();
+ }
+
+ @Override
+ public TaskAttributes read(JsonReader in) throws IOException {
+ throw new UnsupportedOperationException(
+ "TaskAttributeTypeAdapter in BugzillaRestPutUpdateTask only supports write"); //$NON-NLS-1$
+ }
+ }
+
+ public BugzillaRestPutRequest(CommonHttpClient client, String urlSuffix, boolean authenticationRequired,
+ @NonNull Set<TaskAttribute> taskAttributes) {
super(client, urlSuffix, authenticationRequired);
+ Assert.isNotNull(taskAttributes);
+ this.taskAttributes = new TaskAttributes(taskAttributes);
}
@Override
@@ -28,4 +106,25 @@ public abstract class BugzillaRestPutRequest<T> extends BugzillaRestRequest<T> {
return request;
}
+ @Override
+ protected void addHttpRequestEntities(HttpRequestBase request) throws BugzillaRestException {
+ super.addHttpRequestEntities(request);
+ try {
+ Gson gson = new GsonBuilder()
+ .registerTypeAdapter(TaskAttributes.class, new TaskAttributesTypeAdapter(getClient().getLocation()))
+ .create();
+ StringEntity requestEntity = new StringEntity(gson.toJson(taskAttributes));
+ ((HttpPut) request).setEntity(requestEntity);
+ } catch (UnsupportedEncodingException e) {
+ Throwables.propagate(new CoreException(
+ new Status(IStatus.ERROR, BugzillaRestCore.ID_PLUGIN, "Can not build HttpRequest", e))); //$NON-NLS-1$
+ }
+ }
+
+ public abstract void addPrefixToOutput(JsonWriter out) throws IOException;
+
+ public abstract void addAttributeToOutput(JsonWriter out, TaskAttribute element) throws IOException;
+
+ public abstract void addSuffixToOutput(JsonWriter out) throws IOException;
+
} \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutUpdateTask.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutUpdateTask.java
index bda2e8d90..81d22a9a6 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutUpdateTask.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestPutUpdateTask.java
@@ -13,52 +13,28 @@ package org.eclipse.mylyn.internal.bugzilla.rest.core;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.apache.http.entity.StringEntity;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.mylyn.commons.repositories.core.RepositoryLocation;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.mylyn.commons.repositories.http.core.CommonHttpClient;
import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.PutUpdateResult;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
-import com.google.common.base.Function;
import com.google.common.base.Joiner;
-import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;
-import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
public class BugzillaRestPutUpdateTask extends BugzillaRestPutRequest<PutUpdateResult> {
private final TaskData taskData;
- class OldAttributes {
- private final Set<TaskAttribute> oldAttributes;
-
- public OldAttributes(Set<TaskAttribute> oldAttributes) {
- super();
- this.oldAttributes = oldAttributes;
- }
-
- }
-
- OldAttributes oldAttributes;
-
ImmutableList<String> legalUpdateAttributes = new ImmutableList.Builder<String>()
.add(BugzillaRestTaskSchema.getDefault().PRODUCT.getKey())
.add(BugzillaRestTaskSchema.getDefault().COMPONENT.getKey())
@@ -85,149 +61,11 @@ public class BugzillaRestPutUpdateTask extends BugzillaRestPutRequest<PutUpdateR
.add(BugzillaRestTaskSchema.getDefault().RESET_ASSIGNED_TO.getKey())
.build();
- class TaskAttributeTypeAdapter extends TypeAdapter<OldAttributes> {
- RepositoryLocation location;
-
- public TaskAttributeTypeAdapter(RepositoryLocation location) {
- super();
- this.location = location;
- }
-
- private final Function<String, String> function = new Function<String, String>() {
-
- @Override
- public String apply(String input) {
- return BugzillaRestGsonUtil.convertString2GSonString(input);
- }
- };
-
- @Override
- public void write(JsonWriter out, OldAttributes oldValues) throws IOException {
- out.beginObject();
- addAuthenticationToGson(out, location);
- for (TaskAttribute element : oldValues.oldAttributes) {
- TaskAttribute taskAttribute = taskData.getRoot().getAttribute(element.getId());
- String id = taskAttribute.getId();
- String value = BugzillaRestGsonUtil.convertString2GSonString(taskAttribute.getValue());
- if ((legalUpdateAttributes.contains(id) || id.startsWith("cf_")) && value != null) { //$NON-NLS-1$
- id = BugzillaRestTaskSchema.getFieldNameFromAttributeName(id);
- if (id.equals("status")) { //$NON-NLS-1$
- if (value != null && value.equals(TaskAttribute.PREFIX_OPERATION + "default")) { //$NON-NLS-1$
- continue;
- }
- if (value.equals("duplicate")) { //$NON-NLS-1$
- TaskAttribute res = element.getParentAttribute()
- .getAttribute(BugzillaRestTaskSchema.getDefault().RESOLUTION.getKey());
- if (!oldAttributes.oldAttributes.contains(res)) {
- out.name("resolution").value("DUPLICATE"); //$NON-NLS-1$ //$NON-NLS-2$
- } else {
- TaskAttribute res1 = taskData.getRoot()
- .getAttribute(BugzillaRestTaskSchema.getDefault().RESOLUTION.getKey());
- res1.setValue("DUPLICATE"); //$NON-NLS-1$
- }
- value = "RESOLVED"; //$NON-NLS-1$
- }
- }
- if (taskAttribute.getMetaData().getType() != null
- && taskAttribute.getMetaData().getType().equals(TaskAttribute.TYPE_MULTI_SELECT)) {
- Iterable<String> taskIdsTemp = Iterables.transform(taskAttribute.getValues(), function);
- Joiner joiner = Joiner.on(",").skipNulls(); //$NON-NLS-1$
- value = joiner.join(taskIdsTemp);
- }
- if (id.equals(BugzillaRestTaskSchema.getDefault().NEW_COMMENT.getKey())) {
- out.name("comment").beginObject(); //$NON-NLS-1$
- out.name("body").value(value); //$NON-NLS-1$
- out.endObject();
- } else if (id.equals(BugzillaRestTaskSchema.getDefault().BLOCKS.getKey())
- || id.equals(BugzillaRestTaskSchema.getDefault().DEPENDS_ON.getKey())) {
- Set<String> setOld;
- if (element.getValues().size() > 1) {
- setOld = new HashSet<String>(element.getValues());
- } else {
- setOld = new HashSet<String>(Arrays.asList(element.getValue().split("\\s*,\\s*"))); //$NON-NLS-1$
- }
- Set<String> setNew;
- if (taskAttribute.getValues().size() > 1) {
- setNew = new HashSet<String>(taskAttribute.getValues());
- } else {
- setNew = new HashSet<String>(Arrays.asList(taskAttribute.getValue().split("\\s*,\\s*"))); //$NON-NLS-1$
- }
- BugzillaRestGsonUtil.getDefault().buildAddRemoveIntegerHash(out, id, setOld, setNew);
- } else if (id.equals(BugzillaRestTaskSchema.getDefault().KEYWORDS.getKey())) {
- Set<String> setOld = new HashSet<String>(element.getValues());
- Set<String> setNew = new HashSet<String>(taskAttribute.getValues());
- BugzillaRestGsonUtil.getDefault().buildAddRemoveHash(out, id, setOld, setNew);
- } else {
- out.name(id).value(value);
- if (id.equals("description")) { //$NON-NLS-1$
- TaskAttribute descriptionpri = taskAttribute
- .getAttribute(BugzillaRestTaskSchema.getDefault().COMMENT_ISPRIVATE.getKey());
- Boolean descriptionprivalue = (descriptionpri != null)
- ? (descriptionpri.getValue().equals("1")) //$NON-NLS-1$
- : false;
- out.name("comment_is_private").value(Boolean.toString(descriptionprivalue)); //$NON-NLS-1$
- }
- }
- }
- }
- TaskAttribute cc = taskData.getRoot().getAttribute(BugzillaRestTaskSchema.getDefault().CC.getKey());
- TaskAttribute addCC = taskData.getRoot().getAttribute(BugzillaRestTaskSchema.getDefault().ADD_CC.getKey());
- TaskAttribute removeCC = taskData.getRoot()
- .getAttribute(BugzillaRestTaskSchema.getDefault().REMOVE_CC.getKey());
- TaskAttribute addSelfCC = taskData.getRoot()
- .getAttribute(BugzillaRestTaskSchema.getDefault().ADD_SELF_CC.getKey());
- if (Boolean.valueOf(addSelfCC.getValue())) {
- String userName = addSelfCC.getMetaData().getValue("UserName"); //$NON-NLS-1$
- if (userName != null) {
- if (removeCC.getValues().contains(userName)) {
- removeCC.removeValue(userName);
- } else if (!cc.getValues().contains(userName)) {
- List<String> addCCList = Arrays.asList(addCC.getValue().split("\\s*,\\s*")); //$NON-NLS-1$
- if (!addCCList.contains(userName)) {
- addCC.setValue(userName + (addCCList.size() > 0 && !addCCList.get(0).equals("") ? ", " : "") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- + addCC.getValue());
- }
- }
- }
- }
- if (addCC.getValues().size() > 0 || removeCC.getValues().size() > 0) {
- Set<String> setOld = new HashSet<String>(removeCC.getValues());
- HashSet<String> setNew = new HashSet<String>(Arrays.asList(addCC.getValue().split("\\s*,\\s*"))); //$NON-NLS-1$
- BugzillaRestGsonUtil.getDefault().buildAddRemoveHash(out, "cc", setOld, setNew); //$NON-NLS-1$
- }
- BugzillaRestGsonUtil.buildFlags(out, oldValues.oldAttributes, taskData.getRoot());
- out.endObject();
- }
-
- @Override
- public OldAttributes read(JsonReader in) throws IOException {
- throw new UnsupportedOperationException(
- "TaskAttributeTypeAdapter in BugzillaRestPutUpdateTask only supports write"); //$NON-NLS-1$
- }
-
- }
-
- public BugzillaRestPutUpdateTask(CommonHttpClient client, TaskData taskData, Set<TaskAttribute> oldAttributes) {
- super(client, "/bug/" + taskData.getTaskId(), false); //$NON-NLS-1$
+ public BugzillaRestPutUpdateTask(CommonHttpClient client, @NonNull TaskData taskData,
+ @NonNull Set<TaskAttribute> oldAttributes) {
+ super(client, "/bug/" + taskData.getTaskId(), false, oldAttributes); //$NON-NLS-1$
+ Assert.isNotNull(taskData);
this.taskData = taskData;
- this.oldAttributes = new OldAttributes(oldAttributes);
- }
-
- List<NameValuePair> requestParameters;
-
- @Override
- protected void addHttpRequestEntities(HttpRequestBase request) throws BugzillaRestException {
- super.addHttpRequestEntities(request);
- try {
- Gson gson = new GsonBuilder()
- .registerTypeAdapter(OldAttributes.class, new TaskAttributeTypeAdapter(getClient().getLocation()))
- .create();
- StringEntity requestEntity = new StringEntity(gson.toJson(oldAttributes));
- ((HttpPut) request).setEntity(requestEntity);
- } catch (UnsupportedEncodingException e) {
- Throwables.propagate(new CoreException(
- new Status(IStatus.ERROR, BugzillaRestCore.ID_PLUGIN, "Can not build HttpRequest", e))); //$NON-NLS-1$
- }
}
public static String convert(String str) {
@@ -256,4 +94,106 @@ public class BugzillaRestPutUpdateTask extends BugzillaRestPutRequest<PutUpdateR
return new Gson().fromJson(in, type.getType());
}
+ @Override
+ public void addPrefixToOutput(JsonWriter out) throws IOException {
+ // not needed
+ }
+
+ @Override
+ public void addAttributeToOutput(JsonWriter out, TaskAttribute element) throws IOException {
+ TaskAttribute taskAttribute = taskData.getRoot().getAttribute(element.getId());
+ String id = taskAttribute.getId();
+ String value = BugzillaRestGsonUtil.convertString2GSonString(taskAttribute.getValue());
+ if ((legalUpdateAttributes.contains(id) || id.startsWith("cf_")) && value != null) { //$NON-NLS-1$
+ id = BugzillaRestTaskSchema.getFieldNameFromAttributeName(id);
+ if (id.equals("status")) { //$NON-NLS-1$
+ if (value != null && value.equals(TaskAttribute.PREFIX_OPERATION + "default")) { //$NON-NLS-1$
+ return;
+ }
+ if (value.equals("duplicate")) { //$NON-NLS-1$
+ TaskAttribute res = element.getParentAttribute()
+ .getAttribute(BugzillaRestTaskSchema.getDefault().RESOLUTION.getKey());
+ if (!taskAttributes.contains(res)) {
+ out.name("resolution").value("DUPLICATE"); //$NON-NLS-1$ //$NON-NLS-2$
+ } else {
+ TaskAttribute res1 = taskData.getRoot()
+ .getAttribute(BugzillaRestTaskSchema.getDefault().RESOLUTION.getKey());
+ res1.setValue("DUPLICATE"); //$NON-NLS-1$
+ }
+ value = "RESOLVED"; //$NON-NLS-1$
+ }
+ }
+ if (taskAttribute.getMetaData().getType() != null
+ && taskAttribute.getMetaData().getType().equals(TaskAttribute.TYPE_MULTI_SELECT)) {
+ Iterable<String> taskIdsTemp = Iterables.transform(taskAttribute.getValues(), function);
+ Joiner joiner = Joiner.on(",").skipNulls(); //$NON-NLS-1$
+ value = joiner.join(taskIdsTemp);
+ }
+ if (id.equals(BugzillaRestTaskSchema.getDefault().NEW_COMMENT.getKey())) {
+ out.name("comment").beginObject(); //$NON-NLS-1$
+ out.name("body").value(value); //$NON-NLS-1$
+ out.endObject();
+ } else if (id.equals(BugzillaRestTaskSchema.getDefault().BLOCKS.getKey())
+ || id.equals(BugzillaRestTaskSchema.getDefault().DEPENDS_ON.getKey())) {
+ Set<String> setOld;
+ if (element.getValues().size() > 1) {
+ setOld = new HashSet<String>(element.getValues());
+ } else {
+ setOld = new HashSet<String>(Arrays.asList(element.getValue().split("\\s*,\\s*"))); //$NON-NLS-1$
+ }
+ Set<String> setNew;
+ if (taskAttribute.getValues().size() > 1) {
+ setNew = new HashSet<String>(taskAttribute.getValues());
+ } else {
+ setNew = new HashSet<String>(Arrays.asList(taskAttribute.getValue().split("\\s*,\\s*"))); //$NON-NLS-1$
+ }
+ BugzillaRestGsonUtil.getDefault().buildAddRemoveIntegerHash(out, id, setOld, setNew);
+ } else if (id.equals(BugzillaRestTaskSchema.getDefault().KEYWORDS.getKey())) {
+ Set<String> setOld = new HashSet<String>(element.getValues());
+ Set<String> setNew = new HashSet<String>(taskAttribute.getValues());
+ BugzillaRestGsonUtil.getDefault().buildAddRemoveHash(out, id, setOld, setNew);
+ } else {
+ out.name(id).value(value);
+ if (id.equals("description")) { //$NON-NLS-1$
+ TaskAttribute descriptionpri = taskAttribute
+ .getAttribute(BugzillaRestTaskSchema.getDefault().COMMENT_ISPRIVATE.getKey());
+ Boolean descriptionprivalue = (descriptionpri != null)
+ ? (descriptionpri.getValue().equals("1")) //$NON-NLS-1$
+ : false;
+ out.name("comment_is_private").value(Boolean.toString(descriptionprivalue)); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+
+ @Override
+ public void addSuffixToOutput(JsonWriter out) throws IOException {
+ TaskAttribute cc = taskData.getRoot().getAttribute(BugzillaRestTaskSchema.getDefault().CC.getKey());
+ TaskAttribute addCC = taskData.getRoot().getAttribute(BugzillaRestTaskSchema.getDefault().ADD_CC.getKey());
+ TaskAttribute removeCC = taskData.getRoot()
+ .getAttribute(BugzillaRestTaskSchema.getDefault().REMOVE_CC.getKey());
+ TaskAttribute addSelfCC = taskData.getRoot()
+ .getAttribute(BugzillaRestTaskSchema.getDefault().ADD_SELF_CC.getKey());
+ if (Boolean.valueOf(addSelfCC.getValue())) {
+ String userName = addSelfCC.getMetaData().getValue("UserName"); //$NON-NLS-1$
+ if (userName != null) {
+ if (removeCC.getValues().contains(userName)) {
+ removeCC.removeValue(userName);
+ } else if (!cc.getValues().contains(userName)) {
+ List<String> addCCList = Arrays.asList(addCC.getValue().split("\\s*,\\s*")); //$NON-NLS-1$
+ if (!addCCList.contains(userName)) {
+ addCC.setValue(userName + (addCCList.size() > 0 && !addCCList.get(0).equals("") ? ", " : "") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ + addCC.getValue());
+ }
+ }
+ }
+ }
+ if (addCC.getValues().size() > 0 || removeCC.getValues().size() > 0) {
+ Set<String> setOld = new HashSet<String>(removeCC.getValues());
+ HashSet<String> setNew = new HashSet<String>(Arrays.asList(addCC.getValue().split("\\s*,\\s*"))); //$NON-NLS-1$
+ BugzillaRestGsonUtil.getDefault().buildAddRemoveHash(out, "cc", setOld, setNew); //$NON-NLS-1$
+ }
+ BugzillaRestGsonUtil.buildFlags(out, taskAttributes.getTaskAttributes(), taskData.getRoot());
+ }
+
} \ No newline at end of file

Back to the top