org.fcrepo.server.access.dissemination
Class DisseminationService

java.lang.Object
  extended by org.fcrepo.server.access.dissemination.DisseminationService

public class DisseminationService
extends Object

A service for executing a dissemination given its binding information.

Author:
Ross Wayland

Field Summary
protected static Hashtable<String,DatastreamMediation> dsRegistry
          The hashtable containing information required for datastream mediation.
 
Constructor Summary
DisseminationService(Server server)
           Constructs an instance of DisseminationService.
 
Method Summary
 MIMETypedStream assembleDissemination(Context context, String PID, Hashtable<String,String> h_userParms, DisseminationBindingInfo[] dissBindInfoArray, String deploymentPID, ServiceDeploymentReader bmReader, String methodName)
           Assembles a dissemination given an instance of DisseminationBindingInfo which has the dissemination-related information from the digital object and its associated Service Deployment object.
 String extractTimestamp(String tempID)
           The tempID that is used for datastream mediation consists of a Timestamp plus a counter appended to the end to insure uniqueness.
static void printBindingInfo(DisseminationBindingInfo[] info)
           
 String registerDatastreamLocation(String dsLocation, String dsControlGroupType, String beServiceCallbackRole, String methodName)
           Datastream locations are considered privileged information by the Fedora repository.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

dsRegistry

protected static Hashtable<String,DatastreamMediation> dsRegistry
The hashtable containing information required for datastream mediation.

Constructor Detail

DisseminationService

public DisseminationService(Server server)

Constructs an instance of DisseminationService. Initializes two class variables that contain the IP address and port number of the Fedora server. The port number is obtained from the Fedora server config file and the IP address of the server is obtained dynamically. These variables are needed to perform the datastream proxy service for datastream requests.

Method Detail

assembleDissemination

public MIMETypedStream assembleDissemination(Context context,
                                             String PID,
                                             Hashtable<String,String> h_userParms,
                                             DisseminationBindingInfo[] dissBindInfoArray,
                                             String deploymentPID,
                                             ServiceDeploymentReader bmReader,
                                             String methodName)
                                      throws ServerException

Assembles a dissemination given an instance of DisseminationBindingInfo which has the dissemination-related information from the digital object and its associated Service Deployment object.

Parameters:
context - The current context.
PID - The persistent identifier of the digital object.
h_userParms - A hashtable of user-supplied method parameters.
dissBindInfoArray - The associated dissemination binding information.
Returns:
A MIME-typed stream containing the result of the dissemination.
Throws:
ServerException - If unable to assemble the dissemination for any reason.

registerDatastreamLocation

public String registerDatastreamLocation(String dsLocation,
                                         String dsControlGroupType,
                                         String beServiceCallbackRole,
                                         String methodName)
                                  throws ServerException

Datastream locations are considered privileged information by the Fedora repository. To prevent disclosing physical datastream locations to external mechanism services, a proxy is used to disguise the datastream locations. This method generates a temporary ID that maps to the physical datastream location and registers this information in a memory resident hashtable for subsequent resolution of the physical datastream location. The servlet DatastreamResolverServlet provides the proxy resolution service for datastreams.

The format of the tempID is derived from java.sql.Timestamp with an arbitrary counter appended to the end to insure uniqueness. The syntax is of the form:

Parameters:
dsLocation - The physical location of the datastream.
dsControlGroupType - The type of the datastream.
Returns:
A temporary ID used to reference the physical location of the specified datastream
Throws:
ServerException - If an error occurs in registering a datastream location.

extractTimestamp

public String extractTimestamp(String tempID)

The tempID that is used for datastream mediation consists of a Timestamp plus a counter appended to the end to insure uniqueness. This method is a utility method used to extract the Timestamp portion from the tempID by stripping off the arbitrary counter at the end of the string.

Parameters:
tempID - The tempID to be extracted.
Returns:
The extracted Timestamp value as a string.

printBindingInfo

public static void printBindingInfo(DisseminationBindingInfo[] info)


Copyright © 2012 DuraSpace. All Rights Reserved.