Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordonald.g.dunne2015-10-22 17:41:47 +0000
committerRyan D. Brooks2015-10-22 17:41:47 +0000
commita135552778dff6290526b48a9fa6771a74fde672 (patch)
tree31452ccf19a94d2e53f288ebc7e2069e4ed7ff19
parentf8e2cb2f199f4c69a70d648471c0843beee68805 (diff)
downloadorg.eclipse.osee-a135552778dff6290526b48a9fa6771a74fde672.tar.gz
org.eclipse.osee-a135552778dff6290526b48a9fa6771a74fde672.tar.xz
org.eclipse.osee-a135552778dff6290526b48a9fa6771a74fde672.zip
feature[ats_ATS184131]: Create Work Package Endpoint
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/AtsWorkPackageEndpointApi.java46
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/JaxWorkPackageData.java42
-rw-r--r--plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/AtsClientService.java34
-rw-r--r--plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsTest_EV_TestSuite.java7
-rw-r--r--plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsWorkPackageEndpointImplTest.java59
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF7
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientService.java5
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemJsonReader.java61
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemsJsonReader.java71
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java4
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java114
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemJsonWriter.java1
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemsJsonWriter.java16
-rw-r--r--plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java18
14 files changed, 453 insertions, 32 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/AtsWorkPackageEndpointApi.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/AtsWorkPackageEndpointApi.java
new file mode 100644
index 00000000000..df2a89ebd1f
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/AtsWorkPackageEndpointApi.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ats.api.ev;
+
+import java.util.Collection;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.eclipse.osee.ats.api.IAtsWorkItem;
+
+/**
+ * @author Donald D. Dunne
+ */
+@Path("workpackage")
+public interface AtsWorkPackageEndpointApi {
+
+ @GET
+ @Path("{workPackageId}/workitem")
+ @Produces({MediaType.APPLICATION_JSON})
+ public Collection<IAtsWorkItem> getWorkItems(@PathParam("workPackageId") long workPackageId);
+
+ @PUT
+ @Path("{workPackageId}")
+ @Consumes({MediaType.APPLICATION_JSON})
+ public abstract Response setWorkPackage(@PathParam("workPackageId") long workPackageId, JaxWorkPackageData workPackageData);
+
+ @DELETE
+ @Path("{workPackageId}/workitem")
+ @Consumes({MediaType.APPLICATION_JSON})
+ Response deleteWorkPackageItems(@PathParam("workPackageId") long workPackageId, JaxWorkPackageData workPackageData);
+
+}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/JaxWorkPackageData.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/JaxWorkPackageData.java
new file mode 100644
index 00000000000..a6171e15b40
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/JaxWorkPackageData.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ats.api.ev;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class JaxWorkPackageData {
+ String asUserId;
+ List<Long> workItemUuids = new ArrayList<>();
+
+ public JaxWorkPackageData() {
+ }
+
+ public List<Long> getWorkItemUuids() {
+ return workItemUuids;
+ }
+
+ public void setWorkItemUuids(List<Long> workItemUuids) {
+ this.workItemUuids = workItemUuids;
+ }
+
+ public String getAsUserId() {
+ return asUserId;
+ }
+
+ public void setAsUserId(String asUserId) {
+ this.asUserId = asUserId;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/AtsClientService.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/AtsClientService.java
index f638128eddb..4ab8e0f7821 100644
--- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/AtsClientService.java
+++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/AtsClientService.java
@@ -13,6 +13,7 @@ package org.eclipse.osee.ats.client.integration.tests;
import org.eclipse.osee.ats.api.agile.AgileEndpointApi;
import org.eclipse.osee.ats.api.config.AtsConfigEndpointApi;
import org.eclipse.osee.ats.api.country.CountryEndpointApi;
+import org.eclipse.osee.ats.api.ev.AtsWorkPackageEndpointApi;
import org.eclipse.osee.ats.api.insertion.InsertionActivityEndpointApi;
import org.eclipse.osee.ats.api.insertion.InsertionEndpointApi;
import org.eclipse.osee.ats.api.notify.AtsNotifyEndpointApi;
@@ -20,6 +21,8 @@ import org.eclipse.osee.ats.api.program.ProgramEndpointApi;
import org.eclipse.osee.ats.api.task.AtsTaskEndpointApi;
import org.eclipse.osee.ats.api.workflow.AtsRuleEndpointApi;
import org.eclipse.osee.ats.core.client.IAtsClient;
+import org.eclipse.osee.ats.core.client.workflow.WorkItemJsonReader;
+import org.eclipse.osee.ats.core.client.workflow.WorkItemsJsonReader;
import org.eclipse.osee.framework.core.client.OseeClientProperties;
import org.eclipse.osee.jaxrs.client.JaxRsClient;
import org.eclipse.osee.jaxrs.client.JaxRsWebTarget;
@@ -42,6 +45,7 @@ public class AtsClientService {
private static AtsRuleEndpointApi ruleEp;
private static AtsNotifyEndpointApi notifyEp;
private static AtsConfigEndpointApi configEp;
+ private static AtsWorkPackageEndpointApi workPackageEp;
public void setAtsClient(IAtsClient atsClient) {
AtsClientService.atsClient = atsClient;
@@ -51,19 +55,20 @@ public class AtsClientService {
return atsClient;
}
- private static JaxRsWebTarget getTarget() {
+ private static JaxRsWebTarget getAtsTarget() {
if (target == null) {
String appServer = OseeClientProperties.getOseeApplicationServer();
String atsUri = String.format("%s/ats", appServer);
JaxRsClient jaxRsClient = JaxRsClient.newBuilder().createThreadSafeProxyClients(true).build();
- target = jaxRsClient.target(atsUri);
+ target = jaxRsClient.target(atsUri).register(WorkItemJsonReader.class);
+ target = target.register(WorkItemsJsonReader.class);
}
return target;
}
public static AgileEndpointApi getAgile() {
if (agile == null) {
- agile = getTarget().newProxy(AgileEndpointApi.class);
+ agile = getAtsTarget().newProxy(AgileEndpointApi.class);
}
return agile;
}
@@ -80,58 +85,65 @@ public class AtsClientService {
public static CountryEndpointApi getCountryEp() {
if (countryEp == null) {
- countryEp = getTarget().newProxy(CountryEndpointApi.class);
+ countryEp = getAtsTarget().newProxy(CountryEndpointApi.class);
}
return countryEp;
}
public static ProgramEndpointApi getProgramEp() {
if (programEp == null) {
- programEp = getTarget().newProxy(ProgramEndpointApi.class);
+ programEp = getAtsTarget().newProxy(ProgramEndpointApi.class);
}
return programEp;
}
public static InsertionEndpointApi getInsertionEp() {
if (insertionEp == null) {
- insertionEp = getTarget().newProxy(InsertionEndpointApi.class);
+ insertionEp = getAtsTarget().newProxy(InsertionEndpointApi.class);
}
return insertionEp;
}
public static InsertionActivityEndpointApi getInsertionActivityEp() {
if (insertionActivityEp == null) {
- insertionActivityEp = getTarget().newProxy(InsertionActivityEndpointApi.class);
+ insertionActivityEp = getAtsTarget().newProxy(InsertionActivityEndpointApi.class);
}
return insertionActivityEp;
}
public static AtsTaskEndpointApi getTaskEp() {
if (taskEp == null) {
- taskEp = getTarget().newProxy(AtsTaskEndpointApi.class);
+ taskEp = getAtsTarget().newProxy(AtsTaskEndpointApi.class);
}
return taskEp;
}
public static AtsRuleEndpointApi getRuleEp() {
if (ruleEp == null) {
- ruleEp = getTarget().newProxy(AtsRuleEndpointApi.class);
+ ruleEp = getAtsTarget().newProxy(AtsRuleEndpointApi.class);
}
return ruleEp;
}
public static AtsNotifyEndpointApi getNotifyEndpoint() {
if (notifyEp == null) {
- notifyEp = getTarget().newProxy(AtsNotifyEndpointApi.class);
+ notifyEp = getAtsTarget().newProxy(AtsNotifyEndpointApi.class);
}
return notifyEp;
}
public static AtsConfigEndpointApi getConfigEndpoint() {
if (configEp == null) {
- configEp = getTarget().newProxy(AtsConfigEndpointApi.class);
+ configEp = getAtsTarget().newProxy(AtsConfigEndpointApi.class);
}
return configEp;
}
+ public static AtsWorkPackageEndpointApi getWorkPackageEndpoint() {
+ if (workPackageEp == null) {
+ workPackageEp = getAtsTarget().newProxy(AtsWorkPackageEndpointApi.class);
+ }
+ return workPackageEp;
+ }
+
}
diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsTest_EV_TestSuite.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsTest_EV_TestSuite.java
index b357e14785c..0213d85f79b 100644
--- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsTest_EV_TestSuite.java
+++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsTest_EV_TestSuite.java
@@ -14,9 +14,12 @@ import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
-@Suite.SuiteClasses({SearchWorkPackageOperationTest.class, EarnedValueReportOperationTest.class})
+@Suite.SuiteClasses({
+ EarnedValueReportOperationTest.class,
+ AtsWorkPackageEndpointImplTest.class,
+ SearchWorkPackageOperationTest.class})
+
/**
- *
* @author Donald G. Dunne
*/
public class AtsTest_EV_TestSuite {
diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsWorkPackageEndpointImplTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsWorkPackageEndpointImplTest.java
new file mode 100644
index 00000000000..204a6ee6cf6
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/ev/AtsWorkPackageEndpointImplTest.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ats.client.integration.tests.ats.ev;
+
+import static org.junit.Assert.assertEquals;
+import java.util.Collection;
+import org.eclipse.osee.ats.api.IAtsWorkItem;
+import org.eclipse.osee.ats.api.ev.AtsWorkPackageEndpointApi;
+import org.eclipse.osee.ats.api.ev.JaxWorkPackageData;
+import org.eclipse.osee.ats.client.integration.tests.AtsClientService;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test Unit for {@link AtsWorkPackageEndpointImpl}
+ *
+ * @author Donald G. Dunne
+ */
+public class AtsWorkPackageEndpointImplTest {
+
+ public static Long SAW_Code_Team_WorkPackage_01 = 38512616L;
+ private AtsWorkPackageEndpointApi workPackageEp;
+
+ @Before
+ public void setup() {
+ workPackageEp = AtsClientService.getWorkPackageEndpoint();
+ }
+
+ @Test
+ public void testGetWorkItems() {
+ Collection<IAtsWorkItem> workItems = workPackageEp.getWorkItems(SAW_Code_Team_WorkPackage_01);
+ assertEquals(2, workItems.size());
+ }
+
+ @Test
+ public void testSetRemoveWorkPackageItems() {
+ Collection<IAtsWorkItem> workItems = workPackageEp.getWorkItems(SAW_Code_Team_WorkPackage_01);
+ assertEquals(2, workItems.size());
+ IAtsWorkItem workItem = workItems.iterator().next();
+ JaxWorkPackageData data = new JaxWorkPackageData();
+ data.setAsUserId(AtsClientService.get().getUserService().getCurrentUserId());
+ data.getWorkItemUuids().add(workItem.getUuid());
+
+ workPackageEp.deleteWorkPackageItems(SAW_Code_Team_WorkPackage_01, data);
+ assertEquals(1, workPackageEp.getWorkItems(SAW_Code_Team_WorkPackage_01).size());
+
+ workPackageEp.setWorkPackage(SAW_Code_Team_WorkPackage_01, data);
+ assertEquals(2, workPackageEp.getWorkItems(SAW_Code_Team_WorkPackage_01).size());
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF
index 3a26178f2eb..787721905dc 100644
--- a/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.ats.core.client/META-INF/MANIFEST.MF
@@ -9,8 +9,11 @@ Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: com.google.common.cache,
com.google.inject,
- javax.ws.rs.client;version="2.0.0",
- javax.ws.rs.core;version="2.0.0",
+ javax.ws.rs,
+ javax.ws.rs.client,
+ javax.ws.rs.core,
+ javax.ws.rs.ext,
+ org.codehaus.jackson,
org.eclipse.core.runtime,
org.eclipse.core.runtime.jobs,
org.eclipse.osee.ats.core.ai,
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientService.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientService.java
index 4c0fb9fcbce..c2002bd386b 100644
--- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientService.java
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientService.java
@@ -14,6 +14,7 @@ import org.eclipse.osee.ats.api.notify.AtsNotifyEndpointApi;
import org.eclipse.osee.ats.api.task.AtsTaskEndpointApi;
import org.eclipse.osee.ats.api.workflow.AtsRuleEndpointApi;
import org.eclipse.osee.ats.core.client.IAtsClient;
+import org.eclipse.osee.ats.core.client.workflow.WorkItemJsonReader;
import org.eclipse.osee.framework.core.client.OseeClientProperties;
import org.eclipse.osee.jaxrs.client.JaxRsClient;
import org.eclipse.osee.jaxrs.client.JaxRsWebTarget;
@@ -42,7 +43,7 @@ public class AtsClientService {
String appServer = OseeClientProperties.getOseeApplicationServer();
String atsUri = String.format("%s/ats", appServer);
JaxRsClient jaxRsClient = JaxRsClient.newBuilder().createThreadSafeProxyClients(true).build();
- target = jaxRsClient.target(atsUri);
+ target = jaxRsClient.target(atsUri).register(WorkItemJsonReader.class);
}
return target;
}
@@ -60,7 +61,7 @@ public class AtsClientService {
}
return notifyEp;
}
-
+
public static AtsRuleEndpointApi getRuleEp() {
if (ruleEp == null) {
ruleEp = getTarget().newProxy(AtsRuleEndpointApi.class);
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemJsonReader.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemJsonReader.java
new file mode 100644
index 00000000000..18b02cbeb88
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemJsonReader.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ats.core.client.workflow;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.Provider;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonParser;
+import org.codehaus.jackson.JsonToken;
+import org.eclipse.osee.ats.api.IAtsWorkItem;
+import org.eclipse.osee.ats.core.client.internal.AtsClientService;
+import org.eclipse.osee.framework.jdk.core.type.VariantData;
+
+/**
+ * @author Donald G. Dunne
+ */
+@Provider
+public class WorkItemJsonReader implements MessageBodyReader<IAtsWorkItem> {
+
+ @Override
+ public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+ return type == IAtsWorkItem.class;
+ }
+
+ @Override
+ public IAtsWorkItem readFrom(Class<IAtsWorkItem> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException {
+ try {
+ JsonFactory jfactory = new JsonFactory();
+ JsonParser jParser = jfactory.createJsonParser(entityStream);
+
+ VariantData varData = new VariantData();
+ while (jParser.nextToken() != JsonToken.END_OBJECT) {
+ String key = jParser.getCurrentName();
+ if (key != null) {
+ jParser.nextToken();
+ String value = jParser.getText();
+ varData.put(key, value);
+ }
+ }
+ long uuid = Long.valueOf(varData.get("uuid"));
+ return AtsClientService.get().getQueryService().createQuery().andUuids(uuid).getResults().getAtMostOneOrNull();
+ } catch (Exception ex) {
+ throw new IOException("Error deserializing a TraxRpcr Item.", ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemsJsonReader.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemsJsonReader.java
new file mode 100644
index 00000000000..e6726460e43
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/WorkItemsJsonReader.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ats.core.client.workflow;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.Provider;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonParser;
+import org.codehaus.jackson.JsonToken;
+import org.eclipse.osee.ats.api.IAtsWorkItem;
+import org.eclipse.osee.ats.core.client.internal.AtsClientService;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * @author Donald G. Dunne
+ */
+@Provider
+public class WorkItemsJsonReader implements MessageBodyReader<Collection<IAtsWorkItem>> {
+
+ @Override
+ public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+ return Lib.isCollectionOfType(type, genericType, IAtsWorkItem.class);
+ }
+
+ @Override
+ public Collection<IAtsWorkItem> readFrom(Class<Collection<IAtsWorkItem>> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException {
+ try {
+ JsonFactory jfactory = new JsonFactory();
+ JsonParser jParser = jfactory.createJsonParser(entityStream);
+
+ List<Long> uuids = new ArrayList<>();
+ while (jParser.nextToken() != JsonToken.END_ARRAY) {
+ while (jParser.nextToken() != JsonToken.END_OBJECT) {
+ String key = jParser.getCurrentName();
+ if ("uuid".equals(key)) {
+ jParser.nextToken();
+ String value = jParser.getText();
+ if (Strings.isNumeric(value)) {
+ long uuid = Long.valueOf(value);
+ uuids.add(uuid);
+ }
+ }
+ }
+ }
+ Collection<IAtsWorkItem> items = AtsClientService.get().getQueryService().createQuery().andUuids(
+ uuids.toArray(new Long[uuids.size()])).getItems();
+ return items;
+ } catch (Exception ex) {
+ throw new IOException("Error deserializing a IAtsWorkItem.", ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java
index 0ffda6c9b94..f0da4050b36 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java
@@ -36,9 +36,10 @@ import org.eclipse.osee.ats.rest.internal.cpa.CpaResource;
import org.eclipse.osee.ats.rest.internal.cpa.CpaServiceRegistry;
import org.eclipse.osee.ats.rest.internal.notify.AtsNotifyEndpointImpl;
import org.eclipse.osee.ats.rest.internal.workitem.ActionUiResource;
-import org.eclipse.osee.ats.rest.internal.workitem.AtsTaskEndpointImpl;
import org.eclipse.osee.ats.rest.internal.workitem.AtsActionEndpointImpl;
import org.eclipse.osee.ats.rest.internal.workitem.AtsRuleEndpointImpl;
+import org.eclipse.osee.ats.rest.internal.workitem.AtsTaskEndpointImpl;
+import org.eclipse.osee.ats.rest.internal.workitem.AtsWorkPackageEndpointImpl;
import org.eclipse.osee.ats.rest.internal.workitem.StateResource;
import org.eclipse.osee.framework.jdk.core.type.IResourceRegistry;
import org.eclipse.osee.framework.jdk.core.type.ResourceRegistry;
@@ -109,6 +110,7 @@ public class AtsApplication extends Application {
singletons.add(new AtsConfigEndpointImpl(atsServer, orcsApi, logger));
singletons.add(new AtsTaskEndpointImpl(atsServer));
singletons.add(new AtsNotifyEndpointImpl(atsServer));
+ singletons.add(new AtsWorkPackageEndpointImpl(atsServer));
// UIs
singletons.add(new ActionUiResource(atsServer, logger));
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java
new file mode 100644
index 00000000000..41bcec6e183
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ats.rest.internal.workitem;
+
+import java.util.Collection;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.eclipse.osee.ats.api.IAtsWorkItem;
+import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
+import org.eclipse.osee.ats.api.ev.AtsWorkPackageEndpointApi;
+import org.eclipse.osee.ats.api.ev.JaxWorkPackageData;
+import org.eclipse.osee.ats.api.user.IAtsUser;
+import org.eclipse.osee.ats.api.util.IAtsChangeSet;
+import org.eclipse.osee.ats.impl.IAtsServer;
+import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
+import org.eclipse.osee.orcs.data.ArtifactReadable;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AtsWorkPackageEndpointImpl implements AtsWorkPackageEndpointApi {
+
+ private final IAtsServer atsServer;
+
+ public AtsWorkPackageEndpointImpl(IAtsServer atsServer) {
+ this.atsServer = atsServer;
+ }
+
+ @GET
+ @Path("{workPackageId}/workitem")
+ @Produces({MediaType.APPLICATION_JSON})
+ @Override
+ public Collection<IAtsWorkItem> getWorkItems(@PathParam("workPackageId") long workPackageId) {
+ ArtifactReadable workPackageArt = atsServer.getArtifactByUuid(workPackageId);
+ if (workPackageArt == null) {
+ throw new OseeArgumentException("Work Package with id [%s] Not Found", workPackageId);
+ }
+ return atsServer.getQueryService().createQuery().andAttr(AtsAttributeTypes.WorkPackageGuid,
+ workPackageArt.getGuid()).getResults().getList();
+ }
+
+ @PUT
+ @Path("{workPackageId}")
+ @Consumes({MediaType.APPLICATION_JSON})
+ @Override
+ public Response setWorkPackage(@PathParam("workPackageId") long workPackageId, JaxWorkPackageData workPackageData) {
+ ArtifactReadable workPackageArt = atsServer.getArtifactByUuid(workPackageId);
+ if (workPackageArt == null) {
+ throw new OseeArgumentException("Work Package with id [%s] Not Found", workPackageId);
+ }
+ IAtsUser asUser = atsServer.getUserService().getUserById(workPackageData.getAsUserId());
+ if (asUser == null) {
+ throw new OseeArgumentException("Author with id [%s] Not Found", workPackageData.getAsUserId());
+ }
+ IAtsChangeSet changes = atsServer.getStoreService().createAtsChangeSet("Set Work Package", asUser);
+ for (Long workItemUuid : workPackageData.getWorkItemUuids()) {
+ IAtsWorkItem workItem =
+ atsServer.getQueryService().createQuery().andUuids(workItemUuid).getResults().getAtMostOneOrNull();
+ if (workItem == null) {
+ throw new OseeArgumentException("Work Item with id [%s] Not Found", workItemUuid);
+ }
+ if (!workItem.isTask() && !workItem.isTeamWorkflow()) {
+ throw new OseeArgumentException("Work Packages can only be set on Team Workflow or Task, not [%s]",
+ workItem.getArtifactTypeName());
+ }
+ changes.setSoleAttributeValue(workItem, AtsAttributeTypes.WorkPackageGuid, workPackageArt.getGuid());
+ }
+ changes.execute();
+ return Response.ok().build();
+ }
+
+ @DELETE
+ @Path("{workPackageId}/workitem")
+ @Consumes({MediaType.APPLICATION_JSON})
+ @Override
+ public Response deleteWorkPackageItems(@PathParam("workPackageId") long workPackageId, JaxWorkPackageData workPackageData) {
+ ArtifactReadable workPackageArt = atsServer.getArtifactByUuid(workPackageId);
+ if (workPackageArt == null) {
+ throw new OseeArgumentException("Work Package with id [%s] Not Found", workPackageId);
+ }
+ IAtsUser asUser = atsServer.getUserService().getUserById(workPackageData.getAsUserId());
+ if (asUser == null) {
+ throw new OseeArgumentException("Author with id [%s] Not Found", workPackageData.getAsUserId());
+ }
+ IAtsChangeSet changes = atsServer.getStoreService().createAtsChangeSet("Remove Work Package", asUser);
+ for (Long workItemUuid : workPackageData.getWorkItemUuids()) {
+ IAtsWorkItem workItem =
+ atsServer.getQueryService().createQuery().andUuids(workItemUuid).getResults().getAtMostOneOrNull();
+ if (workItem == null) {
+ throw new OseeArgumentException("Work Item with id [%s] Not Found", workItemUuid);
+ }
+ changes.deleteAttributes(workItem, AtsAttributeTypes.WorkPackageGuid);
+ }
+ if (!changes.isEmpty()) {
+ changes.execute();
+ }
+ return Response.ok().build();
+ }
+}
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemJsonWriter.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemJsonWriter.java
index f6205810d14..1c222e88d20 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemJsonWriter.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemJsonWriter.java
@@ -104,6 +104,7 @@ public class WorkItemJsonWriter implements MessageBodyWriter<IAtsWorkItem> {
writer.writeStringField("Name", config.getName());
String atsId = action.getSoleAttributeValue(AtsAttributeTypes.AtsId, "");
writer.writeStringField("AtsId", atsId);
+ writer.writeStringField("ArtifactType", action.getArtifactType().getName());
String actionUrl = RestUtil.getActionUrl(atsId, ATS_UI_ACTION_PREFIX, atsServer);
writer.writeStringField("actionLocation", actionUrl);
if (!identityView) {
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemsJsonWriter.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemsJsonWriter.java
index f678f391ab6..caea2438b05 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemsJsonWriter.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/WorkItemsJsonWriter.java
@@ -13,7 +13,6 @@ package org.eclipse.osee.ats.rest.internal.workitem;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
-import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import javax.ws.rs.WebApplicationException;
@@ -25,6 +24,7 @@ import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.eclipse.osee.ats.api.IAtsWorkItem;
import org.eclipse.osee.ats.impl.IAtsServer;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
import org.eclipse.osee.jaxrs.mvc.IdentityView;
import org.eclipse.osee.orcs.data.AttributeTypes;
@@ -57,19 +57,7 @@ public class WorkItemsJsonWriter implements MessageBodyWriter<Collection<IAtsWor
@Override
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
- boolean isWriteable = false;
- if (Collection.class.isAssignableFrom(type) && genericType instanceof ParameterizedType) {
- ParameterizedType parameterizedType = (ParameterizedType) genericType;
- Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();
- if (actualTypeArgs.length == 1) {
- Type t = actualTypeArgs[0];
- if (t instanceof Class) {
- Class<?> clazz = (Class<?>) t;
- isWriteable = IAtsWorkItem.class.isAssignableFrom(clazz);
- }
- }
- }
- return isWriteable;
+ return Lib.isCollectionOfType(type, genericType, IAtsWorkItem.class);
}
private boolean matches(Class<? extends Annotation> toMatch, Annotation[] annotations) {
diff --git a/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java b/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java
index e60478ba303..ce281d881bb 100644
--- a/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java
+++ b/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java
@@ -35,6 +35,8 @@ import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryUsage;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
@@ -1745,4 +1747,20 @@ public final class Lib {
return result;
}
+ public static boolean isCollectionOfType(Class<?> type, Type genericType, Class<?> ofType) {
+ boolean isWriteable = false;
+ if (Collection.class.isAssignableFrom(type) && genericType instanceof ParameterizedType) {
+ ParameterizedType parameterizedType = (ParameterizedType) genericType;
+ Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();
+ if (actualTypeArgs.length == 1) {
+ Type t = actualTypeArgs[0];
+ if (t instanceof Class) {
+ Class<?> clazz = (Class<?>) t;
+ isWriteable = ofType.isAssignableFrom(clazz);
+ }
+ }
+ }
+ return isWriteable;
+ }
+
}

Back to the top