#-----------------------------------------------------------------------------
#
# $Id : Mamifest.pm 2.003 2005-04-30 JMG$
#
# Initial developer: Jean-Marie Gouarne
# Copyright 2005 by Genicorp, S.A. (www.genicorp.com)
# License:
# - Licence Publique Generale Genicorp v1.0
# - GNU Lesser General Public License v2.1
#
#-----------------------------------------------------------------------------
package OpenOffice::OODoc::Manifest;
use 5.006_001;
our $VERSION = 2.003;
use OpenOffice::OODoc::XPath 2.200;
our @ISA = qw ( OpenOffice::OODoc::XPath );
#-----------------------------------------------------------------------------
# constructor : calling OOXPath constructor with 'meta' as member choice
sub new
{
my $caller = shift;
my $class = ref ($caller) || $caller;
my %options =
(
utf8 => 1,
member => 'META-INF/manifest.xml',
element => 'manifest:manifest',
body_path => '/manifest:manifest',
@_
);
my $object = $class->SUPER::new(%options);
return $object ?
bless $object, $class :
undef;
}
#-----------------------------------------------------------------------------
# override the basic getBody() method; here the body is the root
sub getBody
{
my $self = shift;
return $self->getRootElement;
}
#-----------------------------------------------------------------------------
# retrieving an entry by content
sub getEntry
{
my ($self, $entry) = @_;
my @list = $self->getElementList('//manifest:file-entry');
foreach my $element (@list)
{
my $member = $self->getAttribute
($element, 'manifest:full-path');
next unless $member;
return $element if ($member eq $entry);
}
return undef;
}
#-----------------------------------------------------------------------------
# get the entry describing the OpenOffice.org mime type of the document
sub getMainEntry
{
my $self = shift;
return $self->getEntry('/');
}
#-----------------------------------------------------------------------------
# set the entry describing the OpenOffice.org mime type of the document
sub setMainEntry
{
my $self = shift;
return $element = $self->setEntry("/", @_);
}
#-----------------------------------------------------------------------------
# get the media type of a given entry
sub getType
{
my ($self, $entry) = @_;
my $element = $self->getEntry($entry);
return $element ?
$self->getAttribute($element, 'manifest:media-type') :
undef;
}
#-----------------------------------------------------------------------------
# get the media type of the main entry
sub getMainType
{
my $self = shift;
return $self->getType("/");
}
#-----------------------------------------------------------------------------
# remove an entry
sub removeEntry
{
my ($self, $entry) = @_;
my $element = $self->getEntry($entry);
return $element ?
$self->removeElement($element) :
undef;
}
#-----------------------------------------------------------------------------
# create a new entry
sub setEntry
{
my $self = shift;
my $entry = shift;
my $type = shift || '';
my $element = $self->getEntry($entry);
unless ($element)
{
$element = $self->appendElement
(
$self->getBody(),
'manifest:file-entry'
);
$self->setAttribute($element, 'manifest:media-type', $type);
$self->setAttribute($element, 'manifest:full-path', $entry);
}
else
{
$self->setAttribute($element, 'manifest:media-type', $type);
}
return $element;
}
#-----------------------------------------------------------------------------
1;