// $HeadURL$ // $Id$ // // Copyright © 2008, 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.libraries; import java.util.Arrays; import java.util.List; import javax.faces.model.SelectItem; import org.apache.log4j.Logger; import edu.harvard.med.screensaver.ScreensaverConstants; import edu.harvard.med.screensaver.db.GenericEntityDAO; import edu.harvard.med.screensaver.model.DataModelViolationException; import edu.harvard.med.screensaver.model.activities.Activity; import edu.harvard.med.screensaver.model.libraries.Library; import edu.harvard.med.screensaver.model.libraries.LibraryScreeningStatus; import edu.harvard.med.screensaver.model.libraries.LibraryType; import edu.harvard.med.screensaver.model.libraries.PlateSize; import edu.harvard.med.screensaver.model.libraries.Solvent; import edu.harvard.med.screensaver.model.screens.ScreenType; import edu.harvard.med.screensaver.model.users.ScreeningRoomUser; import edu.harvard.med.screensaver.service.libraries.LibraryCreator; import edu.harvard.med.screensaver.ui.arch.util.EntityComments; import edu.harvard.med.screensaver.ui.arch.util.JSFUtils; import edu.harvard.med.screensaver.ui.arch.util.UISelectOneBean; import edu.harvard.med.screensaver.ui.arch.util.UISelectOneEntityBean; import edu.harvard.med.screensaver.ui.arch.view.EditResult; import edu.harvard.med.screensaver.ui.arch.view.EditableEntityViewerBackingBean; import edu.harvard.med.screensaver.ui.arch.view.aspects.UICommand; /** * Backing class for the Library creation page. * * @author <a mailto="voonkl@bii.a-star.edu.sg">Kian Loon Voon</a> */ public class LibraryDetailViewer extends EditableEntityViewerBackingBean<Library> { // static members private static Logger log = Logger.getLogger(LibraryDetailViewer.class); private LibraryCreator _libraryCreator; private LibraryViewer _libraryViewer; private LibraryPlateSearchResults _libraryPlatesBrowser; private EntityComments _comments; private UISelectOneEntityBean<ScreeningRoomUser> owner; /** * @motivation for CGLIB2 */ protected LibraryDetailViewer() { } public LibraryDetailViewer(LibraryDetailViewer thisProxy, GenericEntityDAO dao, LibraryCreator libraryCreator, LibraryViewer libraryViewer, LibraryPlateSearchResults libraryPlatesBrowser, EntityComments comments) { super(thisProxy, Library.class, EDIT_LIBRARY, dao); _libraryCreator = libraryCreator; _libraryViewer = libraryViewer; _libraryPlatesBrowser = libraryPlatesBrowser; _comments = comments; } public List<SelectItem> getLibraryScreeningStatusSelectItems() { List<LibraryScreeningStatus> values = Arrays.asList(LibraryScreeningStatus.values()); if (getEntity().getScreeningStatus() == null) { return JSFUtils.createUISelectItemsWithEmptySelection(values, REQUIRED_VOCAB_FIELD_PROMPT); } return JSFUtils.createUISelectItems(values); } public List<SelectItem> getScreenTypeSelectItems() { List<ScreenType> values = Arrays.asList(ScreenType.values()); if (getEntity().getScreenType() == null) { return JSFUtils.createUISelectItemsWithEmptySelection(values, REQUIRED_VOCAB_FIELD_PROMPT); } return JSFUtils.createUISelectItems(values); } public List<SelectItem> getPlateSizeSelectItems() { List<PlateSize> values = Arrays.asList(PlateSize.values()); if (getEntity().getPlateSize() == null) { return JSFUtils.createUISelectItemsWithEmptySelection(values, REQUIRED_VOCAB_FIELD_PROMPT); } return JSFUtils.createUISelectItems(values); } public List<SelectItem> getSolventSelectItems() { List<Solvent> values = Arrays.asList(Solvent.values()); if (getEntity().getSolvent() == null) { return JSFUtils.createUISelectItemsWithEmptySelection(values, REQUIRED_VOCAB_FIELD_PROMPT); } return JSFUtils.createUISelectItems(values); } public List<SelectItem> getLibraryTypeSelectItems() { List<LibraryType> values = Arrays.asList(LibraryType.values()); if (getEntity().getLibraryType() == null) { return JSFUtils.createUISelectItemsWithEmptySelection(values, REQUIRED_VOCAB_FIELD_PROMPT); } return JSFUtils.createUISelectItems(values); } @Override protected void initializeEntity(Library entity) { getDao().needReadOnly(entity, Library.updateActivities.to(Activity.performedBy)); } @Override protected void initializeViewer(Library entity) { _comments.setEntity(entity); } @Override protected void initializeNewEntity(Library library) { library.setPlateSize(ScreensaverConstants.DEFAULT_PLATE_SIZE); library.setSolvent(Solvent.getDefaultSolventType(library.getScreenType())); } @Override protected boolean validateEntity(Library entity) { try { if (entity.isTransient()) { _libraryCreator.validateLibrary(entity); } } catch (DataModelViolationException e) { showMessage("libraries.libraryCreationFailed", e.getMessage()); return false; } if (entity.getSolvent() != null && !entity.getSolvent().isValidForScreenType(entity.getScreenType())) { showMessage("libraries.invalidSolventType", entity.getSolvent(), entity.getScreenType()); return false; } return true; } @Override protected void updateEntityProperties(Library entity) { if (entity.getWells().size() == 0) { _libraryCreator.createLibrary(entity); } entity.setOwner(getOwner().getSelection()); } @Override protected String postEditAction(EditResult editResult) { switch (editResult) { case CANCEL_EDIT: case SAVE_EDIT: return _libraryViewer.reload(); case SAVE_NEW: // note: can't call reload() since parent viewer is not yet configured with our new library return _libraryViewer.viewEntity(getEntity()); case CANCEL_NEW: return VIEW_MAIN; default: return null; } } public UISelectOneBean<ScreeningRoomUser> getOwner() { if (owner == null) { //TODO convert to sortedSet List<ScreeningRoomUser> owners = getDao().findAllEntitiesOfType(ScreeningRoomUser.class); owner = new UISelectOneEntityBean<ScreeningRoomUser>(owners, getEntity().getOwner(), true, getDao()) { @Override protected String makeLabel(ScreeningRoomUser o) { return o.getFullNameLastFirst(); } @Override protected String getEmptyLabel() { return "<empty>"; } }; } return owner; } @UICommand public String browseLibraryPlates() { _libraryPlatesBrowser.searchLibraryPlatesByLibrary(getEntity()); return BROWSE_LIBRARY_PLATES_SCREENED; } public EntityComments getComments() { return _comments; } }