com.atlassian.jira.issue.customfields.impl
Class AbstractSingleFieldType

java.lang.Object
  extended by com.atlassian.jira.issue.customfields.impl.AbstractCustomFieldType
      extended by com.atlassian.jira.issue.customfields.impl.AbstractSingleFieldType
All Implemented Interfaces:
CustomFieldType
Direct Known Subclasses:
DateCFType, DateTimeCFType, NumberCFType, ProjectCFType, StringCFType

public abstract class AbstractSingleFieldType
extends AbstractCustomFieldType

A abstract class that simplifies creating a CustomField that stores a single values via ofbiz. Possible values to store are:

A custom field value has 3 states that it can be represented as.
In Memory Object
This is used as the primary version of the custom field value. This is what is passed to the view layer. An example would be a User or a GenericValue representing a project.
String representation
When editing a custom field value, it needs to be send to the web browser and received in text format. The in Memory Object mentioned above must have a text representation of itself, and be able to parse it. This is the value passed to the edit template. An example would be a username, or project id.
Database representation (required if storing in a database)
A custom field can be stored in a database, and there needs to be a way of getting from the object value to the database value. An example of this would be the project id.


Nested Class Summary
static interface AbstractSingleFieldType.Visitor<T>
           
 
Nested classes/interfaces inherited from class com.atlassian.jira.issue.customfields.impl.AbstractCustomFieldType
AbstractCustomFieldType.VisitorBase<T>
 
Field Summary
protected  CustomFieldValuePersister customFieldValuePersister
           
protected static java.lang.String FIELD_TYPE_DATE
           
protected static java.lang.String FIELD_TYPE_NUMBER
           
protected static java.lang.String FIELD_TYPE_STRING
           
protected static java.lang.String FIELD_TYPE_TEXT
           
protected  GenericConfigManager genericConfigManager
           
protected static org.apache.log4j.Logger log
           
 
Fields inherited from interface com.atlassian.jira.issue.customfields.CustomFieldType
DEFAULT_VALUE_TYPE
 
Constructor Summary
protected AbstractSingleFieldType(CustomFieldValuePersister customFieldValuePersister, GenericConfigManager genericConfigManager)
           
 
Method Summary
 java.lang.Object accept(AbstractCustomFieldType.VisitorBase visitor)
           
 void createValue(CustomField field, Issue issue, java.lang.Object value)
          at this point we know that the value doesn't exist, and that is not null.
 java.lang.String getChangelogValue(CustomField field, java.lang.Object value)
          Returns a values to be stored in the change log, example is the id of the changed item.
protected abstract  PersistenceFieldType getDatabaseType()
          Type of database field needed to store this field.
protected abstract  java.lang.Object getDbValueFromObject(java.lang.Object customFieldObject)
          Returns the database representation of the Java object as stored for that CustomField.
 java.lang.Object getDefaultValue(FieldConfig fieldConfig)
          Retrieves the Object representing the default CustomField value for the Custom Field.
protected abstract  java.lang.Object getObjectFromDbValue(java.lang.Object databaseValue)
          Returns the Domain Object or GenericValue object representing the given Custom Field value as stored in the database
 java.lang.Object getStringValueFromCustomFieldParams(CustomFieldParams parameters)
          Return the String value object from the CustomFieldParams.
 java.lang.Object getValueFromCustomFieldParams(CustomFieldParams relevantParams)
          Retrieves the Object representing the CustomField value instance from the CustomFieldParams of Strings.
 java.lang.Object getValueFromIssue(CustomField field, Issue issue)
          Retrieves the Object representing the current CustomField value for the given issue.
 java.util.Set remove(CustomField field)
          called when removing a field.
 void setDefaultValue(FieldConfig fieldConfig, java.lang.Object value)
          Sets the default value for a Custom Field
 void updateValue(CustomField customField, Issue issue, java.lang.Object value)
          the value does exist, and the new value is different than the existing one.
 void validateFromParams(CustomFieldParams relevantParams, ErrorCollection errorCollectionToAddTo, FieldConfig config)
          Ensures that the CustomFieldParams of Strings is a valid representation of the Custom Field values.
 
Methods inherited from class com.atlassian.jira.issue.customfields.impl.AbstractCustomFieldType
assertObjectImplementsType, availableForBulkEdit, getChangelogString, getConfigurationItemTypes, getDescription, getDescriptor, getI18nBean, getKey, getName, getRelatedIndexers, getVelocityParameters, getVelocityParameters, init, isRenderable, valuesEqual
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.atlassian.jira.issue.customfields.CustomFieldType
getSingularObjectFromString, getStringFromSingularObject
 

Field Detail

log

protected static final org.apache.log4j.Logger log

FIELD_TYPE_STRING

protected static final java.lang.String FIELD_TYPE_STRING
See Also:
Constant Field Values

FIELD_TYPE_TEXT

protected static final java.lang.String FIELD_TYPE_TEXT
See Also:
Constant Field Values

FIELD_TYPE_DATE

protected static final java.lang.String FIELD_TYPE_DATE
See Also:
Constant Field Values

FIELD_TYPE_NUMBER

protected static final java.lang.String FIELD_TYPE_NUMBER
See Also:
Constant Field Values

customFieldValuePersister

protected final CustomFieldValuePersister customFieldValuePersister

genericConfigManager

protected final GenericConfigManager genericConfigManager
Constructor Detail

AbstractSingleFieldType

protected AbstractSingleFieldType(CustomFieldValuePersister customFieldValuePersister,
                                  GenericConfigManager genericConfigManager)
Method Detail

getValueFromIssue

public java.lang.Object getValueFromIssue(CustomField field,
                                          Issue issue)
Description copied from interface: CustomFieldType
Retrieves the Object representing the current CustomField value for the given issue. See CustomFieldType.getValueFromCustomFieldParams(com.atlassian.jira.issue.customfields.view.CustomFieldParams) for more detailed notes.

Parameters:
field - Custom field for which to retrieve the value
issue - Issue from which to retrieve the value
Returns:
Transport Object matching the Object parameter of CustomFieldType.createValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object)
See Also:
CustomFieldType.getValueFromCustomFieldParams(com.atlassian.jira.issue.customfields.view.CustomFieldParams)

remove

public java.util.Set remove(CustomField field)
called when removing a field. return issue IDs affected.

Subclasses should override this if they have specific cleanup that they need to do (such as removing select list values)

Parameters:
field - The custom field that is being removed, so any data stored for any issues for that field can be deleted.
Returns:
Set of issue ids that has been affected

createValue

public void createValue(CustomField field,
                        Issue issue,
                        java.lang.Object value)
at this point we know that the value doesn't exist, and that is not null.


updateValue

public void updateValue(CustomField customField,
                        Issue issue,
                        java.lang.Object value)
the value does exist, and the new value is different than the existing one.


setDefaultValue

public void setDefaultValue(FieldConfig fieldConfig,
                            java.lang.Object value)
Description copied from interface: CustomFieldType
Sets the default value for a Custom Field

Parameters:
fieldConfig - CustomField for which the default is being stored
value - Transport Object representing the value instance of the CustomField

getDefaultValue

public java.lang.Object getDefaultValue(FieldConfig fieldConfig)
Description copied from interface: CustomFieldType
Retrieves the Object representing the default CustomField value for the Custom Field. See CustomFieldType.getValueFromCustomFieldParams(com.atlassian.jira.issue.customfields.view.CustomFieldParams) for more detailed notes.

Parameters:
fieldConfig - CustomField for default value
Returns:
Transport Object matching the Object parameter of CustomFieldType.createValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object)

validateFromParams

public void validateFromParams(CustomFieldParams relevantParams,
                               ErrorCollection errorCollectionToAddTo,
                               FieldConfig config)
Description copied from interface: CustomFieldType
Ensures that the CustomFieldParams of Strings is a valid representation of the Custom Field values. Any errors should be added to the ErrorCollection under the appropriate key as required.

Parameters:
relevantParams - parameter object of Strings
errorCollectionToAddTo - errorCollection to which any erros should be added (never null)
config - FieldConfig

getValueFromCustomFieldParams

public java.lang.Object getValueFromCustomFieldParams(CustomFieldParams relevantParams)
                                               throws FieldValidationException
Description copied from interface: CustomFieldType
Retrieves the Object representing the CustomField value instance from the CustomFieldParams of Strings. This return type must exactly match that of the value Object parameter in the persistance methods (CustomFieldType.createValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object)) and Object returned from CustomFieldType.getValueFromIssue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue).

Parameters:
relevantParams - CustomFieldParams of String objects. Will contain one value for Singular field types.
Returns:
Transport Object matching the Object parameter of CustomFieldType.createValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object)
Throws:
FieldValidationException - if the String value fails to convert into Objects
See Also:
CustomFieldType.createValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, java.lang.Object), CustomFieldType.getValueFromIssue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue)

getStringValueFromCustomFieldParams

public java.lang.Object getStringValueFromCustomFieldParams(CustomFieldParams parameters)
Description copied from interface: CustomFieldType
Return the String value object from the CustomFieldParams. The object may be a single String (e.g. TextCFType, List of Strings (e.g. MultiSelectCFType) or CustomFieldParams of Strings (e.g. CascadingSelectCFType)

Parameters:
parameters - - CustomFieldParams containing String values
Returns:
String value object from the CustomFieldParams

getChangelogValue

public java.lang.String getChangelogValue(CustomField field,
                                          java.lang.Object value)
Description copied from interface: CustomFieldType
Returns a values to be stored in the change log, example is the id of the changed item.

Parameters:
field - CustomField that the value belongs to
value - Transport Object representing the value instance of the CustomField
Returns:
Change log value.

getDatabaseType

protected abstract PersistenceFieldType getDatabaseType()
Type of database field needed to store this field.

Returns:
One of the predefined PersistenceFieldType types.

getDbValueFromObject

protected abstract java.lang.Object getDbValueFromObject(java.lang.Object customFieldObject)
Returns the database representation of the Java object as stored for that CustomField. (eg. ProjectId if the Value represents a project)

Parameters:
customFieldObject -
Returns:
String, Double or Date

getObjectFromDbValue

protected abstract java.lang.Object getObjectFromDbValue(java.lang.Object databaseValue)
                                                  throws FieldValidationException
Returns the Domain Object or GenericValue object representing the given Custom Field value as stored in the database

Parameters:
databaseValue - - String, Double or Date objects
Returns:
Domain object or GenericValue
Throws:
FieldValidationException

accept

public java.lang.Object accept(AbstractCustomFieldType.VisitorBase visitor)
Overrides:
accept in class AbstractCustomFieldType


Copyright © 2002-2010 Atlassian. All Rights Reserved.