@Override
  public ScheduleOptions getOptions(Config config) {
    ScheduleOptions options = scheduler.NOW();
    options.canRunConcurrently(false);
    options.onLeaderOnly(true);
    options.name(config.getWorkspace().getJobName());

    return options;
  }
  @Activate
  protected final void activate(Map<String, Object> config) throws RepositoryException {
    if (!capabilityHelper.isOak()) {
      log.info("Cowardly refusing to create indexes on non-Oak instance.");
      return;
    }

    final String ensureDefinitionsPath =
        PropertiesUtil.toString(
            config.get(PROP_ENSURE_DEFINITIONS_PATH), DEFAULT_ENSURE_DEFINITIONS_PATH);

    final String oakIndexesPath =
        PropertiesUtil.toString(config.get(PROP_OAK_INDEXES_PATH), DEFAULT_OAK_INDEXES_PATH);

    log.info("Ensuring Oak Indexes [ {} ~> {} ]", ensureDefinitionsPath, oakIndexesPath);

    if (StringUtils.isBlank(ensureDefinitionsPath)) {
      throw new IllegalArgumentException(
          "OSGi Configuration Property `"
              + PROP_ENSURE_DEFINITIONS_PATH
              + "` "
              + "cannot be blank.");
    } else if (StringUtils.isBlank(oakIndexesPath)) {
      throw new IllegalArgumentException(
          "OSGi Configuration Property `" + PROP_OAK_INDEXES_PATH + "` " + "cannot be blank.");
    }

    // Start the indexing process asynchronously, so the activate won't get blocked
    // by rebuilding a synchronous index

    EnsureOakIndexJobHandler sih =
        new EnsureOakIndexJobHandler(this, oakIndexesPath, ensureDefinitionsPath);
    ScheduleOptions options = scheduler.NOW();
    String name =
        String.format(
            "Ensure index %s => %s", new Object[] {oakIndexesPath, ensureDefinitionsPath});
    options.name(name);
    options.canRunConcurrently(false);
    scheduler.schedule(sih, options);
    log.info("Job scheduled to update the index");
  }