/********************************************************************
* API for Servlets and SignatureGenerators in RAP
*  enabling extensible behaviors for RAP Digital Objects
* RAP - Repository Access Protocol
********************************************************************/
package ServletAPI;

/**
 * This interface must be implemented by all RAP SignatureGenerators. 
 * 
 * A RAP SignatureGenerator is an executable mechanism allowing a
 * RAP Digital Object to disseminate a RAP TypeSignature. A RAP TypeSignature
 * defines a behavior interface for RAP Digital Objects via an array of
 * MethodSignatures.  This behavior interface, or TypeSignature, can be 
 * implemented by one or more RAP Servlets.
 *
 * For a SignatureGenerator executable file (e.g. a java class file or a jar
 * file implementing this interface) to become a functional RAP Digital Object,
 * the executable must be put into a RAP Digital Object as a DataStream.  Next 
 * a single disseminator of type SignatureDisseminator must be added to the RAP 
 * Digital Object.  Lastly, the DataStream containing the SignatureGenerator 
 * executable must be attached to the SignatureDisseminator with the 
 * SetSignatureGeneratorExecutable() method.
 *
 * @author Christophe Blanchi
 * @author Sandy Payette
 * @author Naomi Dushay
 **/
public interface SignatureGenerator
{
    /**
     * @return the URN (as a string) of the RAP Digital Object containing this
     *  SignatureGenerator.  In other words, this is the ID of the RAP Digital
     *  Object that disseminates the TypeSignature produced by this 
     *  SignatureGenerator
     **/
    public String GetTypeSignatureID()
        throws ServletAPIException;

    /**
     * @return a brief description of the TypeSignature as a string
     **/
    public String GetTypeSignatureDescriptor()
        throws ServletAPIException;

    /**
     * @return the TypeSignature produced by this SignatureGenerator.
     *  A TypeSignature is a list of MethodSignatures.  It describes a
     *  behavior interface (a Disseminator Type) for a RAP Digital Object.
     **/
    public ServletAPI.MethodSignature[] GetTypeSignature()
        throws ServletAPIException;
}