public interface Response
Adaptor.getDocContent(Request, Response)
for performing the actions needed
to satisfy a request.
There are several ways that a request can be processed. In the simplest
case an Adaptor always sets different pieces of metadata, calls getOutputStream()
, and writes the document contents. If the document does not
exist, it should call respondNotFound()
instead.
For improved efficiency during recrawl by the GSA, an Adaptor should check
Request.hasChangedSinceLastAccess(java.util.Date)
and call respondNotModified()
when it is true
. This prevents the Adaptor from
ever needing to retrieve the document contents and metadata.
Avoid implementing this interface in adaptor unit tests because
new methods may be added in the future. Instead use
UnsupportedResponse
, or use an automated mock
generator like Mockito or java.lang.reflect.Proxy
.
Modifier and Type | Method and Description |
---|---|
void |
addAnchor(URI uri,
String text)
Add a hyperlink for the GSA to follow without modifying the document
contents.
|
void |
addMetadata(String key,
String value)
Add metadata element that applies to the document.
|
OutputStream |
getOutputStream()
Get stream to write document contents to.
|
void |
putNamedResource(String fragment,
Acl acl)
Provide alternative ACLs for this document, uniquely identified by
response document's
DocId and fragment . |
void |
respondNoContent()
Respond to the GSA that it already has the latest content
of a file but not necessarily the latest ACLs or metadata;
Respond to non GSA client that it already has the latest version
of a file.
|
void |
respondNotFound()
Respond to the GSA or other client that the request document does not
exist.
|
void |
respondNotModified()
Respond to the GSA or other client that it already has the latest version
of a file and its metadata.
|
void |
setAcl(Acl acl)
Provide the document's ACLs for early-binding security on the GSA.
|
void |
setContentType(String contentType)
Describe the content type of the document.
|
void |
setCrawlOnce(boolean crawlOnce)
Instruct the GSA to not recrawl the document after the initial
retrieval.
|
void |
setDisplayUrl(URI displayUrl)
Set the URI to be displayed in search results.
|
void |
setForcedTransmissionDecision(MetadataTransform.TransmissionDecision transmissionDecision)
Set a forced
MetadataTransform.TransmissionDecision that can override transmission
decisions made by MetadataTransforms . |
void |
setLastModified(Date lastModified)
Provide the last modification time of the document.
|
void |
setLock(boolean lock)
Instruct the GSA to "lock" the document into its index.
|
void |
setNoArchive(boolean noArchive)
Whether the GSA should show the "Cached" link in search results for this
document.
|
void |
setNoFollow(boolean noFollow)
Whether the GSA should follow the links within the document to find other
documents.
|
void |
setNoIndex(boolean noIndex)
Whether the GSA should index the content for searching.
|
void |
setParam(String key,
String value)
Adds a parameter to a Map for use by
MetadataTransforms when making
transforms or decisions. |
void |
setSecure(boolean secure)
Mark the document as secure, for use with late-binding security.
|
void respondNotModified() throws IOException
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.
IOException
- if communicating with client failsvoid respondNotFound() throws IOException
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.
IOException
- if communicating with client failsvoid respondNoContent() throws IOException
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.
IOException
- if communicating with client failsOutputStream getOutputStream() throws IOException
OutputStream
when done.
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.
IOException
- if connection's stream cannot be providedvoid setContentType(String contentType)
contentType
- to set in response headersvoid setLastModified(Date lastModified)
lastModified
- to send in response headersvoid addMetadata(String key, String value)
key
- the key of metadata elementvalue
- the value of metadata elementNullPointerException
- if key
or value
is null
void setAcl(Acl acl)
null
, which means the document
is public if the document isn't marked as secure via setSecure(boolean)
.acl
- access controls for document being sentvoid putNamedResource(String fragment, Acl acl)
DocId
and fragment
.fragment
- disambiguating name when document has multiple ACLsacl
- access controls for document being sentvoid setSecure(boolean secure)
false
, which means the document
is public if there are no ACLs. ACLs should be used, if possible, instead
of setting this option to true
. When 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.secure
- controls whether access is controlled or publicvoid addAnchor(URI uri, String text)
<a href='$uri'>$text</a>
. If you want to link to a DocId
, then you
may use the DocIdEncoder
provided by AdaptorContext.getDocIdEncoder()
to produce an appropriate URI.uri
- the URI of the anchortext
- the text of the anchor, or null
NullPointerException
- if uri
is null
void setNoIndex(boolean noIndex)
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 false
).noIndex
- true
when the GSA shouldn't index this documentvoid setNoFollow(boolean noFollow)
false
).noFollow
- true
when the GSA shouldn't follow links from this
document to find other documentsvoid setNoArchive(boolean noArchive)
false
).noArchive
- true
when the GSA shouldn't show the "Cached"
link in search resultsvoid setDisplayUrl(URI displayUrl)
null
, then the
crawl URI representing the DocId
is used. The default is null
.displayUrl
- URI to be used for this document in search resultsvoid setCrawlOnce(boolean crawlOnce)
false
.crawlOnce
- if true
, the document does not need to be
recrawled periodicallyvoid setLock(boolean lock)
false
.lock
- if true
, keep this document in the index in preference
to unlocked documentsvoid setForcedTransmissionDecision(MetadataTransform.TransmissionDecision transmissionDecision)
MetadataTransform.TransmissionDecision
that can override transmission
decisions made by MetadataTransforms
.
Some connectors send content that must be preserved in order for the connector to function properly, and transforms that decide to drop that content essentially break the connector. For instance, dropping folders disrupts graph traverser type connectors.
transmissionDecision
- a
TransmissionDecision
void setParam(String key, String value)
MetadataTransforms
when making
transforms or decisions. Params are data associated with the document,
but might not be indexed and searchable. Before the metadata transforms are
called, the params
are seeded with the document's DocId
,
and values from setLock
, setCrawlOnce
,
setDisplayUrl
, setContentType
, and setLastModified
.
To avoid possible name conflicts with parameter entries supplied by the
library, the key of a connector-supplied parameter must start with
X-
.
Example:
response.setParam("X-LastAccessDate", ISO8601.format(lastAccessDate));
key
- a key for a Map entryvalue
- the value for the Map entry for keyIllegalArgumentException
- if key is not prefixed with X-
IllegalStateException
- if the response has been sentNullPointerException
- if key is null