annotate changemeta.pl @ 60:5bee75ca9eb3 default tip

added old makemeta-quantum.pl that was not in CVS.
author casties
date Thu, 16 Mar 2017 18:29:58 +0100
parents 2208ed7370cb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
57
2208ed7370cb updated to Ubuntu Perl paths.
casties
parents: 45
diff changeset
1 #!/usr/bin/perl -w
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
2
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
3 use strict;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
4 use XML::LibXML;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
5
45
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
6 use lib '/usr/local/mpiwg/archive';
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
7 use MPIWGStor;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
8
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
9 # make output unbuffered
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
10 $|=1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
11
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
12 # program version
45
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
13 my $version = "0.3 (11.12.2006 ROC)";
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
14 my $help =
42
8ae4896265e8 fixed typo
casties
parents: 40
diff changeset
15 "use: changemeta [options] dir
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
16 options:
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
17 -debug show debugging info
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
18 -dry-run simulate, dont'do anything
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
19 -access=free set free access tag (use access=mpiwg for restricted access)
45
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
20 -derived-from=/mpiwg/archive/data/DBDDHKP
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
21 -production-comment=\"scanned with flatbed scanner\"
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
22 ";
42
8ae4896265e8 fixed typo
casties
parents: 40
diff changeset
23 logger("INFO", "changemeta $version");
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
24
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
25
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
26 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
27 # internal parameters
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
28 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
29
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
30 # read command line parameters
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
31 my $args = MPIWGStor::parseargs;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
32 if (! scalar(%$args)) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
33 print $help, "\n";
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
34 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
35 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
36
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
37 # debug level
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
38 $debug = (exists $$args{'debug'}) ? $$args{'debug'} : 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
40 # simulate action only
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
41 my $dry_run = (exists $$args{'dry-run'}) ? $$args{'dry-run'} : 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
42 logger('DEBUG', "dry-run: $dry_run");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
43
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
44 # access type
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
45 my $access_type = (exists $$args{'access'}) ? $$args{'access'} : "";
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
46 logger('DEBUG', "access: $access_type");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
47
45
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
48 # derived-from
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
49 my $derived_from = (exists $$args{'derived-from'}) ? $$args{'derived-from'} : "";
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
50 logger('DEBUG', "derived-from: $derived_from");
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
51
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
52 # production-comment
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
53 my $production_comment = (exists $$args{'production-comment'}) ? $$args{'production-comment'} : "";
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
54 logger('DEBUG', "production-comment: $production_comment");
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
55
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
56 # index.meta namespace (not really implemented!)
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
57 my $namespace = "";
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
58
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
59
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
60 my $xml_changed = 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
61 my $errcnt = 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
62 my $warncnt = 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
63
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
64 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
65 # check parameters that were passed to the program
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
66 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
67 my $docdir = $$args{'path'};
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
68 if (! $docdir) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
69 logger("ABORT", "no document directory given!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
70 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
71 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
72 # strip double slashes
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
73 $docdir = sstrip($docdir, 1);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
74 if (! -d $docdir) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
75 logger("ABORT", "document directory \'$docdir\' doesn't exist!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
76 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
77 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
78
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
79
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
80 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
81 # subroutines
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
82 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
83
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
84 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
85 # sets access tag to given access_type
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
86 # removes access tag if access_type is empty
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
87 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
88 sub change_access {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
89 my ($access_type, $index_root) = @_;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
90
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
91 my $parent_tag = $index_root->findnodes('//meta/access-conditions')->get_node(1);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
92 if ($parent_tag) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
93 my $access_tag = $parent_tag->findnodes('access')->get_node(1);
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
94 # remove access tag if it exists
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
95 if ($access_tag) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
96 $parent_tag->removeChild($access_tag);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
97 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
98 } else {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
99 $parent_tag = create_element_path('meta/access-conditions', $index_root, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
100 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
101
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
102 # add new access tag (if $access_Type is not empty)
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
103 if ($access_type eq "free") {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
104 create_element_path('access@type=free', $parent_tag, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
105 } elsif (length $access_type > 0) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
106 my $acc_tag = create_element_path('access@type=institution', $parent_tag, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
107 create_text_path('name', $access_type, $acc_tag, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
108 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
109 $xml_changed++
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
110 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
111
45
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
112 #
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
113 # sets derived-from tag to given value
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
114 # removes tag if derived_from is empty
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
115 #
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
116 sub change_derived {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
117 my ($derived_from, $index_root) = @_;
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
118
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
119 my $derived_tag = $index_root->findnodes('derived-from')->get_node(1);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
120 # remove derived tag if it exists
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
121 if ($derived_tag) {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
122 $index_root->removeChild($derived_tag);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
123 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
124
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
125 # add new derived tag (if $derived_Type is not empty)
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
126 if (length $derived_from > 0) {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
127 create_text_path('derived-from/archive-path', $derived_from, $index_root, $namespace);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
128 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
129 $xml_changed++
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
130 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
131
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
132 #
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
133 # sets production-comment tag to given value
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
134 # removes production tag if production_comment is empty
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
135 #
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
136 sub change_production {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
137 my ($production_comment, $index_root) = @_;
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
138
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
139 my $parent_tag = $index_root->findnodes('//meta/image-acquisition')->get_node(1);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
140 if ($parent_tag) {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
141 my $production_tag = $parent_tag->findnodes('production-comment')->get_node(1);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
142 # remove production tag if it exists
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
143 if ($production_tag) {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
144 $parent_tag->removeChild($production_tag);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
145 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
146 } else {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
147 $parent_tag = create_element_path('meta/image-acquisition', $index_root, $namespace);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
148 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
149
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
150 # add new production tag (if $production_comment is not empty)
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
151 if (length $production_comment > 0) {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
152 create_text_path('production-comment', $production_comment, $parent_tag, $namespace);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
153 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
154 $xml_changed++
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
155 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
156
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
157
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
158
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
159
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
160
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
161
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
162
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
163 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
164 # Main
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
165 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
166
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
167 my $index_doc;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
168 my $index_root;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
169
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
170 # load index.meta file
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
171 if (-f "$docdir/index.meta") {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
172 ($index_doc, $index_root) = read_xml("$docdir/index.meta");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
173 } else {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
174 logger("ABORT", "index file \'$docdir/index.meta\' doesn't exist!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
175 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
176 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
177
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
178 if ($access_type) {
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
179 change_access($access_type, $index_root);
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
180 }
45
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
181 if ($derived_from) {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
182 change_derived($derived_from, $index_root);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
183 }
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
184 if ($production_comment) {
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
185 change_production($production_comment, $index_root);
b1f1d1fbf6e5 added derived-from and production-comment handling
casties
parents: 42
diff changeset
186 }
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
187
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
188
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
189 logger("INFO", "$warncnt warnings");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
190 logger("INFO", "$errcnt errors");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
191 if ($errcnt > 0) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
192 logger("ABORT", "there were errors!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
193 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
194 } elsif ($xml_changed) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
195 # write new index.meta file
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
196 if ($dry_run) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
197 logger('DEBUG', "would write $docdir/index.meta");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
198 logger('DEBUG', $index_doc->toString(1));
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
199 } else {
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
200 write_xml($index_doc, "$docdir/index.meta");
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
201 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
202 logger("DONE", "changed index file successfully!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
203 } else {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
204 logger("DONE", "didn't change index file");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
205 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
206