package edu.harvard.med.lincs.screensaver.ui.libraries; import java.net.URL; import java.util.SortedSet; import com.google.common.base.Predicate; import com.google.common.collect.Sets; import org.apache.log4j.Logger; import edu.harvard.med.screensaver.ScreensaverConstants; import edu.harvard.med.screensaver.db.GenericEntityDAO; import edu.harvard.med.screensaver.db.LibrariesDAO; import edu.harvard.med.screensaver.io.image.ImageLocatorUtil; import edu.harvard.med.screensaver.io.libraries.WellsSdfDataExporter; import edu.harvard.med.screensaver.io.libraries.smallmolecule.LibraryContentsVersionReference; import edu.harvard.med.screensaver.io.libraries.smallmolecule.StructureImageLocator; import edu.harvard.med.screensaver.io.screenresults.ScreenResultReporter; import edu.harvard.med.screensaver.io.screens.StudyImageLocator; import edu.harvard.med.screensaver.model.AttachedFile; import edu.harvard.med.screensaver.model.AttachedFileType; import edu.harvard.med.screensaver.model.libraries.Reagent; import edu.harvard.med.screensaver.model.libraries.ReagentAttachedFileType; import edu.harvard.med.screensaver.model.libraries.SmallMoleculeReagent; import edu.harvard.med.screensaver.model.libraries.Well; import edu.harvard.med.screensaver.policy.EntityViewPolicy; import edu.harvard.med.screensaver.ui.arch.util.AttachedFiles; import edu.harvard.med.screensaver.ui.libraries.AnnotationSearchResults; import edu.harvard.med.screensaver.ui.libraries.LibraryViewer; import edu.harvard.med.screensaver.ui.libraries.WellSearchResults; import edu.harvard.med.screensaver.ui.screens.StudyViewer; import edu.harvard.med.screensaver.util.NullSafeUtils; public class WellViewer extends edu.harvard.med.screensaver.ui.libraries.WellViewer { private static final Logger log = Logger.getLogger(WellViewer.class); private AttachedFiles _attachedFiles; private StudyImageLocator _studyImageLocator; // for [#2417] NOTE: this is a LINCS-only feature /** * @motivation for CGLIB2 */ protected WellViewer() {} public WellViewer(WellViewer thisProxy, WellSearchResults wellSearchResults, GenericEntityDAO dao, LibrariesDAO librariesDAO, EntityViewPolicy entityViewPolicy, LibraryViewer libraryViewer, StructureImageLocator structureImageLocator, StudyViewer studyViewer, WellsSdfDataExporter wellsSdfDataExporter, LibraryContentsVersionReference libraryContentsVersionRef, AnnotationSearchResults annotationSearchResults, ScreenResultReporter screenResultReporter, StudyImageLocator studyImageLocator, AttachedFiles attachedFiles) { super(thisProxy, wellSearchResults, dao, librariesDAO, entityViewPolicy, libraryViewer, structureImageLocator, studyViewer, wellsSdfDataExporter, libraryContentsVersionRef, annotationSearchResults, screenResultReporter); _attachedFiles = attachedFiles; _studyImageLocator = studyImageLocator; getIsPanelCollapsedMap().put("annotations", Boolean.FALSE); } @Override protected void initializeViewer(Well well) { super.initializeViewer(well); initalizeAttachedFiles(well.getLatestReleasedReagent()); } public AttachedFiles getAttachedFiles() { return _attachedFiles; } private void initalizeAttachedFiles(Reagent reagent) { if (reagent != null) { getDao().needReadOnly(reagent, Reagent.attachedFiles); getDao().needReadOnly(reagent, Reagent.attachedFiles.to(AttachedFile.fileType)); SortedSet<AttachedFileType> attachedFileTypes = Sets.<AttachedFileType>newTreeSet(getDao().findAllEntitiesOfType(ReagentAttachedFileType.class, true)); _attachedFiles.initialize((Reagent) reagent.restrict(), attachedFileTypes, new Predicate<AttachedFile>() { @Override public boolean apply(AttachedFile input) { return !!! input.getFileType().getValue().equals(ScreensaverConstants.STUDY_FILE_TYPE); } }); } else { _attachedFiles.initialize(); } } /** * NOTE: this is a LINCS-only feature * * @return formatted (to 3 digits) Facility Batch Identifier from the SmallMoleculeReagent */ public String getSmallMoleculeFacilityBatchId() { return getRestrictedReagent() == null ? null : String.format("%03d", ((SmallMoleculeReagent) getRestrictedReagent()).getFacilityBatchId()); } /** * NOTE: this is a LINCS-only feature * * @return formatted (to 3 digits) Facility BgetRestrictedReagent() == null ? null : atch Identifier from the * SmallMoleculeReagent */ public String getSmallMoleculeSaltFormId() { return getRestrictedReagent() == null ? null : String.format("%03d", ((SmallMoleculeReagent) getRestrictedReagent()).getSaltFormId()); } /** * NOTE: this is a LINCS-only feature * * @return formatted (to 3 digits) Facility Batch Identifier from the SmallMoleculeReagent */ public String getSmallMoleculeVendorBatchId() { return getRestrictedReagent() == null ? null : ((SmallMoleculeReagent) getRestrictedReagent()).getVendorBatchId(); } public String getStudyImageUrl() { if (_studyImageLocator == null) return null; URL url = _studyImageLocator.getImageUrl((SmallMoleculeReagent) getRestrictedReagent()); return NullSafeUtils.toString(ImageLocatorUtil.toExtantContentUrl(url), ""); } }