#!/usr/bin/perl

use DataOneLdap;
use strict;

use Getopt::Long();

sub usage {
   my $message = $_[0];
   if (defined $message && length $message) {
      $message .= "\n"
         unless $message =~ /\n$/;
   }

   my $command = $0;
   $command =~ s#^.*/##;

   print STDERR (
      $message,
      "usage: $command [--help] --id nodeId --subject\n" 
   );

   die("\n")
}

my $nodeid;
my $subject;
my $help;

Getopt::Long::GetOptions(
   'id=s' => \$nodeid,
   'subject=s' => \$subject,
   'help!' => \$help
) or usage("Invalid commmand line options.");
 
usage() if (defined $help);

usage("The identifier of the node must be specified.")
   unless (defined $nodeid) ;

usage("The new subject of the node must be specified.")
   unless (defined $subject) ;

my $d1Ldap = new DataOneLdap();

my $ldap = $d1Ldap->connect();

my $mesg = $ldap->search(filter=>"(cn=$nodeid)", base=>"dc=dataone,dc=org");

my @entries = $mesg->entries;
foreach my $entry (@entries) 
	{
	my $dn = $entry->dn();
	print "DN = $dn new subject $subject\n ";
	$mesg = $ldap->modify($dn, replace => {'subject' => [$subject]});
	$mesg->done && print "replaced entry: $subject\n" ;	
	$mesg->code && warn "failed to replace entry: ", $mesg->error ;	
	}

$ldap->unbind;