251 lines
6.8 KiB
JavaScript
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);
|
|
}
|
|
|
|
} |