You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axkit-dev@xml.apache.org by jw...@apache.org on 2002/06/10 00:47:36 UTC
cvs commit: xml-axkit/lib/Apache/AxKit/Provider FileWrite.pm
jwalt 2002/06/09 15:47:36
Added: lib/Apache/AxKit/Provider FileWrite.pm
Log:
- added experimental FileWrite provider
Revision Changes Path
1.1 xml-axkit/lib/Apache/AxKit/Provider/FileWrite.pm
Index: FileWrite.pm
===================================================================
# $Id: FileWrite.pm,v 1.1 2002/06/09 22:47:36 jwalt Exp $
# file provider implementing write-back support
package Apache::AxKit::Provider::FileWrite;
@ISA = ('Apache::AxKit::Provider::File'); # inherit file methods
use strict;
use Apache::AxKit::Provider::File;
use Apache::AxKit::Exception;
use Fcntl;
sub get_fh {
my $self = shift;
if ($_[0] && !$self->_is_dir()) {
my $filename = AxKit::FromUTF8($self->{file});
my $fh = Apache->gensym();
if (sysopen($fh, $filename, O_WRONLY|O_CREAT|O_TRUNC)) {
return $fh;
}
throw Apache::AxKit::Exception::IO( -text => "Can't open '$self->{file}' for writing: $!" );
}
return $self->SUPER::get_fh(@_);
}
sub remove {
my $self = shift;
if (!unlink(AxKit::FromUTF8($self->{file}))) {
throw Apache::AxKit::Exception::IO( -text => "Can't remove '$self->{file}': $!" );
}
}
sub set_strref {
my $self = shift;
my $fh = $self->get_fh(1);
syswrite($fh,${$_[0]})
|| throw Apache::AxKit::Exception::IO( -text => "Can't write to '$self->{file}': $!" );
close($fh)
|| throw Apache::AxKit::Exception::IO( -text => "Can't write to '$self->{file}': $!" );
}
1;
__END__
=head1 NAME
Apache::AxKit::Provider::FileWrite - File provider class with write support
=head1 SYNOPSIS
Override the base ContentProvider class and enable it using:
AxContentProvider Apache::AxKit::Provider::FileWrite
Using this with the StyleProvider directive is not very useful at the
moment. This might change depending on processor features.
=head1 DESCRIPTION
Warning: This is experimental. It was included for testing purposes. The
API might change, or the module might be removed again.
This provider provides the bare minimum of write access. Use this like
any other provider.
This class supports the following additional interfaces:
=over 4
=item * $provider->get_fh(1)
Get a file handle for writing. The old contents of that file are
erased, if any. $provider->get_fh() or an explicit $provider->get_fh(0)
work like before. Directories are not currently supported.
=item * $provider->remove()
Remove the file from the filesystem.
=item * $provider->set_strref(\$text)
Store a string in the file, the opposite of $provider->get_strref().
=back
This is the minimum set of operations to manage files. If you need
locking, you have to implement that yourself. Metadata can be queried
through the AxHandleDirs extension, but cannot yet be set.
are no provisions for locking or metadata - you have to do that yourself.
These primitives are abstract enough to apply to other sources as well,
for example a XML database. If you implement other providers with write
support, please stick to this API.
=cut
=head1 AUTHOR
J�rg Walter <jw...@cpan.org>
=head1 SEE ALSO
AxKit, Apache::AxKit::Provider
=cut