diff options
author | megumi.telles | 2014-11-25 19:28:31 +0000 |
---|---|---|
committer | megumi.telles | 2014-12-01 16:34:37 +0000 |
commit | ddad44d41a13a90bceb524567b01e2c08f25ce56 (patch) | |
tree | 688a7bb84f1f8ed0f10f5e7eb6518da7f107680a | |
parent | e072e7c85346d353a82759a339845cb0c5d8dbcd (diff) | |
download | org.eclipse.osee-ddad44d41a13a90bceb524567b01e2c08f25ce56.tar.gz org.eclipse.osee-ddad44d41a13a90bceb524567b01e2c08f25ce56.tar.xz org.eclipse.osee-ddad44d41a13a90bceb524567b01e2c08f25ce56.zip |
bug[ats_ATS141237]: Handle Null Pointer in ArtifactSearch_V1.search
Change-Id: I020f9c88eafb4d078bcf5a633e4d18b4c8d9347b
7 files changed, 140 insertions, 43 deletions
diff --git a/plugins/org.eclipse.osee.orcs.rest.test/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.orcs.rest.test/META-INF/MANIFEST.MF index ad19a92c519..66ad4d5e907 100644 --- a/plugins/org.eclipse.osee.orcs.rest.test/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.orcs.rest.test/META-INF/MANIFEST.MF @@ -11,4 +11,5 @@ Require-Bundle: org.junit, org.hamcrest.core, org.objenesis Import-Package: org.eclipse.osee.executor.admin, - org.eclipse.osee.framework.jdk.core.type + org.eclipse.osee.framework.jdk.core.type, + org.eclipse.osee.orcs.db.mock diff --git a/plugins/org.eclipse.osee.orcs.rest.test/src/org/eclipse/osee/orcs/rest/internal/InternalTestSuite.java b/plugins/org.eclipse.osee.orcs.rest.test/src/org/eclipse/osee/orcs/rest/internal/InternalTestSuite.java index 4f6eeb91f0b..35475df7f38 100644 --- a/plugins/org.eclipse.osee.orcs.rest.test/src/org/eclipse/osee/orcs/rest/internal/InternalTestSuite.java +++ b/plugins/org.eclipse.osee.orcs.rest.test/src/org/eclipse/osee/orcs/rest/internal/InternalTestSuite.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.orcs.rest.internal; +import org.eclipse.osee.orcs.rest.internal.search.ArtifactSearch_V1Test; import org.eclipse.osee.orcs.rest.internal.search.dsl.SearchDslTest; import org.eclipse.osee.orcs.rest.internal.search.predicate.AttributeTypePredicateHandlerTest; import org.eclipse.osee.orcs.rest.internal.search.predicate.ExistsTypePredicateHandlerTest; @@ -31,7 +32,8 @@ import org.junit.runners.Suite; IdsPredicateHandlerTest.class, GuidsPredicateHandlerTest.class, IsOfTypePredicateHandlerTest.class, - TypeEqualsPredicateHandlerTest.class}) + TypeEqualsPredicateHandlerTest.class, + ArtifactSearch_V1Test.class}) public class InternalTestSuite { // Test Suite } diff --git a/plugins/org.eclipse.osee.orcs.rest.test/src/org/eclipse/osee/orcs/rest/internal/search/ArtifactSearch_V1Test.java b/plugins/org.eclipse.osee.orcs.rest.test/src/org/eclipse/osee/orcs/rest/internal/search/ArtifactSearch_V1Test.java new file mode 100644 index 00000000000..bf6fe97b993 --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest.test/src/org/eclipse/osee/orcs/rest/internal/search/ArtifactSearch_V1Test.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * 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.orcs.rest.internal.search; + +import static org.mockito.Mockito.when; +import java.util.Arrays; +import java.util.Collection; +import javax.ws.rs.core.Request; +import javax.ws.rs.core.UriInfo; +import org.eclipse.osee.framework.core.data.IAttributeType; +import org.eclipse.osee.framework.core.data.IOseeBranch; +import org.eclipse.osee.framework.core.enums.CoreBranches; +import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.orcs.OrcsApi; +import org.eclipse.osee.orcs.rest.internal.search.artifact.ArtifactSearch_V1; +import org.eclipse.osee.orcs.rest.internal.search.artifact.PredicateHandler; +import org.eclipse.osee.orcs.rest.internal.search.artifact.predicate.PredicateHandlerUtil; +import org.eclipse.osee.orcs.rest.model.search.artifact.Predicate; +import org.eclipse.osee.orcs.rest.model.search.artifact.SearchMethod; +import org.eclipse.osee.orcs.rest.model.search.artifact.SearchRequest; +import org.eclipse.osee.orcs.rest.model.search.artifact.SearchResponse; +import org.eclipse.osee.orcs.search.QueryBuilder; +import org.eclipse.osee.orcs.search.QueryFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +/** + * @author Megumi Telles + */ +public class ArtifactSearch_V1Test { + + // @formatter:off + @Mock private OrcsApi orcsApi; + @Mock private PredicateHandler handler; + @Mock private QueryFactory queryFactory; + @Mock private QueryBuilder builder; + @Mock private UriInfo uriInfo; + @Mock private Request request; + @Captor private ArgumentCaptor<IOseeBranch> fromBranch; + // @formatter:on + + private static final IOseeBranch BRANCH = CoreBranches.COMMON; + private final java.util.List<String> types = Arrays.asList("1000000000000070"); + private ArtifactSearch_V1 search; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + search = new ArtifactSearch_V1(uriInfo, request, BRANCH.getUuid(), orcsApi); + } + + @Test + public void testSearchRequestNull() throws OseeCoreException { + when(orcsApi.getQueryFactory(null)).thenReturn(queryFactory); + when(queryFactory.fromBranch(BRANCH)).thenReturn(builder); + + Collection<IAttributeType> attrTypes = PredicateHandlerUtil.getIAttributeTypes(types); + Predicate predicate = new Predicate(SearchMethod.ATTRIBUTE_TYPE, types, Arrays.asList("AtsAdmin")); + when(builder.and(attrTypes, predicate.getValues().iterator().next(), predicate.getOptions())).thenReturn(builder); + + SearchRequest params = new SearchRequest(BRANCH.getUuid(), Arrays.asList(predicate), null, 0, false); + SearchResponse response = search.getSearchWithMatrixParams(params); + + Assert.assertEquals(response.getSearchRequest(), params); + } + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactsResource.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactsResource.java index 936ae4c0b81..3d17b8cfe82 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactsResource.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ArtifactsResource.java @@ -22,6 +22,7 @@ import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.TokenFactory; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.data.ArtifactReadable; import org.eclipse.osee.orcs.rest.internal.search.artifact.ArtifactSearch_V1; import org.eclipse.osee.orcs.search.QueryFactory; @@ -40,15 +41,18 @@ public class ArtifactsResource { private final Long branchUuid; - public ArtifactsResource(UriInfo uriInfo, Request request, Long branchUuid) { + private final OrcsApi orcsApi; + + public ArtifactsResource(UriInfo uriInfo, Request request, Long branchUuid, OrcsApi orcsApi) { this.uriInfo = uriInfo; this.request = request; this.branchUuid = branchUuid; + this.orcsApi = orcsApi; } @Path("search/v1") public ArtifactSearch_V1 getSearch() { - return new ArtifactSearch_V1(uriInfo, request, branchUuid); + return new ArtifactSearch_V1(uriInfo, request, branchUuid, orcsApi); } @Path("{uuid}") @@ -60,7 +64,7 @@ public class ArtifactsResource { @Produces(MediaType.TEXT_HTML) public String getAsHtml() throws OseeCoreException { IOseeBranch branch = TokenFactory.createBranch(branchUuid, ""); - QueryFactory factory = OrcsApplication.getOrcsApi().getQueryFactory(null); + QueryFactory factory = orcsApi.getQueryFactory(null); ResultSet<ArtifactReadable> results = factory.fromBranch(branch).andNameEquals(DEFAULT_HIERARCHY_ROOT_NAME).getResults(); ArtifactReadable rootArtifact = results.getExactlyOne(); diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchResource.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchResource.java index 59c36f818ce..79961cbf6b4 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchResource.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchResource.java @@ -19,6 +19,7 @@ import javax.ws.rs.core.Request; import javax.ws.rs.core.UriInfo; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.data.BranchReadable; import org.eclipse.osee.orcs.search.BranchQuery; @@ -33,16 +34,18 @@ public class BranchResource { Request request; Long branchUuid; + OrcsApi orcsApi; - public BranchResource(UriInfo uriInfo, Request request, Long branchUuid) { + public BranchResource(UriInfo uriInfo, Request request, Long branchUuid, OrcsApi orcsApi) { this.uriInfo = uriInfo; this.request = request; this.branchUuid = branchUuid; + this.orcsApi = orcsApi; } @Path("artifact") public ArtifactsResource getArtifacts() { - return new ArtifactsResource(uriInfo, request, branchUuid); + return new ArtifactsResource(uriInfo, request, branchUuid, orcsApi); } @Path("txs") diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchesResource.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchesResource.java index 11c4e968680..23d57b1586a 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchesResource.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/BranchesResource.java @@ -21,6 +21,7 @@ import javax.ws.rs.core.UriInfo; import org.eclipse.osee.framework.core.enums.BranchType; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.data.BranchReadable; import org.eclipse.osee.orcs.search.BranchQuery; @@ -37,15 +38,18 @@ public class BranchesResource { @Context Request request; + OrcsApi orcsApi; + @Path("{uuid}") public BranchResource getBranch(@PathParam("uuid") Long id) { - return new BranchResource(uriInfo, request, id); + this.orcsApi = OrcsApplication.getOrcsApi(); + return new BranchResource(uriInfo, request, id, orcsApi); } @GET @Produces(MediaType.TEXT_HTML) public String getAsHtml() throws OseeCoreException { - BranchQuery query = OrcsApplication.getOrcsApi().getQueryFactory(null).branchQuery(); + BranchQuery query = orcsApi.getQueryFactory(null).branchQuery(); ResultSet<BranchReadable> results = query.andIsOfType(BranchType.BASELINE, BranchType.WORKING).getResults(); HtmlWriter writer = new HtmlWriter(uriInfo); diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/search/artifact/ArtifactSearch_V1.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/search/artifact/ArtifactSearch_V1.java index 6920707a155..81c188ad409 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/search/artifact/ArtifactSearch_V1.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/search/artifact/ArtifactSearch_V1.java @@ -21,10 +21,10 @@ import javax.ws.rs.core.UriInfo; import org.eclipse.osee.framework.jdk.core.type.MatchLocation; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.data.ArtifactReadable; import org.eclipse.osee.orcs.data.AttributeReadable; import org.eclipse.osee.orcs.data.HasLocalId; -import org.eclipse.osee.orcs.rest.internal.OrcsApplication; import org.eclipse.osee.orcs.rest.internal.search.artifact.dsl.DslFactory; import org.eclipse.osee.orcs.rest.internal.search.artifact.dsl.SearchQueryBuilder; import org.eclipse.osee.orcs.rest.model.search.artifact.RequestType; @@ -42,9 +42,11 @@ import org.eclipse.osee.orcs.search.QueryFactory; public class ArtifactSearch_V1 extends ArtifactSearch { private final SearchQueryBuilder searchQueryBuilder; + private final OrcsApi orcsApi; - public ArtifactSearch_V1(UriInfo uriInfo, Request request, Long branchUuid) { + public ArtifactSearch_V1(UriInfo uriInfo, Request request, Long branchUuid, OrcsApi orcsApi) { super(uriInfo, request, branchUuid); + this.orcsApi = orcsApi; searchQueryBuilder = DslFactory.createQueryBuilder(); } @@ -58,7 +60,7 @@ public class ArtifactSearch_V1 extends ArtifactSearch { private SearchResponse search(SearchRequest params) throws OseeCoreException { long startTime = System.currentTimeMillis(); - QueryFactory qFactory = OrcsApplication.getOrcsApi().getQueryFactory(null); // Fix this + QueryFactory qFactory = orcsApi.getQueryFactory(null); // Fix this QueryBuilder builder = searchQueryBuilder.build(qFactory, params); @@ -70,39 +72,40 @@ public class ArtifactSearch_V1 extends ArtifactSearch { SearchResponse result = new SearchResponse(); RequestType request = params.getRequestType(); - List<Integer> localIds = new LinkedList<Integer>(); - switch (request) { - case COUNT: - int total = builder.getCount(); - result.setTotal(total); - break; - case IDS: - for (HasLocalId<Integer> art : builder.getResultsAsLocalIds()) { - localIds.add(art.getLocalId()); - } - result.setIds(localIds); - result.setTotal(localIds.size()); - break; - case MATCHES: - ResultSet<Match<ArtifactReadable, AttributeReadable<?>>> matches = builder.getMatches(); - List<SearchMatch> searchMatches = new LinkedList<SearchMatch>(); - for (Match<ArtifactReadable, AttributeReadable<?>> match : matches) { - int artId = match.getItem().getLocalId(); - localIds.add(artId); - for (AttributeReadable<?> attribute : match.getElements()) { - int attrId = attribute.getLocalId(); - List<MatchLocation> locations = match.getLocation(attribute); - searchMatches.add(new SearchMatch(artId, attrId, locations)); + if (request != null) { + List<Integer> localIds = new LinkedList<Integer>(); + switch (request) { + case COUNT: + int total = builder.getCount(); + result.setTotal(total); + break; + case IDS: + for (HasLocalId<Integer> art : builder.getResultsAsLocalIds()) { + localIds.add(art.getLocalId()); } - } - result.setIds(localIds); - result.setMatches(searchMatches); - result.setTotal(searchMatches.size()); - break; - default: - throw new UnsupportedOperationException(); + result.setIds(localIds); + result.setTotal(localIds.size()); + break; + case MATCHES: + ResultSet<Match<ArtifactReadable, AttributeReadable<?>>> matches = builder.getMatches(); + List<SearchMatch> searchMatches = new LinkedList<SearchMatch>(); + for (Match<ArtifactReadable, AttributeReadable<?>> match : matches) { + int artId = match.getItem().getLocalId(); + localIds.add(artId); + for (AttributeReadable<?> attribute : match.getElements()) { + int attrId = attribute.getLocalId(); + List<MatchLocation> locations = match.getLocation(attribute); + searchMatches.add(new SearchMatch(artId, attrId, locations)); + } + } + result.setIds(localIds); + result.setMatches(searchMatches); + result.setTotal(searchMatches.size()); + break; + default: + throw new UnsupportedOperationException(); + } } - result.setSearchRequest(params); result.setSearchTime(System.currentTimeMillis() - startTime); return result; |