Find and Replace JQL Query References

This article is for Data Center. Visit Cloud

Find and Replace JQL Query References

The following script searches JQL-based generators for a search reference and replaces it with a new reference without affecting the full query.

In this example script, "cf[10300]"(line 39 and 41) is the original reference and "new value"(line 41) is the replacement reference.

import com.atlassian.jira.component.ComponentAccessor; import org.apache.log4j.Logger import org.apache.log4j.Level def log = Logger.getLogger('script.internal') log.setLevel(Level.DEBUG) def plugin = ComponentAccessor.pluginAccessor.getPlugin("com.almworks.jira.structure") def structureManager = plugin.getModuleDescriptor('structure-manager').module def forestService = plugin.getModuleDescriptor('forest-service').module def rowManager = plugin.getModuleDescriptor('structure-row-manager').module def generatorManager = plugin.getModuleDescriptor('generator-manager').module def loadClass = {name -> plugin.classLoader.loadClass("com.almworks.jira.structure.api.$name")} def PermissionLevel = loadClass('permissions.PermissionLevel') def ForestSpec = loadClass('forest.ForestSpec') def CoreIdentities = loadClass('item.CoreIdentities') def structures = structureManager.getAllStructures(PermissionLevel.ADMIN) /* Get all generator specs */ def generatorIds = new ArrayList(); for (def structure : structures) { def forestSpec = ForestSpec.structure(structure.id) def forest = forestService.getForestSource(forestSpec).latest.forest for (def rowId : forest.rows.toNativeArray()) { def itemId = rowManager.getRow(rowId).itemId if (CoreIdentities.isGenerator(itemId)) { generatorIds.add(itemId.getLongId()) } } } /* Find generators with jql references that should be changed */ for (def genId : generatorIds) { def spec = generatorManager.getGenerator(genId) def params = spec.parameters if (params.containsKey('jql') && params.get('jql').contains("cf[10300]")) { log.debug "old jql: ${params.get('jql')}" def newJql = params.get('jql').replace("cf[10300]", "new value") // new jql here def updatedParams = new LinkedHashMap(params); updatedParams.put('jql', newJql); log.debug "new jql: ${updatedParams.get('jql')})" generatorManager.updateGenerator(genId, spec.moduleKey, updatedParams, spec.owningStructure) } }