package Gestinanna::ContentProvider;
use Gestinanna::Request;
sub init {
my($class, %params) = @_;
my $self = bless { %params } => $class;
#warn "created $self\n";
#warn "params: ", join(", ", keys %params), "\n";
my $content = $self -> retrieve_content($params{filename});
return unless $self -> is_content_good($content);
$self -> {content} = $content;
return $self;
}
use Carp ();
sub retrieve_content {
my($self, $factory, $type, $filename);
my $R = Gestinanna::Request -> instance;
if(@_ > 2) {
Carp::cluck "retrieve_content called with deprecated number of arguments";
($factory, $type, $filename) = @_[1..3];
}
else {
$self = shift;
($factory, $type) = ($R -> factory, $self -> {type});
$filename = shift;
}
return $factory -> new($type => object_id => $filename);
}
sub is_content_good { $_[1] && $_[1] -> is_live }
sub may_exec { # checks for exec attribute
my $self = shift;
return unless $self -> {content};
return $self -> {content} -> has_access(undef, [qw(exec)])
}
sub mtime { time }
sub dom {
my $self = shift;
require XML::LibXML;
my $parser = XML::LibXML->new();
#$parser -> expand_entities(0);
my $doc;
# eval { $doc = $parser->parse_string(q{
#">
#]>
#} . ${$self -> content || \""}); };
eval { $doc = $parser->parse_string(${$self -> content || \""}); };
warn "$@\n" if $@;
return $doc;
}
1;
__END__