com.google.enterprise.adaptor.examples
Class AdaptorWithCrawlTimeMetadataTemplate

java.lang.Object
  extended by com.google.enterprise.adaptor.AbstractAdaptor
      extended by com.google.enterprise.adaptor.examples.AdaptorWithCrawlTimeMetadataTemplate
All Implemented Interfaces:
Adaptor, AuthzAuthority

public class AdaptorWithCrawlTimeMetadataTemplate
extends AbstractAdaptor
implements AuthzAuthority

Demonstrates what code is necessary for putting restricted content onto a GSA. The key operations are:

  1. providing document ids
  2. providing document bytes and ACLs given a document id
  3. restricting access to documents


Constructor Summary
AdaptorWithCrawlTimeMetadataTemplate()
           
 
Method Summary
 void getDocContent(Request req, Response resp)
          Gives the bytes of a document referenced with id.
 void getDocIds(DocIdPusher pusher)
          Gives list of document ids that you'd like on the GSA.
 void init(AdaptorContext context)
          Initialize adaptor with the current context.
 Map<DocId,AuthzStatus> isUserAuthorized(AuthnIdentity userIdentity, Collection<DocId> ids)
          Determines whether the user identified is allowed to access the DocIds.
static void main(String[] args)
          Call default main for adaptors.
 
Methods inherited from class com.google.enterprise.adaptor.AbstractAdaptor
destroy, initConfig, main
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AdaptorWithCrawlTimeMetadataTemplate

public AdaptorWithCrawlTimeMetadataTemplate()
Method Detail

init

public void init(AdaptorContext context)
Description copied from class: AbstractAdaptor
Initialize adaptor with the current context. This is the ideal time to start any threads to do extra behind-the-scenes work. The context points to other useful objects that can be used at any time. For example, methods on DocIdPusher provided via AdaptorContext.getDocIdPusher() are allowed to be called whenever the Adaptor wishes. This allows doing event-based incremental pushes at any time.

The method is called at the end of GsaCommunicationHandler.start().

If you experience a fatal error during initialization, feel free to throw an Exception to cancel the startup process.

This implementation does nothing.

Specified by:
init in interface Adaptor
Overrides:
init in class AbstractAdaptor

getDocIds

public void getDocIds(DocIdPusher pusher)
               throws InterruptedException
Gives list of document ids that you'd like on the GSA.

Specified by:
getDocIds in interface Adaptor
Throws:
InterruptedException

getDocContent

public void getDocContent(Request req,
                          Response resp)
                   throws IOException
Gives the bytes of a document referenced with id.

Specified by:
getDocContent in interface Adaptor
Throws:
IOException

main

public static void main(String[] args)
Call default main for adaptors.


isUserAuthorized

public Map<DocId,AuthzStatus> isUserAuthorized(AuthnIdentity userIdentity,
                                               Collection<DocId> ids)
                                        throws IOException
Description copied from interface: AuthzAuthority
Determines whether the user identified is allowed to access the DocIds. The user is either anonymous or assumed to be previously authenticated. If an anonymous user is denied access to a document, then the caller may prompt the user to go through an authentication process and then try again.

Returns AuthzStatus.PERMIT for DocIds the user is allowed to access. Retutrns AuthzStatus.DENY for DocIds the user is not allowed to access. If the document exists, AuthzStatus.INDETERMINATE will not be returned for that DocId.

If the document doesn't exist, then there are several possibilities. If the repository is fully-public then it will return PERMIT. This will allow the caller to provide a cached version of the file to the user or call Adaptor.getDocContent(com.google.enterprise.adaptor.Request, com.google.enterprise.adaptor.Response) which should call Response.respondNotFound(). If the adaptor is not sensitive to users knowing that certain documents do not exist, then it will return INDETERMINATE. This will be interpreted as the document does not exist; no cached copy will be provided to the user but the user may be informed the document doesn't exist. Highly sensitive repositories may return DENY.

If you experience a fatal error, feel free to throw an IOException or RuntimeException. In the case of an error, the users will be denied access to the resources.

Specified by:
isUserAuthorized in interface AuthzAuthority
Parameters:
userIdentity - user to authorize, or null for anonymous users
ids - Collection of DocIds that need to be checked
Returns:
an AuthzStatus for each DocId provided in ids
Throws:
IOException