private ims.generalmedical.vo.AdmisSummary getAdmissionSummary(
      CareContextShortVo careContext, ClinicalContactShortVo clinicalContact) {
    // Get the Medical Contact, everything else can be retrieved from there.
    DomainFactory factory = getDomainFactory();

    AdmisSummary summaryVo = new AdmisSummary();

    InjuryDetailsVoCollection voCollInjuryDetails = new InjuryDetailsVoCollection();

    String hql = " from InjuryDetails injuryDetails ";
    StringBuffer condStr = new StringBuffer();
    String andStr = " ";

    ArrayList markers = new ArrayList();
    ArrayList values = new ArrayList();

    condStr.append(andStr + " injuryDetails.clinicalContact.contactType = :contactType");
    markers.add("contactType");
    values.add(getDomLookup(ContactType.SPINALMEDICALADMISSION));
    andStr = " and ";

    if (careContext != null) {
      condStr.append(andStr + " injuryDetails.clinicalContact.careContext.id = :id_CareContext");
      markers.add("id_CareContext");
      values.add(careContext.getID_CareContext());
      andStr = " and ";
    } else if (clinicalContact != null) {
      condStr.append(andStr + " injuryDetails.clinicalContact.id = :id_ClinicalContact");
      markers.add("id_ClinicalContact");
      values.add(clinicalContact.getID_ClinicalContact());
      andStr = " and ";
    }

    if (andStr.equals(" and ")) hql += " where ";

    hql += condStr.toString();
    voCollInjuryDetails =
        InjuryDetailsVoAssembler.createInjuryDetailsVoCollectionFromInjuryDetails(
            factory.find(hql, markers, values));

    if (voCollInjuryDetails != null && voCollInjuryDetails.size() > 0) {
      InjuryDetails injury =
          InjuryDetailsVoAssembler.extractInjuryDetails(factory, voCollInjuryDetails.get(0));
      if (injury != null) {
        // 1000 - seconds, 60 - minutes, 60 - hours, 24 - days
        long dayDiff =
            ((((new java.util.Date().getTime()
                                - (injury.getInjuryDate() != null
                                    ? injury.getInjuryDate().getTime()
                                    : 0))
                            / 1000)
                        / 60)
                    / 60)
                / 24;

        if (injury.getInjuryDate() != null)
          summaryVo.setDateOfInjury(new ims.framework.utils.Date(injury.getInjuryDate()));
        summaryVo.setDurationSinceInjury(String.valueOf(dayDiff));

        if (injury.getCauseOfInjury() != null)
          summaryVo.setCauseOfInjury(injury.getCauseOfInjury().getText());
        if (injury.getModeOfInjury() != null)
          summaryVo.setModeOfInjury(injury.getModeOfInjury().getText());
        if (injury.getMechanismOfInjury() != null)
          summaryVo.setMechanismOfInjury(injury.getMechanismOfInjury().getText());
      }
    }

    /*NeuroMotorFindingsVoCollection collNeuroMotorFindings = new NeuroMotorFindingsVoCollection();
    hql = " from NeuExamMotor neuExamMotor";
    condStr = new StringBuffer();
    andStr = " ";

    markers.clear();
    values.clear();

    if(careContext!=null)
    {
    	condStr.append(andStr + " neuExamMotor.careContext.id = :id_CareContext");
    	markers.add("id_CareContext");
    	values.add(careContext.getID_CareContext());
    	andStr = " and ";
    }
    else if(clinicalContact!=null)
    {
    	condStr.append(andStr + " neuExamMotor.clinicalContact.id = :id_ClinicalContact");
    	markers.add("id_ClinicalContact");
    	values.add(clinicalContact.getID_ClinicalContact());
    	andStr = " and ";
    }

    if (andStr.equals(" and "))
    	hql += " where ";

    hql += condStr.toString();
    collNeuroMotorFindings = NeuroMotorFindingsVoAssembler.createNeuroMotorFindingsVoCollectionFromNeuExamMotor(factory.find(hql, markers, values));

    if(collNeuroMotorFindings.size()>0)
    {
    	NeuExamMotor motor = NeuroMotorFindingsVoAssembler.extractNeuExamMotor(factory, collNeuroMotorFindings.get(0));
    	if (motor != null)
    	{
    		if (motor.getLeftMotorLevel() != null)
    			summaryVo.setMotorLeft(motor.getLeftMotorLevel().getName());
    		if (motor.getRightMotorLevel() != null)
    			summaryVo.setMotorRight(motor.getRightMotorLevel().getName());

    		summaryVo.setAsiaScore(getAverrallAsiaScore(motor));
    	}
    }
    */
    NeuroSenastionFindingsVoCollection collNeuroSensationFindings =
        new NeuroSenastionFindingsVoCollection();
    hql = " from NeuExamSens neuExamSens";
    condStr = new StringBuffer();
    andStr = " ";

    markers.clear();
    values.clear();

    condStr.append(andStr + " neuExamSens.clinicalContact.contactType = :contactType");
    markers.add("contactType");
    values.add(getDomLookup(ContactType.SPINALMEDICALADMISSION));
    andStr = " and ";

    if (careContext != null) {
      condStr.append(andStr + " neuExamSens.careContext.id = :id_CareContext");
      markers.add("id_CareContext");
      values.add(careContext.getID_CareContext());
      andStr = " and ";
    } else if (clinicalContact != null) {
      condStr.append(andStr + " neuExamSens.clinicalContact.id = :id_ClinicalContact");
      markers.add("id_ClinicalContact");
      values.add(clinicalContact.getID_ClinicalContact());
      andStr = " and ";
    }

    if (andStr.equals(" and ")) hql += " where ";

    hql += condStr.toString();
    collNeuroSensationFindings =
        NeuroSenastionFindingsVoAssembler.createNeuroSenastionFindingsVoCollectionFromNeuExamSens(
            factory.find(hql, markers, values));

    if (collNeuroSensationFindings.size() > 0) {
      NeuExamSens sensation =
          NeuroSenastionFindingsVoAssembler.extractNeuExamSens(
              factory, collNeuroSensationFindings.get(0));
      if (sensation != null) {
        if (sensation.getFrankleGrade() != null)
          summaryVo.setFrankleGrade(sensation.getFrankleGrade().getText());
        if (sensation.getLeftSensoryLevel() != null)
          summaryVo.setSensoryLeft(sensation.getLeftSensoryLevel().getName());
        if (sensation.getRightSensoryLevel() != null)
          summaryVo.setSensoryRight(sensation.getRightSensoryLevel().getName());
      }
    }

    MSKSpinePathologyFindingVoCollection collMSKSpinePathologyFinding =
        new MSKSpinePathologyFindingVoCollection();

    hql = " from MskSpinePath mskSpinePath ";
    condStr = new StringBuffer();
    andStr = " ";

    markers.clear();
    values.clear();

    condStr.append(andStr + " mskSpinePath.clinicalContact.contactType = :contactType");
    markers.add("contactType");
    values.add(getDomLookup(ContactType.SPINALMEDICALADMISSION));
    andStr = " and ";

    if (careContext != null) {
      condStr.append(andStr + " mskSpinePath.careContext.id = :id_CareContext");
      markers.add("id_CareContext");
      values.add(careContext.getID_CareContext());
      andStr = " and ";
    } else if (clinicalContact != null) {
      condStr.append(andStr + " mskSpinePath.clinicalContact.id = :id_ClinicalContact");
      markers.add("id_ClinicalContact");
      values.add(clinicalContact.getID_ClinicalContact());
      andStr = " and ";
    }

    condStr.append(andStr + " mskSpinePath.isPrimaryPathology = :isprimary");
    markers.add("isprimary");
    values.add(Boolean.TRUE);
    andStr = " and ";

    if (andStr.equals(" and ")) hql += " where ";

    hql += condStr.toString();

    collMSKSpinePathologyFinding =
        MSKSpinePathologyFindingVoAssembler
            .createMSKSpinePathologyFindingVoCollectionFromMskSpinePath(
                factory.find(hql, markers, values));

    // java.util.List pathLst = factory.find(domContact.getMskPath(), " where
    // this.isPrimaryPathology = :primary", new String[]{"primary"}, new Object[]{Boolean.TRUE});
    // Should only be one returned
    if (collMSKSpinePathologyFinding != null && collMSKSpinePathologyFinding.size() > 0) {
      MskSpinePath path =
          MSKSpinePathologyFindingVoAssembler.extractMskSpinePath(
              factory, collMSKSpinePathologyFinding.get(0));
      if (path.getPathSite() != null)
        summaryVo.setLevelOfInjury(path.getPathSite().getDescription());
      if (path.getTypeOfInjury() != null)
        summaryVo.setTypeOfInjury(path.getTypeOfInjury().getText());
    }

    NeuroInterpretVoCollection collNeuroInterpretVo = new NeuroInterpretVoCollection();
    hql = " from NeuInterpret neuInterpret";
    condStr = new StringBuffer();
    andStr = " ";

    markers.clear();
    values.clear();

    condStr.append(andStr + " neuInterpret.clinicalContact.contactType = :contactType");
    markers.add("contactType");
    values.add(getDomLookup(ContactType.SPINALMEDICALADMISSION));
    andStr = " and ";

    if (careContext != null) {
      condStr.append(andStr + " neuInterpret.careContext.id = :id_CareContext");
      markers.add("id_CareContext");
      values.add(careContext.getID_CareContext());
      andStr = " and ";
    } else if (clinicalContact != null) {
      condStr.append(andStr + " neuInterpret.clinicalContact.id = :id_ClinicalContact");
      markers.add("id_ClinicalContact");
      values.add(clinicalContact.getID_ClinicalContact());
      andStr = " and ";
    }

    if (andStr.equals(" and ")) hql += " where ";

    hql += condStr.toString();
    collNeuroInterpretVo =
        NeuroInterpretVoAssembler.createNeuroInterpretVoCollectionFromNeuInterpret(
            factory.find(hql, markers, values));

    if (collNeuroInterpretVo != null && collNeuroInterpretVo.size() > 0) {
      NeuInterpret interpret =
          NeuroInterpretVoAssembler.extractNeuInterpret(factory, collNeuroInterpretVo.get(0));
      if (interpret != null) {
        if (interpret.getSpinalSyndrome() != null)
          summaryVo.setSpineSyndrome(interpret.getSpinalSyndrome().getText());
        if (interpret.getAsiaGrade() != null)
          summaryVo.setAsiaGrade(interpret.getAsiaGrade().getText());
        if (interpret.getOverallNeuroLevel() != null)
          summaryVo.setOverallNeuro(interpret.getOverallNeuroLevel().getName());
        if (interpret.getCompleteIncomplete() != null)
          summaryVo.setCompleteIncomplete(interpret.getCompleteIncomplete().getText());
      }
    }

    // Get the First Admission date for this patient.
    EpisodeofCareVo voEpisodeOfCare = null;
    CareContextVoCollection collCareContextVo = null;
    markers.clear();
    values.clear();

    if (careContext != null)
      voEpisodeOfCare =
          EpisodeofCareVoAssembler.create(
              (EpisodeOfCare)
                  factory.getDomainObject(
                      EpisodeOfCare.class, careContext.getEpisodeOfCare().getID_EpisodeOfCare()));
    else if (clinicalContact != null) {
      CareContextVo voCareContext =
          CareContextVoAssembler.create(
              (CareContext)
                  factory.getDomainObject(
                      CareContext.class, clinicalContact.getCareContext().getID_CareContext()));
      voEpisodeOfCare =
          EpisodeofCareVoAssembler.create(
              (EpisodeOfCare)
                  factory.getDomainObject(
                      EpisodeOfCare.class, voCareContext.getEpisodeOfCare().getID_EpisodeOfCare()));
    }

    collCareContextVo = voEpisodeOfCare.getCareContexts().sort();

    if ((collCareContextVo != null) && (collCareContextVo.size() > 0))
      for (int i = 0; i < collCareContextVo.size(); i++) {
        if (collCareContextVo.get(i).getContext().equals(ContextType.INPATIENT))
          summaryVo.setFirstAdmissionDate(collCareContextVo.get(i).getStartDateTime().getDate());
      }

    // MRSA record.
    MRSASitesResultsVoCollection collMRSAVo = new MRSASitesResultsVoCollection();
    hql = "select siteres from MRSAAssessment t join t.sitesAndResults as siteres ";
    condStr = new StringBuffer();
    andStr = " ";

    markers.clear();
    values.clear();

    condStr.append(andStr + " t.clinicalContact.contactType = :contactType");
    markers.add("contactType");
    values.add(getDomLookup(ContactType.SPINALMEDICALADMISSION));
    andStr = " and ";

    if (careContext != null) {
      condStr.append(andStr + " t.careContext.id like :cc");
      markers.add("cc");
      values.add(careContext.getID_CareContext());
      andStr = " and ";
    } else if (clinicalContact != null) {
      condStr.append(andStr + " t.clinicalContact.id like :cc");
      markers.add("cc");
      values.add(clinicalContact.getID_ClinicalContact());
      andStr = " and ";
    }

    condStr.append(andStr + " siteres.result = :res");
    markers.add("res");
    values.add(getDomLookup(MRSAResult.POSITIVE));
    andStr = " and ";

    hql += " where " + condStr.toString();

    collMRSAVo =
        MRSASitesResultsVoAssembler.createMRSASitesResultsVoCollectionFromMRSASitesResults(
            factory.find(hql, markers, values));

    if (collMRSAVo != null && collMRSAVo.size() > 0) summaryVo.setMRSAStatus(Boolean.TRUE);
    else summaryVo.setMRSAStatus(Boolean.FALSE);

    return summaryVo;
  }