package net.deterlab.abac;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
/**
* This class parses or generates credentials. The parser produces one or more
* Credentials. The generator produces exactly one credential. Each class that
* wants to be parsed and generated needs to export a static method that
* returns one of these. For credentials that parse 1 credential to 1 input it
* will be a wrapper around a constructor.
* @author ISI ABAC team
* @version 1.4
*/
public abstract class CredentialFactorySpecialization {
/**
* Parse one or more Credentials from the given input and IDs. The
* sub-type of Credential returned is up to this class.
* @param is an InputStream to be parsed
* @param ids a Collection of Identity s to use in validating credentials.
* @return an array of Credentials
* @throws ABACException on parsing problems
*/
public abstract Credential[] parseCredential(InputStream is,
Collection ids) throws ABACException;
/**
* Return an object derived from a credential with the given roles.
* @param head a Role, the head of the encoded ABAC statement
* @param tail a Role, the tail of the decoded ABAC statement
* @return a Credential encoding that ABAC statement
*/
public abstract Credential generateCredential(Role head, Role tail);
}