feature[TW19319]: Create REST call get the team workflows by release

Change-Id: Ifdef7d087b2a931ae0ffab3364dbc0e06aee7ad4
Signed-off-by: Molaro (US), Stephen J <stephen.j.molaro@boeing.com>
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/AtsTeamWfEndpointApi.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/AtsTeamWfEndpointApi.java
index d4e56e4..b5066e4 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/AtsTeamWfEndpointApi.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/AtsTeamWfEndpointApi.java
@@ -26,6 +26,7 @@
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import org.eclipse.osee.ats.api.version.IAtsVersion;
+import org.eclipse.osee.framework.core.data.ArtifactToken;
 import org.eclipse.osee.framework.core.data.UserId;
 import org.eclipse.osee.framework.core.model.change.ChangeItem;
 import org.eclipse.osee.framework.jdk.core.result.XResultData;
@@ -64,6 +65,11 @@
    @Produces({MediaType.APPLICATION_JSON})
    List<IAtsGoal> getGoals(@PathParam("id") String id);
 
+   @GET
+   @Path("release/{release}")
+   @Produces(MediaType.APPLICATION_JSON)
+   Collection<ArtifactToken> getWfByRelease(@PathParam("release") String releaseName);
+
    @PUT
    @Path("build/{build}")
    @Consumes(MediaType.APPLICATION_JSON)
diff --git a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/workflow/AtsTeamWfEndpointTest.java b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/workflow/AtsTeamWfEndpointTest.java
index 97eef1e..8cabed1 100644
--- a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/workflow/AtsTeamWfEndpointTest.java
+++ b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/workflow/AtsTeamWfEndpointTest.java
@@ -57,6 +57,24 @@
    }
 
    @Test
+   public void testGetWfByRelease() {
+      IAtsChangeSet changes = atsApi.getStoreService().createAtsChangeSet(
+         getClass().getSimpleName() + " - Create Release Artifact", AtsCoreUsers.SYSTEM_USER);
+      ArtifactToken release = changes.createArtifact(AtsArtifactTypes.ReleaseArtifact, "G123456.0");
+      changes.relate(codeTeamWorkFlow.getArtifactId(), AtsRelationTypes.TeamWorkflowToRelease_Release, release);
+      changes.execute();
+
+      Collection<ArtifactToken> workflows = teamWfEp.getWfByRelease("G123456.0");
+      Assert.assertTrue(workflows.contains(codeTeamWorkFlow));
+
+      changes = atsApi.getStoreService().createAtsChangeSet(getClass().getSimpleName() + " - Cleanup Releases",
+         AtsCoreUsers.SYSTEM_USER);
+      changes.unrelate(codeTeamWorkFlow.getArtifactId(), AtsRelationTypes.TeamWorkflowToRelease_Release, release);
+      changes.deleteArtifact(release);
+      changes.execute();
+   }
+
+   @Test
    public void testRelateReleaseToWorkflow() {
       String changeId = "IO98293838";
       List<String> changeIds = new ArrayList<>();
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTeamWfEndpointImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTeamWfEndpointImpl.java
index 28301d8..5070ef7 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTeamWfEndpointImpl.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTeamWfEndpointImpl.java
@@ -43,6 +43,7 @@
 import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
 import org.eclipse.osee.framework.core.model.change.ChangeItem;
 import org.eclipse.osee.framework.jdk.core.result.XResultData;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
 
 /**
@@ -167,6 +168,20 @@
    }
 
    @Override
+   public Collection<ArtifactToken> getWfByRelease(String releaseName) {
+      Collection<ArtifactToken> releases =
+         atsApi.getQueryService().createQuery(AtsArtifactTypes.ReleaseArtifact).andName(releaseName).getArtifacts();
+      if (releases.size() > 1) {
+         throw new OseeCoreException("Release Name [%s] matches multiple releases", releaseName);
+      } else if (releases.isEmpty()) {
+         throw new OseeCoreException("No Releases found with name [%s]", releaseName);
+      }
+      ArtifactToken release = releases.iterator().next();
+      IRelationResolver relationResolver = atsApi.getRelationResolver();
+      return relationResolver.getRelated(release, AtsRelationTypes.TeamWorkflowToRelease_TeamWorkflow);
+   }
+
+   @Override
    public XResultData relateReleaseToWorkflow(String build, UserId userId, List<String> changeIds) {
       XResultData rd = new XResultData();
       try {
@@ -203,11 +218,11 @@
                atsApi.getQueryService().createQuery(AtsArtifactTypes.ReleaseArtifact).andName(build).getArtifacts();
             if (isBuildValid) {
                if (release.size() > 1) {
-                  rd.errorf("%s has multiple releases", build);
+                  rd.errorf("Release Name [%s] matches multiple releases", build);
                   return rd;
                }
                if (release.isEmpty()) {
-                  rd.errorf("%s has no elements", build);
+                  rd.errorf("No Releases found with name [%s]", build);
                   return rd;
                }
                IRelationResolver relationResolver = atsApi.getRelationResolver();