chore: Refactoring

This commit is contained in:
Robin Shen 2025-10-04 23:41:46 +08:00
parent b8a4d7cdc2
commit 618dbaf297
1478 changed files with 26744 additions and 12600 deletions

7
development.md Normal file
View File

@ -0,0 +1,7 @@
# Conventions
## Service Methods
1. Various service methods will not check permissions, except for those with subject param
1. User param of service methods are used to indicate who performs the action, instead of requiring permission check
1. Service methods will not audit changes, unless stated explicitly

View File

@ -227,6 +227,11 @@
<artifactId>wicket-native-websocket-core</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-guice</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>

View File

@ -274,6 +274,10 @@
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-guice</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
@ -374,7 +378,12 @@
<groupId>com.openai</groupId>
<artifactId>openai-java</artifactId>
<version>2.7.0</version>
</dependency>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>9.2</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>

View File

@ -76,8 +76,8 @@ import io.onedev.commons.utils.StringUtils;
import io.onedev.k8shelper.KubernetesHelper;
import io.onedev.k8shelper.OsInfo;
import io.onedev.server.annotation.Shallow;
import io.onedev.server.attachment.AttachmentManager;
import io.onedev.server.attachment.DefaultAttachmentManager;
import io.onedev.server.attachment.AttachmentService;
import io.onedev.server.attachment.DefaultAttachmentService;
import io.onedev.server.buildspec.BuildSpecSchemaResource;
import io.onedev.server.buildspec.job.log.instruction.LogInstruction;
import io.onedev.server.cluster.ClusterResource;
@ -91,186 +91,10 @@ import io.onedev.server.commandhandler.ResetAdminPassword;
import io.onedev.server.commandhandler.RestoreDatabase;
import io.onedev.server.commandhandler.Translate;
import io.onedev.server.commandhandler.Upgrade;
import io.onedev.server.data.DataManager;
import io.onedev.server.data.DefaultDataManager;
import io.onedev.server.entitymanager.AccessTokenAuthorizationManager;
import io.onedev.server.entitymanager.AccessTokenManager;
import io.onedev.server.entitymanager.AgentAttributeManager;
import io.onedev.server.entitymanager.AgentLastUsedDateManager;
import io.onedev.server.entitymanager.AgentManager;
import io.onedev.server.entitymanager.AgentTokenManager;
import io.onedev.server.entitymanager.AlertManager;
import io.onedev.server.entitymanager.BaseAuthorizationManager;
import io.onedev.server.entitymanager.BuildDependenceManager;
import io.onedev.server.entitymanager.BuildLabelManager;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.BuildMetricManager;
import io.onedev.server.entitymanager.BuildParamManager;
import io.onedev.server.entitymanager.BuildQueryPersonalizationManager;
import io.onedev.server.entitymanager.CodeCommentManager;
import io.onedev.server.entitymanager.CodeCommentMentionManager;
import io.onedev.server.entitymanager.CodeCommentQueryPersonalizationManager;
import io.onedev.server.entitymanager.CodeCommentReplyManager;
import io.onedev.server.entitymanager.CodeCommentStatusChangeManager;
import io.onedev.server.entitymanager.CodeCommentTouchManager;
import io.onedev.server.entitymanager.CommitQueryPersonalizationManager;
import io.onedev.server.entitymanager.DashboardGroupShareManager;
import io.onedev.server.entitymanager.DashboardManager;
import io.onedev.server.entitymanager.DashboardUserShareManager;
import io.onedev.server.entitymanager.DashboardVisitManager;
import io.onedev.server.entitymanager.EmailAddressManager;
import io.onedev.server.entitymanager.GitLfsLockManager;
import io.onedev.server.entitymanager.GpgKeyManager;
import io.onedev.server.entitymanager.GroupAuthorizationManager;
import io.onedev.server.entitymanager.GroupManager;
import io.onedev.server.entitymanager.IssueAuthorizationManager;
import io.onedev.server.entitymanager.IssueChangeManager;
import io.onedev.server.entitymanager.IssueCommentManager;
import io.onedev.server.entitymanager.IssueCommentReactionManager;
import io.onedev.server.entitymanager.IssueCommentRevisionManager;
import io.onedev.server.entitymanager.IssueDescriptionRevisionManager;
import io.onedev.server.entitymanager.IssueFieldManager;
import io.onedev.server.entitymanager.IssueLinkManager;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.entitymanager.IssueMentionManager;
import io.onedev.server.entitymanager.IssueQueryPersonalizationManager;
import io.onedev.server.entitymanager.IssueReactionManager;
import io.onedev.server.entitymanager.IssueScheduleManager;
import io.onedev.server.entitymanager.IssueStateHistoryManager;
import io.onedev.server.entitymanager.IssueTouchManager;
import io.onedev.server.entitymanager.IssueVoteManager;
import io.onedev.server.entitymanager.IssueWatchManager;
import io.onedev.server.entitymanager.IssueWorkManager;
import io.onedev.server.entitymanager.IterationManager;
import io.onedev.server.entitymanager.JobCacheManager;
import io.onedev.server.entitymanager.LabelSpecManager;
import io.onedev.server.entitymanager.LinkAuthorizationManager;
import io.onedev.server.entitymanager.LinkSpecManager;
import io.onedev.server.entitymanager.MembershipManager;
import io.onedev.server.entitymanager.PackBlobManager;
import io.onedev.server.entitymanager.PackBlobReferenceManager;
import io.onedev.server.entitymanager.PackLabelManager;
import io.onedev.server.entitymanager.PackManager;
import io.onedev.server.entitymanager.PackQueryPersonalizationManager;
import io.onedev.server.entitymanager.PendingSuggestionApplyManager;
import io.onedev.server.entitymanager.ProjectLabelManager;
import io.onedev.server.entitymanager.ProjectLastEventDateManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.PullRequestAssignmentManager;
import io.onedev.server.entitymanager.PullRequestChangeManager;
import io.onedev.server.entitymanager.PullRequestCommentManager;
import io.onedev.server.entitymanager.PullRequestCommentReactionManager;
import io.onedev.server.entitymanager.PullRequestCommentRevisionManager;
import io.onedev.server.entitymanager.PullRequestDescriptionRevisionManager;
import io.onedev.server.entitymanager.PullRequestLabelManager;
import io.onedev.server.entitymanager.PullRequestManager;
import io.onedev.server.entitymanager.PullRequestMentionManager;
import io.onedev.server.entitymanager.PullRequestQueryPersonalizationManager;
import io.onedev.server.entitymanager.PullRequestReactionManager;
import io.onedev.server.entitymanager.PullRequestReviewManager;
import io.onedev.server.entitymanager.PullRequestTouchManager;
import io.onedev.server.entitymanager.PullRequestUpdateManager;
import io.onedev.server.entitymanager.PullRequestWatchManager;
import io.onedev.server.entitymanager.ReviewedDiffManager;
import io.onedev.server.entitymanager.RoleManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.entitymanager.SshKeyManager;
import io.onedev.server.entitymanager.SsoAccountManager;
import io.onedev.server.entitymanager.SsoProviderManager;
import io.onedev.server.entitymanager.StopwatchManager;
import io.onedev.server.entitymanager.UserAuthorizationManager;
import io.onedev.server.entitymanager.UserInvitationManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.entitymanager.impl.DefaultAccessTokenAuthorizationManager;
import io.onedev.server.entitymanager.impl.DefaultAccessTokenManager;
import io.onedev.server.entitymanager.impl.DefaultAgentAttributeManager;
import io.onedev.server.entitymanager.impl.DefaultAgentLastUsedDateManager;
import io.onedev.server.entitymanager.impl.DefaultAgentManager;
import io.onedev.server.entitymanager.impl.DefaultAgentTokenManager;
import io.onedev.server.entitymanager.impl.DefaultAlertManager;
import io.onedev.server.entitymanager.impl.DefaultBaseAuthorizationManager;
import io.onedev.server.entitymanager.impl.DefaultBuildDependenceManager;
import io.onedev.server.entitymanager.impl.DefaultBuildLabelManager;
import io.onedev.server.entitymanager.impl.DefaultBuildManager;
import io.onedev.server.entitymanager.impl.DefaultBuildMetricManager;
import io.onedev.server.entitymanager.impl.DefaultBuildParamManager;
import io.onedev.server.entitymanager.impl.DefaultBuildQueryPersonalizationManager;
import io.onedev.server.entitymanager.impl.DefaultCodeCommentManager;
import io.onedev.server.entitymanager.impl.DefaultCodeCommentMentionManager;
import io.onedev.server.entitymanager.impl.DefaultCodeCommentQueryPersonalizationManager;
import io.onedev.server.entitymanager.impl.DefaultCodeCommentReplyManager;
import io.onedev.server.entitymanager.impl.DefaultCodeCommentStatusChangeManager;
import io.onedev.server.entitymanager.impl.DefaultCodeCommentTouchManager;
import io.onedev.server.entitymanager.impl.DefaultCommitQueryPersonalizationManager;
import io.onedev.server.entitymanager.impl.DefaultDashboardGroupShareManager;
import io.onedev.server.entitymanager.impl.DefaultDashboardManager;
import io.onedev.server.entitymanager.impl.DefaultDashboardUserShareManager;
import io.onedev.server.entitymanager.impl.DefaultDashboardVisitManager;
import io.onedev.server.entitymanager.impl.DefaultEmailAddressManager;
import io.onedev.server.entitymanager.impl.DefaultGitLfsLockManager;
import io.onedev.server.entitymanager.impl.DefaultGpgKeyManager;
import io.onedev.server.entitymanager.impl.DefaultGroupAuthorizationManager;
import io.onedev.server.entitymanager.impl.DefaultGroupManager;
import io.onedev.server.entitymanager.impl.DefaultIssueAuthorizationManager;
import io.onedev.server.entitymanager.impl.DefaultIssueChangeManager;
import io.onedev.server.entitymanager.impl.DefaultIssueCommentManager;
import io.onedev.server.entitymanager.impl.DefaultIssueCommentReactionManager;
import io.onedev.server.entitymanager.impl.DefaultIssueCommentRevisionManager;
import io.onedev.server.entitymanager.impl.DefaultIssueDescriptionRevisionManager;
import io.onedev.server.entitymanager.impl.DefaultIssueFieldManager;
import io.onedev.server.entitymanager.impl.DefaultIssueLinkManager;
import io.onedev.server.entitymanager.impl.DefaultIssueManager;
import io.onedev.server.entitymanager.impl.DefaultIssueMentionManager;
import io.onedev.server.entitymanager.impl.DefaultIssueQueryPersonalizationManager;
import io.onedev.server.entitymanager.impl.DefaultIssueReactionManager;
import io.onedev.server.entitymanager.impl.DefaultIssueScheduleManager;
import io.onedev.server.entitymanager.impl.DefaultIssueStateHistoryManager;
import io.onedev.server.entitymanager.impl.DefaultIssueTouchManager;
import io.onedev.server.entitymanager.impl.DefaultIssueVoteManager;
import io.onedev.server.entitymanager.impl.DefaultIssueWatchManager;
import io.onedev.server.entitymanager.impl.DefaultIssueWorkManager;
import io.onedev.server.entitymanager.impl.DefaultIterationManager;
import io.onedev.server.entitymanager.impl.DefaultJobCacheManager;
import io.onedev.server.entitymanager.impl.DefaultLabelSpecManager;
import io.onedev.server.entitymanager.impl.DefaultLinkAuthorizationManager;
import io.onedev.server.entitymanager.impl.DefaultLinkSpecManager;
import io.onedev.server.entitymanager.impl.DefaultMembershipManager;
import io.onedev.server.entitymanager.impl.DefaultPackBlobManager;
import io.onedev.server.entitymanager.impl.DefaultPackBlobReferenceManager;
import io.onedev.server.entitymanager.impl.DefaultPackLabelManager;
import io.onedev.server.entitymanager.impl.DefaultPackManager;
import io.onedev.server.entitymanager.impl.DefaultPackQueryPersonalizationManager;
import io.onedev.server.entitymanager.impl.DefaultPendingSuggestionApplyManager;
import io.onedev.server.entitymanager.impl.DefaultProjectLabelManager;
import io.onedev.server.entitymanager.impl.DefaultProjectLastEventDateManager;
import io.onedev.server.entitymanager.impl.DefaultProjectManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestAssignmentManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestChangeManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestCommentManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestCommentReactionManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestCommentRevisionManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestDescriptionRevisionManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestLabelManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestMentionManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestQueryPersonalizationManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestReactionManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestReviewManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestTouchManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestUpdateManager;
import io.onedev.server.entitymanager.impl.DefaultPullRequestWatchManager;
import io.onedev.server.entitymanager.impl.DefaultReviewedDiffManager;
import io.onedev.server.entitymanager.impl.DefaultRoleManager;
import io.onedev.server.entitymanager.impl.DefaultSettingManager;
import io.onedev.server.entitymanager.impl.DefaultSshKeyManager;
import io.onedev.server.entitymanager.impl.DefaultSsoAccountManager;
import io.onedev.server.entitymanager.impl.DefaultSsoProviderManager;
import io.onedev.server.entitymanager.impl.DefaultStopwatchManager;
import io.onedev.server.entitymanager.impl.DefaultUserAuthorizationManager;
import io.onedev.server.entitymanager.impl.DefaultUserInvitationManager;
import io.onedev.server.entitymanager.impl.DefaultUserManager;
import io.onedev.server.entityreference.DefaultReferenceChangeManager;
import io.onedev.server.entityreference.ReferenceChangeManager;
import io.onedev.server.data.DataService;
import io.onedev.server.data.DefaultDataService;
import io.onedev.server.entityreference.DefaultReferenceChangeService;
import io.onedev.server.entityreference.ReferenceChangeService;
import io.onedev.server.event.DefaultListenerRegistry;
import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.exception.handler.ExceptionHandler;
@ -285,23 +109,23 @@ import io.onedev.server.git.hook.GitPreReceiveChecker;
import io.onedev.server.git.location.GitLocation;
import io.onedev.server.git.service.DefaultGitService;
import io.onedev.server.git.service.GitService;
import io.onedev.server.git.signatureverification.DefaultSignatureVerificationManager;
import io.onedev.server.git.signatureverification.SignatureVerificationManager;
import io.onedev.server.git.signatureverification.DefaultSignatureVerificationService;
import io.onedev.server.git.signatureverification.SignatureVerificationService;
import io.onedev.server.git.signatureverification.SignatureVerifier;
import io.onedev.server.jetty.DefaultJettyManager;
import io.onedev.server.jetty.DefaultJettyService;
import io.onedev.server.jetty.DefaultSessionDataStoreFactory;
import io.onedev.server.jetty.JettyManager;
import io.onedev.server.job.DefaultJobManager;
import io.onedev.server.jetty.JettyService;
import io.onedev.server.job.DefaultJobService;
import io.onedev.server.job.DefaultResourceAllocator;
import io.onedev.server.job.JobManager;
import io.onedev.server.job.JobService;
import io.onedev.server.job.ResourceAllocator;
import io.onedev.server.job.log.DefaultLogManager;
import io.onedev.server.job.log.LogManager;
import io.onedev.server.mail.DefaultMailManager;
import io.onedev.server.mail.MailManager;
import io.onedev.server.markdown.DefaultMarkdownManager;
import io.onedev.server.job.log.DefaultLogService;
import io.onedev.server.job.log.LogService;
import io.onedev.server.mail.DefaultMailService;
import io.onedev.server.mail.MailService;
import io.onedev.server.markdown.DefaultMarkdownService;
import io.onedev.server.markdown.HtmlProcessor;
import io.onedev.server.markdown.MarkdownManager;
import io.onedev.server.markdown.MarkdownService;
import io.onedev.server.model.support.administration.GroovyScript;
import io.onedev.server.model.support.administration.authenticator.Authenticator;
import io.onedev.server.notification.BuildNotificationManager;
@ -312,21 +136,21 @@ import io.onedev.server.notification.PackNotificationManager;
import io.onedev.server.notification.PullRequestNotificationManager;
import io.onedev.server.notification.WebHookManager;
import io.onedev.server.pack.PackFilter;
import io.onedev.server.persistence.DefaultIdManager;
import io.onedev.server.persistence.DefaultSessionFactoryManager;
import io.onedev.server.persistence.DefaultSessionManager;
import io.onedev.server.persistence.DefaultTransactionManager;
import io.onedev.server.persistence.DefaultIdService;
import io.onedev.server.persistence.DefaultSessionFactoryService;
import io.onedev.server.persistence.DefaultSessionService;
import io.onedev.server.persistence.DefaultTransactionService;
import io.onedev.server.persistence.HibernateInterceptor;
import io.onedev.server.persistence.IdManager;
import io.onedev.server.persistence.IdService;
import io.onedev.server.persistence.PersistListener;
import io.onedev.server.persistence.PrefixedNamingStrategy;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.persistence.SessionFactoryProvider;
import io.onedev.server.persistence.SessionInterceptor;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.persistence.SessionProvider;
import io.onedev.server.persistence.TransactionInterceptor;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.TransactionService;
import io.onedev.server.persistence.annotation.Sessional;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.Dao;
@ -338,16 +162,16 @@ import io.onedev.server.rest.ResourceConfigProvider;
import io.onedev.server.rest.WebApplicationExceptionHandler;
import io.onedev.server.rest.resource.McpHelperResource;
import io.onedev.server.rest.resource.ProjectResource;
import io.onedev.server.search.code.CodeIndexManager;
import io.onedev.server.search.code.CodeSearchManager;
import io.onedev.server.search.code.DefaultCodeIndexManager;
import io.onedev.server.search.code.DefaultCodeSearchManager;
import io.onedev.server.search.entitytext.CodeCommentTextManager;
import io.onedev.server.search.entitytext.DefaultCodeCommentTextManager;
import io.onedev.server.search.entitytext.DefaultIssueTextManager;
import io.onedev.server.search.entitytext.DefaultPullRequestTextManager;
import io.onedev.server.search.entitytext.IssueTextManager;
import io.onedev.server.search.entitytext.PullRequestTextManager;
import io.onedev.server.search.code.CodeIndexService;
import io.onedev.server.search.code.CodeSearchService;
import io.onedev.server.search.code.DefaultCodeIndexService;
import io.onedev.server.search.code.DefaultCodeSearchService;
import io.onedev.server.search.entitytext.CodeCommentTextService;
import io.onedev.server.search.entitytext.DefaultCodeCommentTextService;
import io.onedev.server.search.entitytext.DefaultIssueTextService;
import io.onedev.server.search.entitytext.DefaultPullRequestTextService;
import io.onedev.server.search.entitytext.IssueTextService;
import io.onedev.server.search.entitytext.PullRequestTextService;
import io.onedev.server.security.BasicAuthenticationFilter;
import io.onedev.server.security.BearerAuthenticationFilter;
import io.onedev.server.security.CodePullAuthorizationSource;
@ -359,26 +183,202 @@ import io.onedev.server.security.DefaultWebSecurityManager;
import io.onedev.server.security.FilterChainConfigurator;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.security.realm.GeneralAuthorizingRealm;
import io.onedev.server.service.AccessTokenAuthorizationService;
import io.onedev.server.service.AccessTokenService;
import io.onedev.server.service.AgentAttributeService;
import io.onedev.server.service.AgentLastUsedDateService;
import io.onedev.server.service.AgentService;
import io.onedev.server.service.AgentTokenService;
import io.onedev.server.service.AlertService;
import io.onedev.server.service.BaseAuthorizationService;
import io.onedev.server.service.BuildDependenceService;
import io.onedev.server.service.BuildLabelService;
import io.onedev.server.service.BuildMetricService;
import io.onedev.server.service.BuildParamService;
import io.onedev.server.service.BuildQueryPersonalizationService;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.CodeCommentService;
import io.onedev.server.service.CodeCommentMentionService;
import io.onedev.server.service.CodeCommentQueryPersonalizationService;
import io.onedev.server.service.CodeCommentReplyService;
import io.onedev.server.service.CodeCommentStatusChangeService;
import io.onedev.server.service.CodeCommentTouchService;
import io.onedev.server.service.CommitQueryPersonalizationService;
import io.onedev.server.service.DashboardGroupShareService;
import io.onedev.server.service.DashboardService;
import io.onedev.server.service.DashboardUserShareService;
import io.onedev.server.service.DashboardVisitService;
import io.onedev.server.service.EmailAddressService;
import io.onedev.server.service.GitLfsLockService;
import io.onedev.server.service.GpgKeyService;
import io.onedev.server.service.GroupAuthorizationService;
import io.onedev.server.service.GroupService;
import io.onedev.server.service.IssueAuthorizationService;
import io.onedev.server.service.IssueChangeService;
import io.onedev.server.service.IssueCommentService;
import io.onedev.server.service.IssueCommentReactionService;
import io.onedev.server.service.IssueCommentRevisionService;
import io.onedev.server.service.IssueDescriptionRevisionService;
import io.onedev.server.service.IssueFieldService;
import io.onedev.server.service.IssueLinkService;
import io.onedev.server.service.IssueMentionService;
import io.onedev.server.service.IssueQueryPersonalizationService;
import io.onedev.server.service.IssueReactionService;
import io.onedev.server.service.IssueScheduleService;
import io.onedev.server.service.IssueService;
import io.onedev.server.service.IssueStateHistoryService;
import io.onedev.server.service.IssueTouchService;
import io.onedev.server.service.IssueVoteService;
import io.onedev.server.service.IssueWatchService;
import io.onedev.server.service.IssueWorkService;
import io.onedev.server.service.IterationService;
import io.onedev.server.service.JobCacheService;
import io.onedev.server.service.LabelSpecService;
import io.onedev.server.service.LinkAuthorizationService;
import io.onedev.server.service.LinkSpecService;
import io.onedev.server.service.MembershipService;
import io.onedev.server.service.PackBlobReferenceService;
import io.onedev.server.service.PackBlobService;
import io.onedev.server.service.PackLabelService;
import io.onedev.server.service.PackQueryPersonalizationService;
import io.onedev.server.service.PackService;
import io.onedev.server.service.PendingSuggestionApplyService;
import io.onedev.server.service.ProjectLabelService;
import io.onedev.server.service.ProjectLastEventDateService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.PullRequestAssignmentService;
import io.onedev.server.service.PullRequestChangeService;
import io.onedev.server.service.PullRequestCommentService;
import io.onedev.server.service.PullRequestCommentReactionService;
import io.onedev.server.service.PullRequestCommentRevisionService;
import io.onedev.server.service.PullRequestDescriptionRevisionService;
import io.onedev.server.service.PullRequestLabelService;
import io.onedev.server.service.PullRequestMentionService;
import io.onedev.server.service.PullRequestQueryPersonalizationService;
import io.onedev.server.service.PullRequestReactionService;
import io.onedev.server.service.PullRequestReviewService;
import io.onedev.server.service.PullRequestService;
import io.onedev.server.service.PullRequestTouchService;
import io.onedev.server.service.PullRequestUpdateService;
import io.onedev.server.service.PullRequestWatchService;
import io.onedev.server.service.ReviewedDiffService;
import io.onedev.server.service.RoleService;
import io.onedev.server.service.SettingService;
import io.onedev.server.service.SshKeyService;
import io.onedev.server.service.SsoAccountService;
import io.onedev.server.service.SsoProviderService;
import io.onedev.server.service.StopwatchService;
import io.onedev.server.service.UserAuthorizationService;
import io.onedev.server.service.UserInvitationService;
import io.onedev.server.service.UserService;
import io.onedev.server.service.impl.DefaultAccessTokenAuthorizationService;
import io.onedev.server.service.impl.DefaultAccessTokenService;
import io.onedev.server.service.impl.DefaultAgentAttributeService;
import io.onedev.server.service.impl.DefaultAgentLastUsedDateService;
import io.onedev.server.service.impl.DefaultAgentService;
import io.onedev.server.service.impl.DefaultAgentTokenService;
import io.onedev.server.service.impl.DefaultAlertService;
import io.onedev.server.service.impl.DefaultBaseAuthorizationService;
import io.onedev.server.service.impl.DefaultBuildDependenceService;
import io.onedev.server.service.impl.DefaultBuildLabelService;
import io.onedev.server.service.impl.DefaultBuildMetricService;
import io.onedev.server.service.impl.DefaultBuildParamService;
import io.onedev.server.service.impl.DefaultBuildQueryPersonalizationService;
import io.onedev.server.service.impl.DefaultBuildService;
import io.onedev.server.service.impl.DefaultCodeCommentService;
import io.onedev.server.service.impl.DefaultCodeCommentMentionService;
import io.onedev.server.service.impl.DefaultCodeCommentQueryPersonalizationService;
import io.onedev.server.service.impl.DefaultCodeCommentReplyService;
import io.onedev.server.service.impl.DefaultCodeCommentStatusChangeService;
import io.onedev.server.service.impl.DefaultCodeCommentTouchService;
import io.onedev.server.service.impl.DefaultCommitQueryPersonalizationService;
import io.onedev.server.service.impl.DefaultDashboardGroupShareService;
import io.onedev.server.service.impl.DefaultDashboardService;
import io.onedev.server.service.impl.DefaultDashboardUserShareService;
import io.onedev.server.service.impl.DefaultDashboardVisitService;
import io.onedev.server.service.impl.DefaultEmailAddressService;
import io.onedev.server.service.impl.DefaultGitLfsLockService;
import io.onedev.server.service.impl.DefaultGpgKeyService;
import io.onedev.server.service.impl.DefaultGroupAuthorizationService;
import io.onedev.server.service.impl.DefaultGroupService;
import io.onedev.server.service.impl.DefaultIssueAuthorizationService;
import io.onedev.server.service.impl.DefaultIssueChangeService;
import io.onedev.server.service.impl.DefaultIssueCommentService;
import io.onedev.server.service.impl.DefaultIssueCommentReactionService;
import io.onedev.server.service.impl.DefaultIssueCommentRevisionService;
import io.onedev.server.service.impl.DefaultIssueDescriptionRevisionService;
import io.onedev.server.service.impl.DefaultIssueFieldService;
import io.onedev.server.service.impl.DefaultIssueLinkService;
import io.onedev.server.service.impl.DefaultIssueMentionService;
import io.onedev.server.service.impl.DefaultIssueQueryPersonalizationService;
import io.onedev.server.service.impl.DefaultIssueReactionService;
import io.onedev.server.service.impl.DefaultIssueScheduleService;
import io.onedev.server.service.impl.DefaultIssueService;
import io.onedev.server.service.impl.DefaultIssueStateHistoryService;
import io.onedev.server.service.impl.DefaultIssueTouchService;
import io.onedev.server.service.impl.DefaultIssueVoteService;
import io.onedev.server.service.impl.DefaultIssueWatchService;
import io.onedev.server.service.impl.DefaultIssueWorkService;
import io.onedev.server.service.impl.DefaultIterationService;
import io.onedev.server.service.impl.DefaultJobCacheService;
import io.onedev.server.service.impl.DefaultLabelSpecService;
import io.onedev.server.service.impl.DefaultLinkAuthorizationService;
import io.onedev.server.service.impl.DefaultLinkSpecService;
import io.onedev.server.service.impl.DefaultMembershipService;
import io.onedev.server.service.impl.DefaultPackBlobReferenceService;
import io.onedev.server.service.impl.DefaultPackBlobService;
import io.onedev.server.service.impl.DefaultPackLabelService;
import io.onedev.server.service.impl.DefaultPackQueryPersonalizationService;
import io.onedev.server.service.impl.DefaultPackService;
import io.onedev.server.service.impl.DefaultPendingSuggestionApplyService;
import io.onedev.server.service.impl.DefaultProjectLabelService;
import io.onedev.server.service.impl.DefaultProjectLastEventDateService;
import io.onedev.server.service.impl.DefaultProjectService;
import io.onedev.server.service.impl.DefaultPullRequestAssignmentService;
import io.onedev.server.service.impl.DefaultPullRequestChangeService;
import io.onedev.server.service.impl.DefaultPullRequestCommentService;
import io.onedev.server.service.impl.DefaultPullRequestCommentReactionService;
import io.onedev.server.service.impl.DefaultPullRequestCommentRevisionService;
import io.onedev.server.service.impl.DefaultPullRequestDescriptionRevisionService;
import io.onedev.server.service.impl.DefaultPullRequestLabelService;
import io.onedev.server.service.impl.DefaultPullRequestMentionService;
import io.onedev.server.service.impl.DefaultPullRequestQueryPersonalizationService;
import io.onedev.server.service.impl.DefaultPullRequestReactionService;
import io.onedev.server.service.impl.DefaultPullRequestReviewService;
import io.onedev.server.service.impl.DefaultPullRequestService;
import io.onedev.server.service.impl.DefaultPullRequestTouchService;
import io.onedev.server.service.impl.DefaultPullRequestUpdateService;
import io.onedev.server.service.impl.DefaultPullRequestWatchService;
import io.onedev.server.service.impl.DefaultReviewedDiffService;
import io.onedev.server.service.impl.DefaultRoleService;
import io.onedev.server.service.impl.DefaultSettingService;
import io.onedev.server.service.impl.DefaultSshKeyService;
import io.onedev.server.service.impl.DefaultSsoAccountService;
import io.onedev.server.service.impl.DefaultSsoProviderService;
import io.onedev.server.service.impl.DefaultStopwatchService;
import io.onedev.server.service.impl.DefaultUserAuthorizationService;
import io.onedev.server.service.impl.DefaultUserInvitationService;
import io.onedev.server.service.impl.DefaultUserService;
import io.onedev.server.ssh.CommandCreator;
import io.onedev.server.ssh.DefaultSshAuthenticator;
import io.onedev.server.ssh.DefaultSshManager;
import io.onedev.server.ssh.DefaultSshService;
import io.onedev.server.ssh.SshAuthenticator;
import io.onedev.server.ssh.SshManager;
import io.onedev.server.ssh.SshService;
import io.onedev.server.taskschedule.DefaultTaskScheduler;
import io.onedev.server.taskschedule.TaskScheduler;
import io.onedev.server.updatecheck.DefaultUpdateCheckManager;
import io.onedev.server.updatecheck.UpdateCheckManager;
import io.onedev.server.updatecheck.DefaultUpdateCheckService;
import io.onedev.server.updatecheck.UpdateCheckService;
import io.onedev.server.util.ScriptContribution;
import io.onedev.server.util.concurrent.BatchWorkManager;
import io.onedev.server.util.concurrent.DefaultBatchWorkManager;
import io.onedev.server.util.concurrent.DefaultWorkExecutor;
import io.onedev.server.util.concurrent.WorkExecutor;
import io.onedev.server.util.concurrent.BatchWorkExecutionService;
import io.onedev.server.util.concurrent.DefaultBatchWorkExecutionService;
import io.onedev.server.util.concurrent.DefaultWorkExecutionService;
import io.onedev.server.util.concurrent.WorkExecutionService;
import io.onedev.server.util.jackson.ObjectMapperConfigurator;
import io.onedev.server.util.jackson.ObjectMapperProvider;
import io.onedev.server.util.jackson.git.GitObjectMapperConfigurator;
import io.onedev.server.util.jackson.hibernate.HibernateObjectMapperConfigurator;
import io.onedev.server.util.oauth.DefaultOAuthTokenManager;
import io.onedev.server.util.oauth.OAuthTokenManager;
import io.onedev.server.util.oauth.DefaultOAuthTokenService;
import io.onedev.server.util.oauth.OAuthTokenService;
import io.onedev.server.util.xstream.CollectionConverter;
import io.onedev.server.util.xstream.HibernateProxyConverter;
import io.onedev.server.util.xstream.MapConverter;
@ -389,14 +389,14 @@ import io.onedev.server.util.xstream.VersionedDocumentConverter;
import io.onedev.server.validation.MessageInterpolator;
import io.onedev.server.validation.ShallowValidatorProvider;
import io.onedev.server.validation.ValidatorProvider;
import io.onedev.server.web.DefaultUrlManager;
import io.onedev.server.web.DefaultUrlService;
import io.onedev.server.web.DefaultWicketFilter;
import io.onedev.server.web.DefaultWicketServlet;
import io.onedev.server.web.ResourcePackScopeContribution;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
import io.onedev.server.web.WebApplication;
import io.onedev.server.web.avatar.AvatarManager;
import io.onedev.server.web.avatar.DefaultAvatarManager;
import io.onedev.server.web.avatar.AvatarService;
import io.onedev.server.web.avatar.DefaultAvatarService;
import io.onedev.server.web.component.diff.DiffRenderer;
import io.onedev.server.web.component.markdown.SourcePositionTrackExtension;
import io.onedev.server.web.component.markdown.emoji.EmojiExtension;
@ -409,24 +409,24 @@ import io.onedev.server.web.exceptionhandler.PageExpiredExceptionHandler;
import io.onedev.server.web.page.layout.AdministrationSettingContribution;
import io.onedev.server.web.page.project.blob.render.BlobRenderer;
import io.onedev.server.web.page.project.setting.ProjectSettingContribution;
import io.onedev.server.web.upload.DefaultUploadManager;
import io.onedev.server.web.upload.UploadManager;
import io.onedev.server.web.upload.DefaultUploadService;
import io.onedev.server.web.upload.UploadService;
import io.onedev.server.web.websocket.AlertEventBroadcaster;
import io.onedev.server.web.websocket.BuildEventBroadcaster;
import io.onedev.server.web.websocket.CodeCommentEventBroadcaster;
import io.onedev.server.web.websocket.CommitIndexedBroadcaster;
import io.onedev.server.web.websocket.DefaultWebSocketManager;
import io.onedev.server.web.websocket.DefaultWebSocketService;
import io.onedev.server.web.websocket.IssueEventBroadcaster;
import io.onedev.server.web.websocket.PullRequestEventBroadcaster;
import io.onedev.server.web.websocket.WebSocketManager;
import io.onedev.server.xodus.CommitInfoManager;
import io.onedev.server.xodus.DefaultCommitInfoManager;
import io.onedev.server.xodus.DefaultIssueInfoManager;
import io.onedev.server.xodus.DefaultPullRequestInfoManager;
import io.onedev.server.xodus.DefaultVisitInfoManager;
import io.onedev.server.xodus.IssueInfoManager;
import io.onedev.server.xodus.PullRequestInfoManager;
import io.onedev.server.xodus.VisitInfoManager;
import io.onedev.server.web.websocket.WebSocketService;
import io.onedev.server.xodus.CommitInfoService;
import io.onedev.server.xodus.DefaultCommitInfoService;
import io.onedev.server.xodus.DefaultIssueInfoService;
import io.onedev.server.xodus.DefaultPullRequestInfoService;
import io.onedev.server.xodus.DefaultVisitInfoService;
import io.onedev.server.xodus.IssueInfoService;
import io.onedev.server.xodus.PullRequestInfoService;
import io.onedev.server.xodus.VisitInfoService;
import nl.altindag.ssl.SSLFactory;
/**
@ -440,8 +440,8 @@ public class CoreModule extends AbstractPluginModule {
super.configure();
bind(ListenerRegistry.class).to(DefaultListenerRegistry.class);
bind(JettyManager.class).to(DefaultJettyManager.class);
bind(ServletContextHandler.class).toProvider(DefaultJettyManager.class);
bind(JettyService.class).to(DefaultJettyService.class);
bind(ServletContextHandler.class).toProvider(DefaultJettyService.class);
bind(ObjectMapper.class).toProvider(ObjectMapperProvider.class).in(Singleton.class);
@ -490,124 +490,124 @@ public class CoreModule extends AbstractPluginModule {
* HK2 to guice bridge can only search in explicit bindings in Guice
*/
bind(SshAuthenticator.class).to(DefaultSshAuthenticator.class);
bind(SshManager.class).to(DefaultSshManager.class);
bind(MarkdownManager.class).to(DefaultMarkdownManager.class);
bind(SettingManager.class).to(DefaultSettingManager.class);
bind(DataManager.class).to(DefaultDataManager.class);
bind(SshService.class).to(DefaultSshService.class);
bind(MarkdownService.class).to(DefaultMarkdownService.class);
bind(SettingService.class).to(DefaultSettingService.class);
bind(DataService.class).to(DefaultDataService.class);
bind(TaskScheduler.class).to(DefaultTaskScheduler.class);
bind(PullRequestCommentManager.class).to(DefaultPullRequestCommentManager.class);
bind(CodeCommentManager.class).to(DefaultCodeCommentManager.class);
bind(PullRequestManager.class).to(DefaultPullRequestManager.class);
bind(PullRequestUpdateManager.class).to(DefaultPullRequestUpdateManager.class);
bind(ProjectManager.class).to(DefaultProjectManager.class);
bind(ProjectLastEventDateManager.class).to(DefaultProjectLastEventDateManager.class);
bind(UserInvitationManager.class).to(DefaultUserInvitationManager.class);
bind(PullRequestReviewManager.class).to(DefaultPullRequestReviewManager.class);
bind(BuildManager.class).to(DefaultBuildManager.class);
bind(BuildDependenceManager.class).to(DefaultBuildDependenceManager.class);
bind(JobManager.class).to(DefaultJobManager.class);
bind(JobCacheManager.class).to(DefaultJobCacheManager.class);
bind(LogManager.class).to(DefaultLogManager.class);
bind(MailManager.class).to(DefaultMailManager.class);
bind(IssueManager.class).to(DefaultIssueManager.class);
bind(IssueFieldManager.class).to(DefaultIssueFieldManager.class);
bind(BuildParamManager.class).to(DefaultBuildParamManager.class);
bind(UserAuthorizationManager.class).to(DefaultUserAuthorizationManager.class);
bind(GroupAuthorizationManager.class).to(DefaultGroupAuthorizationManager.class);
bind(PullRequestWatchManager.class).to(DefaultPullRequestWatchManager.class);
bind(RoleManager.class).to(DefaultRoleManager.class);
bind(CommitInfoManager.class).to(DefaultCommitInfoManager.class);
bind(IssueInfoManager.class).to(DefaultIssueInfoManager.class);
bind(VisitInfoManager.class).to(DefaultVisitInfoManager.class);
bind(BatchWorkManager.class).to(DefaultBatchWorkManager.class);
bind(WorkExecutor.class).to(DefaultWorkExecutor.class);
bind(GroupManager.class).to(DefaultGroupManager.class);
bind(IssueMentionManager.class).to(DefaultIssueMentionManager.class);
bind(PullRequestMentionManager.class).to(DefaultPullRequestMentionManager.class);
bind(CodeCommentMentionManager.class).to(DefaultCodeCommentMentionManager.class);
bind(MembershipManager.class).to(DefaultMembershipManager.class);
bind(PullRequestChangeManager.class).to(DefaultPullRequestChangeManager.class);
bind(CodeCommentReplyManager.class).to(DefaultCodeCommentReplyManager.class);
bind(CodeCommentStatusChangeManager.class).to(DefaultCodeCommentStatusChangeManager.class);
bind(AttachmentManager.class).to(DefaultAttachmentManager.class);
bind(PullRequestInfoManager.class).to(DefaultPullRequestInfoManager.class);
bind(PullRequestCommentService.class).to(DefaultPullRequestCommentService.class);
bind(CodeCommentService.class).to(DefaultCodeCommentService.class);
bind(PullRequestService.class).to(DefaultPullRequestService.class);
bind(PullRequestUpdateService.class).to(DefaultPullRequestUpdateService.class);
bind(ProjectService.class).to(DefaultProjectService.class);
bind(ProjectLastEventDateService.class).to(DefaultProjectLastEventDateService.class);
bind(UserInvitationService.class).to(DefaultUserInvitationService.class);
bind(PullRequestReviewService.class).to(DefaultPullRequestReviewService.class);
bind(BuildService.class).to(DefaultBuildService.class);
bind(BuildDependenceService.class).to(DefaultBuildDependenceService.class);
bind(JobService.class).to(DefaultJobService.class);
bind(JobCacheService.class).to(DefaultJobCacheService.class);
bind(LogService.class).to(DefaultLogService.class);
bind(MailService.class).to(DefaultMailService.class);
bind(IssueService.class).to(DefaultIssueService.class);
bind(IssueFieldService.class).to(DefaultIssueFieldService.class);
bind(BuildParamService.class).to(DefaultBuildParamService.class);
bind(UserAuthorizationService.class).to(DefaultUserAuthorizationService.class);
bind(GroupAuthorizationService.class).to(DefaultGroupAuthorizationService.class);
bind(PullRequestWatchService.class).to(DefaultPullRequestWatchService.class);
bind(RoleService.class).to(DefaultRoleService.class);
bind(CommitInfoService.class).to(DefaultCommitInfoService.class);
bind(IssueInfoService.class).to(DefaultIssueInfoService.class);
bind(VisitInfoService.class).to(DefaultVisitInfoService.class);
bind(BatchWorkExecutionService.class).to(DefaultBatchWorkExecutionService.class);
bind(WorkExecutionService.class).to(DefaultWorkExecutionService.class);
bind(GroupService.class).to(DefaultGroupService.class);
bind(IssueMentionService.class).to(DefaultIssueMentionService.class);
bind(PullRequestMentionService.class).to(DefaultPullRequestMentionService.class);
bind(CodeCommentMentionService.class).to(DefaultCodeCommentMentionService.class);
bind(MembershipService.class).to(DefaultMembershipService.class);
bind(PullRequestChangeService.class).to(DefaultPullRequestChangeService.class);
bind(CodeCommentReplyService.class).to(DefaultCodeCommentReplyService.class);
bind(CodeCommentStatusChangeService.class).to(DefaultCodeCommentStatusChangeService.class);
bind(AttachmentService.class).to(DefaultAttachmentService.class);
bind(PullRequestInfoService.class).to(DefaultPullRequestInfoService.class);
bind(PullRequestNotificationManager.class);
bind(CommitNotificationManager.class);
bind(BuildNotificationManager.class);
bind(PackNotificationManager.class);
bind(IssueNotificationManager.class);
bind(CodeCommentNotificationManager.class);
bind(CodeCommentManager.class).to(DefaultCodeCommentManager.class);
bind(AccessTokenManager.class).to(DefaultAccessTokenManager.class);
bind(UserManager.class).to(DefaultUserManager.class);
bind(IssueWatchManager.class).to(DefaultIssueWatchManager.class);
bind(IssueChangeManager.class).to(DefaultIssueChangeManager.class);
bind(IssueVoteManager.class).to(DefaultIssueVoteManager.class);
bind(IssueWorkManager.class).to(DefaultIssueWorkManager.class);
bind(IterationManager.class).to(DefaultIterationManager.class);
bind(IssueCommentManager.class).to(DefaultIssueCommentManager.class);
bind(IssueQueryPersonalizationManager.class).to(DefaultIssueQueryPersonalizationManager.class);
bind(PullRequestQueryPersonalizationManager.class).to(DefaultPullRequestQueryPersonalizationManager.class);
bind(CodeCommentQueryPersonalizationManager.class).to(DefaultCodeCommentQueryPersonalizationManager.class);
bind(CommitQueryPersonalizationManager.class).to(DefaultCommitQueryPersonalizationManager.class);
bind(BuildQueryPersonalizationManager.class).to(DefaultBuildQueryPersonalizationManager.class);
bind(PackQueryPersonalizationManager.class).to(DefaultPackQueryPersonalizationManager.class);
bind(PullRequestAssignmentManager.class).to(DefaultPullRequestAssignmentManager.class);
bind(SshKeyManager.class).to(DefaultSshKeyManager.class);
bind(BuildMetricManager.class).to(DefaultBuildMetricManager.class);
bind(ReferenceChangeManager.class).to(DefaultReferenceChangeManager.class);
bind(GitLfsLockManager.class).to(DefaultGitLfsLockManager.class);
bind(IssueScheduleManager.class).to(DefaultIssueScheduleManager.class);
bind(LinkSpecManager.class).to(DefaultLinkSpecManager.class);
bind(IssueLinkManager.class).to(DefaultIssueLinkManager.class);
bind(IssueStateHistoryManager.class).to(DefaultIssueStateHistoryManager.class);
bind(LinkAuthorizationManager.class).to(DefaultLinkAuthorizationManager.class);
bind(EmailAddressManager.class).to(DefaultEmailAddressManager.class);
bind(GpgKeyManager.class).to(DefaultGpgKeyManager.class);
bind(IssueTextManager.class).to(DefaultIssueTextManager.class);
bind(PullRequestTextManager.class).to(DefaultPullRequestTextManager.class);
bind(CodeCommentTextManager.class).to(DefaultCodeCommentTextManager.class);
bind(PendingSuggestionApplyManager.class).to(DefaultPendingSuggestionApplyManager.class);
bind(IssueAuthorizationManager.class).to(DefaultIssueAuthorizationManager.class);
bind(DashboardManager.class).to(DefaultDashboardManager.class);
bind(DashboardUserShareManager.class).to(DefaultDashboardUserShareManager.class);
bind(DashboardGroupShareManager.class).to(DefaultDashboardGroupShareManager.class);
bind(DashboardVisitManager.class).to(DefaultDashboardVisitManager.class);
bind(LabelSpecManager.class).to(DefaultLabelSpecManager.class);
bind(ProjectLabelManager.class).to(DefaultProjectLabelManager.class);
bind(BuildLabelManager.class).to(DefaultBuildLabelManager.class);
bind(PackLabelManager.class).to(DefaultPackLabelManager.class);
bind(PullRequestLabelManager.class).to(DefaultPullRequestLabelManager.class);
bind(IssueTouchManager.class).to(DefaultIssueTouchManager.class);
bind(PullRequestTouchManager.class).to(DefaultPullRequestTouchManager.class);
bind(CodeCommentTouchManager.class).to(DefaultCodeCommentTouchManager.class);
bind(AlertManager.class).to(DefaultAlertManager.class);
bind(UpdateCheckManager.class).to(DefaultUpdateCheckManager.class);
bind(StopwatchManager.class).to(DefaultStopwatchManager.class);
bind(PackManager.class).to(DefaultPackManager.class);
bind(PackBlobManager.class).to(DefaultPackBlobManager.class);
bind(PackBlobReferenceManager.class).to(DefaultPackBlobReferenceManager.class);
bind(AccessTokenAuthorizationManager.class).to(DefaultAccessTokenAuthorizationManager.class);
bind(ReviewedDiffManager.class).to(DefaultReviewedDiffManager.class);
bind(OAuthTokenManager.class).to(DefaultOAuthTokenManager.class);
bind(IssueReactionManager.class).to(DefaultIssueReactionManager.class);
bind(IssueCommentReactionManager.class).to(DefaultIssueCommentReactionManager.class);
bind(PullRequestReactionManager.class).to(DefaultPullRequestReactionManager.class);
bind(PullRequestCommentReactionManager.class).to(DefaultPullRequestCommentReactionManager.class);
bind(IssueCommentRevisionManager.class).to(DefaultIssueCommentRevisionManager.class);
bind(PullRequestCommentRevisionManager.class).to(DefaultPullRequestCommentRevisionManager.class);
bind(IssueDescriptionRevisionManager.class).to(DefaultIssueDescriptionRevisionManager.class);
bind(PullRequestDescriptionRevisionManager.class).to(DefaultPullRequestDescriptionRevisionManager.class);
bind(SsoProviderManager.class).to(DefaultSsoProviderManager.class);
bind(SsoAccountManager.class).to(DefaultSsoAccountManager.class);
bind(BaseAuthorizationManager.class).to(DefaultBaseAuthorizationManager.class);
bind(CodeCommentService.class).to(DefaultCodeCommentService.class);
bind(AccessTokenService.class).to(DefaultAccessTokenService.class);
bind(UserService.class).to(DefaultUserService.class);
bind(IssueWatchService.class).to(DefaultIssueWatchService.class);
bind(IssueChangeService.class).to(DefaultIssueChangeService.class);
bind(IssueVoteService.class).to(DefaultIssueVoteService.class);
bind(IssueWorkService.class).to(DefaultIssueWorkService.class);
bind(IterationService.class).to(DefaultIterationService.class);
bind(IssueCommentService.class).to(DefaultIssueCommentService.class);
bind(IssueQueryPersonalizationService.class).to(DefaultIssueQueryPersonalizationService.class);
bind(PullRequestQueryPersonalizationService.class).to(DefaultPullRequestQueryPersonalizationService.class);
bind(CodeCommentQueryPersonalizationService.class).to(DefaultCodeCommentQueryPersonalizationService.class);
bind(CommitQueryPersonalizationService.class).to(DefaultCommitQueryPersonalizationService.class);
bind(BuildQueryPersonalizationService.class).to(DefaultBuildQueryPersonalizationService.class);
bind(PackQueryPersonalizationService.class).to(DefaultPackQueryPersonalizationService.class);
bind(PullRequestAssignmentService.class).to(DefaultPullRequestAssignmentService.class);
bind(SshKeyService.class).to(DefaultSshKeyService.class);
bind(BuildMetricService.class).to(DefaultBuildMetricService.class);
bind(ReferenceChangeService.class).to(DefaultReferenceChangeService.class);
bind(GitLfsLockService.class).to(DefaultGitLfsLockService.class);
bind(IssueScheduleService.class).to(DefaultIssueScheduleService.class);
bind(LinkSpecService.class).to(DefaultLinkSpecService.class);
bind(IssueLinkService.class).to(DefaultIssueLinkService.class);
bind(IssueStateHistoryService.class).to(DefaultIssueStateHistoryService.class);
bind(LinkAuthorizationService.class).to(DefaultLinkAuthorizationService.class);
bind(EmailAddressService.class).to(DefaultEmailAddressService.class);
bind(GpgKeyService.class).to(DefaultGpgKeyService.class);
bind(IssueTextService.class).to(DefaultIssueTextService.class);
bind(PullRequestTextService.class).to(DefaultPullRequestTextService.class);
bind(CodeCommentTextService.class).to(DefaultCodeCommentTextService.class);
bind(PendingSuggestionApplyService.class).to(DefaultPendingSuggestionApplyService.class);
bind(IssueAuthorizationService.class).to(DefaultIssueAuthorizationService.class);
bind(DashboardService.class).to(DefaultDashboardService.class);
bind(DashboardUserShareService.class).to(DefaultDashboardUserShareService.class);
bind(DashboardGroupShareService.class).to(DefaultDashboardGroupShareService.class);
bind(DashboardVisitService.class).to(DefaultDashboardVisitService.class);
bind(LabelSpecService.class).to(DefaultLabelSpecService.class);
bind(ProjectLabelService.class).to(DefaultProjectLabelService.class);
bind(BuildLabelService.class).to(DefaultBuildLabelService.class);
bind(PackLabelService.class).to(DefaultPackLabelService.class);
bind(PullRequestLabelService.class).to(DefaultPullRequestLabelService.class);
bind(IssueTouchService.class).to(DefaultIssueTouchService.class);
bind(PullRequestTouchService.class).to(DefaultPullRequestTouchService.class);
bind(CodeCommentTouchService.class).to(DefaultCodeCommentTouchService.class);
bind(AlertService.class).to(DefaultAlertService.class);
bind(UpdateCheckService.class).to(DefaultUpdateCheckService.class);
bind(StopwatchService.class).to(DefaultStopwatchService.class);
bind(PackService.class).to(DefaultPackService.class);
bind(PackBlobService.class).to(DefaultPackBlobService.class);
bind(PackBlobReferenceService.class).to(DefaultPackBlobReferenceService.class);
bind(AccessTokenAuthorizationService.class).to(DefaultAccessTokenAuthorizationService.class);
bind(ReviewedDiffService.class).to(DefaultReviewedDiffService.class);
bind(OAuthTokenService.class).to(DefaultOAuthTokenService.class);
bind(IssueReactionService.class).to(DefaultIssueReactionService.class);
bind(IssueCommentReactionService.class).to(DefaultIssueCommentReactionService.class);
bind(PullRequestReactionService.class).to(DefaultPullRequestReactionService.class);
bind(PullRequestCommentReactionService.class).to(DefaultPullRequestCommentReactionService.class);
bind(IssueCommentRevisionService.class).to(DefaultIssueCommentRevisionService.class);
bind(PullRequestCommentRevisionService.class).to(DefaultPullRequestCommentRevisionService.class);
bind(IssueDescriptionRevisionService.class).to(DefaultIssueDescriptionRevisionService.class);
bind(PullRequestDescriptionRevisionService.class).to(DefaultPullRequestDescriptionRevisionService.class);
bind(SsoProviderService.class).to(DefaultSsoProviderService.class);
bind(SsoAccountService.class).to(DefaultSsoAccountService.class);
bind(BaseAuthorizationService.class).to(DefaultBaseAuthorizationService.class);
bind(WebHookManager.class);
contribute(CodePullAuthorizationSource.class, DefaultJobManager.class);
contribute(CodePullAuthorizationSource.class, DefaultJobService.class);
bind(CodeIndexManager.class).to(DefaultCodeIndexManager.class);
bind(CodeSearchManager.class).to(DefaultCodeSearchManager.class);
bind(CodeIndexService.class).to(DefaultCodeIndexService.class);
bind(CodeSearchService.class).to(DefaultCodeSearchService.class);
Bootstrap.executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
new SynchronousQueue<>()) {
@ -672,7 +672,7 @@ public class CoreModule extends AbstractPluginModule {
bind(GitLfsFilter.class);
bind(GitPreReceiveCallback.class);
bind(GitPostReceiveCallback.class);
bind(SignatureVerificationManager.class).to(DefaultSignatureVerificationManager.class);
bind(SignatureVerificationService.class).to(DefaultSignatureVerificationService.class);
contribute(CommandCreator.class, SshCommandCreator.class);
contributeFromPackage(SignatureVerifier.class, SignatureVerifier.class);
}
@ -692,15 +692,15 @@ public class CoreModule extends AbstractPluginModule {
bind(WicketServlet.class).to(DefaultWicketServlet.class);
bind(WicketFilter.class).to(DefaultWicketFilter.class);
bind(EditSupportRegistry.class).to(DefaultEditSupportRegistry.class);
bind(WebSocketManager.class).to(DefaultWebSocketManager.class);
bind(WebSocketService.class).to(DefaultWebSocketService.class);
bind(SessionDataStoreFactory.class).to(DefaultSessionDataStoreFactory.class);
contributeFromPackage(EditSupport.class, EditSupport.class);
bind(org.apache.wicket.protocol.http.WebApplication.class).to(WebApplication.class);
bind(Application.class).to(WebApplication.class);
bind(AvatarManager.class).to(DefaultAvatarManager.class);
bind(WebSocketManager.class).to(DefaultWebSocketManager.class);
bind(AvatarService.class).to(DefaultAvatarService.class);
bind(WebSocketService.class).to(DefaultWebSocketService.class);
contributeFromPackage(EditSupport.class, EditSupportLocator.class);
@ -721,23 +721,23 @@ public class CoreModule extends AbstractPluginModule {
contributeFromPackage(ExceptionHandler.class, PageExpiredExceptionHandler.class);
contributeFromPackage(ExceptionHandler.class, WebApplicationExceptionHandler.class);
bind(UrlManager.class).to(DefaultUrlManager.class);
bind(UrlService.class).to(DefaultUrlService.class);
bind(CodeCommentEventBroadcaster.class);
bind(PullRequestEventBroadcaster.class);
bind(IssueEventBroadcaster.class);
bind(BuildEventBroadcaster.class);
bind(AlertEventBroadcaster.class);
bind(UploadManager.class).to(DefaultUploadManager.class);
bind(UploadService.class).to(DefaultUploadService.class);
bind(TaskButton.TaskFutureManager.class);
}
private void configureBuild() {
bind(ResourceAllocator.class).to(DefaultResourceAllocator.class);
bind(AgentManager.class).to(DefaultAgentManager.class);
bind(AgentTokenManager.class).to(DefaultAgentTokenManager.class);
bind(AgentAttributeManager.class).to(DefaultAgentAttributeManager.class);
bind(AgentLastUsedDateManager.class).to(DefaultAgentLastUsedDateManager.class);
bind(AgentService.class).to(DefaultAgentService.class);
bind(AgentTokenService.class).to(DefaultAgentTokenService.class);
bind(AgentAttributeService.class).to(DefaultAgentAttributeService.class);
bind(AgentLastUsedDateService.class).to(DefaultAgentLastUsedDateService.class);
contribute(ScriptContribution.class, new ScriptContribution() {
@ -775,22 +775,22 @@ public class CoreModule extends AbstractPluginModule {
}
private void configurePersistence() {
bind(DataManager.class).to(DefaultDataManager.class);
bind(DataService.class).to(DefaultDataService.class);
bind(Session.class).toProvider(SessionProvider.class);
bind(EntityManager.class).toProvider(SessionProvider.class);
bind(SessionFactory.class).toProvider(SessionFactoryProvider.class);
bind(EntityManagerFactory.class).toProvider(SessionFactoryProvider.class);
bind(SessionFactoryManager.class).to(DefaultSessionFactoryManager.class);
bind(SessionFactoryService.class).to(DefaultSessionFactoryService.class);
contribute(ObjectMapperConfigurator.class, HibernateObjectMapperConfigurator.class);
bind(Interceptor.class).to(HibernateInterceptor.class);
bind(PhysicalNamingStrategy.class).toInstance(new PrefixedNamingStrategy("o_"));
bind(SessionManager.class).to(DefaultSessionManager.class);
bind(TransactionManager.class).to(DefaultTransactionManager.class);
bind(IdManager.class).to(DefaultIdManager.class);
bind(SessionService.class).to(DefaultSessionService.class);
bind(TransactionService.class).to(DefaultTransactionService.class);
bind(IdService.class).to(DefaultIdService.class);
bind(Dao.class).to(DefaultDao.class);
TransactionInterceptor transactionInterceptor = new TransactionInterceptor();

View File

@ -44,20 +44,20 @@ import io.onedev.commons.loader.AppLoader;
import io.onedev.commons.loader.ManagedSerializedForm;
import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.TarUtils;
import io.onedev.server.cluster.ClusterManager;
import io.onedev.server.data.DataManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.cluster.ClusterService;
import io.onedev.server.data.DataService;
import io.onedev.server.service.SettingService;
import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.event.system.SystemStarted;
import io.onedev.server.event.system.SystemStarting;
import io.onedev.server.event.system.SystemStopped;
import io.onedev.server.event.system.SystemStopping;
import io.onedev.server.exception.ServerNotReadyException;
import io.onedev.server.jetty.JettyManager;
import io.onedev.server.jetty.JettyService;
import io.onedev.server.model.support.administration.SystemSetting;
import io.onedev.server.persistence.IdManager;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.IdService;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.persistence.annotation.Sessional;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.taskschedule.TaskScheduler;
@ -69,11 +69,11 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
private static final Logger logger = LoggerFactory.getLogger(OneDev.class);
private final Provider<JettyManager> jettyLauncherProvider;
private final Provider<JettyService> jettyLauncherProvider;
private final SessionManager sessionManager;
private final SessionService sessionService;
private final DataManager dataManager;
private final DataService dataService;
private final Provider<ServerConfig> serverConfigProvider;
@ -83,13 +83,13 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
private final ExecutorService executorService;
private final ClusterManager clusterManager;
private final ClusterService clusterService;
private final SettingManager settingManager;
private final SettingService settingService;
private final IdManager idManager;
private final IdService idService;
private final SessionFactoryManager sessionFactoryManager;
private final SessionFactoryService sessionFactoryService;
private final Date bootDate = new Date();
@ -101,23 +101,23 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
// Some are injected via provider as instantiation might encounter problem during upgrade
@Inject
public OneDev(Provider<JettyManager> jettyLauncherProvider, TaskScheduler taskScheduler,
SessionManager sessionManager, Provider<ServerConfig> serverConfigProvider,
DataManager dataManager, ExecutorService executorService,
ListenerRegistry listenerRegistry, ClusterManager clusterManager,
IdManager idManager, SessionFactoryManager sessionFactoryManager,
SettingManager settingManager) {
public OneDev(Provider<JettyService> jettyLauncherProvider, TaskScheduler taskScheduler,
SessionService sessionService, Provider<ServerConfig> serverConfigProvider,
DataService dataService, ExecutorService executorService,
ListenerRegistry listenerRegistry, ClusterService clusterService,
IdService idService, SessionFactoryService sessionFactoryService,
SettingService settingService) {
this.jettyLauncherProvider = jettyLauncherProvider;
this.taskScheduler = taskScheduler;
this.sessionManager = sessionManager;
this.dataManager = dataManager;
this.sessionService = sessionService;
this.dataService = dataService;
this.serverConfigProvider = serverConfigProvider;
this.executorService = executorService;
this.listenerRegistry = listenerRegistry;
this.clusterManager = clusterManager;
this.idManager = idManager;
this.sessionFactoryManager = sessionFactoryManager;
this.settingManager = settingManager;
this.clusterService = clusterService;
this.idService = idService;
this.sessionFactoryService = sessionFactoryService;
this.settingService = settingService;
try {
wrapperManagerClass = Class.forName("org.tanukisoftware.wrapper.WrapperManager");
@ -145,16 +145,16 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
System.setProperty("hsqldb.reconfig_logging", "false");
System.setProperty("hsqldb.method_class_names", "java.lang.Math");
clusterManager.start();
sessionFactoryManager.start();
clusterService.start();
sessionFactoryService.start();
var databasePopulated = clusterManager.getHazelcastInstance().getCPSubsystem().getAtomicLong("databasePopulated");
var databasePopulated = clusterService.getHazelcastInstance().getCPSubsystem().getAtomicLong("databasePopulated");
// Do not use database lock as schema update will commit transaction immediately
// in MySQL
clusterManager.initWithLead(databasePopulated, () -> {
try (var conn = dataManager.openConnection()) {
clusterService.initWithLead(databasePopulated, () -> {
try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> {
dataManager.populateDatabase(conn);
dataService.populateDatabase(conn);
return null;
});
} catch (SQLException e) {
@ -163,9 +163,9 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
return 1L;
});
idManager.init();
idService.init();
sessionManager.run(() -> listenerRegistry.post(new SystemStarting()));
sessionService.run(() -> listenerRegistry.post(new SystemStarting()));
jettyLauncherProvider.get().start();
var manualConfigs = checkData();
@ -175,16 +175,16 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
else
logger.warn("Please set up the server at " + guessServerUrl());
initStage = new InitStage("Server Setup", manualConfigs);
var localServer = clusterManager.getLocalServerAddress();
var localServer = clusterService.getLocalServerAddress();
while (true) {
if (maintenanceFile.exists()) {
logger.info("Maintenance requested, trying to stop all servers...");
clusterManager.submitToAllServers(() -> {
if (!localServer.equals(clusterManager.getLocalServerAddress()))
clusterService.submitToAllServers(() -> {
if (!localServer.equals(clusterService.getLocalServerAddress()))
restart();
return null;
});
while (thread != null && clusterManager.getServerAddresses().size() != 1) {
while (thread != null && clusterService.getServerAddresses().size() != 1) {
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {
@ -211,16 +211,16 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
}
}
var leadServer = clusterManager.getLeaderServerAddress();
if (!leadServer.equals(clusterManager.getLocalServerAddress())) {
var leadServer = clusterService.getLeaderServerAddress();
if (!leadServer.equals(clusterService.getLocalServerAddress())) {
logger.info("Syncing assets...");
Client client = ClientBuilder.newClient();
try {
String fromServerUrl = clusterManager.getServerUrl(leadServer);
String fromServerUrl = clusterService.getServerUrl(leadServer);
WebTarget target = client.target(fromServerUrl).path("/~api/cluster/assets");
Invocation.Builder builder = target.request();
builder.header(AUTHORIZATION,
BEARER + " " + clusterManager.getCredential());
BEARER + " " + clusterService.getCredential());
try (Response response = builder.get()) {
checkStatus(response);
@ -248,30 +248,30 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
SecurityUtils.bindAsSystem();
initStage = null;
listenerRegistry.post(new SystemStarted());
clusterManager.postStart();
clusterService.postStart();
thread.start();
SystemSetting systemSetting = settingManager.getSystemSetting();
SystemSetting systemSetting = settingService.getSystemSetting();
logger.info("Server is ready at " + systemSetting.getServerUrl() + ".");
}
@Override
public void preStop() {
thread = null;
clusterManager.preStop();
clusterService.preStop();
SecurityUtils.bindAsSystem();
try {
sessionManager.run(() -> listenerRegistry.post(new SystemStopping()));
sessionService.run(() -> listenerRegistry.post(new SystemStopping()));
} catch (ServerNotReadyException ignore) {
}
}
private List<ManualConfig> checkData() {
HazelcastInstance hazelcastInstance = clusterManager.getHazelcastInstance();
HazelcastInstance hazelcastInstance = clusterService.getHazelcastInstance();
var lock = hazelcastInstance.getCPSubsystem().getLock("checkData");
lock.lock();
try {
return dataManager.checkData();
return dataService.checkData();
} finally {
lock.unlock();
}
@ -285,10 +285,10 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
taskScheduler.stop();
jettyLauncherProvider.get().stop();
sessionManager.run(() -> listenerRegistry.post(new SystemStopped()));
sessionService.run(() -> listenerRegistry.post(new SystemStopped()));
sessionFactoryManager.stop();
clusterManager.stop();
sessionFactoryService.stop();
clusterService.stop();
executorService.shutdown();
} catch (ServerNotReadyException ignore) {
}
@ -423,17 +423,17 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
@Override
public void run() {
var localServer = clusterManager.getLocalServerAddress();
var localServer = clusterService.getLocalServerAddress();
var maintenanceFile = getMaintenanceFile(Bootstrap.installDir);
while (thread != null) {
if (maintenanceFile.exists()) {
logger.info("Maintenance requested, trying to stop all servers...");
clusterManager.submitToAllServers(() -> {
if (!localServer.equals(clusterManager.getLocalServerAddress()))
clusterService.submitToAllServers(() -> {
if (!localServer.equals(clusterService.getLocalServerAddress()))
restart();
return null;
});
while (thread != null && clusterManager.getServerAddresses().size() != 1) {
while (thread != null && clusterService.getServerAddresses().size() != 1) {
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {

View File

@ -1,13 +1,16 @@
package io.onedev.server;
import io.onedev.server.annotation.NoDBAccess;
import java.io.File;
public interface StorageManager {
public interface StorageService {
File initLfsDir(Long projectId);
File initArtifactsDir(Long projectId, Long buildNumber);
@NoDBAccess
File initPacksDir(Long projectId);
}

View File

@ -1,11 +1,13 @@
package io.onedev.server;
import io.onedev.server.annotation.NoDBAccess;
import org.apache.wicket.Component;
import javax.annotation.Nullable;
public interface SubscriptionManager {
public interface SubscriptionService {
@NoDBAccess
boolean isSubscriptionActive();
@Nullable

View File

@ -8,7 +8,7 @@ import java.util.concurrent.ExecutorService;
import io.onedev.agent.*;
import io.onedev.commons.utils.ExceptionUtils;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.AgentManager;
import io.onedev.server.service.AgentService;
import org.apache.commons.lang3.SerializationUtils;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
@ -24,9 +24,9 @@ import io.onedev.commons.utils.StringUtils;
import io.onedev.commons.utils.TaskLogger;
import io.onedev.server.exception.ServerNotReadyException;
import io.onedev.server.job.JobContext;
import io.onedev.server.job.JobManager;
import io.onedev.server.job.JobService;
import io.onedev.server.job.ResourceAllocator;
import io.onedev.server.job.log.LogManager;
import io.onedev.server.job.log.LogService;
import io.onedev.server.terminal.AgentShell;
@WebSocket
@ -42,7 +42,7 @@ public class ServerSocket {
public void onClose(int statusCode, String reason) {
try {
if (agentId != null)
getAgentManager().agentDisconnected(agentId);
getAgentService().agentDisconnected(agentId);
StringBuilder builder = new StringBuilder("Websocket closed (");
if (session != null && session.getRemoteAddress() != null)
@ -69,15 +69,15 @@ public class ServerSocket {
}
}
private AgentManager getAgentManager() {
return OneDev.getInstance(AgentManager.class);
private AgentService getAgentService() {
return OneDev.getInstance(AgentService.class);
}
@OnWebSocketConnect
public void onConnect(Session session) {
this.session = session;
try {
new Message(MessageTypes.UPDATE, getAgentManager().getAgentVersion()).sendBy(session);
new Message(MessageTypes.UPDATE, getAgentService().getAgentVersion()).sendBy(session);
} catch (Exception e) {
logger.error("Error sending websocket message", e);
try {
@ -98,7 +98,7 @@ public class ServerSocket {
// be assigned via Administrator
AgentData data = SerializationUtils.deserialize(message.getData());
try {
agentId = getAgentManager().agentConnected(data, session);
agentId = getAgentService().agentConnected(data, session);
} catch (Exception e) {
var explicitException = ExceptionUtils.find(e, ExplicitException.class);
if (explicitException != null) {
@ -132,7 +132,7 @@ public class ServerSocket {
if (sessionId.length() == 0)
sessionId = null;
String logMessage = StringUtils.substringAfter(remaining, ":");
TaskLogger logger = OneDev.getInstance(LogManager.class).getJobLogger(jobToken);
TaskLogger logger = OneDev.getInstance(LogService.class).getJobLogger(jobToken);
if (logger != null)
logger.log(logMessage, sessionId);
} catch (Exception e) {
@ -143,15 +143,15 @@ public class ServerSocket {
String dataString = new String(messageData, StandardCharsets.UTF_8);
String jobToken = StringUtils.substringBefore(dataString, ":");
String jobWorkspace = StringUtils.substringAfter(dataString, ":");
JobContext jobContext = getJobManager().getJobContext(jobToken, false);
JobContext jobContext = getJobService().getJobContext(jobToken, false);
if (jobContext != null)
getJobManager().reportJobWorkspace(jobContext, jobWorkspace);
getJobService().reportJobWorkspace(jobContext, jobWorkspace);
break;
case SHELL_OUTPUT:
dataString = new String(messageData, StandardCharsets.UTF_8);
String sessionId = StringUtils.substringBefore(dataString, ":");
String output = StringUtils.substringAfter(dataString, ":");
AgentShell shell = (AgentShell) getJobManager().getShell(sessionId);
AgentShell shell = (AgentShell) getJobService().getShell(sessionId);
if (shell != null)
shell.getTerminal().sendOutput(output);
break;
@ -159,13 +159,13 @@ public class ServerSocket {
dataString = new String(messageData, StandardCharsets.UTF_8);
sessionId = StringUtils.substringBefore(dataString, ":");
String error = StringUtils.substringAfter(dataString, ":");
shell = (AgentShell) getJobManager().getShell(sessionId);
shell = (AgentShell) getJobService().getShell(sessionId);
if (shell != null)
shell.getTerminal().sendError(error);
break;
case SHELL_CLOSED:
sessionId = new String(messageData, StandardCharsets.UTF_8);
shell = (AgentShell) getJobManager().getShell(sessionId);
shell = (AgentShell) getJobService().getShell(sessionId);
if (shell != null)
shell.getTerminal().close();
break;
@ -180,8 +180,8 @@ public class ServerSocket {
}
}
private JobManager getJobManager() {
return OneDev.getInstance(JobManager.class);
private JobService getJobService() {
return OneDev.getInstance(JobService.class);
}
private Serializable service(Serializable request) {

View File

@ -3,7 +3,7 @@ package io.onedev.server.agent;
import io.onedev.agent.Agent;
import io.onedev.server.OneDev;
import io.onedev.server.exception.ServerNotReadyException;
import io.onedev.server.entitymanager.AgentTokenManager;
import io.onedev.server.service.AgentTokenService;
import io.onedev.server.security.SecurityUtils;
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
@ -22,11 +22,11 @@ public class ServerSocketServlet extends WebSocketServlet {
private static final long serialVersionUID = 1L;
private final AgentTokenManager tokenManager;
private final AgentTokenService tokenService;
@Inject
public ServerSocketServlet(AgentTokenManager tokenManager) {
this.tokenManager = tokenManager;
public ServerSocketServlet(AgentTokenService tokenService) {
this.tokenService = tokenService;
}
@Override
@ -43,7 +43,7 @@ public class ServerSocketServlet extends WebSocketServlet {
if (!OneDev.getInstance().isReady())
throw new ServerNotReadyException();
String tokenValue = SecurityUtils.getBearerToken(request);
if (tokenValue != null && tokenManager.find(tokenValue) != null)
if (tokenValue != null && tokenService.find(tokenValue) != null)
super.service(request, response);
else
response.sendError(SC_FORBIDDEN, "A valid agent token is expected");

View File

@ -0,0 +1,4 @@
package io.onedev.server.annotation;
public @interface NoDBAccess {
}

View File

@ -6,7 +6,7 @@ import java.util.List;
import io.onedev.server.util.artifact.FileInfo;
public interface AttachmentManager {
public interface AttachmentService {
File getAttachmentGroupDir(Long projectId, String attachmentGroup);

View File

@ -45,12 +45,12 @@ import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.StringUtils;
import io.onedev.commons.utils.TarUtils;
import io.onedev.k8shelper.KubernetesHelper;
import io.onedev.server.cluster.ClusterManager;
import io.onedev.server.cluster.ClusterService;
import io.onedev.server.cluster.ClusterRunnable;
import io.onedev.server.cluster.ClusterTask;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.service.IssueService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.SettingService;
import io.onedev.server.event.Listen;
import io.onedev.server.event.entity.EntityRemoved;
import io.onedev.server.event.project.build.BuildSubmitted;
@ -74,7 +74,7 @@ import io.onedev.server.event.system.SystemStopping;
import io.onedev.server.model.Issue;
import io.onedev.server.model.support.issue.changedata.IssueDescriptionChangeData;
import io.onedev.server.model.support.pullrequest.changedata.PullRequestDescriptionChangeData;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.TransactionService;
import io.onedev.server.persistence.annotation.Sessional;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.Dao;
@ -82,14 +82,14 @@ import io.onedev.server.taskschedule.SchedulableTask;
import io.onedev.server.taskschedule.TaskScheduler;
import io.onedev.server.util.IOUtils;
import io.onedev.server.util.artifact.FileInfo;
import io.onedev.server.util.concurrent.BatchWorkManager;
import io.onedev.server.util.concurrent.BatchWorkExecutionService;
import io.onedev.server.util.concurrent.BatchWorker;
import io.onedev.server.util.concurrent.Prioritized;
@Singleton
public class DefaultAttachmentManager implements AttachmentManager, SchedulableTask, Serializable {
public class DefaultAttachmentService implements AttachmentService, SchedulableTask, Serializable {
private static final Logger logger = LoggerFactory.getLogger(DefaultAttachmentManager.class);
private static final Logger logger = LoggerFactory.getLogger(DefaultAttachmentService.class);
private static final long TEMP_PRESERVE_PERIOD = 24*3600*1000L;
@ -98,47 +98,40 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
private static final String PERMANENT = "permanent";
private static final String TEMP = "temp";
private final Dao dao;
private final TransactionManager transactionManager;
private final TaskScheduler taskScheduler;
private final ProjectManager projectManager;
private final ClusterManager clusterManager;
private final SettingManager settingManager;
private final IssueManager issueManager;
private final BatchWorkManager batchWorkManager;
@Inject
private Dao dao;
@Inject
private TransactionService transactionService;
@Inject
private TaskScheduler taskScheduler;
@Inject
private ProjectService projectService;
@Inject
private ClusterService clusterService;
@Inject
private SettingService settingService;
@Inject
private IssueService issueService;
@Inject
private BatchWorkExecutionService batchWorkExecutionService;
private String taskId;
@Inject
public DefaultAttachmentManager(Dao dao, TransactionManager transactionManager,
TaskScheduler taskScheduler, SettingManager settingManager,
ProjectManager projectManager, ClusterManager clusterManager,
IssueManager issueManager, BatchWorkManager batchWorkManager) {
this.dao = dao;
this.transactionManager = transactionManager;
this.taskScheduler = taskScheduler;
this.settingManager = settingManager;
this.projectManager = projectManager;
this.clusterManager = clusterManager;
this.issueManager = issueManager;
this.batchWorkManager = batchWorkManager;
}
public Object writeReplace() throws ObjectStreamException {
return new ManagedSerializedForm(AttachmentManager.class);
return new ManagedSerializedForm(AttachmentService.class);
}
@Override
public File getAttachmentGroupDir(Long projectId, String attachmentGroup) {
File baseDir = projectManager.getAttachmentDir(projectId);
File baseDir = projectService.getAttachmentDir(projectId);
File groupDir = getPermanentAttachmentGroupDir(baseDir, attachmentGroup);
if (groupDir.exists())
return groupDir;
@ -151,11 +144,11 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
public void on(IssuesMoved event) {
Long sourceProjectId = event.getSourceProject().getId();
Long targetProjectId = event.getProject().getId();
File targetBaseDir = projectManager.getAttachmentDir(targetProjectId);
File targetBaseDir = projectService.getAttachmentDir(targetProjectId);
String sourceActiveServer = projectManager.getActiveServer(sourceProjectId, true);
if (sourceActiveServer.equals(clusterManager.getLocalServerAddress())) {
File sourceBaseDir = projectManager.getAttachmentDir(sourceProjectId);
String sourceActiveServer = projectService.getActiveServer(sourceProjectId, true);
if (sourceActiveServer.equals(clusterService.getLocalServerAddress())) {
File sourceBaseDir = projectService.getAttachmentDir(sourceProjectId);
for (Long issueId: event.getIssueIds()) {
Issue issue = dao.load(Issue.class, issueId);
String attachmentGroup = issue.getAttachmentGroup();
@ -184,8 +177,8 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
} finally {
FileUtils.deleteDir(tempGroupDir);
}
projectManager.directoryModified(targetProjectId, sourceGroupDir.getParentFile());
projectManager.directoryModified(targetProjectId, targetGroupDir.getParentFile());
projectService.directoryModified(targetProjectId, sourceGroupDir.getParentFile());
projectService.directoryModified(targetProjectId, targetGroupDir.getParentFile());
}
} else {
Collection<String> attachmentGroups = new HashSet<>();
@ -211,22 +204,22 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
} finally {
FileUtils.deleteDir(tempGroupDir);
}
projectManager.directoryModified(targetProjectId, targetGroupDir.getParentFile());
projectService.directoryModified(targetProjectId, targetGroupDir.getParentFile());
}
projectManager.runOnActiveServer(sourceProjectId, new ClusterTask<Void>() {
projectService.runOnActiveServer(sourceProjectId, new ClusterTask<Void>() {
private static final long serialVersionUID = 1L;
@Override
public Void call() {
File sourceBaseDir = projectManager.getAttachmentDir(sourceProjectId);
File sourceBaseDir = projectService.getAttachmentDir(sourceProjectId);
for (var attachmentGroup: attachmentGroups) {
var sourceGroupDir = getPermanentAttachmentGroupDir(sourceBaseDir, attachmentGroup);
write(getAttachmentLockName(sourceProjectId, attachmentGroup), () -> {
FileUtils.deleteDir(sourceGroupDir);
return null;
});
projectManager.directoryModified(sourceProjectId, sourceGroupDir.getParentFile());
projectService.directoryModified(sourceProjectId, sourceGroupDir.getParentFile());
}
return null;
}
@ -241,11 +234,11 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
Long sourceProjectId = event.getSourceProject().getId();
Long targetProjectId = event.getProject().getId();
File targetBaseDir = projectManager.getAttachmentDir(targetProjectId);
File targetBaseDir = projectService.getAttachmentDir(targetProjectId);
String sourceActiveServer = projectManager.getActiveServer(sourceProjectId, true);
if (sourceActiveServer.equals(clusterManager.getLocalServerAddress())) {
File sourceBaseDir = projectManager.getAttachmentDir(sourceProjectId);
String sourceActiveServer = projectService.getActiveServer(sourceProjectId, true);
if (sourceActiveServer.equals(clusterService.getLocalServerAddress())) {
File sourceBaseDir = projectService.getAttachmentDir(sourceProjectId);
for (var entry: event.getIssueIdMapping().entrySet()) {
Issue sourceIssue = dao.load(Issue.class, entry.getKey());
Issue targetIssue = dao.load(Issue.class, entry.getValue());
@ -273,7 +266,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
} finally {
FileUtils.deleteDir(tempGroupDir);
}
projectManager.directoryModified(targetProjectId, targetGroupDir.getParentFile());
projectService.directoryModified(targetProjectId, targetGroupDir.getParentFile());
}
} else {
for (var entry: event.getIssueIdMapping().entrySet()) {
@ -296,7 +289,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
} finally {
FileUtils.deleteDir(tempGroupDir);
}
projectManager.directoryModified(targetProjectId, targetGroupDir.getParentFile());
projectService.directoryModified(targetProjectId, targetGroupDir.getParentFile());
}
}
@ -306,13 +299,13 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
Long sourceProjectId, String sourceAttachmentGroup) {
Client client = ClientBuilder.newClient();
try {
String fromServerUrl = clusterManager.getServerUrl(sourceActiveServer);
String fromServerUrl = clusterService.getServerUrl(sourceActiveServer);
WebTarget target = client.target(fromServerUrl).path("/~api/cluster/attachments")
.queryParam("projectId", sourceProjectId)
.queryParam("attachmentGroup", sourceAttachmentGroup);
Invocation.Builder builder = target.request();
builder.header(AUTHORIZATION,
BEARER + " " + clusterManager.getCredential());
BEARER + " " + clusterService.getCredential());
try (Response response = builder.get()) {
KubernetesHelper.checkStatus(response);
@ -333,7 +326,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
}
private void permanentizeAttachmentGroup(Long projectId, String attachmentGroup) {
var baseAttachmentDir = projectManager.getAttachmentDir(projectId);
var baseAttachmentDir = projectService.getAttachmentDir(projectId);
write(getAttachmentLockName(projectId, attachmentGroup), () -> {
File permanentStorage = getPermanentAttachmentGroupDir(baseAttachmentDir, attachmentGroup);
if (!permanentStorage.exists()) {
@ -347,7 +340,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
} else {
FileUtils.createDir(permanentStorage);
}
projectManager.directoryModified(projectId, permanentStorage);
projectService.directoryModified(projectId, permanentStorage);
}
return null;
});
@ -366,13 +359,13 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
@Override
public void execute() {
batchWorkManager.submit(new BatchWorker("attachment-manager-house-keeping") {
batchWorkExecutionService.submit(new BatchWorker("attachment-manager-house-keeping") {
@Override
public void doWorks(List<Prioritized> works) {
for (var projectId: projectManager.getActiveIds()) {
for (var projectId: projectService.getActiveIds()) {
try {
File tempAttachmentBase = new File(projectManager.getAttachmentDir(projectId), TEMP);
File tempAttachmentBase = new File(projectService.getAttachmentDir(projectId), TEMP);
if (tempAttachmentBase.exists()) {
for (File attachmentGroupDir: tempAttachmentBase.listFiles()) {
if (System.currentTimeMillis() - attachmentGroupDir.lastModified() > TEMP_PRESERVE_PERIOD) {
@ -398,7 +391,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
@Sessional
public void on(IssuesImported event) {
for (var issueId: event.getIssueIds()) {
var issue = issueManager.load(issueId);
var issue = issueService.load(issueId);
var attachmentGroup = issue.getAttachmentGroup();
permanentizeAttachmentGroup(issue.getProject().getId(), attachmentGroup);
}
@ -505,15 +498,15 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
if (event.getEntity() instanceof AttachmentStorageSupport) {
AttachmentStorageSupport storageSupport = (AttachmentStorageSupport) event.getEntity();
Long projectId = storageSupport.getAttachmentProject().getId();
String activeServer = projectManager.getActiveServer(projectId, false);
String activeServer = projectService.getActiveServer(projectId, false);
if (activeServer != null) {
transactionManager.runAfterCommit(new ClusterRunnable() {
transactionService.runAfterCommit(new ClusterRunnable() {
private static final long serialVersionUID = 1L;
@Override
public void run() {
clusterManager.runOnServer(activeServer, new ClusterTask<Void>() {
clusterService.runOnServer(activeServer, new ClusterTask<Void>() {
private static final long serialVersionUID = 1L;
@ -522,10 +515,10 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
var attachmentGroup = storageSupport.getAttachmentGroup();
return write(getAttachmentLockName(projectId, attachmentGroup), () -> {
File attachmentDir = getPermanentAttachmentGroupDir(
projectManager.getAttachmentDir(storageSupport.getAttachmentProject().getId()),
projectService.getAttachmentDir(storageSupport.getAttachmentProject().getId()),
attachmentGroup);
FileUtils.deleteDir(attachmentDir);
projectManager.directoryModified(projectId, attachmentDir.getParentFile());
projectService.directoryModified(projectId, attachmentDir.getParentFile());
return null;
});
}
@ -541,21 +534,21 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
@Override
public String saveAttachment(Long projectId, String attachmentGroup, String preferredAttachmentName,
InputStream attachmentStream) {
String activeServer = projectManager.getActiveServer(projectId, true);
if (activeServer.equals(clusterManager.getLocalServerAddress())) {
String activeServer = projectService.getActiveServer(projectId, true);
if (activeServer.equals(clusterService.getLocalServerAddress())) {
return saveAttachmentLocal(projectId, attachmentGroup, preferredAttachmentName, attachmentStream);
} else {
Client client = ClientBuilder.newClient();
client.property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED");
try {
String serverUrl = clusterManager.getServerUrl(activeServer);
String serverUrl = clusterService.getServerUrl(activeServer);
WebTarget target = client.target(serverUrl)
.path("~api/cluster/attachment")
.queryParam("projectId", projectId)
.queryParam("attachmentGroup", attachmentGroup)
.queryParam("suggestedAttachmentName", preferredAttachmentName);
var builder = target.request();
builder.header(AUTHORIZATION, BEARER + " " + clusterManager.getCredential());
builder.header(AUTHORIZATION, BEARER + " " + clusterService.getCredential());
StreamingOutput os = output -> {
try {
@ -598,7 +591,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
index++;
}
long maxUploadFileSize = settingManager.getPerformanceSetting().getMaxUploadFileSize() * 1024L * 1024L;
long maxUploadFileSize = settingService.getPerformanceSetting().getMaxUploadFileSize() * 1024L * 1024L;
Exception ex = null;
File file = new File(attachmentDir, attachmentName);
@ -623,7 +616,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
throw ExceptionUtils.unchecked(ex);
} else {
if (!attachmentDir.getParentFile().getName().equals(TEMP))
projectManager.directoryModified(projectId, attachmentDir);
projectService.directoryModified(projectId, attachmentDir);
return file.getName();
}
});
@ -636,7 +629,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
@Override
public FileInfo getAttachmentInfo(Long projectId, String attachmentGroup, String attachment) {
return projectManager.runOnActiveServer(projectId, () -> read(getAttachmentLockName(projectId, attachmentGroup), () -> {
return projectService.runOnActiveServer(projectId, () -> read(getAttachmentLockName(projectId, attachmentGroup), () -> {
File attachmentFile = new File(getAttachmentGroupDir(projectId, attachmentGroup), attachment);
if (!attachmentFile.exists())
throw new FileNotFoundException("Attachment not found: " + attachment);
@ -647,12 +640,12 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
@Override
public void deleteAttachment(Long projectId, String attachmentGroup, String attachment) {
projectManager.runOnActiveServer(projectId, () -> write(getAttachmentLockName(projectId, attachmentGroup), () -> {
projectService.runOnActiveServer(projectId, () -> write(getAttachmentLockName(projectId, attachmentGroup), () -> {
var attachmentGroupDir = getAttachmentGroupDir(projectId, attachmentGroup);
File attachmentFile = new File(attachmentGroupDir, attachment);
if (attachmentFile.exists()) {
FileUtils.deleteFile(attachmentFile);
projectManager.directoryModified(projectId, attachmentGroupDir);
projectService.directoryModified(projectId, attachmentGroupDir);
}
return null;
}));
@ -660,7 +653,7 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
@Override
public List<FileInfo> listAttachments(Long projectId, String attachmentGroup) {
return projectManager.runOnActiveServer(projectId, () -> read(getAttachmentLockName(projectId, attachmentGroup), () -> {
return projectService.runOnActiveServer(projectId, () -> read(getAttachmentLockName(projectId, attachmentGroup), () -> {
List<FileInfo> attachments = new ArrayList<>();
File attachmentGroupDir = getAttachmentGroupDir(projectId, attachmentGroup);
if (attachmentGroupDir.exists()) {
@ -676,12 +669,12 @@ public class DefaultAttachmentManager implements AttachmentManager, SchedulableT
@Override
public void syncAttachments(Long projectId, String activeServer) {
var permanent = ATTACHMENT_DIR + "/" + PERMANENT;
projectManager.syncDirectory(projectId, permanent, prefix -> {
projectService.syncDirectory(projectId, permanent, prefix -> {
var prefixPath = permanent + "/" + prefix;
projectManager.syncDirectory(projectId, prefixPath, attachmentGroup -> {
projectService.syncDirectory(projectId, prefixPath, attachmentGroup -> {
var attachmentGroupPath = permanent + "/" + prefix + "/" + attachmentGroup;
var lockName = getAttachmentLockName(projectId, attachmentGroup);
projectManager.syncDirectory(projectId, attachmentGroupPath, lockName, activeServer);
projectService.syncDirectory(projectId, attachmentGroupPath, lockName, activeServer);
}, activeServer);
}, activeServer);
}

View File

@ -11,9 +11,9 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.model.Project;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.web.resource.AttachmentResource;
import io.onedev.server.web.resource.AttachmentResourceReference;
@ -44,21 +44,21 @@ public class ProjectAttachmentSupport implements AttachmentSupport {
@Override
public List<String> getAttachments() {
return getAttachmentManager().listAttachments(projectId, attachmentGroup).stream()
return getAttachmentService().listAttachments(projectId, attachmentGroup).stream()
.map(it->it.getPath()).collect(Collectors.toList());
}
private ProjectManager getProjectManager() {
return OneDev.getInstance(ProjectManager.class);
private ProjectService getProjectService() {
return OneDev.getInstance(ProjectService.class);
}
private AttachmentManager getAttachmentManager() {
return OneDev.getInstance(AttachmentManager.class);
private AttachmentService getAttachmentService() {
return OneDev.getInstance(AttachmentService.class);
}
@Override
public void deleteAttachemnt(String attachment) {
getAttachmentManager().deleteAttachment(projectId, attachmentGroup, attachment);
getAttachmentService().deleteAttachment(projectId, attachmentGroup, attachment);
}
@Override
@ -67,18 +67,18 @@ public class ProjectAttachmentSupport implements AttachmentSupport {
}
protected Project getProject() {
SessionManager sessionManager = OneDev.getInstance(SessionManager.class);
sessionManager.openSession();
SessionService sessionService = OneDev.getInstance(SessionService.class);
sessionService.openSession();
try {
return getProjectManager().load(projectId);
return getProjectService().load(projectId);
} finally {
sessionManager.closeSession();
sessionService.closeSession();
}
}
@Override
public String saveAttachment(String suggestedAttachmentName, InputStream attachmentStream) {
return getAttachmentManager().saveAttachment(
return getAttachmentService().saveAttachment(
projectId, attachmentGroup, suggestedAttachmentName, attachmentStream);
}

View File

@ -59,7 +59,6 @@ import io.onedev.server.data.migration.XmlBuildSpecMigrator;
import io.onedev.server.job.JobAuthorizationContext;
import io.onedev.server.model.Project;
import io.onedev.server.model.support.build.JobProperty;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.validation.Validatable;
import io.onedev.server.web.page.project.blob.ProjectBlobPage;
@ -186,8 +185,7 @@ public class BuildSpec implements Serializable, Validatable {
Collection<String> newCommitChain = new HashSet<>(commitChain);
newCommitChain.add(importCommit.name());
BuildSpec importedBuildSpec = aImport.getBuildSpec();
JobAuthorizationContext.push(new JobAuthorizationContext(
aImport.getProject(), importCommit, SecurityUtils.getUser(), null));
JobAuthorizationContext.push(new JobAuthorizationContext(aImport.getProject(), importCommit, null));
try {
importedBuildSpecs.addAll(importedBuildSpec.getImportedBuildSpecs(newCommitChain));
} finally {

View File

@ -30,7 +30,7 @@ import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.ClassValidating;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.job.JobAuthorizationContext;
import io.onedev.server.model.Project;
import io.onedev.server.security.SecurityUtils;
@ -80,13 +80,13 @@ public class Import implements Serializable, Validatable {
@SuppressWarnings("unused")
private static List<String> getProjectChoices() {
ProjectManager projectManager = OneDev.getInstance(ProjectManager.class);
ProjectService projectService = OneDev.getInstance(ProjectService.class);
Project project = ((ProjectPage)WicketUtils.getPage()).getProject();
Collection<Project> projects = SecurityUtils.getAuthorizedProjects(new AccessProject());
projects.remove(project);
ProjectCache cache = projectManager.cloneCache();
ProjectCache cache = projectService.cloneCache();
List<String> choices = projects.stream().map(it->cache.get(it.getId()).getPath()).collect(Collectors.toList());
Collections.sort(choices);
@ -98,7 +98,7 @@ public class Import implements Serializable, Validatable {
private static Project getInputProject() {
String projectPath = (String) EditContext.get().getInputValue("projectPath");
if (projectPath != null) {
Project project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath);
Project project = OneDev.getInstance(ProjectService.class).findByPath(projectPath);
if (project != null && SecurityUtils.canReadCode(project))
return project;
}
@ -207,8 +207,7 @@ public class Import implements Serializable, Validatable {
try {
Validator validator = OneDev.getInstance(Validator.class);
BuildSpec buildSpec = getBuildSpec();
JobAuthorizationContext.push(new JobAuthorizationContext(
getProject(), getCommit(), SecurityUtils.getUser(), null));
JobAuthorizationContext.push(new JobAuthorizationContext(getProject(), getCommit(), null));
try {
for (int i = 0; i < buildSpec.getImports().size(); i++) {
Import aImport = buildSpec.getImports().get(i);
@ -243,7 +242,7 @@ public class Import implements Serializable, Validatable {
public Project getProject() {
if (project == null) {
project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath);
project = OneDev.getInstance(ProjectService.class).findByPath(projectPath);
if (project == null)
throw new ExplicitException(MessageFormat.format( _T("Unable to find project to import build spec: {0}"), projectPath));
}

View File

@ -46,14 +46,13 @@ import io.onedev.server.buildspec.job.trigger.JobTrigger;
import io.onedev.server.buildspec.param.ParamUtils;
import io.onedev.server.buildspec.param.spec.ParamSpec;
import io.onedev.server.buildspec.step.Step;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.git.GitUtils;
import io.onedev.server.job.match.JobMatch;
import io.onedev.server.job.match.JobMatchContext;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.support.administration.jobexecutor.JobExecutor;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.service.SettingService;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.EditContext;
import io.onedev.server.util.criteria.Criteria;
@ -151,7 +150,7 @@ public class Job implements NamedElement, Validatable {
@SuppressWarnings("unused")
private static String getJobExecutorPlaceholder() {
if (OneDev.getInstance(SettingManager.class).getJobExecutors().isEmpty())
if (OneDev.getInstance(SettingService.class).getJobExecutors().isEmpty())
return _T("Auto-discovered executor");
else
return _T("First applicable executor");
@ -159,7 +158,7 @@ public class Job implements NamedElement, Validatable {
@SuppressWarnings("unused")
private static String getJobExecutorDescription() {
if (OneDev.getInstance(SettingManager.class).getJobExecutors().isEmpty())
if (OneDev.getInstance(SettingService.class).getJobExecutors().isEmpty())
return _T("Optionally specify executor for this job. Leave empty to use auto-discover executor");
else
return _T("Optionally specify executor for this job. Leave empty to use first applicable executor");
@ -174,8 +173,8 @@ public class Job implements NamedElement, Validatable {
String branch = page.getBlobIdent().revision;
if (branch == null)
branch = "main";
JobMatchContext context = new JobMatchContext(page.getProject(), branch, null, SecurityUtils.getAuthUser(), jobName);
for (JobExecutor executor: OneDev.getInstance(SettingManager.class).getJobExecutors()) {
JobMatchContext context = new JobMatchContext(page.getProject(), branch, null, jobName);
for (JobExecutor executor: OneDev.getInstance(SettingService.class).getJobExecutors()) {
if (executor.isEnabled()) {
if (executor.getJobMatch() == null) {
applicableJobExecutors.add(executor.getName());
@ -352,7 +351,7 @@ public class Job implements NamedElement, Validatable {
public boolean isValid(ConstraintValidatorContext context) {
boolean isValid = true;
var jobExecutors = OneDev.getInstance(SettingManager.class).getJobExecutors();
var jobExecutors = OneDev.getInstance(SettingService.class).getJobExecutors();
if (jobExecutor != null && !jobExecutor.contains("@")
&& jobExecutors.stream().noneMatch(it->it.getName().equals(jobExecutor))) {
isValid = false;

View File

@ -2,7 +2,7 @@ package io.onedev.server.buildspec.job;
import io.onedev.k8shelper.KubernetesHelper;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.service.SettingService;
import io.onedev.server.model.Build;
import io.onedev.server.util.UrlUtils;
@ -118,14 +118,14 @@ public enum JobVariable {
SERVER {
@Override
public String getValue(Build build) {
var serverUrl = OneDev.getInstance(SettingManager.class).getSystemSetting().getServerUrl();
var serverUrl = OneDev.getInstance(SettingService.class).getSystemSetting().getServerUrl();
return UrlUtils.getServer(serverUrl);
}
},
SERVER_HOST {
@Override
public String getValue(Build build) {
var serverUrl = OneDev.getInstance(SettingManager.class).getSystemSetting().getServerUrl();
var serverUrl = OneDev.getInstance(SettingService.class).getSystemSetting().getServerUrl();
try {
return new URL(serverUrl).getHost();
} catch (MalformedURLException e) {
@ -136,7 +136,7 @@ public enum JobVariable {
SERVER_URL {
@Override
public String getValue(Build build) {
return OneDev.getInstance(SettingManager.class).getSystemSetting().getServerUrl();
return OneDev.getInstance(SettingService.class).getSystemSetting().getServerUrl();
}
};

View File

@ -3,8 +3,8 @@ package io.onedev.server.buildspec.job;
import io.onedev.server.OneDev;
import io.onedev.server.buildspec.param.instance.ParamInstances;
import io.onedev.server.buildspec.param.instance.ParamMap;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.entitymanager.PullRequestManager;
import io.onedev.server.service.IssueService;
import io.onedev.server.service.PullRequestService;
import io.onedev.server.model.Issue;
import io.onedev.server.model.PullRequest;
import org.apache.commons.lang3.builder.EqualsBuilder;
@ -48,7 +48,7 @@ public class TriggerMatch implements Serializable {
@Nullable
public PullRequest getRequest() {
if (requestId != null)
return OneDev.getInstance(PullRequestManager.class).load(requestId);
return OneDev.getInstance(PullRequestService.class).load(requestId);
else
return null;
}
@ -56,7 +56,7 @@ public class TriggerMatch implements Serializable {
@Nullable
public Issue getIssue() {
if (issueId != null)
return OneDev.getInstance(IssueManager.class).load(issueId);
return OneDev.getInstance(IssueService.class).load(issueId);
else
return null;
}

View File

@ -26,9 +26,9 @@ import io.onedev.server.annotation.Multiline;
import io.onedev.server.annotation.OmitName;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.service.IssueService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.SettingService;
import io.onedev.server.job.JobAuthorizationContext;
import io.onedev.server.model.Build;
import io.onedev.server.model.Issue;
@ -36,7 +36,7 @@ import io.onedev.server.model.Project;
import io.onedev.server.model.support.administration.GlobalIssueSetting;
import io.onedev.server.model.support.issue.field.FieldUtils;
import io.onedev.server.model.support.issue.field.instance.FieldInstance;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.TransactionService;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.security.permission.AccessProject;
import io.onedev.server.util.facade.ProjectCache;
@ -73,13 +73,13 @@ public class CreateIssueAction extends PostBuildAction {
@SuppressWarnings("unused")
private static List<String> getProjectChoices() {
ProjectManager projectManager = OneDev.getInstance(ProjectManager.class);
ProjectService projectService = OneDev.getInstance(ProjectService.class);
Project project = ((ProjectPage) WicketUtils.getPage()).getProject();
Collection<Project> projects = SecurityUtils.getAuthorizedProjects(new AccessProject());
projects.remove(project);
ProjectCache cache = projectManager.cloneCache();
ProjectCache cache = projectService.cloneCache();
List<String> choices = projects.stream().map(it->cache.get(it.getId()).getPath()).collect(Collectors.toList());
Collections.sort(choices);
@ -155,15 +155,15 @@ public class CreateIssueAction extends PostBuildAction {
}
private static Collection<String> getFieldNames() {
return OneDev.getInstance(SettingManager.class).getIssueSetting().getFieldNames();
return OneDev.getInstance(SettingService.class).getIssueSetting().getFieldNames();
}
@Override
public void execute(Build build) {
OneDev.getInstance(TransactionManager.class).run(() -> {
OneDev.getInstance(TransactionService.class).run(() -> {
Project project;
if (getProjectPath() != null) {
project = OneDev.getInstance(ProjectManager.class).findByPath(getProjectPath());
project = OneDev.getInstance(ProjectService.class).findByPath(getProjectPath());
if (project == null)
throw new ExplicitException("Unable to find project: " + projectPath);
Subject subject = JobAuthorizationContext.get().getSubject(getAccessTokenSecret());
@ -177,8 +177,8 @@ public class CreateIssueAction extends PostBuildAction {
issue.setTitle(getIssueTitle());
issue.setSubmitter(SecurityUtils.getUser());
issue.setSubmitDate(new Date());
SettingManager settingManager = OneDev.getInstance(SettingManager.class);
GlobalIssueSetting issueSetting = settingManager.getIssueSetting();
SettingService settingService = OneDev.getInstance(SettingService.class);
GlobalIssueSetting issueSetting = settingService.getIssueSetting();
issue.setState(issueSetting.getInitialStateSpec().getName());
issue.setDescription(getIssueDescription());
@ -188,7 +188,7 @@ public class CreateIssueAction extends PostBuildAction {
.convertToObject(instance.getValueProvider().getValue());
issue.setFieldValue(instance.getName(), fieldValue);
}
OneDev.getInstance(IssueManager.class).open(issue);
OneDev.getInstance(IssueService.class).open(issue);
});
}
@ -202,7 +202,7 @@ public class CreateIssueAction extends PostBuildAction {
public void validateWith(BuildSpec buildSpec, Job job) {
super.validateWith(buildSpec, job);
GlobalIssueSetting issueSetting = OneDev.getInstance(SettingManager.class).getIssueSetting();
GlobalIssueSetting issueSetting = OneDev.getInstance(SettingService.class).getIssueSetting();
try {
FieldUtils.validateFields(issueSetting.getFieldSpecMap(getFieldNames()), issueFields);
} catch (ValidationException e) {

View File

@ -1,7 +1,23 @@
package io.onedev.server.buildspec.job.action;
import static io.onedev.server.buildspec.param.ParamUtils.resolveParams;
import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;
import javax.validation.ValidationException;
import javax.validation.constraints.NotEmpty;
import org.apache.wicket.Component;
import io.onedev.server.OneDev;
import io.onedev.server.annotation.*;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.OmitName;
import io.onedev.server.annotation.ParamSpecProvider;
import io.onedev.server.annotation.ShowCondition;
import io.onedev.server.annotation.VariableOption;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.BuildSpecAware;
import io.onedev.server.buildspec.job.Job;
@ -9,21 +25,13 @@ import io.onedev.server.buildspec.param.ParamUtils;
import io.onedev.server.buildspec.param.instance.ParamInstances;
import io.onedev.server.buildspec.param.instance.ParamMap;
import io.onedev.server.buildspec.param.spec.ParamSpec;
import io.onedev.server.job.JobManager;
import io.onedev.server.job.JobService;
import io.onedev.server.model.Build;
import io.onedev.server.service.UserService;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.EditContext;
import io.onedev.server.web.editable.BeanEditor;
import io.onedev.server.web.util.WicketUtils;
import org.apache.wicket.Component;
import javax.validation.Valid;
import javax.validation.ValidationException;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.List;
import static io.onedev.server.buildspec.param.ParamUtils.resolveParams;
@Editable(name="Run job", order=100)
public class RunJobAction extends PostBuildAction {
@ -106,10 +114,10 @@ public class RunJobAction extends PostBuildAction {
@Override
public void execute(Build build) {
for (var paramMap: resolveParams(build, build.getParamCombination(), getParamMatrix(), getExcludeParamMaps())) {
JobManager jobManager = OneDev.getInstance(JobManager.class);
jobManager.submit(build.getProject(), build.getCommitId(),
getJobName(), paramMap, build.getRefName(),
build.getSubmitter(), build.getRequest(), build.getIssue(),
JobService jobService = OneDev.getInstance(JobService.class);
var userService = OneDev.getInstance(UserService.class);
jobService.submit(userService.getSystem(), build.getProject(), build.getCommitId(),
getJobName(), paramMap, build.getRefName(), build.getRequest(), build.getIssue(),
"Post build action of job '" + build.getJobName() + "'");
}
}

View File

@ -9,7 +9,7 @@ import javax.persistence.criteria.From;
import javax.persistence.criteria.Predicate;
import io.onedev.server.OneDev;
import io.onedev.server.job.log.LogManager;
import io.onedev.server.job.log.LogService;
import io.onedev.server.model.Build;
import io.onedev.server.util.ProjectScope;
import io.onedev.server.util.criteria.Criteria;
@ -32,7 +32,7 @@ public class LogCriteria extends Criteria<Build> {
@Override
public boolean matches(Build build) {
Pattern pattern = Pattern.compile(value);
return OneDev.getInstance(LogManager.class).matches(build, pattern);
return OneDev.getInstance(LogService.class).matches(build, pattern);
}
@Override

View File

@ -22,8 +22,8 @@ import io.onedev.commons.utils.ExplicitException;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.buildspec.job.action.notificationreceiver.NotificationReceiverParser.CriteriaContext;
import io.onedev.server.entitymanager.GroupManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.GroupService;
import io.onedev.server.service.UserService;
import io.onedev.server.model.Build;
import io.onedev.server.model.EmailAddress;
import io.onedev.server.model.Group;
@ -60,14 +60,14 @@ public class NotificationReceiver {
for (CriteriaContext criteria: parser.receiver().criteria()) {
if (criteria.userCriteria() != null) {
String userName = getValue(criteria.userCriteria().Value());
User user = OneDev.getInstance(UserManager.class).findByName(userName);
User user = OneDev.getInstance(UserService.class).findByName(userName);
if (user != null)
addEmailAddress(emailAddresses, user);
else
throw new ExplicitException("Unable to find user '" + userName + "'");
} else if (criteria.groupCriteria() != null) {
String groupName = getValue(criteria.groupCriteria().Value());
Group group = OneDev.getInstance(GroupManager.class).find(groupName);
Group group = OneDev.getInstance(GroupService.class).find(groupName);
if (group != null) {
emailAddresses.addAll(group.getMembers().stream()
.map(it->it.getPrimaryEmailAddress())

View File

@ -3,7 +3,7 @@ package io.onedev.server.buildspec.job.gitcredential;
import io.onedev.k8shelper.CloneInfo;
import io.onedev.k8shelper.DefaultCloneInfo;
import io.onedev.server.OneDev;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
import io.onedev.server.model.Build;
import io.onedev.server.annotation.Editable;
@ -14,7 +14,7 @@ public class DefaultCredential implements GitCredential {
@Override
public CloneInfo newCloneInfo(Build build, String jobToken) {
return new DefaultCloneInfo(OneDev.getInstance(UrlManager.class).cloneUrlFor(build.getProject(), false), jobToken);
return new DefaultCloneInfo(OneDev.getInstance(UrlService.class).cloneUrlFor(build.getProject(), false), jobToken);
}
}

View File

@ -10,7 +10,7 @@ import javax.validation.constraints.NotEmpty;
import io.onedev.k8shelper.CloneInfo;
import io.onedev.k8shelper.HttpCloneInfo;
import io.onedev.server.OneDev;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.validation.Validatable;
@ -45,7 +45,7 @@ public class HttpCredential implements GitCredential, Validatable {
@Override
public CloneInfo newCloneInfo(Build build, String jobToken) {
return new HttpCloneInfo(OneDev.getInstance(UrlManager.class).cloneUrlFor(build.getProject(), false),
return new HttpCloneInfo(OneDev.getInstance(UrlService.class).cloneUrlFor(build.getProject(), false),
build.getJobAuthorizationContext().getSecretValue(accessTokenSecret));
}

View File

@ -14,8 +14,8 @@ import javax.validation.constraints.NotEmpty;
import io.onedev.k8shelper.CloneInfo;
import io.onedev.k8shelper.SshCloneInfo;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.web.UrlManager;
import io.onedev.server.service.SettingService;
import io.onedev.server.web.UrlService;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.model.support.administration.SshSetting;
@ -52,10 +52,10 @@ public class SshCredential implements GitCredential, Validatable {
@Override
public CloneInfo newCloneInfo(Build build, String jobToken) {
String cloneUrl = OneDev.getInstance(UrlManager.class).cloneUrlFor(build.getProject(), true);
SettingManager settingManager = OneDev.getInstance(SettingManager.class);
SystemSetting systemSetting = settingManager.getSystemSetting();
SshSetting sshSetting = settingManager.getSshSetting();
String cloneUrl = OneDev.getInstance(UrlService.class).cloneUrlFor(build.getProject(), true);
SettingService settingService = OneDev.getInstance(SettingService.class);
SystemSetting systemSetting = settingService.getSystemSetting();
SshSetting sshSetting = settingService.getSshSetting();
StringBuilder knownHosts = new StringBuilder(systemSetting.getSshServerName()).append(" ");
try {
PublicKeyEntry.appendPublicKeyEntry(knownHosts,

View File

@ -7,13 +7,14 @@ import javax.validation.constraints.NotEmpty;
import edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.util.EditContext;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.OmitName;
import io.onedev.server.service.BuildService;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.EditContext;
@Editable(order=100, name="Last Finished of Specified Job")
public class LastFinishedBuild implements BuildProvider {
@ -51,7 +52,7 @@ public class LastFinishedBuild implements BuildProvider {
Project project = ProjectDependency.getInputProject(EditContext.get(1));
List<String> jobNames = new ArrayList<>();
if (project != null) {
jobNames.addAll(OneDev.getInstance(BuildManager.class).getAccessibleJobNames(project));
jobNames.addAll(OneDev.getInstance(BuildService.class).getAccessibleJobNames(SecurityUtils.getSubject(), project));
Collections.sort(jobNames);
}
return jobNames;
@ -59,7 +60,7 @@ public class LastFinishedBuild implements BuildProvider {
@Override
public Build getBuild(Project project) {
return OneDev.getInstance(BuildManager.class).findLastFinished(project, jobName, refName);
return OneDev.getInstance(BuildService.class).findLastFinished(project, jobName, refName);
}
@Override

View File

@ -8,7 +8,7 @@ import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.model.Project;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.security.permission.AccessProject;
@ -57,8 +57,8 @@ public class ProjectDependency implements Serializable {
List<String> choices = new ArrayList<>();
Project currentProject = ((ProjectPage)WicketUtils.getPage()).getProject();
ProjectManager projectManager = OneDev.getInstance(ProjectManager.class);
ProjectCache cache = projectManager.cloneCache();
ProjectService projectService = OneDev.getInstance(ProjectService.class);
ProjectCache cache = projectService.cloneCache();
for (Project project: SecurityUtils.getAuthorizedProjects(new AccessProject())) {
if (!project.equals(currentProject))
choices.add(cache.get(project.getId()).getPath());
@ -83,7 +83,7 @@ public class ProjectDependency implements Serializable {
static Project getInputProject(EditContext editContext) {
String projectPath = (String) editContext.getInputValue("projectPath");
if (projectPath != null) {
Project project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath);
Project project = OneDev.getInstance(ProjectService.class).findByPath(projectPath);
if (project != null && SecurityUtils.canReadCode(project))
return project;
}

View File

@ -8,7 +8,7 @@ import javax.validation.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.OneDev;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.util.EditContext;
@ -59,7 +59,7 @@ public class SpecifiedBuild implements BuildProvider {
else
buildNumber = Long.parseLong(this.buildNumber);
return OneDev.getInstance(BuildManager.class).find(project, buildNumber);
return OneDev.getInstance(BuildService.class).find(project, buildNumber);
}
@Override

View File

@ -9,7 +9,7 @@ import javax.persistence.criteria.From;
import javax.persistence.criteria.Predicate;
import io.onedev.server.OneDev;
import io.onedev.server.job.log.LogManager;
import io.onedev.server.job.log.LogService;
import io.onedev.server.model.Build;
import io.onedev.server.util.ProjectScope;
import io.onedev.server.util.criteria.Criteria;
@ -33,7 +33,7 @@ public class LogCriteria extends Criteria<RetryContext> {
public boolean matches(RetryContext context) {
Pattern pattern = Pattern.compile(value);
return context.getErrorMessage() != null && pattern.matcher(context.getErrorMessage()).find()
|| OneDev.getInstance(LogManager.class).matches(context.getBuild(), pattern);
|| OneDev.getInstance(LogService.class).matches(context.getBuild(), pattern);
}
@Override

View File

@ -17,7 +17,7 @@ import io.onedev.server.annotation.Patterns;
import io.onedev.server.annotation.UserMatch;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.buildspec.job.TriggerMatch;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.event.project.RefUpdated;
import io.onedev.server.git.GitUtils;
@ -93,7 +93,7 @@ public class BranchUpdateTrigger extends JobTrigger {
} else if (refUpdated.getNewCommitId().equals(ObjectId.zeroId())) {
return false;
} else {
Repository repository = OneDev.getInstance(ProjectManager.class)
Repository repository = OneDev.getInstance(ProjectService.class)
.getRepository(refUpdated.getProject().getId());
Collection<String> changedFiles = GitUtils.getChangedFiles(
repository,

View File

@ -5,7 +5,7 @@ import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.buildspec.job.TriggerMatch;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.service.SettingService;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.event.project.issue.IssueChanged;
import io.onedev.server.event.project.issue.IssueOpened;
@ -42,7 +42,7 @@ public class IssueInStateTrigger extends JobTrigger {
@SuppressWarnings("unused")
private static List<String> getStateChoices() {
return OneDev.getInstance(SettingManager.class).getIssueSetting()
return OneDev.getInstance(SettingService.class).getIssueSetting()
.getStateSpecs().stream().map(StateSpec::getName).collect(toList());
}

View File

@ -5,7 +5,7 @@ import io.onedev.server.OneDev;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.buildspec.job.TriggerMatch;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.git.GitUtils;
import io.onedev.server.model.Project;
import io.onedev.server.model.PullRequest;
@ -65,7 +65,7 @@ public abstract class PullRequestTrigger extends JobTrigger {
private boolean touchedFile(PullRequest request) {
if (getPaths() != null) {
Repository repository = OneDev.getInstance(ProjectManager.class)
Repository repository = OneDev.getInstance(ProjectService.class)
.getRepository(request.getTargetProject().getId());
Collection<String> changedFiles = GitUtils.getChangedFiles(repository,
request.getBaseCommit(), request.getLatestUpdate().getHeadCommit());

View File

@ -8,11 +8,11 @@ import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.IterationManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.IterationService;
import io.onedev.server.model.Iteration;
import io.onedev.server.model.Project;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.TransactionService;
import javax.validation.constraints.NotEmpty;
import java.io.File;
@ -63,16 +63,16 @@ public class CloseIterationStep extends ServerSideStep {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(TransactionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(TransactionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
Project project = build.getProject();
String iterationName = getIterationName();
IterationManager iterationManager = OneDev.getInstance(IterationManager.class);
Iteration iteration = iterationManager.findInHierarchy(project, iterationName);
IterationService iterationService = OneDev.getInstance(IterationService.class);
Iteration iteration = iterationService.findInHierarchy(project, iterationName);
if (iteration != null) {
if (build.canCloseIteration(getAccessTokenSecret())) {
iteration.setClosed(true);
iterationManager.createOrUpdate(iteration);
iterationService.createOrUpdate(iteration);
} else {
logger.error("This build is not authorized to close iteration '" + iterationName + "'");
return new ServerStepResult(false);

View File

@ -10,12 +10,12 @@ import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.git.GitUtils;
import io.onedev.server.git.service.GitService;
import io.onedev.server.git.service.RefFacade;
import io.onedev.server.model.Project;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.web.util.SuggestionUtils;
import org.eclipse.jgit.lib.Repository;
@ -93,8 +93,8 @@ public class CreateBranchStep extends ServerSideStep {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
Project project = build.getProject();
String branchName = getBranchName();

View File

@ -7,14 +7,14 @@ import io.onedev.k8shelper.ServerStepResult;
import io.onedev.server.OneDev;
import io.onedev.server.annotation.*;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.UserService;
import io.onedev.server.git.GitUtils;
import io.onedev.server.git.service.GitService;
import io.onedev.server.git.service.RefFacade;
import io.onedev.server.model.Project;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.SessionService;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Repository;
@ -81,9 +81,9 @@ public class CreateTagStep extends ServerSideStep {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
PersonIdent taggerIdent = OneDev.getInstance(UserManager.class).getSystem().asPerson();
return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
PersonIdent taggerIdent = OneDev.getInstance(UserService.class).getSystem().asPerson();
Project project = build.getProject();
String tagName = getTagName();
@ -95,7 +95,7 @@ public class CreateTagStep extends ServerSideStep {
if (build.canCreateTag(getAccessTokenSecret(), tagName)) {
RefFacade tagRef = project.getTagRef(tagName);
if (tagRef != null)
OneDev.getInstance(ProjectManager.class).deleteTag(project, tagName);
OneDev.getInstance(ProjectService.class).deleteTag(project, tagName);
OneDev.getInstance(GitService.class).createTag(project, tagName, build.getCommitHash(),
taggerIdent, getTagMessage(), false);
} else {

View File

@ -6,15 +6,15 @@ import io.onedev.commons.utils.LockUtils;
import io.onedev.commons.utils.TaskLogger;
import io.onedev.k8shelper.ServerStepResult;
import io.onedev.server.OneDev;
import io.onedev.server.StorageManager;
import io.onedev.server.StorageService;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.annotation.SubPath;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.util.patternset.PatternSet;
import javax.validation.constraints.NotEmpty;
@ -71,13 +71,13 @@ public class PublishArtifactStep extends ServerSideStep {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger jobLogger) {
return OneDev.getInstance(SessionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
return LockUtils.write(build.getArtifactsLockName(), () -> {
var projectId = build.getProject().getId();
var artifactsDir = OneDev.getInstance(StorageManager.class).initArtifactsDir(projectId, build.getNumber());
var artifactsDir = OneDev.getInstance(StorageService.class).initArtifactsDir(projectId, build.getNumber());
FileUtils.copyDirectory(inputDir, artifactsDir);
OneDev.getInstance(ProjectManager.class).directoryModified(projectId, artifactsDir);
OneDev.getInstance(ProjectService.class).directoryModified(projectId, artifactsDir);
return new ServerStepResult(true);
});
});

View File

@ -20,13 +20,13 @@ import io.onedev.server.annotation.Patterns;
import io.onedev.server.annotation.ProjectChoice;
import io.onedev.server.annotation.SubPath;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.SettingService;
import io.onedev.server.job.JobContext;
import io.onedev.server.job.JobManager;
import io.onedev.server.job.JobService;
import io.onedev.server.model.Project;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.util.patternset.PatternSet;
@Editable(order=1060, name="Site", group = PUBLISH, description="This step publishes specified files to be served as project web site. "
@ -92,13 +92,13 @@ public class PublishSiteStep extends ServerSideStep {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
JobContext jobContext = OneDev.getInstance(JobManager.class).getJobContext(build.getId());
return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
JobContext jobContext = OneDev.getInstance(JobService.class).getJobContext(build.getId());
if (jobContext.getJobExecutor().isSitePublishEnabled()) {
Project project;
if (projectPath != null) {
project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath);
project = OneDev.getInstance(ProjectService.class).findByPath(projectPath);
if (project == null) {
logger.error("Unable to find project: " + projectPath);
return new ServerStepResult(false);
@ -108,13 +108,13 @@ public class PublishSiteStep extends ServerSideStep {
}
var projectId = project.getId();
LockUtils.write(project.getSiteLockName(), () -> {
File projectSiteDir = OneDev.getInstance(ProjectManager.class).getSiteDir(projectId);
File projectSiteDir = OneDev.getInstance(ProjectService.class).getSiteDir(projectId);
FileUtils.cleanDir(projectSiteDir);
FileUtils.copyDirectory(inputDir, projectSiteDir);
OneDev.getInstance(ProjectManager.class).directoryModified(projectId, projectSiteDir);
OneDev.getInstance(ProjectService.class).directoryModified(projectId, projectSiteDir);
return null;
});
String serverUrl = OneDev.getInstance(SettingManager.class).getSystemSetting().getServerUrl();
String serverUrl = OneDev.getInstance(SettingService.class).getSystemSetting().getServerUrl();
logger.log("Site published as "
+ StringUtils.stripEnd(serverUrl, "/") + "/" + project.getPath() + "/~site");
} else {

View File

@ -45,9 +45,9 @@ import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.ProjectChoice;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.cluster.ClusterTask;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.UserService;
import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.event.project.RefUpdated;
import io.onedev.server.git.CommandUtils;
@ -57,7 +57,7 @@ import io.onedev.server.git.command.LfsFetchCommand;
import io.onedev.server.git.service.RefFacade;
import io.onedev.server.model.Project;
import io.onedev.server.model.User;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.security.SecurityUtils;
@Editable(order=1070, name="Pull from Remote", group=StepGroup.REPOSITORY_SYNC, description=""
@ -139,12 +139,12 @@ public class PullRepository extends SyncRepository {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
Project project = build.getProject();
Project targetProject;
if (getTargetProject() != null) {
targetProject = getProjectManager().findByPath(getTargetProject());
targetProject = getProjectService().findByPath(getTargetProject());
if (targetProject == null)
throw new ExplicitException("Target project not found: " + getTargetProject());
} else {
@ -171,17 +171,17 @@ public class PullRepository extends SyncRepository {
String remoteUrl = getRemoteUrlWithCredential(build);
Long targetProjectId = targetProject.getId();
var task = new PullTask(targetProjectId, userId, remoteUrl, getCertificate(), getRefs(), isForce(), isWithLfs(), getProxy(), build.getSecretMasker());
getProjectManager().runOnActiveServer(targetProjectId, task);
getProjectService().runOnActiveServer(targetProjectId, task);
return new ServerStepResult(true);
});
}
private static ProjectManager getProjectManager() {
return OneDev.getInstance(ProjectManager.class);
private static ProjectService getProjectService() {
return OneDev.getInstance(ProjectService.class);
}
private static UserManager getUserManager() {
return OneDev.getInstance(UserManager.class);
private static UserService getUserService() {
return OneDev.getInstance(UserService.class);
}
private static class PullTask implements ClusterTask<Void> {
@ -242,7 +242,7 @@ public class PullRepository extends SyncRepository {
var certificateFile = writeCertificate(certificate);
SecretMasker.push(secretMasker);
try {
Repository repository = getProjectManager().getRepository(projectId);
Repository repository = getProjectService().getRepository(projectId);
String defaultBranch = GitUtils.getDefaultBranch(repository);
Map<String, ObjectId> oldCommitIds = getRefCommits(repository);
@ -361,7 +361,7 @@ public class PullRepository extends SyncRepository {
git.clearArgs();
configureProxy(git, proxy);
configureCertificate(git, certificateFile);
var sinceCommitIds = getProjectManager().readLfsSinceCommits(projectId);
var sinceCommitIds = getProjectService().readLfsSinceCommits(projectId);
if (sinceCommitIds.isEmpty()) {
new LfsFetchAllCommand(git.workingDir(), remoteUrl) {
@ -379,15 +379,15 @@ public class PullRepository extends SyncRepository {
}
}.run();
}
getProjectManager().writeLfsSinceCommits(projectId, newCommitIds.values());
getProjectService().writeLfsSinceCommits(projectId, newCommitIds.values());
}
OneDev.getInstance(SessionManager.class).runAsync(() -> {
OneDev.getInstance(SessionService.class).runAsync(() -> {
try {
// Access db connection in a separate thread to avoid possible deadlock, as
// the parent thread is blocking another thread holding database connections
var project = getProjectManager().load(projectId);
var user = getUserManager().load(userId);
var project = getProjectService().load(projectId);
var user = getUserService().load(userId);
MapDifference<String, ObjectId> difference = difference(oldCommitIds, newCommitIds);
ListenerRegistry registry = OneDev.getInstance(ListenerRegistry.class);
for (Map.Entry<String, ObjectId> entry : difference.entriesOnlyOnLeft().entrySet()) {

View File

@ -16,12 +16,12 @@ import io.onedev.commons.utils.command.LineConsumer;
import io.onedev.k8shelper.ServerStepResult;
import io.onedev.server.OneDev;
import io.onedev.server.annotation.Editable;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.git.CommandUtils;
import io.onedev.server.git.GitUtils;
import io.onedev.server.model.Project;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.SessionService;
@Editable(order=1080, name="Push to Remote", group=StepGroup.REPOSITORY_SYNC,
description="This step pushes current commit to same ref on remote")
@ -31,15 +31,15 @@ public class PushRepository extends SyncRepository {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
var certificateFile = writeCertificate(getCertificate());
SecretMasker.push(build.getSecretMasker());
try {
if (OneDev.getInstance(ProjectManager.class).hasLfsObjects(build.getProject().getId())) {
if (OneDev.getInstance(ProjectService.class).hasLfsObjects(build.getProject().getId())) {
Project project = build.getProject();
Commandline git = CommandUtils.newGit();
git.workingDir(OneDev.getInstance(ProjectManager.class).getGitDir(project.getId()));
git.workingDir(OneDev.getInstance(ProjectService.class).getGitDir(project.getId()));
configureProxy(git, getProxy());
configureCertificate(git, certificateFile);
@ -89,7 +89,7 @@ public class PushRepository extends SyncRepository {
}).checkReturnCode();
Repository repository = OneDev.getInstance(ProjectManager.class)
Repository repository = OneDev.getInstance(ProjectService.class)
.getRepository(project.getId());
String mergeBaseId = GitUtils.getMergeBase(repository,
ObjectId.fromString(remoteCommitId.get()), build.getCommitId()).name();
@ -143,7 +143,7 @@ public class PushRepository extends SyncRepository {
Commandline git = CommandUtils.newGit();
configureProxy(git, getProxy());
configureCertificate(git, certificateFile);
git.workingDir(OneDev.getInstance(ProjectManager.class).getGitDir(build.getProject().getId()));
git.workingDir(OneDev.getInstance(ProjectService.class).getGitDir(build.getProject().getId()));
git.addArgs("push");
if (isForce())
git.addArgs("--force");

View File

@ -8,10 +8,10 @@ import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.Markdown;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.event.project.build.BuildUpdated;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.TransactionService;
import javax.validation.constraints.NotEmpty;
import java.io.File;
@ -43,8 +43,8 @@ public class SetBuildDescriptionStep extends ServerSideStep {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger jobLogger) {
return OneDev.getInstance(TransactionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(TransactionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
build.setDescription(buildDescription);
OneDev.getInstance(ListenerRegistry.class).post(new BuildUpdated(build));
return new ServerStepResult(true);

View File

@ -7,10 +7,10 @@ import io.onedev.server.OneDev;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.event.project.build.BuildUpdated;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.TransactionService;
import javax.validation.constraints.NotEmpty;
import java.io.File;
@ -46,8 +46,8 @@ public class SetBuildVersionStep extends ServerSideStep {
@Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(TransactionManager.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(TransactionService.class).call(() -> {
var build = OneDev.getInstance(BuildService.class).load(buildId);
build.setVersion(buildVersion);
OneDev.getInstance(ListenerRegistry.class).post(new BuildUpdated(build));
Map<String, byte[]> outputFiles = new HashMap<>();

View File

@ -5,7 +5,7 @@ import java.util.List;
import edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.GroupManager;
import io.onedev.server.service.GroupService;
import io.onedev.server.model.Group;
import io.onedev.server.annotation.Editable;
@ -16,7 +16,7 @@ public class AllGroups implements ChoiceProvider {
@Override
public List<Group> getChoices(boolean allPossible) {
List<Group> groups = OneDev.getInstance(GroupManager.class).query();
List<Group> groups = OneDev.getInstance(GroupService.class).query();
Collections.sort(groups, new Comparator<Group>() {
@Override

View File

@ -9,13 +9,13 @@ import com.google.common.collect.Lists;
import io.onedev.server.OneDev;
import io.onedev.server.buildspecmodel.inputspec.userchoiceinput.choiceprovider.ChoiceProvider;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.UserService;
import io.onedev.server.buildspecmodel.inputspec.InputSpec;
public class UserChoiceInput {
public static List<String> getPossibleValues() {
return OneDev.getInstance(UserManager.class).cloneCache().values().stream()
return OneDev.getInstance(UserService.class).cloneCache().values().stream()
.map(it->it.getName())
.sorted()
.collect(Collectors.toList());

View File

@ -6,7 +6,7 @@ import java.util.List;
import com.google.common.collect.Sets;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.UserService;
import io.onedev.server.model.User;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.facade.UserCache;
@ -21,7 +21,7 @@ public class AllUsers implements ChoiceProvider {
@Override
public List<User> getChoices(boolean allPossible) {
UserCache cache = OneDev.getInstance(UserManager.class).cloneCache();
UserCache cache = OneDev.getInstance(UserService.class).cloneCache();
if (WicketUtils.getPage() instanceof IssueDetailPage) {
IssueDetailPage issueDetailPage = (IssueDetailPage) WicketUtils.getPage();

View File

@ -12,7 +12,7 @@ import org.slf4j.LoggerFactory;
import io.onedev.server.util.GroovyUtils;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.UserService;
import io.onedev.server.model.User;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.OmitName;
@ -48,7 +48,7 @@ public class ScriptingChoices implements ChoiceProvider {
try {
return ((List<String>) GroovyUtils.evalScriptByName(scriptName, variables))
.stream()
.map(it->OneDev.getInstance(UserManager.class).findByName(it))
.map(it->OneDev.getInstance(UserService.class).findByName(it))
.filter(it->it!=null)
.collect(Collectors.toList());
} catch (RuntimeException e) {

View File

@ -32,6 +32,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import io.onedev.server.annotation.NoDBAccess;
import org.apache.shiro.authz.UnauthorizedException;
import org.eclipse.jgit.lib.Repository;
@ -41,12 +42,12 @@ import com.google.common.collect.Sets;
import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.TarUtils;
import io.onedev.server.OneDev;
import io.onedev.server.StorageManager;
import io.onedev.server.attachment.AttachmentManager;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.JobCacheManager;
import io.onedev.server.entitymanager.PackBlobManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.StorageService;
import io.onedev.server.attachment.AttachmentService;
import io.onedev.server.service.BuildService;
import io.onedev.server.service.JobCacheService;
import io.onedev.server.service.PackBlobService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.git.CommandUtils;
import io.onedev.server.git.GitFilter;
import io.onedev.server.git.GitUtils;
@ -59,10 +60,10 @@ import io.onedev.server.model.Project;
import io.onedev.server.rest.annotation.Api;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.IOUtils;
import io.onedev.server.util.concurrent.WorkExecutor;
import io.onedev.server.util.concurrent.WorkExecutionService;
import io.onedev.server.util.patternset.PatternSet;
import io.onedev.server.xodus.CommitInfoManager;
import io.onedev.server.xodus.VisitInfoManager;
import io.onedev.server.xodus.CommitInfoService;
import io.onedev.server.xodus.VisitInfoService;
@Api(internal=true)
@Path("/cluster")
@ -70,39 +71,39 @@ import io.onedev.server.xodus.VisitInfoManager;
@Singleton
public class ClusterResource {
private final ProjectManager projectManager;
private final ProjectService projectService;
private final AttachmentManager attachmentManager;
private final AttachmentService attachmentService;
private final CommitInfoManager commitInfoManager;
private final CommitInfoService commitInfoService;
private final VisitInfoManager visitInfoManager;
private final VisitInfoService visitInfoService;
private final StorageManager storageManager;
private final StorageService storageService;
private final PackBlobManager packBlobManager;
private final PackBlobService packBlobService;
private final BuildManager buildManager;
private final BuildService buildService;
private final JobCacheManager jobCacheManager;
private final JobCacheService jobCacheService;
private final WorkExecutor workExecutor;
private final WorkExecutionService workExecutionService;
@Inject
public ClusterResource(ProjectManager projectManager, CommitInfoManager commitInfoManager,
AttachmentManager attachmentManager, VisitInfoManager visitInfoManager,
WorkExecutor workExecutor, StorageManager storageManager,
PackBlobManager packBlobManager, BuildManager buildManager,
JobCacheManager jobCacheManager) {
this.commitInfoManager = commitInfoManager;
this.projectManager = projectManager;
this.workExecutor = workExecutor;
this.attachmentManager = attachmentManager;
this.visitInfoManager = visitInfoManager;
this.storageManager = storageManager;
this.packBlobManager = packBlobManager;
this.buildManager = buildManager;
this.jobCacheManager = jobCacheManager;
public ClusterResource(ProjectService projectService, CommitInfoService commitInfoService,
AttachmentService attachmentService, VisitInfoService visitInfoService,
WorkExecutionService workExecutionService, StorageService storageService,
PackBlobService packBlobService, BuildService buildService,
JobCacheService jobCacheService) {
this.commitInfoService = commitInfoService;
this.projectService = projectService;
this.workExecutionService = workExecutionService;
this.attachmentService = attachmentService;
this.visitInfoService = visitInfoService;
this.storageService = storageService;
this.packBlobService = packBlobService;
this.buildService = buildService;
this.jobCacheService = jobCacheService;
}
@Path("/project-files")
@ -116,7 +117,7 @@ public class ClusterResource {
throw new UnauthorizedException("This api can only be accessed via cluster credential");
StreamingOutput output = os -> read(readLock, () -> {
File directory = new File(projectManager.getProjectDir(projectId), path);
File directory = new File(projectService.getProjectDir(projectId), path);
PatternSet patternSet = PatternSet.parse(patterns);
patternSet.getExcludes().add(SHARE_TEST_DIR + "/**");
TarUtils.tar(directory, patternSet.getIncludes(), patternSet.getExcludes(), os, false);
@ -144,7 +145,7 @@ public class ClusterResource {
if (!SecurityUtils.isSystem())
throw new UnauthorizedException("This api can only be accessed via cluster credential");
File file = new File(projectManager.getProjectDir(projectId), path);
File file = new File(projectService.getProjectDir(projectId), path);
if (read(readLock, file::exists)) {
StreamingOutput os = output -> read(readLock, () -> {
try (output; InputStream is = new FileInputStream(file)) {
@ -168,7 +169,7 @@ public class ClusterResource {
throw new UnauthorizedException("This api can only be accessed via cluster credential");
StreamingOutput output = os -> read(getArtifactsLockName(projectId, buildNumber), () -> {
File artifactsDir = buildManager.getArtifactsDir(projectId, buildNumber);
File artifactsDir = buildService.getArtifactsDir(projectId, buildNumber);
PatternSet patternSet = PatternSet.parse(artifacts);
patternSet.getExcludes().add(SHARE_TEST_DIR + "/**");
TarUtils.tar(artifactsDir, patternSet.getIncludes(), patternSet.getExcludes(), os, false);
@ -187,7 +188,7 @@ public class ClusterResource {
throw new UnauthorizedException("This api can only be accessed via cluster credential");
StreamingOutput os = output -> read(getArtifactsLockName(projectId, buildNumber), () -> {
File artifactsDir = buildManager.getArtifactsDir(projectId, buildNumber);
File artifactsDir = buildService.getArtifactsDir(projectId, buildNumber);
File artifactFile = new File(artifactsDir, artifactPath);
try (output; InputStream is = new FileInputStream(artifactFile)) {
IOUtils.copy(is, output, BUFFER_SIZE);
@ -206,7 +207,7 @@ public class ClusterResource {
throw new UnauthorizedException("This api can only be accessed via cluster credential");
StreamingOutput os = output -> {
Repository repository = projectManager.getRepository(projectId);
Repository repository = projectService.getRepository(projectId);
try (output; InputStream is = GitUtils.getInputStream(repository, fromString(revId), path)) {
IOUtils.copy(is, output, BUFFER_SIZE);
}
@ -214,6 +215,7 @@ public class ClusterResource {
return ok(os).build();
}
@NoDBAccess
@Path("/pack-blob")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@GET
@ -224,7 +226,7 @@ public class ClusterResource {
StreamingOutput out = os -> {
read(PackBlob.getFileLockName(projectId, hash), () -> {
try (os; var is = new FileInputStream(packBlobManager.getPackBlobFile(projectId, hash))) {
try (os; var is = new FileInputStream(packBlobService.getPackBlobFile(projectId, hash))) {
IOUtils.copy(is, os, BUFFER_SIZE);
}
return null;
@ -243,7 +245,7 @@ public class ClusterResource {
if (!SecurityUtils.isSystem())
throw new UnauthorizedException("This api can only be accessed via cluster credential");
var cachePaths = Splitter.on('\n').splitToList(joinedCachePaths);
StreamingOutput out = os -> jobCacheManager.downloadCache(projectId, cacheId, cachePaths, os);
StreamingOutput out = os -> jobCacheService.downloadCache(projectId, cacheId, cachePaths, os);
return ok(out).build();
}
@ -255,7 +257,7 @@ public class ClusterResource {
throw new UnauthorizedException("This api can only be accessed via cluster credential");
StreamingOutput os = output -> read(Project.getSiteLockName(projectId), () -> {
File file = new File(projectManager.getSiteDir(projectId), filePath);
File file = new File(projectService.getSiteDir(projectId), filePath);
try (output; InputStream is = new FileInputStream(file)) {
IOUtils.copy(is, output, BUFFER_SIZE);
}
@ -273,7 +275,7 @@ public class ClusterResource {
throw new UnauthorizedException("This api can only be accessed via cluster credential");
StreamingOutput os = output -> {
File gitDir = projectManager.getGitDir(projectId);
File gitDir = projectService.getGitDir(projectId);
if (upload)
new AdvertiseUploadRefsCommand(gitDir, output).protocol(protocol).run();
else
@ -295,9 +297,9 @@ public class ClusterResource {
Map<String, String> hookEnvs = HookUtils.getHookEnvs(projectId, principal);
try {
File gitDir = projectManager.getGitDir(projectId);
File gitDir = projectService.getGitDir(projectId);
if (upload) {
workExecutor.submit(GitFilter.PACK_PRIORITY, new Runnable() {
workExecutionService.submit(GitFilter.PACK_PRIORITY, new Runnable() {
@Override
public void run() {
@ -306,7 +308,7 @@ public class ClusterResource {
}).get();
} else {
workExecutor.submit(GitFilter.PACK_PRIORITY, new Runnable() {
workExecutionService.submit(GitFilter.PACK_PRIORITY, new Runnable() {
@Override
public void run() {
@ -332,7 +334,7 @@ public class ClusterResource {
StreamingOutput output = os -> {
File tempDir = FileUtils.createTempDir("commit-info");
try {
commitInfoManager.export(projectId, tempDir);
commitInfoService.export(projectId, tempDir);
TarUtils.tar(tempDir, os, false);
} finally {
FileUtils.deleteDir(tempDir);
@ -351,7 +353,7 @@ public class ClusterResource {
StreamingOutput output = os -> {
File tempDir = FileUtils.createTempDir("visit-info");
try {
visitInfoManager.export(projectId, tempDir);
visitInfoService.export(projectId, tempDir);
TarUtils.tar(tempDir, os, false);
} finally {
FileUtils.deleteDir(tempDir);
@ -400,7 +402,7 @@ public class ClusterResource {
if (!SecurityUtils.isSystem())
throw new UnauthorizedException("This api can only be accessed via cluster credential");
String attachmentName = attachmentManager.saveAttachmentLocal(
String attachmentName = attachmentService.saveAttachmentLocal(
projectId, attachmentGroup, suggestedAttachmentName, input);
return ok(attachmentName).build();
}
@ -413,8 +415,8 @@ public class ClusterResource {
if (!SecurityUtils.isSystem())
throw new UnauthorizedException("This api can only be accessed via cluster credential");
StreamingOutput output = os -> read(attachmentManager.getAttachmentLockName(projectId, attachmentGroup), () -> {
TarUtils.tar(attachmentManager.getAttachmentGroupDir(projectId, attachmentGroup),
StreamingOutput output = os -> read(attachmentService.getAttachmentLockName(projectId, attachmentGroup), () -> {
TarUtils.tar(attachmentService.getAttachmentGroupDir(projectId, attachmentGroup),
Sets.newHashSet("**"), Sets.newHashSet(), os, false);
return null;
});
@ -430,7 +432,7 @@ public class ClusterResource {
throw new UnauthorizedException("This api can only be accessed via cluster credential");
write(getArtifactsLockName(projectId, buildNumber), () -> {
var artifactsDir = storageManager.initArtifactsDir(projectId, buildNumber);
var artifactsDir = storageService.initArtifactsDir(projectId, buildNumber);
File artifactFile = new File(artifactsDir, artifactPath);
FileUtils.createDir(artifactFile.getParentFile());
try (input; var os = new BufferedOutputStream(new FileOutputStream(artifactFile), BUFFER_SIZE)) {
@ -438,7 +440,7 @@ public class ClusterResource {
} catch (IOException e) {
throw new RuntimeException(e);
}
projectManager.directoryModified(projectId, artifactsDir);
projectService.directoryModified(projectId, artifactsDir);
return null;
});
@ -452,7 +454,7 @@ public class ClusterResource {
@QueryParam("uuid") String uuid) {
if (!SecurityUtils.isSystem())
throw new UnauthorizedException("This api can only be accessed via cluster credential");
var uploadFile = packBlobManager.getUploadFile(projectId, uuid);
var uploadFile = packBlobService.getUploadFile(projectId, uuid);
try (input; var os = new BufferedOutputStream(new FileOutputStream(uploadFile, true), BUFFER_SIZE)) {
return IOUtils.copy(input, os, BUFFER_SIZE);
} catch (IOException e) {
@ -470,7 +472,7 @@ public class ClusterResource {
InputStream cacheStream) {
if (!SecurityUtils.isSystem())
throw new UnauthorizedException("This api can only be accessed via cluster credential");
jobCacheManager.uploadCache(projectId, cacheId, Splitter.on('\n').splitToList(cachePaths), cacheStream);
jobCacheService.uploadCache(projectId, cacheId, Splitter.on('\n').splitToList(cachePaths), cacheStream);
return ok().build();
}

View File

@ -3,6 +3,7 @@ package io.onedev.server.cluster;
import com.hazelcast.cluster.Member;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.cp.IAtomicLong;
import io.onedev.server.annotation.NoDBAccess;
import io.onedev.server.replica.ProjectReplica;
import javax.annotation.Nullable;
@ -13,7 +14,7 @@ import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
public interface ClusterManager {
public interface ClusterService {
void start();
@ -61,7 +62,8 @@ public interface ClusterManager {
String getServerAddress(Member server);
String getLeaderServerAddress();
@NoDBAccess
String getLocalServerAddress();
String getCredential();

View File

@ -2,8 +2,8 @@ package io.onedev.server.commandhandler;
import io.onedev.commons.utils.ExplicitException;
import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.data.DataManager;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.data.DataService;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -23,18 +23,18 @@ public class ApplyDatabaseConstraints extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(ApplyDatabaseConstraints.class);
private final SessionFactoryManager sessionFactoryManager;
private final SessionFactoryService sessionFactoryService;
private final DataManager dataManager;
private final DataService dataService;
private final HibernateConfig hibernateConfig;
@Inject
public ApplyDatabaseConstraints(SessionFactoryManager sessionFactoryManager, DataManager dataManager,
HibernateConfig hibernateConfig) {
public ApplyDatabaseConstraints(SessionFactoryService sessionFactoryService, DataService dataService,
HibernateConfig hibernateConfig) {
super(hibernateConfig);
this.sessionFactoryManager = sessionFactoryManager;
this.dataManager = dataManager;
this.sessionFactoryService = sessionFactoryService;
this.dataService = dataService;
this.hibernateConfig = hibernateConfig;
}
@ -44,10 +44,10 @@ public class ApplyDatabaseConstraints extends CommandHandler {
try {
if (doMaintenance(() -> {
sessionFactoryManager.start();
try (var conn = dataManager.openConnection()) {
sessionFactoryService.start();
try (var conn = dataService.openConnection()) {
return callWithTransaction(conn, () -> {
dataManager.checkDataVersion(conn, false);
dataService.checkDataVersion(conn, false);
logger.warn("This script is mainly used to apply database constraints after fixing database integrity issues (may happen during restore/upgrade)");
@ -66,8 +66,8 @@ public class ApplyDatabaseConstraints extends CommandHandler {
return false;
}
dataManager.dropConstraints(conn);
dataManager.applyConstraints(conn);
dataService.dropConstraints(conn);
dataService.applyConstraints(conn);
return true;
});
}
@ -90,7 +90,7 @@ public class ApplyDatabaseConstraints extends CommandHandler {
@Override
public void stop() {
sessionFactoryManager.stop();
sessionFactoryService.stop();
}
}

View File

@ -6,8 +6,8 @@ import io.onedev.commons.utils.ExplicitException;
import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.ZipUtils;
import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.data.DataManager;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.data.DataService;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -26,18 +26,18 @@ public class BackupDatabase extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(BackupDatabase.class);
private final DataManager dataManager;
private final DataService dataService;
private final SessionFactoryManager sessionFactoryManager;
private final SessionFactoryService sessionFactoryService;
private File backupFile;
@Inject
public BackupDatabase(DataManager dataManager, SessionFactoryManager sessionFactoryManager,
public BackupDatabase(DataService dataService, SessionFactoryService sessionFactoryService,
HibernateConfig hibernateConfig) {
super(hibernateConfig);
this.dataManager = dataManager;
this.sessionFactoryManager = sessionFactoryManager;
this.dataService = dataService;
this.sessionFactoryService = sessionFactoryService;
}
@Override
@ -60,11 +60,11 @@ public class BackupDatabase extends CommandHandler {
try {
doMaintenance(() -> {
sessionFactoryManager.start();
sessionFactoryService.start();
try (var conn = dataManager.openConnection()) {
try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> {
dataManager.checkDataVersion(conn, false);
dataService.checkDataVersion(conn, false);
return null;
});
} catch (SQLException e) {
@ -75,7 +75,7 @@ public class BackupDatabase extends CommandHandler {
File tempDir = FileUtils.createTempDir("backup");
try {
dataManager.exportData(tempDir);
dataService.exportData(tempDir);
ZipUtils.zip(tempDir, backupFile, null);
} catch (Exception e) {
throw ExceptionUtils.unchecked(e);
@ -95,7 +95,7 @@ public class BackupDatabase extends CommandHandler {
@Override
public void stop() {
sessionFactoryManager.stop();
sessionFactoryService.stop();
}
}

View File

@ -11,9 +11,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.onedev.commons.utils.ExplicitException;
import io.onedev.server.data.DataManager;
import io.onedev.server.data.DataService;
import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils;
@Singleton
@ -23,16 +23,16 @@ public class CheckDataVersion extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(CheckDataVersion.class);
private final SessionFactoryManager sessionFactoryManager;
private final SessionFactoryService sessionFactoryService;
private final DataManager dataManager;
private final DataService dataService;
@Inject
public CheckDataVersion(SessionFactoryManager sessionFactoryManager, DataManager dataManager,
HibernateConfig hibernateConfig) {
public CheckDataVersion(SessionFactoryService sessionFactoryService, DataService dataService,
HibernateConfig hibernateConfig) {
super(hibernateConfig);
this.sessionFactoryManager = sessionFactoryManager;
this.dataManager = dataManager;
this.sessionFactoryService = sessionFactoryService;
this.dataService = dataService;
}
@Override
@ -41,13 +41,13 @@ public class CheckDataVersion extends CommandHandler {
try {
doMaintenance(() -> {
sessionFactoryManager.start();
sessionFactoryService.start();
// Use system.out in case logger is suppressed by user as this output is important to
// upgrade procedure
String dataVersion;
try (var conn = dataManager.openConnection()) {
dataVersion = callWithTransaction(conn, () -> dataManager.checkDataVersion(conn, false));
try (var conn = dataService.openConnection()) {
dataVersion = callWithTransaction(conn, () -> dataService.checkDataVersion(conn, false));
} catch (SQLException e) {
throw new RuntimeException(e);
}
@ -63,7 +63,7 @@ public class CheckDataVersion extends CommandHandler {
@Override
public void stop() {
sessionFactoryManager.stop();
sessionFactoryService.stop();
}
}

View File

@ -2,8 +2,8 @@ package io.onedev.server.commandhandler;
import io.onedev.commons.utils.ExplicitException;
import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.data.DataManager;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.data.DataService;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -19,18 +19,18 @@ public class CleanDatabase extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(CleanDatabase.class);
private final SessionFactoryManager sessionFactoryManager;
private final SessionFactoryService sessionFactoryService;
private final DataManager dataManager;
private final DataService dataService;
private final HibernateConfig hibernateConfig;
@Inject
public CleanDatabase(SessionFactoryManager sessionFactoryManager, DataManager dataManager,
HibernateConfig hibernateConfig) {
public CleanDatabase(SessionFactoryService sessionFactoryService, DataService dataService,
HibernateConfig hibernateConfig) {
super(hibernateConfig);
this.sessionFactoryManager = sessionFactoryManager;
this.dataManager = dataManager;
this.sessionFactoryService = sessionFactoryService;
this.dataService = dataService;
this.hibernateConfig = hibernateConfig;
}
@ -40,16 +40,16 @@ public class CleanDatabase extends CommandHandler {
try {
doMaintenance(() -> {
sessionFactoryManager.start();
sessionFactoryService.start();
// Run this in autocommit mode as some sqls in the clean script may fail
// when drop non-existent constraints, and we want to ignore them and
// continue to execute other sql statements without rolling back whole
// transaction
try (var conn = dataManager.openConnection()) {
try (var conn = dataService.openConnection()) {
conn.setAutoCommit(true);
dataManager.checkDataVersion(conn, false);
dataManager.cleanDatabase(conn);
dataService.checkDataVersion(conn, false);
dataService.cleanDatabase(conn);
} catch (SQLException e) {
throw new RuntimeException(e);
}
@ -73,7 +73,7 @@ public class CleanDatabase extends CommandHandler {
@Override
public void stop() {
sessionFactoryManager.stop();
sessionFactoryService.stop();
}
}

View File

@ -2,11 +2,11 @@ package io.onedev.server.commandhandler;
import io.onedev.commons.bootstrap.Bootstrap;
import io.onedev.commons.utils.ExplicitException;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.UserService;
import io.onedev.server.model.User;
import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.data.DataManager;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.data.DataService;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils;
import org.apache.shiro.authc.credential.PasswordService;
import org.slf4j.Logger;
@ -25,22 +25,22 @@ public class ResetAdminPassword extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(ResetAdminPassword.class);
private final DataManager dataManager;
private final DataService dataService;
private final SessionFactoryManager sessionFactoryManager;
private final SessionFactoryService sessionFactoryService;
private final UserManager userManager;
private final UserService userService;
private final PasswordService passwordService;
@Inject
public ResetAdminPassword(HibernateConfig hibernateConfig, DataManager dataManager,
SessionFactoryManager sessionFactoryManager, UserManager userManager,
PasswordService passwordService) {
public ResetAdminPassword(HibernateConfig hibernateConfig, DataService dataService,
SessionFactoryService sessionFactoryService, UserService userService,
PasswordService passwordService) {
super(hibernateConfig);
this.dataManager = dataManager;
this.sessionFactoryManager = sessionFactoryManager;
this.userManager = userManager;
this.dataService = dataService;
this.sessionFactoryService = sessionFactoryService;
this.userService = userService;
this.passwordService = passwordService;
}
@ -55,24 +55,24 @@ public class ResetAdminPassword extends CommandHandler {
try {
doMaintenance(() -> {
sessionFactoryManager.start();
sessionFactoryService.start();
try (var conn = dataManager.openConnection()) {
try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> {
dataManager.checkDataVersion(conn, false);
dataService.checkDataVersion(conn, false);
return null;
});
} catch (SQLException e) {
throw new RuntimeException(e);
}
User root = userManager.get(User.ROOT_ID);
User root = userService.get(User.ROOT_ID);
if (root == null)
throw new ExplicitException("Server not set up yet");
String password = Bootstrap.command.getArgs()[0];
root.setTwoFactorAuthentication(null);
root.setPassword(passwordService.encryptPassword(password));
userManager.update(root, null);
userService.update(root, null);
// wait for a short period to have embedded db flushing data
try {
@ -93,7 +93,7 @@ public class ResetAdminPassword extends CommandHandler {
@Override
public void stop() {
sessionFactoryManager.stop();
sessionFactoryService.stop();
}
}

View File

@ -5,9 +5,9 @@ import io.onedev.commons.bootstrap.Command;
import io.onedev.commons.utils.ExplicitException;
import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.ZipUtils;
import io.onedev.server.data.DataManager;
import io.onedev.server.data.DataService;
import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -26,20 +26,20 @@ public class RestoreDatabase extends CommandHandler {
public static final String COMMAND = "restore-db";
private final DataManager dataManager;
private final DataService dataService;
private final SessionFactoryManager sessionFactoryManager;
private final SessionFactoryService sessionFactoryService;
private final HibernateConfig hibernateConfig;
private File backupFile;
@Inject
public RestoreDatabase(DataManager dataManager, SessionFactoryManager sessionFactoryManager,
public RestoreDatabase(DataService dataService, SessionFactoryService sessionFactoryService,
HibernateConfig hibernateConfig) {
super(hibernateConfig);
this.dataManager = dataManager;
this.sessionFactoryManager = sessionFactoryManager;
this.dataService = dataService;
this.sessionFactoryService = sessionFactoryService;
this.hibernateConfig = hibernateConfig;
}
@ -65,7 +65,7 @@ public class RestoreDatabase extends CommandHandler {
try {
doMaintenance(() -> {
sessionFactoryManager.start();
sessionFactoryService.start();
if (backupFile.isFile()) {
File dataDir = FileUtils.createTempDir("restore");
@ -97,19 +97,19 @@ public class RestoreDatabase extends CommandHandler {
}
private void doRestore(File dataDir) {
dataManager.migrateData(dataDir);
dataService.migrateData(dataDir);
try (var conn = dataManager.openConnection()) {
try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> {
String dbDataVersion = dataManager.checkDataVersion(conn, true);
String dbDataVersion = dataService.checkDataVersion(conn, true);
if (dbDataVersion != null) {
logger.info("Cleaning database...");
dataManager.cleanDatabase(conn);
dataService.cleanDatabase(conn);
}
logger.info("Creating tables...");
dataManager.createTables(conn);
dataService.createTables(conn);
return null;
});
@ -118,13 +118,13 @@ public class RestoreDatabase extends CommandHandler {
}
logger.info("Importing data into database...");
dataManager.importData(dataDir);
dataService.importData(dataDir);
try (var conn = dataManager.openConnection()) {
try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> {
logger.info("Applying foreign key constraints...");
try {
dataManager.applyConstraints(conn);
dataService.applyConstraints(conn);
} catch (Exception e) {
var message = String.format("Failed to apply database constraints. If this error is caused by " +
"foreign key constraint violations, you may fix it via your database sql tool, and " +
@ -141,7 +141,7 @@ public class RestoreDatabase extends CommandHandler {
@Override
public void stop() {
sessionFactoryManager.stop();
sessionFactoryService.stop();
}
}

View File

@ -9,7 +9,7 @@ import java.io.File;
import java.sql.Connection;
import java.util.List;
public interface DataManager {
public interface DataService {
String checkDataVersion(Connection conn, boolean allowEmptyDB);

View File

@ -73,19 +73,19 @@ import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.StringUtils;
import io.onedev.commons.utils.ZipUtils;
import io.onedev.server.OneDev;
import io.onedev.server.cluster.ClusterManager;
import io.onedev.server.cluster.ClusterService;
import io.onedev.server.cluster.ClusterRunnable;
import io.onedev.server.cluster.ClusterTask;
import io.onedev.server.commandhandler.Upgrade;
import io.onedev.server.data.migration.DataMigrator;
import io.onedev.server.data.migration.MigrationHelper;
import io.onedev.server.data.migration.VersionedXmlDoc;
import io.onedev.server.entitymanager.AlertManager;
import io.onedev.server.entitymanager.EmailAddressManager;
import io.onedev.server.entitymanager.LinkSpecManager;
import io.onedev.server.entitymanager.RoleManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.AlertService;
import io.onedev.server.service.EmailAddressService;
import io.onedev.server.service.LinkSpecService;
import io.onedev.server.service.RoleService;
import io.onedev.server.service.SettingService;
import io.onedev.server.service.UserService;
import io.onedev.server.event.Listen;
import io.onedev.server.event.entity.EntityPersisted;
import io.onedev.server.event.system.SystemStarted;
@ -118,8 +118,8 @@ import io.onedev.server.model.support.administration.emailtemplates.EmailTemplat
import io.onedev.server.model.support.issue.LinkSpecOpposite;
import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.persistence.PersistenceUtils;
import io.onedev.server.persistence.SessionFactoryManager;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.persistence.TransactionService;
import io.onedev.server.persistence.annotation.Sessional;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.Dao;
@ -131,9 +131,9 @@ import io.onedev.server.util.init.ManualConfig;
import io.onedev.server.web.util.editbean.NewUserBean;
@Singleton
public class DefaultDataManager implements DataManager, Serializable {
public class DefaultDataService implements DataService, Serializable {
private static final Logger logger = LoggerFactory.getLogger(DefaultDataManager.class);
private static final Logger logger = LoggerFactory.getLogger(DefaultDataService.class);
private static final String ENV_INITIAL_USER = "initial_user";
@ -148,66 +148,56 @@ public class DefaultDataManager implements DataManager, Serializable {
private static final String ENV_INITIAL_SSH_ROOT_URL = "initial_ssh_root_url";
private static final int BACKUP_BATCH_SIZE = 1000;
private final PhysicalNamingStrategy physicalNamingStrategy;
private final HibernateConfig hibernateConfig;
private final Validator validator;
private final SessionFactoryManager sessionFactoryManager;
private final Dao dao;
private final UserManager userManager;
private final SettingManager settingManager;
private final PasswordService passwordService;
private final TaskScheduler taskScheduler;
private final RoleManager roleManager;
private final LinkSpecManager linkSpecManager;
private final EmailAddressManager emailAddressManager;
private final ClusterManager clusterManager;
private final TransactionManager transactionManager;
private final AlertManager alertManager;
@Inject
private PhysicalNamingStrategy physicalNamingStrategy;
@Inject
private HibernateConfig hibernateConfig;
@Inject
private Validator validator;
@Inject
private SessionFactoryService sessionFactoryService;
@Inject
private Dao dao;
@Inject
private UserService userService;
@Inject
private SettingService settingService;
@Inject
private PasswordService passwordService;
@Inject
private TaskScheduler taskScheduler;
@Inject
private RoleService roleService;
@Inject
private LinkSpecService linkSpecService;
@Inject
private EmailAddressService emailAddressService;
@Inject
private ClusterService clusterService;
@Inject
private TransactionService transactionService;
@Inject
private AlertService alertService;
private String backupTaskId;
@Inject
public DefaultDataManager(PhysicalNamingStrategy physicalNamingStrategy, HibernateConfig hibernateConfig,
Validator validator, Dao dao, SessionFactoryManager sessionFactoryManager,
SettingManager settingManager, TaskScheduler taskScheduler,
PasswordService passwordService, RoleManager roleManager, LinkSpecManager linkSpecManager,
EmailAddressManager emailAddressManager, UserManager userManager, ClusterManager clusterManager,
TransactionManager transactionManager, AlertManager alertManager) {
this.physicalNamingStrategy = physicalNamingStrategy;
this.hibernateConfig = hibernateConfig;
this.validator = validator;
this.sessionFactoryManager = sessionFactoryManager;
this.dao = dao;
this.userManager = userManager;
this.settingManager = settingManager;
this.taskScheduler = taskScheduler;
this.passwordService = passwordService;
this.roleManager = roleManager;
this.linkSpecManager = linkSpecManager;
this.emailAddressManager = emailAddressManager;
this.clusterManager = clusterManager;
this.transactionManager = transactionManager;
this.alertManager = alertManager;
}
private Metadata getMetadata() {
return sessionFactoryManager.getMetadata();
return sessionFactoryService.getMetadata();
}
private void execute(Connection conn, List<String> sqls, boolean failOnError) {
@ -616,10 +606,10 @@ public class DefaultDataManager implements DataManager, Serializable {
user.setName(bean.getName());
user.setFullName(bean.getFullName());
user.setPassword(passwordService.encryptPassword(bean.getPassword()));
userManager.replicate(user);
userService.replicate(user);
EmailAddress primaryEmailAddress = null;
for (EmailAddress emailAddress: emailAddressManager.query()) {
for (EmailAddress emailAddress: emailAddressService.query()) {
if (emailAddress.getOwner().equals(user) && emailAddress.isPrimary()) {
primaryEmailAddress = emailAddress;
break;
@ -635,35 +625,35 @@ public class DefaultDataManager implements DataManager, Serializable {
}
primaryEmailAddress.setValue(bean.getEmailAddress());
if (primaryEmailAddress.isNew())
emailAddressManager.create(primaryEmailAddress);
emailAddressService.create(primaryEmailAddress);
else
emailAddressManager.update(primaryEmailAddress);
emailAddressService.update(primaryEmailAddress);
}
@Transactional
@Override
public List<ManualConfig> checkData() {
List<ManualConfig> manualConfigs = new ArrayList<ManualConfig>();
User system = userManager.get(User.SYSTEM_ID);
User system = userService.get(User.SYSTEM_ID);
if (system == null) {
system = new User();
system.setId(User.SYSTEM_ID);
system.setName(User.SYSTEM_NAME.toLowerCase());
system.setFullName(User.SYSTEM_NAME);
system.setPassword("no password");
userManager.replicate(system);
userService.replicate(system);
}
User unknown = userManager.get(User.UNKNOWN_ID);
User unknown = userService.get(User.UNKNOWN_ID);
if (unknown == null) {
unknown = new User();
unknown.setId(User.UNKNOWN_ID);
unknown.setName(User.UNKNOWN_NAME.toLowerCase());
unknown.setFullName(User.UNKNOWN_NAME);
unknown.setPassword("no password");
userManager.replicate(unknown);
userService.replicate(unknown);
}
if (userManager.get(User.ROOT_ID) == null) {
if (userService.get(User.ROOT_ID) == null) {
NewUserBean bean = new NewUserBean();
bean.setName(System.getenv(ENV_INITIAL_USER));
var passwordPath = System.getenv(ENV_INITIAL_PASSWORD_FILE);
@ -693,7 +683,7 @@ public class DefaultDataManager implements DataManager, Serializable {
}
}
Setting setting = settingManager.findSetting(Key.SYSTEM);
Setting setting = settingService.findSetting(Key.SYSTEM);
SystemSetting systemSetting;
String ingressUrl = OneDev.getInstance().getIngressUrl();
@ -704,12 +694,12 @@ public class DefaultDataManager implements DataManager, Serializable {
String serverUrl = System.getenv(ENV_INITIAL_SERVER_URL);
if (ingressUrl != null) {
systemSetting.setServerUrl(ingressUrl);
settingManager.saveSystemSetting(systemSetting);
settingService.saveSystemSetting(systemSetting);
systemSetting = null;
} else if (serverUrl != null) {
systemSetting.setServerUrl(StringUtils.stripEnd(serverUrl, "/\\"));
if (validator.validate(systemSetting).isEmpty()) {
settingManager.saveSystemSetting(systemSetting);
settingService.saveSystemSetting(systemSetting);
systemSetting = null;
}
} else {
@ -737,35 +727,35 @@ public class DefaultDataManager implements DataManager, Serializable {
@Override
public void complete() {
settingManager.saveSystemSetting((SystemSetting) getSetting());
settingService.saveSystemSetting((SystemSetting) getSetting());
}
});
}
setting = settingManager.findSetting(Key.SYSTEM_UUID);
setting = settingService.findSetting(Key.SYSTEM_UUID);
if (setting == null || setting.getValue() == null)
settingManager.saveSystemUUID(UUID.randomUUID().toString());
settingService.saveSystemUUID(UUID.randomUUID().toString());
setting = settingManager.findSetting(Key.SSH);
setting = settingService.findSetting(Key.SSH);
if (setting == null || setting.getValue() == null) {
SshSetting sshSetting = new SshSetting();
sshSetting.setPemPrivateKey(SshKeyUtils.generatePEMPrivateKey());
settingManager.saveSshSetting(sshSetting);
settingService.saveSshSetting(sshSetting);
}
setting = settingManager.findSetting(Key.GPG);
setting = settingService.findSetting(Key.GPG);
if (setting == null || setting.getValue() == null) {
GpgSetting gpgSetting = new GpgSetting();
settingManager.saveGpgSetting(gpgSetting);
settingService.saveGpgSetting(gpgSetting);
}
setting = settingManager.findSetting(Key.SECURITY);
setting = settingService.findSetting(Key.SECURITY);
if (setting == null) {
settingManager.saveSecuritySetting(new SecuritySetting());
settingService.saveSecuritySetting(new SecuritySetting());
}
setting = settingManager.findSetting(Key.ISSUE);
setting = settingService.findSetting(Key.ISSUE);
if (setting == null) {
LinkSpec link = new LinkSpec();
link.setName("Sub Issues");
@ -773,132 +763,132 @@ public class DefaultDataManager implements DataManager, Serializable {
link.setOpposite(new LinkSpecOpposite());
link.getOpposite().setName("Parent Issue");
link.setOrder(1);
linkSpecManager.create(link);
linkSpecService.create(link);
link = new LinkSpec();
link.setName("Related");
link.setMultiple(true);
link.setOrder(3);
linkSpecManager.create(link);
linkSpecService.create(link);
settingManager.saveIssueSetting(new GlobalIssueSetting());
settingService.saveIssueSetting(new GlobalIssueSetting());
}
setting = settingManager.findSetting(Key.PERFORMANCE);
setting = settingService.findSetting(Key.PERFORMANCE);
if (setting == null) {
settingManager.savePerformanceSetting(new PerformanceSetting());
settingService.savePerformanceSetting(new PerformanceSetting());
}
setting = settingManager.findSetting(Key.AUTHENTICATOR);
setting = settingService.findSetting(Key.AUTHENTICATOR);
if (setting == null) {
settingManager.saveAuthenticator(null);
settingService.saveAuthenticator(null);
}
setting = settingManager.findSetting(Key.JOB_EXECUTORS);
setting = settingService.findSetting(Key.JOB_EXECUTORS);
if (setting == null)
settingManager.saveJobExecutors(new ArrayList<>());
setting = settingManager.findSetting(Key.GROOVY_SCRIPTS);
settingService.saveJobExecutors(new ArrayList<>());
setting = settingService.findSetting(Key.GROOVY_SCRIPTS);
if (setting == null) {
settingManager.saveGroovyScripts(Lists.newArrayList());
settingService.saveGroovyScripts(Lists.newArrayList());
}
setting = settingManager.findSetting(Key.PULL_REQUEST);
setting = settingService.findSetting(Key.PULL_REQUEST);
if (setting == null) {
settingManager.savePullRequestSetting(new GlobalPullRequestSetting());
settingService.savePullRequestSetting(new GlobalPullRequestSetting());
}
setting = settingManager.findSetting(Key.BUILD);
setting = settingService.findSetting(Key.BUILD);
if (setting == null) {
settingManager.saveBuildSetting(new GlobalBuildSetting());
settingService.saveBuildSetting(new GlobalBuildSetting());
}
setting = settingManager.findSetting(Key.PACK);
setting = settingService.findSetting(Key.PACK);
if (setting == null) {
settingManager.savePackSetting(new GlobalPackSetting());
settingService.savePackSetting(new GlobalPackSetting());
}
setting = settingManager.findSetting(Key.PROJECT);
setting = settingService.findSetting(Key.PROJECT);
if (setting == null) {
settingManager.saveProjectSetting(new GlobalProjectSetting());
settingService.saveProjectSetting(new GlobalProjectSetting());
}
setting = settingManager.findSetting(Key.SUBSCRIPTION_DATA);
setting = settingService.findSetting(Key.SUBSCRIPTION_DATA);
if (setting == null) {
settingManager.saveSubscriptionData(null);
settingService.saveSubscriptionData(null);
}
setting = settingManager.findSetting(Key.ALERT);
setting = settingService.findSetting(Key.ALERT);
if (setting == null) {
settingManager.saveAlertSetting(new AlertSetting());
settingService.saveAlertSetting(new AlertSetting());
}
setting = settingManager.findSetting(Key.AGENT);
setting = settingService.findSetting(Key.AGENT);
if (setting == null) {
settingManager.saveAgentSetting(new AgentSetting());
settingService.saveAgentSetting(new AgentSetting());
}
setting = settingManager.findSetting(Key.SERVICE_DESK_SETTING);
setting = settingService.findSetting(Key.SERVICE_DESK_SETTING);
if (setting == null) {
settingManager.saveServiceDeskSetting(null);
settingService.saveServiceDeskSetting(null);
} else if (setting.getValue() != null && !validator.validate(setting.getValue()).isEmpty()) {
manualConfigs.add(new ManualConfig("Specify Service Desk Setting", null,
setting.getValue(), new HashSet<>(), true) {
@Override
public void complete() {
settingManager.saveServiceDeskSetting((ServiceDeskSetting) getSetting());
settingService.saveServiceDeskSetting((ServiceDeskSetting) getSetting());
}
});
}
setting = settingManager.findSetting(Key.EMAIL_TEMPLATES);
setting = settingService.findSetting(Key.EMAIL_TEMPLATES);
if (setting == null) {
settingManager.saveEmailTemplates(new EmailTemplates());
settingService.saveEmailTemplates(new EmailTemplates());
} else {
var emailTemplates = (EmailTemplates) setting.getValue();
if (emailTemplates.getStopwatchOverdue() == null)
emailTemplates.setStopwatchOverdue(EmailTemplates.DEFAULT_STOPWATCH_OVERDUE);
if (emailTemplates.getPasswordReset() == null)
emailTemplates.setPasswordReset(EmailTemplates.DEFAULT_PASSWORD_RESET);
settingManager.saveEmailTemplates(emailTemplates);
settingService.saveEmailTemplates(emailTemplates);
}
setting = settingManager.findSetting(Key.CONTRIBUTED_SETTINGS);
setting = settingService.findSetting(Key.CONTRIBUTED_SETTINGS);
if (setting == null)
settingManager.saveContributedSettings(new LinkedHashMap<>());
settingService.saveContributedSettings(new LinkedHashMap<>());
setting = settingManager.findSetting(Key.MAIL_SERVICE);
setting = settingService.findSetting(Key.MAIL);
if (setting == null)
settingManager.saveMailService(null);
settingService.saveMailConnector(null);
setting = settingManager.findSetting(Key.BACKUP);
setting = settingService.findSetting(Key.BACKUP);
if (setting == null) {
settingManager.saveBackupSetting(null);
settingService.saveBackupSetting(null);
} else if (setting.getValue() != null && !validator.validate(setting.getValue()).isEmpty()) {
Serializable backupSetting = setting.getValue();
manualConfigs.add(new ManualConfig("Specify Backup Setting", null, backupSetting) {
@Override
public void complete() {
settingManager.saveBackupSetting((BackupSetting) getSetting());
settingService.saveBackupSetting((BackupSetting) getSetting());
}
});
}
setting = settingManager.findSetting(Key.BRANDING);
setting = settingService.findSetting(Key.BRANDING);
if (setting == null)
settingManager.saveBrandingSetting(new BrandingSetting());
settingService.saveBrandingSetting(new BrandingSetting());
setting = settingManager.findSetting(Key.CLUSTER_SETTING);
setting = settingService.findSetting(Key.CLUSTER_SETTING);
if (setting == null) {
ClusterSetting clusterSetting = new ClusterSetting();
clusterSetting.setReplicaCount(1);
settingManager.saveClusterSetting(clusterSetting);
settingService.saveClusterSetting(clusterSetting);
}
setting = settingManager.findSetting(Key.AUDIT);
setting = settingService.findSetting(Key.AUDIT);
if (setting == null) {
AuditSetting auditSetting = new AuditSetting();
settingManager.saveAuditSetting(auditSetting);
settingService.saveAuditSetting(auditSetting);
}
if (roleManager.get(Role.OWNER_ID) == null) {
if (roleService.get(Role.OWNER_ID) == null) {
Role owner = new Role();
owner.setName("Project Owner");
owner.setId(Role.OWNER_ID);
owner.setManageProject(true);
roleManager.replicate(owner);
roleManager.setupDefaults();
roleService.replicate(owner);
roleService.setupDefaults();
}
return manualConfigs;
@ -913,7 +903,7 @@ public class DefaultDataManager implements DataManager, Serializable {
@Override
public void execute() {
if (clusterManager.isLeaderServer()) {
if (clusterService.isLeaderServer()) {
File tempDir = FileUtils.createTempDir("backup");
try {
File backupDir = new File(Bootstrap.getSiteDir(), Upgrade.DB_BACKUP_DIR);
@ -942,7 +932,7 @@ public class DefaultDataManager implements DataManager, Serializable {
@Listen
public void on(SystemStarted event) {
scheduleBackup(settingManager.getBackupSetting());
scheduleBackup(settingService.getBackupSetting());
}
@Transactional
@ -952,13 +942,13 @@ public class DefaultDataManager implements DataManager, Serializable {
Setting setting = (Setting) event.getEntity();
if (setting.getKey() == Setting.Key.BACKUP) {
BackupSetting backupSetting = (BackupSetting) setting.getValue();
transactionManager.runAfterCommit(new ClusterRunnable() {
transactionService.runAfterCommit(new ClusterRunnable() {
private static final long serialVersionUID = 1L;
@Override
public void run() {
clusterManager.submitToAllServers(new ClusterTask<Void>() {
clusterService.submitToAllServers(new ClusterTask<Void>() {
private static final long serialVersionUID = 1L;
@ -978,11 +968,11 @@ public class DefaultDataManager implements DataManager, Serializable {
@Sessional
protected void notifyBackupError(Throwable e) {
alertManager.alert("Database auto-backup failed", escapeHtml5(getStackTraceAsString(e)), false);
alertService.alert("Database auto-backup failed", escapeHtml5(getStackTraceAsString(e)), false);
}
public Object writeReplace() throws ObjectStreamException {
return new ManagedSerializedForm(DataManager.class);
return new ManagedSerializedForm(DataService.class);
}
}

View File

@ -38,10 +38,8 @@ import java.util.regex.Pattern;
import javax.annotation.Nullable;
import javax.inject.Singleton;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.tuple.Triple;
import org.apache.shiro.crypto.AesCipherService;
import org.apache.sshd.common.config.keys.KeyUtils;
import org.apache.sshd.common.digest.BuiltinDigests;
import org.dom4j.Element;
@ -58,8 +56,8 @@ import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.buildspecmodel.inputspec.InputSpec;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.markdown.MarkdownManager;
import io.onedev.server.service.SettingService;
import io.onedev.server.markdown.MarkdownService;
import io.onedev.server.markdown.MentionParser;
import io.onedev.server.model.Issue;
import io.onedev.server.model.IssueComment;
@ -4610,8 +4608,8 @@ public class DataMigrator {
private Set<String> getMentioned108(Map<String, String> userIds, String content) {
Set<String> mentioned = new HashSet<>();
MarkdownManager markdownManager = OneDev.getInstance(MarkdownManager.class);
for (String userName : new MentionParser().parseMentions(markdownManager.render(content))) {
MarkdownService markdownService = OneDev.getInstance(MarkdownService.class);
for (String userName : new MentionParser().parseMentions(markdownService.render(content))) {
String userId = userIds.get(userName);
if (userId != null)
mentioned.add(userId);
@ -8144,7 +8142,7 @@ public class DataMigrator {
if (key.equals("SYSTEM_UUID")) {
Element valueElement = element.element("value");
if (valueElement != null) {
valueElement.setText(OneDev.getInstance(SettingManager.class).encryptUUID(valueElement.getText().trim()));
valueElement.setText(OneDev.getInstance(SettingService.class).encryptUUID(valueElement.getText().trim()));
}
} else if (key.equals("ALERT")) {
Element valueElement = element.element("value");
@ -8327,4 +8325,28 @@ public class DataMigrator {
}
}
private void migrate212(File dataDir, Stack<Integer> versions) {
for (File file : dataDir.listFiles()) {
if (file.getName().startsWith("Settings.xml")) {
VersionedXmlDoc dom = VersionedXmlDoc.fromFile(file);
for (Element element : dom.getRootElement().elements()) {
var keyElement = element.element("key");
if (keyElement.getTextTrim().equals("MAIL_SERVICE")) {
keyElement.setText("MAIL");
Element valueElement = element.element("value");
if (valueElement != null) {
var className = valueElement.attributeValue("class");
className = className.replace(".mailservice.", ".mail.");
className = className.replace("Office365MailService", "Office365Connector");
className = className.replace("GmailMailService", "GmailConnector");
className = className.replace("SmtpImapMailService", "SmtpImapConnector");
className = className.replace("SendgridMailService", "SendgridConnector");
valueElement.addAttribute("class", className);
}
}
}
dom.writeToFile(file, false);
}
}
}
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.AgentLastUsedDate;
import io.onedev.server.persistence.dao.EntityManager;
public interface AgentLastUsedDateManager extends EntityManager<AgentLastUsedDate> {
void create(AgentLastUsedDate lastUsedDate);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.BuildDependence;
import io.onedev.server.persistence.dao.EntityManager;
public interface BuildDependenceManager extends EntityManager<BuildDependence> {
void create(BuildDependence dependence);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.DashboardVisit;
import io.onedev.server.persistence.dao.EntityManager;
public interface DashboardVisitManager extends EntityManager<DashboardVisit> {
void createOrUpdate(DashboardVisit visit);
}

View File

@ -1,12 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.GitLfsLock;
import io.onedev.server.persistence.dao.EntityManager;
public interface GitLfsLockManager extends EntityManager<GitLfsLock> {
GitLfsLock find(String path);
void create(GitLfsLock lock);
}

View File

@ -1,63 +0,0 @@
package io.onedev.server.entitymanager;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import io.onedev.server.model.Issue;
import io.onedev.server.model.IssueChange;
import io.onedev.server.model.Iteration;
import io.onedev.server.model.LinkSpec;
import io.onedev.server.model.User;
import io.onedev.server.persistence.dao.EntityManager;
public interface IssueChangeManager extends EntityManager<IssueChange> {
void addLink(LinkSpec spec, Issue issue, Issue linkedIssue, boolean opposite);
void removeLink(LinkSpec spec, Issue issue, Issue linkedIssue, boolean opposite);
void changeLink(LinkSpec spec, Issue issue, @Nullable Issue prevLinkedIssue, @Nullable Issue linkedIssue, boolean opposite);
void changeTitle(Issue issue, String title);
void changeOwnEstimatedTime(Issue issue, int ownEstimatedTime);
void changeOwnSpentTime(Issue issue, int ownSpentTime);
void changeTotalEstimatedTime(Issue issue, int totalEstimatedTime);
void changeTotalSpentTime(Issue issue, int totalSpentTime);
void changeDescription(Issue issue, String description);
void changeConfidential(Issue issue, boolean confidential);
void changeFields(Issue issue, Map<String, Object> fieldValues);
void changeIterations(Issue issue, Collection<Iteration> iterations);
void create(IssueChange change, @Nullable String note);
void addSchedule(Issue issue, Iteration iteration);
void changeSchedule(List<Issue> issues, @Nullable Iteration addIteration,
@Nullable Iteration removeIteration, boolean sendNotifications);
void removeSchedule(Issue issue, Iteration iteration);
void changeState(Issue issue, String state, Map<String, Object> fieldValues,
Collection<String> promptFields, Collection<String> removeFields, @Nullable String comment);
void batchUpdate(Iterator<? extends Issue> issues, @Nullable String state, @Nullable Boolean confidential,
@Nullable Collection<Iteration> iterations, Map<String, Object> fieldValues,
@Nullable String comment, boolean sendNotifications);
List<IssueChange> queryAfter(Long projectId, Long afterChangeId, int count);
List<IssueChange> query(User submitter, Date fromDate, Date toDate);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.IssueCommentRevision;
import io.onedev.server.persistence.dao.EntityManager;
public interface IssueCommentRevisionManager extends EntityManager<IssueCommentRevision> {
void create(IssueCommentRevision revision);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.IssueDescriptionRevision;
import io.onedev.server.persistence.dao.EntityManager;
public interface IssueDescriptionRevisionManager extends EntityManager<IssueDescriptionRevision> {
void create(IssueDescriptionRevision revision);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.IssueVote;
import io.onedev.server.persistence.dao.EntityManager;
public interface IssueVoteManager extends EntityManager<IssueVote> {
void create(IssueVote vote);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.ProjectLastActivityDate;
import io.onedev.server.persistence.dao.EntityManager;
public interface ProjectLastEventDateManager extends EntityManager<ProjectLastActivityDate> {
void create(ProjectLastActivityDate lastEventDate);
}

View File

@ -1,9 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.PullRequestAssignment;
import io.onedev.server.persistence.dao.EntityManager;
public interface PullRequestAssignmentManager extends EntityManager<PullRequestAssignment> {
void create(PullRequestAssignment assignment);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.PullRequestCommentRevision;
import io.onedev.server.persistence.dao.EntityManager;
public interface PullRequestCommentRevisionManager extends EntityManager<PullRequestCommentRevision> {
void create(PullRequestCommentRevision revision);
}

View File

@ -1,10 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.PullRequestDescriptionRevision;
import io.onedev.server.persistence.dao.EntityManager;
public interface PullRequestDescriptionRevisionManager extends EntityManager<PullRequestDescriptionRevision> {
void create(PullRequestDescriptionRevision revision);
}

View File

@ -1,18 +0,0 @@
package io.onedev.server.entitymanager;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.PullRequestReview;
import io.onedev.server.persistence.dao.EntityManager;
import javax.annotation.Nullable;
import java.util.Collection;
public interface PullRequestReviewManager extends EntityManager<PullRequestReview> {
void review(PullRequest request, boolean approved, @Nullable String note);
void populateReviews(Collection<PullRequest> requests);
void createOrUpdate(PullRequestReview review);
}

View File

@ -1,28 +0,0 @@
package io.onedev.server.entitymanager.impl;
import com.google.common.base.Preconditions;
import io.onedev.server.entitymanager.AgentLastUsedDateManager;
import io.onedev.server.model.AgentLastUsedDate;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.BaseEntityManager;
import io.onedev.server.persistence.dao.Dao;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton
public class DefaultAgentLastUsedDateManager extends BaseEntityManager<AgentLastUsedDate> implements AgentLastUsedDateManager {
@Inject
public DefaultAgentLastUsedDateManager(Dao dao) {
super(dao);
}
@Transactional
@Override
public void create(AgentLastUsedDate lastUsedDate) {
Preconditions.checkState(lastUsedDate.isNew());
dao.persist(lastUsedDate);
}
}

View File

@ -1,28 +0,0 @@
package io.onedev.server.entitymanager.impl;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.common.base.Preconditions;
import io.onedev.server.entitymanager.BuildDependenceManager;
import io.onedev.server.model.BuildDependence;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.BaseEntityManager;
import io.onedev.server.persistence.dao.Dao;
@Singleton
public class DefaultBuildDependenceManager extends BaseEntityManager<BuildDependence> implements BuildDependenceManager {
@Inject
public DefaultBuildDependenceManager(Dao dao) {
super(dao);
}
@Transactional
@Override
public void create(BuildDependence dependence) {
Preconditions.checkState(dependence.isNew());
dao.persist(dependence);
}
}

View File

@ -1,38 +0,0 @@
package io.onedev.server.entitymanager.impl;
import io.onedev.server.entitymanager.DashboardVisitManager;
import io.onedev.server.model.DashboardVisit;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.BaseEntityManager;
import io.onedev.server.persistence.dao.Dao;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List;
@Singleton
public class DefaultDashboardVisitManager extends BaseEntityManager<DashboardVisit>
implements DashboardVisitManager {
@Inject
public DefaultDashboardVisitManager(Dao dao) {
super(dao);
}
@Override
public List<DashboardVisit> query() {
return query(true);
}
@Override
public int count() {
return count(true);
}
@Transactional
@Override
public void createOrUpdate(DashboardVisit visit) {
dao.persist(visit);
}
}

View File

@ -1,29 +0,0 @@
package io.onedev.server.entitymanager.impl;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.common.base.Preconditions;
import io.onedev.server.entitymanager.IssueCommentRevisionManager;
import io.onedev.server.model.IssueCommentRevision;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.BaseEntityManager;
import io.onedev.server.persistence.dao.Dao;
@Singleton
public class DefaultIssueCommentRevisionManager extends BaseEntityManager<IssueCommentRevision>
implements IssueCommentRevisionManager {
@Inject
public DefaultIssueCommentRevisionManager(Dao dao) {
super(dao);
}
@Transactional
@Override
public void create(IssueCommentRevision revision) {
Preconditions.checkArgument(revision.isNew());
dao.persist(revision);
}
}

View File

@ -1,30 +0,0 @@
package io.onedev.server.entitymanager.impl;
import io.onedev.server.entitymanager.IssueDescriptionRevisionManager;
import io.onedev.server.model.IssueDescriptionRevision;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.BaseEntityManager;
import io.onedev.server.persistence.dao.Dao;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.common.base.Preconditions;
@Singleton
public class DefaultIssueDescriptionRevisionManager extends BaseEntityManager<IssueDescriptionRevision>
implements IssueDescriptionRevisionManager {
@Inject
public DefaultIssueDescriptionRevisionManager(Dao dao) {
super(dao);
}
@Transactional
@Override
public void create(IssueDescriptionRevision revision) {
Preconditions.checkArgument(revision.isNew());
dao.persist(revision);
}
}

View File

@ -1,30 +0,0 @@
package io.onedev.server.entitymanager.impl;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.common.base.Preconditions;
import io.onedev.server.entitymanager.PullRequestCommentRevisionManager;
import io.onedev.server.model.PullRequestCommentRevision;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.BaseEntityManager;
import io.onedev.server.persistence.dao.Dao;
@Singleton
public class DefaultPullRequestCommentRevisionManager extends BaseEntityManager<PullRequestCommentRevision>
implements PullRequestCommentRevisionManager {
@Inject
public DefaultPullRequestCommentRevisionManager(Dao dao) {
super(dao);
}
@Transactional
@Override
public void create(PullRequestCommentRevision revision) {
Preconditions.checkArgument(revision.isNew());
dao.persist(revision);
}
}

View File

@ -1,30 +0,0 @@
package io.onedev.server.entitymanager.impl;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.common.base.Preconditions;
import io.onedev.server.entitymanager.PullRequestDescriptionRevisionManager;
import io.onedev.server.model.PullRequestDescriptionRevision;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.BaseEntityManager;
import io.onedev.server.persistence.dao.Dao;
@Singleton
public class DefaultPullRequestDescriptionRevisionManager extends BaseEntityManager<PullRequestDescriptionRevision>
implements PullRequestDescriptionRevisionManager {
@Inject
public DefaultPullRequestDescriptionRevisionManager(Dao dao) {
super(dao);
}
@Transactional
@Override
public void create(PullRequestDescriptionRevision revision) {
Preconditions.checkArgument(revision.isNew());
dao.persist(revision);
}
}

View File

@ -10,10 +10,10 @@ import javax.inject.Singleton;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import io.onedev.server.entitymanager.IssueChangeManager;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.entitymanager.PullRequestChangeManager;
import io.onedev.server.entitymanager.PullRequestManager;
import io.onedev.server.service.IssueChangeService;
import io.onedev.server.service.IssueService;
import io.onedev.server.service.PullRequestChangeService;
import io.onedev.server.service.PullRequestService;
import io.onedev.server.event.Listen;
import io.onedev.server.event.project.codecomment.CodeCommentCreated;
import io.onedev.server.event.project.codecomment.CodeCommentEdited;
@ -28,7 +28,7 @@ import io.onedev.server.event.project.pullrequest.PullRequestChanged;
import io.onedev.server.event.project.pullrequest.PullRequestCommentCreated;
import io.onedev.server.event.project.pullrequest.PullRequestCommentEdited;
import io.onedev.server.event.project.pullrequest.PullRequestOpened;
import io.onedev.server.markdown.MarkdownManager;
import io.onedev.server.markdown.MarkdownService;
import io.onedev.server.model.CodeComment;
import io.onedev.server.model.Issue;
import io.onedev.server.model.IssueChange;
@ -44,36 +44,30 @@ import io.onedev.server.model.support.pullrequest.changedata.PullRequestReferenc
import io.onedev.server.persistence.annotation.Transactional;
@Singleton
public class DefaultReferenceChangeManager implements ReferenceChangeManager {
private final IssueManager issueManager;
private final PullRequestManager pullRequestManager;
private final IssueChangeManager issueChangeManager;
private final PullRequestChangeManager pullRequestChangeManager;
private final MarkdownManager markdownManager;
public class DefaultReferenceChangeService implements ReferenceChangeService {
@Inject
public DefaultReferenceChangeManager(IssueManager issueManager,
PullRequestManager pullRequestManager, IssueChangeManager issueChangeManager,
PullRequestChangeManager pullRequestChangeManager, MarkdownManager markdownManager) {
this.issueManager = issueManager;
this.pullRequestManager = pullRequestManager;
this.issueChangeManager = issueChangeManager;
this.pullRequestChangeManager = pullRequestChangeManager;
this.markdownManager = markdownManager;
}
private IssueService issueService;
@Inject
private PullRequestService pullRequestService;
@Inject
private IssueChangeService issueChangeService;
@Inject
private PullRequestChangeService pullRequestChangeService;
@Inject
private MarkdownService markdownService;
@Override
public void addReferenceChange(User user, Issue issue, String markdown) {
if (markdown != null) {
Document document = Jsoup.parseBodyFragment(markdownManager.render(markdown));
Document document = Jsoup.parseBodyFragment(markdownService.render(markdown));
for (var reference: extractReferences(document, issue.getProject())) {
if (reference instanceof IssueReference) {
var referencedIssue = issueManager.find(reference.getProject(), reference.getNumber());
var referencedIssue = issueService.find(reference.getProject(), reference.getNumber());
if (referencedIssue != null && !referencedIssue.equals(issue)) {
boolean found = false;
for (var change : referencedIssue.getChanges()) {
@ -93,11 +87,11 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user);
change.setIssue(referencedIssue);
referencedIssue.getChanges().add(change);
issueChangeManager.create(change, null);
issueChangeService.create(change, null);
}
}
} else if (reference instanceof PullRequestReference) {
var referencedPullRequest = pullRequestManager.find(reference.getProject(), reference.getNumber());
var referencedPullRequest = pullRequestService.find(reference.getProject(), reference.getNumber());
if (referencedPullRequest != null) {
boolean found = false;
for (var change: referencedPullRequest.getChanges()) {
@ -117,7 +111,7 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user);
change.setRequest(referencedPullRequest);
referencedPullRequest.getChanges().add(change);
pullRequestChangeManager.create(change, null);
pullRequestChangeService.create(change, null);
}
}
}
@ -129,10 +123,10 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
@Override
public void addReferenceChange(User user, PullRequest request, String markdown) {
if (markdown != null) {
Document document = Jsoup.parseBodyFragment(markdownManager.render(markdown));
Document document = Jsoup.parseBodyFragment(markdownService.render(markdown));
for (var reference: extractReferences(document, request.getTargetProject())) {
if (reference instanceof IssueReference) {
var referencedIssue = issueManager.find(reference.getProject(), reference.getNumber());
var referencedIssue = issueService.find(reference.getProject(), reference.getNumber());
if (referencedIssue != null) {
boolean found = false;
for (var change : referencedIssue.getChanges()) {
@ -152,11 +146,11 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user);
change.setIssue(referencedIssue);
referencedIssue.getChanges().add(change);
issueChangeManager.create(change, null);
issueChangeService.create(change, null);
}
}
} else if (reference instanceof PullRequestReference) {
var referencedPullRequest = pullRequestManager.find(reference.getProject(), reference.getNumber());
var referencedPullRequest = pullRequestService.find(reference.getProject(), reference.getNumber());
if (referencedPullRequest != null && !referencedPullRequest.equals(request)) {
boolean found = false;
for (var change: referencedPullRequest.getChanges()) {
@ -176,7 +170,7 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user);
change.setRequest(referencedPullRequest);
referencedPullRequest.getChanges().add(change);
pullRequestChangeManager.create(change, null);
pullRequestChangeService.create(change, null);
}
}
}
@ -187,10 +181,10 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
@Override
public void addReferenceChange(User user, CodeComment comment, String markdown) {
if (markdown != null) {
Document document = Jsoup.parseBodyFragment(markdownManager.render(markdown));
Document document = Jsoup.parseBodyFragment(markdownService.render(markdown));
for (var reference: extractReferences(document, comment.getProject())) {
if (reference instanceof IssueReference) {
var referencedIssue = issueManager.find(reference.getProject(), reference.getNumber());
var referencedIssue = issueService.find(reference.getProject(), reference.getNumber());
if (referencedIssue != null) {
boolean found = false;
for (var change : referencedIssue.getChanges()) {
@ -210,11 +204,11 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user);
change.setIssue(referencedIssue);
referencedIssue.getChanges().add(change);
issueChangeManager.create(change, null);
issueChangeService.create(change, null);
}
}
} else if (reference instanceof PullRequestReference) {
var referencedPullRequest = pullRequestManager.find(reference.getProject(), reference.getNumber());
var referencedPullRequest = pullRequestService.find(reference.getProject(), reference.getNumber());
if (referencedPullRequest != null) {
boolean found = false;
for (var change: referencedPullRequest.getChanges()) {
@ -234,7 +228,7 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user);
change.setRequest(referencedPullRequest);
referencedPullRequest.getChanges().add(change);
pullRequestChangeManager.create(change, null);
pullRequestChangeService.create(change, null);
}
}
}

View File

@ -9,7 +9,7 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.model.Project;
public abstract class EntityReference implements Serializable {
@ -30,7 +30,7 @@ public abstract class EntityReference implements Serializable {
}
public Project getProject() {
return OneDev.getInstance(ProjectManager.class).load(projectId);
return OneDev.getInstance(ProjectService.class).load(projectId);
}
public Long getProjectId() {
@ -59,7 +59,7 @@ public abstract class EntityReference implements Serializable {
}
public static EntityReference of(String type, String referenceString, @Nullable Project currentProject) {
var projectManager = OneDev.getInstance(ProjectManager.class);
var projectService = OneDev.getInstance(ProjectService.class);
var index = referenceString.indexOf('#');
if (index != -1) {
var projectPath = referenceString.substring(0, index);
@ -70,7 +70,7 @@ public abstract class EntityReference implements Serializable {
else
throw new ValidationException("Reference project not specified: " + referenceString);
} else {
var project = projectManager.findByPath(projectPath);
var project = projectService.findByPath(projectPath);
if (project != null)
return EntityReference.of(type, project, number);
else
@ -81,7 +81,7 @@ public abstract class EntityReference implements Serializable {
if (index != -1) {
var projectKey = referenceString.substring(0, index);
var number = parseReferenceNumber(referenceString.substring(index + 1));
var project = projectManager.findByKey(projectKey);
var project = projectService.findByKey(projectKey);
if (project != null)
return EntityReference.of(type, project, number);
else

View File

@ -7,7 +7,7 @@ import io.onedev.server.model.Issue;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.User;
public interface ReferenceChangeManager {
public interface ReferenceChangeService {
void addReferenceChange(User user, Issue issue, @Nullable String markdown);

View File

@ -21,8 +21,8 @@ import com.google.common.collect.ImmutableSet;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.SettingService;
import io.onedev.server.model.Project;
import io.onedev.server.util.HtmlUtils;
import io.onedev.server.util.TextNodeVisitor;
@ -48,7 +48,7 @@ public class ReferenceUtils {
public static String transformReferences(String text, @Nullable Project currentProject,
BiFunction<EntityReference, String, String> transformer) {
if (mayContainReferences(text)) {
var projectManager = OneDev.getInstance(ProjectManager.class);
var projectService = OneDev.getInstance(ProjectService.class);
var builder = new StringBuilder();
var index = 0;
var matcher = PATTERN.matcher(text);
@ -56,11 +56,11 @@ public class ReferenceUtils {
Project project;
var projectKey = matcher.group("projectKey");
if (projectKey != null) {
project = projectManager.findByKey(projectKey);
project = projectService.findByKey(projectKey);
} else {
var projectPath = matcher.group("projectPath");
if (projectPath != null)
project = projectManager.findByPath(projectPath);
project = projectService.findByPath(projectPath);
else
project = currentProject;
}
@ -78,7 +78,7 @@ public class ReferenceUtils {
} else {
text = transformer.apply(null, text);
}
var issueSetting = OneDev.getInstance(SettingManager.class).getIssueSetting();
var issueSetting = OneDev.getInstance(SettingService.class).getIssueSetting();
for (var entry: issueSetting.getExternalIssueTransformers().getEntries()) {
text = text.replaceAll(entry.getPattern(), entry.getReplaceWith());
}

View File

@ -3,13 +3,13 @@ package io.onedev.server.event;
import io.onedev.commons.loader.AppLoader;
import io.onedev.commons.loader.ManagedSerializedForm;
import io.onedev.commons.utils.LockUtils;
import io.onedev.server.cluster.ClusterManager;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.cluster.ClusterService;
import io.onedev.server.service.ProjectService;
import io.onedev.server.event.project.ProjectDeleted;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.event.project.ActiveServerChanged;
import io.onedev.server.persistence.SessionManager;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.persistence.SessionService;
import io.onedev.server.persistence.TransactionService;
import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger;
@ -28,25 +28,25 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
private static final Logger logger = LoggerFactory.getLogger(DefaultListenerRegistry.class);
private final ProjectManager projectManager;
private final ProjectService projectService;
private final TransactionManager transactionManager;
private final TransactionService transactionService;
private final SessionManager sessionManager;
private final SessionService sessionService;
private final ClusterManager clusterManager;
private final ClusterService clusterService;
private volatile Map<Object, Collection<Method>> listenerMethods;
private final Map<Class<?>, Collection<Listener>> listeners = new ConcurrentHashMap<>();
@Inject
public DefaultListenerRegistry(ProjectManager projectManager, ClusterManager clusterManager,
TransactionManager transactionManager, SessionManager sessionManager) {
this.projectManager = projectManager;
this.transactionManager = transactionManager;
this.clusterManager = clusterManager;
this.sessionManager = sessionManager;
public DefaultListenerRegistry(ProjectService projectService, ClusterService clusterService,
TransactionService transactionService, SessionService sessionService) {
this.projectService = projectService;
this.transactionService = transactionService;
this.clusterService = clusterService;
this.sessionService = sessionService;
}
public Object writeReplace() throws ObjectStreamException {
@ -110,17 +110,17 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
if (event instanceof ProjectEvent) {
ProjectEvent projectEvent = (ProjectEvent) event;
Long projectId = projectEvent.getProject().getId();
transactionManager.runAfterCommit(() -> projectManager.submitToActiveServer(projectId, () -> {
transactionService.runAfterCommit(() -> projectService.submitToActiveServer(projectId, () -> {
SecurityUtils.bindAsSystem();
try {
String lockName = projectEvent.getLockName();
if (lockName != null) {
LockUtils.call(lockName, true, () -> {
sessionManager.run(() -> invokeListeners(event));
sessionService.run(() -> invokeListeners(event));
return null;
});
} else {
sessionManager.run(() -> invokeListeners(event));
sessionService.run(() -> invokeListeners(event));
}
} catch (Exception e) {
logger.error("Error invoking listeners", e);
@ -130,11 +130,11 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
} else if (event instanceof ProjectDeleted) {
ProjectDeleted projectDeleted = (ProjectDeleted) event;
Long projectId = projectDeleted.getProjectId();
String activeServer = projectManager.getActiveServer(projectId, false);
String activeServer = projectService.getActiveServer(projectId, false);
if (activeServer != null) {
transactionManager.runAfterCommit(() -> clusterManager.submitToServer(activeServer, () -> {
transactionService.runAfterCommit(() -> clusterService.submitToServer(activeServer, () -> {
try {
sessionManager.run(() -> invokeListeners(event));
sessionService.run(() -> invokeListeners(event));
} catch (Exception e) {
logger.error("Error invoking listeners", e);
}
@ -143,9 +143,9 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
}
} else if (event instanceof ActiveServerChanged) {
ActiveServerChanged activeServerChanged = (ActiveServerChanged) event;
transactionManager.runAfterCommit(() -> clusterManager.submitToServer(activeServerChanged.getActiveServer(), () -> {
transactionService.runAfterCommit(() -> clusterService.submitToServer(activeServerChanged.getActiveServer(), () -> {
try {
sessionManager.run(() -> invokeListeners(event));
sessionService.run(() -> invokeListeners(event));
} catch (Exception e) {
logger.error("Error invoking listeners", e);
}

View File

@ -1,7 +1,7 @@
package io.onedev.server.event.agent;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.AgentManager;
import io.onedev.server.service.AgentService;
import io.onedev.server.event.Event;
import io.onedev.server.model.Agent;
@ -14,7 +14,7 @@ public abstract class AgentEvent extends Event {
}
public Agent getAgent() {
return OneDev.getInstance(AgentManager.class).load(agentId);
return OneDev.getInstance(AgentService.class).load(agentId);
}
}

View File

@ -1,15 +1,15 @@
package io.onedev.server.event.project;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.ProjectService;
import io.onedev.server.service.UserService;
import io.onedev.server.event.Event;
import io.onedev.server.model.Project;
import io.onedev.server.model.User;
import io.onedev.server.model.support.LastActivity;
import io.onedev.server.notification.ActivityDetail;
import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
import javax.annotation.Nullable;
import java.io.Serializable;
@ -35,12 +35,12 @@ public abstract class ProjectEvent extends Event implements Serializable {
}
public Project getProject() {
return OneDev.getInstance(ProjectManager.class).load(projectId);
return OneDev.getInstance(ProjectService.class).load(projectId);
}
@Nullable
public User getUser() {
return userId != null? OneDev.getInstance(UserManager.class).load(userId): null;
return userId != null? OneDev.getInstance(UserService.class).load(userId): null;
}
public Date getDate() {
@ -105,7 +105,7 @@ public abstract class ProjectEvent extends Event implements Serializable {
}
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getProject(), true);
return OneDev.getInstance(UrlService.class).urlFor(getProject(), true);
}
@Nullable

View File

@ -16,7 +16,7 @@ import io.onedev.server.util.CommitAware;
import io.onedev.server.util.ProjectScopedCommit;
import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.PlainText;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
public class RefUpdated extends ProjectEvent implements CommitAware {
@ -105,7 +105,7 @@ public class RefUpdated extends ProjectEvent implements CommitAware {
@Override
public String getUrl() {
if (newCommitId != null)
return OneDev.getInstance(UrlManager.class).urlFor(getProject(), newCommitId, true);
return OneDev.getInstance(UrlService.class).urlFor(getProject(), newCommitId, true);
else
throw new UnsupportedOperationException();
}

View File

@ -5,8 +5,8 @@ import java.util.Date;
import org.eclipse.jgit.lib.ObjectId;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.web.UrlManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.web.UrlService;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.model.Build;
import io.onedev.server.model.User;
@ -27,7 +27,7 @@ public abstract class BuildEvent extends ProjectEvent implements CommitAware {
}
public Build getBuild() {
return OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(BuildService.class).load(buildId);
}
@Override
@ -48,7 +48,7 @@ public abstract class BuildEvent extends ProjectEvent implements CommitAware {
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getBuild(), true);
return OneDev.getInstance(UrlService.class).urlFor(getBuild(), true);
}
}

View File

@ -3,8 +3,8 @@ package io.onedev.server.event.project.codecomment;
import java.util.Date;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.CodeCommentManager;
import io.onedev.server.web.UrlManager;
import io.onedev.server.service.CodeCommentService;
import io.onedev.server.web.UrlService;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.model.CodeComment;
import io.onedev.server.model.User;
@ -26,12 +26,12 @@ public abstract class CodeCommentEvent extends ProjectEvent {
}
public CodeComment getComment() {
return OneDev.getInstance(CodeCommentManager.class).load(commentId);
return OneDev.getInstance(CodeCommentService.class).load(commentId);
}
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getComment(), true);
return OneDev.getInstance(UrlService.class).urlFor(getComment(), true);
}
}

View File

@ -1,8 +1,8 @@
package io.onedev.server.event.project.codecomment;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.CodeCommentReplyManager;
import io.onedev.server.web.UrlManager;
import io.onedev.server.service.CodeCommentReplyService;
import io.onedev.server.web.UrlService;
import io.onedev.server.model.CodeCommentReply;
import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText;
@ -19,7 +19,7 @@ public class CodeCommentReplyCreated extends CodeCommentEvent {
}
public CodeCommentReply getReply() {
return OneDev.getInstance(CodeCommentReplyManager.class).load(replyId);
return OneDev.getInstance(CodeCommentReplyService.class).load(replyId);
}
@Override
@ -34,7 +34,7 @@ public class CodeCommentReplyCreated extends CodeCommentEvent {
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getReply(), true);
return OneDev.getInstance(UrlService.class).urlFor(getReply(), true);
}
}

View File

@ -1,7 +1,7 @@
package io.onedev.server.event.project.codecomment;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.CodeCommentReplyManager;
import io.onedev.server.service.CodeCommentReplyService;
import io.onedev.server.model.CodeCommentReply;
import io.onedev.server.security.SecurityUtils;
@ -19,7 +19,7 @@ public class CodeCommentReplyEdited extends CodeCommentEvent {
}
public CodeCommentReply getReply() {
return OneDev.getInstance(CodeCommentReplyManager.class).load(replyId);
return OneDev.getInstance(CodeCommentReplyService.class).load(replyId);
}
@Override

View File

@ -3,8 +3,8 @@ package io.onedev.server.event.project.codecomment;
import javax.annotation.Nullable;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.CodeCommentStatusChangeManager;
import io.onedev.server.web.UrlManager;
import io.onedev.server.service.CodeCommentStatusChangeService;
import io.onedev.server.web.UrlService;
import io.onedev.server.model.CodeCommentStatusChange;
import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText;
@ -24,7 +24,7 @@ public class CodeCommentStatusChanged extends CodeCommentEvent {
}
public CodeCommentStatusChange getChange() {
return OneDev.getInstance(CodeCommentStatusChangeManager.class).load(changeId);
return OneDev.getInstance(CodeCommentStatusChangeService.class).load(changeId);
}
@Override
@ -47,7 +47,7 @@ public class CodeCommentStatusChanged extends CodeCommentEvent {
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getChange(), true);
return OneDev.getInstance(UrlService.class).urlFor(getChange(), true);
}
}

View File

@ -1,7 +1,7 @@
package io.onedev.server.event.project.issue;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.IssueChangeManager;
import io.onedev.server.service.IssueChangeService;
import io.onedev.server.model.Group;
import io.onedev.server.model.IssueChange;
import io.onedev.server.model.User;
@ -11,7 +11,7 @@ import io.onedev.server.util.CommitAware;
import io.onedev.server.util.ProjectScopedCommit;
import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
import javax.annotation.Nullable;
import java.util.Collection;
@ -36,7 +36,7 @@ public class IssueChanged extends IssueEvent implements CommitAware {
}
public IssueChange getChange() {
return OneDev.getInstance(IssueChangeManager.class).load(changeId);
return OneDev.getInstance(IssueChangeService.class).load(changeId);
}
@Override
@ -76,7 +76,7 @@ public class IssueChanged extends IssueEvent implements CommitAware {
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getChange(), true);
return OneDev.getInstance(UrlService.class).urlFor(getChange(), true);
}
@Override

View File

@ -1,8 +1,8 @@
package io.onedev.server.event.project.issue;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.IssueCommentManager;
import io.onedev.server.web.UrlManager;
import io.onedev.server.service.IssueCommentService;
import io.onedev.server.web.UrlService;
import io.onedev.server.model.IssueComment;
import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText;
@ -24,7 +24,7 @@ public class IssueCommentCreated extends IssueEvent {
}
public IssueComment getComment() {
return OneDev.getInstance(IssueCommentManager.class).load(commentId);
return OneDev.getInstance(IssueCommentService.class).load(commentId);
}
@Override
@ -48,7 +48,7 @@ public class IssueCommentCreated extends IssueEvent {
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getComment(), true);
return OneDev.getInstance(UrlService.class).urlFor(getComment(), true);
}
}

View File

@ -1,7 +1,7 @@
package io.onedev.server.event.project.issue;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.IssueCommentManager;
import io.onedev.server.service.IssueCommentService;
import io.onedev.server.model.IssueComment;
import io.onedev.server.security.SecurityUtils;
@ -19,7 +19,7 @@ public class IssueCommentEdited extends IssueEvent {
}
public IssueComment getComment() {
return OneDev.getInstance(IssueCommentManager.class).load(commentId);
return OneDev.getInstance(IssueCommentService.class).load(commentId);
}
@Override

View File

@ -3,7 +3,7 @@ package io.onedev.server.event.project.issue;
import java.util.Date;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.UserService;
import io.onedev.server.model.Issue;
public class IssueCommitsAttached extends IssueEvent {
@ -11,7 +11,7 @@ public class IssueCommitsAttached extends IssueEvent {
private static final long serialVersionUID = 1L;
public IssueCommitsAttached(Issue issue) {
super(OneDev.getInstance(UserManager.class).getSystem(), new Date(), issue);
super(OneDev.getInstance(UserService.class).getSystem(), new Date(), issue);
}
@Override

View File

@ -6,12 +6,12 @@ import java.util.HashMap;
import java.util.Map;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.service.IssueService;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.model.Group;
import io.onedev.server.model.Issue;
import io.onedev.server.model.User;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
public abstract class IssueEvent extends ProjectEvent {
@ -32,7 +32,7 @@ public abstract class IssueEvent extends ProjectEvent {
}
public Issue getIssue() {
return OneDev.getInstance(IssueManager.class).load(issueId);
return OneDev.getInstance(IssueService.class).load(issueId);
}
public abstract boolean affectsListing();
@ -52,7 +52,7 @@ public abstract class IssueEvent extends ProjectEvent {
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getIssue(), true);
return OneDev.getInstance(UrlService.class).urlFor(getIssue(), true);
}
public boolean isSendNotifications() {

View File

@ -8,8 +8,8 @@ import java.util.stream.Collectors;
import io.onedev.server.OneDev;
import io.onedev.server.buildspecmodel.inputspec.Input;
import io.onedev.server.entitymanager.GroupManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.GroupService;
import io.onedev.server.service.UserService;
import io.onedev.server.model.Group;
import io.onedev.server.model.Issue;
import io.onedev.server.model.User;
@ -47,12 +47,12 @@ public class IssueOpened extends IssueEvent implements CommitAware {
@Override
public Map<String, Collection<User>> getNewUsers() {
Map<String, Collection<User>> newUsers = new HashMap<>();
UserManager userManager = OneDev.getInstance(UserManager.class);
UserService userService = OneDev.getInstance(UserService.class);
for (Input field: getIssue().getFieldInputs().values()) {
if (field.getType().equals(FieldSpec.USER)) {
Set<User> usersOfField = field.getValues()
.stream()
.map(it->userManager.findByName(it))
.map(it->userService.findByName(it))
.filter(it->it!=null)
.collect(Collectors.toSet());
if (!usersOfField.isEmpty())
@ -65,11 +65,11 @@ public class IssueOpened extends IssueEvent implements CommitAware {
@Override
public Map<String, Group> getNewGroups() {
Map<String, Group> newGroups = new HashMap<>();
GroupManager groupManager = OneDev.getInstance(GroupManager.class);
GroupService groupService = OneDev.getInstance(GroupService.class);
for (Input field: getIssue().getFieldInputs().values()) {
if (field.getType().equals(FieldSpec.GROUP)) {
if (!field.getValues().isEmpty()) {
Group newGroup = groupManager.find(field.getValues().iterator().next());
Group newGroup = groupService.find(field.getValues().iterator().next());
if (newGroup != null)
newGroups.put(field.getName(), newGroup);
}

View File

@ -3,11 +3,11 @@ package io.onedev.server.event.project.pack;
import java.util.Date;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.PackManager;
import io.onedev.server.service.PackService;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.model.Pack;
import io.onedev.server.model.User;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
public abstract class PackEvent extends ProjectEvent {
@ -21,12 +21,12 @@ public abstract class PackEvent extends ProjectEvent {
}
public Pack getPack() {
return OneDev.getInstance(PackManager.class).load(packId);
return OneDev.getInstance(PackService.class).load(packId);
}
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getPack(), true);
return OneDev.getInstance(UrlService.class).urlFor(getPack(), true);
}
}

View File

@ -4,7 +4,7 @@ import java.text.MessageFormat;
import java.util.Date;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.service.UserService;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.User;
@ -30,7 +30,7 @@ public class PullRequestAssigned extends PullRequestEvent {
}
public User getAssignee() {
return OneDev.getInstance(UserManager.class).load(assigneeId);
return OneDev.getInstance(UserService.class).load(assigneeId);
}
}

View File

@ -3,7 +3,7 @@ package io.onedev.server.event.project.pullrequest;
import java.util.Date;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.service.BuildService;
import io.onedev.server.model.Build;
public class PullRequestBuildEvent extends PullRequestEvent {
@ -23,7 +23,7 @@ public class PullRequestBuildEvent extends PullRequestEvent {
}
public Build getBuild() {
return OneDev.getInstance(BuildManager.class).load(buildId);
return OneDev.getInstance(BuildService.class).load(buildId);
}
@Override

View File

@ -5,8 +5,8 @@ import javax.annotation.Nullable;
import org.eclipse.jgit.lib.ObjectId;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.PullRequestChangeManager;
import io.onedev.server.web.UrlManager;
import io.onedev.server.service.PullRequestChangeService;
import io.onedev.server.web.UrlService;
import io.onedev.server.model.PullRequestChange;
import io.onedev.server.model.support.pullrequest.MergePreview;
import io.onedev.server.model.support.pullrequest.changedata.PullRequestDiscardData;
@ -31,7 +31,7 @@ public class PullRequestChanged extends PullRequestEvent implements CommitAware
}
public PullRequestChange getChange() {
return OneDev.getInstance(PullRequestChangeManager.class).load(changeId);
return OneDev.getInstance(PullRequestChangeService.class).load(changeId);
}
@Override
@ -68,7 +68,7 @@ public class PullRequestChanged extends PullRequestEvent implements CommitAware
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getChange(), true);
return OneDev.getInstance(UrlService.class).urlFor(getChange(), true);
}
@Override

View File

@ -5,7 +5,7 @@ import io.onedev.server.model.CodeComment;
import io.onedev.server.model.PullRequest;
import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText;
import io.onedev.server.web.UrlManager;
import io.onedev.server.web.UrlService;
public class PullRequestCodeCommentCreated extends PullRequestCodeCommentEvent {
@ -27,7 +27,7 @@ public class PullRequestCodeCommentCreated extends PullRequestCodeCommentEvent {
@Override
public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getComment(), true);
return OneDev.getInstance(UrlService.class).urlFor(getComment(), true);
}
}

Some files were not shown because too many files have changed in this diff Show More