Catmandu-FedoraCommons

 view release on metacpan or  search on metacpan

lib/Catmandu/FedoraCommons.pm  view on Meta::CPAN


  # Or the low-level API-s
  use Catmandu::FedoraCommons;
  
  my $fedora = Catmandu::FedoraCommons->new('http://localhost:8080/fedora','fedoraAdmin','fedoraAdmin');
  
  my $result = $fedora->findObjects(terms=>'*');
  
  die $result->error unless $result->is_ok;
  
  my $hits = $result->parse_content();
  
  for my $hit (@{ $hits->{results} }) {
       printf "%s\n" , $hit->{pid};
  }
  
  # Or using the higher level Catmandu::Store codes you can do things like
  
  use Catmandu::Store::FedoraCommons;

  my $store = Catmandu::Store::FedoraCommons->new(
           baseurl  => 'http://localhost:8080/fedora',
           username => 'fedoraAdmin',
           password => 'fedoraAdmin',
           model    => 'Catmandu::Store::FedoraCommons::DC' # default
   );
   
  $store->bag->each(sub {
        my $model = shift;
        printf "title: %s\n" , join("" , @{ $model->{title} });
        printf "creator: %s\n" , join("" , @{ $model->{creator} });
        
        my $pid = $model->{_id};
        my $ds  = $store->fedora->listDatastreams(pid => $pid)->parse_content;
  });
   
  my $obj = $store->bag->add({ 
        title => ['The Master and Margarita'] , 
        creator => ['Bulgakov, Mikhail'] }
  );
  
  $store->fedora->addDatastream(pid => $obj->{_id} , url => "http://myurl/rabbit.jpg");
  
  # Add your own perl version of a descriptive metadata model by implementing your own
  # model that can do a serialize and deserialize.
  
=head1 DESCRIPTION

Catmandu::FedoraCommons is an Perl API to the Fedora Commons REST API (http://www.fedora.info/). 
Supported versions are Fedora Commons 3.6 or better. 

=head1 ACCESS METHODS

=cut
package Catmandu::FedoraCommons;

use Catmandu::FedoraCommons::Response;

our $VERSION = '0.274';
use URI::Escape;
use HTTP::Request::Common qw(GET POST DELETE PUT HEAD);
use LWP::UserAgent;
use MIME::Base64;
use strict;
use Carp;
use Data::Validate::URI qw(is_uri);

=head2 new($base_url,$username,$password)

Create a new Catmandu::FedoraCommons connecting to the baseurl of the Fedora Commons installation.

=cut
sub new {
    my ($class,$baseurl,$username,$password) = @_;
    
    Carp::croak "baseurl missing" unless defined $baseurl;
    
    my $ua = LWP::UserAgent->new(
                   agent   => 'Catmandu-FedoraCommons/' . $VERSION,
                   timeout => 180,
               );
    
    $baseurl =~ m/(\w+):\/\/([^\/:]+)(:(\d+))?(\S+)/;
              
    bless { baseurl  => $baseurl,
            scheme   => $1,
            host     => $2,
            port     => $4 || 8080,
            path     => $5,
            username => $username,
            password => $password,
            ua       => $ua} , $class;
}

sub _GET {
    my ($self,$path,$data,$callback,$headers) = @_;
    $headers = {} unless $headers;
        
    my @parts;
    for my $part (@$data) {
        my ($key) = keys %$part;
        my $name  = uri_escape($key) || "";
        my $value = uri_escape($part->{$key}) || "";
        push @parts , "$name=$value";
    }
    
    my $query = join("&",@parts);
   
    my $req = GET $self->{baseurl} . $path . '?' . $query ,  %$headers;
    
    $req->authorization_basic($self->{username}, $self->{password});
    
    defined $callback ?
        return $self->{ua}->request($req, $callback, 4096) :
        return $self->{ua}->request($req);
}

sub _POST {
    my ($self,$path,$data,$callback) = @_;
        
    my $content = undef;



( run in 0.733 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )