blob: cd90d855da0d66ba1c1e083a42980fcf8c9ab142 [file] [log] [blame]
// Copyright 2011 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.enterprise.adaptor;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.util.Date;
/**
* Interface provided to {@link Adaptor#getDocContent
* Adaptor.getDocContent(Request, Response)} for performing the actions needed
* to satisfy a request.
*
* <p>There are several ways that a request can be processed. In the simplest
* case an Adaptor always sets different pieces of metadata, calls {@link
* #getOutputStream}, and writes the document contents. If the document does not
* exist, it should call {@link #respondNotFound} instead.
*
* <p>For improved efficiency during recrawl by the GSA, an Adaptor should check
* {@link Request#hasChangedSinceLastAccess} and call {@link
* #respondNotModified} when it is {@code true}. This prevents the Adaptor from
* ever needing to retrieve the document contents and metadata.
*/
public interface Response {
/**
* Respond to the GSA or other client that it already has the latest version
* of a file and its metadata. If you have called other methods on this object
* to provide various metadata, the effects of those methods will be ignored.
*
* <p>If called, this must be the last call to this interface. Once you call
* this method, for the rest of the processing, exceptions may no longer be
* communicated to clients cleanly.
*/
public void respondNotModified() throws IOException;
/**
* Respond to the GSA or other client that the request document does not
* exist. If you have called other methods on this object, the effects of
* those methods will be ignored.
*
* <p>If called, this must be the last call to this interface. Once you call
* this method, for the rest of the processing, exceptions may no longer be
* communicated to the clients cleanly.
*/
public void respondNotFound() throws IOException;
/**
* Get stream to write document contents to. There is no need to flush or
* close the {@code OutputStream} when done.
*
* <p>If called, this must be the last call to this interface (although, for
* convenience, you may call this method multiple times). Once you call this
* method, for the rest of the processing, exceptions may no longer be
* communicated to clients cleanly.
*/
public OutputStream getOutputStream() throws IOException;
/**
* Describe the content type of the document.
*/
public void setContentType(String contentType);
/**
* Provide the last modification time of the document.
*/
public void setLastModified(Date lastModified);
/**
* Add metadata element that applies to the document. Providing multiple
* values for the same key is supported; simply repeat the call once for each
* value.
*
* @param key the key of metadata element
* @param value the value of metadata element
* @throws NullPointerException if {@code key} or {@code value}
* is {@code null}
*/
public void addMetadata(String key, String value);
/**
* Provide the document's ACLs for early-binding security on the GSA. By
* default, the document's ACL will be {@code null}, which means the document
* is public if the document isn't marked as secure via {@link #setSecure}.
*/
public void setAcl(Acl acl);
/**
* Provide alternative ACLs for this document, uniquely identified by
* response document's {@code DocId} and {@code fragment}.
*/
public void putNamedResource(String fragment, Acl acl);
/**
* Mark the document as secure, for use with late-binding security. By
* default, the secure setting will be {@code false}, which means the document
* is public if there are no ACLs. ACLs should be used, if possible, instead
* of setting this option to {@code true}. When {@code true}, the GSA needs to
* be correctly configured to issue a SAML request to the Adaptor.
* Setting ACLs to non-null will override setSecure and send secure indicator
* to GSA.
*/
public void setSecure(boolean secure);
/**
* Add a hyperlink for the GSA to follow without modifying the document
* contents. This is equivalent to the following HTML: {@code
* <a href='$uri'>$text</a>}. If you want to link to a {@link DocId}, then you
* may use the {@link DocIdEncoder} provided by {@link
* AdaptorContext#getDocIdEncoder} to produce an appropriate URI.
*
* @param uri the URI of the anchor
* @param text the text of the anchor, or {@code null}
* @throws NullPointerException if {@code uri} is {@code null}
*/
public void addAnchor(URI uri, String text);
/**
* Whether the GSA should index the content for searching. When {@code true},
* the document will not be visible in search results. This does not change
* the GSA's behavior of following links within the document to find other
* documents. By default, the GSA will index the document (a value of {@code
* false}).
*
* @param noIndex {@code true} when the GSA shouldn't index this document
*/
public void setNoIndex(boolean noIndex);
/**
* Whether the GSA should follow the links within the document to find other
* documents. By default, the GSA will follow links (a value of {@code
* false}).
*
* @param noFollow {@code true} when the GSA shouldn't follow links from this
* document to find other documents
*/
public void setNoFollow(boolean noFollow);
/**
* Whether the GSA should show the "Cached" link in search results for this
* document. By default, the GSA will show the "Cached" link (a value of
* {@code false}).
*
* @param noArchive {@code true} when the GSA shouldn't show the "Cached"
* link in search results
*/
public void setNoArchive(boolean noArchive);
/**
* Set the URI to be displayed in search results. If {@code null}, then the
* crawl URI representing the {@code DocId} is used. The default is {@code
* null}.
*
* @param displayUrl URI to be used for this document in search results
*/
public void setDisplayUrl(URI displayUrl);
/**
* Instruct the GSA to not recrawl the document after the initial
* retrieval. The default is {@code false}.
*
* @param crawlOnce if {@code true}, the document does not need to be
* recrawled periodically
*/
public void setCrawlOnce(boolean crawlOnce);
/**
* Instruct the GSA to "lock" the document into its index. When the license
* limit is reached on the GSA, it deletes unlocked documents before locked
* documents while making room for new documents. The default is {@code
* false}.
*
* @param lock if {@code true}, keep this document in the index in preference
* to unlocked documents
*/
public void setLock(boolean lock);
}