package org.apache.jetspeed.om.dbpsml;
// JDK classes
import java.util.List;
import java.sql.Connection;
// Jetspeed classes for Database PsmlManager implementation
import org.apache.jetspeed.services.psmlmanager.db.DBUtils;
// Turbine classes
import org.apache.jetspeed.om.security.JetspeedUser;
import org.apache.turbine.util.RunData;
//Torque classes
import org.apache.torque.util.Criteria;
import org.apache.torque.util.BasePeer;
// Local classes
import org.apache.jetspeed.om.dbpsml.map.*;
// Jetspeed classes (Profiler)
import org.apache.jetspeed.services.Profiler;
import org.apache.jetspeed.om.profile.Profile;
import org.apache.jetspeed.om.profile.ProfileLocator;
import org.apache.jetspeed.services.psmlmanager.db.DBOperations;
import org.apache.jetspeed.services.psmlmanager.db.DBUtils;
import org.apache.jetspeed.services.psmlmanager.db.DatabasePsmlManager;
import org.apache.jetspeed.services.PsmlManager;
/**
* The skeleton for this class was autogenerated by Torque on:
*
* [Mon Sep 10 13:30:53 PDT 2001]
*
* 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.
*
* @author <a href="mailto:adambalk@cisco.com">Atul Dambalkar</a>
* @version $Id: JetspeedUserProfilePeer.java,v 1.14 2003/07/23 19:50:14 morciuch Exp $
*/
public class JetspeedUserProfilePeer
extends org.apache.jetspeed.om.dbpsml.BaseJetspeedUserProfilePeer
implements DBOperations
{
/**
* Default constructor.
*/
public JetspeedUserProfilePeer() {}
/**
* Insert a user profile record in the database table.
*
* @param profile Profile object that will be inserted in the database
* @param connection A database connection to use
*/
public void insert(Profile profile, Connection connection) throws Exception
{
doInsertOrUpdate(profile, INSERT, connection);
}
/**
* Insert a user profile record in the database table.
*
* @param profile Profile object that will be inserted in the database
* @param connection A database connection to use
*/
public void update(Profile profile, Connection connection) throws Exception
{
doInsertOrUpdate(profile, UPDATE, connection);
}
private void doInsertOrUpdate(Profile profile, int operation, Connection connection)
throws Exception
{
JetspeedUserProfile userProfile = new JetspeedUserProfile();
DatabasePsmlManager service = (DatabasePsmlManager)PsmlManager.getService();
userProfile.setUserName(profile.getUser().getUserName());
userProfile.setMediaType(profile.getMediaType());
String language = profile.getLanguage();
if(language != null && (!language.equals("-1")))
{
userProfile.setLanguage(language);
}
else
{
userProfile.setLanguage(null);
}
String country = profile.getCountry();
if(country != null && (!country.equals("-1")))
{
userProfile.setCountry(country);
}
else
{
userProfile.setCountry(null);
}
String name = profile.getName();
if (name == null || name.equals(""))
{
profile.setName(Profiler.FULL_DEFAULT_PROFILE);
}
else if (!name.endsWith(Profiler.DEFAULT_EXTENSION))
{
profile.setName(name + Profiler.DEFAULT_EXTENSION);
}
userProfile.setPage(profile.getName());
userProfile.setProfile(DBUtils.portletsToBytes(
profile.getDocument().getPortlets(), service.getMapping()));
if (operation == INSERT)
{
super.doInsert(userProfile, connection);
}
else if (operation == UPDATE)
{
Criteria values = buildCriteria(userProfile);
Criteria select = buildCriteria(userProfile);
select.remove(PROFILE);
BasePeer.doUpdate( select, values, connection );
}
}
/**
* Delete user profile record from the database table.
*
* @param profile Profile object that will be deleted from the database
* @param connection A database connection to use
*/
public void delete(ProfileLocator locator, Connection connection) throws Exception
{
super.doDelete(buildCriteria(locator), connection);
}
/**
* Select user profile record from the database table for the given
* locator object.
*
* @param locator ProfileLocator object that will be used to select required
* profile from the database
* @param connection A database connection to use
* @return List of records that statisfy the given locator criteria.
*/
public List select(ProfileLocator locator, Connection connection) throws Exception
{
Criteria criteria = buildCriteria(locator);
return super.doSelect(criteria, connection); // buildCriteria(locator));
}
/**
* Select user profile record from the database table for the given
* locator object and return list ordered by primary key.
*
* @param locator ProfileLocator object that will be used to select required
* profile from the database
* @param connection A database connection to use
* @return List of records that statisfy the given locator criteria.
*/
public List selectOrdered(ProfileLocator locator, Connection connection) throws Exception
{
Criteria criteria = buildCriteria(locator);
criteria.addAscendingOrderByColumn(USER_NAME);
criteria.addAscendingOrderByColumn(MEDIA_TYPE);
criteria.addAscendingOrderByColumn(LANGUAGE);
criteria.addAscendingOrderByColumn(COUNTRY);
criteria.addAscendingOrderByColumn(PAGE);
return super.doSelect(criteria, connection);
}
/**
* Delete all records from the database table for a user.
*
* @param user User object for which all the records will be deleted from the database
* @param connection A database connection to use
*/
public void delete(JetspeedUser user, Connection connection) throws Exception
{
Criteria criteria = new Criteria();
criteria.add(USER_NAME, user.getUserName());
super.doDelete(criteria, connection);
}
/*
* Build criteria for selecting, deleting groups
*
*/
protected Criteria buildCriteria(ProfileLocator locator)
{
Criteria criteria = new Criteria();
String mediaType = locator.getMediaType();
String language = locator.getLanguage();
String country = locator.getCountry();
String pageName = locator.getName();
String userName = null;
JetspeedUser user= locator.getUser();
if (user != null) {
userName = user.getUserName();
}
if (userName != null && userName.length() > 0)
{
criteria.add(USER_NAME, userName) ;
}
if (pageName != null && pageName.length() > 0)
{
criteria.add(PAGE, pageName);
}
if (mediaType != null && mediaType.length() > 0)
{
criteria.add(MEDIA_TYPE, mediaType);
}
if (language != null && language.length() > 0 && (!language.equals("-1")))
{
criteria.add(LANGUAGE, language);
}
else if(language != null && language.equals("-1"))
{
criteria.add(LANGUAGE, null);
}
if (country != null && country.length() > 0 && (!country.equals("-1")))
{
criteria.add(COUNTRY, country);
}
else if(country != null && country.equals("-1"))
{
criteria.add(COUNTRY, null);
}
return criteria;
}
}