Interface ProjectService

All Known Implementing Classes:
DefaultProjectService

@PublicApi public interface ProjectService
  • Field Details

    • PROJECT_NAME

      static final String PROJECT_NAME
      The default name of HTML fields containing a Project's name. Validation methods on this service (isValidAllProjectData) will return an ErrorCollection with error messages keyed to this field name.
      See Also:
    • PROJECT_KEY

      static final String PROJECT_KEY
      The default name of HTML fields containing a Project's key. Validation methods on this service (isValidAllProjectData) will return an ErrorCollection with error messages keyed to this field name.
      See Also:
    • PROJECT_LEAD

      static final String PROJECT_LEAD
      The default name of HTML fields containing a Project's lead. Validation methods on this service (isValidAllProjectData) will return an ErrorCollection with error messages keyed to this field name.
      See Also:
    • PROJECT_URL

      static final String PROJECT_URL
      The default name of HTML fields containing a Project's URL. Validation methods on this service (isValidAllProjectData) will return an ErrorCollection with error messages keyed to this field name.
      See Also:
    • PROJECT_DESCRIPTION

      static final String PROJECT_DESCRIPTION
      The default name of HTML fields containing a Project's description. Validation methods on this service (isValidAllProjectData) will return an ErrorCollection with error messages keyed to this field name.
      See Also:
    • PROJECT_CATEGORY_ID

      static final String PROJECT_CATEGORY_ID
      The default name of HTML fields containing the ID of a project's category.
      See Also:
    • PROJECT_TYPE

      static final String PROJECT_TYPE
      The default name of HTML fields containing a Project's type. Validation methods on this service will return an ErrorCollection with error messages keyed to this field name.
      See Also:
    • MAX_NAME_LENGTH

      static final int MAX_NAME_LENGTH
      Deprecated.
      use getMaximumNameLength() instead;
      The maximum length allowed for the project name field.
      See Also:
    • MIN_NAME_LENGTH

      static final int MIN_NAME_LENGTH
      The minimum length allowed for the project name field.
      See Also:
    • MAX_KEY_LENGTH

      static final int MAX_KEY_LENGTH
      Deprecated.
      use getMaximumKeyLength() instead
      The maximum length allowed for the project key field.
      See Also:
    • DEFAULT_NAME_LENGTH

      static final int DEFAULT_NAME_LENGTH
      Default project name length
      See Also:
  • Method Details

    • validateCreateProject

      @Nonnull ProjectService.CreateProjectValidationResult validateCreateProject(ApplicationUser user, @Nonnull ProjectCreationData projectCreationData)
      This method needs to be called before creating a project to ensure all parameters are correct. There are a number of required parameters, such as a project name, key and lead. The validation will also check if a project with the name or key provided already exists and throw an appropriate error. The project key will be validated that it matches the allowed key pattern, and it is not a reserved word. A validation error will also be added if no user exists for the lead username provided.

      Optional validation will be done for the url, assigneetype and avatarId parameters. The url needs to be a valid URL and the assigneeType needs to be either AssigneeTypes.PROJECT_LEAD, AssigneeTypes.UNASSIGNED, or null to let JIRA decide on the best default assignee. UNASSIGNED will also only be valid, if unassigned issues are enabled in the General Configuration.

      All the projects created in JIRA must have a project type, and its value must correspond to one of the project types defined on the JIRA instance. A validation error will be reported if no project type is passed or if it does not meet the previous criteria.

      There are two ways to provide the project type to this method: directly via ProjectCreationData.getProjectTypeKey() or indirectly via ProjectCreationData.getProjectTemplateKey().

      If a project template key is provided, this method will look up the project template and use the template's project type as the type of the created project.

      If both a project type and a template key are provided on the received ProjectCreationData, the project type defined on the template will be compared to the project type defined in the project creation date and, if they don't match, a validation error will be reported.

      Providing a template key is the preferred method for creating a project since templates ensure projects are created in a more useful way for a particular use case.

      The method will return a ProjectService.CreateProjectValidationResult which contains an ErrorCollection with any potential errors and all the project's details.

      Parameters:
      user - The user performing the action
      projectCreationData - An object encapsulating all the data for the project that will get created
      Returns:
      A validation result containing any errors and all project details
      Since:
      7.0
    • createProject

      Project createProject(ProjectService.CreateProjectValidationResult createProjectValidationResult)
      Using the validation result from validateCreateProject(ApplicationUser, ProjectCreationData) a new project will be created. This method will throw an IllegalStateException if the validation result contains any errors.

      Project creation involves creating the project itself and setting some defaults for workflow schemes and issue type screen schemes.

      If the validation result contains an existing project id, the new project will be created with shared schemes, that is a new project will be associated with the same schemes as the existing project:

      • Permission Scheme
      • Notification Scheme
      • Issue Security Scheme
      • Workflow Scheme
      • Issue Type Scheme
      • Issue Type Screen Scheme

      In addition, this method will also add the new project to the same project category as the existing project.

      Parameters:
      createProjectValidationResult - Result from the validation, which also contains all the project's details.
      Returns:
      The new project
      Throws:
      IllegalStateException - if the validation result contains any errors.
    • validateCreateProjectBasedOnExistingProject

      @Nonnull ProjectService.CreateProjectValidationResult validateCreateProjectBasedOnExistingProject(ApplicationUser user, @Nonnull Long existingProjectId, ProjectCreationData projectCreationData)
      Validates if the current user can create a new project with shared schemes based on the existing project provided.

      This method validates that the passed project exists and that the current user has ProjectAction.EDIT_PROJECT_CONFIG permissions for it. Beyond these checks, validation rules will be the same as validateCreateProject(ApplicationUser, ProjectCreationData).

      Parameters:
      user - The user performing the action
      existingProjectId - An existing project id to use as the base for the new project being created
      projectCreationData - An object encapsulating all the data for the project that will get created
      Returns:
      A validation result containing any errors and all project details
      Since:
      7.0
    • validateUpdateProject

      ServiceResult validateUpdateProject(ApplicationUser user, String key)
      Validates that the given user is authorised to update a project. A project can be updated by any user with the global admin permission or project admin permission for the project in question.
      Parameters:
      user - The user trying to update a project
      key - The project key of the project to update.
      Returns:
      a ServiceResult, which will contain errors if the user is not authorised to update the project
    • validateUpdateProject

      ProjectService.UpdateProjectValidationResult validateUpdateProject(ApplicationUser user, String name, String key, String description, String leadName, String url, Long assigneeType)
      Validates updating a project's details. The project is looked up by the key provided. If no project with the key provided can be found, an appropriate error will be added to the result.

      Validation performed will be the same as for the validateCreateProject(ApplicationUser, ProjectCreationData) method. The only difference is that the project key will obviously not be validated.

      A project can be updated by any user with the global admin permission or project admin permission for the project in question.

      Parameters:
      user - The user trying to update a project
      name - The name of the new project
      key - The project key of the project to update.
      description - An optional description for the project
      leadName - The username of the lead developer for the project
      url - An optional URL for the project
      assigneeType - The default assignee for issues created in this project. May be either project lead, or unassigned if unassigned issues are enabled.
      Returns:
      A validation result containing any errors and all project details
    • validateUpdateProject

      ProjectService.UpdateProjectValidationResult validateUpdateProject(ApplicationUser user, String name, String key, String description, ApplicationUser lead, String url, Long assigneeType)
      Validates updating a project's details. The project is looked up by the key provided. If no project with the key provided can be found, an appropriate error will be added to the result.

      Validation performed will be the same as for the validateCreateProject(ApplicationUser, ProjectCreationData) method. The only difference is that the project key will obviously not be validated.

      A project can be updated by any user with the global admin permission or project admin permission for the project in question.

      WARNING: In 6.0-6.0.5, this method is available but does not work properly for renamed users (JRA-33843).

      Parameters:
      user - The user trying to update a project
      name - The name of the new project
      key - The project key of the project to update.
      description - An optional description for the project
      lead - The lead developer for the project
      url - An optional URL for the project
      assigneeType - The default assignee for issues created in this project. May be either project lead, or unassigned if unassigned issues are enabled.
      Returns:
      A validation result containing any errors and all project details
      Since:
      6.0.6 (see warning in method description)
    • validateUpdateProject

      ProjectService.UpdateProjectValidationResult validateUpdateProject(ApplicationUser user, Project originalProject, String name, String key, String description, ApplicationUser lead, String url, Long assigneeType, Long avatarId)
      Validates updating a project's details. The project is looked up by the project object. You may change the project key.

      Validation performed will be the same as for the validateCreateProject(ApplicationUser, ProjectCreationData) method.

      A project can be updated by any user with the global admin permission or project admin permission for the project in question. A project key can be updated by any user with the global admin permission.

      Parameters:
      user - The user trying to update a project
      originalProject - The project to update with the values put in arguments (Project object should not be modified)
      name - The name of the new project
      key - The new project key
      description - An optional description for the project
      lead - The lead developer for the project
      url - An optional URL for the project
      assigneeType - The default assignee for issues created in this project. May be either project lead, or unassigned if unassigned issues are enabled.
      Returns:
      A validation result containing any errors and all project details
    • validateUpdateProject

      ProjectService.UpdateProjectValidationResult validateUpdateProject(ApplicationUser user, Project originalProject, String name, String key, String description, String leadName, String url, Long assigneeType, Long avatarId)
      Validates updating a project's details. The project is looked up by the project object. You may change the project key.

      Validation performed will be the same as for the validateCreateProject(ApplicationUser, ProjectCreationData) method.

      A project can be updated by any user with the global admin permission or project admin permission for the project in question. A project key can be updated by any user with the global admin permission.

      Parameters:
      user - The user trying to update a project
      originalProject - The project to update with the values put in arguments (Project object should not be modified)
      name - The name of the new project
      key - The new project key
      description - An optional description for the project
      leadName - The user key for the lead developer for the project
      url - An optional URL for the project
      assigneeType - The default assignee for issues created in this project. It may be either project lead, or unassigned if unassigned issues are enabled.
      Returns:
      A validation result containing any errors and all project details
    • validateUpdateProject

      ProjectService.UpdateProjectValidationResult validateUpdateProject(ApplicationUser user, String name, String key, String description, String leadName, String url, Long assigneeType, Long avatarId)
      Validates updating a project's details. The project is looked up by the key provided. If no project with the key provided can be found, an appropriate error will be added to the result.

      Validation performed will be the same as for the validateCreateProject(ApplicationUser, ProjectCreationData) method. The only difference is that the project key will obviously not be validated.

      A project can be updated by any user with the global admin permission or project admin permission for the project in question.

      Parameters:
      user - The user trying to update a project
      name - The name of the new project
      key - The project key of the project to update.
      description - An optional description for the project
      leadName - The username of the lead developer for the project
      url - An optional URL for the project
      assigneeType - The default assignee for issues created in this project. It may be either project lead, or unassigned if unassigned issues are enabled.
      avatarId - the id of an existing avatar.
      Returns:
      A validation result containing any errors and all project details
    • validateUpdateProject

      ProjectService.UpdateProjectValidationResult validateUpdateProject(ApplicationUser user, String name, String key, String description, ApplicationUser lead, String url, Long assigneeType, Long avatarId)
      Validates updating a project's details. The project is looked up by the key provided. If no project with the key provided can be found, an appropriate error will be added to the result.

      Validation performed will be the same as for the validateCreateProject(ApplicationUser, ProjectCreationData) method. The only difference is that the project key will obviously not be validated.

      A project can be updated by any user with the global admin permission or project admin permission for the project in question.

      WARNING: In 6.0-6.0.5, this method is available but does not work properly for renamed users (JRA-33843).

      Parameters:
      user - The user trying to update a project
      name - The name of the new project
      key - The project key of the project to update.
      description - An optional description for the project
      lead - The lead developer for the project
      url - An optional URL for the project
      assigneeType - The default assignee for issues created in this project. May be either project lead, or unassigned if unassigned issues are enabled.
      avatarId - the id of an existing avatar.
      Returns:
      A validation result containing any errors and all project details
      Since:
      6.0.6 (see warning in method description)
    • validateUpdateProject

      Validates updating a project's details. The project is looked up by the key provided. If no project with the key provided can be found, an appropriate error will be added to the result.

      Validation performed will be the same as for the validateCreateProject(ApplicationUser, ProjectCreationData) method. The only difference is that the project key will obviously not be validated.

      Parameters:
      updateProjectRequest - includes the changes that will be made to the project
      Returns:
      A validation result containing any errors and all project details
      Since:
      7.2
    • updateProject

      Project updateProject(ProjectService.UpdateProjectValidationResult updateProjectValidationResult)
      Using the validation result from validateUpdateProject(ApplicationUser, String, String, String, String, String, Long) this method performs the actual update on the project.
      Parameters:
      updateProjectValidationResult - Result from the validation, which also contains all the project's details.
      Returns:
      The updated project
      Throws:
      IllegalStateException - if the validation result contains any errors.
    • updateProjectType

      io.atlassian.fugue.Either<Project,ErrorCollection> updateProjectType(ApplicationUser user, Project project, ProjectTypeKey newProjectType)
      Updates the type of project. If the update completes successfully, all the registered ProjectTypeUpdatedHandlers will be notified. If an exception is thrown by one of the ProjectTypeUpdatedHandler, the project type update will be rolled back.
      Parameters:
      user - The user performing the action
      project - The project which type needs to be updated
      newProjectType - The new project type
      Returns:
      Either the updated project if everything went well or an error collection indicating the reasons of the failure
      Throws:
      PermissionException - If the user does not have permission to perform the operation
      Since:
      7.0
    • validateDeleteProject

      Validation to delete a project is quite straightforward. The user must have global admin rights and the project about to be deleted needs to exist.
      Parameters:
      user - The user trying to delete a project
      key - The key of the project to delete
      Returns:
      A validation result containing any errors and all project details
    • deleteProject

      Deletes the project provided by the deleteProjectValidationResult. There's a number of steps involved in deleting a project, which are carried out in the following order:
      • Delete all the issues in the project
      • Remove any custom field associations for the project
      • Remove the IssueTypeScreenSchemeAssociation for the project
      • Remove any other associations of this project (to permission schemes, notification schemes...)
      • Remove any versions in this project
      • Remove any components in this project
      • Delete all portlets that rely on this project (either directly or via filters)
      • Delete all the filters for this project
      • Delete the project itself in the database
      • Flushing the issue, project and workflow scheme caches
      Parameters:
      user - The user trying to delete a project
      deleteProjectValidationResult - Result from the validation, which also contains all the project's details.
      Returns:
      A result containing any errors. Users of this method should check the result.
    • deleteProjectAsynchronous

      ProjectService.DeleteProjectResult deleteProjectAsynchronous(ApplicationUser user, ProjectService.DeleteProjectValidationResult deleteProjectValidationResult)
      Deletes the project provided by the deleteProjectValidationResult in a background task and provides a progress URL that may be used to monitor the delete progress.

      There's a number of steps involved in deleting a project, which are carried out in the following order:

      • Delete all the issues in the project
      • Remove any custom field associations for the project
      • Remove the IssueTypeScreenSchemeAssociation for the project
      • Remove any other associations of this project (to permission schemes, notification schemes...)
      • Remove any versions in this project
      • Remove any components in this project
      • Delete all portlets that rely on this project (either directly or via filters)
      • Delete all the filters for this project
      • Delete the project itself in the database
      • Flushing the issue, project and workflow scheme caches
      Parameters:
      user - The user trying to delete a project
      deleteProjectValidationResult - Result from the validation, which also contains all the project's details.
      Returns:
      URL of the progress page for monitoring this event.
      Since:
      v7.1.1
    • validateUpdateProjectSchemes

      ProjectService.UpdateProjectSchemesValidationResult validateUpdateProjectSchemes(ApplicationUser user, Long permissionSchemeId, Long notificationSchemeId, Long issueSecuritySchemeId)
      If the scheme ids are not null or -1 (-1 is often used to reset schemes), then an attempt will be made to retrieve the scheme. If this attempt fails an error will be added. IssueSecuritySchemes will only be validated in enterprise edition.
      Parameters:
      permissionSchemeId - The permission scheme that the new project should use
      notificationSchemeId - The notification scheme that the new project should use. Optional.
      issueSecuritySchemeId - The issue security scheme that the new project should use. Optional.
      Returns:
      A validation result containing any errors and all scheme ids
    • updateProjectSchemes

      void updateProjectSchemes(ProjectService.UpdateProjectSchemesValidationResult result, Project project)
      Updates the project schemes for a particular project, given a validation result and project to update.
      Parameters:
      result - Result from the validation, which also contains all the schemes details.
      project - The project which will have its schemes updated.
      Throws:
      IllegalStateException - if the validation result contains any errors.
    • isValidAllProjectData

      @Deprecated boolean isValidAllProjectData(JiraServiceContext serviceContext, ProjectCreationData projectCreationData)
      Deprecated.
      Use validateCreateProject(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.bc.project.ProjectCreationData) instead.

      Validates the given project fields. Any errors will be added to the JiraServiceContext.

      The project type is mandatory and its value must correspond to one of the project types defined on the JIRA instance. A validation error will be reported if the passed value is null or if it does not meet the previous criteria.

      Parameters:
      serviceContext - containing the ErrorCollection that will be populated with any validation errors that are encountered. It also contains the logged in user so the correct locale is used for the error messages.
      projectCreationData - An object encapsulating all the data for the project that will get created
      Returns:
      true if project data is valid, false otherwise
    • isValidRequiredProjectData

      boolean isValidRequiredProjectData(JiraServiceContext serviceContext, ProjectCreationData projectCreationData)
      Validate the fields required for creating a project. Any errors will be added to the JiraServiceContext.
      Parameters:
      serviceContext - containing the ErrorCollection that will be populated with any validation errors that are encountered
      projectCreationData - An object encapsulating all the data for the project that will get created
      Returns:
      true if project data is valid, false otherwise
    • isValidProjectKey

      boolean isValidProjectKey(JiraServiceContext serviceContext, String key)
      Validates the given project key. Any errors will be added to the JiraServiceContext.
      Parameters:
      serviceContext - containing the ErrorCollection that will be populated with any validation errors that are encountered
      key - The key to validate @Nonnull
      Returns:
      true if project key is valid, false otherwise
    • getProjectKeyDescription

      String getProjectKeyDescription()
      Get the project key description from the properties file. If the user has specified a custom regex that project keys must conform to and a description for that regex, this method should return the description.

      If the user has not specified a custom regex, this method will return the default project key description:

      "Usually the key is just 3 letters - i.e. if your project name is Foo Bar Raz, a key of FBR would make sense.
      The key must contain only uppercase alphabetic characters, and be at least 2 characters in length.
      It is recommended to use only ASCII characters, as other characters may not work."

      Returns:
      a String description of the project key format
    • getProjectById

      Used to retrieve a Project object by id.

      This method returns a ProjectService.GetProjectResult. The project will be null if no project for the id specified can be found, or if the user making the request does not have the BROWSE project permission for the project. In both of these cases, the errorCollection in the result object will contain an appropriate error message.

      The current user will be looked up via the JiraAuthenticationContext, so do not call this method from a background thread. Use getProjectById(com.atlassian.jira.user.ApplicationUser, Long) instead.

      Parameters:
      id - The id of the project.
      Returns:
      A ProjectResult object
      Since:
      v6.4
    • getProjectById

      Used to retrieve a Project object by id. This method returns a ProjectService.GetProjectResult. The project will be null if no project for the id specified can be found, or if the user making the request does not have the BROWSE project permission for the project. In both of these cases, the errorCollection in the result object will contain an appropriate error message.
      Parameters:
      user - The user retrieving the project.
      id - The id of the project.
      Returns:
      A ProjectResult object
    • getProjectByIdForAction

      ProjectService.GetProjectResult getProjectByIdForAction(ApplicationUser user, Long id, ProjectAction action)
      Used to retrieve a Project object by id providing the user can perform the passed action on the project. This method returns a ProjectService.GetProjectResult. The project will be null if no project for the id specified can be found, or if the user making the request cannot perform the passed action on the project. In both of these cases, the errorCollection in the result object will contain an appropriate error message.
      Parameters:
      user - The user retrieving the project.
      id - The id of the project.
      action - the action the user must be able to perform on the project.
      Returns:
      A ProjectResult object
    • getProjectByKey

      Used to retrieve a Project object by key. This method returns a ProjectService.GetProjectResult. The project will be null if no project for the key specified can be found, or if the user making the request does not have the BROWSE project permission for the project. In both of these cases, the errorCollection in the result object will contain an appropriate error message.

      The current user will be looked up via the JiraAuthenticationContext, so do not call this method from a background thread. Use getProjectByKey(com.atlassian.jira.user.ApplicationUser, String) instead.

      Parameters:
      key - The key of the project.
      Returns:
      A GetProjectResult object
      Since:
      v6.4
    • getProjectByKey

      Used to retrieve a Project object by key. This method returns a ProjectService.GetProjectResult. The project will be null if no project for the key specified can be found, or if the user making the request does not have the BROWSE project permission for the project. In both of these cases, the errorCollection in the result object will contain an appropriate error message.
      Parameters:
      user - The user retrieving the project.
      key - The key of the project.
      Returns:
      A GetProjectResult object
    • getMaximumNameLength

      int getMaximumNameLength()
      Used to retrieve the maximum length allowed for new project names.
      Returns:
      The configured maximum project length
    • getProjectByKeyForAction

      ProjectService.GetProjectResult getProjectByKeyForAction(ApplicationUser user, String key, ProjectAction action)
      Used to retrieve a Project object by key providing the user can perform the passed action on the project. This method returns a ProjectService.GetProjectResult. The project will be null if no project for the key specified can be found, or if the user making the request cannot perform the passed action on the project. In both of these cases, the errorCollection in the result object will contain an appropriate error message.
      Parameters:
      user - The user retrieving the project.
      key - The key of the project.
      action - the action the user must be able to perform on the project.
      Returns:
      A GetProjectResult object
    • getMaximumKeyLength

      int getMaximumKeyLength()
      Used to retrieve the maximum length allowed for new project keys.
      Returns:
      The configured maximum project length
    • getProjectCount

      long getProjectCount()
      Used to retrieve the total number of Projects, regardless of the permission to see those projects.
      Returns:
      A long value representing the total number of projects.
    • getAllProjects

      ServiceOutcome<List<Project>> getAllProjects(ApplicationUser user)
      Used to retrieve a list of Project objects. This method returns a ServiceOutcome containing a list of projects. The list will be empty, if the user does not have the BROWSE project permission for any project or no projects are visible when using anonymous access.
      Parameters:
      user - The user retrieving the list of projects or NULL when using anonymous access.
      Returns:
      A ServiceOutcome containing a list of projects
      Since:
      v6.0
    • getAllProjectsForAction

      ServiceOutcome<List<Project>> getAllProjectsForAction(ApplicationUser user, ProjectAction action)
      Used to retrieve a list of Project objects. This method returns a ServiceOutcome containing a list of projects that the user can perform the passed action on. The list will be empty if no projects match the passed action.
      Parameters:
      user - The user retrieving the list of projects or NULL when using anonymous access.
      action - the action the user must be able to perform on the returned projects.
      Returns:
      A ServiceOutcome containing a list of projects the user can perform the passed action on.
      Since:
      v6.0
    • getAllProjectsForAction

      ServiceOutcome<List<Project>> getAllProjectsForAction(ApplicationUser user, ProjectAction action, boolean includeArchived)
      Deprecated.
      Use getAllProjectsForAction(ApplicationUser, ProjectAction) instead. Since v7.10. -> includeArchived flag was meant to be removed since v.8.0
      Used to retrieve a list of Project objects. This method returns a ServiceOutcome containing a list of projects that the user can perform the passed action on. The list will be empty if no projects match the passed action.
      Parameters:
      user - The user retrieving the list of projects or NULL when using anonymous access.
      action - the action the user must be able to perform on the returned projects.
      includeArchived - If set to true, return all projects including archived ones, otherwise return only active projects.
      Returns:
      A ServiceOutcome containing a list of projects the user can perform the passed action on.
      Since:
      v7.9
    • findProjects

      default ServiceOutcome<List<Project>> findProjects(@Nonnull String query, boolean allowEmptyQuery, boolean includeArchived)
      Finds all the projects visible to the currently logged-in user that have the project key or name matching the provided query.
      Parameters:
      query - a user provided string
      allowEmptyQuery - if true, and the query is empty, the method will return all results, otherwise it will return an empty list.
      includeArchived - if true, the method will return archived projects as well.
      Returns:
      a list of Projects for the query
      Since:
      10.4.0