Revert "Item interface should have been in DocIdPusher interface"

This reverts commit 76e83350afc3c0a902c60addfeb3502744d0e5a3.

Putting the Item interface inside of DocIdPusher interface
made it public. The Item interface is used inside the library
for dealing with records, acls and docids. However Item
should not be available to clients to create other Item types
which would result in possible runtime exceptions.

We are reverting the placement of Item from DocIdPusher to
DocIdSender.  DocIdSender is concrete and allow for hiding
of the Item interface.
diff --git a/src/com/google/enterprise/adaptor/AsyncDocIdSender.java b/src/com/google/enterprise/adaptor/AsyncDocIdSender.java
index ce59de9..384f889 100644
--- a/src/com/google/enterprise/adaptor/AsyncDocIdSender.java
+++ b/src/com/google/enterprise/adaptor/AsyncDocIdSender.java
@@ -32,7 +32,7 @@
   private final int maxBatchSize;
   private final long maxLatency;
   private final TimeUnit maxLatencyUnit;
-  private final BlockingQueue<DocIdPusher.Item> queue;
+  private final BlockingQueue<DocIdSender.Item> queue;
   private final Runnable worker = new WorkerRunnable();
 
   /**
@@ -54,7 +54,7 @@
     this.maxBatchSize = maxBatchSize;
     this.maxLatency = maxLatency;
     this.maxLatencyUnit = maxLatencyUnit;
-    this.queue = new ArrayBlockingQueue<DocIdPusher.Item>(queueCapacity);
+    this.queue = new ArrayBlockingQueue<DocIdSender.Item>(queueCapacity);
   }
 
   /**
@@ -62,7 +62,7 @@
    * item will be dropped and a warning will be logged.
    */
   @Override
-  public void asyncPushItem(final DocIdPusher.Item item) {
+  public void asyncPushItem(final DocIdSender.Item item) {
     if (!queue.offer(item)) {
       log.log(Level.WARNING, "Failed to queue item: {0}", item);
     }
@@ -90,7 +90,7 @@
   private class WorkerRunnable implements Runnable {
     @Override
     public void run() {
-      Set<DocIdPusher.Item> items = new LinkedHashSet<DocIdPusher.Item>();
+      Set<DocIdSender.Item> items = new LinkedHashSet<DocIdSender.Item>();
       try {
         while (true) {
           BlockingQueueBatcher.take(
@@ -128,7 +128,7 @@
      * @returns {@code null} for success, or the first item that failed if not
      *     all items were sent
      */
-    public <T extends DocIdPusher.Item> T pushItems(Iterator<T> items,
+    public <T extends DocIdSender.Item> T pushItems(Iterator<T> items,
         ExceptionHandler handler) throws InterruptedException;
   }
 }
diff --git a/src/com/google/enterprise/adaptor/DocIdPusher.java b/src/com/google/enterprise/adaptor/DocIdPusher.java
index 3df413d..2816983 100644
--- a/src/com/google/enterprise/adaptor/DocIdPusher.java
+++ b/src/com/google/enterprise/adaptor/DocIdPusher.java
@@ -169,13 +169,10 @@
       boolean caseSensitive, ExceptionHandler handler)
       throws InterruptedException;
 
-  /** Marker interface for an item that can exist in a feed. */
-  interface Item {}
-
   /**
    * Immutable feed attributes for a document identified by its {@code DocId}.
    */
-  public static final class Record implements Item {
+  public static final class Record implements DocIdSender.Item {
     private final DocId id;
     private final boolean delete;
     private final Date lastModified;
diff --git a/src/com/google/enterprise/adaptor/DocIdSender.java b/src/com/google/enterprise/adaptor/DocIdSender.java
index bf1414f..d1b3740 100644
--- a/src/com/google/enterprise/adaptor/DocIdSender.java
+++ b/src/com/google/enterprise/adaptor/DocIdSender.java
@@ -359,6 +359,9 @@
     return success ? null : items.get(0);
   }
 
+  /** Marker interface for an item that can exist in a feed. */
+  interface Item {}
+
   /**
    * Represents the ACL tag sent in feeds.
    */
diff --git a/src/com/google/enterprise/adaptor/DocumentHandler.java b/src/com/google/enterprise/adaptor/DocumentHandler.java
index b323d43..f72fb8e 100644
--- a/src/com/google/enterprise/adaptor/DocumentHandler.java
+++ b/src/com/google/enterprise/adaptor/DocumentHandler.java
@@ -1026,6 +1026,6 @@
   }
 
   interface AsyncPusher {
-    public void asyncPushItem(DocIdPusher.Item item);
+    public void asyncPushItem(DocIdSender.Item item);
   }
 }
diff --git a/src/com/google/enterprise/adaptor/GsaFeedFileMaker.java b/src/com/google/enterprise/adaptor/GsaFeedFileMaker.java
index 439dc60..52bfe01 100644
--- a/src/com/google/enterprise/adaptor/GsaFeedFileMaker.java
+++ b/src/com/google/enterprise/adaptor/GsaFeedFileMaker.java
@@ -204,10 +204,10 @@
   /** Adds all the DocIds into feed-file-document one record
     at a time. */
   private void constructMetadataAndUrlFeedFileBody(Document doc,
-      Element root, List<? extends DocIdPusher.Item> items) {
+      Element root, List<? extends DocIdSender.Item> items) {
     Element group = doc.createElement("group");
     root.appendChild(group);
-    for (DocIdPusher.Item item : items) {
+    for (DocIdSender.Item item : items) {
       if (item instanceof DocIdPusher.Record) {
         constructSingleMetadataAndUrlFeedFileRecord(doc, group,
                                                     (DocIdPusher.Record) item);
@@ -223,7 +223,7 @@
 
   /** Puts all DocId into metadata-and-url GSA feed file. */
   private void constructMetadataAndUrlFeedFile(Document doc,
-      String srcName, List<? extends DocIdPusher.Item> items) {
+      String srcName, List<? extends DocIdSender.Item> items) {
     Element root = doc.createElement("gsafeed");
     doc.appendChild(root);
     constructMetadataAndUrlFeedFileHead(doc, root, srcName);
@@ -252,7 +252,7 @@
      provided DocIds and source name.  Is used by
      GsaCommunicationHandler.pushDocIds(). */
   public String makeMetadataAndUrlXml(String srcName,
-      List<? extends DocIdPusher.Item> items) {
+      List<? extends DocIdSender.Item> items) {
     try {
       DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
       DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
diff --git a/src/com/google/enterprise/adaptor/Journal.java b/src/com/google/enterprise/adaptor/Journal.java
index df98adc..b9e6e52 100644
--- a/src/com/google/enterprise/adaptor/Journal.java
+++ b/src/com/google/enterprise/adaptor/Journal.java
@@ -107,7 +107,7 @@
     }
   }
 
-  synchronized void recordDocIdPush(List<? extends DocIdPusher.Item> pushed) {
+  synchronized void recordDocIdPush(List<? extends DocIdSender.Item> pushed) {
     for (Object item : pushed) {
       if (item instanceof DocIdPusher.Record) {
         DocIdPusher.Record record = (DocIdPusher.Record) item;
diff --git a/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java b/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java
index 445961d..e15044a 100644
--- a/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java
+++ b/test/com/google/enterprise/adaptor/AsyncDocIdSenderTest.java
@@ -150,7 +150,7 @@
   }
 
   private void verifyPushedItems(AsyncDocIdSender sender,
-      List<? extends DocIdPusher.Item> expected) throws Exception {
+      List<? extends DocIdSender.Item> expected) throws Exception {
     final Runnable worker = sender.worker();
     Thread workerThread = new Thread(new Runnable() {
       @Override
@@ -166,11 +166,11 @@
 
   private static class AccumulatingPusher
       implements AsyncDocIdSender.ItemPusher {
-    private final List<DocIdPusher.Item> items
-        = new LinkedList<DocIdPusher.Item>();
+    private final List<DocIdSender.Item> items
+        = new LinkedList<DocIdSender.Item>();
 
     @Override
-    public <T extends DocIdPusher.Item> T pushItems(Iterator<T> items,
+    public <T extends DocIdSender.Item> T pushItems(Iterator<T> items,
         ExceptionHandler handler) throws InterruptedException {
       while (items.hasNext()) {
         this.items.add(items.next());
@@ -178,7 +178,7 @@
       return null;
     }
 
-    public List<DocIdPusher.Item> getItems() {
+    public List<DocIdSender.Item> getItems() {
       return items;
     }
   }
diff --git a/test/com/google/enterprise/adaptor/DocIdSenderTest.java b/test/com/google/enterprise/adaptor/DocIdSenderTest.java
index c7af4b7..75f49dd 100644
--- a/test/com/google/enterprise/adaptor/DocIdSenderTest.java
+++ b/test/com/google/enterprise/adaptor/DocIdSenderTest.java
@@ -318,8 +318,8 @@
 
   private static class MockGsaFeedFileMaker extends GsaFeedFileMaker {
     List<String> names = new ArrayList<String>();
-    List<List<? extends DocIdPusher.Item>> recordses
-        = new ArrayList<List<? extends DocIdPusher.Item>>();
+    List<List<? extends DocIdSender.Item>> recordses
+        = new ArrayList<List<? extends DocIdSender.Item>>();
     // Don't use generics because of limitations in Java
     List<Object> groupses = new ArrayList<Object>();
     int i;
@@ -330,7 +330,7 @@
 
     @Override
     public String makeMetadataAndUrlXml(String name,
-        List<? extends DocIdPusher.Item> items) {
+        List<? extends DocIdSender.Item> items) {
       names.add(name);
       recordses.add(items);
       return "" + i++;
diff --git a/test/com/google/enterprise/adaptor/DocumentHandlerTest.java b/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
index def1a80..d7f6273 100644
--- a/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
+++ b/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
@@ -1165,7 +1165,7 @@
     };
     DocumentHandler.AsyncPusher pusher = new DocumentHandler.AsyncPusher() {
       @Override
-      public void asyncPushItem(DocIdPusher.Item item) {
+      public void asyncPushItem(DocIdSender.Item item) {
         assertTrue(item instanceof DocIdPusher.Record);
         DocIdPusher.Record record = (DocIdPusher.Record) item;
         assertEquals(URI.create("http://example.com"), record.getResultLink());
@@ -1205,7 +1205,7 @@
         .build());
     handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void asyncPushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdSender.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1229,7 +1229,7 @@
         .build());
     handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void asyncPushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdSender.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1252,7 +1252,7 @@
         .build());
     handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void asyncPushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdSender.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1275,7 +1275,7 @@
         .build());
     handler = builder.setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void asyncPushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdSender.Item item) {
             assertTrue(item instanceof DocIdSender.AclItem);
             DocIdSender.AclItem aclItem = (DocIdSender.AclItem) item;
             assertEquals(defaultDocId, aclItem.getDocId());
@@ -1314,7 +1314,7 @@
         .setAdaptor(adaptor)
         .setPusher(new DocumentHandler.AsyncPusher() {
           @Override
-          public void asyncPushItem(DocIdPusher.Item item) {
+          public void asyncPushItem(DocIdSender.Item item) {
             fail("Should not have been called");
           }
         })
@@ -1355,7 +1355,7 @@
 
   private static class MockPusher implements DocumentHandler.AsyncPusher {
     @Override
-    public void asyncPushItem(DocIdPusher.Item item) {
+    public void asyncPushItem(DocIdSender.Item item) {
       fail("Should not have been called");
     }
   }
diff --git a/test/com/google/enterprise/adaptor/GsaFeedFileMakerTest.java b/test/com/google/enterprise/adaptor/GsaFeedFileMakerTest.java
index af1c209..79d63dc 100644
--- a/test/com/google/enterprise/adaptor/GsaFeedFileMakerTest.java
+++ b/test/com/google/enterprise/adaptor/GsaFeedFileMakerTest.java
@@ -234,7 +234,7 @@
 
   @Test
   public void testUnsupportedDocIdSenderItemMetadataAndUrl() {
-    class UnsupportedItem implements DocIdPusher.Item {};
+    class UnsupportedItem implements DocIdSender.Item {};
     List<UnsupportedItem> items = new ArrayList<UnsupportedItem>();
     items.add(new UnsupportedItem());
     thrown.expect(IllegalArgumentException.class);
diff --git a/test/com/google/enterprise/adaptor/JournalTest.java b/test/com/google/enterprise/adaptor/JournalTest.java
index 5d5a17b..8f449e2 100644
--- a/test/com/google/enterprise/adaptor/JournalTest.java
+++ b/test/com/google/enterprise/adaptor/JournalTest.java
@@ -59,7 +59,7 @@
 
   @Test
   public void testUnsupportedDocIdPush() {
-    class UnsupportedItem implements DocIdPusher.Item {};
+    class UnsupportedItem implements DocIdSender.Item {};
     Journal journal = new Journal(true, new MockTimeProvider());
     thrown.expect(IllegalArgumentException.class);
     journal.recordDocIdPush(Collections.singletonList(new UnsupportedItem()));
diff --git a/test/com/google/enterprise/adaptor/MockJournal.java b/test/com/google/enterprise/adaptor/MockJournal.java
index af7652d..b9569bd 100644
--- a/test/com/google/enterprise/adaptor/MockJournal.java
+++ b/test/com/google/enterprise/adaptor/MockJournal.java
@@ -26,7 +26,7 @@
   }
 
   @Override
-  void recordDocIdPush(List<? extends DocIdPusher.Item> pushed) {
+  void recordDocIdPush(List<? extends DocIdSender.Item> pushed) {
     throw new UnsupportedOperationException();
   }