private void isRecordEditable() {
    boolean isEditable = false;
    ClinicalContactShortVo voSelectedClinicalContact =
        form.getGlobalContext().Core.getCurrentClinicalContact();

    if (voSelectedClinicalContact != null) {
      if (form.recbrMassage().getValue() instanceof ClinicalContactShortVo) {
        ClinicalContactShortVo voContact = (ClinicalContactShortVo) form.recbrMassage().getValue();
        if (voContact
            .getID_ClinicalContact()
            .equals(voSelectedClinicalContact.getID_ClinicalContact())) isEditable = true;
      }
    }

    form.btnNew().setVisible(isEditable);
    form.btnUpdate().setVisible(isEditable);

    if (isEditable) {
      if (form.getLocalContext().getCurrentMassageVoIsNotNull()) {
        form.btnNew().setVisible(false);
        form.btnUpdate().setEnabled(true);
      } else {
        form.btnNew().setEnabled(true);
        form.btnUpdate().setVisible(false);
      }
    }
  }
 private void loadCurrentClinicalContact(ClinicalContactShortVo voCurrentClinicalContact) {
   form.recbrMassage()
       .newRow(
           voCurrentClinicalContact,
           "\t\t\t\tClinical Contact: "
               + voCurrentClinicalContact.getStartDateTime().toString()
               + " - "
               + voCurrentClinicalContact.getSeenBy().toString(),
           Color.Green);
   form.recbrMassage().setValue(voCurrentClinicalContact);
 }
  private void isRecordCurrent() {
    ClinicalContactShortVo voCurrent = null;
    if (form.getGlobalContext().Core.getCurrentClinicalContactIsNotNull())
      voCurrent = form.getGlobalContext().Core.getCurrentClinicalContact();

    for (int i = 0; i < form.gridGait().getRows().size(); i++) {
      GaitReEducationVo voGait = form.gridGait().getRows().get(i).getValue();
      if (voCurrent != null && voGait.getClinicalContact() != null) {
        if (voGait
            .getClinicalContact()
            .getID_ClinicalContact()
            .equals(voCurrent.getID_ClinicalContact())) {
          form.getLocalContext().setUpdateCurrentRecord(new Boolean(true));
          // set colour of current record + set it expanded
          GenForm.gridGaitRow currentRow = form.gridGait().getRows().get(i);
          currentRow.setBackColor(Color.Beige);
          currentRow.setExpanded(true);
          form.gridGait().setValue(voGait);
        }
      }
      populateControls(voGait);
    }
  }
  /** get gait */
  public ims.therapies.vo.GaitVo getGait(ims.core.vo.ClinicalContactShortVo voClinicalContact) {
    if (voClinicalContact == null)
      throw new RuntimeException("Cannot get GaitVo for null ClinicalContactShortVo");

    StringBuffer hql =
        new StringBuffer(
            "from Gait as g1_1 where g1_1.clinicalContact.id = :CCID and g1_1.isRIE is null");

    List list =
        getDomainFactory().find(hql.toString(), "CCID", voClinicalContact.getID_ClinicalContact());

    if (list == null || list.size() == 0) return null;
    else if (list.size() > 1)
      throw new RuntimeException(
          "More than one Gait Treatment found for the current Clinical Contact");

    GaitVoCollection voColl = GaitVoAssembler.createGaitVoCollectionFromGait(list);
    if (voColl.size() > 0) return voColl.get(0);

    return null;
  }
  private void fillRecordBrowser() {
    MassageShortVoCollection voMassageShortVoColl =
        domain.listMassageByCareContext(form.getGlobalContext().Core.getCurrentCareContext());

    loadCurrentCareContext();
    boolean currentClinicalContactFound = false;
    if (voMassageShortVoColl != null) {
      if (engine.isRIEMode()) {
        for (int i = 0; i < voMassageShortVoColl.size(); i++) {
          MassageShortVo voMassageShort = voMassageShortVoColl.get(i);
          if (form.getGlobalContext().Core.getCurrentClinicalContactIsNotNull()
              && form.getGlobalContext()
                  .Core
                  .getCurrentClinicalContact()
                  .getID_ClinicalContact()
                  .equals(voMassageShort.getClinicalContact().getID_ClinicalContact()))
            form.recbrMassage()
                .newRow(
                    voMassageShort,
                    "\t\t\t\tClinical Contact: "
                        + voMassageShort.getClinicalContact().getStartDateTime().toString()
                        + " - "
                        + voMassageShort.getClinicalContact().getSeenBy().toString(),
                    Color.Green);
          else
            form.recbrMassage()
                .newRow(
                    voMassageShort,
                    "\t\t\t\tClinical Contact: "
                        + voMassageShort.getClinicalContact().getStartDateTime().toString()
                        + " - "
                        + voMassageShort.getClinicalContact().getSeenBy().toString());
        }
        if (voMassageShortVoColl.size() > 0)
          form.recbrMassage().setValue(voMassageShortVoColl.get(voMassageShortVoColl.size() - 1));
      } else {
        for (int i = 0; i < voMassageShortVoColl.size(); i++) {
          ClinicalContactShortVo voClinicalContact =
              voMassageShortVoColl.get(i).getClinicalContact();
          if (form.getGlobalContext().Core.getCurrentClinicalContactIsNotNull()
              && form.getGlobalContext()
                  .Core
                  .getCurrentClinicalContact()
                  .getID_ClinicalContact()
                  .equals(voClinicalContact.getID_ClinicalContact())) {
            currentClinicalContactFound = true;
            loadCurrentClinicalContact(voClinicalContact);
          } else
            form.recbrMassage()
                .newRow(
                    voClinicalContact,
                    "\t\t\t\tClinical Contact: "
                        + voClinicalContact.getStartDateTime().toString()
                        + " - "
                        + voClinicalContact.getSeenBy().toString());
        }
      }
    }

    if (!currentClinicalContactFound
        && form.getGlobalContext().Core.getCurrentClinicalContactIsNotNull()
        && !engine.isRIEMode())
      loadCurrentClinicalContact(form.getGlobalContext().Core.getCurrentClinicalContact());

    browseRecored();
  }
  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;
  }