class ListingConnector implements IndexingConnector, ItemRetriever,
    IncrementalChangeHandler {

  @Override
  public void init(IndexingConnectorContext context) throws Exception {
    checkState(Configuration.isInitialized(), "configuration not initialized");
    exceptionHandler = TraverseExceptionHandlerFactory.createFromConfig();
    indexingService = checkNotNull(context.getIndexingService());
    for (String traverseName : traverserConfigKey.get()) {
      context.registerTraverser(
          new TraverserConfiguration.Builder(traverseName).itemRetriever(this).build());
    }
    defaultAcl = DefaultAcl.fromConfiguration(indexingService);
    threadPoolExecutor =
        new ThreadPoolExecutor(
            DEFAULT_THREAD_NUM,
            DEFAULT_THREAD_NUM,
            0,
            TimeUnit.MILLISECONDS,
            new ArrayBlockingQueue<Runnable>(10 * DEFAULT_THREAD_NUM),
            new ThreadPoolExecutor.CallerRunsPolicy());
    listeningExecutorService = MoreExecutors.listeningDecorator(threadPoolExecutor);
    repositoryContext =
        new RepositoryContext.Builder()
            .setEventBus(
                new AsyncEventBus(
                    "EventBus-" + ListingConnector.class.getName(), listeningExecutorService))
            .setDefaultAclMode(defaultAcl.getDefaultAclMode())
            .build();
    if (checkpointHandler == null) {
      checkpointHandler = LocalFileCheckpointHandler.fromConfiguration();
    }
    repositoryContext.getEventBus().register(this);
    repository.init(repositoryContext);
  }

  public  ListingConnector(Repository repository);
  public  ListingConnector(Repository repository, CheckpointHandler checkpointHandler);

}