package Lire::Report::Section; use strict; use Carp; use Lire::Utils qw/ xml_encode check_object_param /; =pod =head1 NAME Lire::Section - Interface to the content of the section's element. =head1 SYNOPSIS my $section = Lire::ReportParser::ReportBuilder( "report.xml" ); foreach my $s ( $report->sections() ) { print "Section: '", $s->title(), "' has ", scalar $s->subreports(), " subreports in it\n"; } =head1 DESCRIPTION This class offers an API to the section's elements of a Lire report. =head1 CONSTRUCTOR =head2 new( [$title] ) Creates a new Lire::Report::Section. The section's title will be set to the $title parameter if present. =cut sub new { my ( $class, $title ) = @_; return bless( { '_title' => $title || "Untitled", '_subreports' => [] }, $class ); } =pod =head1 OBJECT METHODS =head2 title( [$title] ) Returns the section's title, if it has one. The section's title will be changed $title if that parameter is set. =cut sub title { $_[0]{'_title'} = $_[1] if ( @_ == 2 ); return $_[0]{'_title'}; } =pod =pod =head2 description( [$description] ) Returns this section's description. The description is encoded in DocBook XML. If the $description parameter is set, this method will set this section's description to this new value. If the $description parameter is undef, that description will be removed. =cut sub description { $_[0]{'_description'} = $_[1] if ( @_ == 2 ); return $_[0]->{'_description'}; } =pod =head2 subreports() Returns the subreport's included in that section. This will be an array of Lire::Report::Subreport objects. =cut sub subreports { return @{$_[0]{'_subreports'}}; } =pod =head2 add_subreport( $subreport ) Adds a subreport to this report. The $subreport parameter should be a Lire::Report::Subreport object. =cut sub add_subreport { my ( $self, $subreport ) = @_; check_object_param( $subreport, 'subreport', 'Lire::Report::Subreport' ); croak "can't add a Subreport which doesn't have an id" unless $subreport->id(); push @{$self->{'_subreports'}}, $subreport; return; } =pod =head2 subreports_by_type( $type ) Returns all the subreports in this section of a the type $type. The subreport's type is the id of the report specification used to compute the reports. The subreports are returned as an array of Lire::Report::Subreport objects. =cut sub subreports_by_type { return grep { $_->type() eq $_[1] } $_[0]->subreports(); } sub write_report { my ( $self, $fh, $indent ) = @_; $fh ||= *STDOUT; my $pfx = ' ' x $indent; print $fh qq"$pfx\n"; print $fh "$pfx ", xml_encode( $self->{'_title'} ), "\n\n"; if ( $self->description() ) { print $fh "$pfx "; print $fh $self->description, "\n\n"; } foreach my $r ( $self->subreports() ) { $r->write_report( $fh, $indent + 1 ); } print $fh "$pfx\n"; return; } # keep perl happy 1; __END__ =pod =head1 SEE ALSO Lire::ReportParser::ReportBuilder(3pm) Lire::Report(3pm) Lire::Report::Subreport(3pm) Lire::Report::Entry(3pm) Lire::Report::Group(3pm) =head1 VERSION $Id: Section.pm,v 1.16 2006/07/23 13:16:31 vanbaal Exp $ =head1 COPYRIGHT Copyright (C) 2002 Stichting LogReport Foundation LogReport@LogReport.org This file is part of Lire. Lire is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (see COPYING); if not, check with http://www.gnu.org/copyleft/gpl.html. =head1 AUTHOR Francis J. Lacoste =cut