Revert "Remove DocumentHandler.AsyncPusher interface"

This reverts commit 4adc1004c67d2be21639ad7a7473ff69f7677946.

This CL exoses a failure where Item was visible outside of
library package.  Further thinking about this CL revelaed
that DocumentHandler.AsyncPusher had a purpose of hiding
the pushing of fragments (which are pushed because of GSA
limitations).
diff --git a/src/com/google/enterprise/adaptor/AsyncDocIdPusher.java b/src/com/google/enterprise/adaptor/AsyncDocIdPusher.java
index 5186cb8..8b310db 100644
--- a/src/com/google/enterprise/adaptor/AsyncDocIdPusher.java
+++ b/src/com/google/enterprise/adaptor/AsyncDocIdPusher.java
@@ -20,13 +20,6 @@
  */
 public interface AsyncDocIdPusher {
   /**
-   * Push a {@code Item} asynchronously to the GSA. The {@code Item} is
-   * enqueued and sent in the next batch to the GSA. If the queue is full,
-   * then the item will be dropped and a warning will be logged.
-   */
-  public void pushItem(DocIdPusher.Item item);
-
-  /**
    * Push a {@code DocId} asynchronously to the GSA. The {@code DocId} is
    * enqueued and sent in the next batch to the GSA. If the queue is full,
    * then the item will be dropped and a warning will be logged.
diff --git a/src/com/google/enterprise/adaptor/AsyncDocIdSender.java b/src/com/google/enterprise/adaptor/AsyncDocIdSender.java
index 6f965e6..ce59de9 100644
--- a/src/com/google/enterprise/adaptor/AsyncDocIdSender.java
+++ b/src/com/google/enterprise/adaptor/AsyncDocIdSender.java
@@ -23,7 +23,8 @@
  * Asynchronous sender of feed items. {@code worker()} must be started by client
  * and running for items to be sent.
  */
-class AsyncDocIdSender implements AsyncDocIdPusher {
+class AsyncDocIdSender implements AsyncDocIdPusher,
+    DocumentHandler.AsyncPusher {
   private static final Logger log
       = Logger.getLogger(AsyncDocIdSender.class.getName());
 
@@ -56,8 +57,12 @@
     this.queue = new ArrayBlockingQueue<DocIdPusher.Item>(queueCapacity);
   }
 
+  /**
+   * Enqueue {@code item} to be sent by worker. If the queue is full, then the
+   * item will be dropped and a warning will be logged.
+   */
   @Override
-  public void pushItem(final DocIdPusher.Item item) {
+  public void asyncPushItem(final DocIdPusher.Item item) {
     if (!queue.offer(item)) {
       log.log(Level.WARNING, "Failed to queue item: {0}", item);
     }
@@ -65,17 +70,17 @@
 
   @Override
   public void pushDocId(DocId docId) {
-    pushItem(new DocIdPusher.Record.Builder(docId).build());
+    asyncPushItem(new DocIdPusher.Record.Builder(docId).build());
   }
 
   @Override
   public void pushRecord(DocIdPusher.Record record) {
-    pushItem(record);
+    asyncPushItem(record);
   }
 
   @Override
   public void pushNamedResource(DocId docId, Acl acl) {
-    pushItem(new DocIdSender.AclItem(docId, null, acl));
+    asyncPushItem(new DocIdSender.AclItem(docId, null, acl));
   }
 
   public Runnable worker() {
diff --git a/src/com/google/enterprise/adaptor/DocumentHandler.java b/src/com/google/enterprise/adaptor/DocumentHandler.java
index 6038426..b323d43 100644
--- a/src/com/google/enterprise/adaptor/DocumentHandler.java
+++ b/src/com/google/enterprise/adaptor/DocumentHandler.java
@@ -49,7 +49,7 @@
   private final Adaptor adaptor;
   private final AuthzAuthority authzAuthority;
   private final Watchdog watchdog;
-  private final AsyncDocIdPusher pusher;
+  private final AsyncPusher pusher;
   /**
    * List of Common Names of Subjects that are provided full access when in
    * secure mode. All entries should be lower case.
@@ -79,7 +79,7 @@
                          SamlServiceProvider samlServiceProvider,
                          TransformPipeline transform, AclTransform aclTransform,
                          boolean useCompression,
-                         Watchdog watchdog, AsyncDocIdPusher pusher,
+                         Watchdog watchdog, AsyncPusher pusher,
                          boolean sendDocControls, long headerTimeoutMillis,
                          long contentTimeoutMillis, String scoringType) {
     if (docIdDecoder == null || docIdEncoder == null || journal == null
@@ -807,7 +807,7 @@
           if (displayUrl != null || crawlOnce || lock) {
             // Emulate these crawl-time values by sending them in feeds
             // since they aren't supported at crawl-time on GSA 7.0.
-            pusher.pushItem(new DocIdPusher.Record.Builder(docId)
+            pusher.asyncPushItem(new DocIdPusher.Record.Builder(docId)
                 .setResultLink(displayUrl).setCrawlOnce(crawlOnce).setLock(lock)
                 .build());
             // TODO(ejona): figure out how to notice that a true went false
@@ -849,7 +849,7 @@
       HttpExchanges.startResponse(
           ex, HttpURLConnection.HTTP_OK, contentType, hasContent);
       for (Map.Entry<String, Acl> fragment : fragments.entrySet()) {
-        pusher.pushItem(new DocIdSender.AclItem(docId,
+        pusher.asyncPushItem(new DocIdSender.AclItem(docId,
             fragment.getKey(), fragment.getValue()));
       }
     }
@@ -886,7 +886,7 @@
         // CHILD_OVERRIDES and PARENT_OVERRIDES are fine as-is.
       }
       final String fragment = "generated";
-      pusher.pushItem(
+      pusher.asyncPushItem(
           new DocIdSender.AclItem(docId, fragment, namedResourceAcl.build()));
       return new Acl.Builder()
           .setInheritanceType(acl.getInheritanceType())
@@ -1024,4 +1024,8 @@
       buffer.write(b, off, len);
     }
   }
+
+  interface AsyncPusher {
+    public void asyncPushItem(DocIdPusher.Item item);
+  }
 }
diff --git a/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java b/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java
index 48b176b..445961d 100644
--- a/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java
+++ b/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java
@@ -64,11 +64,11 @@
         new DocIdPusher.Record.Builder(new DocId("2")).build(),
         new DocIdPusher.Record.Builder(new DocId("3")).build());
     for (DocIdPusher.Record record : golden) {
-      sender.pushItem(record);
+      sender.asyncPushItem(record);
     }
     // We shouldn't block while adding this item, even though the queue is full.
     // Instead, it should simply be dropped.
-    sender.pushItem(
+    sender.asyncPushItem(
         new DocIdPusher.Record.Builder(new DocId("4")).build());
     Thread workerThread = new Thread(sender.worker());
     workerThread.start();
@@ -85,7 +85,7 @@
         1, TimeUnit.SECONDS, 1 /* queueCapacity */);
     final List<DocIdPusher.Record> golden = Arrays.asList(
         new DocIdPusher.Record.Builder(new DocId("1")).build());
-    sender.pushItem(golden.get(0));
+    sender.asyncPushItem(golden.get(0));
     Thread workerThread = new Thread(sender.worker());
     workerThread.start();
     // We want to trigger the code that waits on maxLatency.
@@ -101,7 +101,7 @@
         1, TimeUnit.SECONDS, 1 /* queueCapacity */);
     final List<DocIdPusher.Record> golden = Arrays.asList(
         new DocIdPusher.Record.Builder(new DocId("1")).build());
-    sender.pushItem(golden.get(0));
+    sender.asyncPushItem(golden.get(0));
     final Runnable worker = sender.worker();
     Thread workerThread = new Thread(new Runnable() {
       @Override
diff --git a/test/com/google/enterprise/adaptor/DocumentHandlerTest.java b/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
index 31bd18e..def1a80 100644
--- a/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
+++ b/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
@@ -1163,9 +1163,9 @@
         response.getOutputStream();
       }
     };
-    AsyncDocIdPusher pusher = new MockPusher() {
+    DocumentHandler.AsyncPusher pusher = new DocumentHandler.AsyncPusher() {
       @Override
-      public void pushItem(DocIdPusher.Item item) {
+      public void asyncPushItem(DocIdPusher.Item item) {
         assertTrue(item instanceof DocIdPusher.Record);
         DocIdPusher.Record record = (DocIdPusher.Record) item;
         assertEquals(URI.create("http://example.com"), record.getResultLink());
@@ -1203,9 +1203,9 @@
         .setPermitUsers(Arrays.asList(
             new UserPrincipal("user2"), new UserPrincipal("user", "ns")))
         .build());
-    handler = builder.setPusher(new MockPusher() {
+    handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void pushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdPusher.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1227,9 +1227,9 @@
         .setDenyUsers(Arrays.asList(new UserPrincipal("user", "ns")))
         .setInheritanceType(Acl.InheritanceType.PARENT_OVERRIDES)
         .build());
-    handler = builder.setPusher(new MockPusher() {
+    handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void pushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdPusher.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1250,9 +1250,9 @@
         .setPermitGroups(Arrays.asList(new GroupPrincipal("group", "ns")))
         .setInheritanceType(Acl.InheritanceType.CHILD_OVERRIDES)
         .build());
-    handler = builder.setPusher(new MockPusher() {
+    handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void pushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdPusher.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1273,9 +1273,9 @@
         .setDenyGroups(Arrays.asList(new GroupPrincipal("group", "ns")))
         .setInheritanceType(Acl.InheritanceType.CHILD_OVERRIDES)
         .build());
-    handler = builder.setPusher(new MockPusher() {
+    handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void pushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdPusher.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1312,7 +1312,12 @@
     };
     DocumentHandler handler = createHandlerBuilder()
         .setAdaptor(adaptor)
-        .setPusher(new MockPusher())
+        .setPusher(new DocumentHandler.AsyncPusher() {
+          @Override
+          public void asyncPushItem(DocIdPusher.Item item) {
+            fail("Should not have been called");
+          }
+        })
         .setFullAccessHosts(new String[] {remoteIp})
         .build();
     ex = new MockHttpExchange("GET", defaultPath, new MockHttpContext("/"));
@@ -1348,21 +1353,9 @@
       }
     };
 
-  private static class MockPusher implements AsyncDocIdPusher {
+  private static class MockPusher implements DocumentHandler.AsyncPusher {
     @Override
-    public void pushItem(DocIdPusher.Item item) {
-      fail("Should not have been called");
-    }
-    @Override
-    public void pushDocId(DocId docId) {
-      fail("Should not have been called");
-    }
-    @Override
-    public void pushRecord(DocIdPusher.Record record) {
-      fail("Should not have been called");
-    }
-    @Override
-    public void pushNamedResource(DocId docId, Acl acl) {
+    public void asyncPushItem(DocIdPusher.Item item) {
       fail("Should not have been called");
     }
   }
@@ -1419,7 +1412,7 @@
     private boolean transformRequired;
     private boolean useCompression;
     private Watchdog watchdog;
-    private AsyncDocIdPusher pusher;
+    private DocumentHandler.AsyncPusher pusher;
     private boolean sendDocControls;
     private long headerTimeoutMillis = 30 * 1000;
     private long contentTimeoutMillis = 180 * 1000;
@@ -1488,7 +1481,7 @@
     }
 
     public DocumentHandlerBuilder setPusher(
-        AsyncDocIdPusher pusher) {
+        DocumentHandler.AsyncPusher pusher) {
       this.pusher = pusher;
       return this;
     }