001package org.nasdanika.models.gitlab.util; 002 003import java.util.List; 004import java.util.function.BiConsumer; 005import java.util.logging.Handler; 006import java.util.logging.Level; 007import java.util.logging.Logger; 008 009import org.eclipse.emf.common.util.EMap; 010import org.gitlab4j.api.Constants.AutoDevopsDeployStrategy; 011import org.gitlab4j.api.Constants.BuildGitStrategy; 012import org.gitlab4j.api.Constants.SquashOption; 013import org.gitlab4j.api.GitLabApi; 014import org.gitlab4j.api.GitLabApiException; 015import org.gitlab4j.api.GroupApi; 016import org.gitlab4j.api.Pager; 017import org.gitlab4j.api.ProjectApi; 018import org.gitlab4j.api.ProjectLicense; 019import org.gitlab4j.api.RepositoryApi; 020import org.gitlab4j.api.RepositoryFileApi; 021import org.gitlab4j.api.models.AbstractUser; 022import org.gitlab4j.api.models.Branch; 023import org.gitlab4j.api.models.Commit; 024import org.gitlab4j.api.models.Contributor; 025import org.gitlab4j.api.models.CustomAttribute; 026import org.gitlab4j.api.models.Group.Statistics; 027import org.gitlab4j.api.models.GroupFilter; 028import org.gitlab4j.api.models.Owner; 029import org.gitlab4j.api.models.Permissions; 030import org.gitlab4j.api.models.Project; 031import org.gitlab4j.api.models.ProjectAccess; 032import org.gitlab4j.api.models.ProjectSharedGroup; 033import org.gitlab4j.api.models.ProjectStatistics; 034import org.gitlab4j.api.models.TreeItem; 035import org.gitlab4j.api.models.Visibility; 036import org.nasdanika.common.ProgressMonitor; 037import org.nasdanika.common.Status; 038import org.nasdanika.models.gitlab.GitLabFactory; 039import org.nasdanika.models.gitlab.MergeMethod; 040 041/** 042 * This class takes care of different ways to create {@link GitLabApi} and request throttling 043 */ 044public class GitLabApiProvider implements AutoCloseable { 045 046 private GitLabApi gitLabApi; 047 048 /** 049 * Access to the API for configuration. 050 * @return 051 */ 052 public GitLabApi getGitLabApi() { 053 return gitLabApi; 054 } 055 056 public GitLabApiProvider(String hostUrl, String accessToken) { 057 this(new GitLabApi(hostUrl, accessToken)); 058 } 059 060 public GitLabApiProvider(GitLabApi gitLabApi) { 061 this(gitLabApi, new ThrottlingHandler()); 062 } 063 064 /** 065 * @param clientRateLimitWindow Client rate window in milliseconds. Client rate limit is enforced if this value and clientRateLimit are positive. 066 * @param clientRateLimit Client rate limit per rate window. Client rate limit is enforced if this value and clientRateLimitWindow are positive. 067 */ 068 public GitLabApiProvider( 069 String hostUrl, 070 String accessToken, 071 long clientRateLimitWindow, 072 int clientRateLimit) { 073 this(new GitLabApi(hostUrl, accessToken), clientRateLimitWindow, clientRateLimit); 074 } 075 076 /** 077 * @param clientRateLimitWindow Client rate window in milliseconds. Client rate limit is enforced if this value and clientRateLimit are positive. 078 * @param clientRateLimit Client rate limit per rate window. Client rate limit is enforced if this value and clientRateLimitWindow are positive. 079 */ 080 public GitLabApiProvider( 081 GitLabApi gitLabApi, 082 long clientRateLimitWindow, 083 int clientRateLimit) { 084 this(gitLabApi, new ThrottlingHandler(clientRateLimitWindow, clientRateLimit)); 085 } 086 087 public GitLabApiProvider(GitLabApi gitLabApi, Handler throttlingHandler) { 088 if (throttlingHandler != null) { 089 Level level = Level.FINE; 090 throttlingHandler.setLevel(level); 091 Logger logger = Logger.getLogger(GitLabApi.class.getName()); 092 Level loggerLevel = logger.getLevel(); 093 if (loggerLevel == null || loggerLevel.intValue() > level.intValue()) { 094 logger.setLevel(level); 095 } 096 logger.addHandler(throttlingHandler); 097 gitLabApi.enableRequestResponseLogging(); 098 } 099 100 this.gitLabApi = gitLabApi; 101 } 102 103 @Override 104 public void close() { 105 if (gitLabApi != null) { 106 gitLabApi.close(); 107 } 108 } 109 110}