diff --git a/src/main/java/org/eclipsefoundation/git/eca/api/models/GithubCommit.java b/src/main/java/org/eclipsefoundation/git/eca/api/models/GithubCommit.java index 3cb2ea3e279af8110a9dce9a63115d6b32440a08..631c78cf6bb1ce3248afca34b9007921bf88ded2 100644 --- a/src/main/java/org/eclipsefoundation/git/eca/api/models/GithubCommit.java +++ b/src/main/java/org/eclipsefoundation/git/eca/api/models/GithubCommit.java @@ -28,9 +28,9 @@ public abstract class GithubCommit { public abstract CommitData getCommit(); - public abstract CommitUser getCommitter(); + public abstract GithubCommitUser getCommitter(); - public abstract CommitUser getAuthor(); + public abstract GithubCommitUser getAuthor(); public abstract List<ParentCommit> getParents(); @@ -45,9 +45,9 @@ public abstract class GithubCommit { public abstract Builder setCommit(CommitData commit); - public abstract Builder setCommitter(CommitUser committer); + public abstract Builder setCommitter(GithubCommitUser committer); - public abstract Builder setAuthor(CommitUser author); + public abstract Builder setAuthor(GithubCommitUser author); public abstract Builder setParents(List<ParentCommit> parents); @@ -57,9 +57,9 @@ public abstract class GithubCommit { @AutoValue @JsonDeserialize(builder = AutoValue_GithubCommit_CommitData.Builder.class) public abstract static class CommitData { - public abstract BriefCommitUser getAuthor(); + public abstract GitCommitUser getAuthor(); - public abstract BriefCommitUser getCommitter(); + public abstract GitCommitUser getCommitter(); public static Builder builder() { return new AutoValue_GithubCommit_CommitData.Builder(); @@ -68,23 +68,23 @@ public abstract class GithubCommit { @AutoValue.Builder @JsonPOJOBuilder(withPrefix = "set") public abstract static class Builder { - public abstract Builder setAuthor(BriefCommitUser author); + public abstract Builder setAuthor(GitCommitUser author); - public abstract Builder setCommitter(BriefCommitUser committer); + public abstract Builder setCommitter(GitCommitUser committer); public abstract CommitData build(); } } @AutoValue - @JsonDeserialize(builder = AutoValue_GithubCommit_BriefCommitUser.Builder.class) - public abstract static class BriefCommitUser { + @JsonDeserialize(builder = AutoValue_GithubCommit_GitCommitUser.Builder.class) + public abstract static class GitCommitUser { public abstract String getName(); public abstract String getEmail(); public static Builder builder() { - return new AutoValue_GithubCommit_BriefCommitUser.Builder(); + return new AutoValue_GithubCommit_GitCommitUser.Builder(); } @AutoValue.Builder @@ -94,17 +94,17 @@ public abstract class GithubCommit { public abstract Builder setEmail(String email); - public abstract BriefCommitUser build(); + public abstract GitCommitUser build(); } } @AutoValue - @JsonDeserialize(builder = AutoValue_GithubCommit_CommitUser.Builder.class) - public abstract static class CommitUser { + @JsonDeserialize(builder = AutoValue_GithubCommit_GithubCommitUser.Builder.class) + public abstract static class GithubCommitUser { public abstract String getLogin(); public static Builder builder() { - return new AutoValue_GithubCommit_CommitUser.Builder(); + return new AutoValue_GithubCommit_GithubCommitUser.Builder(); } @AutoValue.Builder @@ -112,7 +112,7 @@ public abstract class GithubCommit { public abstract static class Builder { public abstract Builder setLogin(String login); - public abstract CommitUser build(); + public abstract GithubCommitUser build(); } } diff --git a/src/main/java/org/eclipsefoundation/git/eca/resource/GithubAdjacentResource.java b/src/main/java/org/eclipsefoundation/git/eca/resource/GithubAdjacentResource.java index 5fc19e286cbe1327e1278844f9df4c8ed075ce68..f1fc549635a92b590695ab70c033d920ce1b09c7 100644 --- a/src/main/java/org/eclipsefoundation/git/eca/resource/GithubAdjacentResource.java +++ b/src/main/java/org/eclipsefoundation/git/eca/resource/GithubAdjacentResource.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.function.Supplier; import java.util.stream.Collectors; import javax.inject.Inject; @@ -100,6 +101,7 @@ public abstract class GithubAdjacentResource { * @param repositoryUrl the URL of the repository that contains the commits to validate * @return the populated validation request for the Github request information */ + @SuppressWarnings("null") ValidationRequest generateRequest(String installationId, String repositoryFullName, int pullRequestNumber, String repositoryUrl) { checkRequestParameters(installationId, repositoryFullName, pullRequestNumber); // get the commits that will be validated, don't cache as changes can come in too fast for it to be useful @@ -121,15 +123,15 @@ public abstract class GithubAdjacentResource { .setHash(c.getSha()) .setAuthor(GitUser .builder() - .setMail(c.getCommit().getAuthor().getEmail()) - .setName(c.getCommit().getAuthor().getName()) - .setExternalId(c.getAuthor().getLogin()) + .setMail(getNullableString(() -> c.getCommit().getAuthor().getEmail())) + .setName(getNullableString(() -> c.getCommit().getAuthor().getName())) + .setExternalId(getNullableString(() -> c.getAuthor().getLogin())) .build()) .setCommitter(GitUser .builder() - .setMail(c.getCommit().getCommitter().getEmail()) - .setName(c.getCommit().getCommitter().getName()) - .setExternalId(c.getCommitter().getLogin()) + .setMail(getNullableString(() -> c.getCommit().getCommitter().getEmail())) + .setName(getNullableString(() -> c.getCommit().getCommitter().getName())) + .setExternalId(getNullableString(() -> c.getCommitter().getLogin())) .build()) .setParents(c.getParents().stream().map(ParentCommit::getSha).collect(Collectors.toList())) .build()) @@ -272,6 +274,21 @@ public abstract class GithubAdjacentResource { .build()); } + /** + * Wraps a nullable value fetch to handle errors and will return null if the value can't be retrieved. + * + * @param supplier the method with potentially nullable values + * @return the value if it can be found, or null + */ + private String getNullableString(Supplier<String> supplier) { + try { + return supplier.get(); + } catch (NullPointerException e) { + // suppress, as we don't care at this point if its null + } + return null; + } + /** * Validates required fields for processing requests. *