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
|
<a class="btn btn-primary" href="isManager.do#/profile/{{currentRepoApi.repoId}}"><span class="glyphicon glyphicon-link"></span></a>
|
26
|
</span>
|
27
|
<span class="input-group-btn">
|
28
|
<button type="button" class="btn btn-primary" ng-click="showDetails(currentRepoApi.repoId, currentRepoApi.repoName)"><span class="glyphicon glyphicon-info-sign"></span></button>
|
29
|
</span>
|
30
|
</div>
|
31
|
|
32
|
<div class="input-group input-group-sm col-xs-12" style="padding: 10px; float: left;">
|
33
|
<span class="input-group-addon" style="width: 150px;"><b>Datasource details</b></span>
|
34
|
<span class="form-control"><b>contact email:</b> <a href="mailto:{{currentRepoApi.email}}" ng-show="currentRepoApi.email">{{currentRepoApi.email}}</a></span>
|
35
|
<span class="form-control"><b>software typology:</b> {{currentRepoApi.repoType}}</span>
|
36
|
</div>
|
37
|
|
38
|
<div class="input-group input-group-sm col-xs-12" style="padding: 10px; float: left;" ng-show="validatorDetailsAddress || validatorBlacklistAddress">
|
39
|
<span class="input-group-addon" style="width: 150px;"><b>Validation</b></span>
|
40
|
<span class="form-control" ng-show="validatorDetailsAddress"><a href="{{validatorDetailsAddress}}">show last validation details</a></span>
|
41
|
<span class="form-control" ng-show="validatorBlacklistAddress"><a href="{{validatorBlacklistAddress}}">show blacklist</a></span>
|
42
|
</div>
|
43
|
|
44
|
<div class="input-group input-group-sm col-xs-12 col-md-6" style="padding: 10px; float: left;">
|
45
|
<span class="input-group-addon" style="width: 150px;"><b>API details</b></span>
|
46
|
<span class="form-control" ng-repeat="p in currentRepoApi.commonParams" ng-hide="p.name == 'compliance'" style="white-space: nowrap;"><b>{{p.name}}:</b> {{p.value}}</span>
|
47
|
<span class="form-control"><b>ns prefix:</b> {{currentRepoApi.repoPrefix}}</span>
|
48
|
<span class="form-control" ng-show="currentRepoApi.otherParams.length > 0"><a href="javascript:void(0)" data-toggle="modal" data-target="#showOtherParamsModal">other details...</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>Protocol</b></span>
|
53
|
<div class="form-control">
|
54
|
{{currentRepoApi.protocol}}
|
55
|
<span class="pull-right" ng-show="currentRepoApi.protocol == 'oai'">
|
56
|
<a href="javascript:void(0)" ng-click="testOAI(currentRepoApi.accessParams)">verify</a>
|
57
|
</span>
|
58
|
</div>
|
59
|
<span class="input-group-btn">
|
60
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editAccessParamsModal" ng-click="prepareUpdateRepoApi()">access params</button>
|
61
|
</span>
|
62
|
</div>
|
63
|
|
64
|
<div class="input-group input-group-sm col-xs-12 col-md-6" style="padding: 10px; float: left;" ng-repeat="p in currentRepoApi.commonParams" ng-show="p.name == 'compliance'">
|
65
|
<span class="input-group-addon" style="width: 150px;"><b>Compliance</b></span>
|
66
|
<span class="form-control" ng-show="p.otherValue" style="color: #c06a00">{{p.value}} (override)</span>
|
67
|
<span class="form-control" ng-hide="p.otherValue">{{p.value}} (by validator)</span>
|
68
|
|
69
|
<div class="input-group-btn">
|
70
|
<button type="button" data-toggle="dropdown" class="btn btn-sm dropdown-toggle" ng-class="{ 'btn-primary' : !p.otherValue, 'btn-warning' : p.otherValue }">
|
71
|
<span class="caret pull-right"></span>
|
72
|
</button>
|
73
|
<ul class="dropdown-menu dropdown-menu-right" role="menu">
|
74
|
<li role="presentation" ng-repeat="l in compatibilityLevels">
|
75
|
<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>
|
76
|
</li>
|
77
|
<li class="divider" role="presentation" ng-show="p.otherValue"></li>
|
78
|
<li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:void(0)" ng-show="p.otherValue" ng-click="resetApiCompliance()">reset to the original value</b></a></li>
|
79
|
</ul>
|
80
|
</div>
|
81
|
</div>
|
82
|
|
83
|
<div class="input-group input-group-sm col-xs-12 col-md-6" style="padding: 10px; float: left;">
|
84
|
<span class="input-group-addon" style="width: 150px;"><b>Last aggregation</b></span>
|
85
|
<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>
|
86
|
<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>
|
87
|
<ng-api-objectstore-info label="Download" date="currentRepoApi.downloadDate" total="currentRepoApi.downloadTotal" id="currentRepoApi.downloadObjId"></ng-api-objectstore-info>
|
88
|
</div>
|
89
|
|
90
|
</div>
|
91
|
</div>
|
92
|
|
93
|
<div ng-hide="metaworkflows.length != 0" class="text-center" style="margin-top: 40px">
|
94
|
<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>
|
95
|
</div>
|
96
|
|
97
|
<div class="panel-group" id="accordion" ng-show="metaworkflows.length != 0">
|
98
|
<div class="panel panel-default" ng-repeat="m in metaworkflows" style="overflow: visible;">
|
99
|
<div class="panel-heading">
|
100
|
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" data-target="#collapse_{{m.id | limitTo: 36}}" ng-click="getMetaWorkflow(m.id)">
|
101
|
<b>{{m.name}}</b>
|
102
|
</a>
|
103
|
</div>
|
104
|
|
105
|
<div id="collapse_{{m.id | limitTo: 36}}" class="panel-collapse collapse out">
|
106
|
<div class="panel-body" ng-show="m.deleting">
|
107
|
<span class="muted" ng-show="m.deleting">deleting...</span>
|
108
|
</div>
|
109
|
|
110
|
<table class="table" id="metaWfTable" ng-hide="m.deleting">
|
111
|
<thead>
|
112
|
<tr>
|
113
|
<th>Aggregation step</th>
|
114
|
<th class="col-xs-2" style="white-space: nowrap;">Last execution date</th>
|
115
|
<th class="col-xs-1 text-center">Last status</th>
|
116
|
<th class="col-xs-1 text-center">Launch mode</th>
|
117
|
<th class="col-xs-4 col-md-3 text-right">Actions</th>
|
118
|
</tr>
|
119
|
</thead>
|
120
|
<tbody ng-bind-html="to_trusted(currentMetaWorkflow.html)" compile-template></tbody>
|
121
|
</table>
|
122
|
|
123
|
<div class="panel-footer" ng-hide="m.deleting">
|
124
|
<form class="form-inline">
|
125
|
<a href="isManager.do#/profile/{{currentMetaWorkflow.wfId}}" class="btn btn-default btn-sm"><span class="glyphicon glyphicon-link"></span></a>
|
126
|
<div class="btn-group">
|
127
|
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#metaWfEditModal" ng-click="prepareMetaWfEdit()">configure</button>
|
128
|
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" ng-click="updateMetaWorkflowHistory()">history</button>
|
129
|
</div>
|
130
|
<button type="button" class="btn btn-danger btn-sm btnRefreshApi" ng-show="m.destroyWorkflow && !m.deleting" ng-click="destroyDataProviderWorkflow(m)">
|
131
|
<span class="glyphicon glyphicon-remove"></span> delete
|
132
|
</button>
|
133
|
</form>
|
134
|
</div>
|
135
|
</div>
|
136
|
</div>
|
137
|
</div>
|
138
|
|
139
|
<div id="metaWfSelectionModal" class="modal fade" tabindex="-1" role="dialog">
|
140
|
<div class="modal-dialog modal-lg">
|
141
|
<div class="modal-content">
|
142
|
<div class="modal-header">
|
143
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
144
|
<h4 class="modal-title">Available MetaWorkflows for current API</h4>
|
145
|
</div>
|
146
|
<div class="modal-body">
|
147
|
<div class="panel panel-default" ng-repeat="e in availableRepohiWfs" ng-show="verifyMetaWf(currentRepoApi, e)">
|
148
|
<div class="panel-heading">
|
149
|
<a href="javascript:void(0)" data-dismiss="modal" ng-click="newDataProviderWorkflow(e.id)">{{e.name}}</a>
|
150
|
</div>
|
151
|
<div class="panel-body">
|
152
|
<span ng-repeat="f in e.fields">
|
153
|
<strong >{{f.k}}: </strong>{{f.v}}<br />
|
154
|
</span>
|
155
|
<strong>Typology prefixes: </strong>{{e.ifaceTypes.join()}}
|
156
|
<br />
|
157
|
<strong>Compliance prefixes: </strong>{{e.compliances.join()}}
|
158
|
|
159
|
</div>
|
160
|
</div>
|
161
|
</div>
|
162
|
<div class="modal-footer">
|
163
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
164
|
</div>
|
165
|
</div>
|
166
|
</div>
|
167
|
</div>
|
168
|
|
169
|
<div id="editAccessParamsModal" class="modal fade" tabindex="-1" role="dialog">
|
170
|
<div class="modal-dialog modal-lg">
|
171
|
<div class="modal-content">
|
172
|
<div class="modal-header">
|
173
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
174
|
<h4 class="modal-title">Access params (protocol: {{currentRepoApi.protocol}})</h4>
|
175
|
</div>
|
176
|
<div class="modal-body">
|
177
|
<div class="well">
|
178
|
<form class="form-horizontal" role="form">
|
179
|
<div class="form-group" ng-repeat="p in tempAccessParams">
|
180
|
<label for="input_ap_{{p.name}}" class="col-sm-3 control-label">{{p.name}}</label>
|
181
|
<div class="col-sm-9" ng-hide="currentRepoApi.protocol == 'oai' && p.name == 'set'">
|
182
|
<input type="text" class="form-control" id="input_ap_{{p.name}}" ng-model="p.value"/>
|
183
|
</div>
|
184
|
<div class="col-sm-9" ng-show="currentRepoApi.protocol == 'oai' && p.name == 'set'">
|
185
|
<select class="form-control" style="font-size: 11px" size="10" multiple ng-model="selectedSets" ng-change="updateSets(selectedSets, tempAccessParams)">
|
186
|
<option ng-repeat="set in currentSets" value="{{set.id}}" ng-selected="set.selected">{{set.name}}</option>
|
187
|
</select>
|
188
|
<span><b>Current set(s): </b>{{selectedSets.join(', ')}}</span>
|
189
|
<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>
|
190
|
</div>
|
191
|
</div>
|
192
|
<div class="form-group">
|
193
|
<label for="input_mdid_path" class="col-sm-3 control-label">ID XPath</label>
|
194
|
<div class="col-sm-9">
|
195
|
<input type="text" class="form-control" id="input_mdid_path" ng-model="tempMdIdPath"/>
|
196
|
</div>
|
197
|
</div>
|
198
|
</form>
|
199
|
</div>
|
200
|
</div>
|
201
|
<div class="modal-footer">
|
202
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
203
|
<button type="button" class="btn btn-primary" data-dismiss="modal" ng-click="updateRepoApi()">Save</button>
|
204
|
</div>
|
205
|
</div>
|
206
|
</div>
|
207
|
</div>
|
208
|
|
209
|
<div id="showOtherParamsModal" class="modal fade" tabindex="-1" role="dialog">
|
210
|
<div class="modal-dialog modal-lg">
|
211
|
<div class="modal-content">
|
212
|
<div class="modal-header">
|
213
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
214
|
<h4 class="modal-title">Other parameters</h4>
|
215
|
</div>
|
216
|
<div class="modal-body">
|
217
|
<div class="well">
|
218
|
<table class="table table-bordered table-condensed">
|
219
|
<thead>
|
220
|
<th>
|
221
|
<span>Name</span>
|
222
|
<span class="pull-right">Value</span>
|
223
|
</th>
|
224
|
</thead>
|
225
|
<tbody>
|
226
|
<tr ng-repeat="p in currentRepoApi.otherParams">
|
227
|
<td>
|
228
|
<b>{{p.name}}</b>
|
229
|
<span class="pull-right" ng-if="p.value">{{p.value}}</span>
|
230
|
<span class="pull-right text-muted" ng-if="!p.value"><i>missing value</i></span>
|
231
|
</td>
|
232
|
</tr>
|
233
|
</tbody>
|
234
|
</table>
|
235
|
</div>
|
236
|
</div>
|
237
|
<div class="modal-footer">
|
238
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
239
|
</div>
|
240
|
</div>
|
241
|
</div>
|
242
|
</div>
|
243
|
|
244
|
|
245
|
<div id="showRemoteSyncApiModal" class="modal fade" tabindex="-1" role="dialog">
|
246
|
<div class="modal-dialog modal-lg">
|
247
|
<div class="modal-content">
|
248
|
<div class="modal-header">
|
249
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
250
|
<h4 class="modal-title">Remote API</h4>
|
251
|
</div>
|
252
|
<div class="modal-body">
|
253
|
The following API has been already registered on
|
254
|
<a href="$syncISBaseUrl$/mvc/ui/repoApis.do#/api/{{syncApi.datasource}}/{{syncApi.id}}/ALL/ALL" target="_blank">
|
255
|
$syncDesc$
|
256
|
</a>
|
257
|
</div>
|
258
|
<div class="modal-footer">
|
259
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
260
|
</div>
|
261
|
</div>
|
262
|
</div>
|
263
|
</div>
|
264
|
|
265
|
|
266
|
<div id="newRemoteSyncApiModal" class="modal fade" tabindex="-1" role="dialog">
|
267
|
<div class="modal-dialog modal-lg">
|
268
|
<div class="modal-content">
|
269
|
<div class="modal-header">
|
270
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
271
|
<h4 class="modal-title">Create remote API</h4>
|
272
|
</div>
|
273
|
<div class="modal-body">
|
274
|
The following API will be created on <b>$syncDesc$</b>:
|
275
|
<br /><br />
|
276
|
<pre>{{syncApi | json}}</pre>
|
277
|
</div>
|
278
|
<div class="modal-footer">
|
279
|
<button type="button" class="btn btn-primary" ng-click="createRemoteSyncApi(syncApi)">Confirm</button>
|
280
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
281
|
</div>
|
282
|
</div>
|
283
|
</div>
|
284
|
</div>
|
285
|
|
286
|
$ui/repos/repoDetails()$
|
287
|
$ui/workflows/common/atomwf()$
|
288
|
$ui/workflows/common/metawf_edit()$
|
289
|
$ui/workflows/common/atomwf_edit()$
|
290
|
$ui/workflows/common/wf_monitor()$
|
291
|
$ui/workflows/common/wf_monitor_proc( backFunction={updateMetaWorkflowHistory()} )$
|
292
|
$ui/workflows/common/wf_monitor_proc_node()$
|
293
|
$ui/workflows/common/wf_journal_entry()$
|