diff options
Diffstat (limited to 'BRMSGateway/src/main')
-rw-r--r-- | BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestSearchParameters.java | 103 | ||||
-rw-r--r-- | BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestWrapper.java | 83 |
2 files changed, 112 insertions, 74 deletions
diff --git a/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestSearchParameters.java b/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestSearchParameters.java index eec37392e..1288b5982 100644 --- a/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestSearchParameters.java +++ b/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestSearchParameters.java @@ -45,11 +45,12 @@ public class NexusRestSearchParameters { private static final String COUNT_QUERY_PARAM = "count"; private static final String REPOSITORY_ID_QUERY_PARAM = "repositoryId"; - private enum SearchType { - KEYWORD, // Search using a keyword - FILTER, // Search using a group ID, artifact ID, version, packaging type, and/or classifier filter - CLASS_NAME, // Search for a class name - CHECKSUM // Search for artifacts matching a certain checksum + /** The type of searches that can be performed. */ + public enum SearchType { + KEYWORD, /** Search using a keyword. */ + FILTER, /** Search using a group ID, artifact ID, version, packaging type, and/or classifier filter. */ + CLASS_NAME, /** Search for a class name. */ + CHECKSUM /** Search for artifacts matching a certain checksum. */ } // The type of search to perform @@ -76,15 +77,19 @@ public class NexusRestSearchParameters { * Specify searching using a keyword. * * @param keyword The keyword to search for + * @return this object to allow chaining of methods * @throws NexusRestWrapperException on invalid keywords */ - public void useKeywordSearch(final String keyword) throws NexusRestWrapperException { + public NexusRestSearchParameters useKeywordSearch(final String keyword) throws NexusRestWrapperException { + clearSearchParameters(); + if (isNullOrBlank(keyword)) { throw new NexusRestWrapperException("keyword must be specified for Nexus keyword searches"); } searchType = SearchType.KEYWORD; this.keyword = keyword; + return this; } /** @@ -95,14 +100,18 @@ public class NexusRestSearchParameters { * @param version The version to filter on * @param packagingType The packaging type to filter on * @param classifier The classifier to filter on + * @return this object to allow chaining of methods * @throws NexusRestWrapperException on invalid filters */ - public void useFilterSearch(final String groupId, final String artifactId, final String version, - final String packagingType, final String classifier) throws NexusRestWrapperException { + public NexusRestSearchParameters useFilterSearch(final String groupId, final String artifactId, + final String version, final String packagingType, final String classifier) + throws NexusRestWrapperException { + clearSearchParameters(); + if (isNullOrBlank(groupId) && isNullOrBlank(artifactId) && isNullOrBlank(version) - && isNullOrBlank(packagingType) && isNullOrBlank(classifier)) { + && isNullOrBlank(packagingType) && isNullOrBlank(classifier)) { throw new NexusRestWrapperException( - "at least one filter parameter must be specified for Nexus keyword searches"); + "at least one filter parameter must be specified for Nexus filter searches"); } searchType = SearchType.FILTER; @@ -111,36 +120,45 @@ public class NexusRestSearchParameters { this.version = version; this.packagingType = packagingType; this.classifier = classifier; + return this; } /** * Specify searching using a class name. * * @param className The class name to search for + * @return this object to allow chaining of methods * @throws NexusRestWrapperException on invalid className */ - public void useClassNameSearch(final String className) throws NexusRestWrapperException { + public NexusRestSearchParameters useClassNameSearch(final String className) throws NexusRestWrapperException { + clearSearchParameters(); + if (isNullOrBlank(className)) { - throw new NexusRestWrapperException("className must be specified for Nexus keyword searches"); + throw new NexusRestWrapperException("className must be specified for Nexus class name searches"); } searchType = SearchType.CLASS_NAME; this.className = className; + return this; } /** * Specify searching using a checksum. * * @param checksum The checksum to search for + * @return this object to allow chaining of methods * @throws NexusRestWrapperException on invalid checksum */ - public void useChecksumSearch(final String checksum) throws NexusRestWrapperException { + public NexusRestSearchParameters useChecksumSearch(final String checksum) throws NexusRestWrapperException { + clearSearchParameters(); + if (isNullOrBlank(checksum)) { - throw new NexusRestWrapperException("checksum must be specified for Nexus keyword searches"); + throw new NexusRestWrapperException("checksum must be specified for Nexus checksum searches"); } searchType = SearchType.CHECKSUM; this.checksum = checksum; + return this; } /** @@ -152,7 +170,7 @@ public class NexusRestSearchParameters { */ public NexusRestSearchParameters setRepositoryId(String repositoryId) throws NexusRestWrapperException { if (isNullOrBlank(repositoryId)) { - throw new NexusRestWrapperException("repositoryId must be specified for Nexus keyword searches"); + throw new NexusRestWrapperException("a repositoryId must be specified"); } this.repositoryId = repositoryId; @@ -168,7 +186,7 @@ public class NexusRestSearchParameters { */ public NexusRestSearchParameters setFrom(int from) throws NexusRestWrapperException { if (from < 0) { - throw new NexusRestWrapperException("from cannot be less than 0 for Nexus keyword searches"); + throw new NexusRestWrapperException("from cannot be less than 0 when from is specified"); } this.from = from; @@ -184,7 +202,7 @@ public class NexusRestSearchParameters { */ public NexusRestSearchParameters setCount(int count) throws NexusRestWrapperException { if (count < 1) { - throw new NexusRestWrapperException("count cannot be less than 1 for Nexus keyword searches"); + throw new NexusRestWrapperException("count cannot be less than 1 when count is specified"); } this.count = count; @@ -200,13 +218,17 @@ public class NexusRestSearchParameters { */ public URI getSearchUri(final String nexusServerUrl) throws NexusRestWrapperException { if (isNullOrBlank(nexusServerUrl)) { - throw new NexusRestWrapperException("nexusServerUrl must be specified for Nexus keyword searches"); + throw new NexusRestWrapperException("nexusServerUrl must be specified for the search URI"); + } + + if (searchType == null) { + throw new NexusRestWrapperException("search parameters have not been set"); } // Use a URI builder to build up the search URI UriBuilder uriBuilder = UriBuilder - .fromPath(nexusServerUrl) - .path(NEXUS_LUCENE_SEARCH_PATH); + .fromPath(nexusServerUrl) + .path(NEXUS_LUCENE_SEARCH_PATH); switch (searchType) { case KEYWORD: @@ -226,7 +248,7 @@ public class NexusRestSearchParameters { break; default: - throw new NexusRestWrapperException("search parameters have not been specified for the NExus search"); + throw new NexusRestWrapperException("search parameters have not been specified for the Nexus search"); } // Add the repository ID query parameter is required @@ -258,19 +280,19 @@ public class NexusRestSearchParameters { * @param uriBuilder The builder to add query parameters to */ private void getFitlerSearchUri(UriBuilder uriBuilder) { - if (null != groupId) { + if (!isNullOrBlank(groupId)) { uriBuilder.queryParam(GROUP_ID_QUERY_PARAM, groupId); } - if (null != artifactId) { + if (!isNullOrBlank(artifactId)) { uriBuilder.queryParam(ARTIFACT_ID_QUERY_PARAM, artifactId); } - if (null != version) { + if (!isNullOrBlank(version)) { uriBuilder.queryParam(VERSION_QUERY_PARAM, version); } - if (null != packagingType) { + if (!isNullOrBlank(packagingType)) { uriBuilder.queryParam(PACKAGING_TYPE_QUERY_PARAM, packagingType); } - if (null != classifier) { + if (!isNullOrBlank(classifier)) { uriBuilder.queryParam(CLASSIFIER_QUERY_PARAM, classifier); } } @@ -346,11 +368,34 @@ public class NexusRestSearchParameters { return null == parameter || parameter.trim().isEmpty(); } + /** + * Clear all search parameters. + * + */ + private void clearSearchParameters() { + searchType = null; + + keyword = null; + groupId = null; + artifactId = null; + version = null; + packagingType = null; + classifier = null; + className = null; + checksum = null; + + repositoryId = null; + + // Scope filters + from = -1; + count = -1; + } + @Override public String toString() { return "NexusRestSearchParameters [searchType=" + searchType + ", keyword=" + keyword + ", groupId=" + groupId - + ", artifactId=" + artifactId + ", version=" + version + ", packagingType=" + packagingType - + ", classifier=" + classifier + ", className=" + className + ", checksum=" + checksum - + ", repositoryId=" + repositoryId + ", from=" + from + ", count=" + count + "]"; + + ", artifactId=" + artifactId + ", version=" + version + ", packagingType=" + packagingType + + ", classifier=" + classifier + ", className=" + className + ", checksum=" + checksum + + ", repositoryId=" + repositoryId + ", from=" + from + ", count=" + count + "]"; } } diff --git a/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestWrapper.java b/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestWrapper.java index afa3e3794..9ee7598fd 100644 --- a/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestWrapper.java +++ b/BRMSGateway/src/main/java/org/onap/policy/brms/api/nexus/NexusRestWrapper.java @@ -54,25 +54,6 @@ public class NexusRestWrapper { private String nexusPassword; /** - * Instantiates a new Nexus REST agent. - * - * @param nexusServerUrl the URL of the Nexus server as a string - * @throws NexusRestWrapperException on errors on the Nexus server URL - */ - public NexusRestWrapper(final String nexusServerUrl) throws NexusRestWrapperException { - LOGGER.trace("new NexusRestWrapper: nexusServerUrl=" + nexusServerUrl); - - if (isNullOrBlank(nexusServerUrl)) { - throw new NexusRestWrapperException("nexusServerUrl must be specified for the Nexus server"); - } - - this.nexusServerUrl = nexusServerUrl; - - // Create a client for RST calls towards the Nexus server - client = ClientBuilder.newClient(); - } - - /** * Instantiates a new Nexus REST agent with credentials. * * @param nexusServerUrl the URL of the Nexus server as a string @@ -81,15 +62,17 @@ public class NexusRestWrapper { * @throws NexusRestWrapperException on parameter exceptions */ public NexusRestWrapper(final String nexusServerUrl, final String nexusUser, final String nexusPassword) - throws NexusRestWrapperException { + throws NexusRestWrapperException { LOGGER.trace("new NexusRestWrapper: nexusServerUrl=" + nexusServerUrl); if (isNullOrBlank(nexusServerUrl)) { throw new NexusRestWrapperException("nexusServerUrl must be specified for the Nexus server"); } - if (isNullOrBlank(nexusUser) || isNullOrBlank(nexusPassword)) { - throw new NexusRestWrapperException("nexuusUser and nexusPassword must both be specified"); + if ((isNullOrBlank(nexusUser) && !isNullOrBlank(nexusPassword)) + || (!isNullOrBlank(nexusUser) && isNullOrBlank(nexusPassword))) { + throw new NexusRestWrapperException( + "if either nexusUser or nexusPassword are specified, both must be specified"); } this.nexusServerUrl = nexusServerUrl; @@ -124,10 +107,13 @@ public class NexusRestWrapper { * Exceptions accessing the Nexus server */ public NexusSearchResult findArtifact(final NexusRestSearchParameters searchParameters) - throws NexusRestWrapperException { - + throws NexusRestWrapperException { LOGGER.trace("new search with search parameters: " + searchParameters); + if (null == searchParameters) { + throw new NexusRestWrapperException("searchParameters may not be null"); + } + // Issue the REST request to perform the search URI searchUri = searchParameters.getSearchUri(nexusServerUrl); @@ -138,14 +124,22 @@ public class NexusRestWrapper { getAuthorizationHeader(requestBuilder); // Issue the REST request - Response response = requestBuilder.get(); + Response response = null; + try { + response = requestBuilder.get(); + } catch (Exception e) { + String message = "search to URI " + searchUri.toString() + " failed with message: " + e.getMessage(); + LOGGER.warn(message, e); + throw new NexusRestWrapperException(message, e); + } LOGGER.debug("search response is: " + response.toString()); // Check the HTTP response code for the search if (Response.Status.OK.getStatusCode() != response.getStatus()) { - LOGGER.warn("search to URI " + searchUri.toString() + "failed, response was: " + response.toString()); - throw new NexusRestWrapperException("query to Nexus failed with message: " + response.toString()); + String message = "search to URI " + searchUri.toString() + " failed, response was: " + response.toString(); + LOGGER.warn(message); + throw new NexusRestWrapperException(message); } try { @@ -160,23 +154,22 @@ public class NexusRestWrapper { return searchResult; } catch (Exception e) { - LOGGER.warn("processing of result from search to URI " + searchUri - + " failed with message " + e.getMessage()); - throw new NexusRestWrapperException( - "processing of result from query to Nexus failed with message: " + e.getMessage(), e); + String message = "processing of result from query to Nexus failed with message: " + e.getMessage(); + LOGGER.warn(message, e); + throw new NexusRestWrapperException(message, e); } } /** * Get the authorisation header for the user name and password. - * @param requestBuilder the request builder to add authorization to + * @param requestBuilder the request builder to add authorisation to * @return the authorisation header */ private Builder getAuthorizationHeader(Builder requestBuilder) { if (null != nexusUser && null != nexusPassword) { String userPassString = nexusUser + ":" + nexusPassword; requestBuilder.header("Authorization", "Basic " - + java.util.Base64.getEncoder().encodeToString(userPassString.getBytes())); + + java.util.Base64.getEncoder().encodeToString(userPassString.getBytes())); } return requestBuilder; @@ -210,18 +203,18 @@ public class NexusRestWrapper { NexusRepository repository = repositoryMap.get(artifact.getArtifactHits().get(0).getRepositoryId()); return new StringBuilder() - .append(repository.getRepositoryUrl()) - .append("/content/") - .append(artifact.getGroupId().replace('.', '/')) - .append('/') - .append(artifact.getArtifactId()) - .append('/') - .append(artifact.getVersion()) - .append('/') - .append(artifact.getArtifactId()) - .append('-') - .append(artifact.getVersion()) - .toString(); + .append(repository.getRepositoryUrl()) + .append("/content/") + .append(artifact.getGroupId().replace('.', '/')) + .append('/') + .append(artifact.getArtifactId()) + .append('/') + .append(artifact.getVersion()) + .append('/') + .append(artifact.getArtifactId()) + .append('-') + .append(artifact.getVersion()) + .toString(); } /** |