/**
 * DRIVER project 2006-2007
 * 
 * file		:	A2Service.java
 * package	: 	eu.dnetlib.enabling.aas.rmi
 * project	:	driver-aa
 * created	:	2006-09-04
 * author	:	jarwyp
 */
package eu.dnetlib.enabling.aas.rmi;

import javax.jws.WebService;

import eu.dnetlib.enabling.aas.nh.rmi.INotificationHandler;
import eu.dnetlib.enabling.aas.validator.rmi.IProfileValidator;

/**
 * Interface of the A2Service.
 * It is able to authenticate, authorize and manage security profiles.
 * 
 * @author jarwyp
 *
 */
@WebService
public interface A2Service extends INotificationHandler, IProfileValidator {
	
	/**
	 * Realizes the authentication functionality of the AAS.
	 * Returns <code>AuthenticateResp</code> object.
	 * 
	 * authenticate:
	 * 	IN: principal
	 * 	IN: credentials
	 * 	OUT: ContextID
	 * 	OUT: SecurityContext profile (timeout set, ...)
	 * @param request authentication request object
	 * @return authentication response object
	 */
	public AuthenticateResp authenticate(AuthenticateRequest request);
	
	/**
	 * Realizes the authorization functionality of the AAS.
	 * Returns <code>AuthorizeResp</code> object.
	 * 
	 * authorize:
	 * 	IN: caller ContextID
	 * 	IN: callee ContextID
	 * 	IN: function specfication
	 * 	IN: parameters specification
	 * 	OUT: access policy (yes/no/errors)
	 * @param request authorization request object
	 * @return authorization response object
	 */
	public AuthorizeResp authorize(AuthorizeRequest request);

	/**
	 * Realizes the invalidation functionality of the AAS.
	 * Returns <code>InvalidateResp</code> object.
	 * 
	 * invalidate:
	 * 	IN: caller ContextID
	 * 	IN: profile owner (resource) identity
	 * 	OUT: invalidation result
	 * @param request invalidation request object
	 * @return invalidation response object
	 */
	public InvalidateResp invalidate(InvalidateRequest request);
	
	/**
	 * Identifies current AAS version.
	 * Version syntax: ${NAME}-${MAJOR}.${MINOR}.${MICRO}[-${LABEL}]
	 * @return
	 */
	public String identify();
}
