diff --git a/feature/feature.xml b/feature/feature.xml index af95e2e..4dbfa5b 100644 --- a/feature/feature.xml +++ b/feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/feature/pom.xml b/feature/pom.xml index b36f2ad..8ef746c 100644 --- a/feature/pom.xml +++ b/feature/pom.xml @@ -7,7 +7,7 @@ com.siemens.bt.jazz.services.WorkItemBulkMover com.siemens.bt.jazz.services.WorkItemBulkMover.parent - 1.5.2-SNAPSHOT + 1.5.3-SNAPSHOT ../ diff --git a/plugin/META-INF/MANIFEST.MF b/plugin/META-INF/MANIFEST.MF index 7dba4d9..d370c89 100644 --- a/plugin/META-INF/MANIFEST.MF +++ b/plugin/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: com.siemens.bt.jazz.services.WorkItemBulkMover Bundle-SymbolicName: com.siemens.bt.jazz.services.WorkItemBulkMover;singleton:=true -Bundle-Version: 1.5.2.qualifier +Bundle-Version: 1.5.3.qualifier Bundle-Vendor: VENDOR Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Require-Bundle: @@ -32,7 +32,7 @@ Require-Bundle: com.ibm.team.process.common, com.ibm.team.process.service Bundle-ClassPath: target/dependency/gson-2.8.5.jar, - target/dependency/com.siemens.bt.jazz.services.base-3.0.3-SNAPSHOT.jar, + target/dependency/com.siemens.bt.jazz.services.base-4.0.0-SNAPSHOT.jar, . Import-Package: com.ibm.team.jfs.app, com.ibm.team.jfs.app.http.util, diff --git a/plugin/pom.xml b/plugin/pom.xml index 8433dc8..834ab9e 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -4,11 +4,26 @@ com.siemens.bt.jazz.services.WorkItemBulkMover eclipse-plugin - + com.siemens.bt.jazz.services.WorkItemBulkMover com.siemens.bt.jazz.services.WorkItemBulkMover.parent - 1.5.2-SNAPSHOT + 1.5.3-SNAPSHOT ../ + + + + ${basedir} + true + + plugin.xml + + + + ${basedir}/src/main/resources + false + + + diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverService.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverService.java index 1460bb4..87ae6b6 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverService.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverService.java @@ -5,13 +5,27 @@ import com.siemens.bt.jazz.services.WorkItemBulkMover.services.ProjectAreaService; import com.siemens.bt.jazz.services.WorkItemBulkMover.services.ProjectAreaTypeService; import com.siemens.bt.jazz.services.base.BaseService; +import com.siemens.bt.jazz.services.base.configuration.Configuration; +import com.siemens.bt.jazz.services.base.configuration.preset.ContentConfigurator; +import com.siemens.bt.jazz.services.base.configuration.preset.EncodingConfigurator; +import org.apache.http.entity.ContentType; + +import java.nio.charset.StandardCharsets; public class WorkItemBulkMoverService extends BaseService implements IWorkItemBulkMoverService { public WorkItemBulkMoverService() { super(); - router.get("info", InfoService.class); - router.post("move", MoveService.class); - router.get("project-areas", ProjectAreaService.class); - router.get("types", ProjectAreaTypeService.class); + + // create an encoding configurator that sets utf 8 encoding for all responses + EncodingConfigurator utf = new EncodingConfigurator(StandardCharsets.UTF_8.name()); + // create a content configurator that sets the response type to application/xml + ContentConfigurator xml = new ContentConfigurator(ContentType.APPLICATION_JSON.toString()); + // wrap the configurators in a configuration + Configuration response = new Configuration(utf, xml); + + router.get("info", InfoService.class, response); + router.post("move", MoveService.class, response); + router.get("project-areas", ProjectAreaService.class, response); + router.get("types", ProjectAreaTypeService.class, response); } } diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/FoundInHelpers.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/FoundInHelpers.java index c41e5c7..94ba52e 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/FoundInHelpers.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/FoundInHelpers.java @@ -4,7 +4,10 @@ import com.ibm.team.repository.common.TeamRepositoryException; import com.ibm.team.repository.service.IRepositoryItemService; import com.ibm.team.repository.service.TeamRawService; -import com.ibm.team.workitem.common.model.*; +import com.ibm.team.workitem.common.model.IAttribute; +import com.ibm.team.workitem.common.model.IDeliverable; +import com.ibm.team.workitem.common.model.IDeliverableHandle; +import com.ibm.team.workitem.common.model.IWorkItem; import com.ibm.team.workitem.service.IWorkItemServer; import com.siemens.bt.jazz.services.WorkItemBulkMover.bulkMover.models.AttributeValue; import org.eclipse.core.runtime.IProgressMonitor; diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/RankHelpers.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/RankHelpers.java index 2a21b03..c807d34 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/RankHelpers.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/helpers/RankHelpers.java @@ -11,7 +11,6 @@ public final class RankHelpers { public static void unsetRank(IWorkItem wi, IWorkItemServer wiSrv) throws TeamRepositoryException { IAttribute attr = wiSrv.findAttribute(wi.getProjectArea(), RANK_ATTR_ID, null); if(wi.hasAttribute(attr)) { - Object existing = wi.getValue(attr); wi.removeCustomAttribute(attr); } } diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MappingDefinition.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MappingDefinition.java index dd54fc1..dc6a552 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MappingDefinition.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MappingDefinition.java @@ -2,7 +2,6 @@ import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; -import com.siemens.bt.jazz.services.WorkItemBulkMover.rtc.models.WorkItem; import java.util.ArrayList; import java.util.List; diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MovePreparationResult.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MovePreparationResult.java index 0a9882a..d00e4db 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MovePreparationResult.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/models/MovePreparationResult.java @@ -1,10 +1,10 @@ package com.siemens.bt.jazz.services.WorkItemBulkMover.bulkMover.models; +import com.ibm.team.workitem.common.model.IWorkItem; + import java.util.Collection; import java.util.List; -import com.ibm.team.workitem.common.model.IWorkItem; - /** * wrapper class holding all neccessary data for move service to return back to the caller */ diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/operations/BulkMoveOperation.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/operations/BulkMoveOperation.java index 2e794fb..fb0177b 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/operations/BulkMoveOperation.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/bulkMover/operations/BulkMoveOperation.java @@ -1,12 +1,5 @@ package com.siemens.bt.jazz.services.WorkItemBulkMover.bulkMover.operations; -import java.util.ArrayList; -import java.util.List; - -import com.siemens.bt.jazz.services.WorkItemBulkMover.bulkMover.models.WorkItemMoveMapper; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; - import com.ibm.team.links.common.IItemReference; import com.ibm.team.links.common.ILink; import com.ibm.team.links.common.ILinkQueryPage; @@ -21,16 +14,16 @@ import com.ibm.team.workitem.common.internal.model.Attachment; import com.ibm.team.workitem.common.internal.util.EMFHelper; import com.ibm.team.workitem.common.internal.util.PermissionContext; -import com.ibm.team.workitem.common.model.IAttachment; -import com.ibm.team.workitem.common.model.IAttachmentHandle; -import com.ibm.team.workitem.common.model.ITimeSheetEntry; -import com.ibm.team.workitem.common.model.IWorkItem; -import com.ibm.team.workitem.common.model.IWorkItemReferences; -import com.ibm.team.workitem.common.model.IWorkItemType; -import com.ibm.team.workitem.common.model.WorkItemEndPoints; +import com.ibm.team.workitem.common.model.*; import com.ibm.team.workitem.service.IWorkItemServer; +import com.siemens.bt.jazz.services.WorkItemBulkMover.bulkMover.models.WorkItemMoveMapper; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.ecore.EObject; +import java.util.ArrayList; +import java.util.List; + /** * The Core Operation responsible for moving work items from one project area to another * extends the 'CopyToProjectOperation' offered by IBM out of the box diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/InfoService.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/InfoService.java index 6c0b42e..63e5e4e 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/InfoService.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/InfoService.java @@ -3,8 +3,8 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import com.ibm.team.repository.service.TeamRawService; +import com.siemens.bt.jazz.services.base.configuration.Configuration; import com.siemens.bt.jazz.services.base.rest.parameters.PathParameters; -import com.siemens.bt.jazz.services.base.rest.parameters.RestRequest; import com.siemens.bt.jazz.services.base.rest.service.AbstractRestService; import org.apache.commons.logging.Log; import org.eclipse.core.runtime.Platform; @@ -15,8 +15,9 @@ import java.io.IOException; public class InfoService extends AbstractRestService { - public InfoService(Log log, HttpServletRequest request, HttpServletResponse response, RestRequest restRequest, TeamRawService parentService, PathParameters pathParameters) { - super(log, request, response, restRequest, parentService, pathParameters); + + public InfoService(String uri, Log log, HttpServletRequest request, HttpServletResponse response, Configuration configuration, TeamRawService parentService, PathParameters pathParameters) { + super(uri, log, request, response, configuration, parentService, pathParameters); } public void execute() throws IOException { diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/MoveService.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/MoveService.java index 62c911b..68495b2 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/MoveService.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/MoveService.java @@ -3,6 +3,7 @@ import com.google.gson.*; import com.google.gson.reflect.TypeToken; import com.ibm.team.process.common.IProjectAreaHandle; +import com.ibm.team.repository.common.TeamRepositoryException; import com.ibm.team.repository.service.TeamRawService; import com.ibm.team.workitem.common.internal.IAdditionalSaveParameters; import com.ibm.team.workitem.common.model.IWorkItem; @@ -13,8 +14,8 @@ import com.siemens.bt.jazz.services.WorkItemBulkMover.bulkMover.models.TypeMappingEntry; import com.siemens.bt.jazz.services.WorkItemBulkMover.helpers.ProjectAreaHelpers; import com.siemens.bt.jazz.services.WorkItemBulkMover.helpers.WorkItemHelpers; +import com.siemens.bt.jazz.services.base.configuration.Configuration; import com.siemens.bt.jazz.services.base.rest.parameters.PathParameters; -import com.siemens.bt.jazz.services.base.rest.parameters.RestRequest; import com.siemens.bt.jazz.services.base.rest.service.AbstractRestService; import com.siemens.bt.jazz.services.base.utils.RequestReader; import org.apache.commons.logging.Log; @@ -24,7 +25,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; import java.lang.reflect.Type; import java.util.*; @@ -37,9 +40,8 @@ public class MoveService extends AbstractRestService { private Type typeMappingCollectionType; private Type resultsType; - public MoveService(Log log, HttpServletRequest request, HttpServletResponse response, - RestRequest restRequest, TeamRawService parentService, PathParameters pathParameters) { - super(log, request, response, restRequest, parentService, pathParameters); + public MoveService(String uri, Log log, HttpServletRequest request, HttpServletResponse response, Configuration configuration, TeamRawService parentService, PathParameters pathParameters) { + super(uri, log, request, response, configuration, parentService, pathParameters); this.workItemServer = parentService.getService(IWorkItemServer.class); this.monitor = new NullProgressMonitor(); this.gson = new GsonBuilder().serializeNulls().create(); @@ -60,7 +62,8 @@ public void execute() throws IOException { Collection moveResults = null; // read request data - JsonObject workItemData = RequestReader.readAsJson(request); + JsonObject workItemData = RequestReader.readAsJson(request, "UTF-8"); + JsonPrimitive previewPrimitive = workItemData.getAsJsonPrimitive("previewOnly"); JsonPrimitive skipEmailPrimitive = workItemData.getAsJsonPrimitive("skipEmail"); JsonPrimitive removeRankPrimitive = workItemData.getAsJsonPrimitive("removeRank"); @@ -94,6 +97,10 @@ public void execute() throws IOException { // resolve project area IProjectAreaHandle targetArea = ProjectAreaHelpers.getProjectArea(targetPA.getAsString(), parentService); + if(targetArea == null) { + throw new TeamRepositoryException("The target project area provided by the client plugin cannot be found on the server!"); + } + // prepare movement and track fields to be changed MovePreparationResult preparationResult = mover.PrepareMove(items, targetArea, clientMappingDefinitions, typeMap, removeRank); @@ -118,17 +125,14 @@ public void execute() throws IOException { } } catch (Exception e) { // Inform the user the the items could not be moved - error = e.getMessage(); - if(error == null) { - error = e.toString(); - } + error = e.toString(); } if(error != null) { responseJson.addProperty("error", error); } - // prepare data to be returend + // prepare data to be returned responseJson.addProperty("successful", isMoved); responseJson.add("mapping", gson.toJsonTree(moveResults, resultsType)); response.getWriter().write(gson.toJson(responseJson)); diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaService.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaService.java index dd27bba..e82343d 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaService.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaService.java @@ -9,8 +9,8 @@ import com.ibm.team.repository.service.IRepositoryItemService; import com.ibm.team.repository.service.TeamRawService; import com.siemens.bt.jazz.services.WorkItemBulkMover.rtc.models.ProjectArea; +import com.siemens.bt.jazz.services.base.configuration.Configuration; import com.siemens.bt.jazz.services.base.rest.parameters.PathParameters; -import com.siemens.bt.jazz.services.base.rest.parameters.RestRequest; import com.siemens.bt.jazz.services.base.rest.service.AbstractRestService; import org.apache.commons.logging.Log; @@ -20,14 +20,13 @@ public class ProjectAreaService extends AbstractRestService { - public ProjectAreaService(Log log, HttpServletRequest request, HttpServletResponse response, - RestRequest restRequest, TeamRawService parentService, PathParameters pathParameters) { - super(log, request, response, restRequest, parentService, pathParameters); + public ProjectAreaService(String uri, Log log, HttpServletRequest request, HttpServletResponse response, Configuration configuration, TeamRawService parentService, PathParameters pathParameters) { + super(uri, log, request, response, configuration, parentService, pathParameters); } public void execute() { Gson googleJson = new Gson(); - String ignoredProjectAreas = restRequest.getParameterValue("ignore"); + String ignoredProjectAreas = request.getParameter("ignore"); List ignorePrjAreaList; if(ignoredProjectAreas != null && ignoredProjectAreas.length() > 0) { ignorePrjAreaList = Arrays.asList(ignoredProjectAreas.split(",")); diff --git a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaTypeService.java b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaTypeService.java index d720c31..39499c3 100644 --- a/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaTypeService.java +++ b/plugin/src/main/java/com/siemens/bt/jazz/services/WorkItemBulkMover/services/ProjectAreaTypeService.java @@ -10,8 +10,8 @@ import com.ibm.team.workitem.service.IWorkItemServer; import com.siemens.bt.jazz.services.WorkItemBulkMover.bulkMover.helpers.WorkItemTypeHelpers; import com.siemens.bt.jazz.services.WorkItemBulkMover.helpers.ProjectAreaHelpers; +import com.siemens.bt.jazz.services.base.configuration.Configuration; import com.siemens.bt.jazz.services.base.rest.parameters.PathParameters; -import com.siemens.bt.jazz.services.base.rest.parameters.RestRequest; import com.siemens.bt.jazz.services.base.rest.service.AbstractRestService; import org.apache.commons.logging.Log; import org.eclipse.core.runtime.NullProgressMonitor; @@ -25,13 +25,13 @@ import java.util.TreeMap; public class ProjectAreaTypeService extends AbstractRestService { - public ProjectAreaTypeService(Log log, HttpServletRequest request, HttpServletResponse response, - RestRequest restRequest, TeamRawService parentService, PathParameters pathParameters) { - super(log, request, response, restRequest, parentService, pathParameters); + + public ProjectAreaTypeService(String uri, Log log, HttpServletRequest request, HttpServletResponse response, Configuration configuration, TeamRawService parentService, PathParameters pathParameters) { + super(uri, log, request, response, configuration, parentService, pathParameters); } public void execute() throws IOException, URISyntaxException { - String pa = restRequest.getParameterValue("project-area"); + String pa = request.getParameter("project-area"); Map typeMap = new TreeMap(); try { IProjectAreaHandle targetArea = ProjectAreaHelpers.getProjectArea(pa, parentService); diff --git a/pom.xml b/pom.xml index fd2e588..05baff1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.siemens.bt.jazz.services.WorkItemBulkMover com.siemens.bt.jazz.services.WorkItemBulkMover.parent - 1.5.2-SNAPSHOT + 1.5.3-SNAPSHOT pom @@ -24,7 +24,7 @@ com.siemens.bt.jazz.services.base com.siemens.bt.jazz.services.base - 3.0.3-SNAPSHOT + 4.0.0-SNAPSHOT com.google.code.gson diff --git a/test/pom.xml b/test/pom.xml index ffefdba..575982c 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -6,7 +6,7 @@ com.siemens.bt.jazz.services.WorkItemBulkMover com.siemens.bt.jazz.services.WorkItemBulkMover.parent - 1.5.2-SNAPSHOT + 1.5.3-SNAPSHOT ../ diff --git a/test/src/test/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverServiceTest.java b/test/src/test/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverServiceTest.java index 66ef674..c2fab3f 100644 --- a/test/src/test/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverServiceTest.java +++ b/test/src/test/java/com/siemens/bt/jazz/services/WorkItemBulkMover/WorkItemBulkMoverServiceTest.java @@ -2,7 +2,7 @@ import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class WorkItemBulkMoverServiceTest { diff --git a/update-site/pom.xml b/update-site/pom.xml index 7a96153..11b2e10 100644 --- a/update-site/pom.xml +++ b/update-site/pom.xml @@ -7,7 +7,7 @@ com.siemens.bt.jazz.services.WorkItemBulkMover com.siemens.bt.jazz.services.WorkItemBulkMover.parent - 1.5.2-SNAPSHOT + 1.5.3-SNAPSHOT ../