// $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.math.BigDecimal; import java.util.List; 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.Volume; 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.Plate; 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.searchresults.SearchResults; import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBeanTest; import edu.harvard.med.screensaver.ui.libraries.LibraryCopySearchResults; public class LibraryCopySearchResultsTest extends AbstractBackingBeanTest { @Autowired protected LibrariesDAO librariesDao; @Autowired protected LibraryCopySearchResults libraryCopiesBrowser; @Override protected void setUp() throws Exception { super.setUp(); Library library = dataFactory.newInstance(Library.class); library.setStartPlate(100); library.setEndPlate(103); Copy copyA = library.createCopy((AdministratorUser) library.getCreatedBy(), CopyUsageType.LIBRARY_SCREENING_PLATES, "A"); Plate plate100A = copyA.findPlate(100).withWellVolume(new Volume(0)); Plate plate101A = copyA.findPlate(101).withWellVolume(new Volume(0)); Plate plate102A = copyA.findPlate(102).withWellVolume(new Volume(0)); Copy copyB = library.createCopy((AdministratorUser) library.getCreatedBy(), CopyUsageType.LIBRARY_SCREENING_PLATES, "B"); Plate plate100B = copyB.findPlate(100).withWellVolume(new Volume(0)); Plate plate101B = copyB.findPlate(101).withWellVolume(new Volume(0)); Plate plate102B = copyB.findPlate(102).withWellVolume(new Volume(0)); Copy copyC = library.createCopy((AdministratorUser) library.getCreatedBy(), CopyUsageType.LIBRARY_SCREENING_PLATES, "C"); Plate plate103C = copyC.findPlate(103).withWellVolume(new Volume(0)); genericEntityDao.saveOrUpdateEntity(library); Screen screen1 = dataFactory.newInstance(Screen.class); LibraryScreening ls1 = screen1.createLibraryScreening(dataFactory.newInstance(AdministratorUser.class), dataFactory.newInstance(ScreeningRoomUser.class), new LocalDate()); ls1.setNumberOfReplicates(2); ls1.setComments("first"); ls1.addAssayPlatesScreened(plate100A); ls1.addAssayPlatesScreened(plate101A); genericEntityDao.saveOrUpdateEntity(ls1.getScreen()); LibraryScreening ls2 = screen1.createLibraryScreening(dataFactory.newInstance(AdministratorUser.class), dataFactory.newInstance(ScreeningRoomUser.class), new LocalDate()); ls2.setNumberOfReplicates(1); ls2.addAssayPlatesScreened(plate101B); ls2.addAssayPlatesScreened(plate102B); genericEntityDao.saveOrUpdateEntity(ls2.getScreen()); genericEntityDao.saveOrUpdateEntity(screen1); Screen screen2 = dataFactory.newInstance(Screen.class); LibraryScreening ls3 = screen2.createLibraryScreening(dataFactory.newInstance(AdministratorUser.class), dataFactory.newInstance(ScreeningRoomUser.class), new LocalDate()); ls3.setNumberOfReplicates(2); ls3.setComments("first"); ls3.addAssayPlatesScreened(plate100B); ls3.addAssayPlatesScreened(plate101B); ls3.addAssayPlatesScreened(plate102B); genericEntityDao.saveOrUpdateEntity(ls3.getScreen()); genericEntityDao.saveOrUpdateEntity(screen2); } public void testSearchPlatesScreenedByLibrary() { libraryCopiesBrowser.searchCopiesByLibrary(genericEntityDao.findEntityByProperty(Library.class, "startPlate", 100)); libraryCopiesBrowser.getColumnManager().setSortColumnName("Copy Name"); libraryCopiesBrowser.getColumnManager().setSortAscending(true); assertEquals(Lists.newArrayList(100, 100, 100), getColumnsValues(libraryCopiesBrowser, "Start Plate")); assertEquals(Lists.newArrayList("A", "B", "C"), getColumnsValues(libraryCopiesBrowser, "Copy Name")); assertEquals(Lists.newArrayList(1, 2, 0), getColumnsValues(libraryCopiesBrowser, "Screening Count")); assertEquals(Lists.newArrayList(2, 5, 0), getColumnsValues(libraryCopiesBrowser, "Plate Screening Count")); assertEquals(Lists.newArrayList(4, 4, 4), getColumnsValues(libraryCopiesBrowser, "Copy Plate Count")); assertEquals(Lists.newArrayList(new BigDecimal("0.5"), new BigDecimal("1.3"), BigDecimal.ZERO), getColumnsValues(libraryCopiesBrowser, "Plate Screening Count Average")); } private List<Object> getColumnsValues(SearchResults searchResults, String columnName) { DataTableModel<Object> model = searchResults.getDataTableModel(); TableColumn<Object,?> 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(model.getRowData())); } return result; } }