#include module RAP { const string VERSION = "Version 1.0"; //************************************************************** // Forward declarations //************************************************************** interface Repository; interface DigitalObject; interface DataStream; interface StandardDisseminator; interface ServletDisseminator; interface SignatureDisseminator; interface AccessControl; //*************************************************************** // TYPE DEFINITIONS //*************************************************************** typedef string MIME; typedef string URN; typedef sequence ByteStream; typedef string DataStreamID; typedef URN DigitalObjectID; typedef URN SignatureID; // URN of a signature DigitalObject typedef URN ServletID; // URN of a servlet DigitalObject typedef ByteStream SessionID; // For maintaining current context typedef ByteStream AttachmentSpec; typedef sequence DataStreamIDList; typedef sequence DataStreamList; typedef sequence DigitalObjectIDList; typedef sequence DisseminatorTypeList; //**************************************************************** // GENERAL REPOSITORY EXCEPTION //**************************************************************** exception RepositorySystemError { long ExceptionCode; string ExceptionString; }; //****************************************************************** // CURRENT CONTEXT OF REPOSITORY // Note: just a stub at this point //****************************************************************** struct CurrentContext { string userID; SessionID sessionID; string IPaddr; }; //*************************************************************** // DISSEMINATION REQUEST //*************************************************************** struct NamedTypedValue { string name; any typedValue; }; struct MethodRequest // DisseminationMethodRequest??? { string methodName; sequence parameters; }; //************************************************************** // DISSEMINATION RESULT //************************************************************** struct ResultHolder { MIME MIMEType; ByteStream resultData; }; typedef sequence Dissemination; //************************************************************** // SIGNATURE //************************************************************** struct NamedType { string name; TypeCode typecode; }; struct MethodSignature { string methodName; sequence parameterTypes; Dissemination resultType; // awkward: null in context of signature }; typedef sequence Signature; //************************************************************** // SERVLET //************************************************************** struct Servlet { MIME MIMEType; // type of executable ByteStream servletStream; }; //************************************************************ // Disseminator //************************************************************ struct DisseminatorID { SignatureID signatureID; string disseminatorName; }; typedef sequence DisseminatorIDList; enum DisseminatorKind { DISSEMINATOR_SERVLET, DISSEMINATOR_SIGNATURE, DISSEMINATOR_STANDARD }; union Disseminator switch(DisseminatorKind) { case DISSEMINATOR_SERVLET : ServletDisseminator servletDisseminator; case DISSEMINATOR_SIGNATURE : SignatureDisseminator signatureDisseminator; case DISSEMINATOR_STANDARD : StandardDisseminator standardDisseminator; }; typedef sequence DisseminatorList; //******************************************** // Structure for attaching one or more // DataStreams to a Disseminator //******************************************** struct AttachedDataStream { string logicalName; DataStream dataStream; }; typedef sequence AttachedDataStreamList; //********************************************* // StandardDisseminator //********************************************* interface StandardDisseminator { DisseminatorID GetDisseminatorID() raises (RepositorySystemError); ServletID GetServletID() raises (RepositorySystemError); AttachedDataStreamList GetAttachedDataStreams() raises (RepositorySystemError); void SetAttachedDataStreams( in AttachedDataStreamList attachmentList) raises (RepositorySystemError); void DeleteAttachedDataStreams(in AttachedDataStreamList attachmentList) raises (RepositorySystemError); }; //************************************************ // ServletDisseminator //************************************************ interface ServletDisseminator : StandardDisseminator { const string DISSEMINATOR_ID_SIGNATURE_ID = "SERVLET_DISSEMINATOR"; const string DISSEMINATOR_ID_DISSEMINATOR_NAME = "SERVLET"; const string ATTACHMENT_NAME = "SERVLET"; //SignatureID GetSignatureID() raises (RepositorySystemError); Servlet GetServlet() raises (RepositorySystemError); AttachmentSpec GetAttachmentSpecification() raises (RepositorySystemError); }; //************************************************ // SignatureDisseminator //*********************************************** interface SignatureDisseminator : StandardDisseminator { const string DISSEMINATOR_ID_SIGNATURE_ID = "SIGNATURE_DISSEMINATOR"; const string DISSEMINATOR_ID_DISSEMINATOR_NAME = "SIGNATURE"; const string ATTACHMENT_NAME = "SIGNATURE"; Signature GetSignature() raises (RepositorySystemError); }; //****************************************************************** // DATASTREAM //****************************************************************** struct DSKeyMetadata { MIME MIMEType; string descriptor; long size; string dateDeposited; string dateLastRevised; }; enum WriteBytesMode { APPEND, OVERWRITE }; interface DataStream { DataStreamID GetDataStreamID() raises (RepositorySystemError); MIME GetMIMEType() raises (RepositorySystemError); DSKeyMetadata GetKeyMetadata() raises (RepositorySystemError); ByteStream GetBytes( in long length, in long offset) raises (RepositorySystemError); long WriteBytes( in long bufferLength, in long absoluteDataStreamOffset, in WriteBytesMode mode, in ByteStream buffer) raises (RepositorySystemError); }; //****************************************************************** // DIGITAL OBJECT //****************************************************************** struct DOKeyMetadata // administrative attributes for DigitalObject { string dateCreated; string dateLastRevised; }; interface DigitalObject { DigitalObjectID GetDigitalObjectID() raises (RepositorySystemError); DOKeyMetadata GetKeyMetadata() raises (RepositorySystemError); // Structural Access Methods DataStreamIDList ListDataStreamIDs() raises (RepositorySystemError); DataStream GetDataStream(in DataStreamID dataStreamID) raises (RepositorySystemError); DataStreamList GetDataStreams() raises (RepositorySystemError); DisseminatorIDList ListDisseminatorIDs() raises (RepositorySystemError); Disseminator GetDisseminator(in DisseminatorID disseminatorID) raises (RepositorySystemError); DisseminatorList GetDisseminators() raises (RepositorySystemError); // Extensible Access Methods DisseminatorTypeList ListDisseminatorTypes() raises (RepositorySystemError); Signature GetDisseminatorTypeMethods(in SignatureID disseminatorType) raises (RepositorySystemError); Dissemination GetDissemination(in DisseminatorID disseminatorID, in MethodRequest request) raises (RepositorySystemError); // Factory Methods DataStream CreateDataStream ( in MIME MIMEType, in string descriptor, in ByteStream data ) raises (RepositorySystemError); void DeleteDataStream(in DataStreamID dataStreamID) raises (RepositorySystemError); Disseminator CreateDisseminator( in DisseminatorID disseminatorID, in ServletID servletID, in DisseminatorKind enumKind) raises (RepositorySystemError); void DeleteDisseminator( in DisseminatorID disseminatorID) raises (RepositorySystemError); }; //****************************************************************** // REPOSITORY //****************************************************************** interface Repository : DigitalObject { // Future: Repository Key Metadata? string GetVersion() // RAP version raises (RepositorySystemError); SessionID GetSessionID(in string userID) raises (RepositorySystemError); CurrentContext GetCurrentContext(in SessionID sessionID) raises (RepositorySystemError); // Access Methods long VerifyDigitalObject(in DigitalObjectID digitalObjectID) raises (RepositorySystemError); DigitalObjectIDList ListDigitalObjectIDs( in string filter) // filter: simple string search on URN raises (RepositorySystemError); DigitalObject GetDigitalObject(in DigitalObjectID digitalObjectID) raises (RepositorySystemError); // Factory Methods DigitalObject CreateDigitalObject(in DigitalObjectID digitalObjectID) raises (RepositorySystemError); void DeleteDigitalObject(in DigitalObjectID digitalObjectID) raises (RepositorySystemError); }; //****************************************************************** // ACCESS CONTROL (future use) //****************************************************************** interface AccessControl { string GetAccessControlType() raises (RepositorySystemError); }; }; // END OF MODULE RAP