Merge branch 'JABAWS_Release_2_5' into develop
[jabaws.git] / binaries / src / jpred / lib / Filelist.pm
diff --git a/binaries/src/jpred/lib/Filelist.pm b/binaries/src/jpred/lib/Filelist.pm
new file mode 100644 (file)
index 0000000..b37adce
--- /dev/null
@@ -0,0 +1,75 @@
+package Filelist;
+use strict;
+use warnings;
+use base qw(Root Read Write);
+
+sub read {
+       my ($self, $fh) = @_;
+
+       local $/ = "\n";
+       while (<$fh>) {
+               chomp;
+               my @files = split /\s+/, $_;
+               $self->add_files(@files);
+       }
+}
+
+sub add_files {
+       my ($self, @files) = @_;
+       push @{ $self->{__PACKAGE__."files"} }, \@files;
+}
+
+sub get_files {
+       my ($self, @list) = @_;
+       if (@list) { return @{ $self->{__PACKAGE__."files"} }[@list] }
+       else { return @{ $self->{__PACKAGE__."files"} } }
+}
+
+sub all_files {
+       my ($self) = @_;
+       $self->{__PACKAGE__."offset"} ||= 0;
+
+       my $files = $self->get_files( $self->{__PACKAGE__."offset"}++ );
+       defined $files or undef $self->{__PACKAGE__."offset"}, return;
+       return @{$files};
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Filelist - Reads in a list of files.
+
+=head1 SYNOPSIS
+
+Reads in a file containing a list of files per line and allows you to retrieve them easily.
+
+=head1 FILE EXAMPLE
+
+  foo0 bar0
+  foo1 bar1
+  foo2 bar2 moo2
+
+=head1 INHERITS
+
+Root, Read and Write.
+
+=head1 METHODS
+
+=head2 $list->read($filehandle)
+
+Reads in the filelist. Splits the lines in the file on whitespace to find the files.
+
+=head2 $list->add_files(@paths);
+
+Add your own files to an existing Filelist object.
+
+=head2 $list->get_files(@offsets)
+
+If @offsets is not an empty list, returns an AoA of the files. Otherwise returns all off the files as an AoA.
+
+=head2 $list->all_files()
+
+Itterator for retrieving all the files held by the object. Every call returns the files as from get_files() until all of the lines have been gone through, when it returns undef.