// $HeadURL$
// $Id$
//
// Copyright © 2006, 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.model;
import edu.harvard.med.screensaver.model.activities.AdministrativeActivity;
import edu.harvard.med.screensaver.model.activities.ServiceActivity;
import edu.harvard.med.screensaver.model.cells.Cell;
import edu.harvard.med.screensaver.model.cells.ExperimentalCellInformation;
import edu.harvard.med.screensaver.model.cherrypicks.CherryPickAssayPlate;
import edu.harvard.med.screensaver.model.cherrypicks.CherryPickLiquidTransfer;
import edu.harvard.med.screensaver.model.cherrypicks.LabCherryPick;
import edu.harvard.med.screensaver.model.cherrypicks.RNAiCherryPickRequest;
import edu.harvard.med.screensaver.model.cherrypicks.ScreenerCherryPick;
import edu.harvard.med.screensaver.model.cherrypicks.SmallMoleculeCherryPickRequest;
import edu.harvard.med.screensaver.model.libraries.Copy;
import edu.harvard.med.screensaver.model.libraries.Gene;
import edu.harvard.med.screensaver.model.libraries.Library;
import edu.harvard.med.screensaver.model.libraries.LibraryContentsVersion;
import edu.harvard.med.screensaver.model.libraries.NaturalProductReagent;
import edu.harvard.med.screensaver.model.libraries.Plate;
import edu.harvard.med.screensaver.model.libraries.PlateLocation;
import edu.harvard.med.screensaver.model.libraries.SilencingReagent;
import edu.harvard.med.screensaver.model.libraries.SmallMoleculeReagent;
import edu.harvard.med.screensaver.model.libraries.Well;
import edu.harvard.med.screensaver.model.libraries.WellVolumeCorrectionActivity;
import edu.harvard.med.screensaver.model.screenresults.AnnotationType;
import edu.harvard.med.screensaver.model.screenresults.AnnotationValue;
import edu.harvard.med.screensaver.model.screenresults.AssayPlate;
import edu.harvard.med.screensaver.model.screenresults.AssayWell;
import edu.harvard.med.screensaver.model.screenresults.DataColumn;
import edu.harvard.med.screensaver.model.screenresults.ResultValue;
import edu.harvard.med.screensaver.model.screenresults.ScreenResult;
import edu.harvard.med.screensaver.model.screens.AbaseTestset;
import edu.harvard.med.screensaver.model.screens.CellLine;
import edu.harvard.med.screensaver.model.screens.CherryPickScreening;
import edu.harvard.med.screensaver.model.screens.EquipmentUsed;
import edu.harvard.med.screensaver.model.screens.FundingSupport;
import edu.harvard.med.screensaver.model.screens.LibraryScreening;
import edu.harvard.med.screensaver.model.screens.Publication;
import edu.harvard.med.screensaver.model.screens.Screen;
import edu.harvard.med.screensaver.model.screens.Study;
import edu.harvard.med.screensaver.model.screens.TransfectionAgent;
import edu.harvard.med.screensaver.model.users.AdministratorUser;
import edu.harvard.med.screensaver.model.users.ChecklistItem;
import edu.harvard.med.screensaver.model.users.ChecklistItemEvent;
import edu.harvard.med.screensaver.model.users.LabAffiliation;
import edu.harvard.med.screensaver.model.users.LabHead;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUser;
/**
* A visitor interface for the Screensaver domain model entity classes.
* <p>
* Note: <code>visit</code> methods should only be added for concrete entity
* classes (i.e., <i>abstract</i> entity classes should not be visitable). This
* ensures that each <i>concrete</i> <code>AbstractEntity</code> class that
* extends a subclass of {@link AbstractEntity} can provide its own
* {@link AbstractEntity#acceptVisitor(AbstractEntityVisitor)} method
* implementation.
*
* @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a>
* @author <a mailto="john_sullivan@hms.harvard.edu">John Sullivan</a>
*/
public interface AbstractEntityVisitor<R>
{
R visit(AbaseTestset entity);
R visit(AdministratorUser administratorUser);
R visit(AdministrativeActivity administrativeActivity);
R visit(AnnotationType annotation);
R visit(AnnotationValue annotationValue);
R visit(AssayPlate assayPlate);
R visit(AssayWell assayWell);
R visit(AttachedFile entity);
R visit(AttachedFileType attachedFileType);
// R visit(BillingInformation entity);
// R visit(BillingItem entity);
R visit(ChecklistItemEvent entity);
R visit(ChecklistItem entity);
R visit(CherryPickAssayPlate entity);
R visit(CherryPickLiquidTransfer entity);
R visit(SmallMoleculeReagent entity);
R visit(SmallMoleculeCherryPickRequest entity);
R visit(Copy entity);
R visit(Plate entity);
R visit(PlateLocation entity);
R visit(EquipmentUsed entity);
R visit(FundingSupport fundingSupport);
R visit(Gene entity);
R visit(LabAffiliation entity);
R visit(LabCherryPick entity);
R visit(LabHead labHead);
R visit(Library entity);
R visit(LibraryContentsVersion libraryContentsVersion);
R visit(LibraryScreening entity);
R visit(NaturalProductReagent entity);
R visit(Publication entity);
R visit(ResultValue entity);
R visit(DataColumn entity);
R visit(RNAiCherryPickRequest entity);
R visit(CherryPickScreening entity);
R visit(Screen screen);
R visit(ScreenResult screenResult);
R visit(ScreenerCherryPick entity);
R visit(ScreeningRoomUser screeningRoomUser);
R visit(ServiceActivity serviceActivity);
R visit(SilencingReagent entity);
R visit(Study study);
R visit(Well entity);
R visit(WellVolumeCorrectionActivity entity);
R visit(CellLine cellLine);
R visit(TransfectionAgent transfectionAgent);
R visit(ExperimentalCellInformation experimentalCellInformation);
R visit(Cell cell);
}