Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@jamieechlin
Created July 3, 2013 13:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamieechlin/5917773 to your computer and use it in GitHub Desktop.
Save jamieechlin/5917773 to your computer and use it in GitHub Desktop.
package examples
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.fields.config.FieldConfig
import com.atlassian.jira.issue.fields.layout.field.AbstractFieldLayoutManager
import com.atlassian.jira.issue.managers.DefaultCustomFieldManager
import org.apache.log4j.Level
import org.apache.log4j.Logger
public class FixBrokenOptionsScript {
def log = Logger.getLogger("examples.FixBrokenOptionsScript")
// set isPreview to true to see what would be done - check the logs
def isPreview = false
public void run() {
log.setLevel(Level.DEBUG)
Logger.getLogger(AbstractFieldLayoutManager.class).setLevel(Level.WARN)
Logger.getLogger(DefaultCustomFieldManager.class).setLevel(Level.OFF)
def totalOptionsToUpdate = 0
def optionsManager = ComponentAccessor.getOptionsManager()
def Map<FieldConfig, List<Option>> optionsByFieldConfig = optionsManager.getAllOptions().groupBy {
try {
it.relatedCustomField
}
catch (e) {
// some options can be broken, they refer to a deleted field config or something
return null
}
}
optionsByFieldConfig.each {fieldConfig, fcOptionList ->
fcOptionList.groupBy {it.parentOption}.each {parentOption, optionList ->
if (optionList.any {it.sequence == null}) {
log.debug("Modify options for field config ${fieldConfig.name}")
// find highest sequence number to use as the base
def highestSeq = optionList*.sequence.max() ?: -1
highestSeq++
optionList.findAll {it.sequence == null}.sort{it.optionId}.eachWithIndex {Option option, Integer kount ->
log.debug("Update option with ID ${option.optionId} and value ${option.value}")
if (! isPreview) {
option.setSequence(highestSeq + kount)
option.store()
}
totalOptionsToUpdate++
}
}
}
}
log.debug("Updated or will update: ${totalOptionsToUpdate} options in total")
}
}
new FixBrokenOptionsScript().run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment