Last active
November 9, 2023 12:24
-
-
Save brunogasparetto/9565fb49101a1b33cb3106e9e665bb10 to your computer and use it in GitHub Desktop.
Fluig: exemplo de como copiar os grupos de um usuário para outro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Copia os grupos de um usuário para outros usuários | |
* | |
* Obrigatório passar a constraint "from" com o login do usuário a ser copiado. | |
* Obrigatório passar a constraint "to" com o login do usuário a adicionar nos grupos. | |
* | |
* Pode-se indicar vários usuários "to". | |
* | |
* @param {string[]} fields Campos Solicitados | |
* @param {Constraint[]} constraints Filtros | |
* @param {string[]} sorts Campos da Ordenação | |
* @returns {Dataset} | |
*/ | |
function createDataset(fields, constraints, sorts) { | |
var dataset = DatasetBuilder.newDataset(); | |
dataset.addColumn("status"); | |
dataset.addColumn("message"); | |
if (!constraints || !constraints.length || constraints.length < 2) { | |
dataset.addRow([ | |
"error", | |
"Necessário informar usuário de origem e usuários de destino." | |
]); | |
return dataset; | |
} | |
var userService = fluigAPI.getUserService(); | |
var groupsFrom = null; | |
try { | |
groupsFrom = getGroupsFrom(userService, constraints); | |
} catch (error) { | |
dataset.addRow([ | |
"error", | |
cleanMessageError(error) | |
]); | |
return dataset; | |
} | |
var tenantId = getValue("WKCompany"); | |
for (var i = 0; i < constraints.length; ++i) { | |
if (constraints[i].fieldName != "to") { | |
continue; | |
} | |
var userTo = null; | |
try { | |
userTo = userService.findByLogin(constraints[i].initialValue); | |
} catch (error) { | |
dataset.addRow([ | |
"error", | |
"Erro ao pesquisar usuário " + constraints[i].initialValue + ". " + cleanMessageError(error) | |
]); | |
continue; | |
} | |
var groupsTo = new java.util.ArrayList(groupsFrom); | |
groupsTo.removeAll(userService.listGroups(userTo.getLogin())); | |
if (groupsTo.isEmpty()) { | |
dataset.addRow([ | |
"success", | |
userTo.getLogin() + " já está em todos os grupos." | |
]); | |
continue; | |
} | |
/* | |
* Esse trecho é estranho, mas é como funcionou. | |
* | |
* Usuário tem o método getGroups e setGroups, porém o getGroups vinha vazio | |
* e por isso precisei utilizar o método listGroups do UserService. | |
* | |
* Além disso não funcionou usar o setGroups e depois dar update no usuário. | |
* Só deu certo ir inserindo grupo a grupo. | |
*/ | |
var it = groupsTo.iterator(); | |
while (it.hasNext()) { | |
try { | |
var groupCode = it.next(); | |
userService.addUserToGroup(tenantId, groupCode, userTo); | |
dataset.addRow([ | |
"success", | |
userTo.getLogin() + " inserido no grupo " + groupCode | |
]); | |
} catch (error) { | |
dataset.addRow([ | |
"error", | |
userTo.getLogin() + " - Erro ao inserir grupo " + groupCode + ". " + cleanMessageError(error) | |
]); | |
} | |
} | |
} | |
return dataset; | |
} | |
/** | |
* Pega o login do usuário "from" | |
* | |
* @param {Constraint[]} constraints | |
* @returns {string} | |
* @throws {Error} | |
*/ | |
function getFromUserLogin(constraints) { | |
for (var i = 0; i < constraints.length; ++i) { | |
if (constraints[i].fieldName == "from") { | |
return constraints[i].initialValue; | |
} | |
} | |
throw "Necessário informar usuário de origem." | |
} | |
/** | |
* Pega os grupos do usuário de origem | |
* | |
* @param {com.fluig.sdk.service.UserService} userService | |
* @param {Constraint[]} constraints | |
* @returns {java.util.List<java.lang.String>} | |
* @throws {Error} | |
*/ | |
function getGroupsFrom(userService, constraints) { | |
var groups = userService.listGroups(getFromUserLogin(constraints)); | |
if (groups.isEmpty()) { | |
throw "Usuário de origem não possuí grupos." | |
} | |
return groups; | |
} | |
/** | |
* Remove a sujeira da mensagem de erro da exceção | |
* | |
* @param {{message: string}} error Exceção | |
* @returns {string} | |
*/ | |
function cleanMessageError(error) { | |
if (!error.message) { | |
return error; | |
} | |
return (new java.lang.String(error.message)).replaceAll("^.*Exception: (.*)$", "$1"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment