){
if ($m =~ /Administrative Information *<\/h3>/){
push (@level1, $m);
$level = 2;
}
elsif ($m =~ /Collection Level Metadata *<\/h3>/){
push (@level2, $m);
$level = 3;
}
elsif ($m =~ /Metadata *<\/h3>/){
# push (@level3, $m); # add these headers later
$itemMDexists = 1;
$level = 4;
}
elsif ($m =~ /Transcripts *<\/h3>/){
$transcriptsExist = 1;
$level = 5;
}
elsif ($m =~ /Content *<\/h3>/){
$level = 6;
}
elsif ($level == 1){ push(@level1, $m);}
elsif ($level == 2){ push(@level2, $m);}
elsif ($level == 3){ push(@level3, $m);}
elsif ($level == 4){ push(@level4, $m);}
elsif ($level == 5){ push(@level5, $m);}
elsif ($level == 6){ push(@level6, $m);}
}
close(MAN);
# now, start to rewrite it:
if (! $test){
open (OUT, ">".$manifest) or die "can't write to $manifest\n";
}
foreach (@level1){ print OUT $_;}
}
else{
if (! $test){ open(OUT, ">".$manifest) or warn "can't open $manifest to write.\n";}
$head = '
'.$title.' Manifest Page
';
$tail = '
LOCKSS system has permission to collect, preserve, and serve this Archival Unit
';
print OUT $head;
}
# now, move other content from the admin folder
opendir(ADMIN, $admindir) or warn "can't open $admindir\n";
if ($newbie){ print OUT " Administrative Information
\n";}
while ($file = readdir(ADMIN)){
if ($file =~ /^\./){ next;} # skip dot files
# very specific xml files accepted ONLY
if ($file =~ /$collnum\.xml/ || $file =~ /$collnum\.\d{1,2}\.xml/){ # accommodates collection number
# also collnum.2.xml, collnum.3.xml, etc
$old = $admindir."/".$file;
$new = $docdir."/".$file;
$val = 1;
if ( -e $new){
$val = `diff $old $new`;
}
if ($val){ # if they differ, keep the new one.
# do NOT link in the default file name, as the content may change
©this ($old, $new, $file, 0);
$version = 1;
($v = $file) =~ s,\.xml,\.v$version\.xml,; # add .v1 before extension
print "version will be $v\n";
$newv = $docdir."/".$v;
while ( -e $newv){ # keep incrementing version # till you find one that doesn't exist
$version ++;
($v = $file) =~ s,\.xml,\.v$version\.xml,; # add .v1 before extension
print "version will be $v\n";
$newv = $docdir."/".$v;
}
# link in the v1 -- in later versions, look to see what version we're creating
©this ($old, $newv, $v, 1);
}
}
elsif ($file =~ /\.txt/ || $file =~ /\.rtf/ ){
$old = $admindir."/".$file;
$new = $docdir."/".$file;
# do NOT put these in LOCKSS
©this ($old, $new, $file, 0);
}
elsif ($file =~ /(\.png)/ || $file =~ /(\.jpg)/ || $file =~ /(\.gif)/ || $file =~ /(\.tif)/){
$newfile = $collnum.".icon".$1; #fred.jpg becomes u0003_0000002.icon.jpg
if ($newfile ne $file){
print " should we rename $file to $newfile?\n";
}
push (@iconlist, $admindir."/".$file); #$docdir.$newfile); # print this later
$old = $admindir."/".$file;
$new = $docdir."/".$file;
©this ($old, $new, $file, 0);
$version = 1;
($v = $file) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
$newv = $docdir."/".$v;
while ( -e $newv){ # keep incrementing version # till you find one that doesn't exist
$version ++;
($v = $file) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
print "version will be $v\n";
$newv = $docdir."/".$v;
}
©this ($old, $newv, $v, 1);
}
else{
if ($file ne "Thumbs.db"){
print "NOT SAVING $collnum admin $file\n";
}
}
}
close (ADMIN);
if ($newbie){
print OUT "
\n";
}
else{
foreach (@level2){ print OUT $_;} # this prints the rest of the existing Admin data, and starts the
# collection level metadata section
}
# next, metadata
if (-e $oldMDdir){
undef $metsdir;
undef $didOne;
opendir(MD, $oldMDdir) or die "can't open $oldMDdir\n";
if ($newbie){ print OUT " Collection Level Metadata
\n";}
while ($file = readdir(MD)){
if ($file =~ /^\./){ next;} # skip dot files
# watch out for item-level metadata.
if ($file =~ /(\.txt)/ || $file =~ /(\.xml)/){
$ext = $1;
# watch out for item-level metadata. Incorporate ETD section when we're ready to store
# untested item-level MODS.
if ($file =~ /$collnum(\.\d{1,2})?\.txt$/ || $file =~ /$collnum(\.\d{1,2})?\.xml$/){
$old = $oldMDdir."/".$file;
$new = $newMDdir."/".$file;
©this ($old, $new, $file, 0);
$version = 1;
($v = $file) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
$newv = $newMDdir."/".$v;
while ( -e $newv){ # keep incrementing version # till you find one that doesn't exist
$version ++;
($v = $file) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
print "version will be $v\n";
$newv = $newMDdir."/".$v;
}
©this ($old, $newv, $v, 1);
}
# gets MODS
elsif ($file =~ /$collnum(\_\d{7}(\_\d{4})?(\_\d{3})?)(\.mods\.xml)/){
$myplace = $1;
$ext = $4;
# take
off the array for level 4 if there's already item-level metadata from earlier
if ($itemMDexists && ! $didOne){ $closer = pop(@level4); $didOne = 1; print "Removed $closer from level 4 array\n";}
($dirpath = $myplace) =~ s,\_,\/,g; # trade underscores for slashes
$thisMDdir = $collbase.$dirpath."/Metadata";
if (! -e $thisMDdir){ `mkdir -p $thisMDdir`;}
$newfile = $file;
$thisMDdir =~ s,\/\/,\/,g;
print "item level mods: $file going to $thisMDdir as $newfile\n";
$old = $oldMDdir."/".$file;
$new = $thisMDdir."/".$newfile;
undef $val;
if (-e $new){
$val = `diff $old $new`;
# print "Diff value -->$val<-- for $path versus $new\n";
}
if ($val){ # check file dates.
undef $dateAver; # archive version
undef $dateDver; # deposit version
open (AVER, $new) or die "can't look in $new\n";
# this will get the last recordChange date listed, if there is one
while ($line = ){
if ($line =~ /]*> *([^<]*) *<\/recordCreationDate>/){
$thisdate = $1;
if (!$dateAver){ $dateAver = $thisdate;}
elsif ($thisdate > $dateAver){ $dateAver = $thisdate;}
}
elsif ($line =~ /]*> *([^<]*) *<\/recordChangeDate>/){
$thisdate = $1;
if (!$dateAver){ $dateAver = $thisdate;}
elsif ($thisdate > $dateAver){ $dateAver = $thisdate;}
}
}
close(AVER);
open (DVER, $old) or die "can't look in $old\n";
while ($line = ){
if ($line =~ /]*> *([^<]*) *<\/recordCreationDate>/){
$thisdate = $1;
if (!$dateDver){ $dateDver = $thisdate;}
elsif ($thisdate > $dateDver){ $dateDver = $thisdate;}
}
elsif ($line =~ /]*> *([^<]*) *<\/recordChangeDate>/){
$thisdate = $1;
if (!$dateDver){ $dateDver = $thisdate;}
elsif ($thisdate > $dateDver){ $dateDver = $thisdate;}
push (@adates, $1);
}
}
close(DVER);
print "comparing deposit date of $dateDver and archive date of $dateAver\n";
if ($dateDver > $dateAver){ print "Deposited version of $file is newer than the archive version!\n";}
else{ print "Deposited version of $file is NOT newer than the archive version\n"; undef $val;}
}
if ((! -e $new) || ($val)){
# print "$new already exists! overwriting and versioning\n";
©this ($old, $new, $file, 0); # not linking these right now
$version = 1;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
$newv = $thisMDdir."/".$v;
while ( -e $newv){ # keep incrementing version # till you find one that doesn't exist
$version ++;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
# print "version will be $v\n";
$newv = $thisMDdir."/".$v;
}
if ($myplace){ # item-level metadata
# print "at this point, myplace = $myplace\n";
©this ($old, $newv, $v, 1, 4); # last says put this on level 4 of manifest
}
else{ # collection level
©this ($old, $newv, $v, 1, 3);
}
}
} # end if MODS
elsif ($file =~ /$collnum\_\d{7}((\_\d{4})?(\_\d{3})?)/){
$myplace = $1;
($dirpath = $myplace) =~ s,\_,\/,g; # trade underscores for slashes
$thisMDdir = $collbase.$dirpath."/Metadata/";
if (! -e $thisMDdir){ `mkdir -p $thisMDdir`;}
$newfile = $collnum.$myplace.$ext;
print "ERROR!! item level metadata??: $file going to $thisMDdir as $newfile\n";
$old = $oldMDdir."/".$file;
$new = $thisMDdir."/".$newfile;
# print MOVE "$oldMDdir/$file $newMDdir/$newfile\n";
©this ($old, $new, $file, 0); # not linking these right now
}
# watch out for eads!!
elsif ($file =~ /($collnum\.ead)\.xml/){
$myname = $1;
# print MOVE "$oldMDdir/$file $newMDdir/$file\n";
if (! -e $newMDdir){ `mkdir -p $newMDdir`;}
$newfile = $myname.$ext;
$old = $oldMDdir."/".$file;
$new = $newMDdir."/".$newfile;
# check eadid
open (EAD, $old) or die "can't read $old\n";
undef @myead;
undef $found;
while ($line = ){
if ($line =~ / *<\/eadid>/){
$line = " $collnum\n";
$found = 1;
}
push (@myead, $line);
}
close(EAD);
if ($found){ # need to repair the file
open (EAD, ">".$old) or die "can't write to $old\n";
foreach (@myead){ print EAD $_;}
close(EAD);
}
if (-e $new){ print "ERROR! $newfile already exists!\n";}
else{
©this ($old, $new, $file, 0); # not linking these right now
}
$version = 1;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
$newv = $newMDdir."/".$v;
while ( -e $newv){ # keep incrementing version # till you find one that doesn't exist
$version ++;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
print "version will be $v\n";
$newv = $newMDdir."/".$v;
}
©this ($old, $newv, $v, 1);
}
elsif ($file =~ /$collnum(\.\d{1,2})?/){ # if .1.txt
$added = $1;
# print MOVE "$oldMDdir/$file $newMDdir/$file\n";
if (! -e $newMDdir){ `mkdir -p $newMDdir`;}
$newfile = $collnum.$added.$ext; # retains added number
$old = $oldMDdir."/".$file;
$new = $newMDdir."/".$newfile;
if (-e $new){ print "ERROR! $newfile already exists!\n";}
else{
©this ($old, $new, $newfile, 0); # linking these right now
}
$version = 1;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
$newv = $newMDdir."/".$v;
while ( -e $newv){ # keep incrementing version # till you find one that doesn't exist
$version ++;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
print "version will be $v\n";
$newv = $newMDdir."/".$v;
}
©this ($old, $newv, $v, 1);
}
else{ #renaming it as collection metadata. Beware! if more than one file... extra versions
$newfile = $collnum.$ext; #descriptiveMetadata.txt becomes u0003_0000002.txt
$old = $oldMDdir."/".$file;
$new = $newMDdir."/".$newfile;
if (-e $new){ print "ERROR! $newfile already exists!\n";}
else{ ©this ($old, $new, $newfile, 0);}
if ($newfile ne $file){print "just renamed $file to $newfile, but not linking it\n";}
else{ # we want to link a version of this
$version = 1;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
$newv = $newMDdir."/".$v;
while ( -e $newv){ # keep incrementing version # till you find one that doesn't exist
$version ++;
($v = $newfile) =~ s,(\.[a-z]{3})$,\.v$version\1,; # add .v1 before extension
print "version will be $v\n";
$newv = $newMDdir."/".$v;
}
©this ($old, $newv, $v, 1);
}
}
}
elsif ($file =~ /^METS/){
$metsdir = $oldMDdir.$file;
}
else{
print "NOT SAVING $collnum metadata $file\n";
}
}
close (MD);
if (@level3){
if ($newbie){
print OUT " Collection Level Metadata
\n";
}
foreach (@level3){ print OUT $_;} # prints existing coll-level metadata -- then start of next section
if ($newbie){print OUT "
\n";}
# above should include
if ($itemMDexists){ print OUT "