Search code examples
jiralisteneratlassian-sourcetreeatlassian-plugin-sdkscriptrunner-for-jira

changeLog.internalDelegator [GenericEntity.get] "internalDelegator" is not a field of ChangeGroup


I am writing some scriptrunner listener code in Jira to be triggered when an issue of type impediment is updated and here is my code:

    import com.atlassian.event.Event
import java.util.HashMap;
import java.util.List;

import org.apache.log4j.Logger;
import org.ofbiz.core.entity.GenericValue;
import org.ofbiz.core.entity.GenericEntity;

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.event.issue.AbstractIssueEventListener;
import com.atlassian.jira.event.issue.IssueEvent;
import com.atlassian.jira.issue.ModifiedValue;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
import com.atlassian.jira.issue.util.IssueChangeHolder;
import org.apache.log4j.Logger
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.component.ComponentAccessor
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.ofbiz.core.entity.GenericValue;

def log = Logger.getLogger("atlassian-jira.log")
log.warn("Start Auto Defaults Listener");
log.warn("IssueMounaEvent = " + event); 
Issue issue = event.getIssue();
log.warn("IssueMouna = " + issue);

if (issue.getIssueType().getName().equalsIgnoreCase("Impediment")) 
{
log.warn("Analyzing IMPEDIMENT changelog Mouna ...");
event2= (IssueEvent) event; 
def warning = analyzeImpedimentChangeLog(event2);

}




def analyzeImpedimentChangeLog(IssueEvent event) {
def warning = "";
log.warn("IMPEDIMENT STATUS ")
List<GenericValue> changeItems = null;
def impedimentStatus = event.getIssue().getStatus().getName();
log.warn("IMPEDIMENT STATUS "+impedimentStatus)
if (!"New".equalsIgnoreCase(impedimentStatus) && !"Inspecting".equalsIgnoreCase(impedimentStatus)) {

GenericValue changeLog = event.getChangeLog();
log.warn("HERE 1")

HashMap<String, Object> fields = new HashMap<String,Object>();
log.warn("HERE 2")

fields.put("group", changeLog.get("id"));
log.warn("HERE 3")

String author = changeLog.getString("author");
log.warn("HERE 4")
try{

log.warn("CHANGE LOG: "+changeLog.internalDelegator)

changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields); 
log.warn("HERE 5")
}catch(Exception e){
log.warn("EXCEPTIONMOUNA "+e)
}

}

return warning;
} 

I receive the following error, which is kind of weird because this was previously implemented in Java and it worked fine:

2022-08-11 EXCEPTIONMOUNA java.lang.IllegalArgumentException: [GenericEntity.get] "internalDelegator" is not a field of ChangeGroup

I would like to execute the following line of code:

changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields); 

and I receive the exception above when writing the following line of code into the log:

log.warn("CHANGE LOG: "+changeLog.internalDelegator)

This code was previously implemented as a Java plugin and it worked fine in this way. What needs to be done in this case in order to adapt this statement to groovy in ScriptRunner?


Solution

  • I found a way to access the log, this one:

    import com.atlassian.event.Event
    import java.util.HashMap;
    import java.util.List;
    import org.apache.log4j.Logger;
    import org.ofbiz.core.entity.GenericValue;
    import org.ofbiz.core.entity.GenericEntity; 
    import com.atlassian.jira.component.ComponentAccessor;
    import com.atlassian.jira.event.issue.AbstractIssueEventListener;
    import com.atlassian.jira.event.issue.IssueEvent;
    import com.atlassian.jira.issue.ModifiedValue;
    import com.atlassian.jira.issue.MutableIssue;
    import com.atlassian.jira.issue.fields.CustomField;
    import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
    import com.atlassian.jira.issue.util.IssueChangeHolder;
    import org.apache.log4j.Logger
    import com.atlassian.jira.issue.Issue;
    import com.atlassian.jira.component.ComponentAccessor
    import java.util.HashMap;
    import java.util.List;
    import org.apache.log4j.Logger;
    import org.ofbiz.core.entity.GenericValue;
    import org.ofbiz.core.entity.GenericDelegator; 
    import com.atlassian.jira.issue.changehistory.ChangeHistoryManager;
    import com.atlassian.jira.issue.history.ChangeItemBean;
    import com.atlassian.jira.component.ComponentAccessor;
    import com.atlassian.jira.issue.Issue;
    import com.atlassian.jira.issue.comments.Comment
    import com.atlassian.jira.workflow.JiraWorkflow
    import com.atlassian.jira.workflow.WorkflowManager
    import org.apache.log4j.Logger
    import com.atlassian.jira.component.ComponentAccessor
    import com.atlassian.jira.issue.changehistory.ChangeHistoryItem
    def log = Logger.getLogger("atlassian-jira.log")
    log.warn("Start Auto Defaults Listener");
    log.warn("IssueMounaEvent = " + event); 
    Issue issue = event.getIssue();
    log.warn("IssueMouna = " + issue);
    
                if (issue.getIssueType().getName().equalsIgnoreCase("Impediment")) 
                {
                    log.warn("Analyzing IMPEDIMENT changelog Mouna ...");
                    event2= (IssueEvent) event; 
                    def warning = analyzeImpedimentChangeLog(event2);
                    if (!warning.isEmpty()) {
                        log.warn("Set IMPEDIMENT warning tooo Mouna " + warning);
                        setWarning(issue, warning);
                    }
                    else {
                        log.warn("No IMPEDIMENT warning");
                    }
                }
                
        
    
    
    def analyzeImpedimentChangeLog(IssueEvent event) {
                String warning = "";
                log.warn("IMPEDIMENT STATUS ")
                //List<GenericValue> changeItems = null;
                def impedimentStatus = event.getIssue().getStatus().getName();
                // status New and Inspecting are out of scope
                log.warn("IMPEDIMENT STATUS "+impedimentStatus)
                if (!"New".equalsIgnoreCase(impedimentStatus) && !"Inspecting".equalsIgnoreCase(impedimentStatus)) {
    
                    GenericValue changeLog = event.getChangeLog();
                    log.warn("HERE 1")
    
                    HashMap<String, Object> fields = new HashMap<String,Object>();
                    log.warn("HERE 2")
    
                    fields.put("group", changeLog.get("id"));
                    log.warn("HERE 3")
    
                    String author = changeLog.getString("author");
                    log.warn("HERE 4")
                    
                    //changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields);
                    
                    log.warn("CHANGE LOG: "+changeLog.get("issue"))
                    List<GenericValue> changeItems = ComponentAccessor.getChangeHistoryManager().getAllChangeItems(issue)
    
                  //  changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields); 
                    //changeItems = changeLog
                    log.warn("HERE 5::: "+ changeItems)
                    log.warn("MOUNA IS HERE AFTER HERE 5 " +changeItems.size());
                    log.warn("VALUES 1");
    
                int lastIndex= changeItems.size()-1; 
                log.warn("MOUNA IS HERE AFTER HERE 5 " +changeItems.size()+ " "+changeItems.get(lastIndex));
    
                ChangeHistoryItem value= changeItems.get(lastIndex) as ChangeHistoryItem; 
                log.warn("GENERIC VALUE "+ value.getField());
    
                String modifiedField=value.getField(); 
    
                if(modifiedField.equals("Source Type") ||modifiedField.equals("Class")||
                modifiedField.equals("Planning Required")){
    
    
                log.warn("MOUNA SIZE");
                def ChangeHistoryManager= ComponentAccessor.getChangeHistoryManager();
    
                List<ChangeItemBean> fieldchangeItems = ChangeHistoryManager.getChangeItemsForField(issue, modifiedField)
                if (fieldchangeItems.size()>0) {
                log.warn("MOUNA FIRST "+ modifiedField);
    
                //String content = transientVars['Source Type'] as String
                
                def customFieldManager = ComponentAccessor.getCustomFieldManager()
                def newStringCf = customFieldManager.getCustomFieldObjectByName(modifiedField)
                String newString = issue.getCustomFieldValue(newStringCf) as String
    
                log.warn("MOUNA FIRST "+ newString);
    
                //def val=cfValues['Source Type']?.value 
    
                //log.warn(sourceType+" MOUNA FIRST "+sourceTypechangeItems.get(sourceTypechangeItems.size()-1).getFromString());
                 String oldString = fieldchangeItems.get(fieldchangeItems.size()-1).getFromString(); 
                 warning = "Field \"" + modifiedField + "\" has been changed from \"" + oldString + "\" to \"" + newString + "\" by \"" + author + "\"";
                log.warn("MOUNA FIRST "+warning);
    
    
    }
    
                }
                    changeItems.eachWithIndex { item, index ->
                        log.warn("ITEM MOUNA "+item);
                        
    
    
                    
                    }
                                
                
                }
            log.warn("changeitemlog== "+warning);
    
            return warning;
        }
    
        void setWarning(Issue mutableIssue, String warning)
        {
                log.warn("WARNING FUNC "+warning)
    
                 Warning = 13593
                CustomField customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(new Long(13593));
                IssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
                customField.updateValue(null, mutableIssue, new ModifiedValue(mutableIssue.getCustomFieldValue(customField), warning), issueChangeHolder);
        
        }