From fbebb6b482197cb2332c538a8a1cec62fc4b6448 Mon Sep 17 00:00:00 2001 From: Luisa Date: Fri, 28 Nov 2025 16:15:39 -0300 Subject: [PATCH 01/19] feat: adding new graphql query to get file stats --- .../operations/CommitQueryExecutor.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java index 8aa067b..354fc1b 100644 --- a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java @@ -36,6 +36,7 @@ import br.com.jadson.snooper.github.data.association.graphql.ResultGraphQLRepository; import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; import br.com.jadson.snooper.github.data.stats.CommitStats; +import br.com.jadson.snooper.github.data.stats.FileStats; import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; import br.com.jadson.snooper.github.data.stats.graphql.CommitStatsNode; import br.com.jadson.snooper.github.data.stats.graphql.GraphQLCommitResponse; @@ -389,6 +390,43 @@ public List getCommitsWithStats(String projectFullName, L return allCommits; } + public FileStats getFileStats(String projectFullName, String filePath, LocalDateTime sinceDate, LocalDateTime untilDate){ + validateRepoName(projectFullName); + + String[] repoParts = projectFullName.split("/"); + String owner = repoParts[0]; + String repo = repoParts[1]; + + String since = sinceDate.toLocalDate().atStartOfDay().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT); + String until = untilDate.plusDays(1).toLocalDate().atStartOfDay().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT); + + System.out.println("Executing getFileStats for " + filePath + " from " + since + " to " + until); + + String query = String.format( + "repository(owner: \\\"%s\\\", name: \\\"%s\\\") { " + + " defaultBranchRef { " + + " target { " + + " ... on Commit { " + + " history(path: \\\"%s\\\", since: \\\"%s\\\", until: \\\"%s\\\") { " + + " totalCount " + + " } " + + " } " + + " } " + + " } " + + "} ", + owner, repo, filePath, since, until + ); + + GraphQLCommitResponse queryResult = executeCommitStatsQuery(query); + + FileStats fileStats = new FileStats(); + fileStats.churn = queryResult.data.repository.defaultBranchRef.target.history.totalCount; + fileStats.path = filePath; + + return fileStats; + + } + private ResultGraphQLRepository executeQueryAssociatedPR(String query) { From 25098cc9a2aa28c01a100643df010031d4724bcf Mon Sep 17 00:00:00 2001 From: Luisa Date: Fri, 28 Nov 2025 16:16:40 -0300 Subject: [PATCH 02/19] feat: creating new file data classes --- .../snooper/github/data/repo/GitHubTreeInfo.java | 14 ++++++++++++++ .../snooper/github/data/stats/FileStats.java | 9 +++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java create mode 100644 src/main/java/br/com/jadson/snooper/github/data/stats/FileStats.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java b/src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java new file mode 100644 index 0000000..f7e6f21 --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java @@ -0,0 +1,14 @@ +package br.com.jadson.snooper.github.data.repo; + +import java.util.List; + +public class GitHubTreeInfo { + public String sha; + public List tree; + + public static class TreeItem { + public String path; + public String type; // "blob" = arquivo, "tree" = diretório + public long size; + } +} diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/FileStats.java b/src/main/java/br/com/jadson/snooper/github/data/stats/FileStats.java new file mode 100644 index 0000000..aaad5a1 --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/FileStats.java @@ -0,0 +1,9 @@ +package br.com.jadson.snooper.github.data.stats; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class FileStats { + public String path; + public int churn; +} From b00dfe86d6c662a30dd240f138083501129dd706 Mon Sep 17 00:00:00 2001 From: Luisa Date: Fri, 28 Nov 2025 16:18:02 -0300 Subject: [PATCH 03/19] feat: adding new atribute --- .../br/com/jadson/snooper/github/data/stats/graphql/History.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java index 8f28ba3..c00e3af 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java @@ -8,4 +8,5 @@ public class History { public PageInfo pageInfo; public List nodes; + public int totalCount; } \ No newline at end of file From 6ccaa8d3d0b29fca61b6185cf188fe8c5ed7862e Mon Sep 17 00:00:00 2001 From: Luisa Date: Fri, 28 Nov 2025 16:18:39 -0300 Subject: [PATCH 04/19] feat: creating method to get all files --- .../github/operations/RepoQueryExecutor.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java b/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java index c3ce81d..222fe33 100644 --- a/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java @@ -30,11 +30,14 @@ package br.com.jadson.snooper.github.operations; import br.com.jadson.snooper.github.data.repo.GitHubRepoInfo; +import br.com.jadson.snooper.github.data.repo.GitHubTreeInfo; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; +import java.util.List; + /** * Return information about repository of github * @@ -82,4 +85,16 @@ public GitHubRepoInfo getRepoInfo(String repoFullName) { return result.getBody(); } + public GitHubTreeInfo getAllFiles(String repoFullName, String branch){ + ResponseEntity result; + String url = GIT_HUB_API_URL + + "/repos/" + repoFullName + "/git/trees/" + branch + "?recursive=1"; + RestTemplate restTemplate = new RestTemplate(); + + HttpEntity entity = new HttpEntity(getDefaultHeaders()); + + result = restTemplate.exchange(url, HttpMethod.GET, entity, GitHubTreeInfo.class); + return result.getBody(); + } + } From fbb252ac8beaa83b60b346906adcd4fbb15da1d6 Mon Sep 17 00:00:00 2001 From: Luisa Date: Fri, 28 Nov 2025 16:22:49 -0300 Subject: [PATCH 05/19] feat: creating new data class --- .../jadson/snooper/gitlab/data/repo/GitLabTreeItem.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java b/src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java new file mode 100644 index 0000000..656d1a0 --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java @@ -0,0 +1,9 @@ +package br.com.jadson.snooper.gitlab.data.repo; + +public class GitLabTreeItem { + public String name; + public String path; + public String type; // "blob" = arquivo, "tree" = diretório + public long size; + +} From 2de9cb86de1f16c2d9d7a8a7171d560566bfeaa9 Mon Sep 17 00:00:00 2001 From: Luisa Date: Fri, 28 Nov 2025 16:23:26 -0300 Subject: [PATCH 06/19] feat: adding new gitlab query executor --- .../operations/GitLabRepoQueryExecutor.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java diff --git a/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java new file mode 100644 index 0000000..66286c7 --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java @@ -0,0 +1,74 @@ +package br.com.jadson.snooper.gitlab.operations; + +import br.com.jadson.snooper.gitlab.data.commit.GitLabCommitInfo; +import br.com.jadson.snooper.gitlab.data.repo.GitLabTreeItem; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class GitLabRepoQueryExecutor extends AbstractGitLabQueryExecutor { + + public GitLabRepoQueryExecutor() { + + } + + public GitLabRepoQueryExecutor(String gitlabURL, String gitlabToken) { + this(gitlabURL, gitlabToken, false); + } + + public GitLabRepoQueryExecutor(String gitlabURL, String gitlabToken, boolean disableSslVerification) { + if (gitlabToken == null || gitlabToken.trim().equals("") ) { + throw new RuntimeException("Invalid GitLab Token: " + gitlabToken); + } + if (gitlabURL == null || gitlabURL.trim().equals("") ) { + throw new RuntimeException("Invalid GitLab URL: " + gitlabURL); + } + + this.gitlabURL = gitlabURL; + this.gitlabToken = gitlabToken; + this.disableSslVerification = disableSslVerification; + } + + public List getAllFiles(String repoFullName) { + int page = 1; + String parameters = ""; + ArrayList allPull = new ArrayList(); + + + ResponseEntity result; + do { + parameters = "?recursive=true&page=" + page + "&per_page=" + this.pageSize; + + String query = getGitLabAPIURL() + encodeProjectName(repoFullName) + "/repository/tree" + parameters; + + // encode "/" in "%2F" supported + URI uri = null; + try { + uri = new URI(query); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + System.out.println("Getting Next File: " + query); + RestTemplate restTemplate = new RestTemplate(); + + checkDisableSslVerification(); + + + HttpEntity entity = new HttpEntity(this.getDefaultHeaders()); + result = restTemplate.exchange(uri, HttpMethod.GET, entity, GitLabTreeItem[].class); + allPull.addAll(Arrays.asList((GitLabTreeItem[])result.getBody())); + ++page; + } while(result != null && ((GitLabTreeItem[])result.getBody()).length > 0 && !this.testEnvironment); + + return allPull; + } + +} From 082ec70dcc65848114a8e329d68b1e956dc8bb36 Mon Sep 17 00:00:00 2001 From: Luisa Date: Thu, 11 Jun 2026 09:27:07 -0300 Subject: [PATCH 07/19] feat: feat: add GitHub changed file data model --- .../snooper/github/data/commit/FileChanged.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/br/com/jadson/snooper/github/data/commit/FileChanged.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/FileChanged.java b/src/main/java/br/com/jadson/snooper/github/data/commit/FileChanged.java new file mode 100644 index 0000000..26faae6 --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/github/data/commit/FileChanged.java @@ -0,0 +1,11 @@ +package br.com.jadson.snooper.github.data.commit; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class FileChanged { + public String filename; + public int additions; + public int deletions; + public int changes; +} From a4832e5fdcb7100074f88c1a8ee3a296640b1a2a Mon Sep 17 00:00:00 2001 From: Luisa Date: Thu, 11 Jun 2026 09:29:43 -0300 Subject: [PATCH 08/19] feat: adding list of FileChanged to GithubCommitInfo --- .../jadson/snooper/github/data/commit/GitHubCommitInfo.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java index b41bc87..ead2e21 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java +++ b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java @@ -29,8 +29,10 @@ */ package br.com.jadson.snooper.github.data.commit; +import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.util.ArrayList; import java.util.List; /** @@ -50,5 +52,7 @@ public class GitHubCommitInfo { public Author author; public Committer committer; public List parents; + public List files; + public GitHubCommitInfo() {} } From e44d91aa97d5bf8e4939ada0ffbc6b143ee24364 Mon Sep 17 00:00:00 2001 From: Luisa Date: Thu, 11 Jun 2026 09:30:58 -0300 Subject: [PATCH 09/19] feat: implementing getCommitFiles in CommitQueryExecutor --- .../operations/CommitQueryExecutor.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java index 354fc1b..74f8f73 100644 --- a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java @@ -34,6 +34,7 @@ import br.com.jadson.snooper.github.data.association.graphql.AssociatedPullRequestsEdge; import br.com.jadson.snooper.github.data.association.graphql.CommitNode; import br.com.jadson.snooper.github.data.association.graphql.ResultGraphQLRepository; +import br.com.jadson.snooper.github.data.commit.FileChanged; import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; import br.com.jadson.snooper.github.data.stats.CommitStats; import br.com.jadson.snooper.github.data.stats.FileStats; @@ -390,6 +391,29 @@ public List getCommitsWithStats(String projectFullName, L return allCommits; } + public List getCommitFiles(String repoFullName, GitHubCommitInfo commit){ + validateRepoName(repoFullName); + // IMPORTANTE state=all for bring all PR + String parameters = ""; + ResponseEntity result; + + String query = GIT_HUB_API_URL +"/repos/"+repoFullName+"/commits/"+commit.sha; + + System.out.println("Getting files for commit"); + + RestTemplate restTemplate = new RestTemplate(); + + HttpEntity entity = new HttpEntity(getDefaultHeaders()); + + result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo.class); + + if (result.getBody() != null && result.getBody().files != null) { + return result.getBody().files; + } + + return new ArrayList<>(); + } + public FileStats getFileStats(String projectFullName, String filePath, LocalDateTime sinceDate, LocalDateTime untilDate){ validateRepoName(projectFullName); From 8f46258a4eabf3f5086894d3bfffb06ca911d253 Mon Sep 17 00:00:00 2001 From: Luisa Date: Thu, 11 Jun 2026 09:39:11 -0300 Subject: [PATCH 10/19] feat:add GitLab changed file data model --- .../github/data/commit/GitHubCommitInfo.java | 54 ------------------- .../gitlab/data/commit/FileChanged.java | 10 ++++ 2 files changed, 10 insertions(+), 54 deletions(-) create mode 100644 src/main/java/br/com/jadson/snooper/gitlab/data/commit/FileChanged.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java index ead2e21..bf60dda 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java +++ b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java @@ -1,58 +1,4 @@ -/* - * Federal University of Rio Grande do Norte - * Department of Informatics and Applied Mathematics - * Collaborative & Automated Software Engineering (CASE) Research Group - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * - * snooper - * br.com.jadson.snooper.github.data.commit - * GitHubCommitInfo - * 24/02/21 - */ package br.com.jadson.snooper.github.data.commit; -import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -import java.util.ArrayList; -import java.util.List; - -/** - * Information of a commit in github API. - * - * Jadson Santos - jadsonjs@gmail.com - */ -@JsonIgnoreProperties(ignoreUnknown = true) public class GitHubCommitInfo { - - public String sha; - public String node_id; - public Commit commit; - public String url; - public String html_url; - public String comments_url; - public Author author; - public Committer committer; - public List parents; - public List files; - - public GitHubCommitInfo() {} } diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/FileChanged.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/FileChanged.java new file mode 100644 index 0000000..5f32b4d --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/FileChanged.java @@ -0,0 +1,10 @@ +package br.com.jadson.snooper.gitlab.data.commit; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class FileChanged { + public String filename; + public int additions; + public int deletions; +} From f87a46c23664468e26037a6f1f925e23f2462095 Mon Sep 17 00:00:00 2001 From: Luisa Date: Thu, 11 Jun 2026 09:39:44 -0300 Subject: [PATCH 11/19] feat: add GitLab commit differences data model --- .../gitlab/data/commit/CommitDiff.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitDiff.java diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitDiff.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitDiff.java new file mode 100644 index 0000000..ea0737a --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitDiff.java @@ -0,0 +1,36 @@ +package br.com.jadson.snooper.gitlab.data.commit; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class CommitDiff { + @JsonProperty("old_path") + public String oldPath; + + @JsonProperty("new_path") + public String newPath; + + @JsonProperty("new_file") + public Boolean newFile; + + @JsonProperty("renamed_file") + public Boolean renamedFile; + + @JsonProperty("deleted_file") + public Boolean deletedFile; + + @JsonProperty("diff") + public String diff; + + @JsonProperty("collapsed") + public Boolean collapsed; + + @JsonProperty("too_large") + public Boolean tooLarge; + + @JsonProperty("generated_file") + public Boolean generatedFile; +} + + From 7a0b91b11e4ca9b20694b733f09a0016eb9f5c68 Mon Sep 17 00:00:00 2001 From: Luisa Date: Thu, 11 Jun 2026 09:41:40 -0300 Subject: [PATCH 12/19] feat: implementing getCommitFiles to GitlLabCommitQueryExecutor --- .../operations/GitLabCommitQueryExecutor.java | 86 ++++++++++++++++++- 1 file changed, 84 insertions(+), 2 deletions(-) diff --git a/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java index 4f079f1..9da1e80 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java @@ -1,7 +1,8 @@ package br.com.jadson.snooper.gitlab.operations; -import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; +import br.com.jadson.snooper.gitlab.data.commit.CommitDiff; import br.com.jadson.snooper.gitlab.data.commit.GitLabCommitInfo; +import br.com.jadson.snooper.gitlab.data.commit.FileChanged; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -80,4 +81,85 @@ public List getCommits(String repoFullName) { return allPull; } -} + public List getCommitsFiles(String repoFullName, GitLabCommitInfo commit){ + validateRepoName(repoFullName); + + ResponseEntity result; + + String query = getGitLabAPIURL() + + encodeProjectName(repoFullName) + + "/repository/commits/" + + commit.id + + "/diff"; + + System.out.println(query); + + System.out.println("Getting files for GitLab commit"); + + URI uri = null; + try { + uri = new URI(query); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + checkDisableSslVerification(); + + + RestTemplate restTemplate = new RestTemplate(); + HttpEntity entity = new HttpEntity(this.getDefaultHeaders()); + result = restTemplate.exchange(uri, HttpMethod.GET, entity, CommitDiff[].class); + + + + if (result.getBody() == null) { + return new ArrayList<>(); + } + + List files = new ArrayList<>(); + + for (CommitDiff diff : result.getBody()) { + FileChanged file = new FileChanged(); + + file.filename = diff.newPath != null ? diff.newPath : diff.oldPath; + file.additions = countAdditions(diff.diff); + file.deletions = countDeletions(diff.diff); + + files.add(file); + } + + return files; + } + + private int countAdditions(String diff){ + if (diff == null || diff.isEmpty()) { + return 0; + } + + int additions = 0; + + for (String line : diff.split("\n")) { + if (line.startsWith("+") && !line.startsWith("+++")) { + additions++; + } + } + + return additions; + } + + private int countDeletions(String diff) { + if (diff == null || diff.isEmpty()) { + return 0; + } + + int deletions = 0; + + for (String line : diff.split("\n")) { + if (line.startsWith("-") && !line.startsWith("---")) { + deletions++; + } + } + + return deletions; + } + } \ No newline at end of file From aa4c7b3a11513cba8db4fbe00d1e4486f57f6b5d Mon Sep 17 00:00:00 2001 From: Luisa Date: Thu, 11 Jun 2026 09:42:46 -0300 Subject: [PATCH 13/19] fix: renaming data model to pattern --- .../github/data/commit/CommitInfo.java | 56 +++++++++++++++++++ .../github/data/commit/GitHubCommitInfo.java | 4 -- .../operations/CommitQueryExecutor.java | 34 ++++++----- .../operations/PullRequestQueryExecutor.java | 1 - .../operations/CommitQueryExecutorTest.java | 8 +-- 5 files changed, 76 insertions(+), 27 deletions(-) create mode 100644 src/main/java/br/com/jadson/snooper/github/data/commit/CommitInfo.java delete mode 100644 src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/CommitInfo.java b/src/main/java/br/com/jadson/snooper/github/data/commit/CommitInfo.java new file mode 100644 index 0000000..1e07da1 --- /dev/null +++ b/src/main/java/br/com/jadson/snooper/github/data/commit/CommitInfo.java @@ -0,0 +1,56 @@ +/* + * Federal University of Rio Grande do Norte + * Department of Informatics and Applied Mathematics + * Collaborative & Automated Software Engineering (CASE) Research Group + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * + * snooper + * br.com.jadson.snooper.github.data.commit + * GitHubCommitInfo + * 24/02/21 + */ +package br.com.jadson.snooper.github.data.commit; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.util.List; + +/** + * Information of a commit in github API. + * + * Jadson Santos - jadsonjs@gmail.com + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class CommitInfo { + + public String sha; + public String node_id; + public Commit commit; + public String url; + public String html_url; + public String comments_url; + public Author author; + public Committer committer; + public List parents; + public List files; + + public CommitInfo() {} +} diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java deleted file mode 100644 index bf60dda..0000000 --- a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java +++ /dev/null @@ -1,4 +0,0 @@ -package br.com.jadson.snooper.github.data.commit; - -public class GitHubCommitInfo { -} diff --git a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java index 74f8f73..96d4b21 100644 --- a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java @@ -35,8 +35,7 @@ import br.com.jadson.snooper.github.data.association.graphql.CommitNode; import br.com.jadson.snooper.github.data.association.graphql.ResultGraphQLRepository; import br.com.jadson.snooper.github.data.commit.FileChanged; -import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; -import br.com.jadson.snooper.github.data.stats.CommitStats; +import br.com.jadson.snooper.github.data.commit.CommitInfo; import br.com.jadson.snooper.github.data.stats.FileStats; import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; import br.com.jadson.snooper.github.data.stats.graphql.CommitStatsNode; @@ -50,7 +49,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; -import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; @@ -72,7 +70,7 @@ public class CommitQueryExecutor extends AbstractGitHubQueryExecutor { * @param repoFullName * @return */ - public List getCommits(String repoFullName) { + public List getCommits(String repoFullName) { validateRepoName(repoFullName); @@ -81,9 +79,9 @@ public List getCommits(String repoFullName) { // IMPORTANTE state=all for bring all PR String parameters = ""; - List allPull = new ArrayList<>(); + List allPull = new ArrayList<>(); - ResponseEntity result; + ResponseEntity result; do { @@ -100,7 +98,7 @@ public List getCommits(String repoFullName) { HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo[].class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo[].class); allPull.addAll( Arrays.asList(result.getBody()) ); @@ -126,7 +124,7 @@ public List getCommits(String repoFullName) { * @param ref a branch or a tag name * @return all commits form a branch or tag */ - public GitHubCommitInfo getCommitsOfReference(String repoFullName, String ref) { + public CommitInfo getCommitsOfReference(String repoFullName, String ref) { validateRepoName(repoFullName); @@ -134,9 +132,9 @@ public GitHubCommitInfo getCommitsOfReference(String repoFullName, String ref) { String parameters = ""; - GitHubCommitInfo commitInfo = null; + CommitInfo commitInfo = null; - ResponseEntity result; + ResponseEntity result; // do { @@ -153,7 +151,7 @@ public GitHubCommitInfo getCommitsOfReference(String repoFullName, String ref) { HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo.class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo.class); commitInfo = result.getBody(); @@ -172,7 +170,7 @@ public GitHubCommitInfo getCommitsOfReference(String repoFullName, String ref) { * @param repoFullName * @return */ - public List commitsOfPullRequest(String repoFullName, long prNumber) { + public List commitsOfPullRequest(String repoFullName, long prNumber) { validateRepoName(repoFullName); @@ -181,9 +179,9 @@ public List commitsOfPullRequest(String repoFullName, long prN // IMPORTANTE state=all for bring all PR String parameters = ""; - List allPull = new ArrayList<>(); + List allPull = new ArrayList<>(); - ResponseEntity result; + ResponseEntity result; do { @@ -200,7 +198,7 @@ public List commitsOfPullRequest(String repoFullName, long prN HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo[].class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo[].class); allPull.addAll( Arrays.asList(result.getBody()) ); @@ -391,11 +389,11 @@ public List getCommitsWithStats(String projectFullName, L return allCommits; } - public List getCommitFiles(String repoFullName, GitHubCommitInfo commit){ + public List getCommitFiles(String repoFullName, CommitInfo commit){ validateRepoName(repoFullName); // IMPORTANTE state=all for bring all PR String parameters = ""; - ResponseEntity result; + ResponseEntity result; String query = GIT_HUB_API_URL +"/repos/"+repoFullName+"/commits/"+commit.sha; @@ -405,7 +403,7 @@ public List getCommitFiles(String repoFullName, GitHubCommitInfo co HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo.class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo.class); if (result.getBody() != null && result.getBody().files != null) { return result.getBody().files; diff --git a/src/main/java/br/com/jadson/snooper/github/operations/PullRequestQueryExecutor.java b/src/main/java/br/com/jadson/snooper/github/operations/PullRequestQueryExecutor.java index 8abea3e..5b8022e 100644 --- a/src/main/java/br/com/jadson/snooper/github/operations/PullRequestQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/github/operations/PullRequestQueryExecutor.java @@ -25,7 +25,6 @@ */ package br.com.jadson.snooper.github.operations; -import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; import br.com.jadson.snooper.github.data.pull.GitHubPullRequestInfo; import br.com.jadson.snooper.github.data.pull.GitHubQTDPullRequestInfo; import br.com.jadson.snooper.utils.DateUtils; diff --git a/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java b/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java index 2754b75..8b80c21 100644 --- a/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java +++ b/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java @@ -1,7 +1,7 @@ package br.com.jadson.snooper.github.operations; import br.com.jadson.snooper.github.data.association.AssociationCommitPullRequestInfo; -import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; +import br.com.jadson.snooper.github.data.commit.CommitInfo; import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -28,7 +28,7 @@ void testCommitsOfProject(){ commitExecutor.setPageSize(100); commitExecutor.setGithubToken(token); commitExecutor.setTestEnvironment(true); - List commitsInfo = commitExecutor.getCommits("vuejs/vue-router"); + List commitsInfo = commitExecutor.getCommits("vuejs/vue-router"); Assertions.assertTrue(commitsInfo.size() == 10); Assertions.assertEquals("677f3c1f714fb61cc495345e535409b1cbb90429", commitsInfo.get(0).sha); @@ -43,7 +43,7 @@ void testCommitsOfReferemce(){ commitExecutor.setPageSize(1); commitExecutor.setGithubToken(token); commitExecutor.setTestEnvironment(true); - GitHubCommitInfo commitsInfo = commitExecutor.getCommitsOfReference("traPtitech/traQ/", "master"); + CommitInfo commitsInfo = commitExecutor.getCommitsOfReference("traPtitech/traQ/", "master"); // Assertions.assertTrue(commitsInfo.size() == 1); Assertions.assertNotNull(commitsInfo.sha); @@ -60,7 +60,7 @@ void testCommitsOfProjectByPullRequest(){ CommitQueryExecutor commitExecutor = new CommitQueryExecutor(); commitExecutor.setPageSize(100); commitExecutor.setGithubToken(token); - List commitsInfo = commitExecutor.commitsOfPullRequest("octocat/Hello-World",796); + List commitsInfo = commitExecutor.commitsOfPullRequest("octocat/Hello-World",796); Assertions.assertTrue(commitsInfo.size() > 0); Assertions.assertEquals("5e100cfdca24f3fb781c72348c7c63b418e4246d", commitsInfo.get(0).sha); From 1a69e265673ee1963dfde016d86362ac4ee9df6d Mon Sep 17 00:00:00 2001 From: Luisa Date: Mon, 22 Jun 2026 09:13:26 -0300 Subject: [PATCH 14/19] feat: adding documentation comments --- .../data/commit/{CommitInfo.java => GitHubCommitInfo.java} | 0 .../commit/{FileChanged.java => GitHubFileChanged.java} | 0 .../stats/{CommitStats.java => GitHubCommitStats.java} | 0 .../data/stats/{FileStats.java => GitHubFileStats.java} | 0 .../jadson/snooper/github/data/stats/graphql/Comments.java | 5 +++++ .../snooper/github/data/stats/graphql/CommitStatsNode.java | 6 +++++- .../com/jadson/snooper/github/data/stats/graphql/Data.java | 6 +++++- .../github/data/stats/graphql/DefaultBranchRef.java | 5 +++++ .../jadson/snooper/github/data/stats/graphql/GitActor.java | 5 +++++ .../github/data/stats/graphql/GraphQLCommitResponse.java | 5 +++++ .../jadson/snooper/github/data/stats/graphql/History.java | 6 ++++++ .../snooper/github/data/stats/graphql/Repository.java | 5 +++++ .../jadson/snooper/github/data/stats/graphql/Target.java | 5 +++++ .../com/jadson/snooper/github/data/stats/graphql/User.java | 5 +++++ .../data/commit/{CommitDiff.java => GitLabCommitDiff.java} | 0 .../commit/{CommitStats.java => GitLabCommitStats.java} | 0 .../commit/{FileChanged.java => GitLabFileChanged.java} | 0 .../jadson/snooper/gitlab/data/repo/GitLabTreeItem.java | 7 +++++++ 18 files changed, 58 insertions(+), 2 deletions(-) rename src/main/java/br/com/jadson/snooper/github/data/commit/{CommitInfo.java => GitHubCommitInfo.java} (100%) rename src/main/java/br/com/jadson/snooper/github/data/commit/{FileChanged.java => GitHubFileChanged.java} (100%) rename src/main/java/br/com/jadson/snooper/github/data/stats/{CommitStats.java => GitHubCommitStats.java} (100%) rename src/main/java/br/com/jadson/snooper/github/data/stats/{FileStats.java => GitHubFileStats.java} (100%) rename src/main/java/br/com/jadson/snooper/gitlab/data/commit/{CommitDiff.java => GitLabCommitDiff.java} (100%) rename src/main/java/br/com/jadson/snooper/gitlab/data/commit/{CommitStats.java => GitLabCommitStats.java} (100%) rename src/main/java/br/com/jadson/snooper/gitlab/data/commit/{FileChanged.java => GitLabFileChanged.java} (100%) diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/CommitInfo.java b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java similarity index 100% rename from src/main/java/br/com/jadson/snooper/github/data/commit/CommitInfo.java rename to src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/FileChanged.java b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubFileChanged.java similarity index 100% rename from src/main/java/br/com/jadson/snooper/github/data/commit/FileChanged.java rename to src/main/java/br/com/jadson/snooper/github/data/commit/GitHubFileChanged.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/CommitStats.java b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStats.java similarity index 100% rename from src/main/java/br/com/jadson/snooper/github/data/stats/CommitStats.java rename to src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStats.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/FileStats.java b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubFileStats.java similarity index 100% rename from src/main/java/br/com/jadson/snooper/github/data/stats/FileStats.java rename to src/main/java/br/com/jadson/snooper/github/data/stats/GitHubFileStats.java diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Comments.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Comments.java index 8329225..cdabd21 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Comments.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Comments.java @@ -2,6 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Comments information of a GitHub commit returned by the GraphQL API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class Comments { public int totalCount; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/CommitStatsNode.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/CommitStatsNode.java index d81be2d..ab16e8f 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/CommitStatsNode.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/CommitStatsNode.java @@ -2,7 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; - +/** + * Information about a commit node returned by the GitHub GraphQL API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class CommitStatsNode { public String oid; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Data.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Data.java index 9224e90..cbe0d2f 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Data.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Data.java @@ -2,7 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - +/** + * Data object returned by the GitHub GraphQL API response. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class Data { public Repository repository; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/DefaultBranchRef.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/DefaultBranchRef.java index 0d0bbff..1ad3eb1 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/DefaultBranchRef.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/DefaultBranchRef.java @@ -2,6 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Default branch reference returned by the GitHub GraphQL API response. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class DefaultBranchRef { public Target target; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GitActor.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GitActor.java index 4f04153..0d261aa 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GitActor.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GitActor.java @@ -3,6 +3,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.util.Date; +/** + * Information about the author or committer of a GitHub commit. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class GitActor { public User user; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GraphQLCommitResponse.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GraphQLCommitResponse.java index fb49811..98a48be 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GraphQLCommitResponse.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/GraphQLCommitResponse.java @@ -2,6 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Root response returned by the GitHub GraphQL API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class GraphQLCommitResponse { public Data data; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java index c00e3af..d031494 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/History.java @@ -4,6 +4,12 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.util.List; + +/** + * Commit history returned by the GitHub GraphQL API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class History { public PageInfo pageInfo; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Repository.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Repository.java index 9ab81a6..477b3de 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Repository.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Repository.java @@ -2,6 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Repository information returned by the GitHub GraphQL API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class Repository { public DefaultBranchRef defaultBranchRef; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Target.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Target.java index 4699b74..7a0f351 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Target.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/Target.java @@ -2,6 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Target object returned by the GitHub GraphQL API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class Target { public History history; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/User.java b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/User.java index 7c934c8..2cf91ab 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/User.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/graphql/User.java @@ -3,6 +3,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * GitHub user information returned by the GitHub GraphQL API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) public class User { public String url; diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitDiff.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitDiff.java similarity index 100% rename from src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitDiff.java rename to src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitDiff.java diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitStats.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitStats.java similarity index 100% rename from src/main/java/br/com/jadson/snooper/gitlab/data/commit/CommitStats.java rename to src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitStats.java diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/FileChanged.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabFileChanged.java similarity index 100% rename from src/main/java/br/com/jadson/snooper/gitlab/data/commit/FileChanged.java rename to src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabFileChanged.java diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java b/src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java index 656d1a0..3460494 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/repo/GitLabTreeItem.java @@ -1,5 +1,12 @@ package br.com.jadson.snooper.gitlab.data.repo; + +/** + * Information about an item in the GitLab repository tree. + * It can represent either a file or a directory. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ public class GitLabTreeItem { public String name; public String path; From f305b3566f1bb013e7894d17d0a1e16a3688efd1 Mon Sep 17 00:00:00 2001 From: Luisa Date: Mon, 22 Jun 2026 09:19:07 -0300 Subject: [PATCH 15/19] feat: adjusting classes names to pattern and adding documentation comments --- .../github/data/commit/GitHubCommitInfo.java | 6 +++--- .../github/data/commit/GitHubFileChanged.java | 7 ++++++- .../github/data/repo/GitHubTreeInfo.java | 15 +++++++++++++-- .../github/data/stats/GitHubCommitStats.java | 7 ++++++- .../data/stats/GitHubCommitStatsInfo.java | 7 ++++++- .../github/data/stats/GitHubFileStats.java | 7 ++++++- .../stats/mapper/GitHubCommitStatsMapper.java | 18 ++++++++++++------ 7 files changed, 52 insertions(+), 15 deletions(-) diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java index 1e07da1..198734e 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java +++ b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubCommitInfo.java @@ -39,7 +39,7 @@ * Jadson Santos - jadsonjs@gmail.com */ @JsonIgnoreProperties(ignoreUnknown = true) -public class CommitInfo { +public class GitHubCommitInfo { public String sha; public String node_id; @@ -50,7 +50,7 @@ public class CommitInfo { public Author author; public Committer committer; public List parents; - public List files; + public List files; - public CommitInfo() {} + public GitHubCommitInfo() {} } diff --git a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubFileChanged.java b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubFileChanged.java index 26faae6..74c6ade 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubFileChanged.java +++ b/src/main/java/br/com/jadson/snooper/github/data/commit/GitHubFileChanged.java @@ -2,8 +2,13 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Information about a file changed in a GitHub commit. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) -public class FileChanged { +public class GitHubFileChanged { public String filename; public int additions; public int deletions; diff --git a/src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java b/src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java index f7e6f21..bfecd1a 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java +++ b/src/main/java/br/com/jadson/snooper/github/data/repo/GitHubTreeInfo.java @@ -2,11 +2,22 @@ import java.util.List; +/** + * Information about the file tree of a GitHub repository. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ public class GitHubTreeInfo { public String sha; - public List tree; + public List tree; - public static class TreeItem { + /** + * Information about an item in the GitHub repository tree. + * It can represent either a file or a directory. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ + public static class GitHubTreeItem { public String path; public String type; // "blob" = arquivo, "tree" = diretório public long size; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStats.java b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStats.java index 84c623a..ea2a671 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStats.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStats.java @@ -2,8 +2,13 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Statistics of changes made in a GitHub commit. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) -public class CommitStats { +public class GitHubCommitStats { public int additions; public int deletions; public int total; diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStatsInfo.java b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStatsInfo.java index 9808801..e594798 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStatsInfo.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubCommitStatsInfo.java @@ -2,6 +2,11 @@ import java.util.Date; +/** + * Detailed information and statistics of a commit in GitHub API. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ public class GitHubCommitStatsInfo { public String sha; public String nodeId; @@ -16,6 +21,6 @@ public class GitHubCommitStatsInfo { public String committerLogin; public Date committerDate; public String message; - public CommitStats commitStats; + public GitHubCommitStats gitHubCommitStats; public int changedFiles; } \ No newline at end of file diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubFileStats.java b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubFileStats.java index aaad5a1..149f48e 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubFileStats.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/GitHubFileStats.java @@ -2,8 +2,13 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Churn (number of commits) information of a file in a GitHub repository. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) -public class FileStats { +public class GitHubFileStats { public String path; public int churn; } diff --git a/src/main/java/br/com/jadson/snooper/github/data/stats/mapper/GitHubCommitStatsMapper.java b/src/main/java/br/com/jadson/snooper/github/data/stats/mapper/GitHubCommitStatsMapper.java index f6c90c7..0d2acd5 100644 --- a/src/main/java/br/com/jadson/snooper/github/data/stats/mapper/GitHubCommitStatsMapper.java +++ b/src/main/java/br/com/jadson/snooper/github/data/stats/mapper/GitHubCommitStatsMapper.java @@ -1,15 +1,21 @@ package br.com.jadson.snooper.github.data.stats.mapper; -import br.com.jadson.snooper.github.data.stats.CommitStats; +import br.com.jadson.snooper.github.data.stats.GitHubCommitStats; import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; import br.com.jadson.snooper.github.data.stats.graphql.CommitStatsNode; +/** + * Mapper responsible for converting GitHub GraphQL commit statistics + * into internal commit statistics information. + * + * Yuri Filgueira - yurimedeiros141@gmail.com + */ public class GitHubCommitStatsMapper { public static GitHubCommitStatsInfo mapToCommitStatsInfo(CommitStatsNode node) { GitHubCommitStatsInfo commitStatsInfo = new GitHubCommitStatsInfo(); - CommitStats commitStats = new CommitStats(); + GitHubCommitStats gitHubCommitStats = new GitHubCommitStats(); commitStatsInfo.sha = node.oid; commitStatsInfo.nodeId = node.id; @@ -17,11 +23,11 @@ public static GitHubCommitStatsInfo mapToCommitStatsInfo(CommitStatsNode node) { commitStatsInfo.commentCount = node.comments.totalCount; commitStatsInfo.message = node.message; - commitStats.additions = node.additions; - commitStats.deletions = node.deletions; - commitStats.total = (node.additions + node.deletions); + gitHubCommitStats.additions = node.additions; + gitHubCommitStats.deletions = node.deletions; + gitHubCommitStats.total = (node.additions + node.deletions); - commitStatsInfo.commitStats = commitStats; + commitStatsInfo.gitHubCommitStats = gitHubCommitStats; commitStatsInfo.changedFiles = node.changedFiles; if (node.author != null) { From bf4370a793a5760ac4a80bab0d36fa954141ac17 Mon Sep 17 00:00:00 2001 From: Luisa Date: Mon, 22 Jun 2026 09:21:19 -0300 Subject: [PATCH 16/19] feat: adjusting github executors to updated class names and adding documentation comments --- .../operations/CommitQueryExecutor.java | 89 +++++++++++++------ .../github/operations/RepoQueryExecutor.java | 9 ++ 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java index 96d4b21..23cb09e 100644 --- a/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/github/operations/CommitQueryExecutor.java @@ -34,9 +34,9 @@ import br.com.jadson.snooper.github.data.association.graphql.AssociatedPullRequestsEdge; import br.com.jadson.snooper.github.data.association.graphql.CommitNode; import br.com.jadson.snooper.github.data.association.graphql.ResultGraphQLRepository; -import br.com.jadson.snooper.github.data.commit.FileChanged; -import br.com.jadson.snooper.github.data.commit.CommitInfo; -import br.com.jadson.snooper.github.data.stats.FileStats; +import br.com.jadson.snooper.github.data.commit.GitHubFileChanged; +import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; +import br.com.jadson.snooper.github.data.stats.GitHubFileStats; import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; import br.com.jadson.snooper.github.data.stats.graphql.CommitStatsNode; import br.com.jadson.snooper.github.data.stats.graphql.GraphQLCommitResponse; @@ -70,7 +70,7 @@ public class CommitQueryExecutor extends AbstractGitHubQueryExecutor { * @param repoFullName * @return */ - public List getCommits(String repoFullName) { + public List getCommits(String repoFullName) { validateRepoName(repoFullName); @@ -79,9 +79,9 @@ public List getCommits(String repoFullName) { // IMPORTANTE state=all for bring all PR String parameters = ""; - List allPull = new ArrayList<>(); + List allPull = new ArrayList<>(); - ResponseEntity result; + ResponseEntity result; do { @@ -98,7 +98,7 @@ public List getCommits(String repoFullName) { HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo[].class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo[].class); allPull.addAll( Arrays.asList(result.getBody()) ); @@ -124,7 +124,7 @@ public List getCommits(String repoFullName) { * @param ref a branch or a tag name * @return all commits form a branch or tag */ - public CommitInfo getCommitsOfReference(String repoFullName, String ref) { + public GitHubCommitInfo getCommitsOfReference(String repoFullName, String ref) { validateRepoName(repoFullName); @@ -132,9 +132,9 @@ public CommitInfo getCommitsOfReference(String repoFullName, String ref) { String parameters = ""; - CommitInfo commitInfo = null; + GitHubCommitInfo gitHubCommitInfo = null; - ResponseEntity result; + ResponseEntity result; // do { @@ -151,16 +151,16 @@ public CommitInfo getCommitsOfReference(String repoFullName, String ref) { HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo.class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo.class); - commitInfo = result.getBody(); + gitHubCommitInfo = result.getBody(); page++; // }while ( result != null && result.getBody() != null && !testEnvironment); - return commitInfo; + return gitHubCommitInfo; } @@ -170,7 +170,7 @@ public CommitInfo getCommitsOfReference(String repoFullName, String ref) { * @param repoFullName * @return */ - public List commitsOfPullRequest(String repoFullName, long prNumber) { + public List commitsOfPullRequest(String repoFullName, long prNumber) { validateRepoName(repoFullName); @@ -179,9 +179,9 @@ public List commitsOfPullRequest(String repoFullName, long prNumber) // IMPORTANTE state=all for bring all PR String parameters = ""; - List allPull = new ArrayList<>(); + List allPull = new ArrayList<>(); - ResponseEntity result; + ResponseEntity result; do { @@ -198,7 +198,7 @@ public List commitsOfPullRequest(String repoFullName, long prNumber) HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo[].class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo[].class); allPull.addAll( Arrays.asList(result.getBody()) ); @@ -318,6 +318,16 @@ public List getHistoryOfCommitsWithPullRequest return results; } + /** + * Return the history of commits of a GitHub project with their change statistics. + * + * This method uses the API V4 of GitHub with GraphQL. + * + * @param projectFullName + * @param sinceDate + * @param untilDate + * @return + */ public List getCommitsWithStats(String projectFullName, LocalDateTime sinceDate, LocalDateTime untilDate) { validateRepoName(projectFullName); @@ -389,11 +399,20 @@ public List getCommitsWithStats(String projectFullName, L return allCommits; } - public List getCommitFiles(String repoFullName, CommitInfo commit){ + /** + * Return the list of files changed in a specific GitHub commit. + * + * This method uses the REST API of GitHub. + * + * @param repoFullName + * @param commit + * @return + */ + public List getCommitFiles(String repoFullName, GitHubCommitInfo commit){ validateRepoName(repoFullName); // IMPORTANTE state=all for bring all PR String parameters = ""; - ResponseEntity result; + ResponseEntity result; String query = GIT_HUB_API_URL +"/repos/"+repoFullName+"/commits/"+commit.sha; @@ -403,7 +422,7 @@ public List getCommitFiles(String repoFullName, CommitInfo commit){ HttpEntity entity = new HttpEntity(getDefaultHeaders()); - result = restTemplate.exchange( query, HttpMethod.GET, entity, CommitInfo.class); + result = restTemplate.exchange( query, HttpMethod.GET, entity, GitHubCommitInfo.class); if (result.getBody() != null && result.getBody().files != null) { return result.getBody().files; @@ -412,7 +431,18 @@ public List getCommitFiles(String repoFullName, CommitInfo commit){ return new ArrayList<>(); } - public FileStats getFileStats(String projectFullName, String filePath, LocalDateTime sinceDate, LocalDateTime untilDate){ + /** + * Return the change statistics of a specific file in a GitHub repository. + * + * This method uses the API V4 of GitHub with GraphQL. + * + * @param projectFullName + * @param filePath + * @param sinceDate + * @param untilDate + * @return + */ + public GitHubFileStats getFileStats(String projectFullName, String filePath, LocalDateTime sinceDate, LocalDateTime untilDate){ validateRepoName(projectFullName); String[] repoParts = projectFullName.split("/"); @@ -441,16 +471,23 @@ public FileStats getFileStats(String projectFullName, String filePath, LocalDate GraphQLCommitResponse queryResult = executeCommitStatsQuery(query); - FileStats fileStats = new FileStats(); - fileStats.churn = queryResult.data.repository.defaultBranchRef.target.history.totalCount; - fileStats.path = filePath; + GitHubFileStats gitHubFileStats = new GitHubFileStats(); + gitHubFileStats.churn = queryResult.data.repository.defaultBranchRef.target.history.totalCount; + gitHubFileStats.path = filePath; - return fileStats; + return gitHubFileStats; } - + /** + * Execute a GraphQL query to retrieve commit statistics from GitHub. + * + * This method uses the API V4 of GitHub with GraphQL. + * + * @param query + * @return + */ private ResultGraphQLRepository executeQueryAssociatedPR(String query) { RestTemplate restTemplate = new RestTemplate(); diff --git a/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java b/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java index 222fe33..d974f4a 100644 --- a/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/github/operations/RepoQueryExecutor.java @@ -85,6 +85,15 @@ public GitHubRepoInfo getRepoInfo(String repoFullName) { return result.getBody(); } + /** + * Return all files and directories from a GitHub repository tree. + * + * This method uses the REST API of GitHub. + * + * @param repoFullName + * @param branch + * @return + */ public GitHubTreeInfo getAllFiles(String repoFullName, String branch){ ResponseEntity result; String url = GIT_HUB_API_URL + From a81df10056861f433b64f6b1a2f2213c034488a9 Mon Sep 17 00:00:00 2001 From: Luisa Date: Mon, 22 Jun 2026 09:22:58 -0300 Subject: [PATCH 17/19] feat: adjusting github test to updated class names --- .../github/operations/CommitQueryExecutorTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java b/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java index 8b80c21..ae4b6aa 100644 --- a/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java +++ b/src/test/java/br/com/jadson/snooper/github/operations/CommitQueryExecutorTest.java @@ -1,7 +1,7 @@ package br.com.jadson.snooper.github.operations; import br.com.jadson.snooper.github.data.association.AssociationCommitPullRequestInfo; -import br.com.jadson.snooper.github.data.commit.CommitInfo; +import br.com.jadson.snooper.github.data.commit.GitHubCommitInfo; import br.com.jadson.snooper.github.data.stats.GitHubCommitStatsInfo; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -28,7 +28,7 @@ void testCommitsOfProject(){ commitExecutor.setPageSize(100); commitExecutor.setGithubToken(token); commitExecutor.setTestEnvironment(true); - List commitsInfo = commitExecutor.getCommits("vuejs/vue-router"); + List commitsInfo = commitExecutor.getCommits("vuejs/vue-router"); Assertions.assertTrue(commitsInfo.size() == 10); Assertions.assertEquals("677f3c1f714fb61cc495345e535409b1cbb90429", commitsInfo.get(0).sha); @@ -43,7 +43,7 @@ void testCommitsOfReferemce(){ commitExecutor.setPageSize(1); commitExecutor.setGithubToken(token); commitExecutor.setTestEnvironment(true); - CommitInfo commitsInfo = commitExecutor.getCommitsOfReference("traPtitech/traQ/", "master"); + GitHubCommitInfo commitsInfo = commitExecutor.getCommitsOfReference("traPtitech/traQ/", "master"); // Assertions.assertTrue(commitsInfo.size() == 1); Assertions.assertNotNull(commitsInfo.sha); @@ -60,7 +60,7 @@ void testCommitsOfProjectByPullRequest(){ CommitQueryExecutor commitExecutor = new CommitQueryExecutor(); commitExecutor.setPageSize(100); commitExecutor.setGithubToken(token); - List commitsInfo = commitExecutor.commitsOfPullRequest("octocat/Hello-World",796); + List commitsInfo = commitExecutor.commitsOfPullRequest("octocat/Hello-World",796); Assertions.assertTrue(commitsInfo.size() > 0); Assertions.assertEquals("5e100cfdca24f3fb781c72348c7c63b418e4246d", commitsInfo.get(0).sha); @@ -105,8 +105,8 @@ void testGetCommitsWithStats() { Assertions.assertEquals(3, commitStatsInfos.size()); Assertions.assertEquals("7fd1a60b01f91b314f59955a4e4d4e80d8edf11d", commitStatsInfos.get(0).sha); - Assertions.assertEquals(1, commitStatsInfos.get(0).commitStats.additions); - Assertions.assertEquals(1, commitStatsInfos.get(1).commitStats.additions); - Assertions.assertEquals(1, commitStatsInfos.get(1).commitStats.deletions); + Assertions.assertEquals(1, commitStatsInfos.get(0).gitHubCommitStats.additions); + Assertions.assertEquals(1, commitStatsInfos.get(1).gitHubCommitStats.additions); + Assertions.assertEquals(1, commitStatsInfos.get(1).gitHubCommitStats.deletions); } } \ No newline at end of file From 27bf54013e3b3d77846d0ff5e92280a64f4de4fb Mon Sep 17 00:00:00 2001 From: Luisa Date: Mon, 22 Jun 2026 09:24:32 -0300 Subject: [PATCH 18/19] feat: adjusting gitlab class names to pattern and adding documentation comments --- .../snooper/gitlab/data/commit/GitLabCommitDiff.java | 7 ++++++- .../snooper/gitlab/data/commit/GitLabCommitInfo.java | 2 +- .../snooper/gitlab/data/commit/GitLabCommitStats.java | 7 ++++++- .../snooper/gitlab/data/commit/GitLabFileChanged.java | 7 ++++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitDiff.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitDiff.java index ea0737a..654ca49 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitDiff.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitDiff.java @@ -3,8 +3,13 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * Information about the diff of a file changed in a GitLab commit. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) -public class CommitDiff { +public class GitLabCommitDiff { @JsonProperty("old_path") public String oldPath; diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitInfo.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitInfo.java index 96ae85b..ea002b5 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitInfo.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitInfo.java @@ -20,7 +20,7 @@ public class GitLabCommitInfo { public String message; public List parent_ids; public String web_url; - public CommitStats stats; + public GitLabCommitStats stats; public GitLabCommitInfo() { } diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitStats.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitStats.java index 69d5be8..0dd84cf 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitStats.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabCommitStats.java @@ -1,6 +1,11 @@ package br.com.jadson.snooper.gitlab.data.commit; -public class CommitStats { +/** + * Statistics of changes made in a GitLab commit. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ +public class GitLabCommitStats { public int additions; public int deletions; public int total; diff --git a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabFileChanged.java b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabFileChanged.java index 5f32b4d..ad1d7bc 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabFileChanged.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/data/commit/GitLabFileChanged.java @@ -2,8 +2,13 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +/** + * Information about a file changed in a GitLab commit. + * + * Luisa Ferreira - luisaferreirass08@gmail.com + */ @JsonIgnoreProperties(ignoreUnknown = true) -public class FileChanged { +public class GitLabFileChanged { public String filename; public int additions; public int deletions; From c2c3b9240d3bf2f76b8e74f3318d3d0f448ec5d5 Mon Sep 17 00:00:00 2001 From: Luisa Date: Mon, 22 Jun 2026 09:25:20 -0300 Subject: [PATCH 19/19] feat: adjusting gitlab executors to updated class names and adding documentation comments --- .../operations/GitLabCommitQueryExecutor.java | 37 +++++++++++++++---- .../operations/GitLabRepoQueryExecutor.java | 28 ++++++++++++++ 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java index 9da1e80..b074832 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabCommitQueryExecutor.java @@ -1,8 +1,8 @@ package br.com.jadson.snooper.gitlab.operations; -import br.com.jadson.snooper.gitlab.data.commit.CommitDiff; +import br.com.jadson.snooper.gitlab.data.commit.GitLabCommitDiff; import br.com.jadson.snooper.gitlab.data.commit.GitLabCommitInfo; -import br.com.jadson.snooper.gitlab.data.commit.FileChanged; +import br.com.jadson.snooper.gitlab.data.commit.GitLabFileChanged; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -81,10 +81,19 @@ public List getCommits(String repoFullName) { return allPull; } - public List getCommitsFiles(String repoFullName, GitLabCommitInfo commit){ + /** + * Return the files changed in a specific GitLab commit. + * + * This method uses the REST API of GitLab. + * + * @param repoFullName + * @param commit + * @return + */ + public List getCommitsFiles(String repoFullName, GitLabCommitInfo commit){ validateRepoName(repoFullName); - ResponseEntity result; + ResponseEntity result; String query = getGitLabAPIURL() + encodeProjectName(repoFullName) @@ -108,7 +117,7 @@ public List getCommitsFiles(String repoFullName, GitLabCommitInfo c RestTemplate restTemplate = new RestTemplate(); HttpEntity entity = new HttpEntity(this.getDefaultHeaders()); - result = restTemplate.exchange(uri, HttpMethod.GET, entity, CommitDiff[].class); + result = restTemplate.exchange(uri, HttpMethod.GET, entity, GitLabCommitDiff[].class); @@ -116,10 +125,10 @@ public List getCommitsFiles(String repoFullName, GitLabCommitInfo c return new ArrayList<>(); } - List files = new ArrayList<>(); + List files = new ArrayList<>(); - for (CommitDiff diff : result.getBody()) { - FileChanged file = new FileChanged(); + for (GitLabCommitDiff diff : result.getBody()) { + GitLabFileChanged file = new GitLabFileChanged(); file.filename = diff.newPath != null ? diff.newPath : diff.oldPath; file.additions = countAdditions(diff.diff); @@ -131,6 +140,12 @@ public List getCommitsFiles(String repoFullName, GitLabCommitInfo c return files; } + /** + * Count the number of added lines in a diff. + * + * @param diff + * @return + */ private int countAdditions(String diff){ if (diff == null || diff.isEmpty()) { return 0; @@ -147,6 +162,12 @@ private int countAdditions(String diff){ return additions; } + /** + * Count the number of deleted lines in a diff. + * + * @param diff + * @return + */ private int countDeletions(String diff) { if (diff == null || diff.isEmpty()) { return 0; diff --git a/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java index 66286c7..a238908 100644 --- a/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java +++ b/src/main/java/br/com/jadson/snooper/gitlab/operations/GitLabRepoQueryExecutor.java @@ -13,16 +13,36 @@ import java.util.Arrays; import java.util.List; +/** + * Performs queries in GitLab repositories. + * + * This class retrieves repository data from GitLab, such as files and directories + * from the repository tree. + */ public class GitLabRepoQueryExecutor extends AbstractGitLabQueryExecutor { public GitLabRepoQueryExecutor() { } + /** + * Creates a GitLab repository query executor. + * + * @param gitlabURL + * @param gitlabToken + */ public GitLabRepoQueryExecutor(String gitlabURL, String gitlabToken) { this(gitlabURL, gitlabToken, false); } + /** + * Creates a GitLab repository query executor with SSL verification configuration. + * + * @param gitlabURL + * @param gitlabToken + * @param disableSslVerification + */ + public GitLabRepoQueryExecutor(String gitlabURL, String gitlabToken, boolean disableSslVerification) { if (gitlabToken == null || gitlabToken.trim().equals("") ) { throw new RuntimeException("Invalid GitLab Token: " + gitlabToken); @@ -36,6 +56,14 @@ public GitLabRepoQueryExecutor(String gitlabURL, String gitlabToken, boolean dis this.disableSslVerification = disableSslVerification; } + /** + * Return all files and directories from a GitLab repository tree. + * + * This method uses the REST API of GitLab. + * + * @param repoFullName + * @return + */ public List getAllFiles(String repoFullName) { int page = 1; String parameters = "";