Project

General

Profile

1 6635 leinfelder
<%@ page language="java" %>
2
<%@ page import="java.util.Set,java.util.Map,java.util.Vector,edu.ucsb.nceas.utilities.PropertiesMetaData" %>
3
<%@ page import="edu.ucsb.nceas.utilities.MetaDataGroup,edu.ucsb.nceas.utilities.MetaDataProperty" %>
4
<%
5
/**
6
 *  '$RCSfile$'
7
 *    Copyright: 2008 Regents of the University of California and the
8
 *               National Center for Ecological Analysis and Synthesis
9
 *  For Details: http://www.nceas.ucsb.edu/
10
 *
11
 *   '$Author$'
12
 *     '$Date$'
13
 * '$Revision$'
14
 *
15
 * This program is free software; you can redistribute it and/or modify
16
 * it under the terms of the GNU General Public License as published by
17
 * the Free Software Foundation; either version 2 of the License, or
18
 * (at your option) any later version.
19
 *
20
 * This program is distributed in the hope that it will be useful,
21
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
 * GNU General Public License for more details.
24
 *
25
 * You should have received a copy of the GNU General Public License
26
 * along with this program; if not, write to the Free Software
27
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28
 */
29
%>
30
31
<html>
32
<head>
33
34
<title>DataONE Configuration</title>
35
<link rel="stylesheet" type="text/css"
36
        href="<%= request.getContextPath() %>/admin/admin.css"></link>
37
<script language="JavaScript" type="text/JavaScript" src="<%= request.getContextPath() %>/admin/admin.js"></script>
38
39
</head>
40
<body>
41
<%@ include file="./header-section.jsp"%>
42
43 8203 walker
<img src="<%= request.getContextPath() %>/metacat-logo-darkgray.png" width="100px" align="right"/>
44 6635 leinfelder
<h2>DataONE Configuration</h2>
45
46 6987 jones
<p>
47
    DataONE configuration is optional; choose 'Skip' below to proceed to the next configuration section,
48
    unless you want to join the DataONE federation.
49
</p>
50 6635 leinfelder
<p>
51 6987 jones
	<a href="http://www.dataone.org" target="_D1">DataONE</a> is a federation of data repositories (called Member Nodes)
52
    that work together to create a seamless, interoperable network to store, preserve, discover, and publish scientific data.
53
	Becoming a DataONE Member Node is a means of distributing data and metadata using a common set of standards, making it
54
	easy to build software systems that can interact with any of the federated repository nodes.  Metacat can be used
55
	to join the DataONE federation by configuring Metacat to act as a Member Node and applying with DataONE to become a
56
	Member Node.  Once a node's application is approved and Metacat is configured, metadata will be synchronized in the
57
	network for easy discovery, and replicas of data and metadata can be housed on other Member Nodes for
58
	archival safe-keeping. In addition, a Metacat Member Node can optionally provide space to store replicas of data from
59
	other Member Nodes that wish to preserve their data in the federation.
60 6861 leinfelder
<p/>
61 6987 jones
<p> To configure Metacat as a Member Node, you must first obtain a Member Node X.509 certificate that will
62
    be used to authenticate this node, and you must have a registered and verified account with DataONE that can
63
    be used as the point of contact for the candidate Member Node.  Once you have this information, fill out
64
    the form below with the proper configuration information, and then click 'Register', which will send the
65
    registration data to DataONE. A unique Member Node ID will be assigned and should only be used for this
66
    node and never shared or altered.
67 6861 leinfelder
<p/>
68 6635 leinfelder
<br clear="right"/>
69
70
<%@ include file="page-message-section.jsp"%>
71
72
<form method="POST" name="configuration_form" action="<%= request.getContextPath() %>/admin"
73
                                        onsubmit="return submitForm(this);">
74
75 6994 leinfelder
	<h3>Member Node Services</h3>
76
	Enable or disable DataONE Member Node Services for this deployment
77
78
	<div class="form-row">
79
		<div class="textinput-label"><label for="dataone.mn.services.enabled" title="Enable DataONE Member Node Services">Enable DataONE Services</label></div>
80
81
		<%
82
83
		boolean enableServices = false;
84
		String enableServicesString = (String) request.getAttribute("dataone.mn.services.enabled");
85
		if (enableServicesString != null) {
86
			enableServices = Boolean.parseBoolean(enableServicesString);
87
		}
88
89
		if (enableServices) {
90
		%>
91
		<input type="checkbox"
92
				class="textinput"
93
				id="dataone.mn.services.enabled"
94 7130 leinfelder
				name="dataone.mn.services.enabled"
95 6994 leinfelder
				value="true"
96
				checked="checked"/>
97
		<% } else {%>
98
		<input type="checkbox"
99
				class="textinput"
100
				id="dataone.mn.services.enabled"
101
				name="dataone.mn.services.enabled"
102
				value="true"/>
103
		<% } %>
104 8203 walker
105
		<img class="question-mark" src="style/images/help.png"
106
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
107 6994 leinfelder
	</div>
108 8203 walker
	<div class="clear"></div>
109 6635 leinfelder
	<h3>Member Node Configuration</h3>
110 6987 jones
	General information identifiying this node, its owner, and contents.  You will need
111
	   a certificate to identify the node, and a DataONE account to act as a node contact.
112
113 6635 leinfelder
	<div class="form-row">
114
		<div class="textinput-label">
115 6987 jones
			<label for="dataone.nodeName" title="A short, human-readable name for this node">Node Name</label>
116 6635 leinfelder
		</div>
117
		<input class="textinput"
118
			id="dataone.nodeName"
119
			name="dataone.nodeName"
120
			value="<%= request.getAttribute("dataone.nodeName") %>"/>
121 8203 walker
		<img class="question-mark" src="style/images/help.png"
122
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
123 6635 leinfelder
	</div>
124
	<div class="form-row">
125
		<div class="textinput-label">
126 6987 jones
			<label for="dataone.nodeDescription" title="A brief description of the node and its holdings">Node Description</label>
127 6635 leinfelder
		</div>
128
		<input class="textinput"
129
			id="dataone.nodeDescription"
130
			name="dataone.nodeDescription"
131
			value="<%= request.getAttribute("dataone.nodeDescription") %>"/>
132 8203 walker
		<img class="question-mark" src="style/images/help.png"
133
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
134 6635 leinfelder
	</div>
135
	<div class="form-row">
136
		<div class="textinput-label">
137 7030 cjones
			<label for="dataone.nodeId" title="The DataONE-assigned unique identifier for this node">Node Identifier</label>
138 6635 leinfelder
		</div>
139 7002 leinfelder
		<input class="textinput"
140 7030 cjones
			id="dataone.nodeId"
141
			name="dataone.nodeId"
142
			value="<%= request.getAttribute("dataone.nodeId") %>"/>
143 8203 walker
		<img class="question-mark" src="style/images/help.png"
144
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
145 6635 leinfelder
	</div>
146
	<div class="form-row">
147
		<div class="textinput-label">
148 6987 jones
			<label for="dataone.subject" title="The account in Distinguished Name (DN) format that represents this node in all service interactions">Node Subject</label>
149 6635 leinfelder
		</div>
150
		<input class="textinput"
151
			id="dataone.subject"
152
			name="dataone.subject"
153
			value="<%= request.getAttribute("dataone.subject") %>"/>
154 8203 walker
		<img class="question-mark" src="style/images/help.png"
155
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
156 6635 leinfelder
	</div>
157
	<div class="form-row">
158
		<div class="textinput-label">
159 6987 jones
			<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>
160 6985 jones
		</div>
161
		<input class="textinput"
162
			id="dataone.contactSubject"
163
			name="dataone.contactSubject"
164
			value="<%= request.getAttribute("dataone.contactSubject") %>"/>
165 8203 walker
		<img class="question-mark" src="style/images/help.png"
166
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
167 6985 jones
	</div>
168
	<div class="form-row">
169
		<div class="textinput-label">
170 6987 jones
			<label for="D1Client.certificate.file" title="The absolute path to the X.509 certificate used to authenticate this node">Node Certificate Path</label>
171 6635 leinfelder
		</div>
172
		<input class="textinput"
173
			id="D1Client.certificate.file"
174
			name="D1Client.certificate.file"
175
			value="<%= request.getAttribute("D1Client.certificate.file") %>"/>
176 8203 walker
		<img class="question-mark" src="style/images/help.png"
177
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
178 6635 leinfelder
	</div>
179
	<div class="form-row">
180 6994 leinfelder
		<div class="textinput-label"><label for="dataone.nodeSynchronize" title="Enable DataONE metadata synchronization">Enable Metadata Synchronization</label></div>
181 6635 leinfelder
182
		<%
183 6864 leinfelder
184
		boolean synchronize = false;
185
		String nodeSynchronize = (String) request.getAttribute("dataone.nodeSynchronize");
186
		if (nodeSynchronize != null) {
187
			synchronize = Boolean.parseBoolean(nodeSynchronize);
188
		}
189
190 6635 leinfelder
		if (synchronize) {
191
		%>
192
		<input type="checkbox"
193
				class="textinput"
194
				id="dataone.nodeSynchronize"
195
				name="dataone.nodeSynchronize"
196
				value="true"
197
				checked="checked"/>
198
		<% } else {%>
199
		<input type="checkbox"
200
				class="textinput"
201
				id="dataone.nodeSynchronize"
202
				name="dataone.nodeSynchronize"
203
				value="true"/>
204
		<% } %>
205 8203 walker
		<img class="question-mark" src="style/images/help.png"
206
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
207 6635 leinfelder
	</div>
208 6987 jones
    <p>&nbsp;</p>
209
210 8203 walker
   	<div class="clear"></div>
211
212 6690 leinfelder
	<h3>Synchronization Schedule</h3>
213 6987 jones
	The schedule on which metadata should be synchronized with DataONE, expressed as a crontab entry.
214 8203 walker
215 6690 leinfelder
	<div class="form-row">
216
		<div class="textinput-label">
217
			<label for="dataone.nodeSynchronization.schedule.year" title="Year">Year</label>
218
		</div>
219
		<input class="textinput"
220
			id="dataone.nodeSynchronization.schedule.year"
221
			name="dataone.nodeSynchronization.schedule.year"
222
			value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.year") %>"/>
223 8203 walker
		<img class="question-mark" src="style/images/help.png"
224
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
225 6690 leinfelder
	</div>
226
	<div class="form-row">
227
		<div class="textinput-label">
228
			<label for="dataone.nodeSynchronization.schedule.mon" title="Month">Month</label>
229
		</div>
230
		<input class="textinput"
231
			id="dataone.nodeSynchronization.schedule.mon"
232
			name="dataone.nodeSynchronization.schedule.mon"
233 8203 walker
			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')"/>
236 6690 leinfelder
	</div>
237
	<div class="form-row">
238
		<div class="textinput-label">
239
			<label for="dataone.nodeSynchronization.schedule.mday" title="Day of Month">Day of Month</label>
240
		</div>
241
		<input class="textinput"
242
			id="dataone.nodeSynchronization.schedule.mday"
243
			name="dataone.nodeSynchronization.schedule.mday"
244
			value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.mday") %>"/>
245 8203 walker
		<img class="question-mark" src="style/images/help.png"
246
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
247 6690 leinfelder
	</div>
248
	<div class="form-row">
249
		<div class="textinput-label">
250
			<label for="dataone.nodeSynchronization.schedule.wday" title="Day of Week">Day of Week</label>
251
		</div>
252
		<input class="textinput"
253
			id="dataone.nodeSynchronization.schedule.wday"
254
			name="dataone.nodeSynchronization.schedule.wday"
255
			value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.wday") %>"/>
256 8203 walker
		<img class="question-mark" src="style/images/help.png"
257
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
258 6690 leinfelder
	</div>
259
	<div class="form-row">
260
		<div class="textinput-label">
261
			<label for="dataone.nodeSynchronization.schedule.hour" title="Hours">Hours</label>
262
		</div>
263
		<input class="textinput"
264
			id="dataone.nodeSynchronization.schedule.hour"
265
			name="dataone.nodeSynchronization.schedule.hour"
266
			value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.hour") %>"/>
267 8203 walker
		<img class="question-mark" src="style/images/help.png"
268
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
269 6690 leinfelder
	</div>
270
	<div class="form-row">
271
		<div class="textinput-label">
272
			<label for="dataone.nodeSynchronization.schedule.min" title="Minutes">Minutes</label>
273
		</div>
274
		<input class="textinput"
275
			id="dataone.nodeSynchronization.schedule.min"
276
			name="dataone.nodeSynchronization.schedule.min"
277
			value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.min") %>"/>
278 8203 walker
		<img class="question-mark" src="style/images/help.png"
279
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
280 6690 leinfelder
	</div>
281
	<div class="form-row">
282
		<div class="textinput-label">
283
			<label for="dataone.nodeSynchronization.schedule.sec" title="Seconds">Seconds</label>
284
		</div>
285
		<input class="textinput"
286
			id="dataone.nodeSynchronization.schedule.sec"
287
			name="dataone.nodeSynchronization.schedule.sec"
288
			value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.sec") %>"/>
289 8203 walker
		<img class="question-mark" src="style/images/help.png"
290
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
291 6690 leinfelder
	</div>
292 8203 walker
293
	<div class="clear"></div>
294 6690 leinfelder
295 6987 jones
	<h3>Replication</h3>
296
	Configuration for replication, including whether this node can be used to house replicas of
297
	objects from other nodes, as well as default replication policies for the objects originating
298
	on this Member Node.
299 8203 walker
300 6987 jones
	<div class="form-row">
301
		<div class="textinput-label"><label for="dataone.nodeReplicate" title="Store replicas from other Member Nodes">Accept and Store Replicas</label></div>
302
303
		<%
304
		boolean replicate = false;
305
		String nodeReplicate = (String) request.getAttribute("dataone.nodeReplicate");
306
		if (nodeReplicate != null) {
307
			replicate = Boolean.parseBoolean(nodeReplicate);
308
		}
309
		if (replicate) {
310
		%>
311
		<input type="checkbox"
312
				class="textinput"
313
				id="dataone.nodeReplicate"
314
				name="dataone.nodeReplicate"
315
				value="true"
316
				checked="checked"/>
317
		<% } else {%>
318
		<input type="checkbox"
319
				class="textinput"
320
				id="dataone.nodeReplicate"
321
				name="dataone.nodeReplicate"
322
				value="true"/>
323
		<% } %>
324 8203 walker
		<img class="question-mark" src="style/images/help.png"
325
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
326 6987 jones
	</div>
327
328 8203 walker
329 6987 jones
330
 	<div class="form-row">
331
		<div class="textinput-label">
332
			<label for="dataone.replicationpolicy.default.numreplicas" title="Default Number of Replicas to be created for local objects">Default Number of Replicas</label>
333
		</div>
334
		<input class="textinput"
335
			id="dataone.replicationpolicy.default.numreplicas"
336
			name="dataone.replicationpolicy.default.numreplicas"
337
			value="<%= request.getAttribute("dataone.replicationpolicy.default.numreplicas") %>"/>
338 8203 walker
		<img class="question-mark" src="style/images/help.png"
339
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
340 6987 jones
	</div>
341
  	<div class="form-row">
342
		<div class="textinput-label">
343
			<label for="dataone.replicationpolicy.default.preferredNodeList" title="A comma-separated list of preferred nodes to house replicas">Default Preferred Nodes</label>
344
		</div>
345
		<input class="textinput"
346
			id="dataone.replicationpolicy.default.preferredNodeList"
347
			name="dataone.replicationpolicy.default.preferredNodeList"
348
			value="<%= request.getAttribute("dataone.replicationpolicy.default.preferredNodeList") %>"/>
349 8203 walker
		<img class="question-mark" src="style/images/help.png"
350
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
351 6987 jones
	</div>
352
   	<div class="form-row">
353
		<div class="textinput-label">
354
			<label for="dataone.replicationpolicy.default.blockedNodeList" title="A comma-separated list of blocked nodes never to house replicas">Default Blocked Nodes</label>
355
		</div>
356
		<input class="textinput"
357
			id="dataone.replicationpolicy.default.blockedNodeList"
358
			name="dataone.replicationpolicy.default.blockedNodeList"
359
			value="<%= request.getAttribute("dataone.replicationpolicy.default.blockedNodeList") %>"/>
360 8203 walker
		<img class="question-mark" src="style/images/help.png"
361
			onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"/>
362 6987 jones
	</div>
363
364 8203 walker
 	<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>
402 6635 leinfelder
</form>
403
404
<%@ include file="./footer-section.jsp"%>
405
406
</body>
407
</html>