You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2019/09/16 12:38:53 UTC

[sling-org-apache-sling-committer-cli] branch master updated: minor code improvements

This is an automated email from the ASF dual-hosted git repository.

radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git


The following commit(s) were added to refs/heads/master by this push:
     new 8aed751  minor code improvements
8aed751 is described below

commit 8aed75174dcebf052518b6e07917a1cf046e9272
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Mon Sep 16 14:38:44 2019 +0200

    minor code improvements
---
 .../java/org/apache/sling/cli/impl/UserInput.java  |  2 +
 .../sling/cli/impl/ci/CIStatusValidator.java       | 14 ++---
 .../apache/sling/cli/impl/jira/VersionClient.java  | 60 +++++++---------------
 .../org/apache/sling/cli/impl/mail/Mailer.java     |  5 +-
 .../sling/cli/impl/nexus/RepositoryService.java    |  5 +-
 .../sling/cli/impl/people/MembersFinder.java       |  6 +--
 .../sling/cli/impl/release/TallyVotesCommand.java  |  2 +-
 .../cli/impl/release/VerifyReleasesCommand.java    |  2 +-
 .../cli/impl/jira/IssuesSearchJiraAction.java      | 21 +++++---
 .../sling/cli/impl/jira/VersionClientTest.java     | 14 +++++
 .../cli/impl/nexus/RepositoryServiceTest.java      |  1 -
 11 files changed, 66 insertions(+), 66 deletions(-)

diff --git a/src/main/java/org/apache/sling/cli/impl/UserInput.java b/src/main/java/org/apache/sling/cli/impl/UserInput.java
index 38fb7a6..d7db4e6 100644
--- a/src/main/java/org/apache/sling/cli/impl/UserInput.java
+++ b/src/main/java/org/apache/sling/cli/impl/UserInput.java
@@ -32,6 +32,8 @@ public class UserInput {
     private static final Logger LOGGER = LoggerFactory.getLogger(UserInput.class);
     private static final InputOption[] YES_NO = new InputOption[]{InputOption.YES, InputOption.NO};
 
+    private UserInput() {}
+
     public static InputOption yesNo(String question, InputOption defaultOption) {
         LOGGER.info(question);
         Set<InputOption> answers = new LinkedHashSet<>(Arrays.asList(YES_NO));
diff --git a/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java b/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java
index 7e970e3..b2462ea 100644
--- a/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java
+++ b/src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java
@@ -24,7 +24,6 @@ import java.io.InputStreamReader;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -34,6 +33,7 @@ import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.apache.http.HttpHeaders;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -54,11 +54,11 @@ import com.google.gson.JsonParser;
 @Component(service = CIStatusValidator.class)
 public class CIStatusValidator {
 
-    public class ValidationResult {
+    public static class ValidationResult {
         private final String message;
         private final boolean valid;
 
-        public ValidationResult(boolean valid, String message) {
+        ValidationResult(boolean valid, String message) {
             this.valid = valid;
             this.message = message;
         }
@@ -80,10 +80,10 @@ public class CIStatusValidator {
 
     private XPathFactory xPathFactory = XPathFactory.newInstance();
 
-    protected JsonObject fetchCIStatus(String ciEndpoint) throws UnsupportedOperationException, IOException {
+    protected JsonObject fetchCIStatus(String ciEndpoint) throws IOException {
         try (CloseableHttpClient client = httpClientFactory.newClient()) {
             HttpGet get = new HttpGet(ciEndpoint);
-            get.addHeader("Accept", "application/json");
+            get.addHeader(HttpHeaders.ACCEPT, "application/json");
             try (CloseableHttpResponse response = client.execute(get)) {
                 try (InputStream content = response.getEntity().getContent()) {
                     InputStreamReader reader = new InputStreamReader(content);
@@ -94,7 +94,7 @@ public class CIStatusValidator {
         }
     }
 
-    protected String getCIEndpoint(Artifact artifact, Path artifactFilePath) {
+    String getCIEndpoint(Artifact artifact, Path artifactFilePath) {
         log.trace("getCIEndpoint");
         String ciEndpoint = null;
         try {
@@ -135,7 +135,7 @@ public class CIStatusValidator {
                 messageEntries.add("\t\tDescription: " + item.get("description").getAsString());
                 messageEntries.add("\t\tSee: " + item.get("target_url").getAsString());
             }
-            String message = messageEntries.stream().collect(Collectors.joining("\n"));
+            String message = String.join("\n", messageEntries);
             if ("success".equals(status.get("state").getAsString())) {
                 return new ValidationResult(true, message);
             } else {
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java b/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
index 51d5394..ec11e51 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.function.Predicate;
 
+import org.apache.http.HttpHeaders;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
@@ -106,7 +107,6 @@ public class VersionClient {
      * 
      * @param release the release to find a successor for
      * @return the successor version, possibly <code>null</code>
-     * @throws IOException in case of communication errors with Jira
      */
     public Version findSuccessorVersion(Release release) {
         Version version;
@@ -115,7 +115,7 @@ public class VersionClient {
             Optional<Version> opt = findVersion ( 
                     v -> isFollowingVersion(Release.fromString(v.getName()).get(0), release)
                     ,client);
-            if ( !opt.isPresent() )
+            if (opt.isEmpty())
                 return null;
             version = opt.get();
             populateRelatedIssuesCount(client, version);
@@ -162,55 +162,36 @@ public class VersionClient {
 
     private HttpPost newPost(String suffix) {
         HttpPost post = new HttpPost(jiraUrlPrefix + suffix);
-        post.addHeader("Content-Type", CONTENT_TYPE_JSON);
-        post.addHeader("Accept", CONTENT_TYPE_JSON);
+        post.addHeader(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE_JSON);
+        post.addHeader(HttpHeaders.ACCEPT, CONTENT_TYPE_JSON);
         return post;
     }
     
     private HttpPut newPut(String suffix) {
         HttpPut put = new HttpPut(jiraUrlPrefix + suffix);
-        put.addHeader("Content-Type", CONTENT_TYPE_JSON);
-        put.addHeader("Accept", CONTENT_TYPE_JSON);
+        put.addHeader(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE_JSON);
+        put.addHeader(HttpHeaders.ACCEPT, CONTENT_TYPE_JSON);
         return put;
     }
     
     public List<Issue> findUnresolvedIssues(Release release) throws IOException {
-        
-        try {
-            HttpGet get = newGet("search");
-            URIBuilder builder = new URIBuilder(get.getURI());
-            builder.addParameter("jql", "project = "+ PROJECT_KEY+" AND resolution = Unresolved AND fixVersion = \"" + release.getName() + "\"");
-            builder.addParameter("fields", "summary");
-            get.setURI(builder.build());
-            
-            try ( CloseableHttpClient client = httpClientFactory.newClient() ) {
-                try (CloseableHttpResponse response = client.execute(get)) {
-                    try (InputStream content = response.getEntity().getContent();
-                            InputStreamReader reader = new InputStreamReader(content)) {
-                        
-                        if (response.getStatusLine().getStatusCode() != 200) {
-                            throw newException(response, reader);
-                        }
-                        
-                        Gson gson = new Gson();
-                        return gson.fromJson(reader, IssueResponse.class).getIssues();
-                    }
-                }
-            }
-        } catch (URISyntaxException e) {
-            throw new IllegalArgumentException(e);
-        }
+        return findIssues("Unresolved", release);
     }
 
     public List<Issue> findFixedIssues(Release release) throws IOException {
+        return findIssues("Fixed", release);
+    }
+
+    private List<Issue> findIssues(String resolution, Release release) throws IOException {
         try {
             HttpGet get = newGet("search");
             URIBuilder builder = new URIBuilder(get.getURI());
-            builder.addParameter("jql", "project = "+ PROJECT_KEY+" AND resolution = Fixed AND fixVersion = \"" + release.getName() + "\"");
+            builder.addParameter("jql",
+                    String.format("project = %s AND resolution = %s AND fixVersion = \"%s\"", PROJECT_KEY, resolution, release.getName()));
             builder.addParameter("fields", "summary");
             get.setURI(builder.build());
 
-            try ( CloseableHttpClient client = httpClientFactory.newClient() ) {
+            try (CloseableHttpClient client = httpClientFactory.newClient()) {
                 try (CloseableHttpResponse response = client.execute(get)) {
                     try (InputStream content = response.getEntity().getContent();
                          InputStreamReader reader = new InputStreamReader(content)) {
@@ -232,7 +213,7 @@ public class VersionClient {
     private IOException newException(CloseableHttpResponse response, InputStreamReader reader) {
         
         StringBuilder message = new StringBuilder();
-        message.append("Status line : " + response.getStatusLine());
+        message.append("Status line : ").append(response.getStatusLine());
         
         try {
             Gson gson = new Gson();
@@ -243,8 +224,7 @@ public class VersionClient {
                         .append(errors.getErrorMessages());
                 
                 if ( !errors.getErrors().isEmpty() )
-                    errors.getErrors().entrySet().stream()
-                        .forEach( e -> message.append(". Error for "  + e.getKey() + " : " + e.getValue()));
+                    errors.getErrors().forEach((key, value) -> message.append(". Error for ").append(key).append(" : ").append(value));
             }
         } catch ( JsonIOException | JsonSyntaxException e) {
             message.append(". Failed parsing response as JSON ( ")
@@ -270,15 +250,14 @@ public class VersionClient {
                 return versions.stream()
                         .filter( v -> v.getName().length() > 1) // avoid old '3' release
                         .filter(matcher)
-                        .sorted(VersionClient::compare)
-                        .findFirst();
+                        .min(VersionClient::compare);
             }
         }
     }
         
     private HttpGet newGet(String suffix) {
         HttpGet get = new HttpGet(jiraUrlPrefix + suffix);
-        get.addHeader("Accept", CONTENT_TYPE_JSON);
+        get.addHeader(HttpHeaders.ACCEPT, CONTENT_TYPE_JSON);
         return get;
     }
     
@@ -330,8 +309,7 @@ public class VersionClient {
     }
 
     public void moveIssuesToNewVersion(Version oldVersion, Version newVersion, List<Issue> issues) {
-        issues.stream()
-            .forEach( i -> moveIssueToNewVersion(oldVersion, newVersion, i));
+        issues.forEach( i -> moveIssueToNewVersion(oldVersion, newVersion, i));
         
     }
     
diff --git a/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java b/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java
index 2ea3597..58a873b 100644
--- a/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java
+++ b/src/main/java/org/apache/sling/cli/impl/mail/Mailer.java
@@ -43,13 +43,12 @@ public class Mailer {
 
     private static final Properties SMTP_PROPERTIES = new Properties();
     static {
-
         SMTP_PROPERTIES.put("mail.smtp.host", "mail-relay.apache.org");
         SMTP_PROPERTIES.put("mail.smtp.port", "465");
         SMTP_PROPERTIES.put("mail.smtp.auth", "true");
         SMTP_PROPERTIES.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
         SMTP_PROPERTIES.put("mail.smtp.socketFactory.fallback", "false");
-    };
+    }
 
     @Reference
     private CredentialsService credentialsService;
@@ -62,7 +61,7 @@ public class Mailer {
             Credentials credentials = credentialsService.getAsfCredentials();
             Transport.send(message, credentials.getUsername(), credentials.getPassword());
         } catch (MessagingException e) {
-            LOGGER.error(String.format("Unable to send the following email:\n%s", source), e);
+            LOGGER.error(String.format("Unable to send the following email:%n%s", source), e);
         }
 
     }
diff --git a/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java b/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java
index 5483f5a..249ac5f 100644
--- a/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java
+++ b/src/main/java/org/apache/sling/cli/impl/nexus/RepositoryService.java
@@ -32,6 +32,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpHeaders;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -209,7 +210,7 @@ public class RepositoryService {
         Path filePath = Files.createFile(artifactFolderPath.resolve(fileName));
         HttpGet get = new HttpGet(repository.getRepositoryURI() + "/" + relativeFilePath);
         if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug("Downloading {}.", get.getURI().toString());
+            LOGGER.debug("Downloading {}.", get.getURI());
         }
         try (CloseableHttpResponse response = client.execute(get)) {
             try (InputStream content = response.getEntity().getContent()) {
@@ -220,7 +221,7 @@ public class RepositoryService {
 
     private HttpGet newGet(String suffix) {
         HttpGet get = new HttpGet(nexusUrlPrefix + suffix);
-        get.addHeader("Accept", CONTENT_TYPE_JSON);
+        get.addHeader(HttpHeaders.ACCEPT, CONTENT_TYPE_JSON);
         return get;
     }
 
diff --git a/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java b/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
index b483f93..49e845d 100644
--- a/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
+++ b/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
@@ -55,7 +55,7 @@ public class MembersFinder {
     private CredentialsService credentialsService;
 
     public synchronized Set<Member> findMembers() {
-        final Set<Member> _members = new HashSet<>();
+        final Set<Member> membersReplacementSet = new HashSet<>();
         if (lastCheck == 0 || System.currentTimeMillis() > lastCheck + STALENESS_IN_HOURS * 3600 * 1000) {
             lastCheck = System.currentTimeMillis();
             try (CloseableHttpClient client = HttpClients.createDefault()) {
@@ -92,12 +92,12 @@ public class MembersFinder {
                         JsonObject people = json.get("people").getAsJsonObject();
                         for (String id : memberIds) {
                             String name = people.get(id).getAsJsonObject().get("name").getAsString();
-                            _members.add(new Member(id, name, pmcMemberIds.contains(id)));
+                            membersReplacementSet.add(new Member(id, name, pmcMemberIds.contains(id)));
                         }
 
                     }
                 }
-                members = Collections.unmodifiableSet(_members);
+                members = Collections.unmodifiableSet(membersReplacementSet);
             } catch (IOException e) {
                 LOGGER.error("Unable to retrieve Apache Sling project members.", e);
             }
diff --git a/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java b/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
index 52c3e28..1e1d024 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
@@ -166,7 +166,7 @@ public class TallyVotesCommand implements Command {
                     }
                 } else {
                     LOGGER.info("Release {} does not have at least 3 binding votes.", releaseFullName);
-                    LOGGER.info("Binding votes: {}.", String.join(", ", bindingVoters));
+                    LOGGER.info("Binding votes: {}.", bindingVoters.isEmpty() ? "none" : String.join(", ", bindingVoters));
                 }
             }
             
diff --git a/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java b/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java
index b5a16bf..e3e4477 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/VerifyReleasesCommand.java
@@ -96,7 +96,7 @@ public class VerifyReleasesCommand implements Command {
                 if (!md5validationResult.isValid()) {
                     failedChecks++;
                 }
-                LOGGER.info("\n" + artifactFilePath.getFileName().toString());
+                LOGGER.info("\n{}", artifactFilePath.getFileName().toString());
                 PGPPublicKey key = validationResult.getKey();
                 LOGGER.info("GPG: {}", validationResult.isValid()
                         ? String.format("signed by %s with key (id=0x%X; " + "fingerprint=%s)", getKeyUserId(key),
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java b/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java
index 96df4c7..5ef6e6c 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/IssuesSearchJiraAction.java
@@ -17,9 +17,9 @@
 package org.apache.sling.cli.impl.jira;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 
-import org.apache.commons.io.Charsets;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.utils.URLEncodedUtils;
 
@@ -28,7 +28,8 @@ import com.sun.net.httpserver.HttpExchange;
 
 public class IssuesSearchJiraAction implements JiraAction {
     
-    static final String KNOWN_JQL_QUERY = "project = SLING AND resolution = Unresolved AND fixVersion = \"Committer CLI 1.0.0\""; 
+    private static final String UNRESOLVED_QUERY = "project = SLING AND resolution = Unresolved AND fixVersion = \"Committer CLI 1.0.0\"";
+    private static final String FIXED_QUERY = "project = SLING AND resolution = Fixed AND fixVersion = \"Committer CLI 1.0.0\"";
 
     @Override
     public boolean tryHandle(HttpExchange ex) throws IOException {
@@ -37,15 +38,21 @@ public class IssuesSearchJiraAction implements JiraAction {
             return false;
         }
         
-        List<NameValuePair> parsed = URLEncodedUtils.parse(ex.getRequestURI(), Charsets.UTF_8);
+        List<NameValuePair> parsed = URLEncodedUtils.parse(ex.getRequestURI(), StandardCharsets.UTF_8);
         
         for ( NameValuePair pair : parsed ) {
-            if ( "jql".equals(pair.getName()) && KNOWN_JQL_QUERY.equals(pair.getValue()) ) {
-                serveFileFromClasspath(ex, "/jira/search/unresolved-committer-cli-1.0.0.json");
-                return true;
+            if ( "jql".equals(pair.getName())) {
+                if (UNRESOLVED_QUERY.equals(pair.getValue())) {
+                    serveFileFromClasspath(ex, "/jira/search/unresolved-committer-cli-1.0.0.json");
+                    return true;
+                } else if (FIXED_QUERY.equals(pair.getValue())) {
+                    serveFileFromClasspath(ex, "/jira/search/fixed-committer-cli-1.0.0.json");
+                    return true;
+                }
             }
         }
-        error(ex, new Gson(), er -> er.getErrorMessages().add("Unable to run unknown JQL query, only available one is [" + KNOWN_JQL_QUERY +"]"));
+        error(ex, new Gson(), er -> er.getErrorMessages().add("Unable to run unknown JQL query, available ones are [" +
+                UNRESOLVED_QUERY + "," + FIXED_QUERY +"]"));
         
         return true;
     }
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java b/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java
index 6e98b4a..9c5c0cf 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/VersionClientTest.java
@@ -114,4 +114,18 @@ public class VersionClientTest {
         assertThat(issues.get(0).getKey(), equalTo("SLING-8338"));
         assertThat(issues.get(1).getKey(), equalTo("SLING-8337"));
     }
+
+    @Test
+    public void findFixedIssuesForVersion() throws IOException {
+        List<Issue> issues = versionClient.findFixedIssues(Release.fromString("Committer CLI 1.0.0").get(0));
+
+        assertThat(issues, hasSize(7));
+        assertThat(issues.get(0).getKey(), equalTo("SLING-8707"));
+        assertThat(issues.get(1).getKey(), equalTo("SLING-8699"));
+        assertThat(issues.get(2).getKey(), equalTo("SLING-8395"));
+        assertThat(issues.get(3).getKey(), equalTo("SLING-8394"));
+        assertThat(issues.get(4).getKey(), equalTo("SLING-8393"));
+        assertThat(issues.get(5).getKey(), equalTo("SLING-8392"));
+        assertThat(issues.get(6).getKey(), equalTo("SLING-8338"));
+    }
 }
diff --git a/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java b/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java
index 4591f43..abba1a0 100644
--- a/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/nexus/RepositoryServiceTest.java
@@ -18,7 +18,6 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.cli.impl.nexus;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;