/* Generated by Together */

#ifndef _AG_ACTIVATIONFACTORY_H_
#define _AG_ACTIVATIONFACTORY_H_

namespace OnlineActivation
{

/**
 * Activation factory interface.
 * Allows clients to compose activation requests.
 * @interface
 */
class __declspec(novtable) ActivationFactory
{
public:

	/**
	 * Composes activation request.
	 * This method should be used when customer is not yet registered.
	 * @param[in] appId application identifier.
	 * @param[in] actCode activation code.
	 * @exception ActivationError error code specifies exception reason.
	 * @return composed activation Request object.
	 */
	virtual boost::shared_ptr<Request> ComposeRequest
	(
		const ApplicationId& appId,
		const ActivationCode& actCode
	) = 0;

	/**
	 * Composes activation request.
	 * This method should be used when customer is already registered.
	 * @param[in] appId application identifier.
	 * @param[in] actCode activation code.
	 * @param[in] custId customer identifier.
	 * @exception ActivationError error code specifies exception reason.
	 * @return composed activation Request object.
	 */
	virtual boost::shared_ptr<Request> ComposeRequest
	(
		const ApplicationId& appId,
		const ActivationCode& actCode,
		const CustomerId& custId
	) = 0;

protected:

	/**
	 * Destruction via delete is not allowed. 
	 */
	~ActivationFactory() {}

	/** @link dependency 
	 * @stereotype instantiate*/
	/*# Request lnkRequest; */
};

} // namespace OnlineActivation


#endif //_AG_ACTIVATIONFACTORY_H_
