// $HeadURL$
// $Id$
//
// Copyright © 2010 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.service.screens;
import org.springframework.transaction.annotation.Transactional;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.model.screens.ProjectPhase;
import edu.harvard.med.screensaver.model.screens.Screen;
import edu.harvard.med.screensaver.model.screens.ScreenType;
import edu.harvard.med.screensaver.model.screens.StudyType;
import edu.harvard.med.screensaver.model.users.AdministratorUser;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUser;
public class DefaultScreenGenerator implements ScreenGenerator
{
private ScreenFacilityIdInitializer _screenIdentifierGenerator;
private GenericEntityDAO _dao;
protected DefaultScreenGenerator()
{}
public DefaultScreenGenerator(ScreenFacilityIdInitializer screenIdentifierGenerator,
GenericEntityDAO dao)
{
_screenIdentifierGenerator = screenIdentifierGenerator;
_dao = dao;
}
@Override
public Screen createPrimaryScreen(AdministratorUser admin, ScreeningRoomUser leadScreener, ScreenType screenType)
{
leadScreener = _dao.reloadEntity(leadScreener);
Screen screen = new Screen(admin);
screen.setProjectPhase(ProjectPhase.PRIMARY_SCREEN);
screen.setStudyType(StudyType.IN_VITRO);
screen.setScreenType(screenType);
if (leadScreener != null) {
screen.setLeadScreener(leadScreener);
screen.setLabHead(leadScreener.getLab().getLabHead());
}
_screenIdentifierGenerator.initializeFacilityId(screen);
return screen;
}
@Override
@Transactional
public Screen createRelatedScreen(AdministratorUser admin, Screen primaryScreen, ProjectPhase projectPhase)
{
primaryScreen = _dao.reloadEntity(primaryScreen);
Screen screen = new Screen(admin);
screen.setTitle(primaryScreen.getTitle());
screen.setSummary(primaryScreen.getSummary());
screen.setProjectId(primaryScreen.getProjectId());
screen.setProjectPhase(projectPhase);
screen.setScreenType(primaryScreen.getScreenType());
screen.setStudyType(primaryScreen.getStudyType());
screen.setLeadScreener(primaryScreen.getLeadScreener());
screen.setLabHead(primaryScreen.getLabHead());
_screenIdentifierGenerator.initializeFacilityId(screen);
return screen;
}
}