package edu.harvard.med.screensaver.rest;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import edu.harvard.med.screensaver.model.AttachedFile;
import edu.harvard.med.screensaver.model.AttachedFileType;
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.Reagent;
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;
import edu.harvard.med.screensaver.model.users.ScreensaverUser;
public class LincsEntityUriGenerator implements EntityUriGenerator<String>
{
private static final Logger log = Logger.getLogger(LincsEntityUriGenerator.class);
@Autowired
private HttpServletRequest request;
protected LincsEntityUriGenerator()
{}
@Override
public String visit(AttachedFile entity)
{
return getUrl("/attachedfiles/" + entity.getEntityId());
}
@Override
public String visit(LabHead labHead)
{
return visit((ScreensaverUser) labHead);
}
@Override
public String visit(Library entity)
{
return getUrl("/libraries/" + entity.getShortName());
}
@Override
public String visit(Publication entity)
{
return getUrl("/publications/" + entity.getEntityId());
}
@Override
public String visit(ResultValue entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(DataColumn entity)
{
return visit(entity.getScreenResult().getScreen()) + "/columns/" + entity.getOrdinal();
}
@Override
public String visit(Screen screen)
{
return getUrl("/screens/" + screen.getFacilityId());
}
@Override
public String visit(ScreeningRoomUser screeningRoomUser)
{
return visit((ScreensaverUser) screeningRoomUser);
}
@Override
public String visit(Study study)
{
return getUrl("/studies/" + study.getFacilityId());
}
@Override
public String visit(Well entity)
{
return getUrl("/plates/" + entity.getPlateNumber() + "/wells/" + entity.getWellName());
}
@Override
public String visit(AbaseTestset entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(AdministratorUser administratorUser)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(AdministrativeActivity administrativeActivity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(AnnotationType at)
{
return getUrl("/studies/" + at.getStudy().getFacilityId() + "/columns/" + at.getOrdinal() );
}
@Override
public String visit(AnnotationValue annotationValue)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(AssayPlate assayPlate)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(AssayWell assayWell)
{
return getUrl("/screens/" + assayWell.getScreenResult().getScreen().getFacilityId() + "/assaywells/" + assayWell.getLibraryWell().getPlateNumber() + "/wells/" + assayWell.getLibraryWell().getWellName() );
}
@Override
public String visit(AttachedFileType attachedFileType)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(ChecklistItemEvent entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(ChecklistItem entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(CherryPickAssayPlate entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(CherryPickLiquidTransfer entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(SmallMoleculeReagent entity)
{
return visit((Reagent) entity);
}
@Override
public String visit(SmallMoleculeCherryPickRequest entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(Copy entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(Plate entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(PlateLocation entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(EquipmentUsed entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(FundingSupport fundingSupport)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(Gene entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(LabAffiliation entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(LabCherryPick entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(LibraryContentsVersion libraryContentsVersion)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(LibraryScreening entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(NaturalProductReagent entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(RNAiCherryPickRequest entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(CherryPickScreening entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(ScreenResult screenResult)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(ScreenerCherryPick entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(ServiceActivity serviceActivity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(SilencingReagent entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(WellVolumeCorrectionActivity entity)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(CellLine cellLine)
{
// TODO Auto-generated method stub
return null;
}
@Override
public String visit(TransfectionAgent transfectionAgent)
{
// TODO Auto-generated method stub
return null;
}
private String visit(ScreensaverUser u)
{
return getUrl("/persons/" + u.getEntityId());
}
private String getUrl(String path)
{
return this.request.getRequestURL().substring(0, this.request.getRequestURL().indexOf(this.request.getServletPath()) + this.request.getServletPath().length()) + path;
}
private String visit(Reagent entity)
{
return getUrl("/reagents/" + entity.getWell().getFacilityId());
}
@Override
public String visit(ExperimentalCellInformation entity) {
return null; // TODO
}
@Override
public String visit(Cell entity) {
return getUrl("/cells/" + entity.getFacilityId());
}
}