package com.example.connector; import com.google.enterprise.connector.spi.AuthenticationIdentity; import com.google.enterprise.connector.spi.AuthenticationManager; import com.google.enterprise.connector.spi.AuthenticationResponse; import com.google.enterprise.connector.spi.AuthorizationManager; import com.google.enterprise.connector.spi.AuthorizationResponse; import com.google.enterprise.connector.spi.Connector; import com.google.enterprise.connector.spi.Document; import com.google.enterprise.connector.spi.DocumentList; import com.google.enterprise.connector.spi.Property; import com.google.enterprise.connector.spi.RepositoryException; import com.google.enterprise.connector.spi.Session; import com.google.enterprise.connector.spi.SimpleDocument; import com.google.enterprise.connector.spi.SpiConstants; import com.google.enterprise.connector.spi.TraversalManager; import com.google.enterprise.connector.spi.Value; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; public class HelloWorldConnector implements Connector { public Session login() { return new HelloSession(); } public class HelloSession implements Session { public AuthenticationManager getAuthenticationManager() { return new HelloAuthenticationManager(); } public AuthorizationManager getAuthorizationManager() { return new HelloAuthorizationManager(); } public TraversalManager getTraversalManager() { return new HelloTraversalManager(); } } public class HelloTraversalManager implements TraversalManager { private static final int MAX_DOCID = 1000; private int batchHint = 10; public void setBatchHint(int hint) { batchHint = hint; } public DocumentList startTraversal() { return traverse("0"); } public DocumentList resumeTraversal(String checkpoint) { return traverse(checkpoint); } /** * Utility method to produce a {@code DocumentList} containing * the next batch of {@code Document} from the checkpoint. * * @param checkpoint a String representing the last document * number processed. */ private DocumentList traverse(String checkpoint) { int startDocId = Integer.parseInt(checkpoint) + 1; if (startDocId > MAX_DOCID) { return null; // No more documents. } Calendar cal = Calendar.getInstance(); List docList = new ArrayList(batchHint); int endDocId = Math.min(startDocId + batchHint - 1, MAX_DOCID); for (int i = startDocId; i <= endDocId; i++) { cal.setTimeInMillis(10 * 1000); // Each doc has the curretn timestamp Map>properties; properties = new HashMap>(); properties.put(SpiConstants.PROPNAME_DOCID, asList(Value.getStringValue(Integer.toString(i)))); properties.put(SpiConstants.PROPNAME_LASTMODIFIED, asList(Value.getDateValue(cal))); properties.put(SpiConstants.PROPNAME_DISPLAYURL, asList(Value.getStringValue("http://www.example.com/?docid=" + i))); properties.put(SpiConstants.PROPNAME_CONTENT, asList(Value.getBinaryValue("Hello World!".getBytes()))); docList.add(new SimpleDocument(properties)); } return new HelloWorldDocumentList(docList); } private List asList(Value value) { List list = new LinkedList(); list.add(value); return list; } } class HelloWorldDocumentList implements DocumentList { private Iterator iterator; private Document document; public HelloWorldDocumentList(List documents) { this.iterator = documents.iterator(); this.document = null; } public Document nextDocument() { if (iterator.hasNext()) { document = iterator.next(); return document; } return null; } public String checkpoint() throws RepositoryException { if (document != null) { Property docId = document.findProperty(SpiConstants.PROPNAME_DOCID); return docId.nextValue().toString(); } return null; } } class HelloAuthenticationManager implements AuthenticationManager { public AuthenticationResponse authenticate(AuthenticationIdentity id) { return new AuthenticationResponse(true, null); } } class HelloAuthorizationManager implements AuthorizationManager { public Collection authorizeDocids( Collection docIds, AuthenticationIdentity id) { ArrayList authorized = new ArrayList(docIds.size()); for (String docId : docIds) { authorized.add(new AuthorizationResponse(true, docId)); } return authorized; } } }