/* * Copyright 2000-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.om.security.turbine; import java.util.List; import java.util.Hashtable; import java.util.ArrayList; import com.workingdogs.village.*; import org.apache.torque.util.Criteria; import org.apache.torque.TorqueException; import org.apache.torque.om.NumberKey; import org.apache.turbine.util.ObjectUtils; import org.apache.jetspeed.om.security.JetspeedUser; import org.apache.jetspeed.om.security.JetspeedUserFactory; // Local classes /** * The skeleton for this class was autogenerated by Torque on: * * [Wed May 29 23:45:25 PDT 2002] * * You should add additional methods to this class to meet the * application requirements. This class will only be generated as * long as it does not already exist in the output directory. */ public class TurbineUserPeer extends org.apache.jetspeed.om.security.turbine.BaseTurbineUserPeer { /** The schema. */ private static Schema schema = initTableSchema(TABLE_NAME); /** The columns. */ private static com.workingdogs.village.Column[] columns = initTableColumns(schema); /** The names of the columns. */ public static String[] columnNames = initColumnNames(columns); /** * Selects Jetspeed Users or a derived class there of, creating the * JetspeedUsers, and populating each user's hashtable of attributes * from the result set of the query * * @param criteria the query criteria. * @return a List of JetspeedUsers */ public static List doSelectUsers( Criteria criteria ) throws TorqueException { return populateUserObjects( doSelectVillageRecords(criteria) ); } /** * The returned list will contain objects of the default type or * objects that inherit from the default. */ public static List populateUserObjects(List records) throws TorqueException { List results = new ArrayList(records.size()); // populate the object(s) for ( int i=0; i<records.size(); i++ ) { Record row = (Record)records.get(i); results.add(TurbineUserPeer.row2UserObject(row, 1, TurbineUserPeer.getOMClass())); } return results; } /** * Create a new object of type cls from a resultset row starting * from a specified offset. This is done so that you can select * other rows than just those needed for this object. You may * for example want to create two objects from the same row. */ public static JetspeedUser row2UserObject (Record row, int offset, Class cls ) throws TorqueException { try { //TurbineUser obj = (TurbineUser)cls.newInstance(); //populateObject(row, offset, obj); //obj.setModified(false); //obj.setNew(false); JetspeedUser user = JetspeedUserFactory.getInstance(false); populateUserObject(row, offset, user); return user; } catch (Exception e) { throw new TorqueException(e); } } protected static final String TURBINE_OBJECTDATA = "OBJECTDATA"; /* * Populates a JetspeedUser from a single row in the result set. * The hashtable of attributes for each user is populated with columns * from the result set. * * @param row a row containing a single user's attributes. * @param user the JetspeedUser object to be populated. * */ protected static void populateUserObject(Record row, int offset, JetspeedUser user) throws Exception { // Set values are where columns are expected. They are not // required to be in these positions, as we set the positions // immediately following. int idPosition = 1; int objectDataPosition = columnNames.length; for( int i=0; i<columnNames.length; i++ ) { if (columnNames[i].equals(USER_ID)) idPosition = i+1; if (columnNames[i].equals(TURBINE_OBJECTDATA)) objectDataPosition = i+1; } // 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( TURBINE_OBJECTDATA ) ) { Object obj2 = null; Value value = row.getValue(j+1); if (value.isString()) obj2 = value.asString(); else if (value.isBigDecimal()) obj2 = value.asBigDecimal(); else if (value.isBytes()) obj2 = value.asBytes(); else if (value.isDate()) obj2 = value.asDate(); else if (value.isShort()) obj2 = new Short(value.asShort()); else if (value.isInt()) obj2 = new Integer(value.asInt()); else if (value.isLong()) obj2 = new Long(value.asLong()); else if (value.isDouble()) obj2 = new Double(value.asDouble()); else if (value.isFloat()) obj2 = new Float(value.asFloat()); else if (value.isBoolean()) obj2 = new Boolean(value.asBoolean()); else if (value.isTime()) obj2 = value.asTime(); else if (value.isTimestamp()) obj2 = value.asTimestamp(); else if (value.isUtilDate()) obj2 = value.asUtilDate(); else if (value.isByte()) obj2 = new Byte(value.asByte()); if ( obj2 != null ) { if (columnNames[j].equalsIgnoreCase( JetspeedUser.USER_ID )) { obj2 = value.toString(); } tempHash.put( columnNames[j], obj2 ); } } } user.setPermStorage( tempHash ); } /* * Populates a JetspeedUser from a single row in the result set. * The hashtable of attributes for each user is populated with columns * from the result set. * * @param row a row containing a single user's attributes. * @param user the JetspeedUser object to be populated. * */ /* DST: COMMITTED 8/19 FROM AMIT AMTE - IT HAS SOME BUGS, GOING TO REMOVE UNTIL RESOLVED protected static void populateUserObject(Record row, int offset, JetspeedUser user) throws Exception { // 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(OBJECTDATA).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( OBJECTDATA ) ) { Object obj2 = null; Value value = null; try { value = row.getValue(columnNames[j]); } catch (Exception ex) { // Column missing from the torque record .. // Probable/intentional mis-match between the // torque schema and db table continue; } if (value.isString()) obj2 = value.asString(); else if (value.isBigDecimal()) obj2 = value.asBigDecimal(); else if (value.isBytes()) obj2 = value.asBytes(); else if (value.isDate()) obj2 = value.asDate(); else if (value.isShort()) obj2 = new Short(value.asShort()); else if (value.isInt()) obj2 = new Integer(value.asInt()); else if (value.isLong()) obj2 = new Long(value.asLong()); else if (value.isDouble()) obj2 = new Double(value.asDouble()); else if (value.isFloat()) obj2 = new Float(value.asFloat()); else if (value.isBoolean()) obj2 = new Boolean(value.asBoolean()); else if (value.isTime()) obj2 = value.asTime(); else if (value.isTimestamp()) obj2 = value.asTimestamp(); else if (value.isUtilDate()) obj2 = value.asUtilDate(); else if (value.isByte()) obj2 = new Byte(value.asByte()); if ( obj2 != null ) { if (columnNames[j].equalsIgnoreCase( JetspeedUser.USER_ID )) { obj2 = value.toString(); } System.out.println(columnNames[j] + ": " + obj2.toString()); tempHash.put( columnNames[j], obj2 ); } } } user.setPermStorage( tempHash ); } */ /** * Builds a criteria object based upon an User object */ public static Criteria buildCriteria(JetspeedUser user) { Hashtable permData = (Hashtable) user.getPermStorage().clone(); Criteria criteria = new Criteria(); if ( !user.isNew() ) { criteria.add(USER_ID, new NumberKey(user.getUserId())); } for (int i=1; i < columnNames.length; i++ ) { if ( permData.containsKey(columnNames[i]) ) { String key = new StringBuffer(TABLE_NAME) .append('.').append(columnNames[i]).toString(); criteria.add( key, permData.remove(TurbineUserPeer.columnNames[i]) ); } } String dataKey = new StringBuffer(TABLE_NAME).append('.').append(TURBINE_OBJECTDATA).toString(); criteria.add( dataKey, permData ); return criteria; } }