Readjust scripts structure and add script to update RPOs.

This commit is contained in:
Konstantinos Triantafyllou 2024-05-27 11:30:46 +03:00
parent 9f5b087587
commit d20f1611c5
8 changed files with 4970 additions and 9481 deletions

5
scripts/2024-01-01.js Normal file
View File

@ -0,0 +1,5 @@
load('library/initialize.js');
initializeRPOs(removeDuplicateIds(rpos, 'id'));
initializeRFOs(removeDuplicateIds(rfos, 'funder_id'));
initializeDatasources(removeDuplicateIds(datasources, 'openaire_id'));

37
scripts/2024-05-24.js Normal file
View File

@ -0,0 +1,37 @@
load('library/initialize.js');
var aliasWithRole = ["met-eireann","mary-immaculate-college","technological-university-dublin","sport-ireland","dcu","irel","nda","ucd","rcsi","sfi","health-service-executive","hib","atu","ul","deptecc","tusla---child-and-family-agency","tcd","galway","maynooth","heanet","i-form-advanced-manufacturing-research-centre","rotunda-hospital","ucc","department-of-children-and-youth-affairs","dublin","marine-institute","seai","cit","setu","esri1","department-of-agriculture-food-and-the-marine","iph"];
function keepRPOsWithRole(aliasWithRole) {
var stakeholders = db.stakeholder.find({ alias: { $in: aliasWithRole } });
rpos = removeDuplicateIds(rpos, 'id');
var canContinue = true;
stakeholders.forEach(stakeholder => {
if(rpos.find(rpo => !!rpo.id && rpo.id === stakeholder.index_id) == null) {
print('Stakeholder with alias: ' + stakeholder.alias + ' has invalid id. Checking by name...');
var newRPO = rpos.find(rpo => !!rpo.name && rpo.name === stakeholder.index_name);
if(newRPO != null) {
print('Name is found. Updating the id from: ' + stakeholder.index_id + ' to: ' + newRPO.id);
stakeholder.index_id = newRPO.id;
db.stakeholder.save(stakeholder);
} else {
newRPO = rpos.find(rpo => !!rpo.shortname && rpo.shortname === stakeholder.index_shortname);
if (newRPO != null) {
print('Shortname is found. Updating the id from: ' + stakeholder.index_id + ' to: ' + newRPO.id);
stakeholder.index_id = newRPO.id;
db.stakeholder.save(stakeholder);
} else {
print('Resolve stakeholder with alias: ' + stakeholder.alias + ' to continue.');
canContinue = false;
}
}
}
});
return canContinue;
}
if(keepRPOsWithRole(aliasWithRole)) {
print('Deleting old profiles');
db.stakeholder.deleteMany({ alias: { $nin: aliasWithRole }, defaultId: { $ne: null } });
initializeRPOs(rpos);
}

View File

@ -1,99 +0,0 @@
//load('organization.js')
//load('funder.js')
//load('datasource.js')
function initializeRPOs(rpos) {
var defaultRPO = db.stakeholder.findOne({"alias": "default-rpo"});
rpos.forEach(rpo => {
let name = rpo.shortname != 'NULL'?rpo.shortname:rpo.name;
let alias = name.toLowerCase().replace(/\s+/g, "-");
i = 1;
while(db.stakeholder.findOne({"alias": alias}) != null) {
alias = alias + i.toString();
i++;
}
var stakeholder = {
"_class": "eu.dnetlib.uoamonitorservice.entities.Stakeholder",
"type": "organization",
"index_id": rpo.id,
"index_name": rpo.name,
"index_shortName": rpo.shortname,
"statsProfile": "ie_monitor",
"isUpload": false,
"name": rpo.name,
"alias": alias,
"locale": "EN",
"visibility": "PUBLIC",
"topics": [],
"defaultId": defaultRPO._id.valueOf()
}
db.stakeholder.save(stakeholder);
});
print(rpos.length + ' RPOs has been created');
}
function initializeRFOs(rfos) {
var defaultRFO = db.stakeholder.findOne({"alias": "default-rfo"});
rfos.forEach(rfo => {
let name = rfo.funder_shortname != ''?rfo.funder_shortname:rfo.funder_name;
let alias = name.toLowerCase().replace(/\s+/g, "-");
i = 1;
while(db.stakeholder.findOne({"alias": alias}) != null) {
alias = alias + i.toString();
i++;
}
var stakeholder = {
"_class": "eu.dnetlib.uoamonitorservice.entities.Stakeholder",
"type": "funder",
"index_id": rfo.funder_id,
"index_name": rfo.funder_name,
"index_shortName": rfo.funder_shortname,
"statsProfile": "ie_monitor",
"isUpload": false,
"name": rfo.funder_name,
"alias": alias,
"locale": "EN",
"visibility": "PUBLIC",
"topics": [],
"defaultId": defaultRFO._id.valueOf()
}
db.stakeholder.save(stakeholder);
});
print(rfos.length + ' RFOs has been created');
}
function initializeDatasources(datasources) {
var defaultRepo = db.stakeholder.findOne({"alias": "default-repo"});
datasources.forEach(datasource => {
let name = datasource.official_name;
let alias = name.toLowerCase().replace(/\s+/g, "-");
i = 1;
while(db.stakeholder.findOne({"alias": alias}) != null) {
alias = alias + i.toString();
i++;
}
var stakeholder = {
"_class": "eu.dnetlib.uoamonitorservice.entities.Stakeholder",
"type": "datasource",
"index_id": datasource.openaire_id,
"index_name": datasource.official_name,
"index_shortName": datasource.official_name,
"statsProfile": "ie_monitor",
"isUpload": false,
"name": datasource.official_name,
"alias": alias,
"locale": "EN",
"visibility": "PUBLIC",
"topics": [],
"defaultId": defaultRepo._id.valueOf()
}
db.stakeholder.save(stakeholder);
});
print(datasources.length + ' repositories has been created');
}
use irishdb;
initializeRPOs(rpos);
initializeRFOs(rfos);
initializeDatasources(datasources);

View File

@ -0,0 +1,122 @@
load('library/organization.js')
load('library/funder.js')
load('library/datasource.js')
function generateAlias(name) {
// Step 1: Convert to lower case
let alias = name.toLowerCase();
// Step 2: Replace all invalid characters with a hyphen
alias = alias.replace(/[^a-z0-9-]/g, '-');
// Step 3: Replace multiple consecutive hyphens with a single hyphen
alias = alias.replace(/-+/g, '-');
// Step 4: Remove leading or trailing hyphens
alias = alias.replace(/^-+|-+$/g, '');
/* Find duplicates */
let duplicate = alias.toString();
var i = 1;
while(db.stakeholder.findOne({"alias": duplicate}) != null) {
duplicate = alias + i.toString();
i++;
}
return duplicate;
}
function removeDuplicateIds(array, fieldId) {
let seenIds = {}; // Object to store encountered ids
let uniqueArray = [];
array.forEach(obj => {
if (!seenIds[obj[fieldId]]) { // If id is not encountered yet
seenIds[obj[fieldId]] = true; // Mark id as encountered
uniqueArray.push(obj); // Add object to unique array
}
});
return uniqueArray;
}
function initializeRPOs(rpos) {
var defaultRPO = db.stakeholder.findOne({"alias": "default-rpo"});
var count = 0;
var found = 0;
rpos.forEach(rpo => {
if(db.stakeholder.findOne({"index_id": rpo.id}) == null) {
let alias = generateAlias(!!rpo.shortname && rpo.shortname != 'NULL'?rpo.shortname:rpo.name);
var stakeholder = {
"_class": "eu.dnetlib.uoamonitorservice.entities.Stakeholder",
"type": "organization",
"index_id": rpo.id,
"index_name": rpo.name,
"index_shortName": rpo.shortname,
"statsProfile": "ie_monitor",
"isUpload": false,
"name": rpo.name,
"alias": alias,
"locale": "EN",
"visibility": "PUBLIC",
"topics": [],
"copy": false,
"defaultId": defaultRPO._id.valueOf()
}
db.stakeholder.save(stakeholder);
count++;
} else {
found++;
}
});
print(count + ' RPOs has been created and ' + found + ' already exist');
}
function initializeRFOs(rfos) {
var defaultRFO = db.stakeholder.findOne({"alias": "default-rfo"});
rfos.forEach(rfo => {
let alias = generateAlias(rfo.funder_shortname != ''?rfo.funder_shortname:rfo.funder_name);
var stakeholder = {
"_class": "eu.dnetlib.uoamonitorservice.entities.Stakeholder",
"type": "funder",
"index_id": rfo.funder_id,
"index_name": rfo.funder_name,
"index_shortName": rfo.funder_shortname,
"statsProfile": "ie_monitor",
"isUpload": false,
"name": rfo.funder_name,
"alias": alias,
"locale": "EN",
"visibility": "PUBLIC",
"topics": [],
"copy": false,
"defaultId": defaultRFO._id.valueOf()
}
db.stakeholder.save(stakeholder);
});
print(rfos.length + ' RFOs has been created');
}
function initializeDatasources(datasources) {
var defaultRepo = db.stakeholder.findOne({"alias": "default-repo"});
datasources.forEach(datasource => {
let alias = generateAlias(datasource.official_name);
var stakeholder = {
"_class": "eu.dnetlib.uoamonitorservice.entities.Stakeholder",
"type": "datasource",
"index_id": datasource.openaire_id,
"index_name": datasource.official_name,
"index_shortName": datasource.official_name,
"statsProfile": "ie_monitor",
"isUpload": false,
"name": datasource.official_name,
"alias": alias,
"locale": "EN",
"visibility": "PUBLIC",
"topics": [],
"defaultId": defaultRepo._id.valueOf()
}
db.stakeholder.save(stakeholder);
});
print(datasources.length + ' repositories has been created');
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff