dnet-core/dnet-modular-ui/src/main/resources/eu/dnetlib/web/resources/js/dnet_oai_explorer.js

251 lines
6.8 KiB
JavaScript

var module = angular.module('oaiExplorerUI', ['ngGrid']);
module.directive('compileTemplate', function($compile, $parse){
return {
link: function(scope, element, attr){
var parsed = $parse(attr.ngBindHtml);
function getStringValue() { return (parsed(scope) || '').toString(); }
//Recompile if the template changes
scope.$watch(getStringValue, function() {
$compile(element, null, -9999)(scope); //The -9999 makes it skip directives so that we do not recompile ourselves
});
}
}
});
function oaiExplorerCtrl($scope, $http, $sce) {
$scope.tmpBaseUrl = getInitialBaseUrl();
$scope.baseUrl = "";
$scope.currentAction = "";
$scope.oaiUrl = "";
$scope.testAllVerbsData = [];
$scope.testHarvestingData = [];
$scope.continueIteration = false;
$scope.identifyData = "";
$scope.isValidUrl = function(url) {
return (/^http/).test(url);
}
$scope.verifyBaseUrl = function(url) {
$scope.baseUrl = "";
$scope.currentAction = "";
if ($scope.isValidUrl(url)) {
$scope.baseUrl = url;
$scope.identify();
}
}
initSpinner();
$scope.showError = function(error) { show_notification("error", error); }
$scope.showNotification = function(message) { show_notification("info", message); }
$scope.showSpinner = function() { showSpinner(); }
$scope.hideSpinner = function() { hideSpinner(); }
$scope.identify = function() {
$scope.oaiUrl = $scope.baseUrl + "?verb=Identify";
$scope.callRemoteMethod('Identify', {
'baseUrl' : $scope.baseUrl,
'verb' : 'Identify'
});
}
$scope.listMetadataFormats = function() {
$scope.oaiUrl = $scope.baseUrl + "?verb=ListMetadataFormats";
$scope.callRemoteMethod('ListMetadataFormats', {
'baseUrl' : $scope.baseUrl,
'verb' : 'ListMetadataFormats'
});
}
$scope.listSets = function() {
$scope.oaiUrl = $scope.baseUrl + "?verb=ListSets";
$scope.callRemoteMethod('ListSets', {
'baseUrl' : $scope.baseUrl,
'verb' : 'ListSets'
});
}
$scope.listRecords = function(mdf, set) {
$scope.oaiUrl = $scope.baseUrl + "?verb=ListRecords&metadataPrefix=" + mdf;
if (set) {
$scope.oaiUrl += "&set=" + set;
}
$scope.callRemoteMethod('ListRecords', {
'baseUrl' : $scope.baseUrl,
'verb' : 'ListRecords',
'mdf' : mdf,
'set' : set
});
}
$scope.listIdentifiers = function(mdf, set) {
$scope.oaiUrl = $scope.baseUrl + "?verb=ListIdentifier&metadataPrefix=" + mdf;
if (set) {
$scope.oaiUrl += "&set=" + set;
}
$scope.callRemoteMethod('ListIdentifiers', {
'baseUrl' : $scope.baseUrl,
'verb' : 'ListIdentifiers',
'mdf' : mdf,
'set' : set
});
}
$scope.getRecord = function(id, mdf) {
$scope.currentAction = "GetRecord";
$scope.oaiUrl = $scope.baseUrl + "?verb=GetRecord&metadataPrefix=" + mdf + "&identifier=" + id;
$scope.callRemoteMethod('GetRecord', {
'baseUrl' : $scope.baseUrl,
'verb' : 'GetRecord',
'mdf' : mdf,
'id' : id
});
}
$scope.nextPage = function(token) {
$scope.oaiUrl = $scope.baseUrl + "?verb=" + $scope.currentAction + "&resumptionToken=" + token;
$scope.callRemoteMethod($scope.currentAction, {
'baseUrl': $scope.baseUrl,
'verb': $scope.currentAction,
'token' : token
});
}
$scope.testAllVerbs = function() {
$scope.currentAction = "testAllVerbs";
$scope.oaiDataHTML = "";
$scope.oaiUrl = $scope.baseUrl + "?verb=Identify";
$scope.testAllVerbsData = [];
$scope.testHarvestingData = [];
$scope.continueIteration = true;
$scope.time_min = 9999999;
$scope.time_max = 0;
$scope.time_total = 0;
$scope.time_sqrTotal = 0;
$scope.time_avg = 0;
$scope.time_stddev = 0;
$scope.testVerb($scope.testAllVerbsData, "test_oai_verb", {
'baseUrl' : $scope.baseUrl,
'verb' : 'Identify',
});
}
$scope.testHarvesting = function() {
$scope.currentAction = "testHarvesting";
$scope.oaiUrl = $scope.baseUrl + "?verb=ListRecords&metadataPrefix=oai_dc";
$scope.oaiDataHTML = "";
$scope.testAllVerbsData = [];
$scope.testHarvestingData = [];
$scope.continueIteration = false;
$scope.time_min = 9999999;
$scope.time_max = 0;
$scope.time_total = 0;
$scope.time_sqrTotal = 0;
$scope.time_avg = 0;
$scope.time_stddev = 0;
}
$scope.startTestHarvesting = function() {
$scope.continueIteration = true;
$scope.time_min = 9999999;
$scope.time_max = 0;
$scope.time_total = 0;
$scope.time_sqrTotal = 0;
$scope.time_avg = 0;
$scope.time_stddev = 0;
$scope.testHarvestingData = [];
$scope.testVerb($scope.testHarvestingData, "test_harvesting", {
'baseUrl' : $scope.baseUrl,
'verb' : 'ListRecords',
'mdf' : 'oai_dc'
});
}
$scope.stopTestHarvesting = function() {
$scope.continueIteration = false;
}
$scope.testVerb = function(list, method, params) {
//$scope.showSpinner();
$http.post(method, params).success(function(data) {
list.push(data);
if (data.time) {
var curr = data.time / 1000;
$scope.time_min = Math.min($scope.time_min, curr);
$scope.time_max = Math.max($scope.time_max, curr);
$scope.time_total += curr;
$scope.time_sqrTotal += curr*curr;
$scope.time_avg = ($scope.time_total/list.length);
$scope.time_stddev = Math.sqrt((list.length * $scope.time_sqrTotal) - ($scope.time_total * $scope.time_total)) / list.length;
}
location.href="#endPage";
//$scope.hideSpinner();
if ($scope.continueIteration && data.nextCall && data.nextCall.verb) {
$scope.testVerb(list, method, data.nextCall);
} else {
$scope.continueIteration = false;
}
}).error(
function() {
$scope.showError('Something really bad must have happened to our fellow hamster..');
//$scope.hideSpinner();
}
);
}
$scope.callRemoteMethod = function(name, params) {
$scope.currentAction = name;
$scope.oaiDataHTML = "";
$scope.testAllVerbsData = [];
$scope.testHarvestingData = [];
$scope.showSpinner();
$http.post('oai_verb', params).success(function(data) {
$scope.oaiDataHTML = $sce.trustAsHtml(data);
$scope.hideSpinner();
}).error(
function() {
$scope.showError('Something really bad must have happened to our fellow hamster..');
$scope.hideSpinner();
}
);
}
$scope.updateGraph = function(list, field) {
var i = 1;
var d = [];
angular.forEach(list, function(obj) {
if (obj[field]) {
d[i] = [i, obj[field]];
}
i++;
});
jQuery.plot("#harvestingGraph", [ d ]);
}
if ($scope.tmpBaseUrl && $scope.isValidUrl($scope.tmpBaseUrl)) {
$scope.verifyBaseUrl($scope.tmpBaseUrl);
}
}