/**
   * Checks to see if there have been any failed imports. If any are found then they are sent to be
   * re-done.
   */
  public void checkForFailedImports() {
    LOG.info("Check for missed data collections.");
    TypedQuery<ImportCheck> failedImportQuery =
        manager.createQuery("SELECT ic FROM ImportCheck ic WHERE ic.passed = 0", ImportCheck.class);

    List<ImportCheck> failedImports = failedImportQuery.getResultList();

    if (!failedImports.isEmpty()) {

      for (ImportCheck ic : failedImports) {

        String type = ic.getType();
        LocalDate failedDate = convertToLocalDate(ic.getCheckDate());

        LOG.info("Found a failed import for " + type + " on the " + failedDate.toString());

        if ("instrument".equals(type)) {
          counter.performInstrumentMetaCollection(failedDate, failedDate.plusDays(1));
        } else if ("investigation".equals(type)) {
          counter.performInvestigationMetaCollection(failedDate, failedDate.plusDays(1));

        } else if ("entity".equals(type)) {
          counter.performEntityCountCollection(failedDate, failedDate.plusDays(1));
        }
      }
    }
    LOG.info("Finished checking for missed data collections.");
  }
  /** * Initialises the collection of entity information from the ICAT into the Dashboard. */
  private void initialiseEntityCollection() {

    LocalDate today = LocalDate.now();

    LOG.info("Data Collection initiated for " + today.toString());

    LocalDate earliestEntityImport = getNextImportDate("entity");
    LocalDate earliestInstrumentImport = getNextImportDate("instrument");
    LocalDate earliestInvestigationImport = getNextImportDate("investigation");

    // Import data into Dashboard even if the import script has never been run
    if (earliestEntityImport == null
        && earliestInstrumentImport == null
        && earliestInvestigationImport == null) {
      LocalDate past = LocalDate.now().minusWeeks(1);
      counter.performEntityCountCollection(past, today);
      counter.performInstrumentMetaCollection(past, today);
      counter.performInvestigationMetaCollection(past, today);
    }

    // An actual import has happened.
    if (earliestEntityImport != null) {
      counter.performEntityCountCollection(earliestEntityImport, today);
    }
    if (earliestInstrumentImport != null) {
      counter.performInstrumentMetaCollection(earliestInstrumentImport, today);
    }
    if (earliestInvestigationImport != null) {
      counter.performInvestigationMetaCollection(earliestInvestigationImport, today);
    }

    LOG.info("Data collection completed for " + today.toString());
  }