package RDF::AllegroGraph::Catalog3; use strict; use warnings; require Exporter; use base qw(RDF::AllegroGraph::Catalog); =pod =head1 NAME RDF::AllegroGraph::Catalog3 - AllegroGraph catalog handle for AGv3 =head1 SYNOPSIS # implementation of RDF::AllegroGraph::Catalog =cut use RDF::AllegroGraph::Repository3; use RDF::AllegroGraph::Utils; use JSON; use HTTP::Status; use Fcntl; use Data::Dumper; sub new { my $class = shift; my %options = @_; die "no NAME" unless $options{NAME}; die "no SERVER" unless $options{SERVER}; return bless \%options, $class; } sub repositories { my $self = shift; my $resp = $self->{SERVER}->{ua}->get ($self->{SERVER}->{ADDRESS} . '/catalogs' . $self->{NAME} . '/repositories'); die "protocol error: ".$resp->status_line unless $resp->is_success; my $repo = from_json ($resp->content); return map { RDF::AllegroGraph::Repository3->new (%$_, CATALOG => $self) } map { RDF::AllegroGraph::Utils::_hash_to_perl ($_) } @$repo; } sub repository { my $self = shift; my $id = shift; my $mode = shift || O_RDONLY; if (my ($repo) = grep { $_->id eq $id } $self->repositories) { return $repo; } elsif ($mode == O_CREAT) { (my $repoid = $id) =~ s|^/.+?/|/|; # get rid of the catalog name use HTTP::Request; my $requ = HTTP::Request->new (PUT => $self->{SERVER}->{ADDRESS} . '/catalogs' . $self->{NAME} . '/repositories' . $repoid); my $resp = $self->{SERVER}->{ua}->request ($requ); die "protocol error: ".$resp->status_line unless $resp->code == RC_NO_CONTENT; return $self->repository ($id); # recursive, but without forced create } else { die "cannot open repository '$id'"; } } sub version { my $self = shift; my $resp = $self->{SERVER}->{ua}->get ($self->{SERVER}->{ADDRESS} . '/catalogs' . $self->{NAME} . '/AGVersion'); die "protocol error: ".$resp->status_line unless $resp->is_success; return $resp->content =~ m/^"?(.*?)"?$/ && $1; } sub protocol { my $self = shift; my $resp = $self->{SERVER}->{ua}->get ($self->{SERVER}->{ADDRESS} . '/catalogs' . $self->{NAME} . '/protocol'); die "protocol error: ".$resp->status_line unless $resp->is_success; return $resp->content =~ m/^"?(.*?)"?$/ && $1; } our $VERSION = '0.04'; 1; __END__