I am running the lastest cvs version of turbine with postgres. I have
encountered problems retrieving the field values from the TurbineUser
class, calling getUserName(), getLastName(), or getFirstName() would
always return null even though there was valid data. Doing further
research, I've found that the problem was in the keys of the hashtable
that was storing the data values. Postgres was using lower case column
names and the TurbineUserPeer column names where in upper case. To fix
the problem, I changed the keys to upper case when they are added and
removed to the hash table.
Anyway comments?
......
/**
* Builds a criteria object based upon an User object
*/
public static Criteria buildCriteria(User user)
{
Hashtable permData = (Hashtable) user.getPermStorage().clone();
Criteria criteria = new Criteria();
criteria.add( TurbineUserPeer.USER_ID,
((BaseObject)user).getPrimaryKey() );
for (int i=1; i<TurbineUserPeer.columnNames.length; i++ )
{
>>>>>>>> if (
>permData.containsKey(TurbineUserPeer.columnNames[i].toUpperCase()) )
{
criteria.add( TurbineUserPeer.criteriaKeys[i],
>>>>>>>>
>permData.remove(TurbineUserPeer.columnNames[i].toUpperCase()) );
}
}
criteria.add( TurbineUserPeer.OBJECT_DATA, permData );
return criteria;
}
/**
* Issues a select based on a criteria.
*
* @param criteria Object containing data that is used to create
* the SELECT statement.
* @param current User object that is to be used as part of the
* results - if not passed, then a new one is created.
* @return Vector containing TurbineUser objects.
* @exception Exception, a generic exception.
*/
public static Vector doSelect(Criteria criteria,
User current)
throws Exception
{
// Set values are where columns are expected. They are not
// required to be in these positions, as we set the positions
// while populating the select columns.
int idPosition = 1;
int objectDataPosition = columnNames.length;
for( int i=0; i<columnNames.length; i++ )
{
criteria.addSelectColumn(new StringBuffer()
.append(TABLE_NAME)
.append(".")
.append(columnNames[i]).toString() );
if (columnNames[i].equals(USER_ID_COLUMN))
idPosition = i+1;
if (columnNames[i].equals(OBJECT_DATA_COLUMN))
objectDataPosition = i+1;
}
if (criteria.getOrderByColumns() == null)
{
criteria.addOrderByColumn(LAST_NAME);
}
// Place any checks here to intercept criteria which require
// custom SQL. For example:
// if ( criteria.containsKey("SomeTable.SomeColumn") )
// {
// String whereSql = "SomeTable.SomeColumn IN (Select ...";
// criteria.add("SomeTable.SomeColumn",
// whereSQL, criteria.CUSTOM);
// }
// BasePeer returns a Vector of Record (Village) objects. The
// array order follows the order columns were placed in the
// Select clause.
Vector rows = BasePeer.doSelect(criteria);
Vector results = new Vector();
// Populate the object(s).
for ( int i=0; i<rows.size(); i++ )
{
User obj = TurbineSecurity.getUserInstance();
Record row = (Record)rows.elementAt(i);
((BaseObject)obj).setPrimaryKey(
row.getValue(idPosition).asBigDecimal() );
// Restore the Permanent Storage Hashtable. First the
// Hashtable is restored, then any explicit table columns
// which should be included in the Hashtable are added.
byte[] objectData =
(byte[])row.getValue(objectDataPosition).asBytes();
Hashtable tempHash =
(Hashtable)ObjectUtils.deserialize(objectData);
if (tempHash == null)
{
tempHash = new Hashtable(10);
}
for( int j=0; j<columnNames.length; j++ )
{
if ( ! ( columnNames[j].equalsIgnoreCase( USER_ID_COLUMN
)
|| columnNames[j].equalsIgnoreCase(
OBJECT_DATA_COLUMN ) ))
{
Object obj2 = null;
Value value = row.getValue(j+1);
if (value.isByte()) obj2 = new Byte(value.asByte());
if (value.isBigDecimal()) obj2 =
value.asBigDecimal();
if (value.isBytes()) obj2 = value.asBytes();
if (value.isDate()) obj2 = value.asDate();
if (value.isShort()) obj2 = new
Short(value.asShort());
if (value.isInt()) obj2 = new
Integer(value.asInt());
if (value.isLong()) obj2 = new Long(value.asLong());
if (value.isDouble()) obj2 = new
Double(value.asDouble());
if (value.isFloat()) obj2 = new
Float(value.asFloat());
if (value.isBoolean()) obj2 = new
Boolean(value.asBoolean());
if (value.isString()) obj2 = value.asString();
if (value.isTime()) obj2 = value.asTime();
if (value.isTimestamp()) obj2 = value.asTimestamp();
if (value.isUtilDate()) obj2 = value.asUtilDate();
if ( obj2 != null )
>>>>>>>> tempHash.put( columnNames[j].toUpperCase(), obj2 );
}
}
obj.setPermStorage( tempHash );
// Add User to the return Vector.
results.addElement( obj );
}
return results;
}
------------------------------------
eumir
[EMAIL PROTECTED]
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
------------------------------------------------------------
To subscribe: [EMAIL PROTECTED]
To unsubscribe: [EMAIL PROTECTED]
Search: <http://www.mail-archive.com/turbine%40list.working-dogs.com/>
Problems?: [EMAIL PROTECTED]