File Coverage

blib/lib/XML/NewsML_G2/Writer/Package_Item.pm
Criterion Covered Total %
statement 42 42 100.0
branch 8 10 80.0
condition n/a
subroutine 10 10 100.0
pod 0 1 0.0
total 60 63 95.2


line stmt bran cond sub pod time code
1             package XML::NewsML_G2::Writer::Package_Item;
2              
3 18     18   131 use Moose;
  18         41  
  18         139  
4 18     18   123220 use Carp;
  18         45  
  18         1259  
5 18     18   124 use namespace::autoclean;
  18         41  
  18         156  
6              
7             extends 'XML::NewsML_G2::Writer';
8              
9             has 'package_item',
10             isa => 'XML::NewsML_G2::Package_Item',
11             is => 'ro',
12             required => 1;
13             has '+_root_node_name', default => 'packageItem';
14             has '_group_id',
15             isa => 'Num',
16             is => 'rw',
17             default => 0,
18             traits => ['Counter'],
19             handles => { _next_group_id => 'inc' };
20              
21             sub _build__root_item {
22 6     6   13 my $self = shift;
23 6         182 return $self->package_item;
24             }
25              
26             sub BUILD {
27 6     6 0 16 my $self = shift;
28 6         180 my $test_group = $self->scheme_manager->build_qcode( 'group', 'test' );
29 6 50       24 croak 'You need to register a scheme for groups' unless $test_group;
30 6         151 return;
31             }
32              
33             sub _create_item_meta_title {
34 6     6   21 my ( $self, $im ) = @_;
35 6         177 my $t = $self->package_item->title;
36 6 100       23 $im->appendChild( $self->create_element( 'title', _text => $t ) ) if $t;
37 6         14 return;
38             }
39              
40       6     sub _create_rights_info {
41             }
42              
43       6     sub _create_content_meta {
44             }
45              
46             sub _create_group {
47 11     11   77 my ( $self, $parent, $group, $id ) = @_;
48              
49 11         115 $parent->appendChild( my $result =
50             $self->create_element( 'group', id => $id ) );
51 11         29 $self->scheme_manager->add_role( $result, 'group', $group->role );
52              
53 11 100       262 if ( $group->mode ne 'bag' ) {
54 1         23 my ($mode) = $group->mode =~ /^(...)/;
55 1         23 my $qcode = $self->scheme_manager->build_qcode( 'pgrmod', $mode );
56 1 50       6 $result->setAttribute( 'mode', $qcode ) if $qcode;
57             }
58              
59 11         29 foreach my $item ( @{ $group->items } ) {
  11         260  
60 25 100       460 if ( $item->isa('XML::NewsML_G2::Group') ) {
61 5         173 my $group_id = 'group_' . $self->_next_group_id();
62              
63 5         19 $result->appendChild( my $child =
64             $self->create_element( 'groupRef', idref => $group_id ) );
65 5         15 $self->_create_group( $parent, $item, $group_id );
66              
67             }
68             else { # it's a News_Item
69 20         514 $result->appendChild(
70             my $child = $self->create_element(
71             'itemRef',
72             residref => $item->guid,
73             version => $item->doc_version
74             )
75             );
76 20         46 $child->appendChild( my $ic =
77             $self->create_element('itemClass') );
78 20         47 $self->scheme_manager->add_qcode( $ic, 'ninat', $item->nature );
79 20         552 $child->appendChild(
80             $self->create_element( 'title', _text => $item->title ) );
81             }
82             }
83 11         291 return;
84             }
85              
86             sub _create_content {
87 6     6   20 my ( $self, $root ) = @_;
88 6         176 my $main_id = $self->package_item->root_id;
89              
90 6         22 $root->appendChild( my $gs =
91             $self->create_element( 'groupSet', root => $main_id ) );
92              
93 6         18 $self->_create_group( $gs, $self->package_item->root_group, $main_id );
94 6         50 return;
95             }
96              
97             __PACKAGE__->meta->make_immutable;
98              
99             1;
100             __END__
101              
102             =head1 NAME
103              
104             XML::NewsML_G2::Writer::Package_Item - create DOM tree conforming to
105             NewsML-G2 for Package Items
106              
107             =for test_synopsis
108             my ($pi, $sm);
109              
110             =head1 SYNOPSIS
111              
112             my $w = XML::NewsML_G2::Writer::Package_Item->new
113             (package_item => $pi, scheme_manager => $sm);
114              
115             my $p = $w->create_element('p', class => 'main', _text => 'blah');
116              
117             my $dom = $w->create_dom();
118              
119             =head1 DESCRIPTION
120              
121             This module implements the creation of a DOM tree conforming to
122             NewsML-G2 for Package Items. Depending on the version of the standard
123             specified, a version-dependent role will be applied. For the API of
124             this module, see the documentation of the superclass L<XML::NewsML_G2::Writer>.
125              
126             =head1 ATTRIBUTES
127              
128             =over 4
129              
130             =item package_item
131              
132             L<XML::NewsML_G2::Package_Item> instance used to create the output document
133              
134             =back
135              
136             =head1 AUTHOR
137              
138             Philipp Gortan C<< <philipp.gortan@apa.at> >>
139              
140             =head1 LICENCE AND COPYRIGHT
141              
142             Copyright (c) 2014, APA-IT. All rights reserved.
143              
144             See L<XML::NewsML_G2> for the license.