1: #!/usr/local/bin/perl -w
2:
3: use strict;
4: use XML::LibXML;
5:
6: use lib '/usr/local/mpiwg/archive_devel';
7: use MPIWGStor;
8:
9: # make output unbuffered
10: $|=1;
11:
12: # program version
13: my $version = "0.1 (27.6.2006 ROC)";
14: my $help =
15: "use: checkmeta [options] dir
16: options:
17: -debug show debugging info
18: -dry-run simulate, dont'do anything
19: -access=free adds free access tag (use access=mpiwg for restricted access)
20: ";
21: logger("INFO", "checkmeta $version");
22:
23:
24: #######################################################
25: # internal parameters
26: #
27:
28: # read command line parameters
29: my $args = MPIWGStor::parseargs;
30: if (! scalar(%$args)) {
31: print $help, "\n";
32: exit 1;
33: }
34:
35: # debug level
36: $debug = (exists $$args{'debug'}) ? $$args{'debug'} : 0;
37:
38: # simulate action only
39: my $dry_run = (exists $$args{'dry-run'}) ? $$args{'dry-run'} : 0;
40: logger('DEBUG', "dry-run: $dry_run");
41:
42: # access type
43: my $access_type = (exists $$args{'access'}) ? $$args{'access'} : "";
44: logger('DEBUG', "access: $access_type");
45:
46: # index.meta namespace (not really implemented!)
47: my $namespace = "";
48:
49:
50: my $xml_changed = 0;
51: my $errcnt = 0;
52: my $warncnt = 0;
53:
54: #######################################################
55: # check parameters that were passed to the program
56: #
57: my $docdir = $$args{'path'};
58: if (! $docdir) {
59: logger("ABORT", "no document directory given!");
60: exit 1;
61: }
62: # strip double slashes
63: $docdir = sstrip($docdir, 1);
64: if (! -d $docdir) {
65: logger("ABORT", "document directory \'$docdir\' doesn't exist!");
66: exit 1;
67: }
68:
69:
70: #######################################################
71: # subroutines
72: #
73:
74: #
75: # sets access tag to given access_type
76: # removes access tag if access_type is empty
77: #
78: sub change_access {
79: my ($access_type, $index_root) = @_;
80:
81: my $parent_tag = $index_root->findnodes('//meta/access-conditions')->get_node(1);
82: if ($parent_tag) {
83: my $access_tag = $parent_tag->findnodes('access')->get_node(1);
84: if ($access_tag) {
85: $parent_tag->removeChild($access_tag);
86: }
87: } else {
88: $parent_tag = create_element_path('meta/access-conditions', $index_root, $namespace);
89: }
90:
91: if ($access_type eq "free") {
92: create_element_path('access@type=free', $parent_tag, $namespace);
93: } elsif (length $access_type > 0) {
94: my $acc_tag = create_element_path('access@type=institution', $parent_tag, $namespace);
95: create_text_path('name', $access_type, $acc_tag, $namespace);
96: }
97: $xml_changed++
98: }
99:
100:
101:
102:
103:
104:
105:
106: #######################################################
107: # Main
108: #
109:
110: my $index_doc;
111: my $index_root;
112:
113: # load index.meta file
114: if (-f "$docdir/index.meta") {
115: ($index_doc, $index_root) = read_xml("$docdir/index.meta");
116: } else {
117: logger("ABORT", "index file \'$docdir/index.meta\' doesn't exist!");
118: exit 1;
119: }
120:
121: if ($access_type) {
122: change_access($index_root);
123: }
124:
125:
126: logger("INFO", "$warncnt warnings");
127: logger("INFO", "$errcnt errors");
128: if ($errcnt > 0) {
129: logger("ABORT", "there were errors!");
130: exit 1;
131: } elsif ($xml_changed) {
132: # write new index.meta file
133: if ($dry_run) {
134: logger('DEBUG', "would write $docdir/index.meta");
135: logger('DEBUG', $index_doc->toString(1));
136: } else {
137: #write_xml($index_doc, "$docdir/index.meta");
138: }
139: logger("DONE", "changed index file successfully!");
140: } else {
141: logger("DONE", "didn't change index file");
142: }
143:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>