Package edu.ucsb.nceas.metacat.client
Class MetacatClient
java.lang.Object
edu.ucsb.nceas.metacat.client.MetacatClient
- All Implemented Interfaces:
Metacat
This interface provides methods for initializing and logging in to a
Metacat server, and then querying, reading, transforming, inserting,
updating and deleting documents from that server.
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionDelete an XML document in the repository.getAccessControl
(String docid) get the access control info for a given document id.getAllDocids
(String scope) return a list of all docids that match a given scope.Returns the character encoding used used when communicating with Metacat.getLastDocid
(String scope) Return the highest document id for a given scope.Method used to log in to a metacat server.static MetacatClient
getMetacatClient
(javax.servlet.http.HttpServletRequest request) JSP API: This is a convenience method to reduce the amount of code in a Metacat Client JSP.int
getNewestDocRevision
(String docId) The method will return the latest revision in metacat server for a given document id.Get the session identifier for this session.Insert an XML document into the repository.isAuthorized
(String resourceLsid, String permission, String sessionId) Method used to log in to a metacat server.boolean
isRegistered
(String docid) return true of the given docid is registered, false if notMethod used to log in to a metacat server.logout()
Method used to log out a metacat server.static void
Query the metacat document store with the given metacat-compatible query document and default qformat xml, and return the result set as a Reader.Query the metacat document store with the given metacat-compatible query document and qformat, and return the result set as a Reader.Read an XML document from the metacat server session, accessed by docid, and returned as a Reader.readInlineData
(String inlinedataid) Read inline data from the metacat server session, accessed by inlinedataid and returned as a Reader.sendParameters
(Properties prop) Send a request to Metacat.Send a request to Metacat.Set access for a given doc id.set the access on an XML document in the repository.void
setEncoding
(String encoding) Returns the character encoding used used when communicating with Metacat.void
setMetacatUrl
(String metacatUrl) When the MetacatFactory creates an instance it needs to set the MetacatUrl to which connections should be made.void
setSessionId
(String sessionId) Set the session identifier for this session.Update an XML document in the repository.Upload a data document into the repository.upload
(String docid, String filename, InputStream fileData, int size) Upload a data document into the repository.validateSession
(String sessionId) Method used to log in to a metacat server.
-
Constructor Details
-
MetacatClient
protected MetacatClient()Constructor to create a new instance. Protected because instances should only be created by the factory MetacatFactory.
-
-
Method Details
-
main
-
login
public String login(String username, String password) throws MetacatAuthException, MetacatInaccessibleException Method used to log in to a metacat server. Implementations will need to cache a cookie value to make the session persistent. Each time a call is made to one of the other methods (e.g., read), the cookie will need to be passed back to the metacat server along with the request.- Specified by:
login
in interfaceMetacat
- Parameters:
username
- the username of the user, like an LDAP DNpassword
- the password for that user for authentication- Returns:
- the response string from metacat in XML format
- Throws:
MetacatAuthException
- when the username/password could not be authenticatedMetacatInaccessibleException
-
getloggedinuserinfo
Method used to log in to a metacat server. Implementations will need to cache a cookie value to make the session persistent. Each time a call is made to one of the other methods (e.g., read), the cookie will need to be passed back to the metacat server along with the request.- Specified by:
getloggedinuserinfo
in interfaceMetacat
- Parameters:
username
- the username of the user, like an LDAP DNpassword
- the password for that user for authentication- Returns:
- the response string from metacat in XML format
- Throws:
MetacatAuthException
- when the username/password could not be authenticatedMetacatInaccessibleException
-
logout
Method used to log out a metacat server. The Metacat server will end the session when this call is invoked.- Specified by:
logout
in interfaceMetacat
- Returns:
- the response string from metacat in XML format
- Throws:
MetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
-
validateSession
public String validateSession(String sessionId) throws MetacatAuthException, MetacatInaccessibleException Method used to log in to a metacat server. Implementations will need to cache a cookie value to make the session persistent. Each time a call is made to one of the other methods (e.g., read), the cookie will need to be passed back to the metacat server along with the request.- Parameters:
username
- the username of the user, like an LDAP DNpassword
- the password for that user for authentication- Returns:
- the response string from metacat in XML format
- Throws:
MetacatAuthException
- when the username/password could not be authenticatedMetacatInaccessibleException
-
isAuthorized
public String isAuthorized(String resourceLsid, String permission, String sessionId) throws MetacatAuthException, MetacatInaccessibleException Method used to log in to a metacat server. Implementations will need to cache a cookie value to make the session persistent. Each time a call is made to one of the other methods (e.g., read), the cookie will need to be passed back to the metacat server along with the request.- Parameters:
username
- the username of the user, like an LDAP DNpassword
- the password for that user for authentication- Returns:
- the response string from metacat in XML format
- Throws:
MetacatAuthException
- when the username/password could not be authenticatedMetacatInaccessibleException
-
read
public InputStream read(String docid) throws InsufficientKarmaException, MetacatInaccessibleException, MetacatException, DocumentNotFoundException Read an XML document from the metacat server session, accessed by docid, and returned as a Reader.- Specified by:
read
in interfaceMetacat
- Parameters:
docid
- the identifier of the document to be read- Returns:
- a Reader for accessing the document
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another errorDocumentNotFoundException
-
readInlineData
public InputStream readInlineData(String inlinedataid) throws InsufficientKarmaException, MetacatInaccessibleException, MetacatException Read inline data from the metacat server session, accessed by inlinedataid and returned as a Reader.- Specified by:
readInlineData
in interfaceMetacat
- Parameters:
inlinedataid
- the identifier of the data to be read- Returns:
- a Reader for accessing the document
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another error
-
query
Query the metacat document store with the given metacat-compatible query document and default qformat xml, and return the result set as a Reader.- Specified by:
query
in interfaceMetacat
- Parameters:
xmlQuery
- a Reader for accessing the XML version of the query- Returns:
- a Reader for accessing the result set
- Throws:
MetacatInaccessibleException
IOException
-
query
public Reader query(Reader xmlQuery, String qformat) throws MetacatInaccessibleException, IOException Query the metacat document store with the given metacat-compatible query document and qformat, and return the result set as a Reader.- Specified by:
query
in interfaceMetacat
- Parameters:
xmlQuery
- a Reader for accessing the XML version of the queryqformat
- the format of return doc. It can be xml, knb, lter and etal.- Returns:
- a Reader for accessing the result set
- Throws:
MetacatInaccessibleException
IOException
-
insert
public String insert(String docid, Reader xmlDocument, Reader schema) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException Insert an XML document into the repository.- Specified by:
insert
in interfaceMetacat
- Parameters:
docid
- the docid to insert the documentxmlDocument
- a Reader for accessing the XML document to be insertedschema
- a Reader for accessing the DTD or XML Schema for the document- Returns:
- the metacat response message
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another errorIOException
- when there is an error reading the xml document
-
update
public String update(String docid, Reader xmlDocument, Reader schema) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException Update an XML document in the repository.- Specified by:
update
in interfaceMetacat
- Parameters:
docid
- the docid to updatexmlDocument
- a Reader for accessing the XML text to be updatedschema
- a Reader for accessing the DTD or XML Schema for the document- Returns:
- the metacat response message
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another errorIOException
- when there is an error reading the xml document
-
upload
public String upload(String docid, File file) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException Upload a data document into the repository. Data files are stored on metacat and may be in any format (binary or text), but they are all treated as if they were binary. Data files are not searched by the query() methods because they are not loaded into the XML store because they are not XML documents. The File parameter is used to determine a name for the uploaded document.- Specified by:
upload
in interfaceMetacat
- Parameters:
docid
- the identifier to be used for the documentfile
- the File to be uploadeddocument
- a InputStream containing the data to be uploaded- Returns:
- the metacat response message
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another errorIOException
- when there is an error reading the xml document
-
upload
public String upload(String docid, String filename, InputStream fileData, int size) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException Upload a data document into the repository. Data files are stored on metacat and may be in any format (binary or text), but they are all treated as if they were binary. Data files are not searched by the query() methods because they are not loaded into the XML store because they are not XML documents. The name for the document is set explicitly using the filename parameter.- Specified by:
upload
in interfaceMetacat
- Parameters:
docid
- the identifier to be used for the documentfilename
- the name to be used in the MIME description of the uploaded filedocument
- a InputStream containing the data to be uploaded- Returns:
- the metacat response message
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another errorIOException
- when there is an error reading the xml document
-
delete
public String delete(String docid) throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException Delete an XML document in the repository.- Specified by:
delete
in interfaceMetacat
- Parameters:
docid
- the docid to delete- Returns:
- the metacat response message
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another error
-
getAccessControl
public String getAccessControl(String docid) throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException get the access control info for a given document id.- Specified by:
getAccessControl
in interfaceMetacat
- Parameters:
_docid
- the docid of the document for which the access should be applied.- Returns:
- the metacat access xml
- Throws:
InsufficientKarmaException
MetacatException
MetacatInaccessibleException
-
setAccess
public String setAccess(String docid, String principal, String permission, String permType, String permOrder) throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException set the access on an XML document in the repository.- Specified by:
setAccess
in interfaceMetacat
- Parameters:
_docid
- the docid of the document for which the access should be applied._principal
- the document's principal_permission
- the access permission to be applied to the docid {e.g. read,write,all}_permType
- the permission type to be applied to the document {e.g. allow or deny}_permOrder
- the order that the document's permissions should be processed {e.g. denyFirst or allowFirst}- Returns:
- the metacat response message
- Throws:
InsufficientKarmaException
- when the user has insufficent rights for the operationMetacatInaccessibleException
- when the metacat server can not be reached or does not respondMetacatException
- when the metacat server generates another error
-
setAccess
public String setAccess(String docid, String accessBlock) throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException Set access for a given doc id. The access is represented in an access block of xml. All existing access will be replaced with the access provided in the access block.- Specified by:
setAccess
in interfaceMetacat
- Parameters:
docid
- the doc id for the doc we want to updateaccessBlock
- the xml access block. This is the same structure as that returned by the getdocumentinfo action in metacat.- Returns:
- a string holding the response xml
- Throws:
InsufficientKarmaException
MetacatException
MetacatInaccessibleException
-
setMetacatUrl
When the MetacatFactory creates an instance it needs to set the MetacatUrl to which connections should be made.- Specified by:
setMetacatUrl
in interfaceMetacat
- Parameters:
metacatUrl
- the URL for the metacat server
-
getSessionId
Get the session identifier for this session. This is only valid if the login methods has been called successfully for this Metacat object beforehand.- Specified by:
getSessionId
in interfaceMetacat
-
setSessionId
Set the session identifier for this session. This identifier was previously established with a call to login. To continue to use the same session, set the session id before making a call to one of the metacat access methods (e.g., read, query, insert, etc.).- Specified by:
setSessionId
in interfaceMetacat
- Parameters:
String
- the sessionId from a previously established session
-
getNewestDocRevision
The method will return the latest revision in metacat server for a given document id. If some error happens, this method will throw an exception.- Specified by:
getNewestDocRevision
in interfaceMetacat
- Parameters:
docId
- String the given docid you want to use. the docid it self can have or haven't revision number- Throws:
MetacatException
-
getLastDocid
Return the highest document id for a given scope. This is used by clients to make it easier to determine the next free identifier in a sequence for a given scope.- Specified by:
getLastDocid
in interfaceMetacat
- Parameters:
scope
- String the scope to use for looking up the latest id- Throws:
MetacatException
- when an error occurs
-
getAllDocids
return a list of all docids that match a given scope. if scope is null return all docids registered in the system- Specified by:
getAllDocids
in interfaceMetacat
- Parameters:
scope
- String the scope to use to limit the docid query- Throws:
MetacatException
- when an error occurs
-
isRegistered
return true of the given docid is registered, false if not- Specified by:
isRegistered
in interfaceMetacat
- Parameters:
scope
- String the scope to use to limit the docid query- Throws:
MetacatException
- when an error occurs
-
sendParameters
Send a request to Metacat. An alternative to the sentData method. Allows for sending multiple parameters with the same name, different names, or any combo. Send properties where the entry key contains the "param key", and the entry value contains the "param value". Constraint: no multi-valued parameters are supported- Parameters:
args
- Properties of the parameters to be sent to Metacat, where, key = param key value = param value- Returns:
- InputStream as returned by Metacat
- Throws:
Exception
- thrown
-
sendParametersInverted
Send a request to Metacat. NOTE: Send properties where the entry key contains the "param value", and the entry value contains the "param name". Constraint: param values must be unique.- Parameters:
args
- Properties of the parameters to be sent to Metacat, where, key = param value value = param name- Returns:
- InputStream as returned by Metacat
- Throws:
Exception
- thrown
-
getMetacatClient
public static MetacatClient getMetacatClient(javax.servlet.http.HttpServletRequest request) throws MetacatInaccessibleException JSP API: This is a convenience method to reduce the amount of code in a Metacat Client JSP. It handles creating/reusing an instance of a MetacatClient.- Parameters:
request
- Since this is intended to be used by a JSP, it is passed the available "request" variable (the HttpServletRequest).- Returns:
- MetacatClient instance.
- Throws:
MetacatInaccessibleException
- Received by MetacatFactory.
-
getEncoding
Description copied from interface:Metacat
Returns the character encoding used used when communicating with Metacat.- Specified by:
getEncoding
in interfaceMetacat
- Returns:
- character encoding name
-
setEncoding
Description copied from interface:Metacat
Returns the character encoding used used when communicating with Metacat.- Specified by:
setEncoding
in interfaceMetacat
- Parameters:
encoding
- The encoding (i.e. "UTF-8")
-