// $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.ui.searchresults; import java.util.List; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Lists; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import edu.harvard.med.screensaver.db.LibrariesDAO; import edu.harvard.med.screensaver.model.libraries.Copy; import edu.harvard.med.screensaver.model.libraries.CopyUsageType; import edu.harvard.med.screensaver.model.libraries.Library; import edu.harvard.med.screensaver.model.libraries.LibraryPlate; import edu.harvard.med.screensaver.model.screens.LibraryScreening; import edu.harvard.med.screensaver.model.screens.Screen; import edu.harvard.med.screensaver.model.users.AdministratorUser; import edu.harvard.med.screensaver.model.users.ScreeningRoomUser; import edu.harvard.med.screensaver.ui.arch.datatable.column.TableColumn; import edu.harvard.med.screensaver.ui.arch.datatable.model.DataTableModel; import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBeanTest; import edu.harvard.med.screensaver.ui.libraries.LibraryPlateSearchResults; public class LibraryPlateSearchResultsTest extends AbstractBackingBeanTest { @Autowired protected LibrariesDAO librariesDao; // note: we must get the Spring-instantiated libraryPlatesBrowser, to ensure Transactional behavior @Autowired protected LibraryPlateSearchResults libraryPlatesBrowser; private Screen _screen; private Library _library; @Override protected void setUp() throws Exception { super.setUp(); _library = dataFactory.newInstance(Library.class); _library.setStartPlate(100); _library.setEndPlate(103); Copy copyA = _library.createCopy((AdministratorUser) _library.getCreatedBy(), CopyUsageType.LIBRARY_SCREENING_PLATES, "A"); Copy copyB = _library.createCopy((AdministratorUser) _library.getCreatedBy(), CopyUsageType.LIBRARY_SCREENING_PLATES, "B"); genericEntityDao.saveOrUpdateEntity(_library); _screen = dataFactory.newInstance(Screen.class); LibraryScreening ls1 = _screen.createLibraryScreening(dataFactory.newInstance(AdministratorUser.class), dataFactory.newInstance(ScreeningRoomUser.class), new LocalDate()); ls1.setNumberOfReplicates(2); ls1.setComments("first"); ls1.addAssayPlatesScreened(copyA.getPlates().get(100)); ls1.addAssayPlatesScreened(copyA.getPlates().get(101)); genericEntityDao.saveOrUpdateEntity(ls1.getScreen()); LibraryScreening ls2 = _screen.createLibraryScreening(dataFactory.newInstance(AdministratorUser.class), dataFactory.newInstance(ScreeningRoomUser.class), new LocalDate()); ls2.setNumberOfReplicates(1); ls2.addAssayPlatesScreened(copyB.getPlates().get(101)); ls2.addAssayPlatesScreened(copyB.getPlates().get(102)); genericEntityDao.saveOrUpdateEntity(ls2.getScreen()); genericEntityDao.saveOrUpdateEntity(_screen); } public void testSearchLibraryPlatesByLibrary() { libraryPlatesBrowser.searchLibraryPlatesByLibrary(_library); assertEquals(Lists.newArrayList(100, 101, 102, 103), getColumnsValues(libraryPlatesBrowser, "Plate")); assertEquals(Lists.newArrayList(1, 2, 1, 0), getColumnsValues(libraryPlatesBrowser, "Screening Count")); assertEquals(Lists.newArrayList(ImmutableSortedSet.of("A"), ImmutableSortedSet.of("A", "B"), ImmutableSortedSet.of("B"), ImmutableSortedSet.of()), getColumnsValues(libraryPlatesBrowser, "Copies Screened")); } public void testSearchPlatesScreenedByScreen() { libraryPlatesBrowser.searchLibraryPlatesScreenedByScreen(_screen); assertEquals(Lists.newArrayList(100, 101, 102), getColumnsValues(libraryPlatesBrowser, "Plate")); assertEquals(Lists.newArrayList(1, 2, 1), getColumnsValues(libraryPlatesBrowser, "Screening Count")); assertEquals(Lists.newArrayList(ImmutableSortedSet.of("A"), ImmutableSortedSet.of("A", "B"), ImmutableSortedSet.of("B")), getColumnsValues(libraryPlatesBrowser, "Copies Screened")); } public void testSearchPlatesScreenedByLibraryScreening() { libraryPlatesBrowser.searchLibraryPlatesScreenedByLibraryScreening(genericEntityDao.findEntityByProperty(LibraryScreening.class, "comments", "first")); assertEquals(Lists.newArrayList(100, 101), getColumnsValues(libraryPlatesBrowser, "Plate")); assertEquals(Lists.newArrayList(1, 1), getColumnsValues(libraryPlatesBrowser, "Screening Count")); assertEquals(Lists.newArrayList(ImmutableSortedSet.of("A"), ImmutableSortedSet.of("A")), getColumnsValues(libraryPlatesBrowser, "Copies Screened")); } private List<Object> getColumnsValues(LibraryPlateSearchResults searchResults, String columnName) { DataTableModel<LibraryPlate> model = searchResults.getDataTableModel(); TableColumn<LibraryPlate,?> column = searchResults.getColumnManager().getColumn(columnName); assert column != null : "no such column: " + columnName; List<Object> result = Lists.newArrayList(); for (int i = 0; i < model.getRowCount(); ++i) { model.setRowIndex(i); result.add(column.getCellValue((LibraryPlate) model.getRowData())); } return result; } }