Interface CustomFieldManager

All Known Implementing Classes:
CachingCustomFieldManager, MockCustomFieldManager

@PublicApi public interface CustomFieldManager
Functions for working with CustomFields.
  • Method Details

    • getCustomFieldObjectsByName

      Collection<CustomField> getCustomFieldObjectsByName(String customFieldName)
      Retrieve custom field(s) of a certain name.
      Parameters:
      customFieldName - custom field name
      Returns:
      A collection of CustomFields.
    • getCustomFieldObjectsByNameIgnoreCase

      Collection<CustomField> getCustomFieldObjectsByNameIgnoreCase(String customFieldName)
      Retrieve custom field(s) of a certain name ignoring case.
      Parameters:
      customFieldName - custom field name
      Returns:
      A collection of CustomFields.
    • getCustomFieldObjectByName

      @Deprecated CustomField getCustomFieldObjectByName(String customFieldName)
      Deprecated.
      Retrieve the first custom field object with the specified name. WARNING: Custom Field names are no longer guaranteed to be unique. This method returns the first named custom field. Use getCustomFieldObjectsByName(String) to retrieve all custom fields.
      Parameters:
      customFieldName - the Name
      Returns:
      The first named CustomField, or null if not found.
    • getCustomFieldObject

      @Nullable CustomField getCustomFieldObject(Long id)
      Get a CustomField by ID.
      Parameters:
      id - ID of field, eg. 10000
      Returns:
      The CustomField or null.
    • getCustomFieldObject

      @Nullable CustomField getCustomFieldObject(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.
    • isCustomField

      boolean isCustomField(String id)
      Returns true if this ID is in the Custom Field format.

      Note that this does not check if the Custom Field actually exists. It just checks whether the given ID looks like Custom Field ID (eg starts with "customfield_").

      Parameters:
      id - The Field ID
      Returns:
      true if this is an ID for a Custom Field.
      Since:
      6.4
      See Also:
    • exists

      boolean exists(String id)
      Returns true if this customfield actually exists. This saves unnecessary copying of custom field objects when all we want to know is "does it exist"
      Parameters:
      id - Eg. 'customfield_10000'
      Returns:
      true if the custom field is returned
      See Also:
    • getCustomFieldObjects

      List<CustomField> getCustomFieldObjects()
      Returns all custom fields.
      Returns:
      A list of all CustomFields.
    • getGlobalCustomFieldObjects

      List<CustomField> getGlobalCustomFieldObjects()
      Returns a list of custom fields where the CustomField.isGlobal() is true.
      Returns:
      A list of CustomFields
    • getCustomFieldObjects

      List<CustomField> getCustomFieldObjects(Long projectId, String issueType)
      Gets a list of custom fields for a particular project and issue type.
      Parameters:
      projectId - Id of the project
      issueType - An issue type. See ConstantsManager.ALL_ISSUE_TYPES, ConstantsManager.ALL_STANDARD_ISSUE_TYPES and ConstantsManager.ALL_SUB_TASK_ISSUE_TYPES
      Returns:
      A list of CustomFields
    • getCustomFieldObjects

      List<CustomField> getCustomFieldObjects(Long projectId, List<String> issueTypes)
      Returns the same as getCustomFieldObjects(Long, String) but allows to specify a list of issueTypes.
      Parameters:
      projectId - Id of the project. It can be null, in which case means that we are looking for "any project" (acts like a wildcard).
      issueTypes - A list of issue types. It can be null or empty, in which case means that we are looking for "any issue type" (acts like a wildcard). See ConstantsManager.ALL_ISSUE_TYPES, ConstantsManager.ALL_STANDARD_ISSUE_TYPES and ConstantsManager.ALL_SUB_TASK_ISSUE_TYPES
      Returns:
      A list of CustomFields
    • getCustomFieldObjects

      List<CustomField> getCustomFieldObjects(SearchContext searchContext)
      Parameters:
      searchContext - the SearchContext
      Returns:
      A list of CustomFields
    • getCustomFieldObjects

      @Deprecated List<CustomField> getCustomFieldObjects(org.ofbiz.core.entity.GenericValue issue)
      Returns a list of CustomFields that apply to a particular issue.
      Parameters:
      issue - A GenericValue of the issue
      Returns:
      A list of CustomFields
    • getCustomFieldObjects

      List<CustomField> getCustomFieldObjects(Issue issue)
      Returns a list of CustomFields that apply to a particular issue.
      Parameters:
      issue - A Issue object
      Returns:
      A list of CustomFields
    • getCustomFieldTypes

      @Nonnull List<CustomFieldType<?,?>> getCustomFieldTypes()
      Retrieve all customfieldtypes registered in the system.
      Returns:
      a list of CustomFieldTypes
    • getCustomFieldType

      CustomFieldType getCustomFieldType(String key)
      Retrieve a custom field type by its type key.

      The key is the "full plugin module key". That is, the plugin key for the plugin it comes from, a colon separator, and then the module key. e.g. the system types are specified in system-customfieldtypes-plugin.xml:

       <atlassian-plugin key="com.atlassian.jira.plugin.system.customfieldtypes" name="Custom Field Types & Searchers">
           ...
           <customfield-type key="float" name="Number Field"
           ...
       
      To access the 'Number Field' type, the key would then be 'com.atlassian.jira.plugin.system.customfieldtypes:float'.
      Parameters:
      key - Type identifier constructed from plugin XML.
      Returns:
      the CustomFieldType for the given key
    • getCustomFieldSearchers

      @Nonnull List<CustomFieldSearcher> getCustomFieldSearchers(CustomFieldType customFieldType)
      Retrieves all the searchers registered for a particular custom Field. Searchers may be registred via:
         <customfield-searcher key="daterange" name="Date Range picker"
                           i18n-name-key="admin.customfield.searcher.daterange.name"
                           class="com.atlassian.jira.issue.customfields.searchers.DateRangeSearcher"&gt
       
      Parameters:
      customFieldType - the CustomFieldType
      Returns:
      A list of CustomFieldSearchers
    • getCustomFieldSearcher

      CustomFieldSearcher getCustomFieldSearcher(String key)
      Retrieve a custom field searcher by its type key.

      The key is the "full plugin module key". That is, the plugin key for the plugin it comes from, a colon separator, and then the module key. e.g. the system types are specified in system-customfieldtypes-plugin.xml:

       <atlassian-plugin key="com.atlassian.jira.plugin.system.customfieldtypes" name="Custom Field Types & Searchers">
           ...
           <customfield-type key="float" name="Number Field"
           ...
       
      To access the 'Number Field' type, the key would then be 'com.atlassian.jira.plugin.system.customfieldtypes:float'.
      Parameters:
      key - Type identifier constructed from plugin XML.
      Returns:
      the CustomFieldSearcher for the given key
    • getDefaultSearcher

      @Nullable CustomFieldSearcher getDefaultSearcher(@Nonnull CustomFieldType<?,?> type)
      Return the default CustomFieldSearcher for the passed CustomFieldType. The default searcher can be null if there is no searcher associated with the type.
      Parameters:
      type - the CustomFieldType to query.
      Returns:
      the default searcher for the passed CustomFieldType. Can be null if the type has no associated searcher.
    • createCustomField

      CustomField createCustomField(String fieldName, String description, CustomFieldType fieldType, CustomFieldSearcher customFieldSearcher, List<JiraContextNode> contexts, List<IssueType> issueTypes) throws org.ofbiz.core.entity.GenericEntityException
      Creates a custom field with the given name and description of the given CustomFieldType using the given CustomFieldSearcher that is displayed in the given list of contexts available to the given list of issueTypes.
      Returns:
      the newly created CustomField.
      Throws:
      org.ofbiz.core.entity.GenericEntityException - if the CustomField could not be created.
    • removeCustomFieldPossiblyLeavingOrphanedData

      void removeCustomFieldPossiblyLeavingOrphanedData(Long customFieldId) throws RemoveException, IllegalArgumentException
      Removes the customfield supplied. This method will try to lookup the customfield object via the manager first. If the customfield object can be retrieved this way, it simply delegates the removal to the removeCustomField(com.atlassian.jira.issue.fields.CustomField) method, which will not leave any orphaned data behind.

      NOTE: Generally you should use the removeCustomField(com.atlassian.jira.issue.fields.CustomField) method to remove a custom field, as it is guaranteed to remove all data. This method should only be used if a customfield needs to be removed when the customfieldtype for that field is no longer available!

      If however the customfield object cannot be retrieved via the manager, which may be the case if the custom field type is no longer available (a plugin may have been removed), then this method will try to lookup the custom field directly in the database. If it doesn't exist in the database, an IllegalArgumentException will be thrown. Otherwise, the customfield and all associated configurations will be removed. This method will also call to the CustomFieldValuePersister.removeAllValues(String) method to delete any values. Please note however, that if your custom field stores any other values (such as options for example), they will have to be removed by the caller of this method, as the custom field type is not accessible (which is usually responsible for removing such values).

      Parameters:
      customFieldId - The id of the customField to be removed.
      Throws:
      RemoveException - On any error removing the custom field
      IllegalArgumentException - If no customfield matching the customFieldId can be found
    • removeCustomField

      void removeCustomField(CustomField customField) throws RemoveException
      Removes the customfield supplied including all associations and values.
      Parameters:
      customField - The CustomField to be removed.
      Throws:
      RemoveException - On any error removing the custom field
    • updateCustomField

      void updateCustomField(Long id, String name, String description, CustomFieldSearcher searcher)
      Updates the given custom field.
      Parameters:
      id - the custom field ID
      name - the new name
      description - the new description
      searcher - the new Searcher
    • removeCustomFieldValues

      void removeCustomFieldValues(org.ofbiz.core.entity.GenericValue issue) throws org.ofbiz.core.entity.GenericEntityException
      Removes the values stored by customfields for a particular Issue.
      Parameters:
      issue - The issue GenericValue
      Throws:
      org.ofbiz.core.entity.GenericEntityException - DB error
    • getCustomFieldsWithValue

      @Nonnull Set<CustomField> getCustomFieldsWithValue(@Nonnull Issue issue)
      Returns a set of CustomFields that have value stored in database for particular issue.
      Parameters:
      issue - An Issue object
      Returns:
      A set of CustomFields
      Since:
      8.1
    • removeProjectAssociations

      void removeProjectAssociations(Project project)
      Used if a project is deleted to remove the project field associations.
      Parameters:
      project - The project being deleted.
    • getCustomFieldInstance

      CustomField getCustomFieldInstance(org.ofbiz.core.entity.GenericValue customFieldGv)
      Converts a customfield GenericValue to a CustomField instance.
      Parameters:
      customFieldGv -
      Returns:
      a CustomField instance
    • refresh

      void refresh()
      reloads all customfields into the cache from the DB, this is an expensive operation, so avoid it if you can.
    • refreshConfigurationSchemes

      void refreshConfigurationSchemes(Long customFieldId)
      Causes a reload of the field configuration scheme for a specified custom field id Call when the configuration scheme changes
      Parameters:
      customFieldId - the custom field ID
    • clear

      void clear()
      clear the cache
    • getCustomFieldSearcherClass

      Class<? extends CustomFieldSearcher> getCustomFieldSearcherClass(String key)
      Retrieve a custom field searcher by its type key.

      The key is the "full plugin module key". That is, the plugin key for the plugin it comes from, a colon separator, and then the module key. e.g. the system types are specified in system-customfieldtypes-plugin.xml:

       <atlassian-plugin key="com.atlassian.jira.plugin.system.customfieldtypes" name="Custom Field Types & Searchers">
           ...
           <customfield-type key="float" name="Number Field"
           ...
       
      To access the 'Number Field' type, the key would then be 'com.atlassian.jira.plugin.system.customfieldtypes:float'.
      Parameters:
      key - Type identifier constructed from plugin XML.