#!/usr/bin/perl
#
# '$RCSfile: transfer_emldocs_from_metacat1_to_metacat2.pl,v $'
# Copyright: 2000 Regents of the University of California
#
# '$Author: sgarg $'
# '$Date: 2004/04/09 23:12:46 $'
# '$Revision: 1.1 $'
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
# This is a CGI application for inserting metadata documents into
# the Metacat database. It utilizes the Metacat.pm module for most work.
# You can specify two metacats and a list of documents. This script will
# copy documents from one metacat to another.
use Metacat;
my $metacat1;
my $docid;
my $rev;
my $error = 0;
my $xmldoc;
my $xa;
my $response;
my $listname = "kruger_docids";
my $metacat1_url = "http://dataknp.sanparks.org/sanparks/metacat";
my $username = "uid=judithk,o=SANParks,dc=ecoinformatics,dc=org";
my $password = "xxxxxx";
#my $metacat1_url = "http://fred.msi.ucsb.edu/metacat/metacat";
#my $username = "uid=leinfelder,o=NCEAS,dc=ecoinformatics,dc=org";
#my $password = "xxxxxx";
#used for inserting xml in the appropriate location
my $updatedcount = 0;
my $insertionindex;
#my $insertionmarker = "";
my $insertionmarker = "";
my $xmlsnippet = "";
$xmlsnippet .= "";
#$xmlsnippet .= "location";
$xmlsnippet .= "SANParks, South Africa";
$xmlsnippet .= "Kruger National Park, South Africa";
$xmlsnippet .= "";
$metacat1 = Metacat->new();
if ($metacat1) {
$metacat1->set_options( metacatUrl => $metacat1_url);
} else {
#die "failed during metacat creation\n";
print "Failed during metacat1 creation.";
$error = 1;
}
# Login to metacat
print "Connecting to metacat1..........\n";
my $response1 = $metacat1->login($username, $password);
if (! $response1) {
print $metacat1->getMessage();
print "Failed during login: metacat1.\n";
$error = 2;
} else {
print "Connected to metacat1\n";
}
if($error == 0){
open(file,$listname) || die ("Couldn't open the file");
while() {
chomp();
$docid = $_;
print "Original docid: $docid\n";
#get the document
$xmldoc = $metacat1->read($docid);
$xa = $xmldoc->content;
#construct the next docid revision
#three parts to the docid: scope.id.rev
@docidparts = split(/\./, $docid);
$rev = @docidparts[2];
$rev = $rev + 1;
print "next rev: $rev\n";
@docidparts[2] = $rev;
$docid = join('.', @docidparts);
print "Revised docid: $docid\n";
#check for the inserted data (maybe we did it already)
$insertionindex = index($xa, $xmlsnippet);
if ($insertionindex > 0) {
print "Already added the xml snippet to this doc\n";
next;
}
#insert the snippet
$insertionindex = index($xa, $insertionmarker);
if ($insertionindex > 0) {
#we want it after the end of the marker
$insertionindex += length($insertionmarker);
#construct the new xml with inserted elements
$xa = substr($xa, 0, $insertionindex) . $xmlsnippet . substr($xa, $insertionindex);
print "\n----------\n";
#print $xa;
#print "\n----------\n";
#send the updated document
$response = $metacat1->update($docid, $xa);
print $metacat1->getMessage();
$updatedcount++;
}
}
print "Updated $updatedcount documents\n";
} else {
print $error;
}