Project

General

Profile

1
<div class="row">
2
	<div class="col-xs-12 col-md-6">
3
			<button class="btn btn-sm btn-primary btnRefreshApi" type="button" data-toggle="modal" data-target="#metaWfSelectionModal"><span class="glyphicon glyphicon-plus"></span> add metaworkflow</button>
4
			<button class="btn btn-sm btn-danger" type="button" ng-click="removeApi()" ng-if="currentRepoApi.removable">Delete API</button>
5
	</div>
6
	<div class="col-xs-12 col-md-6 text-right">
7
		<button class="btn btn-sm btn-default btnRefreshApi" type="button" ng-click="loadApi()"><span class="glyphicon glyphicon-refresh"></span></button>
8
		<button class="btn btn-sm btn-default" type="button" onclick="history.go(-1);">back</button>
9
	</div>
10
</div>
11

    
12

    
13
<div class="well" style="margin-top: 20px; margin-bottom: 20px">
14
	<div class="row">
15
		<div class="input-group input-group-sm col-xs-12" style="padding: 10px; float: left;">
16
	  		<span class="input-group-addon" style="width: 150px;"><b>Datasource</b></span>
17
			<span class="form-control">
18
				{{currentRepoApi.repoName}}
19
				<span class="pull-right" ng-show="currentRepoApi.repoCountry">
20
					<img ng-src="../resources/img/flags/{{currentRepoApi.repoCountry}}.gif" /> 
21
					{{currentRepoApi.repoCountry}}
22
				</span>
23
			</span>
24
			<span class="input-group-btn">
25
				<button type="button" class="btn btn-primary" ng-click="showDetails(currentRepoApi.repoId, currentRepoApi.repoName)"><span class="glyphicon glyphicon-info-sign"></span></button>
26
			</span>
27
		</div>
28
		
29
		<div class="input-group input-group-sm col-xs-12" style="padding: 10px; float: left;">
30
	  		<span class="input-group-addon" style="width: 150px;"><b>Datasource details</b></span>
31
			<div class="form-control"><b>contact email:</b> <a href="mailto:{{currentRepoApi.email}}" ng-show="currentRepoApi.email">{{currentRepoApi.email}}</a></div>
32
			<div class="form-control"><b>typology:</b> {{currentRepoApi.repoType}}</div>
33
			<div class="form-control"><b>consent terms of use:</b> <span class="label" ng-class="{
34
				'label-default': currentRepoApi.consentTermsOfUseLabel != 'YES' && currentRepoApi.consentTermsOfUseLabel != 'NO', 
35
				'label-success': currentRepoApi.consentTermsOfUseLabel == 'YES', 
36
				'label-danger' : currentRepoApi.consentTermsOfUseLabel == 'NO' 
37
			}">{{currentRepoApi.consentTermsOfUseLabel}}</span></div>
38
			<div class="form-control"><b>fulltext download:</b> <span class="label" ng-class="{
39
				'label-default': currentRepoApi.fullTextDownloadLabel != 'YES' && currentRepoApi.fulltextDownloadLabel != 'NO', 
40
				'label-success': currentRepoApi.fullTextDownloadLabel == 'YES', 
41
				'label-danger' : currentRepoApi.fullTextDownloadLabel == 'NO' 
42
			}">{{currentRepoApi.fullTextDownloadLabel}}</span></div>
43
		</div>
44
		
45
		<div class="input-group input-group-sm col-xs-12" style="padding: 10px; float: left;" ng-show="validatorDetailsAddress || validatorBlacklistAddress">
46
	  		<span class="input-group-addon" style="width: 150px;"><b>Validation</b></span>
47
			<span class="form-control" ng-show="validatorDetailsAddress"><a href="{{validatorDetailsAddress}}">show last validation details</a></span>
48
			<span class="form-control" ng-show="validatorBlacklistAddress"><a href="{{validatorBlacklistAddress}}">show blacklist</a></span>
49
		</div>
50
		
51
		<div class="input-group input-group-sm col-xs-12 col-md-6" style="padding: 10px; float: left;">
52
			<span class="input-group-addon" style="width: 150px;"><b>API details</b></span>
53
			<span class="form-control" style="white-space: nowrap;"><b>id:</b> {{currentRepoApi.id}}</span>
54
			<span class="form-control" style="white-space: nowrap;"><b>label:</b> {{currentRepoApi.label}}</span>
55
			<span class="form-control" style="white-space: nowrap;"><b>active:</b> {{currentRepoApi.active}}</span>
56
			<span class="form-control"><b>ns prefix:</b> {{currentRepoApi.repoPrefix}}</span>
57
			<span class="form-control"><b>metadata id path:</b> {{currentRepoApi.metadataIdentifierPath}}</span>
58
		</div>
59
				
60
		<div class="input-group input-group-sm col-xs-12 col-md-6" style="padding: 10px; float: left;">
61
	  		<span class="input-group-addon" style="width: 150px;"><b>Protocol</b></span>
62
			<div class="form-control">
63
				{{currentRepoApi.protocol}}
64
				<span class="pull-right" ng-show="currentRepoApi.protocol == 'oai'">
65
					<a href="javascript:void(0)" ng-click="testOAI(currentRepoApi.accessParams)">verify</a>				
66
				</span>
67
			</div>
68
			<span class="input-group-btn">
69
				<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editAccessParamsModal" ng-click="prepareUpdateRepoApi()">access params</button>
70
			</span>
71
		</div>
72
		
73
		<div class="input-group input-group-sm col-xs-12 col-md-6" style="padding: 10px; float: left;">
74
			<span class="input-group-addon" style="width: 150px;"><b>Compliance</b></span>
75
			<span class="form-control" ng-show="currentRepoApi.complianceOverrided == true" style="color: #c06a00">{{currentRepoApi.compliance}} (override)</span>
76
			<span class="form-control" ng-show="currentRepoApi.complianceOverrided != true">{{currentRepoApi.compliance}} (by validator)</span>
77
		
78
			<div class="input-group-btn">
79
				<button type="button" data-toggle="dropdown" class="btn btn-sm dropdown-toggle" ng-class="{ 'btn-primary' : currentRepoApi.complianceOverrided != true, 'btn-warning' : currentRepoApi.complianceOverrided  == true}">
80
					<span class="caret pull-right"></span>
81
				</button>
82
			    <ul class="dropdown-menu dropdown-menu-right" role="menu">
83
			        <li role="presentation" ng-repeat="l in compatibilityLevels">
84
			        	<a role="menuitem" tabindex="-1" href="javascript:void(0)" ng-click="overrideApiCompliance(l.name)">override to <b>{{l.name}}</b> (<i>{{l.desc}}</i>)</a>
85
			        </li>
86
					<li class="divider" role="presentation" ng-show="p.otherValue"></li>
87
			        <li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:void(0)" ng-show="currentRepoApi.complianceOverrided == true" ng-click="resetApiCompliance()">reset to the original value</b></a></li>
88
			    </ul>
89
			</div>
90
		</div>
91
			
92
		<div class="input-group input-group-sm col-xs-12 col-md-6" style="padding: 10px; float: left;">
93
	  		<span class="input-group-addon" style="width: 150px;"><b>Last aggregation</b></span>
94
	  		<ng-api-mdstore-info label="Collect" date="currentRepoApi.collDate" total="currentRepoApi.collTotal" id="currentRepoApi.collMdId"   sync-button-label="$syncButton$" sync-function="showCreateRemoteSyncApi('$mongoUrl$','$mongoDB$',currentRepoApi.collMdId, 'remoteCollectedMdStore')"></ng-api-mdstore-info>	  		
95
	  		<ng-api-mdstore-info label="Transform" date="currentRepoApi.aggrDate" total="currentRepoApi.aggrTotal" id="currentRepoApi.aggrMdId" sync-button-label="$syncButton$" sync-function="showCreateRemoteSyncApi('$mongoUrl$','$mongoDB$',currentRepoApi.aggrMdId, 'remoteAggregatedMdStore')"></ng-api-mdstore-info>
96
	  		<ng-api-objectstore-info label="Download" date="currentRepoApi.downloadDate" total="currentRepoApi.downloadTotal" id="currentRepoApi.downloadObjId"></ng-api-objectstore-info>
97
		</div>		
98
		
99
	</div>
100
</div>
101
	
102
<div ng-hide="metaworkflows.length != 0" class="text-center" style="margin-top: 40px">
103
	<button class="btn btn-lg btn-primary btnRefreshApi" type="button" data-toggle="modal" data-target="#metaWfSelectionModal"><span class="glyphicon glyphicon-plus"></span> add first metaworkflow</button>
104
</div>
105

    
106
<div class="panel-group" id="accordion" ng-show="metaworkflows.length != 0">
107
	<div class="panel panel-default" ng-repeat="m in metaworkflows" style="overflow: visible;">
108
		<div class="panel-heading">
109
			<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" data-target="#collapse_{{m.id | limitTo: 36}}" ng-click="getMetaWorkflow(m.id)">
110
				<b>{{m.name}}</b>
111
			</a>
112
		</div>
113
		
114
		<div id="collapse_{{m.id | limitTo: 36}}" class="panel-collapse collapse out">
115
			<div class="panel-body" ng-show="m.deleting">
116
				<span class="muted" ng-show="m.deleting">deleting...</span>
117
			</div>
118

    
119
			<table class="table" id="metaWfTable" ng-hide="m.deleting">
120
				<thead>
121
					<tr>
122
						<th>Aggregation step</th>
123
						<th class="col-xs-2" style="white-space: nowrap;">Last execution date</th>
124
						<th class="col-xs-1 text-center">Last status</th>
125
						<th class="col-xs-1 text-center">Launch mode</th>
126
						<th class="col-xs-4 col-md-3 text-right">Actions</th>
127
					</tr>
128
				</thead>
129
				<tbody ng-bind-html="to_trusted(currentMetaWorkflow.html)" compile-template></tbody>
130
			</table>
131

    
132
			<div class="panel-footer" ng-hide="m.deleting">
133
				<form class="form-inline">
134
					<a href="isManager.do#/profile/{{currentMetaWorkflow.wfId}}" class="btn btn-default btn-sm"><span class="glyphicon glyphicon-link"></span></a>
135
					<div class="btn-group">
136
						<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#metaWfEditModal" ng-click="prepareMetaWfEdit()">configure</button>
137
						<button type="button" class="btn btn-default btn-sm" data-toggle="modal" ng-click="updateMetaWorkflowHistory()">history</button>
138
					</div>
139
					<button type="button" class="btn btn-danger btn-sm btnRefreshApi" ng-show="m.destroyWorkflow && !m.deleting" ng-click="destroyDataProviderWorkflow(m)">
140
						<span class="glyphicon glyphicon-remove"></span> delete
141
					</button>
142
				</form>
143
			</div>
144
		</div>
145
	</div>
146
</div>
147

    
148
<div id="metaWfSelectionModal" class="modal fade" tabindex="-1" role="dialog">
149
	<div class="modal-dialog modal-lg">
150
		<div class="modal-content">
151
			<div class="modal-header">
152
				<button type="button" class="close" data-dismiss="modal">&times;</button>
153
				<h4 class="modal-title">Available MetaWorkflows for current API</h4>
154
			</div>
155
			<div class="modal-body">
156
				<div class="panel panel-default" ng-repeat="e in availableRepohiWfs" ng-show="verifyMetaWf(currentRepoApi, e)">
157
					<div class="panel-heading">
158
						<a href="javascript:void(0)" data-dismiss="modal" ng-click="newDataProviderWorkflow(e.id)">{{e.name}}</a>
159
					</div>
160
					<div class="panel-body">
161
						<span ng-repeat="f in e.fields">
162
							<strong >{{f.k}}: </strong>{{f.v}}<br />
163
						</span>
164
						<strong>Datasource types: </strong>{{e.ifaceTypes.join()}}
165
						<br />
166
						<strong>Compliance prefixes: </strong>{{e.compliances.join()}}
167
						<br />
168
						<strong>Consent terms of use: </strong>{{e.consentTermsOfUseLabel}}
169
						<br />
170
						<strong>Fulltext download: </strong>{{e.fullTextDownloadLabel}}
171
					</div>
172
				</div>
173
			</div>
174
			<div class="modal-footer">
175
				<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
176
			</div>
177
		</div>
178
	</div>
179
</div>
180

    
181
<div id="editAccessParamsModal" class="modal fade" tabindex="-1" role="dialog">
182
	<div class="modal-dialog modal-lg">
183
		<div class="modal-content">
184
			<div class="modal-header">
185
				<button type="button" class="close" data-dismiss="modal">&times;</button>
186
				<h4 class="modal-title">Access params (protocol: {{currentRepoApi.protocol}})</h4>
187
			</div>
188
			<div class="modal-body">
189
				<div class="well">
190
					<form class="form-horizontal" role="form">
191
						<div class="form-group" ng-repeat="p in tempAccessParams">
192
							<label for="input_ap_{{p.name}}" class="col-sm-3 control-label">{{p.name}}</label>
193
							<div class="col-sm-9" ng-hide="currentRepoApi.protocol == 'oai' && p.name == 'set'">
194
								<input type="text" class="form-control" id="input_ap_{{p.name}}" ng-model="p.value"/>
195
							</div>
196
							<div class="col-sm-9" ng-show="currentRepoApi.protocol == 'oai' && p.name == 'set'"> 
197
								<select class="form-control" style="font-size: 11px" size="10" multiple ng-model="selectedSets" ng-change="updateSets(selectedSets, tempAccessParams)">
198
									<option ng-repeat="set in currentSets" value="{{set.id}}" ng-selected="set.selected">{{set.name}}</option>
199
								</select>
200
								<span><b>Current set(s): </b>{{selectedSets.join(', ')}}</span>
201
								<button class="btn btn-xs btn-default pull-right" style="margin-top: 4px" ng-click="listSets(tempAccessParams)"><span class="glyphicon glyphicon-refresh"></span> refresh</button>
202
							</div>
203
  						</div>
204
  						<div class="form-group">
205
							<label for="input_mdid_path" class="col-sm-3 control-label">ID XPath</label>
206
							<div class="col-sm-9">
207
								<input type="text" class="form-control" id="input_mdid_path" ng-model="tempMdIdPath"/>
208
							</div>
209
  						</div>
210
 					</form>
211
				</div>
212
			</div>
213
			<div class="modal-footer">
214
				<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
215
				<button type="button" class="btn btn-primary" data-dismiss="modal" ng-click="updateRepoApi()">Save</button>
216
			</div>
217
		</div>
218
	</div>
219
</div>
220

    
221
<div id="showRemoteSyncApiModal" class="modal fade" tabindex="-1" role="dialog">
222
	<div class="modal-dialog modal-lg">
223
		<div class="modal-content">
224
			<div class="modal-header">
225
				<button type="button" class="close" data-dismiss="modal">&times;</button>
226
				<h4 class="modal-title">Remote API</h4>
227
			</div>
228
			<div class="modal-body">
229
				{{syncShowRemoteMessage}}
230
				<a href="$syncISBaseUrl$/mvc/ui/repoApis.do#/api/{{syncApi.datasource}}/{{syncApi.id}}/ALL/ALL" target="_blank">
231
					 $syncDesc$
232
				</a>
233
			</div>
234
			<div class="modal-footer">
235
				<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
236
			</div>
237
		</div>
238
	</div>
239
</div>
240

    
241

    
242
<div id="newRemoteSyncApiModal" class="modal fade" tabindex="-1" role="dialog">
243
	<div class="modal-dialog modal-lg">
244
		<div class="modal-content">
245
			<div class="modal-header">
246
				<button type="button" class="close" data-dismiss="modal">&times;</button>
247
				<h4 class="modal-title">Create remote API</h4>
248
			</div>
249
			<div class="modal-body">
250
				The following API will be created on <b>$syncDesc$</b>:
251
				<br /><br />
252
				
253
				<div>
254
					<ul class="nav nav-tabs" role="tablist">
255
						<li class="active"><a href="javascript:void(0)" data-toggle="tab" data-target="#showAsTable">table</a></li>
256
						<li><a href="javascript:void(0)" data-toggle="tab" data-target="#showAsJson">json</a></li>
257
					</ul>
258
					<div class="tab-content" style="margin-top:4px">
259
						<div class="tab-pane active" id="showAsTable">
260
							<table class="table table-striped table-condensed">
261
								<tr>
262
									<th>id</th>
263
									<td>{{syncApi.id}}</td>
264
								</tr>
265
								<tr>
266
									<th>protocol</th>
267
									<td>{{syncApi.protocol}}</td>
268
								</tr>
269
								<tr>
270
									<th>baseUrl</th>
271
									<td>{{syncApi.baseurl}}</td>
272
								</tr>
273
								<tr ng-repeat="p in syncApi.apiParams">
274
									<th>{{p.param}}</th>
275
									<td>{{p.value}}</td>
276
								</tr>
277
								<tr>
278
									<th>id xpath</th>
279
									<td>{{syncApi.metadataIdentifierPath}}</td>
280
								</tr>
281
							</table>
282
						</div>
283
						<div class="tab-pane" id="showAsJson">
284
							<pre>{{syncApi | json}}</pre>
285
						</div>
286
					</div>
287
				</div>
288
			</div>
289
			<div class="modal-footer">
290
				<button type="button" class="btn btn-primary" data-dismiss="modal" ng-click="createRemoteSyncApi(syncApi)">Confirm</button>
291
				<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
292
			</div>
293
		</div>
294
	</div>
295
</div>
296

    
297
$ui/repos/repoDetails()$
298
$ui/workflows/common/atomwf()$
299
$ui/workflows/common/metawf_edit()$		
300
$ui/workflows/common/atomwf_edit()$
301
$ui/workflows/common/wf_monitor()$
302
$ui/workflows/common/wf_monitor_proc( backFunction={updateMetaWorkflowHistory()} )$
303
$ui/workflows/common/wf_monitor_proc_node()$
304
$ui/workflows/common/wf_journal_entry()$
(2-2/3)