Excerpt | ||
---|---|---|
| ||
Bulk change the owner of structures from one user to another. This can be useful when one user account is being archived/removed and their structures need to be preserved. |
Code Block | ||
---|---|---|
| ||
import com.atlassian.jira.ComponentManager |
...
import com.atlassian.jira.user.ApplicationUsers |
...
import org.apache.log4j.Category |
...
def oldOwnerKey = 'admin' |
...
def newOwnerKey = 'ragnar' |
...
def resync = true // do full resync after update |
...
def plugin = ComponentManager.getInstance().getPluginAccessor().getPlugin('com.almworks.jira.structure') |
...
def loader = plugin.getClassLoader() |
...
def StructureAuth = loader.loadClass('com.almworks.jira.structure.api.auth.StructureAuth') |
...
def JiraUser = loader.loadClass('com.almworks.jira.structure.api.permissions.PermissionSubject$JiraUser') |
...
def structureManager = plugin.getModuleDescriptor('structure-manager').getModule() |
...
def syncManager = plugin.getModuleDescriptor('sync-manager').getModule() |
...
def oldOwner = JiraUser.newInstance(oldOwnerKey) |
...
def newOwner = JiraUser.newInstance(newOwnerKey) |
...
def newOwnerUser = ApplicationUsers.byKey(newOwnerKey) |
...
if (newOwnerUser == null) { |
...
def message = "Cannot find user by user key: $newOwnerKey" |
...
log.error(message) |
...
return message |
...
} |
...
// The actual work is done here |
...
def changedStructures = [] |
...
def changedSynchronizers = [] |
...
def success = false |
...
def exception = null |
...
try { |
...
StructureAuth.sudo { |
...
structureManager.getAllStructures(null, true).each { st -> |
...
// Change owner |
...
if (st.owner == oldOwner) { |
...
st.owner = newOwner |
...
st.saveChanges() |
...
changedStructures << st |
...
} |
...
// Change owner of synchronizers installed for this structure |
...
syncManager.getInstalledSynchronizersForStructure(st.id).each { sync -> |
...
if (sync.userKey == oldOwnerKey) { |
...
def enabled = syncManager.isAutosyncEnabled(sync.instanceId) |
...
if (enabled) { |
...
syncManager.setAutosyncEnabled(sync.instanceId, false) |
...
syncManager.updateSynchronizer(sync.instanceId, sync.getParameters(), newOwnerUser) |
...
if (resync) { |
...
syncManager.resync(sync.instanceId, true, null) |
...
} else { |
...
syncManager.setAutosyncEnabled(sync.instanceId, true) |
...
} |
...
} else { |
...
syncManager.updateSynchronizer(sync.instanceId, sync.getParameters(), newOwnerUser) |
...
} |
...
changedSynchronizers << sync |
...
} |
...
} |
...
} |
...
} |
...
success = true |
...
} catch (Exception e) { |
...
log.warn("Failed to change owner from '$oldOwnerKey' to '$newOwnerKey'", e) |
...
exception = e |
...
} |
...
// Output message about changed structures and synchronizers to the log and to the console output |
...
def msg = "Script to change owner from '$oldOwnerKey' for '$newOwnerKey' " + |
...
(success ? "finished successfully" : "failed (${exception && exception.message})") + "\n" + |
...
"Changed structures:\n" + changedStructures.collect({ " |
...
#${it.id} ${it.name}" }).join("\n") + "\n" + |
...
"Changed synchronizers:\n" + changedSynchronizers.collect({ " |
...
#${it.instanceId} (for structure |
...
#${it.structureId})" }).join("\n") |
...
log.warn(msg) |
...
msg.replaceAll("\n", "<br>") |