Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagegroovy
titleReload Grids
linenumberstrue
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.bc.issue.link.IssueLinkService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.link.LinkCollection
import com.atlassian.jira.security.JiraAuthenticationContext
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.ApplicationUsers
import com.atlassian.plugin.PluginAccessor

// save debug messages
StringBuilder result = new StringBuilder();

// get an issue
IssueManager issueManager = ComponentAccessor.getOSGiComponentInstanceOfType(IssueManager.class);
// Issue issue = issueManager.getIssueObject("TEST-1");

// find TGE custom fields
PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor();
Class tgeConfigManagerClass = pluginAccessor.getClassLoader().findClass("com.idalko.jira.plugins.igrid.api.config.grid.TGEGridConfigManager");
def tgeConfigManager = ComponentAccessor.getOSGiComponentInstanceOfType(tgeConfigManagerClass);
List<Long> tgeCustomFieldIds = tgeConfigManager.getGridCustomFieldIds();

// get current user
JiraAuthenticationContext jiraAuthenticationContext = ComponentAccessor.getOSGiComponentInstanceOfType(JiraAuthenticationContext.class);
Object userObject = jiraAuthenticationContext.getLoggedInUser();
ApplicationUser applicationUser = userObject instanceof ApplicationUser ? (ApplicationUser) userObject : ApplicationUsers.from(userObject);
User user = userObject instanceof ApplicationUser ? ((ApplicationUser) userObject).getDirectoryUser() : (User) userObject;

// find cloned issues by link reference "Cloners"
IssueLinkService issueLinkService = ComponentAccessor.getOSGiComponentInstanceOfType(IssueLinkService.class);
IssueLinkService.IssueLinkResult issueLinks = issueLinkService.getIssueLinks(userObject, issue);
LinkCollection linkCollection = issueLinks.getLinkCollection();
List<Issue> clonedIssues = linkCollection.getInwardIssues("Cloners");
result.append(clonedIssues.size() + " cloned issues found for issue " + issue.getKey() + "\n");

// reload grids
Class dataManagerClass = pluginAccessor.getClassLoader().findClass("com.idalko.jira.plugins.igrid.api.data.TGEGridTableDataManager");
def tgeGridDataManager = ComponentAccessor.getOSGiComponentInstanceOfType(dataManagerClass);

for (Issue clonedIssue : clonedIssues) {
    try {
        tgeGridDataManager.reloadGrids(clonedIssue.getId(), new HashSet<Long>(tgeCustomFieldIds), user);
        result.append("Grids " + tgeCustomFieldIds + " are reloaded on issue " + clonedIssue.getKey() + "!\n");
    } catch (Exception e) {
        result.append("Grids cannot be reloaded: " + e.getMessage() + "\n");
    }
}

println(result.toString());
return result.toString();

...

Code Block
languagegroovy
titleCopy rows
linenumberstrue
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.bc.issue.link.IssueLinkService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.link.LinkCollection
import com.atlassian.jira.security.JiraAuthenticationContext
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.ApplicationUsers
import com.atlassian.plugin.PluginAccessor

// save debug messages
StringBuilder result = new StringBuilder();

// get an issue
IssueManager issueManager = ComponentAccessor.getOSGiComponentInstanceOfType(IssueManager.class);
//
Issue issue = issueManager.getIssueObject("TEST-1");

// find TGE custom field
PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor();
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
CustomField tgeCustomField = customFieldManager.getCustomFieldObjectByName("TGE_TEST");
Long tgeCustomFieldId = tgeCustomField.getIdAsLong();

// get current user
JiraAuthenticationContext jiraAuthenticationContext = ComponentAccessor.getOSGiComponentInstanceOfType(JiraAuthenticationContext.class);
Object userObject = jiraAuthenticationContext.getLoggedInUser();
ApplicationUser applicationUser = userObject instanceof ApplicationUser ? (ApplicationUser) userObject : ApplicationUsers.from(userObject);
User user = userObject instanceof ApplicationUser ? ((ApplicationUser) userObject).getDirectoryUser() : (User) userObject;

// read grid data from the original issue
Class dataManagerClass = pluginAccessor.getClassLoader().findClass("com.idalko.jira.plugins.igrid.api.data.TGEGridTableDataManager");
def tgeGridDataManager = ComponentAccessor.getOSGiComponentInstanceOfType(dataManagerClass);
List<Map<String, Object>> gridData = null;
try {
    def callResult = tgeGridDataManager.readGridData(issue.getId(), tgeCustomFieldId, null, null, 0, 1000, user);
    gridData = callResult.getValues();
    result.append("Grid ID=" + tgeCustomFieldId + " content: " + gridData + "\n");
} catch (Exception e) {
    result.append("Grid ID=" + tgeCustomFieldId + " data cannot be retrieved: " + e.getMessage() + "\n");
}

if (gridData != null) {
    // get the list of grid columns
    Class tgeConfigManagerClass = pluginAccessor.getClassLoader().findClass("com.idalko.jira.plugins.igrid.api.config.grid.TGEGridConfigManager");
    def tgeConfigManager = ComponentAccessor.getOSGiComponentInstanceOfType(tgeConfigManagerClass);
    def tgeGrid = tgeConfigManager.getGridConfigOrNull(tgeCustomFieldId);
    def columnConfigs = tgeGrid.getColumnConfigs();
    List<String> columnConfigNames = new LinkedList<String>();
    for (def columnConfig : columnConfigs) {
        String columnConfigName = columnConfig.getConfigName();
        columnConfigNames.add(columnConfigName);
    }
    result.append("Grid ID=" + tgeCustomFieldId + " has following columns: " + columnConfigNames + "\n");

    // transform fetched data
    List<Map<String, Object>> gridDataToAdd = new LinkedList<Map<String, Object>>();
    for (Map<String, Object> gridRow : gridData) {
        Map<String, Object> rowToAdd = new HashMap<String, Object>();
        for (String columnName : columnConfigNames) {
            def columnValue = gridRow.get(columnName);
            if (columnValue instanceof Map) {
                columnValue = columnValue.get("value");
            }
            rowToAdd.put(columnName, columnValue);
        }
        gridDataToAdd.add(rowToAdd);
    }
    result.append("Transformed data to add: " + gridDataToAdd + "\n");

    // find cloned issues by link reference "Cloners"
    IssueLinkService issueLinkService = ComponentAccessor.getOSGiComponentInstanceOfType(IssueLinkService.class);
    IssueLinkService.IssueLinkResult issueLinks = issueLinkService.getIssueLinks(userObject, issue);
    LinkCollection linkCollection = issueLinks.getLinkCollection();
    List<Issue> clonedIssues = linkCollection.getInwardIssues("Cloners");
    result.append(clonedIssues.size() + " cloned issues found for issue " + issue.getKey() + "\n");

    // add copied grid data to cloned issue
    for (Issue clonedIssue : clonedIssues) {
        try {
            tgeGridDataManager.addRows(clonedIssue.getId(), tgeCustomFieldId, gridDataToAdd, user);
            result.append("Grid rows are added to " + clonedIssue.getKey() + " issue.\n");
        } catch (Exception e) {
            result.append("Grids rows cannot be added due to error: " + e.getMessage() + "!\n");
        }
    }
}

println(result.toString());
return result.toString();

...