com.atlassian.jira.issue.customfields.impl
Class AbstractSingleFieldType<T>

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

@PublicSpi
public abstract class AbstractSingleFieldType<T>
extends AbstractCustomFieldType<T,T>

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 (aka Transport 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<X>
           
 
Nested classes/interfaces inherited from class com.atlassian.jira.issue.customfields.impl.AbstractCustomFieldType
AbstractCustomFieldType.VisitorBase<X>
 
Field Summary
protected  CustomFieldValuePersister customFieldValuePersister
           
protected static String FIELD_TYPE_DATE
           
protected static String FIELD_TYPE_NUMBER
           
protected static String FIELD_TYPE_STRING
           
protected static 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
 Object accept(AbstractCustomFieldType.VisitorBase visitor)
           
 void createValue(CustomField field, Issue issue, T value)
          at this point we know that the value doesn't exist, and that is not null.
 String getChangelogValue(CustomField field, T 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  Object getDbValueFromObject(T customFieldObject)
          Returns the database representation of the Java object as stored for that CustomField.
 T getDefaultValue(FieldConfig fieldConfig)
          Retrieves the Object representing the default CustomField value for the Custom Field.
 JsonData getJsonDefaultValue(IssueContext issueCtx, CustomField field)
           
protected abstract  T getObjectFromDbValue(Object databaseValue)
          Returns the Transport Object for the given Custom Field value as represented by the value stored in the database
 Object getStringValueFromCustomFieldParams(CustomFieldParams parameters)
          Return the String value object from the CustomFieldParams.
 T getValueFromCustomFieldParams(CustomFieldParams relevantParams)
          Retrieves the Transport Object representing the CustomField value instance from the CustomFieldParams of Strings.
 T getValueFromIssue(CustomField field, Issue issue)
          Retrieves the Transport Object representing the current CustomField value for the given issue.
 Set<Long> remove(CustomField field)
          called when removing a field.
 void setDefaultValue(FieldConfig fieldConfig, T value)
          Sets the default value for a Custom Field
 void updateValue(CustomField customField, Issue issue, T 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 String FIELD_TYPE_STRING
See Also:
Constant Field Values

FIELD_TYPE_TEXT

protected static final String FIELD_TYPE_TEXT
See Also:
Constant Field Values

FIELD_TYPE_DATE

protected static final String FIELD_TYPE_DATE
See Also:
Constant Field Values

FIELD_TYPE_NUMBER

protected static final 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

@Nullable
public T getValueFromIssue(CustomField field,
                                    Issue issue)
Description copied from interface: CustomFieldType
Retrieves the Transport Object representing the current CustomField value for the given issue.

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, T), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, T)

remove

public Set<Long> 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,
                        T value)
at this point we know that the value doesn't exist, and that is not null.

Parameters:
field - CustomField for which the value is being stored
issue - The Issue to be stored against.
value - Transport Object representing the value instance of the CustomField.

updateValue

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

Parameters:
customField - CustomField for which the value is being stored
issue - The Issue to be stored against.
value - Transport Object representing the value instance of the CustomField.

setDefaultValue

public void setDefaultValue(FieldConfig fieldConfig,
                            T 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 T getDefaultValue(FieldConfig fieldConfig)
Description copied from interface: CustomFieldType
Retrieves the Object representing the default CustomField value for the Custom Field.

Parameters:
fieldConfig - CustomField for default value
Returns:
Transport Object of the Default Value

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 T getValueFromCustomFieldParams(CustomFieldParams relevantParams)
                                throws FieldValidationException
Description copied from interface: CustomFieldType
Retrieves the Transport Object representing the CustomField value instance from the CustomFieldParams of Strings.

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, T), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, T)
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, Object), CustomFieldType.updateValue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue, Object), CustomFieldType.getValueFromIssue(com.atlassian.jira.issue.fields.CustomField, com.atlassian.jira.issue.Issue)

getStringValueFromCustomFieldParams

public 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). Among other things these values are passed to Velocity for rendering edit screens.

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

getChangelogValue

public String getChangelogValue(CustomField field,
                                T 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

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

Returns:
One of the predefined PersistenceFieldType types.

getDbValueFromObject

@Nullable
protected abstract Object getDbValueFromObject(T customFieldObject)
Returns the database representation of the Java object as stored for that CustomField. (eg. ProjectId if the Value represents a project). Must be compatable with type returned by getDatabaseType()

Parameters:
customFieldObject - the Transport Object
Returns:
String, Double or Date

getObjectFromDbValue

@Nullable
protected abstract T getObjectFromDbValue(@NotNull
                                                   Object databaseValue)
                                   throws FieldValidationException
Returns the Transport Object for the given Custom Field value as represented by the value stored in the database

Parameters:
databaseValue - - String, Double or Date objects as returned from getDbValueFromObject(Object)
Returns:
Domain object or GenericValue
Throws:
FieldValidationException - if field validation fails.

accept

public Object accept(AbstractCustomFieldType.VisitorBase visitor)
Overrides:
accept in class AbstractCustomFieldType<T,T>

getJsonDefaultValue

public JsonData getJsonDefaultValue(IssueContext issueCtx,
                                    CustomField field)


Copyright © 2002-2012 Atlassian. All Rights Reserved.