Revision 8203
Added by Lauren Walker about 11 years ago
dataone-configuration.jsp | ||
---|---|---|
40 | 40 |
<body> |
41 | 41 |
<%@ include file="./header-section.jsp"%> |
42 | 42 |
|
43 |
<img src="<%= request.getContextPath() %>/metacat-logo.png" width="100px" align="right"/> |
|
43 |
<img src="<%= request.getContextPath() %>/metacat-logo-darkgray.png" width="100px" align="right"/>
|
|
44 | 44 |
<h2>DataONE Configuration</h2> |
45 | 45 |
|
46 | 46 |
<p> |
... | ... | |
75 | 75 |
<h3>Member Node Services</h3> |
76 | 76 |
Enable or disable DataONE Member Node Services for this deployment |
77 | 77 |
|
78 |
<hr class="config-line"> |
|
79 | 78 |
<div class="form-row"> |
80 |
<img class="question-mark" src="style/images/help.png" |
|
81 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
82 | 79 |
<div class="textinput-label"><label for="dataone.mn.services.enabled" title="Enable DataONE Member Node Services">Enable DataONE Services</label></div> |
83 | 80 |
|
84 | 81 |
<% |
... | ... | |
104 | 101 |
name="dataone.mn.services.enabled" |
105 | 102 |
value="true"/> |
106 | 103 |
<% } %> |
107 |
|
|
104 |
|
|
105 |
<img class="question-mark" src="style/images/help.png" |
|
106 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
108 | 107 |
</div> |
109 |
|
|
108 |
<div class="clear"></div> |
|
110 | 109 |
<h3>Member Node Configuration</h3> |
111 | 110 |
General information identifiying this node, its owner, and contents. You will need |
112 | 111 |
a certificate to identify the node, and a DataONE account to act as a node contact. |
113 | 112 |
|
114 |
<hr class="config-line"> |
|
115 |
|
|
116 | 113 |
<div class="form-row"> |
117 |
<img class="question-mark" src="style/images/help.png" |
|
118 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
119 | 114 |
<div class="textinput-label"> |
120 | 115 |
<label for="dataone.nodeName" title="A short, human-readable name for this node">Node Name</label> |
121 | 116 |
</div> |
... | ... | |
123 | 118 |
id="dataone.nodeName" |
124 | 119 |
name="dataone.nodeName" |
125 | 120 |
value="<%= request.getAttribute("dataone.nodeName") %>"/> |
121 |
<img class="question-mark" src="style/images/help.png" |
|
122 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
126 | 123 |
</div> |
127 | 124 |
<div class="form-row"> |
128 |
<img class="question-mark" src="style/images/help.png" |
|
129 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
130 | 125 |
<div class="textinput-label"> |
131 | 126 |
<label for="dataone.nodeDescription" title="A brief description of the node and its holdings">Node Description</label> |
132 | 127 |
</div> |
... | ... | |
134 | 129 |
id="dataone.nodeDescription" |
135 | 130 |
name="dataone.nodeDescription" |
136 | 131 |
value="<%= request.getAttribute("dataone.nodeDescription") %>"/> |
132 |
<img class="question-mark" src="style/images/help.png" |
|
133 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
137 | 134 |
</div> |
138 | 135 |
<div class="form-row"> |
139 |
<img class="question-mark" src="style/images/help.png" |
|
140 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
141 | 136 |
<div class="textinput-label"> |
142 | 137 |
<label for="dataone.nodeId" title="The DataONE-assigned unique identifier for this node">Node Identifier</label> |
143 | 138 |
</div> |
... | ... | |
145 | 140 |
id="dataone.nodeId" |
146 | 141 |
name="dataone.nodeId" |
147 | 142 |
value="<%= request.getAttribute("dataone.nodeId") %>"/> |
143 |
<img class="question-mark" src="style/images/help.png" |
|
144 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
148 | 145 |
</div> |
149 | 146 |
<div class="form-row"> |
150 |
<img class="question-mark" src="style/images/help.png" |
|
151 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
152 | 147 |
<div class="textinput-label"> |
153 | 148 |
<label for="dataone.subject" title="The account in Distinguished Name (DN) format that represents this node in all service interactions">Node Subject</label> |
154 | 149 |
</div> |
... | ... | |
156 | 151 |
id="dataone.subject" |
157 | 152 |
name="dataone.subject" |
158 | 153 |
value="<%= request.getAttribute("dataone.subject") %>"/> |
154 |
<img class="question-mark" src="style/images/help.png" |
|
155 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
159 | 156 |
</div> |
160 | 157 |
<div class="form-row"> |
161 |
<img class="question-mark" src="style/images/help.png" |
|
162 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
163 | 158 |
<div class="textinput-label"> |
164 | 159 |
<label for="dataone.contactSubject" title="A verified account in DN format to be used as the primary node contact for this node">Contact Subject</label> |
165 | 160 |
</div> |
... | ... | |
167 | 162 |
id="dataone.contactSubject" |
168 | 163 |
name="dataone.contactSubject" |
169 | 164 |
value="<%= request.getAttribute("dataone.contactSubject") %>"/> |
165 |
<img class="question-mark" src="style/images/help.png" |
|
166 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
170 | 167 |
</div> |
171 | 168 |
<div class="form-row"> |
172 |
<img class="question-mark" src="style/images/help.png" |
|
173 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
174 | 169 |
<div class="textinput-label"> |
175 | 170 |
<label for="D1Client.certificate.file" title="The absolute path to the X.509 certificate used to authenticate this node">Node Certificate Path</label> |
176 | 171 |
</div> |
... | ... | |
178 | 173 |
id="D1Client.certificate.file" |
179 | 174 |
name="D1Client.certificate.file" |
180 | 175 |
value="<%= request.getAttribute("D1Client.certificate.file") %>"/> |
176 |
<img class="question-mark" src="style/images/help.png" |
|
177 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
181 | 178 |
</div> |
182 | 179 |
<div class="form-row"> |
183 |
<img class="question-mark" src="style/images/help.png" |
|
184 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
185 | 180 |
<div class="textinput-label"><label for="dataone.nodeSynchronize" title="Enable DataONE metadata synchronization">Enable Metadata Synchronization</label></div> |
186 | 181 |
|
187 | 182 |
<% |
... | ... | |
207 | 202 |
name="dataone.nodeSynchronize" |
208 | 203 |
value="true"/> |
209 | 204 |
<% } %> |
210 |
|
|
205 |
<img class="question-mark" src="style/images/help.png" |
|
206 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
211 | 207 |
</div> |
212 | 208 |
<p> </p> |
213 | 209 |
|
210 |
<div class="clear"></div> |
|
211 |
|
|
214 | 212 |
<h3>Synchronization Schedule</h3> |
215 | 213 |
The schedule on which metadata should be synchronized with DataONE, expressed as a crontab entry. |
216 |
<hr class="config-line"> |
|
214 |
|
|
217 | 215 |
<div class="form-row"> |
218 |
<img class="question-mark" src="style/images/help.png" |
|
219 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
220 | 216 |
<div class="textinput-label"> |
221 | 217 |
<label for="dataone.nodeSynchronization.schedule.year" title="Year">Year</label> |
222 | 218 |
</div> |
... | ... | |
224 | 220 |
id="dataone.nodeSynchronization.schedule.year" |
225 | 221 |
name="dataone.nodeSynchronization.schedule.year" |
226 | 222 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.year") %>"/> |
223 |
<img class="question-mark" src="style/images/help.png" |
|
224 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
227 | 225 |
</div> |
228 | 226 |
<div class="form-row"> |
229 |
<img class="question-mark" src="style/images/help.png" |
|
230 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
231 | 227 |
<div class="textinput-label"> |
232 | 228 |
<label for="dataone.nodeSynchronization.schedule.mon" title="Month">Month</label> |
233 | 229 |
</div> |
234 | 230 |
<input class="textinput" |
235 | 231 |
id="dataone.nodeSynchronization.schedule.mon" |
236 | 232 |
name="dataone.nodeSynchronization.schedule.mon" |
237 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.mon") %>"/> |
|
233 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.mon") %>"/> |
|
234 |
<img class="question-mark" src="style/images/help.png" |
|
235 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
238 | 236 |
</div> |
239 | 237 |
<div class="form-row"> |
240 |
<img class="question-mark" src="style/images/help.png" |
|
241 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
242 | 238 |
<div class="textinput-label"> |
243 | 239 |
<label for="dataone.nodeSynchronization.schedule.mday" title="Day of Month">Day of Month</label> |
244 | 240 |
</div> |
... | ... | |
246 | 242 |
id="dataone.nodeSynchronization.schedule.mday" |
247 | 243 |
name="dataone.nodeSynchronization.schedule.mday" |
248 | 244 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.mday") %>"/> |
245 |
<img class="question-mark" src="style/images/help.png" |
|
246 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
249 | 247 |
</div> |
250 | 248 |
<div class="form-row"> |
251 |
<img class="question-mark" src="style/images/help.png" |
|
252 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
253 | 249 |
<div class="textinput-label"> |
254 | 250 |
<label for="dataone.nodeSynchronization.schedule.wday" title="Day of Week">Day of Week</label> |
255 | 251 |
</div> |
... | ... | |
257 | 253 |
id="dataone.nodeSynchronization.schedule.wday" |
258 | 254 |
name="dataone.nodeSynchronization.schedule.wday" |
259 | 255 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.wday") %>"/> |
256 |
<img class="question-mark" src="style/images/help.png" |
|
257 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
260 | 258 |
</div> |
261 | 259 |
<div class="form-row"> |
262 |
<img class="question-mark" src="style/images/help.png" |
|
263 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
264 | 260 |
<div class="textinput-label"> |
265 | 261 |
<label for="dataone.nodeSynchronization.schedule.hour" title="Hours">Hours</label> |
266 | 262 |
</div> |
... | ... | |
268 | 264 |
id="dataone.nodeSynchronization.schedule.hour" |
269 | 265 |
name="dataone.nodeSynchronization.schedule.hour" |
270 | 266 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.hour") %>"/> |
267 |
<img class="question-mark" src="style/images/help.png" |
|
268 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
271 | 269 |
</div> |
272 | 270 |
<div class="form-row"> |
273 |
<img class="question-mark" src="style/images/help.png" |
|
274 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
275 | 271 |
<div class="textinput-label"> |
276 | 272 |
<label for="dataone.nodeSynchronization.schedule.min" title="Minutes">Minutes</label> |
277 | 273 |
</div> |
... | ... | |
279 | 275 |
id="dataone.nodeSynchronization.schedule.min" |
280 | 276 |
name="dataone.nodeSynchronization.schedule.min" |
281 | 277 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.min") %>"/> |
278 |
<img class="question-mark" src="style/images/help.png" |
|
279 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
282 | 280 |
</div> |
283 | 281 |
<div class="form-row"> |
284 |
<img class="question-mark" src="style/images/help.png" |
|
285 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
286 | 282 |
<div class="textinput-label"> |
287 | 283 |
<label for="dataone.nodeSynchronization.schedule.sec" title="Seconds">Seconds</label> |
288 | 284 |
</div> |
... | ... | |
290 | 286 |
id="dataone.nodeSynchronization.schedule.sec" |
291 | 287 |
name="dataone.nodeSynchronization.schedule.sec" |
292 | 288 |
value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.sec") %>"/> |
289 |
<img class="question-mark" src="style/images/help.png" |
|
290 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
293 | 291 |
</div> |
292 |
|
|
293 |
<div class="clear"></div> |
|
294 | 294 |
|
295 | 295 |
<h3>Replication</h3> |
296 | 296 |
Configuration for replication, including whether this node can be used to house replicas of |
297 | 297 |
objects from other nodes, as well as default replication policies for the objects originating |
298 | 298 |
on this Member Node. |
299 |
<hr class="config-line"> |
|
299 |
|
|
300 | 300 |
<div class="form-row"> |
301 |
<img class="question-mark" src="style/images/help.png" |
|
302 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
303 | 301 |
<div class="textinput-label"><label for="dataone.nodeReplicate" title="Store replicas from other Member Nodes">Accept and Store Replicas</label></div> |
304 | 302 |
|
305 | 303 |
<% |
... | ... | |
323 | 321 |
name="dataone.nodeReplicate" |
324 | 322 |
value="true"/> |
325 | 323 |
<% } %> |
324 |
<img class="question-mark" src="style/images/help.png" |
|
325 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
326 | 326 |
</div> |
327 | 327 |
|
328 |
<hr class="config-line"> |
|
328 |
|
|
329 | 329 |
|
330 | 330 |
<div class="form-row"> |
331 |
<img class="question-mark" src="style/images/help.png" |
|
332 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
333 | 331 |
<div class="textinput-label"> |
334 | 332 |
<label for="dataone.replicationpolicy.default.numreplicas" title="Default Number of Replicas to be created for local objects">Default Number of Replicas</label> |
335 | 333 |
</div> |
... | ... | |
337 | 335 |
id="dataone.replicationpolicy.default.numreplicas" |
338 | 336 |
name="dataone.replicationpolicy.default.numreplicas" |
339 | 337 |
value="<%= request.getAttribute("dataone.replicationpolicy.default.numreplicas") %>"/> |
338 |
<img class="question-mark" src="style/images/help.png" |
|
339 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
340 | 340 |
</div> |
341 | 341 |
<div class="form-row"> |
342 |
<img class="question-mark" src="style/images/help.png" |
|
343 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
344 | 342 |
<div class="textinput-label"> |
345 | 343 |
<label for="dataone.replicationpolicy.default.preferredNodeList" title="A comma-separated list of preferred nodes to house replicas">Default Preferred Nodes</label> |
346 | 344 |
</div> |
... | ... | |
348 | 346 |
id="dataone.replicationpolicy.default.preferredNodeList" |
349 | 347 |
name="dataone.replicationpolicy.default.preferredNodeList" |
350 | 348 |
value="<%= request.getAttribute("dataone.replicationpolicy.default.preferredNodeList") %>"/> |
349 |
<img class="question-mark" src="style/images/help.png" |
|
350 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
351 | 351 |
</div> |
352 | 352 |
<div class="form-row"> |
353 |
<img class="question-mark" src="style/images/help.png" |
|
354 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
355 | 353 |
<div class="textinput-label"> |
356 | 354 |
<label for="dataone.replicationpolicy.default.blockedNodeList" title="A comma-separated list of blocked nodes never to house replicas">Default Blocked Nodes</label> |
357 | 355 |
</div> |
... | ... | |
359 | 357 |
id="dataone.replicationpolicy.default.blockedNodeList" |
360 | 358 |
name="dataone.replicationpolicy.default.blockedNodeList" |
361 | 359 |
value="<%= request.getAttribute("dataone.replicationpolicy.default.blockedNodeList") %>"/> |
360 |
<img class="question-mark" src="style/images/help.png" |
|
361 |
onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/> |
|
362 | 362 |
</div> |
363 | 363 |
|
364 |
<input type="hidden" name="configureType" value="dataone"/> |
|
365 |
<input type="hidden" name="processForm" value="true"/> |
|
366 |
|
|
367 |
<% |
|
368 |
// do we know if it is an update or a new registration? |
|
369 |
boolean isUpdate = false; |
|
370 |
String isUpdateString = (String) request.getAttribute("dataone.isUpdate"); |
|
371 |
if (isUpdateString != null) { |
|
372 |
isUpdate = Boolean.parseBoolean(isUpdateString); |
|
373 |
} |
|
374 |
// do we know if it is pending approval? |
|
375 |
boolean isSubmitted = false; |
|
376 |
String isSubmittedString = (String) request.getAttribute("dataone.mn.registration.submitted"); |
|
377 |
if (isSubmittedString != null) { |
|
378 |
isSubmitted = Boolean.parseBoolean(isSubmittedString); |
|
379 |
} |
|
380 |
%> |
|
381 |
<%if (isUpdate) { %> |
|
382 |
<input class=button type="submit" value="Update"/> |
|
383 |
<%} else if (isSubmitted) { %> |
|
384 |
<input class=button type="submit" value="Update" disabled="disabled"/> |
|
385 |
<%} else { %> |
|
386 |
<input class=button type="submit" value="Register"/> |
|
387 |
<%} %> |
|
388 |
<% |
|
389 |
// if have we already configured this section, then we cannot skip it |
|
390 |
boolean previouslyConfigured = false; |
|
391 |
String previouslyConfiguredString = (String) request.getAttribute("configutil.dataoneConfigured"); |
|
392 |
if (previouslyConfiguredString != null) { |
|
393 |
previouslyConfigured = Boolean.parseBoolean(previouslyConfiguredString); |
|
394 |
} |
|
395 |
%> |
|
396 |
<%if (!previouslyConfigured) { %> |
|
397 |
<input class=button type="button" value="Skip" onClick="forward('./admin?configureType=dataone&bypass=true&processForm=true')"> |
|
398 |
<%} %> |
|
399 |
<input class=button type="button" value="Cancel" onClick="forward('./admin')"> |
|
400 |
|
|
364 |
<div class="buttons-wrapper"> |
|
365 |
<input type="hidden" name="configureType" value="dataone"/> |
|
366 |
<input type="hidden" name="processForm" value="true"/> |
|
367 |
|
|
368 |
<% |
|
369 |
// do we know if it is an update or a new registration? |
|
370 |
boolean isUpdate = false; |
|
371 |
String isUpdateString = (String) request.getAttribute("dataone.isUpdate"); |
|
372 |
if (isUpdateString != null) { |
|
373 |
isUpdate = Boolean.parseBoolean(isUpdateString); |
|
374 |
} |
|
375 |
// do we know if it is pending approval? |
|
376 |
boolean isSubmitted = false; |
|
377 |
String isSubmittedString = (String) request.getAttribute("dataone.mn.registration.submitted"); |
|
378 |
if (isSubmittedString != null) { |
|
379 |
isSubmitted = Boolean.parseBoolean(isSubmittedString); |
|
380 |
} |
|
381 |
%> |
|
382 |
<%if (isUpdate) { %> |
|
383 |
<input class=button type="submit" value="Update"/> |
|
384 |
<%} else if (isSubmitted) { %> |
|
385 |
<input class=button type="submit" value="Update" disabled="disabled"/> |
|
386 |
<%} else { %> |
|
387 |
<input class=button type="submit" value="Register"/> |
|
388 |
<%} %> |
|
389 |
<% |
|
390 |
// if have we already configured this section, then we cannot skip it |
|
391 |
boolean previouslyConfigured = false; |
|
392 |
String previouslyConfiguredString = (String) request.getAttribute("configutil.dataoneConfigured"); |
|
393 |
if (previouslyConfiguredString != null) { |
|
394 |
previouslyConfigured = Boolean.parseBoolean(previouslyConfiguredString); |
|
395 |
} |
|
396 |
%> |
|
397 |
<%if (!previouslyConfigured) { %> |
|
398 |
<input class=button type="button" value="Skip" onClick="forward('./admin?configureType=dataone&bypass=true&processForm=true')"> |
|
399 |
<%} %> |
|
400 |
<input class=button type="button" value="Cancel" onClick="forward('./admin')"> |
|
401 |
</div> |
|
401 | 402 |
</form> |
402 | 403 |
|
403 | 404 |
<%@ include file="./footer-section.jsp"%> |
Also available in: Unified diff
Redesigned the /admin configuration pages to better match our new MetacatUI design. Looks good in both /context/admin view and the #external view using metacatUI