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> <artifactId>wicket-native-websocket-core</artifactId>
<version>${wicket.version}</version> <version>${wicket.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-guice</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.glassfish.jersey.containers</groupId> <groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId> <artifactId>jersey-container-servlet</artifactId>

View File

@ -274,6 +274,10 @@
<groupId>org.apache.wicket</groupId> <groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-core</artifactId> <artifactId>wicket-native-websocket-core</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-guice</artifactId>
</dependency>
<dependency> <dependency>
<groupId>commons-fileupload</groupId> <groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId> <artifactId>commons-fileupload</artifactId>
@ -374,7 +378,12 @@
<groupId>com.openai</groupId> <groupId>com.openai</groupId>
<artifactId>openai-java</artifactId> <artifactId>openai-java</artifactId>
<version>2.7.0</version> <version>2.7.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>9.2</version>
</dependency>
<dependency> <dependency>
<groupId>org.jetbrains.kotlin</groupId> <groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId> <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.KubernetesHelper;
import io.onedev.k8shelper.OsInfo; import io.onedev.k8shelper.OsInfo;
import io.onedev.server.annotation.Shallow; import io.onedev.server.annotation.Shallow;
import io.onedev.server.attachment.AttachmentManager; import io.onedev.server.attachment.AttachmentService;
import io.onedev.server.attachment.DefaultAttachmentManager; import io.onedev.server.attachment.DefaultAttachmentService;
import io.onedev.server.buildspec.BuildSpecSchemaResource; import io.onedev.server.buildspec.BuildSpecSchemaResource;
import io.onedev.server.buildspec.job.log.instruction.LogInstruction; import io.onedev.server.buildspec.job.log.instruction.LogInstruction;
import io.onedev.server.cluster.ClusterResource; 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.RestoreDatabase;
import io.onedev.server.commandhandler.Translate; import io.onedev.server.commandhandler.Translate;
import io.onedev.server.commandhandler.Upgrade; import io.onedev.server.commandhandler.Upgrade;
import io.onedev.server.data.DataManager; import io.onedev.server.data.DataService;
import io.onedev.server.data.DefaultDataManager; import io.onedev.server.data.DefaultDataService;
import io.onedev.server.entitymanager.AccessTokenAuthorizationManager; import io.onedev.server.entityreference.DefaultReferenceChangeService;
import io.onedev.server.entitymanager.AccessTokenManager; import io.onedev.server.entityreference.ReferenceChangeService;
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.event.DefaultListenerRegistry; import io.onedev.server.event.DefaultListenerRegistry;
import io.onedev.server.event.ListenerRegistry; import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.exception.handler.ExceptionHandler; 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.location.GitLocation;
import io.onedev.server.git.service.DefaultGitService; import io.onedev.server.git.service.DefaultGitService;
import io.onedev.server.git.service.GitService; import io.onedev.server.git.service.GitService;
import io.onedev.server.git.signatureverification.DefaultSignatureVerificationManager; import io.onedev.server.git.signatureverification.DefaultSignatureVerificationService;
import io.onedev.server.git.signatureverification.SignatureVerificationManager; import io.onedev.server.git.signatureverification.SignatureVerificationService;
import io.onedev.server.git.signatureverification.SignatureVerifier; 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.DefaultSessionDataStoreFactory;
import io.onedev.server.jetty.JettyManager; import io.onedev.server.jetty.JettyService;
import io.onedev.server.job.DefaultJobManager; import io.onedev.server.job.DefaultJobService;
import io.onedev.server.job.DefaultResourceAllocator; 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.ResourceAllocator;
import io.onedev.server.job.log.DefaultLogManager; import io.onedev.server.job.log.DefaultLogService;
import io.onedev.server.job.log.LogManager; import io.onedev.server.job.log.LogService;
import io.onedev.server.mail.DefaultMailManager; import io.onedev.server.mail.DefaultMailService;
import io.onedev.server.mail.MailManager; import io.onedev.server.mail.MailService;
import io.onedev.server.markdown.DefaultMarkdownManager; import io.onedev.server.markdown.DefaultMarkdownService;
import io.onedev.server.markdown.HtmlProcessor; 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.GroovyScript;
import io.onedev.server.model.support.administration.authenticator.Authenticator; import io.onedev.server.model.support.administration.authenticator.Authenticator;
import io.onedev.server.notification.BuildNotificationManager; 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.PullRequestNotificationManager;
import io.onedev.server.notification.WebHookManager; import io.onedev.server.notification.WebHookManager;
import io.onedev.server.pack.PackFilter; import io.onedev.server.pack.PackFilter;
import io.onedev.server.persistence.DefaultIdManager; import io.onedev.server.persistence.DefaultIdService;
import io.onedev.server.persistence.DefaultSessionFactoryManager; import io.onedev.server.persistence.DefaultSessionFactoryService;
import io.onedev.server.persistence.DefaultSessionManager; import io.onedev.server.persistence.DefaultSessionService;
import io.onedev.server.persistence.DefaultTransactionManager; import io.onedev.server.persistence.DefaultTransactionService;
import io.onedev.server.persistence.HibernateInterceptor; 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.PersistListener;
import io.onedev.server.persistence.PrefixedNamingStrategy; 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.SessionFactoryProvider;
import io.onedev.server.persistence.SessionInterceptor; 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.SessionProvider;
import io.onedev.server.persistence.TransactionInterceptor; 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.Sessional;
import io.onedev.server.persistence.annotation.Transactional; import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.Dao; 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.WebApplicationExceptionHandler;
import io.onedev.server.rest.resource.McpHelperResource; import io.onedev.server.rest.resource.McpHelperResource;
import io.onedev.server.rest.resource.ProjectResource; import io.onedev.server.rest.resource.ProjectResource;
import io.onedev.server.search.code.CodeIndexManager; import io.onedev.server.search.code.CodeIndexService;
import io.onedev.server.search.code.CodeSearchManager; import io.onedev.server.search.code.CodeSearchService;
import io.onedev.server.search.code.DefaultCodeIndexManager; import io.onedev.server.search.code.DefaultCodeIndexService;
import io.onedev.server.search.code.DefaultCodeSearchManager; import io.onedev.server.search.code.DefaultCodeSearchService;
import io.onedev.server.search.entitytext.CodeCommentTextManager; import io.onedev.server.search.entitytext.CodeCommentTextService;
import io.onedev.server.search.entitytext.DefaultCodeCommentTextManager; import io.onedev.server.search.entitytext.DefaultCodeCommentTextService;
import io.onedev.server.search.entitytext.DefaultIssueTextManager; import io.onedev.server.search.entitytext.DefaultIssueTextService;
import io.onedev.server.search.entitytext.DefaultPullRequestTextManager; import io.onedev.server.search.entitytext.DefaultPullRequestTextService;
import io.onedev.server.search.entitytext.IssueTextManager; import io.onedev.server.search.entitytext.IssueTextService;
import io.onedev.server.search.entitytext.PullRequestTextManager; import io.onedev.server.search.entitytext.PullRequestTextService;
import io.onedev.server.security.BasicAuthenticationFilter; import io.onedev.server.security.BasicAuthenticationFilter;
import io.onedev.server.security.BearerAuthenticationFilter; import io.onedev.server.security.BearerAuthenticationFilter;
import io.onedev.server.security.CodePullAuthorizationSource; 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.FilterChainConfigurator;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
import io.onedev.server.security.realm.GeneralAuthorizingRealm; 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.CommandCreator;
import io.onedev.server.ssh.DefaultSshAuthenticator; 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.SshAuthenticator;
import io.onedev.server.ssh.SshManager; import io.onedev.server.ssh.SshService;
import io.onedev.server.taskschedule.DefaultTaskScheduler; import io.onedev.server.taskschedule.DefaultTaskScheduler;
import io.onedev.server.taskschedule.TaskScheduler; import io.onedev.server.taskschedule.TaskScheduler;
import io.onedev.server.updatecheck.DefaultUpdateCheckManager; import io.onedev.server.updatecheck.DefaultUpdateCheckService;
import io.onedev.server.updatecheck.UpdateCheckManager; import io.onedev.server.updatecheck.UpdateCheckService;
import io.onedev.server.util.ScriptContribution; import io.onedev.server.util.ScriptContribution;
import io.onedev.server.util.concurrent.BatchWorkManager; import io.onedev.server.util.concurrent.BatchWorkExecutionService;
import io.onedev.server.util.concurrent.DefaultBatchWorkManager; import io.onedev.server.util.concurrent.DefaultBatchWorkExecutionService;
import io.onedev.server.util.concurrent.DefaultWorkExecutor; import io.onedev.server.util.concurrent.DefaultWorkExecutionService;
import io.onedev.server.util.concurrent.WorkExecutor; import io.onedev.server.util.concurrent.WorkExecutionService;
import io.onedev.server.util.jackson.ObjectMapperConfigurator; import io.onedev.server.util.jackson.ObjectMapperConfigurator;
import io.onedev.server.util.jackson.ObjectMapperProvider; import io.onedev.server.util.jackson.ObjectMapperProvider;
import io.onedev.server.util.jackson.git.GitObjectMapperConfigurator; import io.onedev.server.util.jackson.git.GitObjectMapperConfigurator;
import io.onedev.server.util.jackson.hibernate.HibernateObjectMapperConfigurator; import io.onedev.server.util.jackson.hibernate.HibernateObjectMapperConfigurator;
import io.onedev.server.util.oauth.DefaultOAuthTokenManager; import io.onedev.server.util.oauth.DefaultOAuthTokenService;
import io.onedev.server.util.oauth.OAuthTokenManager; import io.onedev.server.util.oauth.OAuthTokenService;
import io.onedev.server.util.xstream.CollectionConverter; import io.onedev.server.util.xstream.CollectionConverter;
import io.onedev.server.util.xstream.HibernateProxyConverter; import io.onedev.server.util.xstream.HibernateProxyConverter;
import io.onedev.server.util.xstream.MapConverter; 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.MessageInterpolator;
import io.onedev.server.validation.ShallowValidatorProvider; import io.onedev.server.validation.ShallowValidatorProvider;
import io.onedev.server.validation.ValidatorProvider; 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.DefaultWicketFilter;
import io.onedev.server.web.DefaultWicketServlet; import io.onedev.server.web.DefaultWicketServlet;
import io.onedev.server.web.ResourcePackScopeContribution; 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.WebApplication;
import io.onedev.server.web.avatar.AvatarManager; import io.onedev.server.web.avatar.AvatarService;
import io.onedev.server.web.avatar.DefaultAvatarManager; import io.onedev.server.web.avatar.DefaultAvatarService;
import io.onedev.server.web.component.diff.DiffRenderer; import io.onedev.server.web.component.diff.DiffRenderer;
import io.onedev.server.web.component.markdown.SourcePositionTrackExtension; import io.onedev.server.web.component.markdown.SourcePositionTrackExtension;
import io.onedev.server.web.component.markdown.emoji.EmojiExtension; 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.layout.AdministrationSettingContribution;
import io.onedev.server.web.page.project.blob.render.BlobRenderer; import io.onedev.server.web.page.project.blob.render.BlobRenderer;
import io.onedev.server.web.page.project.setting.ProjectSettingContribution; import io.onedev.server.web.page.project.setting.ProjectSettingContribution;
import io.onedev.server.web.upload.DefaultUploadManager; import io.onedev.server.web.upload.DefaultUploadService;
import io.onedev.server.web.upload.UploadManager; import io.onedev.server.web.upload.UploadService;
import io.onedev.server.web.websocket.AlertEventBroadcaster; import io.onedev.server.web.websocket.AlertEventBroadcaster;
import io.onedev.server.web.websocket.BuildEventBroadcaster; import io.onedev.server.web.websocket.BuildEventBroadcaster;
import io.onedev.server.web.websocket.CodeCommentEventBroadcaster; import io.onedev.server.web.websocket.CodeCommentEventBroadcaster;
import io.onedev.server.web.websocket.CommitIndexedBroadcaster; 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.IssueEventBroadcaster;
import io.onedev.server.web.websocket.PullRequestEventBroadcaster; import io.onedev.server.web.websocket.PullRequestEventBroadcaster;
import io.onedev.server.web.websocket.WebSocketManager; import io.onedev.server.web.websocket.WebSocketService;
import io.onedev.server.xodus.CommitInfoManager; import io.onedev.server.xodus.CommitInfoService;
import io.onedev.server.xodus.DefaultCommitInfoManager; import io.onedev.server.xodus.DefaultCommitInfoService;
import io.onedev.server.xodus.DefaultIssueInfoManager; import io.onedev.server.xodus.DefaultIssueInfoService;
import io.onedev.server.xodus.DefaultPullRequestInfoManager; import io.onedev.server.xodus.DefaultPullRequestInfoService;
import io.onedev.server.xodus.DefaultVisitInfoManager; import io.onedev.server.xodus.DefaultVisitInfoService;
import io.onedev.server.xodus.IssueInfoManager; import io.onedev.server.xodus.IssueInfoService;
import io.onedev.server.xodus.PullRequestInfoManager; import io.onedev.server.xodus.PullRequestInfoService;
import io.onedev.server.xodus.VisitInfoManager; import io.onedev.server.xodus.VisitInfoService;
import nl.altindag.ssl.SSLFactory; import nl.altindag.ssl.SSLFactory;
/** /**
@ -440,8 +440,8 @@ public class CoreModule extends AbstractPluginModule {
super.configure(); super.configure();
bind(ListenerRegistry.class).to(DefaultListenerRegistry.class); bind(ListenerRegistry.class).to(DefaultListenerRegistry.class);
bind(JettyManager.class).to(DefaultJettyManager.class); bind(JettyService.class).to(DefaultJettyService.class);
bind(ServletContextHandler.class).toProvider(DefaultJettyManager.class); bind(ServletContextHandler.class).toProvider(DefaultJettyService.class);
bind(ObjectMapper.class).toProvider(ObjectMapperProvider.class).in(Singleton.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 * HK2 to guice bridge can only search in explicit bindings in Guice
*/ */
bind(SshAuthenticator.class).to(DefaultSshAuthenticator.class); bind(SshAuthenticator.class).to(DefaultSshAuthenticator.class);
bind(SshManager.class).to(DefaultSshManager.class); bind(SshService.class).to(DefaultSshService.class);
bind(MarkdownManager.class).to(DefaultMarkdownManager.class); bind(MarkdownService.class).to(DefaultMarkdownService.class);
bind(SettingManager.class).to(DefaultSettingManager.class); bind(SettingService.class).to(DefaultSettingService.class);
bind(DataManager.class).to(DefaultDataManager.class); bind(DataService.class).to(DefaultDataService.class);
bind(TaskScheduler.class).to(DefaultTaskScheduler.class); bind(TaskScheduler.class).to(DefaultTaskScheduler.class);
bind(PullRequestCommentManager.class).to(DefaultPullRequestCommentManager.class); bind(PullRequestCommentService.class).to(DefaultPullRequestCommentService.class);
bind(CodeCommentManager.class).to(DefaultCodeCommentManager.class); bind(CodeCommentService.class).to(DefaultCodeCommentService.class);
bind(PullRequestManager.class).to(DefaultPullRequestManager.class); bind(PullRequestService.class).to(DefaultPullRequestService.class);
bind(PullRequestUpdateManager.class).to(DefaultPullRequestUpdateManager.class); bind(PullRequestUpdateService.class).to(DefaultPullRequestUpdateService.class);
bind(ProjectManager.class).to(DefaultProjectManager.class); bind(ProjectService.class).to(DefaultProjectService.class);
bind(ProjectLastEventDateManager.class).to(DefaultProjectLastEventDateManager.class); bind(ProjectLastEventDateService.class).to(DefaultProjectLastEventDateService.class);
bind(UserInvitationManager.class).to(DefaultUserInvitationManager.class); bind(UserInvitationService.class).to(DefaultUserInvitationService.class);
bind(PullRequestReviewManager.class).to(DefaultPullRequestReviewManager.class); bind(PullRequestReviewService.class).to(DefaultPullRequestReviewService.class);
bind(BuildManager.class).to(DefaultBuildManager.class); bind(BuildService.class).to(DefaultBuildService.class);
bind(BuildDependenceManager.class).to(DefaultBuildDependenceManager.class); bind(BuildDependenceService.class).to(DefaultBuildDependenceService.class);
bind(JobManager.class).to(DefaultJobManager.class); bind(JobService.class).to(DefaultJobService.class);
bind(JobCacheManager.class).to(DefaultJobCacheManager.class); bind(JobCacheService.class).to(DefaultJobCacheService.class);
bind(LogManager.class).to(DefaultLogManager.class); bind(LogService.class).to(DefaultLogService.class);
bind(MailManager.class).to(DefaultMailManager.class); bind(MailService.class).to(DefaultMailService.class);
bind(IssueManager.class).to(DefaultIssueManager.class); bind(IssueService.class).to(DefaultIssueService.class);
bind(IssueFieldManager.class).to(DefaultIssueFieldManager.class); bind(IssueFieldService.class).to(DefaultIssueFieldService.class);
bind(BuildParamManager.class).to(DefaultBuildParamManager.class); bind(BuildParamService.class).to(DefaultBuildParamService.class);
bind(UserAuthorizationManager.class).to(DefaultUserAuthorizationManager.class); bind(UserAuthorizationService.class).to(DefaultUserAuthorizationService.class);
bind(GroupAuthorizationManager.class).to(DefaultGroupAuthorizationManager.class); bind(GroupAuthorizationService.class).to(DefaultGroupAuthorizationService.class);
bind(PullRequestWatchManager.class).to(DefaultPullRequestWatchManager.class); bind(PullRequestWatchService.class).to(DefaultPullRequestWatchService.class);
bind(RoleManager.class).to(DefaultRoleManager.class); bind(RoleService.class).to(DefaultRoleService.class);
bind(CommitInfoManager.class).to(DefaultCommitInfoManager.class); bind(CommitInfoService.class).to(DefaultCommitInfoService.class);
bind(IssueInfoManager.class).to(DefaultIssueInfoManager.class); bind(IssueInfoService.class).to(DefaultIssueInfoService.class);
bind(VisitInfoManager.class).to(DefaultVisitInfoManager.class); bind(VisitInfoService.class).to(DefaultVisitInfoService.class);
bind(BatchWorkManager.class).to(DefaultBatchWorkManager.class); bind(BatchWorkExecutionService.class).to(DefaultBatchWorkExecutionService.class);
bind(WorkExecutor.class).to(DefaultWorkExecutor.class); bind(WorkExecutionService.class).to(DefaultWorkExecutionService.class);
bind(GroupManager.class).to(DefaultGroupManager.class); bind(GroupService.class).to(DefaultGroupService.class);
bind(IssueMentionManager.class).to(DefaultIssueMentionManager.class); bind(IssueMentionService.class).to(DefaultIssueMentionService.class);
bind(PullRequestMentionManager.class).to(DefaultPullRequestMentionManager.class); bind(PullRequestMentionService.class).to(DefaultPullRequestMentionService.class);
bind(CodeCommentMentionManager.class).to(DefaultCodeCommentMentionManager.class); bind(CodeCommentMentionService.class).to(DefaultCodeCommentMentionService.class);
bind(MembershipManager.class).to(DefaultMembershipManager.class); bind(MembershipService.class).to(DefaultMembershipService.class);
bind(PullRequestChangeManager.class).to(DefaultPullRequestChangeManager.class); bind(PullRequestChangeService.class).to(DefaultPullRequestChangeService.class);
bind(CodeCommentReplyManager.class).to(DefaultCodeCommentReplyManager.class); bind(CodeCommentReplyService.class).to(DefaultCodeCommentReplyService.class);
bind(CodeCommentStatusChangeManager.class).to(DefaultCodeCommentStatusChangeManager.class); bind(CodeCommentStatusChangeService.class).to(DefaultCodeCommentStatusChangeService.class);
bind(AttachmentManager.class).to(DefaultAttachmentManager.class); bind(AttachmentService.class).to(DefaultAttachmentService.class);
bind(PullRequestInfoManager.class).to(DefaultPullRequestInfoManager.class); bind(PullRequestInfoService.class).to(DefaultPullRequestInfoService.class);
bind(PullRequestNotificationManager.class); bind(PullRequestNotificationManager.class);
bind(CommitNotificationManager.class); bind(CommitNotificationManager.class);
bind(BuildNotificationManager.class); bind(BuildNotificationManager.class);
bind(PackNotificationManager.class); bind(PackNotificationManager.class);
bind(IssueNotificationManager.class); bind(IssueNotificationManager.class);
bind(CodeCommentNotificationManager.class); bind(CodeCommentNotificationManager.class);
bind(CodeCommentManager.class).to(DefaultCodeCommentManager.class); bind(CodeCommentService.class).to(DefaultCodeCommentService.class);
bind(AccessTokenManager.class).to(DefaultAccessTokenManager.class); bind(AccessTokenService.class).to(DefaultAccessTokenService.class);
bind(UserManager.class).to(DefaultUserManager.class); bind(UserService.class).to(DefaultUserService.class);
bind(IssueWatchManager.class).to(DefaultIssueWatchManager.class); bind(IssueWatchService.class).to(DefaultIssueWatchService.class);
bind(IssueChangeManager.class).to(DefaultIssueChangeManager.class); bind(IssueChangeService.class).to(DefaultIssueChangeService.class);
bind(IssueVoteManager.class).to(DefaultIssueVoteManager.class); bind(IssueVoteService.class).to(DefaultIssueVoteService.class);
bind(IssueWorkManager.class).to(DefaultIssueWorkManager.class); bind(IssueWorkService.class).to(DefaultIssueWorkService.class);
bind(IterationManager.class).to(DefaultIterationManager.class); bind(IterationService.class).to(DefaultIterationService.class);
bind(IssueCommentManager.class).to(DefaultIssueCommentManager.class); bind(IssueCommentService.class).to(DefaultIssueCommentService.class);
bind(IssueQueryPersonalizationManager.class).to(DefaultIssueQueryPersonalizationManager.class); bind(IssueQueryPersonalizationService.class).to(DefaultIssueQueryPersonalizationService.class);
bind(PullRequestQueryPersonalizationManager.class).to(DefaultPullRequestQueryPersonalizationManager.class); bind(PullRequestQueryPersonalizationService.class).to(DefaultPullRequestQueryPersonalizationService.class);
bind(CodeCommentQueryPersonalizationManager.class).to(DefaultCodeCommentQueryPersonalizationManager.class); bind(CodeCommentQueryPersonalizationService.class).to(DefaultCodeCommentQueryPersonalizationService.class);
bind(CommitQueryPersonalizationManager.class).to(DefaultCommitQueryPersonalizationManager.class); bind(CommitQueryPersonalizationService.class).to(DefaultCommitQueryPersonalizationService.class);
bind(BuildQueryPersonalizationManager.class).to(DefaultBuildQueryPersonalizationManager.class); bind(BuildQueryPersonalizationService.class).to(DefaultBuildQueryPersonalizationService.class);
bind(PackQueryPersonalizationManager.class).to(DefaultPackQueryPersonalizationManager.class); bind(PackQueryPersonalizationService.class).to(DefaultPackQueryPersonalizationService.class);
bind(PullRequestAssignmentManager.class).to(DefaultPullRequestAssignmentManager.class); bind(PullRequestAssignmentService.class).to(DefaultPullRequestAssignmentService.class);
bind(SshKeyManager.class).to(DefaultSshKeyManager.class); bind(SshKeyService.class).to(DefaultSshKeyService.class);
bind(BuildMetricManager.class).to(DefaultBuildMetricManager.class); bind(BuildMetricService.class).to(DefaultBuildMetricService.class);
bind(ReferenceChangeManager.class).to(DefaultReferenceChangeManager.class); bind(ReferenceChangeService.class).to(DefaultReferenceChangeService.class);
bind(GitLfsLockManager.class).to(DefaultGitLfsLockManager.class); bind(GitLfsLockService.class).to(DefaultGitLfsLockService.class);
bind(IssueScheduleManager.class).to(DefaultIssueScheduleManager.class); bind(IssueScheduleService.class).to(DefaultIssueScheduleService.class);
bind(LinkSpecManager.class).to(DefaultLinkSpecManager.class); bind(LinkSpecService.class).to(DefaultLinkSpecService.class);
bind(IssueLinkManager.class).to(DefaultIssueLinkManager.class); bind(IssueLinkService.class).to(DefaultIssueLinkService.class);
bind(IssueStateHistoryManager.class).to(DefaultIssueStateHistoryManager.class); bind(IssueStateHistoryService.class).to(DefaultIssueStateHistoryService.class);
bind(LinkAuthorizationManager.class).to(DefaultLinkAuthorizationManager.class); bind(LinkAuthorizationService.class).to(DefaultLinkAuthorizationService.class);
bind(EmailAddressManager.class).to(DefaultEmailAddressManager.class); bind(EmailAddressService.class).to(DefaultEmailAddressService.class);
bind(GpgKeyManager.class).to(DefaultGpgKeyManager.class); bind(GpgKeyService.class).to(DefaultGpgKeyService.class);
bind(IssueTextManager.class).to(DefaultIssueTextManager.class); bind(IssueTextService.class).to(DefaultIssueTextService.class);
bind(PullRequestTextManager.class).to(DefaultPullRequestTextManager.class); bind(PullRequestTextService.class).to(DefaultPullRequestTextService.class);
bind(CodeCommentTextManager.class).to(DefaultCodeCommentTextManager.class); bind(CodeCommentTextService.class).to(DefaultCodeCommentTextService.class);
bind(PendingSuggestionApplyManager.class).to(DefaultPendingSuggestionApplyManager.class); bind(PendingSuggestionApplyService.class).to(DefaultPendingSuggestionApplyService.class);
bind(IssueAuthorizationManager.class).to(DefaultIssueAuthorizationManager.class); bind(IssueAuthorizationService.class).to(DefaultIssueAuthorizationService.class);
bind(DashboardManager.class).to(DefaultDashboardManager.class); bind(DashboardService.class).to(DefaultDashboardService.class);
bind(DashboardUserShareManager.class).to(DefaultDashboardUserShareManager.class); bind(DashboardUserShareService.class).to(DefaultDashboardUserShareService.class);
bind(DashboardGroupShareManager.class).to(DefaultDashboardGroupShareManager.class); bind(DashboardGroupShareService.class).to(DefaultDashboardGroupShareService.class);
bind(DashboardVisitManager.class).to(DefaultDashboardVisitManager.class); bind(DashboardVisitService.class).to(DefaultDashboardVisitService.class);
bind(LabelSpecManager.class).to(DefaultLabelSpecManager.class); bind(LabelSpecService.class).to(DefaultLabelSpecService.class);
bind(ProjectLabelManager.class).to(DefaultProjectLabelManager.class); bind(ProjectLabelService.class).to(DefaultProjectLabelService.class);
bind(BuildLabelManager.class).to(DefaultBuildLabelManager.class); bind(BuildLabelService.class).to(DefaultBuildLabelService.class);
bind(PackLabelManager.class).to(DefaultPackLabelManager.class); bind(PackLabelService.class).to(DefaultPackLabelService.class);
bind(PullRequestLabelManager.class).to(DefaultPullRequestLabelManager.class); bind(PullRequestLabelService.class).to(DefaultPullRequestLabelService.class);
bind(IssueTouchManager.class).to(DefaultIssueTouchManager.class); bind(IssueTouchService.class).to(DefaultIssueTouchService.class);
bind(PullRequestTouchManager.class).to(DefaultPullRequestTouchManager.class); bind(PullRequestTouchService.class).to(DefaultPullRequestTouchService.class);
bind(CodeCommentTouchManager.class).to(DefaultCodeCommentTouchManager.class); bind(CodeCommentTouchService.class).to(DefaultCodeCommentTouchService.class);
bind(AlertManager.class).to(DefaultAlertManager.class); bind(AlertService.class).to(DefaultAlertService.class);
bind(UpdateCheckManager.class).to(DefaultUpdateCheckManager.class); bind(UpdateCheckService.class).to(DefaultUpdateCheckService.class);
bind(StopwatchManager.class).to(DefaultStopwatchManager.class); bind(StopwatchService.class).to(DefaultStopwatchService.class);
bind(PackManager.class).to(DefaultPackManager.class); bind(PackService.class).to(DefaultPackService.class);
bind(PackBlobManager.class).to(DefaultPackBlobManager.class); bind(PackBlobService.class).to(DefaultPackBlobService.class);
bind(PackBlobReferenceManager.class).to(DefaultPackBlobReferenceManager.class); bind(PackBlobReferenceService.class).to(DefaultPackBlobReferenceService.class);
bind(AccessTokenAuthorizationManager.class).to(DefaultAccessTokenAuthorizationManager.class); bind(AccessTokenAuthorizationService.class).to(DefaultAccessTokenAuthorizationService.class);
bind(ReviewedDiffManager.class).to(DefaultReviewedDiffManager.class); bind(ReviewedDiffService.class).to(DefaultReviewedDiffService.class);
bind(OAuthTokenManager.class).to(DefaultOAuthTokenManager.class); bind(OAuthTokenService.class).to(DefaultOAuthTokenService.class);
bind(IssueReactionManager.class).to(DefaultIssueReactionManager.class); bind(IssueReactionService.class).to(DefaultIssueReactionService.class);
bind(IssueCommentReactionManager.class).to(DefaultIssueCommentReactionManager.class); bind(IssueCommentReactionService.class).to(DefaultIssueCommentReactionService.class);
bind(PullRequestReactionManager.class).to(DefaultPullRequestReactionManager.class); bind(PullRequestReactionService.class).to(DefaultPullRequestReactionService.class);
bind(PullRequestCommentReactionManager.class).to(DefaultPullRequestCommentReactionManager.class); bind(PullRequestCommentReactionService.class).to(DefaultPullRequestCommentReactionService.class);
bind(IssueCommentRevisionManager.class).to(DefaultIssueCommentRevisionManager.class); bind(IssueCommentRevisionService.class).to(DefaultIssueCommentRevisionService.class);
bind(PullRequestCommentRevisionManager.class).to(DefaultPullRequestCommentRevisionManager.class); bind(PullRequestCommentRevisionService.class).to(DefaultPullRequestCommentRevisionService.class);
bind(IssueDescriptionRevisionManager.class).to(DefaultIssueDescriptionRevisionManager.class); bind(IssueDescriptionRevisionService.class).to(DefaultIssueDescriptionRevisionService.class);
bind(PullRequestDescriptionRevisionManager.class).to(DefaultPullRequestDescriptionRevisionManager.class); bind(PullRequestDescriptionRevisionService.class).to(DefaultPullRequestDescriptionRevisionService.class);
bind(SsoProviderManager.class).to(DefaultSsoProviderManager.class); bind(SsoProviderService.class).to(DefaultSsoProviderService.class);
bind(SsoAccountManager.class).to(DefaultSsoAccountManager.class); bind(SsoAccountService.class).to(DefaultSsoAccountService.class);
bind(BaseAuthorizationManager.class).to(DefaultBaseAuthorizationManager.class); bind(BaseAuthorizationService.class).to(DefaultBaseAuthorizationService.class);
bind(WebHookManager.class); bind(WebHookManager.class);
contribute(CodePullAuthorizationSource.class, DefaultJobManager.class); contribute(CodePullAuthorizationSource.class, DefaultJobService.class);
bind(CodeIndexManager.class).to(DefaultCodeIndexManager.class); bind(CodeIndexService.class).to(DefaultCodeIndexService.class);
bind(CodeSearchManager.class).to(DefaultCodeSearchManager.class); bind(CodeSearchService.class).to(DefaultCodeSearchService.class);
Bootstrap.executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, Bootstrap.executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
new SynchronousQueue<>()) { new SynchronousQueue<>()) {
@ -672,7 +672,7 @@ public class CoreModule extends AbstractPluginModule {
bind(GitLfsFilter.class); bind(GitLfsFilter.class);
bind(GitPreReceiveCallback.class); bind(GitPreReceiveCallback.class);
bind(GitPostReceiveCallback.class); bind(GitPostReceiveCallback.class);
bind(SignatureVerificationManager.class).to(DefaultSignatureVerificationManager.class); bind(SignatureVerificationService.class).to(DefaultSignatureVerificationService.class);
contribute(CommandCreator.class, SshCommandCreator.class); contribute(CommandCreator.class, SshCommandCreator.class);
contributeFromPackage(SignatureVerifier.class, SignatureVerifier.class); contributeFromPackage(SignatureVerifier.class, SignatureVerifier.class);
} }
@ -692,15 +692,15 @@ public class CoreModule extends AbstractPluginModule {
bind(WicketServlet.class).to(DefaultWicketServlet.class); bind(WicketServlet.class).to(DefaultWicketServlet.class);
bind(WicketFilter.class).to(DefaultWicketFilter.class); bind(WicketFilter.class).to(DefaultWicketFilter.class);
bind(EditSupportRegistry.class).to(DefaultEditSupportRegistry.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); bind(SessionDataStoreFactory.class).to(DefaultSessionDataStoreFactory.class);
contributeFromPackage(EditSupport.class, EditSupport.class); contributeFromPackage(EditSupport.class, EditSupport.class);
bind(org.apache.wicket.protocol.http.WebApplication.class).to(WebApplication.class); bind(org.apache.wicket.protocol.http.WebApplication.class).to(WebApplication.class);
bind(Application.class).to(WebApplication.class); bind(Application.class).to(WebApplication.class);
bind(AvatarManager.class).to(DefaultAvatarManager.class); bind(AvatarService.class).to(DefaultAvatarService.class);
bind(WebSocketManager.class).to(DefaultWebSocketManager.class); bind(WebSocketService.class).to(DefaultWebSocketService.class);
contributeFromPackage(EditSupport.class, EditSupportLocator.class); contributeFromPackage(EditSupport.class, EditSupportLocator.class);
@ -721,23 +721,23 @@ public class CoreModule extends AbstractPluginModule {
contributeFromPackage(ExceptionHandler.class, PageExpiredExceptionHandler.class); contributeFromPackage(ExceptionHandler.class, PageExpiredExceptionHandler.class);
contributeFromPackage(ExceptionHandler.class, WebApplicationExceptionHandler.class); contributeFromPackage(ExceptionHandler.class, WebApplicationExceptionHandler.class);
bind(UrlManager.class).to(DefaultUrlManager.class); bind(UrlService.class).to(DefaultUrlService.class);
bind(CodeCommentEventBroadcaster.class); bind(CodeCommentEventBroadcaster.class);
bind(PullRequestEventBroadcaster.class); bind(PullRequestEventBroadcaster.class);
bind(IssueEventBroadcaster.class); bind(IssueEventBroadcaster.class);
bind(BuildEventBroadcaster.class); bind(BuildEventBroadcaster.class);
bind(AlertEventBroadcaster.class); bind(AlertEventBroadcaster.class);
bind(UploadManager.class).to(DefaultUploadManager.class); bind(UploadService.class).to(DefaultUploadService.class);
bind(TaskButton.TaskFutureManager.class); bind(TaskButton.TaskFutureManager.class);
} }
private void configureBuild() { private void configureBuild() {
bind(ResourceAllocator.class).to(DefaultResourceAllocator.class); bind(ResourceAllocator.class).to(DefaultResourceAllocator.class);
bind(AgentManager.class).to(DefaultAgentManager.class); bind(AgentService.class).to(DefaultAgentService.class);
bind(AgentTokenManager.class).to(DefaultAgentTokenManager.class); bind(AgentTokenService.class).to(DefaultAgentTokenService.class);
bind(AgentAttributeManager.class).to(DefaultAgentAttributeManager.class); bind(AgentAttributeService.class).to(DefaultAgentAttributeService.class);
bind(AgentLastUsedDateManager.class).to(DefaultAgentLastUsedDateManager.class); bind(AgentLastUsedDateService.class).to(DefaultAgentLastUsedDateService.class);
contribute(ScriptContribution.class, new ScriptContribution() { contribute(ScriptContribution.class, new ScriptContribution() {
@ -775,22 +775,22 @@ public class CoreModule extends AbstractPluginModule {
} }
private void configurePersistence() { private void configurePersistence() {
bind(DataManager.class).to(DefaultDataManager.class); bind(DataService.class).to(DefaultDataService.class);
bind(Session.class).toProvider(SessionProvider.class); bind(Session.class).toProvider(SessionProvider.class);
bind(EntityManager.class).toProvider(SessionProvider.class); bind(EntityManager.class).toProvider(SessionProvider.class);
bind(SessionFactory.class).toProvider(SessionFactoryProvider.class); bind(SessionFactory.class).toProvider(SessionFactoryProvider.class);
bind(EntityManagerFactory.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); contribute(ObjectMapperConfigurator.class, HibernateObjectMapperConfigurator.class);
bind(Interceptor.class).to(HibernateInterceptor.class); bind(Interceptor.class).to(HibernateInterceptor.class);
bind(PhysicalNamingStrategy.class).toInstance(new PrefixedNamingStrategy("o_")); bind(PhysicalNamingStrategy.class).toInstance(new PrefixedNamingStrategy("o_"));
bind(SessionManager.class).to(DefaultSessionManager.class); bind(SessionService.class).to(DefaultSessionService.class);
bind(TransactionManager.class).to(DefaultTransactionManager.class); bind(TransactionService.class).to(DefaultTransactionService.class);
bind(IdManager.class).to(DefaultIdManager.class); bind(IdService.class).to(DefaultIdService.class);
bind(Dao.class).to(DefaultDao.class); bind(Dao.class).to(DefaultDao.class);
TransactionInterceptor transactionInterceptor = new TransactionInterceptor(); 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.loader.ManagedSerializedForm;
import io.onedev.commons.utils.FileUtils; import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.TarUtils; import io.onedev.commons.utils.TarUtils;
import io.onedev.server.cluster.ClusterManager; import io.onedev.server.cluster.ClusterService;
import io.onedev.server.data.DataManager; import io.onedev.server.data.DataService;
import io.onedev.server.entitymanager.SettingManager; import io.onedev.server.service.SettingService;
import io.onedev.server.event.ListenerRegistry; import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.event.system.SystemStarted; import io.onedev.server.event.system.SystemStarted;
import io.onedev.server.event.system.SystemStarting; import io.onedev.server.event.system.SystemStarting;
import io.onedev.server.event.system.SystemStopped; import io.onedev.server.event.system.SystemStopped;
import io.onedev.server.event.system.SystemStopping; import io.onedev.server.event.system.SystemStopping;
import io.onedev.server.exception.ServerNotReadyException; 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.model.support.administration.SystemSetting;
import io.onedev.server.persistence.IdManager; import io.onedev.server.persistence.IdService;
import io.onedev.server.persistence.SessionFactoryManager; import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.persistence.SessionManager; import io.onedev.server.persistence.SessionService;
import io.onedev.server.persistence.annotation.Sessional; import io.onedev.server.persistence.annotation.Sessional;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
import io.onedev.server.taskschedule.TaskScheduler; 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 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; private final Provider<ServerConfig> serverConfigProvider;
@ -83,13 +83,13 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
private final ExecutorService executorService; 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(); 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 // Some are injected via provider as instantiation might encounter problem during upgrade
@Inject @Inject
public OneDev(Provider<JettyManager> jettyLauncherProvider, TaskScheduler taskScheduler, public OneDev(Provider<JettyService> jettyLauncherProvider, TaskScheduler taskScheduler,
SessionManager sessionManager, Provider<ServerConfig> serverConfigProvider, SessionService sessionService, Provider<ServerConfig> serverConfigProvider,
DataManager dataManager, ExecutorService executorService, DataService dataService, ExecutorService executorService,
ListenerRegistry listenerRegistry, ClusterManager clusterManager, ListenerRegistry listenerRegistry, ClusterService clusterService,
IdManager idManager, SessionFactoryManager sessionFactoryManager, IdService idService, SessionFactoryService sessionFactoryService,
SettingManager settingManager) { SettingService settingService) {
this.jettyLauncherProvider = jettyLauncherProvider; this.jettyLauncherProvider = jettyLauncherProvider;
this.taskScheduler = taskScheduler; this.taskScheduler = taskScheduler;
this.sessionManager = sessionManager; this.sessionService = sessionService;
this.dataManager = dataManager; this.dataService = dataService;
this.serverConfigProvider = serverConfigProvider; this.serverConfigProvider = serverConfigProvider;
this.executorService = executorService; this.executorService = executorService;
this.listenerRegistry = listenerRegistry; this.listenerRegistry = listenerRegistry;
this.clusterManager = clusterManager; this.clusterService = clusterService;
this.idManager = idManager; this.idService = idService;
this.sessionFactoryManager = sessionFactoryManager; this.sessionFactoryService = sessionFactoryService;
this.settingManager = settingManager; this.settingService = settingService;
try { try {
wrapperManagerClass = Class.forName("org.tanukisoftware.wrapper.WrapperManager"); 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.reconfig_logging", "false");
System.setProperty("hsqldb.method_class_names", "java.lang.Math"); System.setProperty("hsqldb.method_class_names", "java.lang.Math");
clusterManager.start(); clusterService.start();
sessionFactoryManager.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 // Do not use database lock as schema update will commit transaction immediately
// in MySQL // in MySQL
clusterManager.initWithLead(databasePopulated, () -> { clusterService.initWithLead(databasePopulated, () -> {
try (var conn = dataManager.openConnection()) { try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> { callWithTransaction(conn, () -> {
dataManager.populateDatabase(conn); dataService.populateDatabase(conn);
return null; return null;
}); });
} catch (SQLException e) { } catch (SQLException e) {
@ -163,9 +163,9 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
return 1L; return 1L;
}); });
idManager.init(); idService.init();
sessionManager.run(() -> listenerRegistry.post(new SystemStarting())); sessionService.run(() -> listenerRegistry.post(new SystemStarting()));
jettyLauncherProvider.get().start(); jettyLauncherProvider.get().start();
var manualConfigs = checkData(); var manualConfigs = checkData();
@ -175,16 +175,16 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
else else
logger.warn("Please set up the server at " + guessServerUrl()); logger.warn("Please set up the server at " + guessServerUrl());
initStage = new InitStage("Server Setup", manualConfigs); initStage = new InitStage("Server Setup", manualConfigs);
var localServer = clusterManager.getLocalServerAddress(); var localServer = clusterService.getLocalServerAddress();
while (true) { while (true) {
if (maintenanceFile.exists()) { if (maintenanceFile.exists()) {
logger.info("Maintenance requested, trying to stop all servers..."); logger.info("Maintenance requested, trying to stop all servers...");
clusterManager.submitToAllServers(() -> { clusterService.submitToAllServers(() -> {
if (!localServer.equals(clusterManager.getLocalServerAddress())) if (!localServer.equals(clusterService.getLocalServerAddress()))
restart(); restart();
return null; return null;
}); });
while (thread != null && clusterManager.getServerAddresses().size() != 1) { while (thread != null && clusterService.getServerAddresses().size() != 1) {
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException ignored) { } catch (InterruptedException ignored) {
@ -211,16 +211,16 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
} }
} }
var leadServer = clusterManager.getLeaderServerAddress(); var leadServer = clusterService.getLeaderServerAddress();
if (!leadServer.equals(clusterManager.getLocalServerAddress())) { if (!leadServer.equals(clusterService.getLocalServerAddress())) {
logger.info("Syncing assets..."); logger.info("Syncing assets...");
Client client = ClientBuilder.newClient(); Client client = ClientBuilder.newClient();
try { try {
String fromServerUrl = clusterManager.getServerUrl(leadServer); String fromServerUrl = clusterService.getServerUrl(leadServer);
WebTarget target = client.target(fromServerUrl).path("/~api/cluster/assets"); WebTarget target = client.target(fromServerUrl).path("/~api/cluster/assets");
Invocation.Builder builder = target.request(); Invocation.Builder builder = target.request();
builder.header(AUTHORIZATION, builder.header(AUTHORIZATION,
BEARER + " " + clusterManager.getCredential()); BEARER + " " + clusterService.getCredential());
try (Response response = builder.get()) { try (Response response = builder.get()) {
checkStatus(response); checkStatus(response);
@ -248,30 +248,30 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
SecurityUtils.bindAsSystem(); SecurityUtils.bindAsSystem();
initStage = null; initStage = null;
listenerRegistry.post(new SystemStarted()); listenerRegistry.post(new SystemStarted());
clusterManager.postStart(); clusterService.postStart();
thread.start(); thread.start();
SystemSetting systemSetting = settingManager.getSystemSetting(); SystemSetting systemSetting = settingService.getSystemSetting();
logger.info("Server is ready at " + systemSetting.getServerUrl() + "."); logger.info("Server is ready at " + systemSetting.getServerUrl() + ".");
} }
@Override @Override
public void preStop() { public void preStop() {
thread = null; thread = null;
clusterManager.preStop(); clusterService.preStop();
SecurityUtils.bindAsSystem(); SecurityUtils.bindAsSystem();
try { try {
sessionManager.run(() -> listenerRegistry.post(new SystemStopping())); sessionService.run(() -> listenerRegistry.post(new SystemStopping()));
} catch (ServerNotReadyException ignore) { } catch (ServerNotReadyException ignore) {
} }
} }
private List<ManualConfig> checkData() { private List<ManualConfig> checkData() {
HazelcastInstance hazelcastInstance = clusterManager.getHazelcastInstance(); HazelcastInstance hazelcastInstance = clusterService.getHazelcastInstance();
var lock = hazelcastInstance.getCPSubsystem().getLock("checkData"); var lock = hazelcastInstance.getCPSubsystem().getLock("checkData");
lock.lock(); lock.lock();
try { try {
return dataManager.checkData(); return dataService.checkData();
} finally { } finally {
lock.unlock(); lock.unlock();
} }
@ -285,10 +285,10 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
taskScheduler.stop(); taskScheduler.stop();
jettyLauncherProvider.get().stop(); jettyLauncherProvider.get().stop();
sessionManager.run(() -> listenerRegistry.post(new SystemStopped())); sessionService.run(() -> listenerRegistry.post(new SystemStopped()));
sessionFactoryManager.stop(); sessionFactoryService.stop();
clusterManager.stop(); clusterService.stop();
executorService.shutdown(); executorService.shutdown();
} catch (ServerNotReadyException ignore) { } catch (ServerNotReadyException ignore) {
} }
@ -423,17 +423,17 @@ public class OneDev extends AbstractPlugin implements Serializable, Runnable {
@Override @Override
public void run() { public void run() {
var localServer = clusterManager.getLocalServerAddress(); var localServer = clusterService.getLocalServerAddress();
var maintenanceFile = getMaintenanceFile(Bootstrap.installDir); var maintenanceFile = getMaintenanceFile(Bootstrap.installDir);
while (thread != null) { while (thread != null) {
if (maintenanceFile.exists()) { if (maintenanceFile.exists()) {
logger.info("Maintenance requested, trying to stop all servers..."); logger.info("Maintenance requested, trying to stop all servers...");
clusterManager.submitToAllServers(() -> { clusterService.submitToAllServers(() -> {
if (!localServer.equals(clusterManager.getLocalServerAddress())) if (!localServer.equals(clusterService.getLocalServerAddress()))
restart(); restart();
return null; return null;
}); });
while (thread != null && clusterManager.getServerAddresses().size() != 1) { while (thread != null && clusterService.getServerAddresses().size() != 1) {
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException ignored) { } catch (InterruptedException ignored) {

View File

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

View File

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

View File

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

View File

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

View File

@ -11,9 +11,9 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import io.onedev.server.OneDev; 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.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.AttachmentResource;
import io.onedev.server.web.resource.AttachmentResourceReference; import io.onedev.server.web.resource.AttachmentResourceReference;
@ -44,21 +44,21 @@ public class ProjectAttachmentSupport implements AttachmentSupport {
@Override @Override
public List<String> getAttachments() { public List<String> getAttachments() {
return getAttachmentManager().listAttachments(projectId, attachmentGroup).stream() return getAttachmentService().listAttachments(projectId, attachmentGroup).stream()
.map(it->it.getPath()).collect(Collectors.toList()); .map(it->it.getPath()).collect(Collectors.toList());
} }
private ProjectManager getProjectManager() { private ProjectService getProjectService() {
return OneDev.getInstance(ProjectManager.class); return OneDev.getInstance(ProjectService.class);
} }
private AttachmentManager getAttachmentManager() { private AttachmentService getAttachmentService() {
return OneDev.getInstance(AttachmentManager.class); return OneDev.getInstance(AttachmentService.class);
} }
@Override @Override
public void deleteAttachemnt(String attachment) { public void deleteAttachemnt(String attachment) {
getAttachmentManager().deleteAttachment(projectId, attachmentGroup, attachment); getAttachmentService().deleteAttachment(projectId, attachmentGroup, attachment);
} }
@Override @Override
@ -67,18 +67,18 @@ public class ProjectAttachmentSupport implements AttachmentSupport {
} }
protected Project getProject() { protected Project getProject() {
SessionManager sessionManager = OneDev.getInstance(SessionManager.class); SessionService sessionService = OneDev.getInstance(SessionService.class);
sessionManager.openSession(); sessionService.openSession();
try { try {
return getProjectManager().load(projectId); return getProjectService().load(projectId);
} finally { } finally {
sessionManager.closeSession(); sessionService.closeSession();
} }
} }
@Override @Override
public String saveAttachment(String suggestedAttachmentName, InputStream attachmentStream) { public String saveAttachment(String suggestedAttachmentName, InputStream attachmentStream) {
return getAttachmentManager().saveAttachment( return getAttachmentService().saveAttachment(
projectId, attachmentGroup, suggestedAttachmentName, attachmentStream); 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.job.JobAuthorizationContext;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.model.support.build.JobProperty; import io.onedev.server.model.support.build.JobProperty;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.ComponentContext; import io.onedev.server.util.ComponentContext;
import io.onedev.server.validation.Validatable; import io.onedev.server.validation.Validatable;
import io.onedev.server.web.page.project.blob.ProjectBlobPage; 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); Collection<String> newCommitChain = new HashSet<>(commitChain);
newCommitChain.add(importCommit.name()); newCommitChain.add(importCommit.name());
BuildSpec importedBuildSpec = aImport.getBuildSpec(); BuildSpec importedBuildSpec = aImport.getBuildSpec();
JobAuthorizationContext.push(new JobAuthorizationContext( JobAuthorizationContext.push(new JobAuthorizationContext(aImport.getProject(), importCommit, null));
aImport.getProject(), importCommit, SecurityUtils.getUser(), null));
try { try {
importedBuildSpecs.addAll(importedBuildSpec.getImportedBuildSpecs(newCommitChain)); importedBuildSpecs.addAll(importedBuildSpec.getImportedBuildSpecs(newCommitChain));
} finally { } finally {

View File

@ -30,7 +30,7 @@ import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.ClassValidating; import io.onedev.server.annotation.ClassValidating;
import io.onedev.server.annotation.Editable; import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative; 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.job.JobAuthorizationContext;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
@ -80,13 +80,13 @@ public class Import implements Serializable, Validatable {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private static List<String> getProjectChoices() { private static List<String> getProjectChoices() {
ProjectManager projectManager = OneDev.getInstance(ProjectManager.class); ProjectService projectService = OneDev.getInstance(ProjectService.class);
Project project = ((ProjectPage)WicketUtils.getPage()).getProject(); Project project = ((ProjectPage)WicketUtils.getPage()).getProject();
Collection<Project> projects = SecurityUtils.getAuthorizedProjects(new AccessProject()); Collection<Project> projects = SecurityUtils.getAuthorizedProjects(new AccessProject());
projects.remove(project); 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()); List<String> choices = projects.stream().map(it->cache.get(it.getId()).getPath()).collect(Collectors.toList());
Collections.sort(choices); Collections.sort(choices);
@ -98,7 +98,7 @@ public class Import implements Serializable, Validatable {
private static Project getInputProject() { private static Project getInputProject() {
String projectPath = (String) EditContext.get().getInputValue("projectPath"); String projectPath = (String) EditContext.get().getInputValue("projectPath");
if (projectPath != null) { 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)) if (project != null && SecurityUtils.canReadCode(project))
return project; return project;
} }
@ -207,8 +207,7 @@ public class Import implements Serializable, Validatable {
try { try {
Validator validator = OneDev.getInstance(Validator.class); Validator validator = OneDev.getInstance(Validator.class);
BuildSpec buildSpec = getBuildSpec(); BuildSpec buildSpec = getBuildSpec();
JobAuthorizationContext.push(new JobAuthorizationContext( JobAuthorizationContext.push(new JobAuthorizationContext(getProject(), getCommit(), null));
getProject(), getCommit(), SecurityUtils.getUser(), null));
try { try {
for (int i = 0; i < buildSpec.getImports().size(); i++) { for (int i = 0; i < buildSpec.getImports().size(); i++) {
Import aImport = buildSpec.getImports().get(i); Import aImport = buildSpec.getImports().get(i);
@ -243,7 +242,7 @@ public class Import implements Serializable, Validatable {
public Project getProject() { public Project getProject() {
if (project == null) { if (project == null) {
project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath); project = OneDev.getInstance(ProjectService.class).findByPath(projectPath);
if (project == null) if (project == null)
throw new ExplicitException(MessageFormat.format( _T("Unable to find project to import build spec: {0}"), projectPath)); 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.ParamUtils;
import io.onedev.server.buildspec.param.spec.ParamSpec; import io.onedev.server.buildspec.param.spec.ParamSpec;
import io.onedev.server.buildspec.step.Step; import io.onedev.server.buildspec.step.Step;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.event.project.ProjectEvent; import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.git.GitUtils; import io.onedev.server.git.GitUtils;
import io.onedev.server.job.match.JobMatch; import io.onedev.server.job.match.JobMatch;
import io.onedev.server.job.match.JobMatchContext; import io.onedev.server.job.match.JobMatchContext;
import io.onedev.server.model.PullRequest; import io.onedev.server.model.PullRequest;
import io.onedev.server.model.support.administration.jobexecutor.JobExecutor; 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.ComponentContext;
import io.onedev.server.util.EditContext; import io.onedev.server.util.EditContext;
import io.onedev.server.util.criteria.Criteria; import io.onedev.server.util.criteria.Criteria;
@ -151,7 +150,7 @@ public class Job implements NamedElement, Validatable {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private static String getJobExecutorPlaceholder() { private static String getJobExecutorPlaceholder() {
if (OneDev.getInstance(SettingManager.class).getJobExecutors().isEmpty()) if (OneDev.getInstance(SettingService.class).getJobExecutors().isEmpty())
return _T("Auto-discovered executor"); return _T("Auto-discovered executor");
else else
return _T("First applicable executor"); return _T("First applicable executor");
@ -159,7 +158,7 @@ public class Job implements NamedElement, Validatable {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private static String getJobExecutorDescription() { 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"); return _T("Optionally specify executor for this job. Leave empty to use auto-discover executor");
else else
return _T("Optionally specify executor for this job. Leave empty to use first applicable executor"); 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; String branch = page.getBlobIdent().revision;
if (branch == null) if (branch == null)
branch = "main"; branch = "main";
JobMatchContext context = new JobMatchContext(page.getProject(), branch, null, SecurityUtils.getAuthUser(), jobName); JobMatchContext context = new JobMatchContext(page.getProject(), branch, null, jobName);
for (JobExecutor executor: OneDev.getInstance(SettingManager.class).getJobExecutors()) { for (JobExecutor executor: OneDev.getInstance(SettingService.class).getJobExecutors()) {
if (executor.isEnabled()) { if (executor.isEnabled()) {
if (executor.getJobMatch() == null) { if (executor.getJobMatch() == null) {
applicableJobExecutors.add(executor.getName()); applicableJobExecutors.add(executor.getName());
@ -352,7 +351,7 @@ public class Job implements NamedElement, Validatable {
public boolean isValid(ConstraintValidatorContext context) { public boolean isValid(ConstraintValidatorContext context) {
boolean isValid = true; boolean isValid = true;
var jobExecutors = OneDev.getInstance(SettingManager.class).getJobExecutors(); var jobExecutors = OneDev.getInstance(SettingService.class).getJobExecutors();
if (jobExecutor != null && !jobExecutor.contains("@") if (jobExecutor != null && !jobExecutor.contains("@")
&& jobExecutors.stream().noneMatch(it->it.getName().equals(jobExecutor))) { && jobExecutors.stream().noneMatch(it->it.getName().equals(jobExecutor))) {
isValid = false; isValid = false;

View File

@ -2,7 +2,7 @@ package io.onedev.server.buildspec.job;
import io.onedev.k8shelper.KubernetesHelper; import io.onedev.k8shelper.KubernetesHelper;
import io.onedev.server.OneDev; 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.model.Build;
import io.onedev.server.util.UrlUtils; import io.onedev.server.util.UrlUtils;
@ -118,14 +118,14 @@ public enum JobVariable {
SERVER { SERVER {
@Override @Override
public String getValue(Build build) { 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); return UrlUtils.getServer(serverUrl);
} }
}, },
SERVER_HOST { SERVER_HOST {
@Override @Override
public String getValue(Build build) { public String getValue(Build build) {
var serverUrl = OneDev.getInstance(SettingManager.class).getSystemSetting().getServerUrl(); var serverUrl = OneDev.getInstance(SettingService.class).getSystemSetting().getServerUrl();
try { try {
return new URL(serverUrl).getHost(); return new URL(serverUrl).getHost();
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
@ -136,7 +136,7 @@ public enum JobVariable {
SERVER_URL { SERVER_URL {
@Override @Override
public String getValue(Build build) { 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.OneDev;
import io.onedev.server.buildspec.param.instance.ParamInstances; import io.onedev.server.buildspec.param.instance.ParamInstances;
import io.onedev.server.buildspec.param.instance.ParamMap; import io.onedev.server.buildspec.param.instance.ParamMap;
import io.onedev.server.entitymanager.IssueManager; import io.onedev.server.service.IssueService;
import io.onedev.server.entitymanager.PullRequestManager; import io.onedev.server.service.PullRequestService;
import io.onedev.server.model.Issue; import io.onedev.server.model.Issue;
import io.onedev.server.model.PullRequest; import io.onedev.server.model.PullRequest;
import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.EqualsBuilder;
@ -48,7 +48,7 @@ public class TriggerMatch implements Serializable {
@Nullable @Nullable
public PullRequest getRequest() { public PullRequest getRequest() {
if (requestId != null) if (requestId != null)
return OneDev.getInstance(PullRequestManager.class).load(requestId); return OneDev.getInstance(PullRequestService.class).load(requestId);
else else
return null; return null;
} }
@ -56,7 +56,7 @@ public class TriggerMatch implements Serializable {
@Nullable @Nullable
public Issue getIssue() { public Issue getIssue() {
if (issueId != null) if (issueId != null)
return OneDev.getInstance(IssueManager.class).load(issueId); return OneDev.getInstance(IssueService.class).load(issueId);
else else
return null; return null;
} }

View File

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

View File

@ -1,7 +1,23 @@
package io.onedev.server.buildspec.job.action; 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.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.BuildSpec;
import io.onedev.server.buildspec.BuildSpecAware; import io.onedev.server.buildspec.BuildSpecAware;
import io.onedev.server.buildspec.job.Job; 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.ParamInstances;
import io.onedev.server.buildspec.param.instance.ParamMap; import io.onedev.server.buildspec.param.instance.ParamMap;
import io.onedev.server.buildspec.param.spec.ParamSpec; 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.model.Build;
import io.onedev.server.service.UserService;
import io.onedev.server.util.ComponentContext; import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.EditContext; import io.onedev.server.util.EditContext;
import io.onedev.server.web.editable.BeanEditor; import io.onedev.server.web.editable.BeanEditor;
import io.onedev.server.web.util.WicketUtils; 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) @Editable(name="Run job", order=100)
public class RunJobAction extends PostBuildAction { public class RunJobAction extends PostBuildAction {
@ -106,10 +114,10 @@ public class RunJobAction extends PostBuildAction {
@Override @Override
public void execute(Build build) { public void execute(Build build) {
for (var paramMap: resolveParams(build, build.getParamCombination(), getParamMatrix(), getExcludeParamMaps())) { for (var paramMap: resolveParams(build, build.getParamCombination(), getParamMatrix(), getExcludeParamMaps())) {
JobManager jobManager = OneDev.getInstance(JobManager.class); JobService jobService = OneDev.getInstance(JobService.class);
jobManager.submit(build.getProject(), build.getCommitId(), var userService = OneDev.getInstance(UserService.class);
getJobName(), paramMap, build.getRefName(), jobService.submit(userService.getSystem(), build.getProject(), build.getCommitId(),
build.getSubmitter(), build.getRequest(), build.getIssue(), getJobName(), paramMap, build.getRefName(), build.getRequest(), build.getIssue(),
"Post build action of job '" + build.getJobName() + "'"); "Post build action of job '" + build.getJobName() + "'");
} }
} }

View File

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

View File

@ -22,8 +22,8 @@ import io.onedev.commons.utils.ExplicitException;
import io.onedev.commons.utils.StringUtils; import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.buildspec.job.action.notificationreceiver.NotificationReceiverParser.CriteriaContext; import io.onedev.server.buildspec.job.action.notificationreceiver.NotificationReceiverParser.CriteriaContext;
import io.onedev.server.entitymanager.GroupManager; import io.onedev.server.service.GroupService;
import io.onedev.server.entitymanager.UserManager; import io.onedev.server.service.UserService;
import io.onedev.server.model.Build; import io.onedev.server.model.Build;
import io.onedev.server.model.EmailAddress; import io.onedev.server.model.EmailAddress;
import io.onedev.server.model.Group; import io.onedev.server.model.Group;
@ -60,14 +60,14 @@ public class NotificationReceiver {
for (CriteriaContext criteria: parser.receiver().criteria()) { for (CriteriaContext criteria: parser.receiver().criteria()) {
if (criteria.userCriteria() != null) { if (criteria.userCriteria() != null) {
String userName = getValue(criteria.userCriteria().Value()); 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) if (user != null)
addEmailAddress(emailAddresses, user); addEmailAddress(emailAddresses, user);
else else
throw new ExplicitException("Unable to find user '" + userName + "'"); throw new ExplicitException("Unable to find user '" + userName + "'");
} else if (criteria.groupCriteria() != null) { } else if (criteria.groupCriteria() != null) {
String groupName = getValue(criteria.groupCriteria().Value()); 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) { if (group != null) {
emailAddresses.addAll(group.getMembers().stream() emailAddresses.addAll(group.getMembers().stream()
.map(it->it.getPrimaryEmailAddress()) .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.CloneInfo;
import io.onedev.k8shelper.DefaultCloneInfo; import io.onedev.k8shelper.DefaultCloneInfo;
import io.onedev.server.OneDev; 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.Build;
import io.onedev.server.annotation.Editable; import io.onedev.server.annotation.Editable;
@ -14,7 +14,7 @@ public class DefaultCredential implements GitCredential {
@Override @Override
public CloneInfo newCloneInfo(Build build, String jobToken) { 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.CloneInfo;
import io.onedev.k8shelper.HttpCloneInfo; import io.onedev.k8shelper.HttpCloneInfo;
import io.onedev.server.OneDev; 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.Build;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.validation.Validatable; import io.onedev.server.validation.Validatable;
@ -45,7 +45,7 @@ public class HttpCredential implements GitCredential, Validatable {
@Override @Override
public CloneInfo newCloneInfo(Build build, String jobToken) { 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)); build.getJobAuthorizationContext().getSecretValue(accessTokenSecret));
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@ import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable; import io.onedev.server.annotation.Editable;
import io.onedev.server.buildspec.job.Job; import io.onedev.server.buildspec.job.Job;
import io.onedev.server.buildspec.job.TriggerMatch; 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.ProjectEvent;
import io.onedev.server.event.project.issue.IssueChanged; import io.onedev.server.event.project.issue.IssueChanged;
import io.onedev.server.event.project.issue.IssueOpened; import io.onedev.server.event.project.issue.IssueOpened;
@ -42,7 +42,7 @@ public class IssueInStateTrigger extends JobTrigger {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private static List<String> getStateChoices() { private static List<String> getStateChoices() {
return OneDev.getInstance(SettingManager.class).getIssueSetting() return OneDev.getInstance(SettingService.class).getIssueSetting()
.getStateSpecs().stream().map(StateSpec::getName).collect(toList()); .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.Editable;
import io.onedev.server.annotation.Patterns; import io.onedev.server.annotation.Patterns;
import io.onedev.server.buildspec.job.TriggerMatch; 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.git.GitUtils;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.model.PullRequest; import io.onedev.server.model.PullRequest;
@ -65,7 +65,7 @@ public abstract class PullRequestTrigger extends JobTrigger {
private boolean touchedFile(PullRequest request) { private boolean touchedFile(PullRequest request) {
if (getPaths() != null) { if (getPaths() != null) {
Repository repository = OneDev.getInstance(ProjectManager.class) Repository repository = OneDev.getInstance(ProjectService.class)
.getRepository(request.getTargetProject().getId()); .getRepository(request.getTargetProject().getId());
Collection<String> changedFiles = GitUtils.getChangedFiles(repository, Collection<String> changedFiles = GitUtils.getChangedFiles(repository,
request.getBaseCommit(), request.getLatestUpdate().getHeadCommit()); 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.Editable;
import io.onedev.server.annotation.Interpolative; import io.onedev.server.annotation.Interpolative;
import io.onedev.server.buildspec.BuildSpec; import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager; import io.onedev.server.service.BuildService;
import io.onedev.server.entitymanager.IterationManager; import io.onedev.server.service.IterationService;
import io.onedev.server.model.Iteration; import io.onedev.server.model.Iteration;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.persistence.TransactionManager; import io.onedev.server.persistence.TransactionService;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import java.io.File; import java.io.File;
@ -63,16 +63,16 @@ public class CloseIterationStep extends ServerSideStep {
@Override @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(TransactionManager.class).call(() -> { return OneDev.getInstance(TransactionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
Project project = build.getProject(); Project project = build.getProject();
String iterationName = getIterationName(); String iterationName = getIterationName();
IterationManager iterationManager = OneDev.getInstance(IterationManager.class); IterationService iterationService = OneDev.getInstance(IterationService.class);
Iteration iteration = iterationManager.findInHierarchy(project, iterationName); Iteration iteration = iterationService.findInHierarchy(project, iterationName);
if (iteration != null) { if (iteration != null) {
if (build.canCloseIteration(getAccessTokenSecret())) { if (build.canCloseIteration(getAccessTokenSecret())) {
iteration.setClosed(true); iteration.setClosed(true);
iterationManager.createOrUpdate(iteration); iterationService.createOrUpdate(iteration);
} else { } else {
logger.error("This build is not authorized to close iteration '" + iterationName + "'"); logger.error("This build is not authorized to close iteration '" + iterationName + "'");
return new ServerStepResult(false); 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.Editable;
import io.onedev.server.annotation.Interpolative; import io.onedev.server.annotation.Interpolative;
import io.onedev.server.buildspec.BuildSpec; 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.GitUtils;
import io.onedev.server.git.service.GitService; import io.onedev.server.git.service.GitService;
import io.onedev.server.git.service.RefFacade; import io.onedev.server.git.service.RefFacade;
import io.onedev.server.model.Project; 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 io.onedev.server.web.util.SuggestionUtils;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
@ -93,8 +93,8 @@ public class CreateBranchStep extends ServerSideStep {
@Override @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> { return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
Project project = build.getProject(); Project project = build.getProject();
String branchName = getBranchName(); String branchName = getBranchName();

View File

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

View File

@ -6,15 +6,15 @@ import io.onedev.commons.utils.LockUtils;
import io.onedev.commons.utils.TaskLogger; import io.onedev.commons.utils.TaskLogger;
import io.onedev.k8shelper.ServerStepResult; import io.onedev.k8shelper.ServerStepResult;
import io.onedev.server.OneDev; 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.Editable;
import io.onedev.server.annotation.Interpolative; import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.Patterns; import io.onedev.server.annotation.Patterns;
import io.onedev.server.annotation.SubPath; import io.onedev.server.annotation.SubPath;
import io.onedev.server.buildspec.BuildSpec; import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager; import io.onedev.server.service.BuildService;
import io.onedev.server.entitymanager.ProjectManager; import io.onedev.server.service.ProjectService;
import io.onedev.server.persistence.SessionManager; import io.onedev.server.persistence.SessionService;
import io.onedev.server.util.patternset.PatternSet; import io.onedev.server.util.patternset.PatternSet;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
@ -71,13 +71,13 @@ public class PublishArtifactStep extends ServerSideStep {
@Override @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger jobLogger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger jobLogger) {
return OneDev.getInstance(SessionManager.class).call(() -> { return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
return LockUtils.write(build.getArtifactsLockName(), () -> { return LockUtils.write(build.getArtifactsLockName(), () -> {
var projectId = build.getProject().getId(); 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); FileUtils.copyDirectory(inputDir, artifactsDir);
OneDev.getInstance(ProjectManager.class).directoryModified(projectId, artifactsDir); OneDev.getInstance(ProjectService.class).directoryModified(projectId, artifactsDir);
return new ServerStepResult(true); 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.ProjectChoice;
import io.onedev.server.annotation.SubPath; import io.onedev.server.annotation.SubPath;
import io.onedev.server.buildspec.BuildSpec; import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.BuildManager; import io.onedev.server.service.BuildService;
import io.onedev.server.entitymanager.ProjectManager; import io.onedev.server.service.ProjectService;
import io.onedev.server.entitymanager.SettingManager; import io.onedev.server.service.SettingService;
import io.onedev.server.job.JobContext; 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.model.Project;
import io.onedev.server.persistence.SessionManager; import io.onedev.server.persistence.SessionService;
import io.onedev.server.util.patternset.PatternSet; 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. " @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 @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> { return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
JobContext jobContext = OneDev.getInstance(JobManager.class).getJobContext(build.getId()); JobContext jobContext = OneDev.getInstance(JobService.class).getJobContext(build.getId());
if (jobContext.getJobExecutor().isSitePublishEnabled()) { if (jobContext.getJobExecutor().isSitePublishEnabled()) {
Project project; Project project;
if (projectPath != null) { if (projectPath != null) {
project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath); project = OneDev.getInstance(ProjectService.class).findByPath(projectPath);
if (project == null) { if (project == null) {
logger.error("Unable to find project: " + projectPath); logger.error("Unable to find project: " + projectPath);
return new ServerStepResult(false); return new ServerStepResult(false);
@ -108,13 +108,13 @@ public class PublishSiteStep extends ServerSideStep {
} }
var projectId = project.getId(); var projectId = project.getId();
LockUtils.write(project.getSiteLockName(), () -> { LockUtils.write(project.getSiteLockName(), () -> {
File projectSiteDir = OneDev.getInstance(ProjectManager.class).getSiteDir(projectId); File projectSiteDir = OneDev.getInstance(ProjectService.class).getSiteDir(projectId);
FileUtils.cleanDir(projectSiteDir); FileUtils.cleanDir(projectSiteDir);
FileUtils.copyDirectory(inputDir, projectSiteDir); FileUtils.copyDirectory(inputDir, projectSiteDir);
OneDev.getInstance(ProjectManager.class).directoryModified(projectId, projectSiteDir); OneDev.getInstance(ProjectService.class).directoryModified(projectId, projectSiteDir);
return null; return null;
}); });
String serverUrl = OneDev.getInstance(SettingManager.class).getSystemSetting().getServerUrl(); String serverUrl = OneDev.getInstance(SettingService.class).getSystemSetting().getServerUrl();
logger.log("Site published as " logger.log("Site published as "
+ StringUtils.stripEnd(serverUrl, "/") + "/" + project.getPath() + "/~site"); + StringUtils.stripEnd(serverUrl, "/") + "/" + project.getPath() + "/~site");
} else { } else {

View File

@ -45,9 +45,9 @@ import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.ProjectChoice; import io.onedev.server.annotation.ProjectChoice;
import io.onedev.server.buildspec.BuildSpec; import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.cluster.ClusterTask; import io.onedev.server.cluster.ClusterTask;
import io.onedev.server.entitymanager.BuildManager; import io.onedev.server.service.BuildService;
import io.onedev.server.entitymanager.ProjectManager; import io.onedev.server.service.ProjectService;
import io.onedev.server.entitymanager.UserManager; import io.onedev.server.service.UserService;
import io.onedev.server.event.ListenerRegistry; import io.onedev.server.event.ListenerRegistry;
import io.onedev.server.event.project.RefUpdated; import io.onedev.server.event.project.RefUpdated;
import io.onedev.server.git.CommandUtils; 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.git.service.RefFacade;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.model.User; import io.onedev.server.model.User;
import io.onedev.server.persistence.SessionManager; import io.onedev.server.persistence.SessionService;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
@Editable(order=1070, name="Pull from Remote", group=StepGroup.REPOSITORY_SYNC, description="" @Editable(order=1070, name="Pull from Remote", group=StepGroup.REPOSITORY_SYNC, description=""
@ -139,12 +139,12 @@ public class PullRepository extends SyncRepository {
@Override @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> { return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
Project project = build.getProject(); Project project = build.getProject();
Project targetProject; Project targetProject;
if (getTargetProject() != null) { if (getTargetProject() != null) {
targetProject = getProjectManager().findByPath(getTargetProject()); targetProject = getProjectService().findByPath(getTargetProject());
if (targetProject == null) if (targetProject == null)
throw new ExplicitException("Target project not found: " + getTargetProject()); throw new ExplicitException("Target project not found: " + getTargetProject());
} else { } else {
@ -171,17 +171,17 @@ public class PullRepository extends SyncRepository {
String remoteUrl = getRemoteUrlWithCredential(build); String remoteUrl = getRemoteUrlWithCredential(build);
Long targetProjectId = targetProject.getId(); Long targetProjectId = targetProject.getId();
var task = new PullTask(targetProjectId, userId, remoteUrl, getCertificate(), getRefs(), isForce(), isWithLfs(), getProxy(), build.getSecretMasker()); 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); return new ServerStepResult(true);
}); });
} }
private static ProjectManager getProjectManager() { private static ProjectService getProjectService() {
return OneDev.getInstance(ProjectManager.class); return OneDev.getInstance(ProjectService.class);
} }
private static UserManager getUserManager() { private static UserService getUserService() {
return OneDev.getInstance(UserManager.class); return OneDev.getInstance(UserService.class);
} }
private static class PullTask implements ClusterTask<Void> { private static class PullTask implements ClusterTask<Void> {
@ -242,7 +242,7 @@ public class PullRepository extends SyncRepository {
var certificateFile = writeCertificate(certificate); var certificateFile = writeCertificate(certificate);
SecretMasker.push(secretMasker); SecretMasker.push(secretMasker);
try { try {
Repository repository = getProjectManager().getRepository(projectId); Repository repository = getProjectService().getRepository(projectId);
String defaultBranch = GitUtils.getDefaultBranch(repository); String defaultBranch = GitUtils.getDefaultBranch(repository);
Map<String, ObjectId> oldCommitIds = getRefCommits(repository); Map<String, ObjectId> oldCommitIds = getRefCommits(repository);
@ -361,7 +361,7 @@ public class PullRepository extends SyncRepository {
git.clearArgs(); git.clearArgs();
configureProxy(git, proxy); configureProxy(git, proxy);
configureCertificate(git, certificateFile); configureCertificate(git, certificateFile);
var sinceCommitIds = getProjectManager().readLfsSinceCommits(projectId); var sinceCommitIds = getProjectService().readLfsSinceCommits(projectId);
if (sinceCommitIds.isEmpty()) { if (sinceCommitIds.isEmpty()) {
new LfsFetchAllCommand(git.workingDir(), remoteUrl) { new LfsFetchAllCommand(git.workingDir(), remoteUrl) {
@ -379,15 +379,15 @@ public class PullRepository extends SyncRepository {
} }
}.run(); }.run();
} }
getProjectManager().writeLfsSinceCommits(projectId, newCommitIds.values()); getProjectService().writeLfsSinceCommits(projectId, newCommitIds.values());
} }
OneDev.getInstance(SessionManager.class).runAsync(() -> { OneDev.getInstance(SessionService.class).runAsync(() -> {
try { try {
// Access db connection in a separate thread to avoid possible deadlock, as // Access db connection in a separate thread to avoid possible deadlock, as
// the parent thread is blocking another thread holding database connections // the parent thread is blocking another thread holding database connections
var project = getProjectManager().load(projectId); var project = getProjectService().load(projectId);
var user = getUserManager().load(userId); var user = getUserService().load(userId);
MapDifference<String, ObjectId> difference = difference(oldCommitIds, newCommitIds); MapDifference<String, ObjectId> difference = difference(oldCommitIds, newCommitIds);
ListenerRegistry registry = OneDev.getInstance(ListenerRegistry.class); ListenerRegistry registry = OneDev.getInstance(ListenerRegistry.class);
for (Map.Entry<String, ObjectId> entry : difference.entriesOnlyOnLeft().entrySet()) { 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.k8shelper.ServerStepResult;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.annotation.Editable; import io.onedev.server.annotation.Editable;
import io.onedev.server.entitymanager.BuildManager; import io.onedev.server.service.BuildService;
import io.onedev.server.entitymanager.ProjectManager; import io.onedev.server.service.ProjectService;
import io.onedev.server.git.CommandUtils; import io.onedev.server.git.CommandUtils;
import io.onedev.server.git.GitUtils; import io.onedev.server.git.GitUtils;
import io.onedev.server.model.Project; 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, @Editable(order=1080, name="Push to Remote", group=StepGroup.REPOSITORY_SYNC,
description="This step pushes current commit to same ref on remote") description="This step pushes current commit to same ref on remote")
@ -31,15 +31,15 @@ public class PushRepository extends SyncRepository {
@Override @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(SessionManager.class).call(() -> { return OneDev.getInstance(SessionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
var certificateFile = writeCertificate(getCertificate()); var certificateFile = writeCertificate(getCertificate());
SecretMasker.push(build.getSecretMasker()); SecretMasker.push(build.getSecretMasker());
try { try {
if (OneDev.getInstance(ProjectManager.class).hasLfsObjects(build.getProject().getId())) { if (OneDev.getInstance(ProjectService.class).hasLfsObjects(build.getProject().getId())) {
Project project = build.getProject(); Project project = build.getProject();
Commandline git = CommandUtils.newGit(); 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()); configureProxy(git, getProxy());
configureCertificate(git, certificateFile); configureCertificate(git, certificateFile);
@ -89,7 +89,7 @@ public class PushRepository extends SyncRepository {
}).checkReturnCode(); }).checkReturnCode();
Repository repository = OneDev.getInstance(ProjectManager.class) Repository repository = OneDev.getInstance(ProjectService.class)
.getRepository(project.getId()); .getRepository(project.getId());
String mergeBaseId = GitUtils.getMergeBase(repository, String mergeBaseId = GitUtils.getMergeBase(repository,
ObjectId.fromString(remoteCommitId.get()), build.getCommitId()).name(); ObjectId.fromString(remoteCommitId.get()), build.getCommitId()).name();
@ -143,7 +143,7 @@ public class PushRepository extends SyncRepository {
Commandline git = CommandUtils.newGit(); Commandline git = CommandUtils.newGit();
configureProxy(git, getProxy()); configureProxy(git, getProxy());
configureCertificate(git, certificateFile); 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"); git.addArgs("push");
if (isForce()) if (isForce())
git.addArgs("--force"); 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.Interpolative;
import io.onedev.server.annotation.Markdown; import io.onedev.server.annotation.Markdown;
import io.onedev.server.buildspec.BuildSpec; 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.ListenerRegistry;
import io.onedev.server.event.project.build.BuildUpdated; 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 javax.validation.constraints.NotEmpty;
import java.io.File; import java.io.File;
@ -43,8 +43,8 @@ public class SetBuildDescriptionStep extends ServerSideStep {
@Override @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger jobLogger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger jobLogger) {
return OneDev.getInstance(TransactionManager.class).call(() -> { return OneDev.getInstance(TransactionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
build.setDescription(buildDescription); build.setDescription(buildDescription);
OneDev.getInstance(ListenerRegistry.class).post(new BuildUpdated(build)); OneDev.getInstance(ListenerRegistry.class).post(new BuildUpdated(build));
return new ServerStepResult(true); 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.Editable;
import io.onedev.server.annotation.Interpolative; import io.onedev.server.annotation.Interpolative;
import io.onedev.server.buildspec.BuildSpec; 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.ListenerRegistry;
import io.onedev.server.event.project.build.BuildUpdated; 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 javax.validation.constraints.NotEmpty;
import java.io.File; import java.io.File;
@ -46,8 +46,8 @@ public class SetBuildVersionStep extends ServerSideStep {
@Override @Override
public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) { public ServerStepResult run(Long buildId, File inputDir, TaskLogger logger) {
return OneDev.getInstance(TransactionManager.class).call(() -> { return OneDev.getInstance(TransactionService.class).call(() -> {
var build = OneDev.getInstance(BuildManager.class).load(buildId); var build = OneDev.getInstance(BuildService.class).load(buildId);
build.setVersion(buildVersion); build.setVersion(buildVersion);
OneDev.getInstance(ListenerRegistry.class).post(new BuildUpdated(build)); OneDev.getInstance(ListenerRegistry.class).post(new BuildUpdated(build));
Map<String, byte[]> outputFiles = new HashMap<>(); 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 edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.server.OneDev; 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.model.Group;
import io.onedev.server.annotation.Editable; import io.onedev.server.annotation.Editable;
@ -16,7 +16,7 @@ public class AllGroups implements ChoiceProvider {
@Override @Override
public List<Group> getChoices(boolean allPossible) { 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>() { Collections.sort(groups, new Comparator<Group>() {
@Override @Override

View File

@ -9,13 +9,13 @@ import com.google.common.collect.Lists;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.buildspecmodel.inputspec.userchoiceinput.choiceprovider.ChoiceProvider; 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; import io.onedev.server.buildspecmodel.inputspec.InputSpec;
public class UserChoiceInput { public class UserChoiceInput {
public static List<String> getPossibleValues() { 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()) .map(it->it.getName())
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

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

View File

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

View File

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

View File

@ -11,9 +11,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import io.onedev.commons.utils.ExplicitException; 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.HibernateConfig;
import io.onedev.server.persistence.SessionFactoryManager; import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
@Singleton @Singleton
@ -23,16 +23,16 @@ public class CheckDataVersion extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(CheckDataVersion.class); 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 @Inject
public CheckDataVersion(SessionFactoryManager sessionFactoryManager, DataManager dataManager, public CheckDataVersion(SessionFactoryService sessionFactoryService, DataService dataService,
HibernateConfig hibernateConfig) { HibernateConfig hibernateConfig) {
super(hibernateConfig); super(hibernateConfig);
this.sessionFactoryManager = sessionFactoryManager; this.sessionFactoryService = sessionFactoryService;
this.dataManager = dataManager; this.dataService = dataService;
} }
@Override @Override
@ -41,13 +41,13 @@ public class CheckDataVersion extends CommandHandler {
try { try {
doMaintenance(() -> { doMaintenance(() -> {
sessionFactoryManager.start(); sessionFactoryService.start();
// Use system.out in case logger is suppressed by user as this output is important to // Use system.out in case logger is suppressed by user as this output is important to
// upgrade procedure // upgrade procedure
String dataVersion; String dataVersion;
try (var conn = dataManager.openConnection()) { try (var conn = dataService.openConnection()) {
dataVersion = callWithTransaction(conn, () -> dataManager.checkDataVersion(conn, false)); dataVersion = callWithTransaction(conn, () -> dataService.checkDataVersion(conn, false));
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -63,7 +63,7 @@ public class CheckDataVersion extends CommandHandler {
@Override @Override
public void stop() { 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.commons.utils.ExplicitException;
import io.onedev.server.persistence.HibernateConfig; import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.data.DataManager; import io.onedev.server.data.DataService;
import io.onedev.server.persistence.SessionFactoryManager; import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -19,18 +19,18 @@ public class CleanDatabase extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(CleanDatabase.class); 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; private final HibernateConfig hibernateConfig;
@Inject @Inject
public CleanDatabase(SessionFactoryManager sessionFactoryManager, DataManager dataManager, public CleanDatabase(SessionFactoryService sessionFactoryService, DataService dataService,
HibernateConfig hibernateConfig) { HibernateConfig hibernateConfig) {
super(hibernateConfig); super(hibernateConfig);
this.sessionFactoryManager = sessionFactoryManager; this.sessionFactoryService = sessionFactoryService;
this.dataManager = dataManager; this.dataService = dataService;
this.hibernateConfig = hibernateConfig; this.hibernateConfig = hibernateConfig;
} }
@ -40,16 +40,16 @@ public class CleanDatabase extends CommandHandler {
try { try {
doMaintenance(() -> { doMaintenance(() -> {
sessionFactoryManager.start(); sessionFactoryService.start();
// Run this in autocommit mode as some sqls in the clean script may fail // 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 // when drop non-existent constraints, and we want to ignore them and
// continue to execute other sql statements without rolling back whole // continue to execute other sql statements without rolling back whole
// transaction // transaction
try (var conn = dataManager.openConnection()) { try (var conn = dataService.openConnection()) {
conn.setAutoCommit(true); conn.setAutoCommit(true);
dataManager.checkDataVersion(conn, false); dataService.checkDataVersion(conn, false);
dataManager.cleanDatabase(conn); dataService.cleanDatabase(conn);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -73,7 +73,7 @@ public class CleanDatabase extends CommandHandler {
@Override @Override
public void stop() { 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.bootstrap.Bootstrap;
import io.onedev.commons.utils.ExplicitException; 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.model.User;
import io.onedev.server.persistence.HibernateConfig; import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.data.DataManager; import io.onedev.server.data.DataService;
import io.onedev.server.persistence.SessionFactoryManager; import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
import org.apache.shiro.authc.credential.PasswordService; import org.apache.shiro.authc.credential.PasswordService;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -25,22 +25,22 @@ public class ResetAdminPassword extends CommandHandler {
private static final Logger logger = LoggerFactory.getLogger(ResetAdminPassword.class); 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; private final PasswordService passwordService;
@Inject @Inject
public ResetAdminPassword(HibernateConfig hibernateConfig, DataManager dataManager, public ResetAdminPassword(HibernateConfig hibernateConfig, DataService dataService,
SessionFactoryManager sessionFactoryManager, UserManager userManager, SessionFactoryService sessionFactoryService, UserService userService,
PasswordService passwordService) { PasswordService passwordService) {
super(hibernateConfig); super(hibernateConfig);
this.dataManager = dataManager; this.dataService = dataService;
this.sessionFactoryManager = sessionFactoryManager; this.sessionFactoryService = sessionFactoryService;
this.userManager = userManager; this.userService = userService;
this.passwordService = passwordService; this.passwordService = passwordService;
} }
@ -55,24 +55,24 @@ public class ResetAdminPassword extends CommandHandler {
try { try {
doMaintenance(() -> { doMaintenance(() -> {
sessionFactoryManager.start(); sessionFactoryService.start();
try (var conn = dataManager.openConnection()) { try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> { callWithTransaction(conn, () -> {
dataManager.checkDataVersion(conn, false); dataService.checkDataVersion(conn, false);
return null; return null;
}); });
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
User root = userManager.get(User.ROOT_ID); User root = userService.get(User.ROOT_ID);
if (root == null) if (root == null)
throw new ExplicitException("Server not set up yet"); throw new ExplicitException("Server not set up yet");
String password = Bootstrap.command.getArgs()[0]; String password = Bootstrap.command.getArgs()[0];
root.setTwoFactorAuthentication(null); root.setTwoFactorAuthentication(null);
root.setPassword(passwordService.encryptPassword(password)); root.setPassword(passwordService.encryptPassword(password));
userManager.update(root, null); userService.update(root, null);
// wait for a short period to have embedded db flushing data // wait for a short period to have embedded db flushing data
try { try {
@ -93,7 +93,7 @@ public class ResetAdminPassword extends CommandHandler {
@Override @Override
public void stop() { 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.ExplicitException;
import io.onedev.commons.utils.FileUtils; import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.ZipUtils; 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.HibernateConfig;
import io.onedev.server.persistence.SessionFactoryManager; import io.onedev.server.persistence.SessionFactoryService;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -26,20 +26,20 @@ public class RestoreDatabase extends CommandHandler {
public static final String COMMAND = "restore-db"; 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 final HibernateConfig hibernateConfig;
private File backupFile; private File backupFile;
@Inject @Inject
public RestoreDatabase(DataManager dataManager, SessionFactoryManager sessionFactoryManager, public RestoreDatabase(DataService dataService, SessionFactoryService sessionFactoryService,
HibernateConfig hibernateConfig) { HibernateConfig hibernateConfig) {
super(hibernateConfig); super(hibernateConfig);
this.dataManager = dataManager; this.dataService = dataService;
this.sessionFactoryManager = sessionFactoryManager; this.sessionFactoryService = sessionFactoryService;
this.hibernateConfig = hibernateConfig; this.hibernateConfig = hibernateConfig;
} }
@ -65,7 +65,7 @@ public class RestoreDatabase extends CommandHandler {
try { try {
doMaintenance(() -> { doMaintenance(() -> {
sessionFactoryManager.start(); sessionFactoryService.start();
if (backupFile.isFile()) { if (backupFile.isFile()) {
File dataDir = FileUtils.createTempDir("restore"); File dataDir = FileUtils.createTempDir("restore");
@ -97,19 +97,19 @@ public class RestoreDatabase extends CommandHandler {
} }
private void doRestore(File dataDir) { private void doRestore(File dataDir) {
dataManager.migrateData(dataDir); dataService.migrateData(dataDir);
try (var conn = dataManager.openConnection()) { try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> { callWithTransaction(conn, () -> {
String dbDataVersion = dataManager.checkDataVersion(conn, true); String dbDataVersion = dataService.checkDataVersion(conn, true);
if (dbDataVersion != null) { if (dbDataVersion != null) {
logger.info("Cleaning database..."); logger.info("Cleaning database...");
dataManager.cleanDatabase(conn); dataService.cleanDatabase(conn);
} }
logger.info("Creating tables..."); logger.info("Creating tables...");
dataManager.createTables(conn); dataService.createTables(conn);
return null; return null;
}); });
@ -118,13 +118,13 @@ public class RestoreDatabase extends CommandHandler {
} }
logger.info("Importing data into database..."); logger.info("Importing data into database...");
dataManager.importData(dataDir); dataService.importData(dataDir);
try (var conn = dataManager.openConnection()) { try (var conn = dataService.openConnection()) {
callWithTransaction(conn, () -> { callWithTransaction(conn, () -> {
logger.info("Applying foreign key constraints..."); logger.info("Applying foreign key constraints...");
try { try {
dataManager.applyConstraints(conn); dataService.applyConstraints(conn);
} catch (Exception e) { } catch (Exception e) {
var message = String.format("Failed to apply database constraints. If this error is caused by " + 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 " + "foreign key constraint violations, you may fix it via your database sql tool, and " +
@ -141,7 +141,7 @@ public class RestoreDatabase extends CommandHandler {
@Override @Override
public void stop() { public void stop() {
sessionFactoryManager.stop(); sessionFactoryService.stop();
} }
} }

View File

@ -9,7 +9,7 @@ import java.io.File;
import java.sql.Connection; import java.sql.Connection;
import java.util.List; import java.util.List;
public interface DataManager { public interface DataService {
String checkDataVersion(Connection conn, boolean allowEmptyDB); 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.StringUtils;
import io.onedev.commons.utils.ZipUtils; import io.onedev.commons.utils.ZipUtils;
import io.onedev.server.OneDev; 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.ClusterRunnable;
import io.onedev.server.cluster.ClusterTask; import io.onedev.server.cluster.ClusterTask;
import io.onedev.server.commandhandler.Upgrade; import io.onedev.server.commandhandler.Upgrade;
import io.onedev.server.data.migration.DataMigrator; import io.onedev.server.data.migration.DataMigrator;
import io.onedev.server.data.migration.MigrationHelper; import io.onedev.server.data.migration.MigrationHelper;
import io.onedev.server.data.migration.VersionedXmlDoc; import io.onedev.server.data.migration.VersionedXmlDoc;
import io.onedev.server.entitymanager.AlertManager; import io.onedev.server.service.AlertService;
import io.onedev.server.entitymanager.EmailAddressManager; import io.onedev.server.service.EmailAddressService;
import io.onedev.server.entitymanager.LinkSpecManager; import io.onedev.server.service.LinkSpecService;
import io.onedev.server.entitymanager.RoleManager; import io.onedev.server.service.RoleService;
import io.onedev.server.entitymanager.SettingManager; import io.onedev.server.service.SettingService;
import io.onedev.server.entitymanager.UserManager; import io.onedev.server.service.UserService;
import io.onedev.server.event.Listen; import io.onedev.server.event.Listen;
import io.onedev.server.event.entity.EntityPersisted; import io.onedev.server.event.entity.EntityPersisted;
import io.onedev.server.event.system.SystemStarted; 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.model.support.issue.LinkSpecOpposite;
import io.onedev.server.persistence.HibernateConfig; import io.onedev.server.persistence.HibernateConfig;
import io.onedev.server.persistence.PersistenceUtils; import io.onedev.server.persistence.PersistenceUtils;
import io.onedev.server.persistence.SessionFactoryManager; import io.onedev.server.persistence.SessionFactoryService;
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.Sessional;
import io.onedev.server.persistence.annotation.Transactional; import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.persistence.dao.Dao; 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; import io.onedev.server.web.util.editbean.NewUserBean;
@Singleton @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"; 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 String ENV_INITIAL_SSH_ROOT_URL = "initial_ssh_root_url";
private static final int BACKUP_BATCH_SIZE = 1000; private static final int BACKUP_BATCH_SIZE = 1000;
private final PhysicalNamingStrategy physicalNamingStrategy;
private final HibernateConfig hibernateConfig; @Inject
private PhysicalNamingStrategy physicalNamingStrategy;
private final Validator validator;
@Inject
private final SessionFactoryManager sessionFactoryManager; private HibernateConfig hibernateConfig;
private final Dao dao; @Inject
private Validator validator;
private final UserManager userManager;
@Inject
private final SettingManager settingManager; private SessionFactoryService sessionFactoryService;
private final PasswordService passwordService; @Inject
private Dao dao;
private final TaskScheduler taskScheduler;
@Inject
private final RoleManager roleManager; private UserService userService;
private final LinkSpecManager linkSpecManager; @Inject
private SettingService settingService;
private final EmailAddressManager emailAddressManager;
@Inject
private final ClusterManager clusterManager; private PasswordService passwordService;
private final TransactionManager transactionManager; @Inject
private TaskScheduler taskScheduler;
private final AlertManager alertManager;
@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; 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() { private Metadata getMetadata() {
return sessionFactoryManager.getMetadata(); return sessionFactoryService.getMetadata();
} }
private void execute(Connection conn, List<String> sqls, boolean failOnError) { 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.setName(bean.getName());
user.setFullName(bean.getFullName()); user.setFullName(bean.getFullName());
user.setPassword(passwordService.encryptPassword(bean.getPassword())); user.setPassword(passwordService.encryptPassword(bean.getPassword()));
userManager.replicate(user); userService.replicate(user);
EmailAddress primaryEmailAddress = null; EmailAddress primaryEmailAddress = null;
for (EmailAddress emailAddress: emailAddressManager.query()) { for (EmailAddress emailAddress: emailAddressService.query()) {
if (emailAddress.getOwner().equals(user) && emailAddress.isPrimary()) { if (emailAddress.getOwner().equals(user) && emailAddress.isPrimary()) {
primaryEmailAddress = emailAddress; primaryEmailAddress = emailAddress;
break; break;
@ -635,35 +625,35 @@ public class DefaultDataManager implements DataManager, Serializable {
} }
primaryEmailAddress.setValue(bean.getEmailAddress()); primaryEmailAddress.setValue(bean.getEmailAddress());
if (primaryEmailAddress.isNew()) if (primaryEmailAddress.isNew())
emailAddressManager.create(primaryEmailAddress); emailAddressService.create(primaryEmailAddress);
else else
emailAddressManager.update(primaryEmailAddress); emailAddressService.update(primaryEmailAddress);
} }
@Transactional @Transactional
@Override @Override
public List<ManualConfig> checkData() { public List<ManualConfig> checkData() {
List<ManualConfig> manualConfigs = new ArrayList<ManualConfig>(); List<ManualConfig> manualConfigs = new ArrayList<ManualConfig>();
User system = userManager.get(User.SYSTEM_ID); User system = userService.get(User.SYSTEM_ID);
if (system == null) { if (system == null) {
system = new User(); system = new User();
system.setId(User.SYSTEM_ID); system.setId(User.SYSTEM_ID);
system.setName(User.SYSTEM_NAME.toLowerCase()); system.setName(User.SYSTEM_NAME.toLowerCase());
system.setFullName(User.SYSTEM_NAME); system.setFullName(User.SYSTEM_NAME);
system.setPassword("no password"); 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) { if (unknown == null) {
unknown = new User(); unknown = new User();
unknown.setId(User.UNKNOWN_ID); unknown.setId(User.UNKNOWN_ID);
unknown.setName(User.UNKNOWN_NAME.toLowerCase()); unknown.setName(User.UNKNOWN_NAME.toLowerCase());
unknown.setFullName(User.UNKNOWN_NAME); unknown.setFullName(User.UNKNOWN_NAME);
unknown.setPassword("no password"); 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(); NewUserBean bean = new NewUserBean();
bean.setName(System.getenv(ENV_INITIAL_USER)); bean.setName(System.getenv(ENV_INITIAL_USER));
var passwordPath = System.getenv(ENV_INITIAL_PASSWORD_FILE); 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; SystemSetting systemSetting;
String ingressUrl = OneDev.getInstance().getIngressUrl(); String ingressUrl = OneDev.getInstance().getIngressUrl();
@ -704,12 +694,12 @@ public class DefaultDataManager implements DataManager, Serializable {
String serverUrl = System.getenv(ENV_INITIAL_SERVER_URL); String serverUrl = System.getenv(ENV_INITIAL_SERVER_URL);
if (ingressUrl != null) { if (ingressUrl != null) {
systemSetting.setServerUrl(ingressUrl); systemSetting.setServerUrl(ingressUrl);
settingManager.saveSystemSetting(systemSetting); settingService.saveSystemSetting(systemSetting);
systemSetting = null; systemSetting = null;
} else if (serverUrl != null) { } else if (serverUrl != null) {
systemSetting.setServerUrl(StringUtils.stripEnd(serverUrl, "/\\")); systemSetting.setServerUrl(StringUtils.stripEnd(serverUrl, "/\\"));
if (validator.validate(systemSetting).isEmpty()) { if (validator.validate(systemSetting).isEmpty()) {
settingManager.saveSystemSetting(systemSetting); settingService.saveSystemSetting(systemSetting);
systemSetting = null; systemSetting = null;
} }
} else { } else {
@ -737,35 +727,35 @@ public class DefaultDataManager implements DataManager, Serializable {
@Override @Override
public void complete() { 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) 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) { if (setting == null || setting.getValue() == null) {
SshSetting sshSetting = new SshSetting(); SshSetting sshSetting = new SshSetting();
sshSetting.setPemPrivateKey(SshKeyUtils.generatePEMPrivateKey()); 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) { if (setting == null || setting.getValue() == null) {
GpgSetting gpgSetting = new GpgSetting(); GpgSetting gpgSetting = new GpgSetting();
settingManager.saveGpgSetting(gpgSetting); settingService.saveGpgSetting(gpgSetting);
} }
setting = settingManager.findSetting(Key.SECURITY); setting = settingService.findSetting(Key.SECURITY);
if (setting == null) { if (setting == null) {
settingManager.saveSecuritySetting(new SecuritySetting()); settingService.saveSecuritySetting(new SecuritySetting());
} }
setting = settingManager.findSetting(Key.ISSUE); setting = settingService.findSetting(Key.ISSUE);
if (setting == null) { if (setting == null) {
LinkSpec link = new LinkSpec(); LinkSpec link = new LinkSpec();
link.setName("Sub Issues"); link.setName("Sub Issues");
@ -773,132 +763,132 @@ public class DefaultDataManager implements DataManager, Serializable {
link.setOpposite(new LinkSpecOpposite()); link.setOpposite(new LinkSpecOpposite());
link.getOpposite().setName("Parent Issue"); link.getOpposite().setName("Parent Issue");
link.setOrder(1); link.setOrder(1);
linkSpecManager.create(link); linkSpecService.create(link);
link = new LinkSpec(); link = new LinkSpec();
link.setName("Related"); link.setName("Related");
link.setMultiple(true); link.setMultiple(true);
link.setOrder(3); 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) { if (setting == null) {
settingManager.savePerformanceSetting(new PerformanceSetting()); settingService.savePerformanceSetting(new PerformanceSetting());
} }
setting = settingManager.findSetting(Key.AUTHENTICATOR); setting = settingService.findSetting(Key.AUTHENTICATOR);
if (setting == null) { if (setting == null) {
settingManager.saveAuthenticator(null); settingService.saveAuthenticator(null);
} }
setting = settingManager.findSetting(Key.JOB_EXECUTORS); setting = settingService.findSetting(Key.JOB_EXECUTORS);
if (setting == null) if (setting == null)
settingManager.saveJobExecutors(new ArrayList<>()); settingService.saveJobExecutors(new ArrayList<>());
setting = settingManager.findSetting(Key.GROOVY_SCRIPTS); setting = settingService.findSetting(Key.GROOVY_SCRIPTS);
if (setting == null) { 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) { if (setting == null) {
settingManager.savePullRequestSetting(new GlobalPullRequestSetting()); settingService.savePullRequestSetting(new GlobalPullRequestSetting());
} }
setting = settingManager.findSetting(Key.BUILD); setting = settingService.findSetting(Key.BUILD);
if (setting == null) { if (setting == null) {
settingManager.saveBuildSetting(new GlobalBuildSetting()); settingService.saveBuildSetting(new GlobalBuildSetting());
} }
setting = settingManager.findSetting(Key.PACK); setting = settingService.findSetting(Key.PACK);
if (setting == null) { if (setting == null) {
settingManager.savePackSetting(new GlobalPackSetting()); settingService.savePackSetting(new GlobalPackSetting());
} }
setting = settingManager.findSetting(Key.PROJECT); setting = settingService.findSetting(Key.PROJECT);
if (setting == null) { 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) { if (setting == null) {
settingManager.saveSubscriptionData(null); settingService.saveSubscriptionData(null);
} }
setting = settingManager.findSetting(Key.ALERT); setting = settingService.findSetting(Key.ALERT);
if (setting == null) { if (setting == null) {
settingManager.saveAlertSetting(new AlertSetting()); settingService.saveAlertSetting(new AlertSetting());
} }
setting = settingManager.findSetting(Key.AGENT); setting = settingService.findSetting(Key.AGENT);
if (setting == null) { 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) { if (setting == null) {
settingManager.saveServiceDeskSetting(null); settingService.saveServiceDeskSetting(null);
} else if (setting.getValue() != null && !validator.validate(setting.getValue()).isEmpty()) { } else if (setting.getValue() != null && !validator.validate(setting.getValue()).isEmpty()) {
manualConfigs.add(new ManualConfig("Specify Service Desk Setting", null, manualConfigs.add(new ManualConfig("Specify Service Desk Setting", null,
setting.getValue(), new HashSet<>(), true) { setting.getValue(), new HashSet<>(), true) {
@Override @Override
public void complete() { 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) { if (setting == null) {
settingManager.saveEmailTemplates(new EmailTemplates()); settingService.saveEmailTemplates(new EmailTemplates());
} else { } else {
var emailTemplates = (EmailTemplates) setting.getValue(); var emailTemplates = (EmailTemplates) setting.getValue();
if (emailTemplates.getStopwatchOverdue() == null) if (emailTemplates.getStopwatchOverdue() == null)
emailTemplates.setStopwatchOverdue(EmailTemplates.DEFAULT_STOPWATCH_OVERDUE); emailTemplates.setStopwatchOverdue(EmailTemplates.DEFAULT_STOPWATCH_OVERDUE);
if (emailTemplates.getPasswordReset() == null) if (emailTemplates.getPasswordReset() == null)
emailTemplates.setPasswordReset(EmailTemplates.DEFAULT_PASSWORD_RESET); 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) 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) if (setting == null)
settingManager.saveMailService(null); settingService.saveMailConnector(null);
setting = settingManager.findSetting(Key.BACKUP); setting = settingService.findSetting(Key.BACKUP);
if (setting == null) { if (setting == null) {
settingManager.saveBackupSetting(null); settingService.saveBackupSetting(null);
} else if (setting.getValue() != null && !validator.validate(setting.getValue()).isEmpty()) { } else if (setting.getValue() != null && !validator.validate(setting.getValue()).isEmpty()) {
Serializable backupSetting = setting.getValue(); Serializable backupSetting = setting.getValue();
manualConfigs.add(new ManualConfig("Specify Backup Setting", null, backupSetting) { manualConfigs.add(new ManualConfig("Specify Backup Setting", null, backupSetting) {
@Override @Override
public void complete() { public void complete() {
settingManager.saveBackupSetting((BackupSetting) getSetting()); settingService.saveBackupSetting((BackupSetting) getSetting());
} }
}); });
} }
setting = settingManager.findSetting(Key.BRANDING); setting = settingService.findSetting(Key.BRANDING);
if (setting == null) 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) { if (setting == null) {
ClusterSetting clusterSetting = new ClusterSetting(); ClusterSetting clusterSetting = new ClusterSetting();
clusterSetting.setReplicaCount(1); clusterSetting.setReplicaCount(1);
settingManager.saveClusterSetting(clusterSetting); settingService.saveClusterSetting(clusterSetting);
} }
setting = settingManager.findSetting(Key.AUDIT); setting = settingService.findSetting(Key.AUDIT);
if (setting == null) { if (setting == null) {
AuditSetting auditSetting = new AuditSetting(); 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(); Role owner = new Role();
owner.setName("Project Owner"); owner.setName("Project Owner");
owner.setId(Role.OWNER_ID); owner.setId(Role.OWNER_ID);
owner.setManageProject(true); owner.setManageProject(true);
roleManager.replicate(owner); roleService.replicate(owner);
roleManager.setupDefaults(); roleService.setupDefaults();
} }
return manualConfigs; return manualConfigs;
@ -913,7 +903,7 @@ public class DefaultDataManager implements DataManager, Serializable {
@Override @Override
public void execute() { public void execute() {
if (clusterManager.isLeaderServer()) { if (clusterService.isLeaderServer()) {
File tempDir = FileUtils.createTempDir("backup"); File tempDir = FileUtils.createTempDir("backup");
try { try {
File backupDir = new File(Bootstrap.getSiteDir(), Upgrade.DB_BACKUP_DIR); File backupDir = new File(Bootstrap.getSiteDir(), Upgrade.DB_BACKUP_DIR);
@ -942,7 +932,7 @@ public class DefaultDataManager implements DataManager, Serializable {
@Listen @Listen
public void on(SystemStarted event) { public void on(SystemStarted event) {
scheduleBackup(settingManager.getBackupSetting()); scheduleBackup(settingService.getBackupSetting());
} }
@Transactional @Transactional
@ -952,13 +942,13 @@ public class DefaultDataManager implements DataManager, Serializable {
Setting setting = (Setting) event.getEntity(); Setting setting = (Setting) event.getEntity();
if (setting.getKey() == Setting.Key.BACKUP) { if (setting.getKey() == Setting.Key.BACKUP) {
BackupSetting backupSetting = (BackupSetting) setting.getValue(); BackupSetting backupSetting = (BackupSetting) setting.getValue();
transactionManager.runAfterCommit(new ClusterRunnable() { transactionService.runAfterCommit(new ClusterRunnable() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
public void run() { public void run() {
clusterManager.submitToAllServers(new ClusterTask<Void>() { clusterService.submitToAllServers(new ClusterTask<Void>() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -978,11 +968,11 @@ public class DefaultDataManager implements DataManager, Serializable {
@Sessional @Sessional
protected void notifyBackupError(Throwable e) { 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 { 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.annotation.Nullable;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.tuple.Triple; 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.config.keys.KeyUtils;
import org.apache.sshd.common.digest.BuiltinDigests; import org.apache.sshd.common.digest.BuiltinDigests;
import org.dom4j.Element; import org.dom4j.Element;
@ -58,8 +56,8 @@ import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.StringUtils; import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.buildspecmodel.inputspec.InputSpec; import io.onedev.server.buildspecmodel.inputspec.InputSpec;
import io.onedev.server.entitymanager.SettingManager; import io.onedev.server.service.SettingService;
import io.onedev.server.markdown.MarkdownManager; import io.onedev.server.markdown.MarkdownService;
import io.onedev.server.markdown.MentionParser; import io.onedev.server.markdown.MentionParser;
import io.onedev.server.model.Issue; import io.onedev.server.model.Issue;
import io.onedev.server.model.IssueComment; import io.onedev.server.model.IssueComment;
@ -4610,8 +4608,8 @@ public class DataMigrator {
private Set<String> getMentioned108(Map<String, String> userIds, String content) { private Set<String> getMentioned108(Map<String, String> userIds, String content) {
Set<String> mentioned = new HashSet<>(); Set<String> mentioned = new HashSet<>();
MarkdownManager markdownManager = OneDev.getInstance(MarkdownManager.class); MarkdownService markdownService = OneDev.getInstance(MarkdownService.class);
for (String userName : new MentionParser().parseMentions(markdownManager.render(content))) { for (String userName : new MentionParser().parseMentions(markdownService.render(content))) {
String userId = userIds.get(userName); String userId = userIds.get(userName);
if (userId != null) if (userId != null)
mentioned.add(userId); mentioned.add(userId);
@ -8144,7 +8142,7 @@ public class DataMigrator {
if (key.equals("SYSTEM_UUID")) { if (key.equals("SYSTEM_UUID")) {
Element valueElement = element.element("value"); Element valueElement = element.element("value");
if (valueElement != null) { 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")) { } else if (key.equals("ALERT")) {
Element valueElement = element.element("value"); 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.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
import io.onedev.server.entitymanager.IssueChangeManager; import io.onedev.server.service.IssueChangeService;
import io.onedev.server.entitymanager.IssueManager; import io.onedev.server.service.IssueService;
import io.onedev.server.entitymanager.PullRequestChangeManager; import io.onedev.server.service.PullRequestChangeService;
import io.onedev.server.entitymanager.PullRequestManager; import io.onedev.server.service.PullRequestService;
import io.onedev.server.event.Listen; import io.onedev.server.event.Listen;
import io.onedev.server.event.project.codecomment.CodeCommentCreated; import io.onedev.server.event.project.codecomment.CodeCommentCreated;
import io.onedev.server.event.project.codecomment.CodeCommentEdited; 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.PullRequestCommentCreated;
import io.onedev.server.event.project.pullrequest.PullRequestCommentEdited; import io.onedev.server.event.project.pullrequest.PullRequestCommentEdited;
import io.onedev.server.event.project.pullrequest.PullRequestOpened; 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.CodeComment;
import io.onedev.server.model.Issue; import io.onedev.server.model.Issue;
import io.onedev.server.model.IssueChange; 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; import io.onedev.server.persistence.annotation.Transactional;
@Singleton @Singleton
public class DefaultReferenceChangeManager implements ReferenceChangeManager { public class DefaultReferenceChangeService implements ReferenceChangeService {
private final IssueManager issueManager;
private final PullRequestManager pullRequestManager;
private final IssueChangeManager issueChangeManager;
private final PullRequestChangeManager pullRequestChangeManager;
private final MarkdownManager markdownManager;
@Inject @Inject
public DefaultReferenceChangeManager(IssueManager issueManager, private IssueService issueService;
PullRequestManager pullRequestManager, IssueChangeManager issueChangeManager,
PullRequestChangeManager pullRequestChangeManager, MarkdownManager markdownManager) { @Inject
this.issueManager = issueManager; private PullRequestService pullRequestService;
this.pullRequestManager = pullRequestManager;
this.issueChangeManager = issueChangeManager; @Inject
this.pullRequestChangeManager = pullRequestChangeManager; private IssueChangeService issueChangeService;
this.markdownManager = markdownManager;
} @Inject
private PullRequestChangeService pullRequestChangeService;
@Inject
private MarkdownService markdownService;
@Override @Override
public void addReferenceChange(User user, Issue issue, String markdown) { public void addReferenceChange(User user, Issue issue, String markdown) {
if (markdown != null) { if (markdown != null) {
Document document = Jsoup.parseBodyFragment(markdownManager.render(markdown)); Document document = Jsoup.parseBodyFragment(markdownService.render(markdown));
for (var reference: extractReferences(document, issue.getProject())) { for (var reference: extractReferences(document, issue.getProject())) {
if (reference instanceof IssueReference) { 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)) { if (referencedIssue != null && !referencedIssue.equals(issue)) {
boolean found = false; boolean found = false;
for (var change : referencedIssue.getChanges()) { for (var change : referencedIssue.getChanges()) {
@ -93,11 +87,11 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user); change.setUser(user);
change.setIssue(referencedIssue); change.setIssue(referencedIssue);
referencedIssue.getChanges().add(change); referencedIssue.getChanges().add(change);
issueChangeManager.create(change, null); issueChangeService.create(change, null);
} }
} }
} else if (reference instanceof PullRequestReference) { } else if (reference instanceof PullRequestReference) {
var referencedPullRequest = pullRequestManager.find(reference.getProject(), reference.getNumber()); var referencedPullRequest = pullRequestService.find(reference.getProject(), reference.getNumber());
if (referencedPullRequest != null) { if (referencedPullRequest != null) {
boolean found = false; boolean found = false;
for (var change: referencedPullRequest.getChanges()) { for (var change: referencedPullRequest.getChanges()) {
@ -117,7 +111,7 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user); change.setUser(user);
change.setRequest(referencedPullRequest); change.setRequest(referencedPullRequest);
referencedPullRequest.getChanges().add(change); referencedPullRequest.getChanges().add(change);
pullRequestChangeManager.create(change, null); pullRequestChangeService.create(change, null);
} }
} }
} }
@ -129,10 +123,10 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
@Override @Override
public void addReferenceChange(User user, PullRequest request, String markdown) { public void addReferenceChange(User user, PullRequest request, String markdown) {
if (markdown != null) { if (markdown != null) {
Document document = Jsoup.parseBodyFragment(markdownManager.render(markdown)); Document document = Jsoup.parseBodyFragment(markdownService.render(markdown));
for (var reference: extractReferences(document, request.getTargetProject())) { for (var reference: extractReferences(document, request.getTargetProject())) {
if (reference instanceof IssueReference) { if (reference instanceof IssueReference) {
var referencedIssue = issueManager.find(reference.getProject(), reference.getNumber()); var referencedIssue = issueService.find(reference.getProject(), reference.getNumber());
if (referencedIssue != null) { if (referencedIssue != null) {
boolean found = false; boolean found = false;
for (var change : referencedIssue.getChanges()) { for (var change : referencedIssue.getChanges()) {
@ -152,11 +146,11 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user); change.setUser(user);
change.setIssue(referencedIssue); change.setIssue(referencedIssue);
referencedIssue.getChanges().add(change); referencedIssue.getChanges().add(change);
issueChangeManager.create(change, null); issueChangeService.create(change, null);
} }
} }
} else if (reference instanceof PullRequestReference) { } 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)) { if (referencedPullRequest != null && !referencedPullRequest.equals(request)) {
boolean found = false; boolean found = false;
for (var change: referencedPullRequest.getChanges()) { for (var change: referencedPullRequest.getChanges()) {
@ -176,7 +170,7 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user); change.setUser(user);
change.setRequest(referencedPullRequest); change.setRequest(referencedPullRequest);
referencedPullRequest.getChanges().add(change); referencedPullRequest.getChanges().add(change);
pullRequestChangeManager.create(change, null); pullRequestChangeService.create(change, null);
} }
} }
} }
@ -187,10 +181,10 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
@Override @Override
public void addReferenceChange(User user, CodeComment comment, String markdown) { public void addReferenceChange(User user, CodeComment comment, String markdown) {
if (markdown != null) { if (markdown != null) {
Document document = Jsoup.parseBodyFragment(markdownManager.render(markdown)); Document document = Jsoup.parseBodyFragment(markdownService.render(markdown));
for (var reference: extractReferences(document, comment.getProject())) { for (var reference: extractReferences(document, comment.getProject())) {
if (reference instanceof IssueReference) { if (reference instanceof IssueReference) {
var referencedIssue = issueManager.find(reference.getProject(), reference.getNumber()); var referencedIssue = issueService.find(reference.getProject(), reference.getNumber());
if (referencedIssue != null) { if (referencedIssue != null) {
boolean found = false; boolean found = false;
for (var change : referencedIssue.getChanges()) { for (var change : referencedIssue.getChanges()) {
@ -210,11 +204,11 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user); change.setUser(user);
change.setIssue(referencedIssue); change.setIssue(referencedIssue);
referencedIssue.getChanges().add(change); referencedIssue.getChanges().add(change);
issueChangeManager.create(change, null); issueChangeService.create(change, null);
} }
} }
} else if (reference instanceof PullRequestReference) { } else if (reference instanceof PullRequestReference) {
var referencedPullRequest = pullRequestManager.find(reference.getProject(), reference.getNumber()); var referencedPullRequest = pullRequestService.find(reference.getProject(), reference.getNumber());
if (referencedPullRequest != null) { if (referencedPullRequest != null) {
boolean found = false; boolean found = false;
for (var change: referencedPullRequest.getChanges()) { for (var change: referencedPullRequest.getChanges()) {
@ -234,7 +228,7 @@ public class DefaultReferenceChangeManager implements ReferenceChangeManager {
change.setUser(user); change.setUser(user);
change.setRequest(referencedPullRequest); change.setRequest(referencedPullRequest);
referencedPullRequest.getChanges().add(change); 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 org.apache.commons.lang3.builder.HashCodeBuilder;
import io.onedev.server.OneDev; 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.model.Project;
public abstract class EntityReference implements Serializable { public abstract class EntityReference implements Serializable {
@ -30,7 +30,7 @@ public abstract class EntityReference implements Serializable {
} }
public Project getProject() { public Project getProject() {
return OneDev.getInstance(ProjectManager.class).load(projectId); return OneDev.getInstance(ProjectService.class).load(projectId);
} }
public Long getProjectId() { public Long getProjectId() {
@ -59,7 +59,7 @@ public abstract class EntityReference implements Serializable {
} }
public static EntityReference of(String type, String referenceString, @Nullable Project currentProject) { 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('#'); var index = referenceString.indexOf('#');
if (index != -1) { if (index != -1) {
var projectPath = referenceString.substring(0, index); var projectPath = referenceString.substring(0, index);
@ -70,7 +70,7 @@ public abstract class EntityReference implements Serializable {
else else
throw new ValidationException("Reference project not specified: " + referenceString); throw new ValidationException("Reference project not specified: " + referenceString);
} else { } else {
var project = projectManager.findByPath(projectPath); var project = projectService.findByPath(projectPath);
if (project != null) if (project != null)
return EntityReference.of(type, project, number); return EntityReference.of(type, project, number);
else else
@ -81,7 +81,7 @@ public abstract class EntityReference implements Serializable {
if (index != -1) { if (index != -1) {
var projectKey = referenceString.substring(0, index); var projectKey = referenceString.substring(0, index);
var number = parseReferenceNumber(referenceString.substring(index + 1)); var number = parseReferenceNumber(referenceString.substring(index + 1));
var project = projectManager.findByKey(projectKey); var project = projectService.findByKey(projectKey);
if (project != null) if (project != null)
return EntityReference.of(type, project, number); return EntityReference.of(type, project, number);
else else

View File

@ -7,7 +7,7 @@ import io.onedev.server.model.Issue;
import io.onedev.server.model.PullRequest; import io.onedev.server.model.PullRequest;
import io.onedev.server.model.User; import io.onedev.server.model.User;
public interface ReferenceChangeManager { public interface ReferenceChangeService {
void addReferenceChange(User user, Issue issue, @Nullable String markdown); 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.commons.utils.StringUtils;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.ProjectManager; import io.onedev.server.service.ProjectService;
import io.onedev.server.entitymanager.SettingManager; import io.onedev.server.service.SettingService;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.util.HtmlUtils; import io.onedev.server.util.HtmlUtils;
import io.onedev.server.util.TextNodeVisitor; import io.onedev.server.util.TextNodeVisitor;
@ -48,7 +48,7 @@ public class ReferenceUtils {
public static String transformReferences(String text, @Nullable Project currentProject, public static String transformReferences(String text, @Nullable Project currentProject,
BiFunction<EntityReference, String, String> transformer) { BiFunction<EntityReference, String, String> transformer) {
if (mayContainReferences(text)) { if (mayContainReferences(text)) {
var projectManager = OneDev.getInstance(ProjectManager.class); var projectService = OneDev.getInstance(ProjectService.class);
var builder = new StringBuilder(); var builder = new StringBuilder();
var index = 0; var index = 0;
var matcher = PATTERN.matcher(text); var matcher = PATTERN.matcher(text);
@ -56,11 +56,11 @@ public class ReferenceUtils {
Project project; Project project;
var projectKey = matcher.group("projectKey"); var projectKey = matcher.group("projectKey");
if (projectKey != null) { if (projectKey != null) {
project = projectManager.findByKey(projectKey); project = projectService.findByKey(projectKey);
} else { } else {
var projectPath = matcher.group("projectPath"); var projectPath = matcher.group("projectPath");
if (projectPath != null) if (projectPath != null)
project = projectManager.findByPath(projectPath); project = projectService.findByPath(projectPath);
else else
project = currentProject; project = currentProject;
} }
@ -78,7 +78,7 @@ public class ReferenceUtils {
} else { } else {
text = transformer.apply(null, text); 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()) { for (var entry: issueSetting.getExternalIssueTransformers().getEntries()) {
text = text.replaceAll(entry.getPattern(), entry.getReplaceWith()); 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.AppLoader;
import io.onedev.commons.loader.ManagedSerializedForm; import io.onedev.commons.loader.ManagedSerializedForm;
import io.onedev.commons.utils.LockUtils; import io.onedev.commons.utils.LockUtils;
import io.onedev.server.cluster.ClusterManager; import io.onedev.server.cluster.ClusterService;
import io.onedev.server.entitymanager.ProjectManager; import io.onedev.server.service.ProjectService;
import io.onedev.server.event.project.ProjectDeleted; import io.onedev.server.event.project.ProjectDeleted;
import io.onedev.server.event.project.ProjectEvent; import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.event.project.ActiveServerChanged; import io.onedev.server.event.project.ActiveServerChanged;
import io.onedev.server.persistence.SessionManager; import io.onedev.server.persistence.SessionService;
import io.onedev.server.persistence.TransactionManager; import io.onedev.server.persistence.TransactionService;
import io.onedev.server.persistence.annotation.Transactional; import io.onedev.server.persistence.annotation.Transactional;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -28,25 +28,25 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
private static final Logger logger = LoggerFactory.getLogger(DefaultListenerRegistry.class); 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 volatile Map<Object, Collection<Method>> listenerMethods;
private final Map<Class<?>, Collection<Listener>> listeners = new ConcurrentHashMap<>(); private final Map<Class<?>, Collection<Listener>> listeners = new ConcurrentHashMap<>();
@Inject @Inject
public DefaultListenerRegistry(ProjectManager projectManager, ClusterManager clusterManager, public DefaultListenerRegistry(ProjectService projectService, ClusterService clusterService,
TransactionManager transactionManager, SessionManager sessionManager) { TransactionService transactionService, SessionService sessionService) {
this.projectManager = projectManager; this.projectService = projectService;
this.transactionManager = transactionManager; this.transactionService = transactionService;
this.clusterManager = clusterManager; this.clusterService = clusterService;
this.sessionManager = sessionManager; this.sessionService = sessionService;
} }
public Object writeReplace() throws ObjectStreamException { public Object writeReplace() throws ObjectStreamException {
@ -110,17 +110,17 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
if (event instanceof ProjectEvent) { if (event instanceof ProjectEvent) {
ProjectEvent projectEvent = (ProjectEvent) event; ProjectEvent projectEvent = (ProjectEvent) event;
Long projectId = projectEvent.getProject().getId(); Long projectId = projectEvent.getProject().getId();
transactionManager.runAfterCommit(() -> projectManager.submitToActiveServer(projectId, () -> { transactionService.runAfterCommit(() -> projectService.submitToActiveServer(projectId, () -> {
SecurityUtils.bindAsSystem(); SecurityUtils.bindAsSystem();
try { try {
String lockName = projectEvent.getLockName(); String lockName = projectEvent.getLockName();
if (lockName != null) { if (lockName != null) {
LockUtils.call(lockName, true, () -> { LockUtils.call(lockName, true, () -> {
sessionManager.run(() -> invokeListeners(event)); sessionService.run(() -> invokeListeners(event));
return null; return null;
}); });
} else { } else {
sessionManager.run(() -> invokeListeners(event)); sessionService.run(() -> invokeListeners(event));
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("Error invoking listeners", e); logger.error("Error invoking listeners", e);
@ -130,11 +130,11 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
} else if (event instanceof ProjectDeleted) { } else if (event instanceof ProjectDeleted) {
ProjectDeleted projectDeleted = (ProjectDeleted) event; ProjectDeleted projectDeleted = (ProjectDeleted) event;
Long projectId = projectDeleted.getProjectId(); Long projectId = projectDeleted.getProjectId();
String activeServer = projectManager.getActiveServer(projectId, false); String activeServer = projectService.getActiveServer(projectId, false);
if (activeServer != null) { if (activeServer != null) {
transactionManager.runAfterCommit(() -> clusterManager.submitToServer(activeServer, () -> { transactionService.runAfterCommit(() -> clusterService.submitToServer(activeServer, () -> {
try { try {
sessionManager.run(() -> invokeListeners(event)); sessionService.run(() -> invokeListeners(event));
} catch (Exception e) { } catch (Exception e) {
logger.error("Error invoking listeners", e); logger.error("Error invoking listeners", e);
} }
@ -143,9 +143,9 @@ public class DefaultListenerRegistry implements ListenerRegistry, Serializable {
} }
} else if (event instanceof ActiveServerChanged) { } else if (event instanceof ActiveServerChanged) {
ActiveServerChanged activeServerChanged = (ActiveServerChanged) event; ActiveServerChanged activeServerChanged = (ActiveServerChanged) event;
transactionManager.runAfterCommit(() -> clusterManager.submitToServer(activeServerChanged.getActiveServer(), () -> { transactionService.runAfterCommit(() -> clusterService.submitToServer(activeServerChanged.getActiveServer(), () -> {
try { try {
sessionManager.run(() -> invokeListeners(event)); sessionService.run(() -> invokeListeners(event));
} catch (Exception e) { } catch (Exception e) {
logger.error("Error invoking listeners", e); logger.error("Error invoking listeners", e);
} }

View File

@ -1,7 +1,7 @@
package io.onedev.server.event.agent; package io.onedev.server.event.agent;
import io.onedev.server.OneDev; 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.event.Event;
import io.onedev.server.model.Agent; import io.onedev.server.model.Agent;
@ -14,7 +14,7 @@ public abstract class AgentEvent extends Event {
} }
public Agent getAgent() { 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; package io.onedev.server.event.project;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.ProjectManager; import io.onedev.server.service.ProjectService;
import io.onedev.server.entitymanager.UserManager; import io.onedev.server.service.UserService;
import io.onedev.server.event.Event; import io.onedev.server.event.Event;
import io.onedev.server.model.Project; import io.onedev.server.model.Project;
import io.onedev.server.model.User; import io.onedev.server.model.User;
import io.onedev.server.model.support.LastActivity; import io.onedev.server.model.support.LastActivity;
import io.onedev.server.notification.ActivityDetail; import io.onedev.server.notification.ActivityDetail;
import io.onedev.server.util.commenttext.CommentText; import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.io.Serializable; import java.io.Serializable;
@ -35,12 +35,12 @@ public abstract class ProjectEvent extends Event implements Serializable {
} }
public Project getProject() { public Project getProject() {
return OneDev.getInstance(ProjectManager.class).load(projectId); return OneDev.getInstance(ProjectService.class).load(projectId);
} }
@Nullable @Nullable
public User getUser() { 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() { public Date getDate() {
@ -105,7 +105,7 @@ public abstract class ProjectEvent extends Event implements Serializable {
} }
public String getUrl() { public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getProject(), true); return OneDev.getInstance(UrlService.class).urlFor(getProject(), true);
} }
@Nullable @Nullable

View File

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

View File

@ -5,8 +5,8 @@ import java.util.Date;
import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectId;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.BuildManager; import io.onedev.server.service.BuildService;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
import io.onedev.server.event.project.ProjectEvent; import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.model.Build; import io.onedev.server.model.Build;
import io.onedev.server.model.User; import io.onedev.server.model.User;
@ -27,7 +27,7 @@ public abstract class BuildEvent extends ProjectEvent implements CommitAware {
} }
public Build getBuild() { public Build getBuild() {
return OneDev.getInstance(BuildManager.class).load(buildId); return OneDev.getInstance(BuildService.class).load(buildId);
} }
@Override @Override
@ -48,7 +48,7 @@ public abstract class BuildEvent extends ProjectEvent implements CommitAware {
@Override @Override
public String getUrl() { 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 java.util.Date;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.CodeCommentManager; import io.onedev.server.service.CodeCommentService;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
import io.onedev.server.event.project.ProjectEvent; import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.model.CodeComment; import io.onedev.server.model.CodeComment;
import io.onedev.server.model.User; import io.onedev.server.model.User;
@ -26,12 +26,12 @@ public abstract class CodeCommentEvent extends ProjectEvent {
} }
public CodeComment getComment() { public CodeComment getComment() {
return OneDev.getInstance(CodeCommentManager.class).load(commentId); return OneDev.getInstance(CodeCommentService.class).load(commentId);
} }
@Override @Override
public String getUrl() { 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; package io.onedev.server.event.project.codecomment;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.CodeCommentReplyManager; import io.onedev.server.service.CodeCommentReplyService;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
import io.onedev.server.model.CodeCommentReply; import io.onedev.server.model.CodeCommentReply;
import io.onedev.server.util.commenttext.CommentText; import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText; import io.onedev.server.util.commenttext.MarkdownText;
@ -19,7 +19,7 @@ public class CodeCommentReplyCreated extends CodeCommentEvent {
} }
public CodeCommentReply getReply() { public CodeCommentReply getReply() {
return OneDev.getInstance(CodeCommentReplyManager.class).load(replyId); return OneDev.getInstance(CodeCommentReplyService.class).load(replyId);
} }
@Override @Override
@ -34,7 +34,7 @@ public class CodeCommentReplyCreated extends CodeCommentEvent {
@Override @Override
public String getUrl() { 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; package io.onedev.server.event.project.codecomment;
import io.onedev.server.OneDev; 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.model.CodeCommentReply;
import io.onedev.server.security.SecurityUtils; import io.onedev.server.security.SecurityUtils;
@ -19,7 +19,7 @@ public class CodeCommentReplyEdited extends CodeCommentEvent {
} }
public CodeCommentReply getReply() { public CodeCommentReply getReply() {
return OneDev.getInstance(CodeCommentReplyManager.class).load(replyId); return OneDev.getInstance(CodeCommentReplyService.class).load(replyId);
} }
@Override @Override

View File

@ -3,8 +3,8 @@ package io.onedev.server.event.project.codecomment;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.CodeCommentStatusChangeManager; import io.onedev.server.service.CodeCommentStatusChangeService;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
import io.onedev.server.model.CodeCommentStatusChange; import io.onedev.server.model.CodeCommentStatusChange;
import io.onedev.server.util.commenttext.CommentText; import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText; import io.onedev.server.util.commenttext.MarkdownText;
@ -24,7 +24,7 @@ public class CodeCommentStatusChanged extends CodeCommentEvent {
} }
public CodeCommentStatusChange getChange() { public CodeCommentStatusChange getChange() {
return OneDev.getInstance(CodeCommentStatusChangeManager.class).load(changeId); return OneDev.getInstance(CodeCommentStatusChangeService.class).load(changeId);
} }
@Override @Override
@ -47,7 +47,7 @@ public class CodeCommentStatusChanged extends CodeCommentEvent {
@Override @Override
public String getUrl() { 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; package io.onedev.server.event.project.issue;
import io.onedev.server.OneDev; 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.Group;
import io.onedev.server.model.IssueChange; import io.onedev.server.model.IssueChange;
import io.onedev.server.model.User; 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.ProjectScopedCommit;
import io.onedev.server.util.commenttext.CommentText; import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText; import io.onedev.server.util.commenttext.MarkdownText;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Collection; import java.util.Collection;
@ -36,7 +36,7 @@ public class IssueChanged extends IssueEvent implements CommitAware {
} }
public IssueChange getChange() { public IssueChange getChange() {
return OneDev.getInstance(IssueChangeManager.class).load(changeId); return OneDev.getInstance(IssueChangeService.class).load(changeId);
} }
@Override @Override
@ -76,7 +76,7 @@ public class IssueChanged extends IssueEvent implements CommitAware {
@Override @Override
public String getUrl() { public String getUrl() {
return OneDev.getInstance(UrlManager.class).urlFor(getChange(), true); return OneDev.getInstance(UrlService.class).urlFor(getChange(), true);
} }
@Override @Override

View File

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

View File

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

View File

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

View File

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

View File

@ -3,11 +3,11 @@ package io.onedev.server.event.project.pack;
import java.util.Date; import java.util.Date;
import io.onedev.server.OneDev; 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.event.project.ProjectEvent;
import io.onedev.server.model.Pack; import io.onedev.server.model.Pack;
import io.onedev.server.model.User; import io.onedev.server.model.User;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
public abstract class PackEvent extends ProjectEvent { public abstract class PackEvent extends ProjectEvent {
@ -21,12 +21,12 @@ public abstract class PackEvent extends ProjectEvent {
} }
public Pack getPack() { public Pack getPack() {
return OneDev.getInstance(PackManager.class).load(packId); return OneDev.getInstance(PackService.class).load(packId);
} }
@Override @Override
public String getUrl() { 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 java.util.Date;
import io.onedev.server.OneDev; 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.PullRequest;
import io.onedev.server.model.User; import io.onedev.server.model.User;
@ -30,7 +30,7 @@ public class PullRequestAssigned extends PullRequestEvent {
} }
public User getAssignee() { 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 java.util.Date;
import io.onedev.server.OneDev; import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.BuildManager; import io.onedev.server.service.BuildService;
import io.onedev.server.model.Build; import io.onedev.server.model.Build;
public class PullRequestBuildEvent extends PullRequestEvent { public class PullRequestBuildEvent extends PullRequestEvent {
@ -23,7 +23,7 @@ public class PullRequestBuildEvent extends PullRequestEvent {
} }
public Build getBuild() { public Build getBuild() {
return OneDev.getInstance(BuildManager.class).load(buildId); return OneDev.getInstance(BuildService.class).load(buildId);
} }
@Override @Override

View File

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

View File

@ -5,7 +5,7 @@ import io.onedev.server.model.CodeComment;
import io.onedev.server.model.PullRequest; import io.onedev.server.model.PullRequest;
import io.onedev.server.util.commenttext.CommentText; import io.onedev.server.util.commenttext.CommentText;
import io.onedev.server.util.commenttext.MarkdownText; import io.onedev.server.util.commenttext.MarkdownText;
import io.onedev.server.web.UrlManager; import io.onedev.server.web.UrlService;
public class PullRequestCodeCommentCreated extends PullRequestCodeCommentEvent { public class PullRequestCodeCommentCreated extends PullRequestCodeCommentEvent {
@ -27,7 +27,7 @@ public class PullRequestCodeCommentCreated extends PullRequestCodeCommentEvent {
@Override @Override
public String getUrl() { 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