package APE::InputControllerFactory::ConcreteInputController::Template_InputController;

use base 'APE::InputControllerFactory::ConcreteInputController::InputController';

$APE::InputControllerFactory::ConcreteInputController::Template_InputController::VERSION = '0.1';

use strict;
use warnings;
use Carp;

use constant TRUE  => 1;
use constant FALSE => 0;

{
    my %_attributes = ();

    my %object;

    ## Autoloader wannabe. Inserts the sub calls that I want to be
    ## accessible into the symbol table.
    foreach my $attName (keys(%_attributes)) {
	no strict 'refs';
	*{__PACKAGE__ . "::get\u$attName"} = sub { $object{ $_[0] }->{$attName} }
    }


    #################################################################
    ## Initialise the objects private attributes. The argument is
    ## deleted as it is found, initialised and set.
    #################################################################
    sub _init {
	my ($self,%args) = @_;

	foreach my $attName (keys(%args)) {
	    if(exists($_attributes{$attName})) {
		$object{ $self }->{$attName} = delete $args{$attName};
	    }
	}
	
	$args{description} = "A template for the creation of a new ".
	    "concrete InputController class";

	return $self->SUPER::_init(%args);
    }

    
    #################################################################
    ## These methods need implementing from the abstract
    ## InputController class.
    #################################################################
    sub getData {
	my ($self,$requirement) = @_;
    }
    
    sub getSessionId {
	my $self = shift;
    }


}

1;
