package edu.asu.spring.quadriga.dao.profile.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import edu.asu.spring.quadriga.dao.impl.BaseDAO;
import edu.asu.spring.quadriga.dao.profile.IProfileManagerDAO;
import edu.asu.spring.quadriga.domain.IProfile;
import edu.asu.spring.quadriga.domain.factories.IProfileFactory;
import edu.asu.spring.quadriga.dto.QuadrigaUserprofileDTO;
import edu.asu.spring.quadriga.dto.QuadrigaUserprofileDTOPK;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.web.profile.impl.SearchResultBackBean;
/**
* this class manages addition, deletion, retrieval of the records for user
* profile table
*
* @author rohit pendbhaje
*
*/
@Repository
public class ProfileManagerDAO extends BaseDAO<QuadrigaUserprofileDTO> implements
IProfileManagerDAO {
@Autowired
private SessionFactory sessionFactory;
@Autowired
private IProfileFactory profileFactory;
/**
* adds records in database table for the profile page
*
* @param name
* name of the loggedin user serviceId id of the service from
* which records are added resultBackBean this instance contains
* all the searchresult information selected by user
* @throws QuadrigaStorageException
* @author rohit pendbhaje
*
*/
@Override
public void addUserProfileDBRequest(String name, String serviceId,
SearchResultBackBean resultBackBean)
throws QuadrigaStorageException {
try {
Date date = new Date();
QuadrigaUserprofileDTO userProfile = new QuadrigaUserprofileDTO();
QuadrigaUserprofileDTOPK userProfileKey = new QuadrigaUserprofileDTOPK(
name, serviceId, resultBackBean.getId());
userProfile.setQuadrigaUserprofileDTOPK(userProfileKey);
userProfile.setProfilename(resultBackBean.getWord());
userProfile.setDescription(resultBackBean.getDescription());
userProfile.setQuadrigaUserDTO(getUserDTO(name));
userProfile.setCreatedby(name);
userProfile.setCreateddate(date);
userProfile.setUpdatedby(name);
userProfile.setUpdateddate(date);
sessionFactory.getCurrentSession().save(userProfile);
} catch (HibernateException ex) {
throw new QuadrigaStorageException("System error", ex);
}
}
/**
* retrieves records from database
*
* @param loggedinUser
* @return list of searchresultbackbeans
* @throws QuadrigaStorageException
* @author rohit pendbhaje
*
*/
@SuppressWarnings("unchecked")
@Override
public List<IProfile> getUserProfiles(String loggedinUser)
throws QuadrigaStorageException {
List<IProfile> userProfiles = new ArrayList<IProfile>();
try {
Query query = sessionFactory.getCurrentSession().getNamedQuery(
"QuadrigaUserprofileDTO.findByUsername");
query.setParameter("username", loggedinUser);
List<QuadrigaUserprofileDTO> userProfileList = query.list();
for (QuadrigaUserprofileDTO userProfile : userProfileList) {
IProfile profile = profileFactory.createProfile();
profile.setProfileId(userProfile
.getQuadrigaUserprofileDTOPK().getProfileid());
profile.setServiceId(userProfile
.getQuadrigaUserprofileDTOPK().getServiceid());
profile.setDescription(userProfile
.getDescription());
profile.setProfilename(userProfile.getProfilename());
userProfiles.add(profile);
}
} catch (Exception ex) {
throw new QuadrigaStorageException();
}
return userProfiles;
}
/**
* deletes profile record from table for particular profileid
*
* @param username
* name of loggedin user serviceid id of the service
* corresponding to the record profileId id of the profile for
* which record is to be deleted
* @throws QuadrigaStorageException
* @author rohit pendbhaje
*
*/
@Override
public void deleteUserProfileDBRequest(String username, String serviceid,
String profileId) throws QuadrigaStorageException {
try {
QuadrigaUserprofileDTOPK userProfileKey = new QuadrigaUserprofileDTOPK(
username, serviceid, profileId);
QuadrigaUserprofileDTO userProfile = (QuadrigaUserprofileDTO) sessionFactory
.getCurrentSession().get(QuadrigaUserprofileDTO.class,
userProfileKey);
sessionFactory.getCurrentSession().delete(userProfile);
} catch (Exception ex) {
throw new QuadrigaStorageException();
}
}
/**
* retrieves serviceid from table of particular profileid
*
* @param profileId
* id of the profile for which record is to be deleted
* @throws QuadrigaStorageException
* @author rohit pendbhaje
*
*/
@Override
public String retrieveServiceIdRequest(String profileid)
throws QuadrigaStorageException {
String serviceid = null;
try {
Query query = sessionFactory.getCurrentSession().getNamedQuery(
"QuadrigaUserprofileDTO.findByProfileid");
query.setParameter("profileid", profileid);
List<QuadrigaUserprofileDTO> userprofileList = query.list();
for (QuadrigaUserprofileDTO userprofile : userprofileList) {
serviceid = userprofile.getQuadrigaUserprofileDTOPK()
.getServiceid();
}
}
catch (Exception e) {
throw new QuadrigaStorageException("sorry");
}
return serviceid;
}
@Override
public QuadrigaUserprofileDTO getDTO(String id) {
return getDTO(QuadrigaUserprofileDTO.class, id);
}
}