Project

General

Profile

1
<%@ 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: walker $'
12
 *     '$Date: 2013-09-17 16:17:55 -0700 (Tue, 17 Sep 2013) $'
13
 * '$Revision: 8222 $'
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
<div class="document">
44
	<h2>DataONE Configuration</h2>
45
	
46
	<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
	<p>
51
		<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
	<p/>
61
	<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
	<p/>
68
	<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
		<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
					name="dataone.mn.services.enabled" 	             		    	    	           		    	             			
95
					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
			
105
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
106
		</div>
107
		<div class="clear"></div>
108
		<h3>Member Node Configuration</h3>
109
		General information identifiying this node, its owner, and contents.  You will need
110
		   a certificate to identify the node, and a DataONE account to act as a node contact.
111
		
112
		<div class="form-row">
113
			<div class="textinput-label">
114
				<label for="dataone.nodeName" title="A short, human-readable name for this node">Node Name</label>
115
			</div>
116
			<input class="textinput" 
117
				id="dataone.nodeName" 
118
				name="dataone.nodeName" 	             		    	    	           		    	             			
119
				value="<%= request.getAttribute("dataone.nodeName") %>"/> 
120
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
121
		</div>
122
		<div class="form-row">
123
			<div class="textinput-label">
124
				<label for="dataone.nodeDescription" title="A brief description of the node and its holdings">Node Description</label>
125
			</div>
126
			<input class="textinput" 
127
				id="dataone.nodeDescription" 
128
				name="dataone.nodeDescription" 	             		    	    	           		    	             			
129
				value="<%= request.getAttribute("dataone.nodeDescription") %>"/> 
130
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
131
		</div>
132
		<div class="form-row">
133
			<div class="textinput-label">
134
				<label for="dataone.nodeId" title="The DataONE-assigned unique identifier for this node">Node Identifier</label>
135
			</div>
136
			<input class="textinput" 
137
				id="dataone.nodeId" 
138
				name="dataone.nodeId" 	             		    	    	           		    	             			
139
				value="<%= request.getAttribute("dataone.nodeId") %>"/>
140
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
141
		</div>
142
		<div class="form-row">
143
			<div class="textinput-label">
144
				<label for="dataone.subject" title="The account in Distinguished Name (DN) format that represents this node in all service interactions">Node Subject</label>
145
			</div>
146
			<input class="textinput" 
147
				id="dataone.subject" 
148
				name="dataone.subject" 	             		    	    	           		    	             			
149
				value="<%= request.getAttribute("dataone.subject") %>"/> 
150
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
151
		</div>
152
		<div class="form-row">
153
			<div class="textinput-label">
154
				<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>
155
			</div>
156
			<input class="textinput" 
157
				id="dataone.contactSubject" 
158
				name="dataone.contactSubject" 	             		    	    	           		    	             			
159
				value="<%= request.getAttribute("dataone.contactSubject") %>"/> 
160
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
161
		</div>
162
		<div class="form-row">
163
			<div class="textinput-label">
164
				<label for="D1Client.certificate.file" title="The absolute path to the X.509 certificate used to authenticate this node">Node Certificate Path</label>
165
			</div>
166
			<input class="textinput" 
167
				id="D1Client.certificate.file" 
168
				name="D1Client.certificate.file" 	             		    	    	           		    	             			
169
				value="<%= request.getAttribute("D1Client.certificate.file") %>"/> 
170
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
171
		</div>
172
		<div class="form-row">
173
			<div class="textinput-label"><label for="dataone.nodeSynchronize" title="Enable DataONE metadata synchronization">Enable Metadata Synchronization</label></div>
174
	
175
			<%
176
			
177
			boolean synchronize = false;
178
			String nodeSynchronize = (String) request.getAttribute("dataone.nodeSynchronize");
179
			if (nodeSynchronize != null) {
180
				synchronize = Boolean.parseBoolean(nodeSynchronize);
181
			}
182
			
183
			if (synchronize) { 
184
			%>
185
			<input type="checkbox" 
186
					class="textinput" 
187
					id="dataone.nodeSynchronize" 
188
					name="dataone.nodeSynchronize" 	             		    	    	           		    	             			
189
					value="true"
190
					checked="checked"/>
191
			<% } else {%>
192
			<input type="checkbox" 
193
					class="textinput" 
194
					id="dataone.nodeSynchronize" 
195
					name="dataone.nodeSynchronize" 	             		    	    	           		    	             			
196
					value="true"/>
197
			<% } %>
198
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
199
		</div>
200
	    <p>&nbsp;</p>
201
	    
202
	   	<div class="clear"></div>
203
	   	 
204
		<h3>Synchronization Schedule</h3>
205
		The schedule on which metadata should be synchronized with DataONE, expressed as a crontab entry.
206
		
207
		<div class="form-row">
208
			<div class="textinput-label">
209
				<label for="dataone.nodeSynchronization.schedule.year" title="Year">Year</label>
210
			</div>
211
			<input class="textinput" 
212
				id="dataone.nodeSynchronization.schedule.year" 
213
				name="dataone.nodeSynchronization.schedule.year" 	             		    	    	           		    	             			
214
				value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.year") %>"/> 
215
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
216
		</div>
217
		<div class="form-row">
218
			<div class="textinput-label">
219
				<label for="dataone.nodeSynchronization.schedule.mon" title="Month">Month</label>
220
			</div>
221
			<input class="textinput" 
222
				id="dataone.nodeSynchronization.schedule.mon" 
223
				name="dataone.nodeSynchronization.schedule.mon" 	             		    	    	           		    	             			
224
				value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.mon") %>"/>
225
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i> 
226
		</div>
227
		<div class="form-row">
228
			<div class="textinput-label">
229
				<label for="dataone.nodeSynchronization.schedule.mday" title="Day of Month">Day of Month</label>
230
			</div>
231
			<input class="textinput" 
232
				id="dataone.nodeSynchronization.schedule.mday" 
233
				name="dataone.nodeSynchronization.schedule.mday" 	             		    	    	           		    	             			
234
				value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.mday") %>"/> 
235
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
236
		</div>
237
		<div class="form-row">
238
			<div class="textinput-label">
239
				<label for="dataone.nodeSynchronization.schedule.wday" title="Day of Week">Day of Week</label>
240
			</div>
241
			<input class="textinput" 
242
				id="dataone.nodeSynchronization.schedule.wday" 
243
				name="dataone.nodeSynchronization.schedule.wday" 	             		    	    	           		    	             			
244
				value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.wday") %>"/> 
245
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
246
		</div>
247
		<div class="form-row">
248
			<div class="textinput-label">
249
				<label for="dataone.nodeSynchronization.schedule.hour" title="Hours">Hours</label>
250
			</div>
251
			<input class="textinput" 
252
				id="dataone.nodeSynchronization.schedule.hour" 
253
				name="dataone.nodeSynchronization.schedule.hour" 	             		    	    	           		    	             			
254
				value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.hour") %>"/> 
255
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
256
		</div>
257
		<div class="form-row">
258
			<div class="textinput-label">
259
				<label for="dataone.nodeSynchronization.schedule.min" title="Minutes">Minutes</label>
260
			</div>
261
			<input class="textinput" 
262
				id="dataone.nodeSynchronization.schedule.min" 
263
				name="dataone.nodeSynchronization.schedule.min" 	             		    	    	           		    	             			
264
				value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.min") %>"/> 
265
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
266
		</div>
267
		<div class="form-row">
268
			<div class="textinput-label">
269
				<label for="dataone.nodeSynchronization.schedule.sec" title="Seconds">Seconds</label>
270
			</div>
271
			<input class="textinput" 
272
				id="dataone.nodeSynchronization.schedule.sec" 
273
				name="dataone.nodeSynchronization.schedule.sec" 	             		    	    	           		    	             			
274
				value="<%= request.getAttribute("dataone.nodeSynchronization.schedule.sec") %>"/> 
275
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
276
		</div>
277
		
278
		<div class="clear"></div>
279
	
280
		<h3>Replication</h3>
281
		Configuration for replication, including whether this node can be used to house replicas of
282
		objects from other nodes, as well as default replication policies for the objects originating
283
		on this Member Node.
284
		
285
		<div class="form-row">
286
			<div class="textinput-label"><label for="dataone.nodeReplicate" title="Store replicas from other Member Nodes">Accept and Store Replicas</label></div>
287
	
288
			<%
289
			boolean replicate = false;
290
			String nodeReplicate = (String) request.getAttribute("dataone.nodeReplicate");
291
			if (nodeReplicate != null) {
292
				replicate = Boolean.parseBoolean(nodeReplicate);
293
			}
294
			if (replicate) { 
295
			%>
296
			<input type="checkbox" 
297
					class="textinput" 
298
					id="dataone.nodeReplicate" 
299
					name="dataone.nodeReplicate" 	             		    	    	           		    	             			
300
					value="true"
301
					checked="checked"/>
302
			<% } else {%>
303
			<input type="checkbox" 
304
					class="textinput" 
305
					id="dataone.nodeReplicate" 
306
					name="dataone.nodeReplicate" 	             		    	    	           		    	             			
307
					value="true"/>
308
			<% } %>
309
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
310
		</div>
311
		
312
		
313
	
314
	 	<div class="form-row">
315
			<div class="textinput-label">
316
				<label for="dataone.replicationpolicy.default.numreplicas" title="Default Number of Replicas to be created for local objects">Default Number of Replicas</label>
317
			</div>
318
			<input class="textinput" 
319
				id="dataone.replicationpolicy.default.numreplicas" 
320
				name="dataone.replicationpolicy.default.numreplicas" 	             		    	    	           		    	             			
321
				value="<%= request.getAttribute("dataone.replicationpolicy.default.numreplicas") %>"/> 
322
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
323
		</div>
324
	  	<div class="form-row">
325
			<div class="textinput-label">
326
				<label for="dataone.replicationpolicy.default.preferredNodeList" title="A comma-separated list of preferred nodes to house replicas">Default Preferred Nodes</label>
327
			</div>
328
			<input class="textinput" 
329
				id="dataone.replicationpolicy.default.preferredNodeList" 
330
				name="dataone.replicationpolicy.default.preferredNodeList" 	             		    	    	           		    	             			
331
				value="<%= request.getAttribute("dataone.replicationpolicy.default.preferredNodeList") %>"/> 
332
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
333
		</div>
334
	   	<div class="form-row">
335
			<div class="textinput-label">
336
				<label for="dataone.replicationpolicy.default.blockedNodeList" title="A comma-separated list of blocked nodes never to house replicas">Default Blocked Nodes</label>
337
			</div>
338
			<input class="textinput" 
339
				id="dataone.replicationpolicy.default.blockedNodeList" 
340
				name="dataone.replicationpolicy.default.blockedNodeList" 	             		    	    	           		    	             			
341
				value="<%= request.getAttribute("dataone.replicationpolicy.default.blockedNodeList") %>"/> 
342
			<i class="icon-question-sign" onClick="helpWindow('<%= request.getContextPath() %>','docs/dataone.html#configuring-metacat-as-a-member-node')"></i>
343
		</div>
344
	 
345
	 	<div class="buttons-wrapper">
346
			<input type="hidden" name="configureType" value="dataone"/>
347
			<input type="hidden" name="processForm" value="true"/>
348
		
349
			<%
350
				// do we know if it is an update or a new registration?
351
				boolean isUpdate = false;
352
				String isUpdateString = (String) request.getAttribute("dataone.isUpdate");
353
				if (isUpdateString != null) {
354
					isUpdate = Boolean.parseBoolean(isUpdateString);
355
				}
356
				// do we know if it is pending approval?
357
				boolean isSubmitted = false;
358
				String isSubmittedString = (String) request.getAttribute("dataone.mn.registration.submitted");
359
				if (isSubmittedString != null) {
360
					isSubmitted = Boolean.parseBoolean(isSubmittedString);
361
				}
362
			%>
363
			<%if (isUpdate) { %>
364
				<input class=button type="submit" value="Update"/>
365
			<%} else if (isSubmitted) { %>
366
				<input class=button type="submit" value="Update" disabled="disabled"/>
367
			<%} else { %>
368
				<input class=button type="submit" value="Register"/>
369
			<%} %>
370
			<%
371
				// if have we already configured this section, then we cannot skip it
372
				boolean previouslyConfigured = false;
373
				String previouslyConfiguredString = (String) request.getAttribute("configutil.dataoneConfigured");
374
				if (previouslyConfiguredString != null) {
375
					previouslyConfigured = Boolean.parseBoolean(previouslyConfiguredString);
376
				}
377
			%>
378
			<%if (!previouslyConfigured) { %>
379
				<input class=button type="button" value="Skip" onClick="forward('./admin?configureType=dataone&bypass=true&processForm=true')">
380
			<%} %>
381
			<input class=button type="button" value="Cancel" onClick="forward('./admin')"> 
382
		</div>
383
	</form>
384
</div>
385
<%@ include file="./footer-section.jsp"%>
386

    
387
</body>
388
</html>
(9-9/19)