Interface FieldManager

All Known Implementing Classes:
DefaultFieldManager, MockFieldManager

@PublicApi public interface FieldManager
  • Field Details

  • Method Details

    • getField

      Field getField(String id)
      Get a field by its id.
      Parameters:
      id - An IssueFieldConstants constant, or custom field key (eg. "customfield_10010")
      Returns:
      the Field
    • isCustomField

      boolean isCustomField(String id)
      Returns true if the given ID is a Custom Field that actually exists in JIRA.
      Parameters:
      id - the field ID
      Returns:
      true if the given ID is a Custom Field that actually exists in JIRA.
    • isCustomFieldId

      boolean isCustomFieldId(String id)
      Returns true if the given field ID is in the custom field format.

      This method just checks that the ID looks like a Custom Field (it starts with "customfield_") but not that the custom field actually exists (it could have been deleted).

      Parameters:
      id - the field ID
      Returns:
      true if the given ID is a Custom Field that actually exists in JIRA.
      Since:
      6.5
      See Also:
    • isExistingCustomField

      boolean isExistingCustomField(String id)
      Returns true if the given ID is a Custom Field that actually exists in JIRA.

      Checking for existance comes with a performance price, so use where possible.

      Parameters:
      id - the field ID
      Returns:
      true if the given ID is a Custom Field that actually exists in JIRA.
      Since:
      6.5
      See Also:
    • isCustomField

      boolean isCustomField(Field field)
    • getCustomField

      @Nullable CustomField getCustomField(String id)
      Get a CustomField by its text key (eg 'customfield_10000').
      Parameters:
      id - Eg. 'customfield_10000'
      Returns:
      The CustomField or null if not found.
    • isHideableField

      boolean isHideableField(String id)
    • isHideableField

      boolean isHideableField(Field field)
    • getHideableField

      HideableField getHideableField(String id)
    • isOrderableField

      boolean isOrderableField(String id)
    • isOrderableField

      boolean isOrderableField(Field field)
    • getOrderableField

      OrderableField getOrderableField(String id)
    • getConfigurableField

      ConfigurableField getConfigurableField(String id)
    • getOrderableFields

      Set<OrderableField> getOrderableFields()
    • getNavigableFields

      Set<NavigableField> getNavigableFields()
    • isNavigableField

      boolean isNavigableField(String id)
    • isNavigableField

      boolean isNavigableField(Field field)
    • getNavigableField

      NavigableField getNavigableField(String id)
    • isRequirableField

      boolean isRequirableField(String id)
    • isRequirableField

      boolean isRequirableField(Field field)
    • isMandatoryField

      boolean isMandatoryField(String id)
    • isMandatoryField

      boolean isMandatoryField(Field field)
    • isRenderableField

      boolean isRenderableField(String id)
    • isRenderableField

      boolean isRenderableField(Field field)
    • isUnscreenableField

      boolean isUnscreenableField(String id)
    • isUnscreenableField

      boolean isUnscreenableField(Field field)
    • getRequiredField

      RequirableField getRequiredField(String id)
    • refresh

      void refresh()
      Invalidates all field-related caches in JIRA.

      WARNING

      This method invalidates a whole lot of JIRA caches, which means that JIRA performance significantly degrades after this method has been called. For this reason, you should avoid calling this method at all costs.

      The correct approach to invalidate the cache entries is to do it in the "store" inside the FooStore.updateFoo() method, where you can invalidate a single cache entry. If the cache lives in another class then the store should raise a FooUpdatedEvent which that class can listen to in order to keep its caches up to date.

      If you add any calls to this method in JIRA I will hunt you down and subject you to a Spanish inquisition.

    • getUnavailableFields

      Set<Field> getUnavailableFields()
    • isFieldHidden

      boolean isFieldHidden(ApplicationUser remoteUser, Field field)
    • isFieldHidden

      boolean isFieldHidden(ApplicationUser remoteUser, String fieldId)
      Determines whether the field with id of fieldId is NOT hidden in AT LEAST one FieldLayout that the user can see (assigned to projects for which the user has the ProjectPermissions.BROWSE_PROJECTS permission).
      Parameters:
      remoteUser - the remote user.
      fieldId - The Field ID
    • isFieldHidden

      boolean isFieldHidden(Set<FieldLayout> fieldLayouts, Field field)
      Checks whether the given field is hidden in all of the given Field Layouts.

      This method can be used in conjunction with getVisibleFieldLayouts(com.atlassian.jira.user.ApplicationUser) to provide a more performant way of looking up isFieldHidden(com.atlassian.jira.user.ApplicationUser, Field) multiple times. Instead, it is more efficient to do something like:

           Set fieldLayouts = fieldManager.getVisibleFieldLayouts(loggedInUser);
           for (Field field: myFields)
           {
             if (fieldManager.isFieldHidden(fieldLayouts1, field))
             {
                 ...
             }
           }
       
      Parameters:
      fieldLayouts - The FieldLayouts to check
      field - The field to check
      Returns:
      true if the given field is hidden in all of the given Field Layouts.
      See Also:
    • getVisibleFieldLayouts

      Set<FieldLayout> getVisibleFieldLayouts(ApplicationUser user)
      Returns all the visible FieldLayouts for the given user.

      This is used in conjunction with isFieldHidden(Set, Field) as a performance optimisation in usages that want to call isFieldHidden(com.atlassian.jira.user.ApplicationUser, Field) multiple times. Instead, it is more efficient to do something like:

           Set fieldLayouts = fieldManager.getVisibleFieldLayouts(loggedInUser);
           for (Field field: myFields)
           {
             if (fieldManager.isFieldHidden(fieldLayouts1, field))
             {
                 ...
             }
           }
       
      Parameters:
      user - the user whose project browsing permissions are used to limit visible FieldLayouts.
      Returns:
      all the visible FieldLayouts for the given user.
    • getAvailableNavigableFieldsWithScope

      Set<NavigableField> getAvailableNavigableFieldsWithScope(ApplicationUser user) throws FieldException
      Gets all the available fields that the user can see, this is providing no context scope.
      Parameters:
      user - the remote user.
      Returns:
      a set of NavigableFields that can be show because their visibility/configuration fall within what the user can see.
      Throws:
      FieldException - thrown if there is a problem looking up the fields
    • getAvailableNavigableFieldsWithScope

      Set<NavigableField> getAvailableNavigableFieldsWithScope(ApplicationUser user, QueryContext queryContext) throws FieldException
      Gets all the available fields within the defined scope of the QueryContext.
      Parameters:
      user - the user making the request
      queryContext - the context of the search request.
      Returns:
      a set of NavigableFields that can be show because their visibility/configuration fall within the specified context
      Throws:
      FieldException - thrown if there is a problem looking up the fields
    • getAvailableCustomFields

      Set<CustomField> getAvailableCustomFields(ApplicationUser remoteUser, Issue issue) throws FieldException
      Retrieves custom fields in scope for the given issue
      Parameters:
      remoteUser - Remote com.atlassian.jira.user.ApplicationUser
      issue - Issue
      Returns:
      custom fields in scope for the given issue
      Throws:
      FieldException - if cannot retrieve the projects the user can see, or if cannot retrieve the field layouts for the viewable projects
    • getAllAvailableNavigableFields

      Set<NavigableField> getAllAvailableNavigableFields() throws FieldException
      Throws:
      FieldException
    • getAvailableNavigableFields

      Set<NavigableField> getAvailableNavigableFields(ApplicationUser remoteUser) throws FieldException
      Throws:
      FieldException
    • getAllSearchableFields

      Set<SearchableField> getAllSearchableFields()
      Return all the searchable fields in the system. This set will included all defined custom fields.
      Returns:
      the set of all searchable fields in the system.
    • getSystemSearchableFields

      Set<SearchableField> getSystemSearchableFields()
      Return all the searchable systems fields. This set will *NOT* include defined custom fields.
      Returns:
      the set of all searchable systems fields defined.
    • getIssueTypeField

      IssueTypeField getIssueTypeField()
      Retrieve the IssueType system Field.
      Returns:
      the IssueType system Field.
    • getProjectField

      ProjectField getProjectField()
      Retrieve the Project system Field.
      Returns:
      the Project system Field.
    • isTimeTrackingOn

      boolean isTimeTrackingOn()