Usage

Usage is simple:

  1. Create an instance of FedoraClient
    FedoraCredentials credentials = 
        new FedoraCredentials("http://example.org/fedora", "username", "password");
    FedoraClient fedora = new FedoraClient(credentials);
  2. Optionally, set this instance of FedoraClient as the default for all requests
    FedoraRequest.setDefaultClient(fedora);
  3. Build a FedoraRequest for the Fedora API method and execute the request
    IngestResponse response = new Ingest("test:pid").label("foo").execute();
    String pid = response.getPid();

    Using static imports, you can use an even more abbreviated syntax:

    import static com.yourmediashelf.fedora.client.FedoraClient.*;
    ...
    
        ingest("test:pid").execute();

Optimistic locking

Use optimistic locking for modifyObject by passing the lastModifiedDate as a request parameter. If the request's lastModifiedDate is earlier than the object's, the request will fail with a HTTP 409 Conflict error.

Date lastModifiedDate = fedora.getLastModifiedDate("test:pid");
try {
    modifyObject("test:pid").label("bar").lastModifiedDate(lastModifiedDate).execute();
} catch(FedoraClientException e) {
    if (e.getStatus() == 409) {
        // do something
    }
}

Parsing a response

FedoraRequests return instances of a FedoraResponse. The response-specific implementations (e.g. AddDatastreamResponse, GetDatastreamResponse, etc.) provide convenience methods that parse the response body. However, at this writing, not every request has a corresponding response implemented (yet). In those cases, it is necessary to parse the "raw" response, as returned by FedoraReponse.getEntity(Class) or FedoraResponse.getEntityInputStream().

FedoraResponse r = getDatastream("test:pid", "DC").format("html").execute();
String htmlResponseBody = r.getEntity(String.class);

GetDatastreamResponse gdr = getDatastream("test:pid", "DC").execute();
assert("A".equals(gdr.getDatastreamProfile().getDsState()));

Passing requests to multiple Fedora instances

The same FedoraRequest can be re-used across multiple Fedora instances:

FedoraClient f1 = new FedoraClient(new FedoraCredentials("http://localhost:8080/fedora", 
    "fedoraAdmin", "pass1"));
FedoraClient f2 = new FedoraClient(new FedoraCredentials("http://example.com/fedora", 
    "fedoraAdmin", "pass2"));

Ingest ingest = new Ingest("test:pid").label("foo");
ingest.execute(f1);
ingest.execute(f2);

Including fedora-client in your Maven project

As of 0.1.8, fedora-client is now a Maven multi-module project, producing fedora-client-core and fedora-client-messaging artifacts. Unless you specifically require support for Fedora Messaging, fedora-client-core is all you need. Similarly, if you only need support for Fedora Messaging and not Fedora's REST API, fedora-client-messaging is all you need.

Add the following to your pom.xml (substituting the actual, current version of fedora-client):

<dependencies>
    <dependency>
        <groupId>com.yourmediashelf.fedora.client</groupId>
        <artifactId>fedora-client-core</artifactId>
        <version>0.7</version>
    </dependency>
    <dependency>
        <groupId>com.yourmediashelf.fedora.client</groupId>
        <artifactId>fedora-client-messaging</artifactId>
        <version>0.7</version>
    </dependency>
</dependencies>

Including fedora-client in your non-Maven project

As of version 0.1.5, fedora-client also distributes -with-dependencies jars that bundle all dependencies (except for log4j) for use with non-Maven-based projects.

These artifacts are available via Maven Central and its mirrors.