package Config::PropertiesSequence;

=pod

=head1 NAME

Config::PropertiesSequence -  provides access to sequential properties loaded from properties file.

=head1 USAGE


my $props = Config::PropertiesSequence->new();

$props->load( *FH );

my @multipleSettings = $props->getPropertySequence( $prefix, @names );

returns settings prefixed by $prefix, numbered consecutively and suffixed with values
from @names.

eg when

my $prefix = "test.settings.multi";

my @names = qw(setting1 setting2);

then getPropertySequence will return

(
    {   setting1 => "abc", 
        setting2 => "def"   },
    {   setting1 => "ghi",
        setting2 => "jkl"   }
)

from a properties file containing

test.settings.multi.1.setting1=abc
test.settings.multi.1.setting2=def
test.settings.multi.2.setting1=ghi
test.settings.multi.2.setting2=jkl

=head1 NOTES

see L<Config::Properties>.

=head1 VERSION

$Id: PropertiesSequence.pm,v 1.2 2004/01/31 12:09:35 mark Exp $

=cut



use strict;
use warnings;

use base qw(Config::Properties);

use Carp qw(cluck);
use Carp::Assert;
use Data::Dumper;
use FileHandle;
use Config::Properties;

use constant DEFAULTMAXSEQUENCENUMBER => 100;

our $VERSION = sprintf "%d.%03d", q$Revision: 1.2 $ =~ /(\d+)/g;


BEGIN {
    my $MAXSEQUENCENUMBER = DEFAULTMAXSEQUENCENUMBER;
    sub setMaxSequenceNumber($){
        my $newMaxSequenceNumber = shift;
        $MAXSEQUENCENUMBER = $newMaxSequenceNumber;
    };
    sub getMaxSequenceNumber(){
        return $MAXSEQUENCENUMBER;
    }
};


sub getPropertySequence ($$@) {
    my __PACKAGE__ $self  = shift;
    my $prefix  = shift;
    my @searchFor = @_;

    my @props = ();
    my $ii;
    my $MAXSEQUENCENUMBER = getMaxSequenceNumber();

    for($ii = 1 ; $ii <= $MAXSEQUENCENUMBER ; $ii++ ){
        my %sequence = ();
        foreach my $searchFor(@searchFor){
            my $prop = $self->getProperty( "$prefix.$ii.$searchFor" );
            $sequence{$searchFor} = $prop if defined $prop;
        }
        last unless keys %sequence;
        push @props, \%sequence;
    }
    if($ii == $MAXSEQUENCENUMBER){
        cluck "maximum sequence number ".$MAXSEQUENCENUMBER." reached";
    }
    return @props;
    
}

1;