/** @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */
 public int compare(FormField formField, FormField other) {
   int temp =
       OpenmrsUtil.compareWithNullAsGreatest(formField.getPageNumber(), other.getPageNumber());
   if (temp == 0) {
     temp =
         OpenmrsUtil.compareWithNullAsGreatest(
             formField.getFieldNumber(), other.getFieldNumber());
   }
   if (temp == 0) {
     temp =
         OpenmrsUtil.compareWithNullAsGreatest(formField.getFieldPart(), other.getFieldPart());
   }
   if (temp == 0
       && formField.getPageNumber() == null
       && formField.getFieldNumber() == null
       && formField.getFieldPart() == null) {
     temp =
         OpenmrsUtil.compareWithNullAsGreatest(formField.getSortWeight(), other.getSortWeight());
   }
   if (temp == 0) {
     // to prevent ties
     temp =
         OpenmrsUtil.compareWithNullAsGreatest(
             formField.getFormFieldId(), other.getFormFieldId());
   }
   return temp;
 }
  public Visit mergeVisits(Visit preferred, Visit nonPreferred) {
    // extend date range of winning
    if (OpenmrsUtil.compareWithNullAsEarliest(
            nonPreferred.getStartDatetime(), preferred.getStartDatetime())
        < 0) {
      preferred.setStartDatetime(nonPreferred.getStartDatetime());
    }
    if (preferred.getStopDatetime() != null
        && OpenmrsUtil.compareWithNullAsLatest(
                preferred.getStopDatetime(), nonPreferred.getStopDatetime())
            < 0) {
      preferred.setStopDatetime(nonPreferred.getStopDatetime());
    }

    // move encounters from losing into winning
    if (nonPreferred.getEncounters() != null) {
      for (Encounter e : nonPreferred.getEncounters()) {
        e.setPatient(preferred.getPatient());
        preferred.addEncounter(e);
        encounterService.saveEncounter(e);
      }
    }
    nonPreferred.setEncounters(
        null); // we need to manually the encounters from the non-preferred visit before voiding or
               // all the encounters we just moved will also get voided!

    visitService.voidVisit(
        nonPreferred, "EMR - Merge Patients: merged into visit " + preferred.getVisitId());
    visitService.saveVisit(preferred);
    return preferred;
  }
  /**
   * Add the <code>inputStream</code> as a file in the modules repository
   *
   * @param inputStream <code>InputStream</code> to load
   * @return filename String of the file's name of the stream
   */
  public static File insertModuleFile(InputStream inputStream, String filename) {
    File folder = getModuleRepository();

    // check if module filename is already loaded
    if (OpenmrsUtil.folderContains(folder, filename))
      throw new ModuleException(filename + " is already associated with a loaded module.");

    File file = new File(folder.getAbsolutePath(), filename);

    FileOutputStream outputStream = null;
    try {
      outputStream = new FileOutputStream(file);
      OpenmrsUtil.copyFile(inputStream, outputStream);
    } catch (FileNotFoundException e) {
      throw new ModuleException("Can't create module file for " + filename, e);
    } catch (IOException e) {
      throw new ModuleException("Can't create module file for " + filename, e);
    } finally {
      try {
        inputStream.close();
      } catch (Exception e) {
        /* pass */
      }
      try {
        outputStream.close();
      } catch (Exception e) {
        /* pass */
      }
    }

    return file;
  }
 /**
  * @param visit
  * @param location
  * @param when
  * @return true if when falls in the visits timespan AND location is within visit.location
  */
 @Override
 public boolean isSuitableVisit(Visit visit, Location location, Date when) {
   if (OpenmrsUtil.compare(when, visit.getStartDatetime()) < 0) {
     return false;
   }
   if (OpenmrsUtil.compareWithNullAsLatest(when, visit.getStopDatetime()) > 0) {
     return false;
   }
   return isSameOrAncestor(visit.getLocation(), location);
 }
 @Override
 public boolean equals(Object o) {
   if (o == null || !(o instanceof Diagnosis)) {
     return false;
   }
   Diagnosis other = (Diagnosis) o;
   return OpenmrsUtil.nullSafeEquals(diagnosis, other.getDiagnosis())
       && OpenmrsUtil.nullSafeEquals(order, other.getOrder())
       && OpenmrsUtil.nullSafeEquals(certainty, other.getCertainty());
 }
  public QueueItem saveQueueItem(QueueItem queueItem) {
    log.debug("saveQueueItem(). Entering");
    boolean isNew = false;
    Date newDate = queueItem.getEncounter().getEncounterDatetime();
    log.debug("Encounter date: " + newDate);
    Date originalDate = null;

    if (queueItem.getQueueItemId() == null) {
      isNew = true;
      log.debug("Got a  new queue item");
    }

    // Not new we update some of the Encounter info
    if (!isNew) {
      log.info("Updating previously queued encounter!");
      Encounter encounter = queueItem.getEncounter();
      Patient p = encounter.getPatient();
      originalDate = encounter.getEncounterDatetime();
      if (OpenmrsUtil.compare(originalDate, newDate) != 0) {

        // if the obs datetime is the same as the
        // original encounter datetime, fix it
        if (OpenmrsUtil.compare(queueItem.getDateCreated(), originalDate) == 0) {
          encounter.setEncounterDatetime(newDate);
        }
      }

      // if the Person in the encounter doesn't match the Patient in the ,
      // fix it
      if (!encounter.getPatient().getPersonId().equals(p.getPatientId())) {
        encounter.setPatient(p);
      }

      for (Obs obs : encounter.getAllObs(true)) {
        // if the date was changed
        if (OpenmrsUtil.compare(originalDate, newDate) != 0) {

          // if the obs datetime is the same as the
          // original encounter datetime, fix it
          if (OpenmrsUtil.compare(obs.getObsDatetime(), originalDate) == 0) {
            obs.setObsDatetime(newDate);
          }
        }

        // if the Person in the obs doesn't match the Patient in the
        // encounter, fix it
        if (!obs.getPerson().getPersonId().equals(p.getPatientId())) {
          obs.setPerson(p);
        }
      }
    }
    log.debug("Saving queu item.");
    dao.saveQueueItem(queueItem);
    return queueItem;
  }
  @RequestMapping(value = SETTINGS_PATH, method = RequestMethod.POST)
  public void updateSettings(
      @ModelAttribute(SETTINGS_FORM) SettingsForm settingsForm,
      Errors errors,
      HttpServletRequest request,
      HttpSession session) {

    List<GlobalProperty> toSave = new ArrayList<GlobalProperty>();
    try {
      for (int i = 0; i < settingsForm.getSettings().size(); ++i) {
        SettingsProperty property = settingsForm.getSettings().get(i);
        if (StringUtils.isNotEmpty(property.getGlobalProperty().getDatatypeClassname())) {
          // we need to handle the submitted value with the appropriate widget
          CustomDatatype dt = CustomDatatypeUtil.getDatatypeOrDefault(property.getGlobalProperty());
          CustomDatatypeHandler handler =
              CustomDatatypeUtil.getHandler(property.getGlobalProperty());
          if (handler != null) {
            try {
              Object value =
                  WebAttributeUtil.getValue(
                      request, dt, handler, "settings[" + i + "].globalProperty.propertyValue");
              property.getGlobalProperty().setValue(value);
            } catch (Exception ex) {
              String originalValue = request.getParameter("originalValue[" + i + "]");
              property.getGlobalProperty().setPropertyValue(originalValue);
              errors.rejectValue(
                  "settings[" + i + "].globalProperty.propertyValue", "general.invalid");
            }
          }
        }
        toSave.add(property.getGlobalProperty());
      }
    } catch (Exception e) {
      log.error("Error saving global property", e);
      errors.reject("GlobalProperty.not.saved");
      session.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, e.getMessage());
    }

    if (errors.hasErrors()) {
      session.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, "GlobalProperty.not.saved");

    } else {
      for (GlobalProperty gp : toSave) {
        getService().saveGlobalProperty(gp);
      }
      session.setAttribute(WebConstants.OPENMRS_MSG_ATTR, "GlobalProperty.saved");

      // TODO: move this to a GlobalPropertyListener
      // refresh log level from global property(ies)
      OpenmrsUtil.applyLogLevels();

      OpenmrsUtil.setupLogAppenders();
    }
  }
  /**
   * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
   *     javax.servlet.http.HttpServletResponse)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    String obsId = request.getParameter("obsId");
    String view = request.getParameter("view");
    String viewType = request.getParameter("viewType");

    HttpSession session = request.getSession();

    if (obsId == null || obsId.length() == 0) {
      session.setAttribute(WebConstants.OPENMRS_ERROR_ATTR, "error.null");
      return;
    }
    if (!Context.hasPrivilege(OpenmrsConstants.PRIV_VIEW_OBS)) {
      session.setAttribute(
          WebConstants.OPENMRS_ERROR_ATTR, "Privilege required: " + OpenmrsConstants.PRIV_VIEW_OBS);
      session.setAttribute(
          WebConstants.OPENMRS_LOGIN_REDIRECT_HTTPSESSION_ATTR,
          request.getRequestURI() + "?" + request.getQueryString());
      response.sendRedirect(request.getContextPath() + "/login.htm");
      return;
    }

    Obs complexObs = Context.getObsService().getComplexObs(Integer.valueOf(obsId), view);
    ComplexData cd = complexObs.getComplexData();
    Object data = cd.getData();

    if ("download".equals(viewType)) {
      response.setHeader("Content-Disposition", "attachment; filename=" + cd.getTitle());
      response.setHeader("Pragma", "no-cache");
    }

    if (data instanceof byte[]) {
      ByteArrayInputStream stream = new ByteArrayInputStream((byte[]) data);
      OpenmrsUtil.copyFile(stream, response.getOutputStream());
    } else if (RenderedImage.class.isAssignableFrom(data.getClass())) {
      RenderedImage img = (RenderedImage) data;
      String[] parts = cd.getTitle().split(".");
      String extension = "jpg"; // default extension
      if (parts.length > 0) {
        extension = parts[parts.length - 1];
      }

      ImageIO.write(img, extension, response.getOutputStream());
    } else if (InputStream.class.isAssignableFrom(data.getClass())) {
      InputStream stream = (InputStream) data;
      OpenmrsUtil.copyFile(stream, response.getOutputStream());
      stream.close();
    } else {
      throw new ServletException(
          "Couldn't serialize complex obs data for obsId=" + obsId + " of type " + data.getClass());
    }
  }
 private static boolean regimenComponentIsTheSameAsDrugOrderExcludingDates(
     DrugOrder rc, DrugOrder doTmp) {
   if (rc.getDrug() != null
       && doTmp.getDrug() != null
       && rc.getDrug().getDrugId().intValue() != doTmp.getDrug().getDrugId().intValue())
     return false;
   if (!OpenmrsUtil.nullSafeEquals(rc.getConcept(), doTmp.getConcept())) return false;
   if (!OpenmrsUtil.nullSafeEquals(rc.getDose(), doTmp.getDose())) return false;
   if (!OpenmrsUtil.nullSafeEquals(rc.getFrequency(), doTmp.getFrequency())) return false;
   if (!OpenmrsUtil.nullSafeEquals(rc.getUnits(), doTmp.getUnits())) return false;
   return true;
 }
 /**
  * @see
  *     org.openmrs.messagesource.MutableMessageSource#addPresentation(org.openmrs.messagesource.PresentationMessage)
  */
 public void addPresentation(PresentationMessage message) {
   File propertyFile = findPropertiesFileFor(message.getCode());
   if (propertyFile != null) {
     Properties props = new Properties();
     try {
       OpenmrsUtil.loadProperties(props, propertyFile);
       props.setProperty(message.getCode(), message.getMessage());
       OpenmrsUtil.storeProperties(props, propertyFile, "OpenMRS Application Messages");
     } catch (Exception e) {
       log.error("Error generated", e);
     }
   }
 }
 /**
  * @see
  *     org.openmrs.messagesource.MutableMessageSource#removePresentation(org.openmrs.messagesource.PresentationMessage)
  */
 public void removePresentation(PresentationMessage message) {
   File propertyFile = findPropertiesFileFor(message.getCode());
   if (propertyFile != null) {
     Properties props = new Properties();
     try {
       OpenmrsUtil.loadProperties(props, propertyFile);
       props.remove(message.getCode());
       OpenmrsUtil.storeProperties(props, propertyFile, PROPERTIES_FILE_COMMENT);
     } catch (Exception e) {
       log.error("Error generated", e);
     }
   }
 }
 @Override
 public boolean visitsOverlap(Visit v1, Visit v2) {
   Location where1 = v1.getLocation();
   Location where2 = v2.getLocation();
   if ((where1 == null && where2 == null)
       || isSameOrAncestor(where1, where2)
       || isSameOrAncestor(where2, where1)) {
     // "same" location, so check if date ranges overlap (assuming startDatetime is never null)
     return (OpenmrsUtil.compareWithNullAsLatest(v1.getStartDatetime(), v2.getStopDatetime()) <= 0)
         && (OpenmrsUtil.compareWithNullAsLatest(v2.getStartDatetime(), v1.getStopDatetime())
             <= 0);
   }
   return false;
 }
Beispiel #13
0
  /**
   * Mimics org.openmrs.web.Listener.getRuntimeProperties()
   *
   * @param webappName name to use when looking up the runtime properties env var or filename
   * @return Properties runtime
   */
  public static Properties getRuntimeProperties(String webappName) {

    Properties props = new Properties();

    try {
      FileInputStream propertyStream = null;

      // Look for environment variable
      // {WEBAPP.NAME}_RUNTIME_PROPERTIES_FILE
      String env = webappName.toUpperCase() + "_RUNTIME_PROPERTIES_FILE";

      String filepath = System.getenv(env);

      if (filepath != null) {
        try {
          propertyStream = new FileInputStream(filepath);
        } catch (IOException e) {
        }
      }

      // env is the name of the file to look for in the directories
      String filename = webappName + "-runtime.properties";

      if (propertyStream == null) {
        filepath = OpenmrsUtil.getApplicationDataDirectory() + filename;
        try {
          propertyStream = new FileInputStream(filepath);
        } catch (IOException e) {
        }
      }

      // look in current directory last
      if (propertyStream == null) {
        filepath = filename;
        try {
          propertyStream = new FileInputStream(filepath);
        } catch (IOException e) {
        }
      }

      if (propertyStream == null)
        throw new IOException("Could not open '" + filename + "' in user or local directory.");
      OpenmrsUtil.loadProperties(props, propertyStream);
      propertyStream.close();

    } catch (IOException e) {
    }

    return props;
  }
  /**
   * This method will be used for remote registration. Registered patient information will be placed
   * into an xml file for the FormEntry processor.
   *
   * @param paramPatient
   * @param paramString1
   * @param paramString2
   * @throws APIException
   */
  public void registerPatient(Patient paramPatient, String paramString1, String paramString2)
      throws APIException {
    File localFile1 = OpenmrsUtil.getDirectoryInApplicationDataDirectory("amrsregistration");
    File localFile2 = new File(localFile1, "registrationTemplate.xml");
    try {
      String str1 = OpenmrsUtil.getFileAsString(localFile2);

      Properties localProperties = new Properties();
      localProperties.setProperty("resource.loader", "class");
      localProperties.setProperty(
          "class.resource.loader.description", "VelocityClasspathResourceLoader");
      localProperties.setProperty(
          "class.resource.loader.class",
          "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
      localProperties.setProperty(
          "runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogSystem");

      Velocity.init(localProperties);
      VelocityContext localVelocityContext = new VelocityContext();
      localVelocityContext.put("locale", Context.getLocale());
      localVelocityContext.put(
          "patient", Context.getPatientService().getPatient(paramPatient.getPatientId()));
      localVelocityContext.put("user", Context.getAuthenticatedUser());
      localVelocityContext.put("fn", new DataExportFunctions());
      localVelocityContext.put("dateEntered", new Date());
      localVelocityContext.put("sid", paramString1);
      localVelocityContext.put("uid", paramString2);
      StringWriter localStringWriter = new StringWriter();
      Velocity.evaluate(localVelocityContext, localStringWriter, super.getClass().getName(), str1);

      String str2 =
          Context.getAdministrationService().getGlobalProperty("remoteformentry.pending_queue_dir");
      File localFile3 = OpenmrsUtil.getDirectoryInApplicationDataDirectory(str2);
      Date localDate = new Date();
      String str3 = "amrsregistration_" + localDate.toString();
      File localFile4 = new File(localFile3, str3);
      try {
        FileWriter localFileWriter = new FileWriter(localFile4);
        localFileWriter.write(localStringWriter.toString());
        localFileWriter.flush();
        localFileWriter.close();
      } catch (IOException localIOException) {
        log.error("Unable to write amrsregistration output file.", localIOException);
      }
    } catch (Exception localException) {
      log.error("Unable to create amrsregistration output file", localException);
      throw new APIException(localException);
    }
  }
  /**
   * Checks that a given concept map type object is valid.
   *
   * @see org.springframework.validation.Validator#validate(java.lang.Object,
   *     org.springframework.validation.Errors)
   * @should fail if the concept map type object is null
   * @should fail if the name is null
   * @should fail if the name is an empty string
   * @should fail if the name is a white space character
   * @should fail if the concept map type name is a duplicate
   * @should pass if the name is unique amongst all concept map type names
   * @should pass validation if field lengths are correct
   * @should fail validation if field lengths are not correct
   */
  public void validate(Object obj, Errors errors) {

    if (obj == null || !(obj instanceof ConceptMapType)) {
      throw new IllegalArgumentException(
          "The parameter obj should not be null and must be of type" + ConceptMapType.class);
    }

    ConceptMapType conceptMapType = (ConceptMapType) obj;
    String name = conceptMapType.getName();
    if (!StringUtils.hasText(name)) {
      errors.rejectValue(
          "name",
          "ConceptMapType.error.nameRequired",
          "The name property is required for a concept map type");
      return;
    }

    name = name.trim();
    ConceptMapType duplicate = Context.getConceptService().getConceptMapTypeByName(name);
    if (duplicate != null
        && !OpenmrsUtil.nullSafeEquals(duplicate.getUuid(), conceptMapType.getUuid())) {
      errors.rejectValue(
          "name", "ConceptMapType.duplicate.name", "Duplicate concept map type name: " + name);
    }
    ValidateUtil.validateFieldLengths(
        errors, obj.getClass(), "name", "description", "retireReason");
  }
  public void addAttribute(HrStaffAttribute newAttribute) {
    newAttribute.setHrStaff(this);
    boolean newIsNull = !StringUtils.hasText(newAttribute.getValue());

    for (HrStaffAttribute currentAttribute : getActiveAttributes()) {
      if (currentAttribute.equals(newAttribute))
        return; // if we have the same HrStaffAttributeId, don't add the new attribute
      else if (currentAttribute
          .getHrStaffAttributeType()
          .equals(newAttribute.getHrStaffAttributeType())) {
        if (currentAttribute.getValue() != null
            && currentAttribute.getValue().equals(newAttribute.getValue()))
          // this staff already has this attribute
          return;

        // if the to-be-added attribute isn't already voided itself
        // and if we have the same type, different value
        if (newAttribute.isVoided() == false || newIsNull) {
          if (currentAttribute.getCreator() != null)
            currentAttribute.voidAttribute("New value: " + newAttribute.getValue());
          else
            // remove the attribute if it was just temporary (didn't have a creator
            // attached to it yet)
            removeAttribute(currentAttribute);
        }
      }
    }
    if (!OpenmrsUtil.collectionContains(hrStaffAttributes, newAttribute) && !newIsNull)
      hrStaffAttributes.add(newAttribute);
  }
  /**
   * Downloads the contents of a URL and copies them to a string (Borrowed from oreilly)
   *
   * @param url
   * @return String contents of the URL
   * @should return an update rdf page for old https dev urls
   * @should return an update rdf page for old https module urls
   * @should return an update rdf page for module urls
   */
  public static String getURL(URL url) {
    InputStream in = null;
    OutputStream out = null;
    String output = "";
    try {
      in = getURLStream(url);
      if (in == null) // skip this module if updateURL is not defined
      return "";

      out = new ByteArrayOutputStream();
      OpenmrsUtil.copyFile(in, out);
      output = out.toString();
    } catch (IOException io) {
      log.warn("io while reading: " + url, io);
    } finally {
      try {
        in.close();
      } catch (Exception e) {
        /* pass */
      }
      try {
        out.close();
      } catch (Exception e) {
        /* pass */
      }
    }

    return output;
  }
  @SuppressWarnings("deprecation")
  public String getTestDatasetFilename(String testDatasetName) throws Exception {

    InputStream propertiesFileStream = null;

    // try to load the file if its a straight up path to the file or
    // if its a classpath path to the file
    if (new File(TEST_DATASETS_PROPERTIES_FILE).exists()) {
      propertiesFileStream = new FileInputStream(TEST_DATASETS_PROPERTIES_FILE);
    } else {
      propertiesFileStream =
          getClass().getClassLoader().getResourceAsStream(TEST_DATASETS_PROPERTIES_FILE);
      if (propertiesFileStream == null)
        throw new FileNotFoundException(
            "Unable to find '" + TEST_DATASETS_PROPERTIES_FILE + "' in the classpath");
    }

    Properties props = new Properties();

    OpenmrsUtil.loadProperties(props, propertiesFileStream);

    if (props.getProperty(testDatasetName) == null) {
      throw new Exception(
          "Test dataset named " + testDatasetName + " not found in properties file");
    }

    return props.getProperty(testDatasetName);
  }
  public PatientDataResult evaluate(RowPerPatientData patientData, EvaluationContext context) {

    DateResult par = new DateResult(patientData, context);
    DateOfFirstDrugOrderStartedRestrictedByConceptSet pd =
        (DateOfFirstDrugOrderStartedRestrictedByConceptSet) patientData;

    par.setFormat(pd.getDateFormat());

    List<DrugOrder> orders = Context.getOrderService().getDrugOrdersByPatient(pd.getPatient());

    if (orders != null) {
      if (pd.getDrugConceptSetConcept() != null) {
        List<Concept> drugConcepts =
            Context.getConceptService().getConceptsByConceptSet(pd.getDrugConceptSetConcept());
        if (drugConcepts != null) {
          DrugOrder startDrugOrder = null;
          for (DrugOrder order : orders) {
            Concept drug = null;
            try {
              drug = order.getDrug().getConcept();
            } catch (Exception e) {
              log.error("Unable to retrieve a drug from the drug order: " + e.getMessage());
            }
            if (drug != null) {
              if (drugConcepts.contains(drug)) {
                if (order.getStartDate() != null
                    && (pd.getStartDate() == null
                        || OpenmrsUtil.compare(order.getStartDate(), pd.getStartDate()) >= 0)
                    && (pd.getEndDate() == null
                        || OpenmrsUtil.compare(order.getStartDate(), pd.getEndDate()) <= 0)) {
                  if (startDrugOrder == null
                      || order.getStartDate().before(startDrugOrder.getStartDate())) {
                    startDrugOrder = order;
                  }
                }
              }
            }
          }
          if (startDrugOrder != null) {
            par.setValue(startDrugOrder.getStartDate());
          }
        }
      }
    }

    return par;
  }
 @PropertyGetter("concept")
 public Object getConcept(PersonAttributeType delegate) {
   if (OpenmrsUtil.nullSafeEquals(delegate.getFormat(), Concept.class.getCanonicalName())) {
     Concept concept = Context.getConceptService().getConcept(delegate.getForeignKey());
     return ConversionUtil.convertToRepresentation(concept, Representation.FULL);
   }
   return null;
 }
 /**
  * Add a period cohort indicator to the report definition with dimension categories.
  *
  * @param CohortIndicator
  */
 public void addIndicator(
     String uniqueName,
     String displayName,
     CohortIndicator indicator,
     String dimensionCategories) {
   addIndicator(
       uniqueName, displayName, indicator, OpenmrsUtil.parseParameterList(dimensionCategories));
 }
 public synchronized void addSearchItem(PatientSearch ps) {
   checkArrayLengths();
   searchHistory.add(ps);
   cachedFilters.add(OpenmrsUtil.toPatientFilter(ps, this));
   // the potentially-expensive query should be done lazily
   cachedResults.add(null);
   cachedResultDates.add(null);
 }
  // public SessionFactory newSessionFactory(Configuration config) throws HibernateException {
  public Configuration newConfiguration() throws HibernateException {
    Configuration config = super.newConfiguration();

    log.debug("Configuring hibernate sessionFactory properties");

    Properties moduleProperties = Context.getConfigProperties();

    // override or initialize config properties with module-provided ones
    for (Object key : moduleProperties.keySet()) {
      String prop = (String) key;
      String value = (String) moduleProperties.get(key);
      log.trace("Setting module property: " + prop + ":" + value);
      config.setProperty(prop, value);
      if (!prop.startsWith("hibernate")) config.setProperty("hibernate." + prop, value);
    }

    Properties properties = Context.getRuntimeProperties();

    // loop over runtime properties and override each in the configuration
    for (Object key : properties.keySet()) {
      String prop = (String) key;
      String value = (String) properties.get(key);
      log.trace("Setting property: " + prop + ":" + value);
      config.setProperty(prop, value);
      if (!prop.startsWith("hibernate")) config.setProperty("hibernate." + prop, value);
    }

    // load in the default hibernate properties
    try {
      InputStream propertyStream =
          ConfigHelper.getResourceAsStream("/hibernate.default.properties");
      Properties props = new Properties();
      OpenmrsUtil.loadProperties(props, propertyStream);
      propertyStream.close();

      // Only load in the default properties if they don't exist
      config.mergeProperties(props);
    } catch (IOException e) {
      log.fatal("Unable to load default hibernate properties", e);
    }

    log.debug(
        "Setting global Hibernate Session Interceptor for SessionFactory, Interceptor: "
            + chainingInterceptor);

    // make sure all autowired interceptors are put onto our chaining interceptor
    // sort on the keys so that the devs/modules have some sort of control over the order of the
    // interceptors
    List<String> keys = new ArrayList<String>(interceptors.keySet());
    Collections.sort(keys);
    for (String key : keys) {
      chainingInterceptor.addInterceptor(interceptors.get(key));
    }

    config.setInterceptor(chainingInterceptor);

    return config;
  }
    public boolean matches(Obs obs) {

      if (!obs.getConcept().getConceptId().equals(conceptId)) {
        return false;
      }

      return OpenmrsUtil.nullSafeEquals(
          TestUtil.valueAsStringHelper(value), obs.getValueAsString(Context.getLocale()));
    }
Beispiel #25
0
  /** @see java.lang.Comparable#compareTo(java.lang.Object) */
  public int compareTo(PersonAddress other) {
    int retValue = 0;
    if (other != null) {
      retValue = isVoided().compareTo(other.isVoided());
      if (retValue == 0) retValue = other.isPreferred().compareTo(isPreferred());
      if (retValue == 0 && getDateCreated() != null)
        retValue = OpenmrsUtil.compareWithNullAsLatest(getDateCreated(), other.getDateCreated());
      if (retValue == 0)
        retValue =
            OpenmrsUtil.compareWithNullAsGreatest(getPersonAddressId(), other.getPersonAddressId());

      // if we've gotten this far, just check all address values. If they are
      // equal, leave the objects at 0. If not, arbitrarily pick retValue=1
      // and return that (they are not equal).
      if (retValue == 0 && !equalsContent(other)) retValue = 1;
    }
    return retValue;
  }
  /**
   * The web.xml file sets this {@link StartupFilter} to be the first filter for all requests.
   *
   * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse,
   *     javax.servlet.FilterChain)
   */
  public final void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    if (skipFilter((HttpServletRequest) request)) {
      chain.doFilter(request, response);
    } else {

      HttpServletRequest httpRequest = (HttpServletRequest) request;
      HttpServletResponse httpResponse = (HttpServletResponse) response;

      String servletPath = httpRequest.getServletPath();
      // for all /images and /initfilter/scripts files, write the path
      // (the "/initfilter" part is needed so that the openmrs_static_context-servlet.xml file
      // doesn't
      //  get instantiated early, before the locale messages are all set up)
      if (servletPath.startsWith("/images") || servletPath.startsWith("/initfilter/scripts")) {
        servletPath =
            servletPath.replaceFirst(
                "/initfilter", "/WEB-INF/view"); // strip out the /initfilter part
        // writes the actual image file path to the response
        File file = new File(filterConfig.getServletContext().getRealPath(servletPath));
        if (httpRequest.getPathInfo() != null) file = new File(file, httpRequest.getPathInfo());

        try {
          InputStream imageFileInputStream = new FileInputStream(file);
          OpenmrsUtil.copyFile(imageFileInputStream, httpResponse.getOutputStream());
          imageFileInputStream.close();
        } catch (FileNotFoundException e) {
          log.error("Unable to find file: " + file.getAbsolutePath());
        }
      } else if (servletPath.startsWith("/scripts")) {
        log.error(
            "Calling /scripts during the initializationfilter pages will cause the openmrs_static_context-servlet.xml to initialize too early and cause errors after startup.  Use '/initfilter"
                + servletPath
                + "' instead.");
      }
      // for anything but /initialsetup
      else if (!httpRequest.getServletPath().equals("/" + WebConstants.SETUP_PAGE_URL)) {
        // send the user to the setup page
        httpResponse.sendRedirect(
            "/" + WebConstants.WEBAPP_NAME + "/" + WebConstants.SETUP_PAGE_URL);
      } else {

        if (httpRequest.getMethod().equals("GET")) {
          doGet(httpRequest, httpResponse);
        } else if (httpRequest.getMethod().equals("POST")) {
          // only clear errors before POSTS so that redirects can show errors too.
          errors.clear();
          doPost(httpRequest, httpResponse);
        }
      }
      // Don't continue down the filter chain otherwise Spring complains
      // that it hasn't been set up yet.
      // The jsp and servlet filter are also on this chain, so writing to
      // the response directly here is the only option
    }
  }
 /**
  * Extracts patients from a calculation result map with date results in the given range
  *
  * @param results the calculation result map
  * @param minDateInclusive the minimum date (inclusive)
  * @param maxDateInclusive the maximum date (inclusive)
  * @return the extracted patient ids
  */
 protected static Set<Integer> datesWithinRange(
     CalculationResultMap results, Date minDateInclusive, Date maxDateInclusive) {
   Set<Integer> ret = new HashSet<Integer>();
   for (Map.Entry<Integer, CalculationResult> e : results.entrySet()) {
     Date result = null;
     try {
       result = e.getValue().asType(Date.class);
     } catch (Exception ex) {
       // pass
     }
     if (result != null) {
       if (OpenmrsUtil.compareWithNullAsEarliest(result, minDateInclusive) >= 0
           && OpenmrsUtil.compareWithNullAsLatest(result, maxDateInclusive) <= 0) {
         ret.add(e.getKey());
       }
     }
   }
   return ret;
 }
Beispiel #28
0
  /**
   * Get the values of the parameters passed in and set them to the local variables on this class.
   *
   * @see liquibase.change.custom.CustomChange#setUp()
   */
  @Override
  public void setUp() throws SetupException {

    tableNamesArray = StringUtils.split(tableNames);
    idExceptionsMap = OpenmrsUtil.parseParameterList(idExceptions);

    genericIdSql = "select tablename_id from tablename where columnName is null";
    genericIdSql = genericIdSql.replace("columnName", columnName);

    genericUpdateSql = "update tablename set columnName = ? where tablename_id = ?";
    genericUpdateSql = genericUpdateSql.replace("columnName", columnName);
  }
 /**
  * Discontinues an order given a date and a reason, and saves it to the database if anything has
  * changed.
  *
  * @param order
  * @param effectiveDate
  * @param reason
  * @should change discontinued metadata if order is set to be discontinued after date
  * @should have no effect if order is discontinued before date
  */
 public static void discontinueOrder(Order order, Date date, Concept reason) {
   if (!order.isDiscontinuedRightNow()) {
     order.setDiscontinued(true);
     order.setDiscontinuedDate(date);
     order.setDiscontinuedReason(reason);
     Context.getOrderService().saveOrder(order);
   } else if (OpenmrsUtil.compareWithNullAsLatest(date, order.getDiscontinuedDate()) < 0) {
     order.setDiscontinued(true); // should already be true
     order.setDiscontinuedDate(date);
     order.setDiscontinuedReason(reason);
     Context.getOrderService().saveOrder(order);
   }
 }
  private boolean shouldBeClosed(Visit visit) {

    if (visit.getStopDatetime() != null) {
      return false; // already closed
    }

    VisitDomainWrapper visitDomainWrapper = domainWrapperFactory.newVisitDomainWrapper(visit);

    if (visitDomainWrapper.isAdmitted() || visitDomainWrapper.isAwaitingAdmission()) {
      return false; // don't close the visit if patient is admitted or waiting admission
    }

    Disposition mostRecentDisposition = visitDomainWrapper.getMostRecentDisposition();
    if (mostRecentDisposition != null
        && mostRecentDisposition.getKeepsVisitOpen() != null
        && mostRecentDisposition.getKeepsVisitOpen()) {
      return false; // don't close the visit if the most recent disposition is one that keeps visit
                    // opens
    }

    Date now = new Date();
    Date mustHaveSomethingAfter = DateUtils.addHours(now, -emrApiProperties.getVisitExpireHours());

    if (OpenmrsUtil.compare(visit.getStartDatetime(), mustHaveSomethingAfter) >= 0) {
      return false;
    }

    if (visit.getEncounters() != null) {
      for (Encounter candidate : visit.getEncounters()) {
        if (OpenmrsUtil.compare(candidate.getEncounterDatetime(), mustHaveSomethingAfter) >= 0) {
          return false;
        }
      }
    }

    return true;
  }