feature[TW16796]: Add rest call to search artifacts by applicability id

Change-Id: I4629269c39c77eca5de1f86d61daaf6bd50405ff
Signed-off-by: audrey.e.denk <audrey.e.denk@boeing.com>
diff --git a/plugins/org.eclipse.osee.jaxrs/src/org/eclipse/osee/jaxrs/OrcsParamConverterProvider.java b/plugins/org.eclipse.osee.jaxrs/src/org/eclipse/osee/jaxrs/OrcsParamConverterProvider.java
index d159c38..94b4bb3 100644
--- a/plugins/org.eclipse.osee.jaxrs/src/org/eclipse/osee/jaxrs/OrcsParamConverterProvider.java
+++ b/plugins/org.eclipse.osee.jaxrs/src/org/eclipse/osee/jaxrs/OrcsParamConverterProvider.java
@@ -19,6 +19,7 @@
 import javax.ws.rs.ext.Provider;
 import org.eclipse.osee.framework.core.OrcsTokenService;
 import org.eclipse.osee.framework.core.data.ActivityTypeId;
+import org.eclipse.osee.framework.core.data.ApplicabilityId;
 import org.eclipse.osee.framework.core.data.ArtifactId;
 import org.eclipse.osee.framework.core.data.ArtifactTypeJoin;
 import org.eclipse.osee.framework.core.data.ArtifactTypeToken;
@@ -49,6 +50,7 @@
    private final ParamConverter<TransactionId> transactionIdConverter;
    private final ParamConverter<AttributeId> attributeIdConverter;
    private final ParamConverter<ActivityTypeId> activityTypeIdConverter;
+   private final ParamConverter<ApplicabilityId> applicabilityIdConverter;
 
    private final ParamConverter<BranchState> branchStateConverter;
    private final ParamConverter<BranchType> branchTypeConverter;
@@ -85,6 +87,7 @@
       branchStateConverter = new IdParamConverter<>(BranchState::valueOf);
       branchTypeConverter = new IdParamConverter<>(BranchType::valueOf);
       attributeIdConverter = new IdParamConverter<>(AttributeId::valueOf);
+      applicabilityIdConverter = new IdParamConverter<>(ApplicabilityId::valueOf);
    }
 
    @SuppressWarnings("unchecked")
@@ -133,6 +136,9 @@
       if (BranchType.class.isAssignableFrom(rawType)) {
          return (ParamConverter<T>) branchTypeConverter;
       }
+      if (ApplicabilityId.class.isAssignableFrom(rawType)) {
+         return (ParamConverter<T>) applicabilityIdConverter;
+      }
       if (Id.class.isAssignableFrom(rawType)) {
          return (ParamConverter<T>) idConverter;
       }
diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/QueryData.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/QueryData.java
index 6b09be7..506b34c 100644
--- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/QueryData.java
+++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/QueryData.java
@@ -28,6 +28,7 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.eclipse.osee.framework.core.OrcsTokenService;
+import org.eclipse.osee.framework.core.data.ApplicabilityId;
 import org.eclipse.osee.framework.core.data.ArtifactId;
 import org.eclipse.osee.framework.core.data.ArtifactToken;
 import org.eclipse.osee.framework.core.data.ArtifactTypeToken;
@@ -91,8 +92,9 @@
    private final HashMap<SqlTable, String> mainAliases = new HashMap<>(4);
    private QueryType queryType;
    private boolean followCausesChild = true;
+   private final ApplicabilityId appId;
 
-   public QueryData(QueryData parentQueryData, QueryFactory queryFactory, QueryEngine queryEngine, CallableQueryFactory artQueryFactory, OrcsTokenService tokenService, BranchId branch, ArtifactId view) {
+   public QueryData(QueryData parentQueryData, QueryFactory queryFactory, QueryEngine queryEngine, CallableQueryFactory artQueryFactory, OrcsTokenService tokenService, BranchId branch, ArtifactId view, ApplicabilityId appId) {
       this.parentQueryData = parentQueryData;
       this.queryFactory = queryFactory;
       this.queryEngine = queryEngine;
@@ -104,15 +106,20 @@
       this.view = view;
       criterias.add(new ArrayList<>());
       this.tokenService = tokenService;
+      this.appId = appId;
    }
 
    public QueryData(QueryFactory queryFactory, QueryEngine queryEngine, CallableQueryFactory artQueryFactory, OrcsTokenService tokenService, BranchId branch, ArtifactId view) {
-      this(null, queryFactory, queryEngine, artQueryFactory, tokenService, branch, view);
+      this(null, queryFactory, queryEngine, artQueryFactory, tokenService, branch, view, ApplicabilityId.SENTINEL);
+   }
+
+   public QueryData(QueryFactory queryFactory, QueryEngine queryEngine, CallableQueryFactory artQueryFactory, OrcsTokenService tokenService, BranchId branch, ApplicabilityId appId) {
+      this(null, queryFactory, queryEngine, artQueryFactory, tokenService, branch, ArtifactId.SENTINEL, appId);
    }
 
    public QueryData(QueryData parentQueryData) {
       this(parentQueryData, parentQueryData.queryFactory, parentQueryData.queryEngine, parentQueryData.artQueryFactory,
-         parentQueryData.tokenService, parentQueryData.branch, parentQueryData.view);
+         parentQueryData.tokenService, parentQueryData.branch, parentQueryData.view, ApplicabilityId.SENTINEL);
    }
 
    public QueryData(QueryFactory queryFactory, QueryEngine queryEngine, CallableQueryFactory artQueryFactory, OrcsTokenService tokenService, BranchId branch) {
@@ -756,4 +763,8 @@
    public boolean isFollowCausesChild() {
       return followCausesChild;
    }
+
+   public ApplicabilityId getAppId() {
+      return appId;
+   }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/QueryFactoryImpl.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/QueryFactoryImpl.java
index e99b494..0bb241d 100644
--- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/QueryFactoryImpl.java
+++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/QueryFactoryImpl.java
@@ -14,6 +14,7 @@
 package org.eclipse.osee.orcs.core.internal.search;
 
 import org.eclipse.osee.framework.core.OrcsTokenService;
+import org.eclipse.osee.framework.core.data.ApplicabilityId;
 import org.eclipse.osee.framework.core.data.ArtifactId;
 import org.eclipse.osee.framework.core.data.BranchId;
 import org.eclipse.osee.orcs.OrcsApi;
@@ -69,6 +70,11 @@
    }
 
    @Override
+   public QueryBuilder fromBranch(BranchId branch, ApplicabilityId appId) {
+      return new QueryData(this, queryEngine, artQueryFactory, tokenService, branch, appId);
+   }
+
+   @Override
    public TransactionQuery transactionQuery() {
       return new TransactionQueryImpl(queryEngine, txCriteriaFactory,
          new QueryData(this, queryEngine, artQueryFactory, tokenService));
diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/sql/AbstractSqlWriter.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/sql/AbstractSqlWriter.java
index 3482403..18f4e1b 100644
--- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/sql/AbstractSqlWriter.java
+++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/sql/AbstractSqlWriter.java
@@ -325,7 +325,10 @@
          String mainTxsAlias = getMainTableAlias(SqlTable.TXS_TABLE);
          writeEqualsAnd(mainTableAlias, mainTxsAlias, "gamma_id");
          writeTxBranchFilter(mainTxsAlias);
-
+         if (queryDataCursor.getAppId().isValid()) {
+            write(" AND ");
+            writeEqualsParameter(mainTxsAlias, "app_id", queryDataCursor.getAppId());
+         }
          if (queryDataCursor.getView().isValid()) {
             write(" AND ");
             writeEqualsParameterAnd(tupleAlias, "tuple_type", CoreTupleTypes.ViewApplicability);
diff --git a/plugins/org.eclipse.osee.orcs.rest.model/src/org/eclipse/osee/orcs/rest/model/ArtifactEndpoint.java b/plugins/org.eclipse.osee.orcs.rest.model/src/org/eclipse/osee/orcs/rest/model/ArtifactEndpoint.java
index 34a3d99..fa0dc1d 100644
--- a/plugins/org.eclipse.osee.orcs.rest.model/src/org/eclipse/osee/orcs/rest/model/ArtifactEndpoint.java
+++ b/plugins/org.eclipse.osee.orcs.rest.model/src/org/eclipse/osee/orcs/rest/model/ArtifactEndpoint.java
@@ -26,6 +26,7 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
+import org.eclipse.osee.framework.core.data.ApplicabilityId;
 import org.eclipse.osee.framework.core.data.ArtifactId;
 import org.eclipse.osee.framework.core.data.ArtifactToken;
 import org.eclipse.osee.framework.core.data.ArtifactTypeToken;
@@ -96,6 +97,11 @@
    List<ArtifactToken> getChangedArtifactTokens(@DefaultValue("-1") @QueryParam("view") ArtifactId view, @PathParam("attributeTypeJoin") AttributeTypeJoin typeJoin, @PathParam("commentPattern") String commentPattern);
 
    @GET
+   @Path("applicability/{id}")
+   @Produces(MediaType.APPLICATION_JSON)
+   List<ArtifactToken> getArtifactTokensByApplicability(@PathParam("id") ApplicabilityId appId);
+
+   @GET
    @Path("type/{artifactType}/id")
    @Produces(MediaType.APPLICATION_JSON)
    List<ArtifactId> getArtifactIdsByType(@PathParam("artifactType") ArtifactTypeToken artifactType);
@@ -131,4 +137,5 @@
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.APPLICATION_JSON)
    TransactionToken setSoleAttributeValue(@PathParam("branch") BranchId branch, @PathParam("artifact") ArtifactId artifact, @PathParam("attributeType") AttributeTypeToken attributeType, String value);
+
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactEndpointImpl.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactEndpointImpl.java
index b17a0af..c051af2 100644
--- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactEndpointImpl.java
+++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactEndpointImpl.java
@@ -21,6 +21,7 @@
 import java.util.Map;
 import java.util.function.Supplier;
 import javax.ws.rs.core.UriInfo;
+import org.eclipse.osee.framework.core.data.ApplicabilityId;
 import org.eclipse.osee.framework.core.data.ArtifactId;
 import org.eclipse.osee.framework.core.data.ArtifactToken;
 import org.eclipse.osee.framework.core.data.ArtifactTypeToken;
@@ -220,6 +221,11 @@
    }
 
    @Override
+   public List<ArtifactToken> getArtifactTokensByApplicability(ApplicabilityId appId) {
+      return orcsApi.getQueryFactory().fromBranch(branch, appId).asArtifactTokens();
+   }
+
+   @Override
    public List<ArtifactToken> createArtifacts(BranchId branch, ArtifactTypeToken artifactType, ArtifactId parent, List<String> names) {
       TransactionBuilder tx =
          orcsApi.getTransactionFactory().createTransaction(branch, account, "rest - create artifacts");
diff --git a/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/QueryFactory.java b/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/QueryFactory.java
index aff8918..2467cb6 100644
--- a/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/QueryFactory.java
+++ b/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/search/QueryFactory.java
@@ -13,6 +13,7 @@
 
 package org.eclipse.osee.orcs.search;
 
+import org.eclipse.osee.framework.core.data.ApplicabilityId;
 import org.eclipse.osee.framework.core.data.ArtifactId;
 import org.eclipse.osee.framework.core.data.BranchId;
 
@@ -26,6 +27,8 @@
 
    QueryBuilder fromBranch(BranchId branch, ArtifactId view);
 
+   QueryBuilder fromBranch(BranchId branch, ApplicabilityId appId);
+
    BranchQuery branchQuery();
 
    TransactionQuery transactionQuery();