123 lines
4.1 KiB
JavaScript
123 lines
4.1 KiB
JavaScript
|
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');
|
||
|
}
|