0

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?

1 Answers1

0

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);
    
    }