File Coverage

blib/lib/XML/NewsML_G2/Writer/News_Message.pm
Criterion Covered Total %
statement 43 43 100.0
branch 8 10 80.0
condition n/a
subroutine 9 9 100.0
pod n/a
total 60 62 96.7


line stmt bran cond sub pod time code
1             package XML::NewsML_G2::Writer::News_Message;
2              
3 18     18   132 use XML::NewsML_G2::Writer::News_Item;
  18         50  
  18         566  
4 18     18   6667 use XML::NewsML_G2::Writer::Package_Item;
  18         79  
  18         735  
5 18     18   159 use XML::NewsML_G2::Writer::Event_Item;
  18         42  
  18         450  
6              
7 18     18   100 use Moose;
  18         36  
  18         133  
8 18     18   114984 use List::MoreUtils qw(uniq);
  18         46  
  18         222  
9 18     18   12145 use namespace::autoclean;
  18         45  
  18         194  
10              
11             extends 'XML::NewsML_G2::Writer';
12              
13             has 'news_message',
14             isa => 'XML::NewsML_G2::News_Message',
15             is => 'ro',
16             required => 1;
17             has '+_root_node_name', default => 'newsMessage';
18              
19             sub _build__root_item {
20 9     9   18 my $self = shift;
21 9         299 return $self->news_message;
22             }
23              
24             sub _create_header {
25 9     9   28 my ( $self, $root ) = @_;
26              
27 9         51 my $header = $self->create_element('header');
28 9         247 $header->appendChild(
29             $self->create_element(
30             'sent',
31             _text => $self->_formatter->format_datetime(
32             $self->news_message->sent
33             )
34             )
35             );
36 9         33 for my $dest ( @{ $self->news_message->destination } ) {
  9         553  
37 8 50       84 next unless $dest;
38 8         198 my %attr = ( '_text' => $dest->name );
39 8 100       183 $attr{role} = $dest->role if $dest->role;
40 8         30 $header->appendChild( $self->create_element( 'destination', %attr ) );
41             }
42              
43 9         150 $root->appendChild($header);
44 9         28 return;
45             }
46              
47             sub _create_itemSet {
48 9     9   24 my ( $self, $root ) = @_;
49 9         34 my $item_set = $self->create_element('itemSet');
50              
51 9         17 my $writer;
52 9         17 for my $item ( @{ $self->news_message->items } ) {
  9         239  
53 23 100       766 if ( $item->isa('XML::NewsML_G2::News_Item') ) {
    100          
    50          
54 17         478 $writer = XML::NewsML_G2::Writer::News_Item->new(
55             news_item => $item,
56             scheme_manager => $self->scheme_manager,
57             g2_version => $self->g2_version
58             );
59             }
60             elsif ( $item->isa('XML::NewsML_G2::Package_Item') ) {
61 4         96 $writer = XML::NewsML_G2::Writer::Package_Item->new(
62             package_item => $item,
63             scheme_manager => $self->scheme_manager,
64             g2_version => $self->g2_version
65             );
66             }
67             elsif ( $item->isa('XML::NewsML_G2::Event_Item') ) {
68 2         51 $writer = XML::NewsML_G2::Writer::Event_Item->new(
69             event_item => $item,
70             scheme_manager => $self->scheme_manager,
71             g2_version => $self->g2_version
72             );
73             }
74              
75 23         1762 $item_set->appendChild( $writer->create_dom()->documentElement() );
76             }
77 9         927 $root->appendChild($item_set);
78 9         29 return;
79             }
80              
81             override '_create_root_element' => sub {
82             my $self = shift;
83              
84             my $root =
85             $self->doc->createElementNS( $self->g2_ns, $self->_root_node_name );
86             $self->doc->setDocumentElement($root);
87             return $root;
88             };
89              
90             override 'create_dom' => sub {
91             my $self = shift;
92             $self->_import_iptc_catalog();
93              
94             my $root = $self->_create_root_element();
95             $self->_create_header($root);
96             $self->_create_itemSet($root);
97              
98             return $self->doc;
99             };
100              
101             __PACKAGE__->meta->make_immutable;
102              
103             1;
104             __END__
105              
106             =head1 NAME
107              
108             XML::NewsML_G2::Writer::News_Message - create DOM tree conforming to
109             NewsML-G2 for News Messages
110              
111             =for test_synopsis
112             my ($nm, $sm);
113              
114             =head1 SYNOPSIS
115              
116             my $w = XML::NewsML_G2::Writer::News_Message->new
117             (news_message => $nm, scheme_manager => $sm);
118              
119             my $dom = $w->create_dom();
120              
121             =head1 DESCRIPTION
122              
123             This module implements the creation of a DOM tree conforming to
124             NewsML-G2 for News messages. Depending on the version of the standard
125             specified, a version-dependent role will be applied. For the API of
126             this module, see the documentation of the superclass L<XML::NewsML_G2::Writer>.
127              
128             =head1 ATTRIBUTES
129              
130             =over 4
131              
132             =item news_message
133              
134             L<XML::NewsML_G2::News_Message> instance used to create the output document
135              
136             =back
137              
138             =head1 AUTHOR
139              
140             Philipp Gortan C<< <philipp.gortan@apa.at> >>
141              
142             =head1 LICENCE AND COPYRIGHT
143              
144             Copyright (c) 2014, APA-IT. All rights reserved.
145              
146             See L<XML::NewsML_G2> for the license.