@Override @RequiresXsrfCheck protected String doExecute() throws Exception { // Find all possibly affected issues. final List<GenericValue> associatedProjects = getConfigScheme().getAssociatedProjects(); if ((associatedProjects != null) && !associatedProjects.isEmpty()) { final List<Long> projectIds = GenericValueUtils.transformToLongIdsList(associatedProjects); final Collection<Option> obseleteOptions = CollectionUtils.subtract(getOriginalOptions(), getNewOptions()); if ((obseleteOptions != null) && !obseleteOptions.isEmpty()) { final List<String> obseleteOptionIds = new ArrayList<String>(obseleteOptions.size()); for (final Option option : obseleteOptions) { obseleteOptionIds.add(option.getId()); } final Query query = getQuery(projectIds, obseleteOptionIds); final SearchResults searchResults = searchProvider.search(query, getLoggedInUser(), PagerFilter.getUnlimitedFilter()); final List affectedIssues = searchResults.getIssues(); if ((affectedIssues != null) && !affectedIssues.isEmpty()) { // Prepare for Update configScheme = new FieldConfigScheme.Builder(getConfigScheme()) .setName(getName()) .setDescription(getDescription()) .toFieldConfigScheme(); final List<String> optionIds = new ArrayList<String>(Arrays.asList(getSelectedOptions())); return migrateIssues(this, affectedIssues, optionIds); } } } return super.doExecute(); }