// $HeadURL$
// $Id$
//
// Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College.
//
// Screensaver is an open-source project developed by the ICCB-L and NSRB labs
// at Harvard Medical School. This software is distributed under the terms of
// the GNU General Public License.
package edu.harvard.med.screensaver.ui.users;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.model.meta.RelationshipPath;
import edu.harvard.med.screensaver.model.users.AffiliationCategory;
import edu.harvard.med.screensaver.model.users.Lab;
import edu.harvard.med.screensaver.model.users.LabHead;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUser;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUserClassification;
import edu.harvard.med.screensaver.ui.arch.datatable.column.TableColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.TextEntityColumn;
import edu.harvard.med.screensaver.ui.arch.datatable.column.entity.VocabularyEntityColumn;
import edu.harvard.med.screensaver.ui.arch.util.converter.AffiliationCategoryConverter;
import edu.harvard.med.screensaver.ui.arch.util.converter.ScreeningRoomUserClassificationConverter;
public class ScreenerSearchResults extends UserSearchResults<ScreeningRoomUser>
{
private GenericEntityDAO _dao;
protected ScreenerSearchResults()
{
}
public ScreenerSearchResults(GenericEntityDAO dao,
UserViewer userViewer)
{
super(ScreeningRoomUser.class, dao, userViewer);
_dao = dao;
}
@Transactional
public void searchAssociatedUsers(ScreeningRoomUser screener)
{
screener = _dao.reloadEntity(screener, true, ScreeningRoomUser.LabHead.to(LabHead.labMembers));
searchUsers(screener.getAssociatedUsers(), "Associates of screener " + screener.getFullNameFirstLast());
}
@Override
protected List<? extends TableColumn<ScreeningRoomUser,?>> buildColumns()
{
List<TableColumn<ScreeningRoomUser,?>> columns = (List<TableColumn<ScreeningRoomUser,?>>) super.buildColumns();
columns.add(3, new VocabularyEntityColumn<ScreeningRoomUser,ScreeningRoomUserClassification>(
RelationshipPath.from(ScreeningRoomUser.class).toProperty("userClassification"),
"User Classification", "The user's classsification", TableColumn.UNGROUPED,
new ScreeningRoomUserClassificationConverter(),
ScreeningRoomUserClassification.values()) {
@Override
public ScreeningRoomUserClassification getCellValue(ScreeningRoomUser user)
{
return user.getUserClassification();
}
});
columns.add(4, new TextEntityColumn<ScreeningRoomUser>(
RelationshipPath.from(ScreeningRoomUser.class).to(ScreeningRoomUser.LabHead),
"Lab Name", "The name of the lab with which the user is associated", TableColumn.UNGROUPED) {
@Override
public String getCellValue(ScreeningRoomUser user)
{
return user.getLab().getLabName();
}
});
columns.add(5, new VocabularyEntityColumn<ScreeningRoomUser,AffiliationCategory>(RelationshipPath.from(ScreeningRoomUser.class).to(ScreeningRoomUser.LabHead).to(LabHead.labAffiliation),
"Lab Affiliation Category", "The lab affiliation category", TableColumn.UNGROUPED,
new AffiliationCategoryConverter(),
AffiliationCategory.values()) {
@Override
public AffiliationCategory getCellValue(ScreeningRoomUser user)
{
Lab lab = user.getLab();
if(lab != null)
{
return lab.getLabAffiliation() == null ? null : lab.getLabAffiliation().getAffiliationCategory();
}
return null;
}
});
columns.get(columns.size() - 1).setAdministrative(true);
columns.get(5).setVisible(false);
return columns;
}
}