Class VcsRepositoryConfigurationServiceImpl
- java.lang.Object
-
- com.atlassian.bamboo.vcs.configuration.service.VcsRepositoryConfigurationServiceImpl
-
- All Implemented Interfaces:
VcsRepositoryConfigurationService
public class VcsRepositoryConfigurationServiceImpl extends Object implements VcsRepositoryConfigurationService
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.atlassian.bamboo.vcs.configuration.service.VcsRepositoryConfigurationService
VcsRepositoryConfigurationService.LinkedRepositoryAccess, VcsRepositoryConfigurationService.RepositoryAccess
-
-
Field Summary
-
Fields inherited from interface com.atlassian.bamboo.vcs.configuration.service.VcsRepositoryConfigurationService
LEGACY_VCS_PLUGINS_USED_BANDANA_KEY
-
-
Constructor Summary
Constructors Constructor Description VcsRepositoryConfigurationServiceImpl(RepositoryDefinitionManager repositoryDefinitionManager, AuditLogService auditLogService, HibernateMutableAclService aclService, RawRepositoryConfigurationXmlConverter rawRepositoryConfigurationXmlConverter, ScopedExclusionService scopedExclusionService, TriggerConfigurationService triggerConfigurationService, TaskConfigurationService taskConfigurationService, ChainBranchManager chainBranchManager, EnvironmentTaskService environmentTaskService, BuildDefinitionManager buildDefinitionManager, com.atlassian.event.api.EventPublisher eventPublisher, BranchCreationFacade branchCreationFacade, VcsRepositoryManager vcsRepositoryManager, TransactionAndHibernateTemplate hibernateTemplate)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description @NotNull ErrorCollection
configureRssDetection(long repositoryId, PartialVcsRepositoryData vcsRepositoryData, boolean isEnabled)
Sets detection of Bamboo Specs for repository and saves new config.PartialVcsRepositoryData
convertToNewRepositoryConfiguration(@NotNull PartialVcsRepositoryData vcsRepositoryData)
If repository data represents a repository implemented in the old system and appropriate new plugin exists, the data is converted to the new plugin.@NotNull PartialVcsRepositoryData
createLinkedRepository(@NotNull PartialVcsRepositoryData newVcsConfiguration, @NotNull com.atlassian.user.User user, @NotNull VcsRepositoryConfigurationService.RepositoryAccess accessOption)
Creates new linked repositoryorg.acegisecurity.acls.MutableAcl
createNewSharedRepositoryDefaultAcl(@Nullable com.atlassian.user.User user, long repositoryId, VcsRepositoryConfigurationService.RepositoryAccess accessOption)
Creates a defualt Acl for a specific repository which has: - READ permissions for the creator (if applicable) - READ permission to logged in users if ALL_USERS option is specified@NotNull PartialVcsRepositoryData
createPlanRepository(@NotNull Plan plan, @NotNull PartialVcsRepositoryData newVcsConfiguration)
Creates "plan local" repository and adds it to a plan.@NotNull PartialVcsRepositoryData
createProjectRepository(@NotNull PartialVcsRepositoryData newVcsConfiguration, @Nullable com.atlassian.user.User user, @NotNull VcsRepositoryConfigurationService.RepositoryAccess accessOption)
Creates new project repositoryvoid
deleteLinkedRepository(long repositoryId)
Removes linked repository.void
deleteProjectRepository(long repositoryId)
Removes project repository.void
deleteRepository(@NotNull Plan plan, long repositoryId, Long replacementRepositoryId)
Removes repository definition from a plan@NotNull PartialVcsRepositoryData
editLinkedRepository(long repositoryId, @NotNull PartialVcsRepositoryData newVcsConfiguration)
Edits existing linked repository@NotNull PartialVcsRepositoryData
editProjectRepository(long repositoryId, @NotNull PartialVcsRepositoryData newVcsConfiguration)
Edits existing project repository@NotNull PartialVcsRepositoryData
editRepository(@NotNull Plan plan, long repositoryId, @NotNull PartialVcsRepositoryData newVcsConfiguration)
Edits existing "plan local" repository.protected @NotNull List<PlanRepositoryLink>
getNewRepositoryList(@NotNull List<PlanRepositoryLink> originalRepositories, @NotNull PlanRepositoryLink toMove, long beforeId, long afterId)
Map<ImmutableJob,List<TaskDefinition>>
getRelevantJobsForRepositoryIdChange(@NotNull ImmutablePlan plan, long repositoryId)
Gets list of jobs using a repository.@org.jetbrains.annotations.NotNull boolean
hasProjectSharedCredentialsForRepository(PartialVcsRepositoryData vcsRepositoryData)
@NotNull PartialVcsRepositoryData
linkRepositoryToPlan(@NotNull Plan plan, long selectedRepositoryId)
Connects a linked repository to a plan by creating a new repository that inherits all the data from the linked repository and adding it to the plan.PartialVcsRepositoryData
mergeLinkedRepository(@NotNull PartialVcsRepositoryData vcsRepositoryData)
Merges the state of the given linked repository into the database.void
mergePlanRepositories(@NotNull Plan plan, @NotNull List<PartialVcsRepositoryData> vcsRepositoryDataList)
Merges the state of the given plan repositories into the database.PartialVcsRepositoryData
mergeProjectRepository(@NotNull PartialVcsRepositoryData vcsRepositoryData)
Merges the state of the given project repository into the database.void
moveRepository(@NotNull Plan plan, long repositoryId, long beforePosition, long afterPosition)
Changes position of repository in the repository list.PartialVcsRepositoryData
replaceRepositoryInPlan(@NotNull Plan plan, @NotNull VcsRepositoryData parentRepository, @NotNull PartialVcsRepositoryData oldRepository, @NotNull PartialVcsRepositoryData newRepository)
Replaces uses of a repository with another one.void
setParentOfPlanRepository(@NotNull ImmutablePlan plan, long repositoryId, long parentRepositoryId)
Creates or changes parent-child relationship for a plan repository.void
shareRepository(@NotNull Plan plan, @NotNull PartialVcsRepositoryData repositoryData, @NotNull String repositoryName, @Nullable String userDescription, @NotNull com.atlassian.user.User user)
Converts existing Plan repository to Linked repository.boolean
validateContinuableStatus(@NotNull ResultsSummary resultSummary)
Checks that result is continuable and repositories referenced by a result still exists in Bamboo db.void
validateLinkedRepository(@NotNull PartialVcsRepositoryData vcsRepositoryData)
Validate linked repository before saving it in database.boolean
validateLinkedRepositoryName(@NotNull String repositoryName, @Nullable BambooIdProvider vcsRepositoryData)
Checks if name of a linked repository is unique.void
validatePlanRepositoriesNamesAndOids(@NotNull Plan plan, @NotNull List<PartialVcsRepositoryData> repositoryDataList)
Validate repository names checking if there are no duplicates.void
validatePlanRepository(@NotNull Plan plan, @NotNull PartialVcsRepositoryData vcsRepositoryData)
Validate plan repository before saving it in database.void
validateProjectRepository(@NotNull PartialVcsRepositoryData vcsRepositoryData)
Validate project repository before saving it in database.boolean
validateProjectRepositoryName(@NotNull String repositoryName, @NotNull Long projectId, @Nullable BambooIdProvider vcsRepositoryData)
Checks if name of a project repository is unique in the project.boolean
validateRepositoryName(@NotNull ImmutablePlan immutablePlan, @NotNull String repositoryName, @Nullable BambooIdProvider repositoryDefinition)
Checks if provided name for repository is unique in the Planboolean
validateRestartableStatus(@NotNull ResultsSummary resultSummary)
Checks that result is restartable and repositories referenced by a result still exists in Bamboo db.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.atlassian.bamboo.vcs.configuration.service.VcsRepositoryConfigurationService
createLinkedRepository
-
-
-
-
Constructor Detail
-
VcsRepositoryConfigurationServiceImpl
public VcsRepositoryConfigurationServiceImpl(RepositoryDefinitionManager repositoryDefinitionManager, AuditLogService auditLogService, HibernateMutableAclService aclService, RawRepositoryConfigurationXmlConverter rawRepositoryConfigurationXmlConverter, ScopedExclusionService scopedExclusionService, TriggerConfigurationService triggerConfigurationService, TaskConfigurationService taskConfigurationService, ChainBranchManager chainBranchManager, EnvironmentTaskService environmentTaskService, BuildDefinitionManager buildDefinitionManager, com.atlassian.event.api.EventPublisher eventPublisher, BranchCreationFacade branchCreationFacade, VcsRepositoryManager vcsRepositoryManager, TransactionAndHibernateTemplate hibernateTemplate)
-
-
Method Detail
-
createPlanRepository
@NotNull public @NotNull PartialVcsRepositoryData createPlanRepository(@NotNull @NotNull Plan plan, @NotNull @NotNull PartialVcsRepositoryData newVcsConfiguration)
Description copied from interface:VcsRepositoryConfigurationService
Creates "plan local" repository and adds it to a plan.- Specified by:
createPlanRepository
in interfaceVcsRepositoryConfigurationService
- Returns:
-
editRepository
@NotNull public @NotNull PartialVcsRepositoryData editRepository(@NotNull @NotNull Plan plan, long repositoryId, @NotNull @NotNull PartialVcsRepositoryData newVcsConfiguration)
Description copied from interface:VcsRepositoryConfigurationService
Edits existing "plan local" repository.- Specified by:
editRepository
in interfaceVcsRepositoryConfigurationService
- Returns:
-
setParentOfPlanRepository
public void setParentOfPlanRepository(@NotNull @NotNull ImmutablePlan plan, long repositoryId, long parentRepositoryId)
Description copied from interface:VcsRepositoryConfigurationService
Creates or changes parent-child relationship for a plan repository.- Specified by:
setParentOfPlanRepository
in interfaceVcsRepositoryConfigurationService
-
replaceRepositoryInPlan
public PartialVcsRepositoryData replaceRepositoryInPlan(@NotNull @NotNull Plan plan, @NotNull @NotNull VcsRepositoryData parentRepository, @NotNull @NotNull PartialVcsRepositoryData oldRepository, @NotNull @NotNull PartialVcsRepositoryData newRepository)
Description copied from interface:VcsRepositoryConfigurationService
Replaces uses of a repository with another one.- Specified by:
replaceRepositoryInPlan
in interfaceVcsRepositoryConfigurationService
- Returns:
-
linkRepositoryToPlan
@NotNull public @NotNull PartialVcsRepositoryData linkRepositoryToPlan(@NotNull @NotNull Plan plan, long selectedRepositoryId)
Description copied from interface:VcsRepositoryConfigurationService
Connects a linked repository to a plan by creating a new repository that inherits all the data from the linked repository and adding it to the plan.- Specified by:
linkRepositoryToPlan
in interfaceVcsRepositoryConfigurationService
- Returns:
-
createLinkedRepository
@NotNull public @NotNull PartialVcsRepositoryData createLinkedRepository(@NotNull @NotNull PartialVcsRepositoryData newVcsConfiguration, @NotNull @NotNull com.atlassian.user.User user, @NotNull @NotNull VcsRepositoryConfigurationService.RepositoryAccess accessOption)
Description copied from interface:VcsRepositoryConfigurationService
Creates new linked repository- Specified by:
createLinkedRepository
in interfaceVcsRepositoryConfigurationService
- Returns:
-
createProjectRepository
@NotNull public @NotNull PartialVcsRepositoryData createProjectRepository(@NotNull @NotNull PartialVcsRepositoryData newVcsConfiguration, @Nullable @Nullable com.atlassian.user.User user, @NotNull @NotNull VcsRepositoryConfigurationService.RepositoryAccess accessOption)
Description copied from interface:VcsRepositoryConfigurationService
Creates new project repository- Specified by:
createProjectRepository
in interfaceVcsRepositoryConfigurationService
- Returns:
-
editLinkedRepository
@NotNull public @NotNull PartialVcsRepositoryData editLinkedRepository(long repositoryId, @NotNull @NotNull PartialVcsRepositoryData newVcsConfiguration)
Description copied from interface:VcsRepositoryConfigurationService
Edits existing linked repository- Specified by:
editLinkedRepository
in interfaceVcsRepositoryConfigurationService
- Returns:
-
editProjectRepository
@NotNull public @NotNull PartialVcsRepositoryData editProjectRepository(long repositoryId, @NotNull @NotNull PartialVcsRepositoryData newVcsConfiguration)
Description copied from interface:VcsRepositoryConfigurationService
Edits existing project repository- Specified by:
editProjectRepository
in interfaceVcsRepositoryConfigurationService
- Returns:
-
deleteLinkedRepository
public void deleteLinkedRepository(long repositoryId)
Description copied from interface:VcsRepositoryConfigurationService
Removes linked repository.- Specified by:
deleteLinkedRepository
in interfaceVcsRepositoryConfigurationService
-
deleteProjectRepository
public void deleteProjectRepository(long repositoryId)
Description copied from interface:VcsRepositoryConfigurationService
Removes project repository.- Specified by:
deleteProjectRepository
in interfaceVcsRepositoryConfigurationService
-
validateLinkedRepositoryName
public boolean validateLinkedRepositoryName(@NotNull @NotNull String repositoryName, @Nullable @Nullable BambooIdProvider vcsRepositoryData)
Description copied from interface:VcsRepositoryConfigurationService
Checks if name of a linked repository is unique.- Specified by:
validateLinkedRepositoryName
in interfaceVcsRepositoryConfigurationService
- Returns:
-
validateProjectRepositoryName
public boolean validateProjectRepositoryName(@NotNull @NotNull String repositoryName, @NotNull @NotNull Long projectId, @Nullable @Nullable BambooIdProvider vcsRepositoryData)
Description copied from interface:VcsRepositoryConfigurationService
Checks if name of a project repository is unique in the project.- Specified by:
validateProjectRepositoryName
in interfaceVcsRepositoryConfigurationService
- Returns:
-
validateRepositoryName
public boolean validateRepositoryName(@NotNull @NotNull ImmutablePlan immutablePlan, @NotNull @NotNull String repositoryName, @Nullable @Nullable BambooIdProvider repositoryDefinition)
Description copied from interface:VcsRepositoryConfigurationService
Checks if provided name for repository is unique in the Plan- Specified by:
validateRepositoryName
in interfaceVcsRepositoryConfigurationService
-
createNewSharedRepositoryDefaultAcl
public org.acegisecurity.acls.MutableAcl createNewSharedRepositoryDefaultAcl(@Nullable @Nullable com.atlassian.user.User user, long repositoryId, VcsRepositoryConfigurationService.RepositoryAccess accessOption)
Creates a defualt Acl for a specific repository which has: - READ permissions for the creator (if applicable) - READ permission to logged in users if ALL_USERS option is specified- Parameters:
user
- to create acl foraccessOption
-- Returns:
MutableAcl
representing a default permission set
-
deleteRepository
public void deleteRepository(@NotNull @NotNull Plan plan, long repositoryId, Long replacementRepositoryId)
Description copied from interface:VcsRepositoryConfigurationService
Removes repository definition from a plan- Specified by:
deleteRepository
in interfaceVcsRepositoryConfigurationService
replacementRepositoryId
- repository id to replace removed one in tasks depending on it
-
moveRepository
public void moveRepository(@NotNull @NotNull Plan plan, long repositoryId, long beforePosition, long afterPosition) throws IllegalArgumentException, IllegalStateException
Description copied from interface:VcsRepositoryConfigurationService
Changes position of repository in the repository list. Important for setting default repository- Specified by:
moveRepository
in interfaceVcsRepositoryConfigurationService
repositoryId
- the RepositoryDefinition to movebeforePosition
- position of the RepositoryDefinition that will be before the moving Repository, -1 if the beginning of the listafterPosition
- position of the RepositoryDefinition that will be after the moving Repository, -1 if the end of the list- Throws:
IllegalArgumentException
IllegalStateException
-
getNewRepositoryList
@NotNull protected @NotNull List<PlanRepositoryLink> getNewRepositoryList(@NotNull @NotNull List<PlanRepositoryLink> originalRepositories, @NotNull @NotNull PlanRepositoryLink toMove, long beforeId, long afterId)
-
shareRepository
public void shareRepository(@NotNull @NotNull Plan plan, @NotNull @NotNull PartialVcsRepositoryData repositoryData, @NotNull @NotNull String repositoryName, @Nullable @Nullable String userDescription, @NotNull @NotNull com.atlassian.user.User user)
Description copied from interface:VcsRepositoryConfigurationService
Converts existing Plan repository to Linked repository.- Specified by:
shareRepository
in interfaceVcsRepositoryConfigurationService
- Parameters:
plan
- plan that owns the repositoryrepositoryData
- repository to sharerepositoryName
- new name of the repositoryuserDescription
- of the repository
-
validateRestartableStatus
public boolean validateRestartableStatus(@NotNull @NotNull ResultsSummary resultSummary)
Description copied from interface:VcsRepositoryConfigurationService
Checks that result is restartable and repositories referenced by a result still exists in Bamboo db.- Specified by:
validateRestartableStatus
in interfaceVcsRepositoryConfigurationService
-
validateContinuableStatus
public boolean validateContinuableStatus(@NotNull @NotNull ResultsSummary resultSummary)
Description copied from interface:VcsRepositoryConfigurationService
Checks that result is continuable and repositories referenced by a result still exists in Bamboo db.- Specified by:
validateContinuableStatus
in interfaceVcsRepositoryConfigurationService
-
getRelevantJobsForRepositoryIdChange
public Map<ImmutableJob,List<TaskDefinition>> getRelevantJobsForRepositoryIdChange(@NotNull @NotNull ImmutablePlan plan, long repositoryId)
Description copied from interface:VcsRepositoryConfigurationService
Gets list of jobs using a repository.- Specified by:
getRelevantJobsForRepositoryIdChange
in interfaceVcsRepositoryConfigurationService
-
convertToNewRepositoryConfiguration
public PartialVcsRepositoryData convertToNewRepositoryConfiguration(@NotNull @NotNull PartialVcsRepositoryData vcsRepositoryData)
Description copied from interface:VcsRepositoryConfigurationService
If repository data represents a repository implemented in the old system and appropriate new plugin exists, the data is converted to the new plugin. Otherwise, original data is returned.- Specified by:
convertToNewRepositoryConfiguration
in interfaceVcsRepositoryConfigurationService
- Returns:
-
validateProjectRepository
public void validateProjectRepository(@NotNull @NotNull PartialVcsRepositoryData vcsRepositoryData) throws com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
Description copied from interface:VcsRepositoryConfigurationService
Validate project repository before saving it in database.- Specified by:
validateProjectRepository
in interfaceVcsRepositoryConfigurationService
- Parameters:
vcsRepositoryData
- imported project repository- Throws:
com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
-
validateLinkedRepository
public void validateLinkedRepository(@NotNull @NotNull PartialVcsRepositoryData vcsRepositoryData) throws com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
Description copied from interface:VcsRepositoryConfigurationService
Validate linked repository before saving it in database.- Specified by:
validateLinkedRepository
in interfaceVcsRepositoryConfigurationService
- Parameters:
vcsRepositoryData
- imported linked repository- Throws:
com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
-
mergeLinkedRepository
public PartialVcsRepositoryData mergeLinkedRepository(@NotNull @NotNull PartialVcsRepositoryData vcsRepositoryData) throws com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
Description copied from interface:VcsRepositoryConfigurationService
Merges the state of the given linked repository into the database.This service will attempt to merge the entity based on
ImmutableEntityWithOid.getOid()
, and if there's no match, based onDescriptionProvider.getName()
. If an existing entity is found, then it will be updated. Otherwise, a new database entity will be created.It's assumed that this method is used in specs import only as it's sending analytic event.
- Specified by:
mergeLinkedRepository
in interfaceVcsRepositoryConfigurationService
- Parameters:
vcsRepositoryData
- imported linked repository- Returns:
- an object after persisting to the database - either the newly created or updated database object
- Throws:
com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
-
mergeProjectRepository
public PartialVcsRepositoryData mergeProjectRepository(@NotNull @NotNull PartialVcsRepositoryData vcsRepositoryData) throws com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
Description copied from interface:VcsRepositoryConfigurationService
Merges the state of the given project repository into the database.This service will attempt to merge the entity based on
ImmutableEntityWithOid.getOid()
, and if there's no match, based onDescriptionProvider.getName()
. If an existing entity is found, then it will be updated. Otherwise, a new database entity will be created. It's assumed that this method is used in specs import only as it's sending analytic event.- Specified by:
mergeProjectRepository
in interfaceVcsRepositoryConfigurationService
- Parameters:
vcsRepositoryData
- imported project repository- Returns:
- an object after persisting to the database - either the newly created or updated database object
- Throws:
com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
-
validatePlanRepository
public void validatePlanRepository(@NotNull @NotNull Plan plan, @NotNull @NotNull PartialVcsRepositoryData vcsRepositoryData) throws com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
Description copied from interface:VcsRepositoryConfigurationService
Validate plan repository before saving it in database.- Specified by:
validatePlanRepository
in interfaceVcsRepositoryConfigurationService
vcsRepositoryData
- imported plan repository- Throws:
com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
-
validatePlanRepositoriesNamesAndOids
public void validatePlanRepositoriesNamesAndOids(@NotNull @NotNull Plan plan, @NotNull @NotNull List<PartialVcsRepositoryData> repositoryDataList) throws com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
Description copied from interface:VcsRepositoryConfigurationService
Validate repository names checking if there are no duplicates.- Specified by:
validatePlanRepositoriesNamesAndOids
in interfaceVcsRepositoryConfigurationService
- Throws:
com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
-
mergePlanRepositories
public void mergePlanRepositories(@NotNull @NotNull Plan plan, @NotNull @NotNull List<PartialVcsRepositoryData> vcsRepositoryDataList) throws com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
Description copied from interface:VcsRepositoryConfigurationService
Merges the state of the given plan repositories into the database. Note that it is up to the caller to validate if the resulting changes of repository configurations are actually legal.This service will attempt to merge the entities based on
BambooIdProvider.getId()
, and if there's no match, a new database entity will be created. All other repositories in plan will be removed.- Specified by:
mergePlanRepositories
in interfaceVcsRepositoryConfigurationService
vcsRepositoryDataList
- list of imported plan repositories- Throws:
com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException
-
configureRssDetection
@NotNull public @NotNull ErrorCollection configureRssDetection(long repositoryId, PartialVcsRepositoryData vcsRepositoryData, boolean isEnabled)
Description copied from interface:VcsRepositoryConfigurationService
Sets detection of Bamboo Specs for repository and saves new config. Validates if repository supports RSS.- Specified by:
configureRssDetection
in interfaceVcsRepositoryConfigurationService
- Parameters:
repositoryId
- id of repositoryvcsRepositoryData
- repository configuration, remains unchangedisEnabled
- true if Specs detection should be enabled, false otherwise- Returns:
- a list of errors.
-
hasProjectSharedCredentialsForRepository
@NotNull public @org.jetbrains.annotations.NotNull boolean hasProjectSharedCredentialsForRepository(PartialVcsRepositoryData vcsRepositoryData)
- Specified by:
hasProjectSharedCredentialsForRepository
in interfaceVcsRepositoryConfigurationService
- Parameters:
vcsRepositoryData
- repository configuration- Returns:
- true if has project shared credentials
-
-