The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

# (C) 2004 Identity Commons.  All Rights Reserved.
# See LICENSE for licensing details

# Author: Fen Labalme <fen@idcommons.net>, <fen@comedia.com>

# Command line interface to XRI Resolver library
# a return value that starts with "$error:" indicates an error

use XRI 0.2.0;
use Getopt::Std;

$VERSION = '0.2.0';

# initialize options system
$Getopt::Std::STANDARD_HELP_VERSION = 1;
our ($opt_l, $opt_n, $opt_s, $opt_t);
getopts('lns:t:');

die "Usage: $0 [-n] [-l] [-s service] [-t type] XRI\n" unless $#ARGV == 0;

getLocalAccess( $ARGV[0] );

sub getLocalAccess {
    my $xri = shift;
    my $XRI = XRI->new($xri);

    eval {
        local (*STDERR) = stderr;
        if ( $opt_n ) {
            # FIXME: HACK: need to get logging done correctly in XRI library
            # FIXME: HACK: only turn on logging when option -d is given.
            open(DN, ">/dev/null") || die "Can't open /dev/null for writing\n";
            *STDERR = *DN;
        }
        if ( $opt_l || $opt_s || $opt_t ) {
            $XRI->resolveToLocalAccessURI($opt_s, $opt_t);
        }
        else {
            $XRI->resolveToAuthorityXML;
        }
    };
    if ( $@ ) {
        chomp $@;
        print "\$error: $@";
        exit 1;
    }
    if ( $opt_l || $opt_s || $opt_t ) {
        print $XRI->{localAccessURL};
    }
    else {
        print $XRI->{descriptorXML};
    }
    exit 0;
}
__END__
=head1 NAME

xriresolve.pl - CLI to Resolver for eXtensible Resource Identifiers

=head1 SYNOPSIS

xriresolve.pl [-n] [-l] [-s service] [-t type] XRI

=head1 ABSTRACT

This is the command line interface to the XRI Resolver library

=head1 DESCRIPTION

This is the command line interface to the XRI Resolver library.
In its default form (with no options) it returns (to STDOUT)
the XRI Descriptor for the Authority portion of the passed XRI.
Tracing information is written to STDERR.

A return value that begins with the string "$error: " indicates an
error.  Text following the $error string attempts to describe the
error, and is documented in the XRI library.

=head2 OPTIONS

B<-l>
    return the Local Access URI (as opposed to the XRIDescriptor XML,
    which is the current default behavior)

B<-n>
    argument to turn off tracing

B<-s service>
    return URI to Authority that matches service

B<-t type>
    return URI to Authority that matches type

=head1 TODO

=over 4

=item *

Note that when returning the XRI Descriptor, the local access URI
segment(s) - e.g. anything after the first forward slash - are lost.
Find them!

=item *

Once tracing is fixed in the XRI library, add a -d (debug) flag to
turn *on* tracing

=back

=head1 SEE ALSO

XRI(3)

Mailing list:
   http://idcommons.net/cgi-bin/mailman/listinfo/icdev

Identity Commons wiki:
    http://wiki.idcommons.net/

=head1 AUTHOR

Fen Labalme, E<lt>fen@idcommons.netE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright 2004 Identity Commons

See LICENSE.

=cut