com.is.jrf
Class StringArrayColumnSpec

java.lang.Object
  |
  +--com.is.jrf.AbstractColumnSpec
        |
        +--com.is.jrf.StringArrayColumnSpec
All Implemented Interfaces:
ColumnSpec, JRFConstants

public class StringArrayColumnSpec
extends AbstractColumnSpec

Subclass of AbstractColumnSpec that handles arrays of strings.

This Column Spec will take an array of Strings from a Persistent Object and convert it to a comma delimited string back in the database. Similarly, a commma delimited String in a database column will be reconstituted back into an array of Strings.

The default delimiter is a comma, but this can be dynamically reset.

The underlying field in the PersistentObject will be an Array of Strings. If this array is null, the corresponding column in the database will be set to null. Similarly, a null column in the database will reconstitute itself as a null String[] object.

However, a String[] of zero length will be saved as an empty String, and an empty String will reconstitute itself as an zero length array. Null objects in the String Array, or strings which are empty or contain only spaces, will be ignored when being converted.


Field Summary
static java.lang.String COMMA
           
static java.lang.String[] EMPTY_ARRAY
           
static java.lang.String EMPTY_STRING
           
protected  java.lang.String i_delimiter
           
protected static java.lang.Class s_class
           
 
Fields inherited from class com.is.jrf.AbstractColumnSpec
EQUALS, i_columnName, i_default, i_getter, i_naturalPrimaryKey, i_optimisticLock, i_required, i_sequencedPrimaryKey, i_setter, i_subtypeIdentifier, i_unique, NOT_EQUALS
 
Fields inherited from interface com.is.jrf.JRFConstants
CURRENT_DATE, CURRENT_TIMESTAMP, DEFAULT_TO_EMPTY_STRING, DEFAULT_TO_FALSE, DEFAULT_TO_NOW, DEFAULT_TO_NULL, DEFAULT_TO_ONE, DEFAULT_TO_TODAY, DEFAULT_TO_TRUE, DEFAULT_TO_ZERO, NATURAL_PRIMARY_KEY, NO_POST_FIND, OPTIMISTIC_LOCK, REQUIRED, SEQUENCED_PRIMARY_KEY, SUBTYPE_IDENTIFIER, UNIQUE
 
Constructor Summary
StringArrayColumnSpec(java.lang.String columnName, java.lang.String getter, java.lang.String setter, java.lang.Object defaultValue)
           
StringArrayColumnSpec(java.lang.String columnName, java.lang.String getter, java.lang.String setter, java.lang.Object defaultValue, int option1)
           
StringArrayColumnSpec(java.lang.String columnName, java.lang.String getter, java.lang.String setter, java.lang.Object defaultValue, int option1, int option2)
           
StringArrayColumnSpec(java.lang.String columnName, java.lang.String getter, java.lang.String setter, java.lang.Object defaultValue, int option1, int option2, int option3)
           
 
Method Summary
protected static java.lang.String[] arrayFromDelimitedString(java.lang.String values, java.lang.String delimiter)
          Takes a delimited string of values and converts it into an array of string values.
protected static java.lang.String arrayToDelimitedString(java.lang.String[] values, java.lang.String delimiter)
          Takes an array of Strings and converts them into a single delimited String.
 JoinColumn buildJoinColumn()
           
 java.lang.Object decode(java.lang.String aString)
          Decodes an Array of Strings from an encoded String.

Note that null String[] objects are encoded as the string "'null", so this method does not work correctly for an Array of Strings consisting of a single String with a value of "null"

 java.lang.String encode(java.lang.Object obj)
          Overidden method that matches with decode().

Note that null String[] objects are encoded as the string "'null", so this method does not work correctly for an Array of Strings consisting of a single String with a value of "null".

 java.lang.String formatForSql(java.lang.Object obj, DatabasePolicy dbPolicy)
          This method overrides the superclass implementation.
 java.lang.Class getColumnClass()
          See IntegerColumnSpec for example of how to implement:
 java.lang.Object getColumnValueFrom(JDBCHelper helper)
          Return a String[] from JDBCHelper.
 java.lang.String getSQLColumnType(DatabasePolicy dbPolicy)
          Return the ANSI standard SQL column type.
 void setDelimiter(java.lang.String delimiter)
          Sets the delimiter used to delimit the String stored in the database.

The default delimiter is the comma, ",".

 java.lang.Object validateRequired(PersistentObject aPO)
          This is an override of the superclass implementation.
 
Methods inherited from class com.is.jrf.AbstractColumnSpec
buildNameValuePair, buildWhereClause, columnDefinitionString, copyAttribute, copyColumnValueToPersistentObject, decodeToPersistentObject, encodeFromPersistentObject, getColumnName, getDefault, getFullyQualifiedColumnName, getGetter, getSetter, getSqlValueFrom, getValueFrom, getValueFrom, isNaturalPrimaryKey, isOptimisticLock, isPrimaryKey, isRequired, isSequencedPrimaryKey, isSubtypeIdentifier, isUnique, optimisticLockDefaultValue, setRequired, setValueTo, setValueTo, validateUnique, validateUnique
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EMPTY_STRING

public static final java.lang.String EMPTY_STRING

EMPTY_ARRAY

public static final java.lang.String[] EMPTY_ARRAY

COMMA

public static final java.lang.String COMMA

s_class

protected static java.lang.Class s_class

i_delimiter

protected java.lang.String i_delimiter
Constructor Detail

StringArrayColumnSpec

public StringArrayColumnSpec(java.lang.String columnName,
                             java.lang.String getter,
                             java.lang.String setter,
                             java.lang.Object defaultValue)

StringArrayColumnSpec

public StringArrayColumnSpec(java.lang.String columnName,
                             java.lang.String getter,
                             java.lang.String setter,
                             java.lang.Object defaultValue,
                             int option1)

StringArrayColumnSpec

public StringArrayColumnSpec(java.lang.String columnName,
                             java.lang.String getter,
                             java.lang.String setter,
                             java.lang.Object defaultValue,
                             int option1,
                             int option2)

StringArrayColumnSpec

public StringArrayColumnSpec(java.lang.String columnName,
                             java.lang.String getter,
                             java.lang.String setter,
                             java.lang.Object defaultValue,
                             int option1,
                             int option2,
                             int option3)
Method Detail

setDelimiter

public void setDelimiter(java.lang.String delimiter)
Sets the delimiter used to delimit the String stored in the database.

The default delimiter is the comma, ",".


arrayToDelimitedString

protected static java.lang.String arrayToDelimitedString(java.lang.String[] values,
                                                         java.lang.String delimiter)
Takes an array of Strings and converts them into a single delimited String. If the array is empty, or contains only null or empty objects an empty string is returned "". If the Array is null, then a null String is returned. External spaces are removed from each array item. If an array object is null, empty or constains only white space, it is ignored.
See Also:
ListToFromDelimitedString(List list)

arrayFromDelimitedString

protected static java.lang.String[] arrayFromDelimitedString(java.lang.String values,
                                                             java.lang.String delimiter)
Takes a delimited string of values and converts it into an array of string values. If the original String is empty or null, a zero length Array is returned
See Also:
(String[] values)

formatForSql

public java.lang.String formatForSql(java.lang.Object obj,
                                     DatabasePolicy dbPolicy)
This method overrides the superclass implementation. A string of "null" is returned if object is null, otherwise it returns a String with quotes around it. Internal single quotes are converted to two single quotes and the string is wrapped in single quotes.
Overrides:
formatForSql in class AbstractColumnSpec
Parameters:
aValueObject - a value of type 'ValueObject'
Returns:
a value of type 'String'

decode

public java.lang.Object decode(java.lang.String aString)
Decodes an Array of Strings from an encoded String.

Note that null String[] objects are encoded as the string "'null", so this method does not work correctly for an Array of Strings consisting of a single String with a value of "null"

Overrides:
decode in class AbstractColumnSpec
Parameters:
aString - a value of type 'String'
Returns:
a value of type 'Object' (This actually will be a String or null)

encode

public java.lang.String encode(java.lang.Object obj)
Overidden method that matches with decode().

Note that null String[] objects are encoded as the string "'null", so this method does not work correctly for an Array of Strings consisting of a single String with a value of "null".

Overrides:
encode in class AbstractColumnSpec
Parameters:
obj - the object (String[]) to encode to a String'
Returns:
an encoded string)

getColumnClass

public java.lang.Class getColumnClass()
Description copied from class: AbstractColumnSpec
See IntegerColumnSpec for example of how to implement:
Overrides:
getColumnClass in class AbstractColumnSpec

getColumnValueFrom

public java.lang.Object getColumnValueFrom(JDBCHelper helper)
                                    throws java.sql.SQLException
Return a String[] from JDBCHelper. Reconstitute an Array of Strings from a delimited String. The strange behaviour with SQLServer (and maybe Sybase) that keeps returning empty or whitespace strings as one blank character can be ignored, as any white spaced is trimmed out before creating the array.
Overrides:
getColumnValueFrom in class AbstractColumnSpec
Parameters:
helper - a value of type 'JDBCHelper'
Returns:
a value of type 'Object'
Throws:
java.sql.SQLException - if an error occurs in JDBCHelper

validateRequired

public java.lang.Object validateRequired(PersistentObject aPO)
                                  throws MissingAttributeException
This is an override of the superclass implementation. This method adds a check to make sure the string is not empty or blank.
Overrides:
validateRequired in class AbstractColumnSpec
Parameters:
aPO - a value of type 'PersistentObject'
Returns:
a value of type 'Object'
Throws:
MissingAttributeException - if an error occurs

getSQLColumnType

public java.lang.String getSQLColumnType(DatabasePolicy dbPolicy)
Return the ANSI standard SQL column type. This was written to support the test suites. If there is no standard that will work across platforms, then we'll add a method to dbPolicy and return its value.
Overrides:
getSQLColumnType in class AbstractColumnSpec
Parameters:
dbPolicy - a value of type 'DatabasePolicy'
Returns:
a value of type 'String'

buildJoinColumn

public JoinColumn buildJoinColumn()
Overrides:
buildJoinColumn in class AbstractColumnSpec
Following copied from class: com.is.jrf.AbstractColumnSpec
Returns:
a JoinColumn subclass instance with data from myself.