import java.lang.reflect.Field;
import java.math.BigDecimal;
import org.apache.lucene.document.Document;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.DocumentIssueImpl;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.jql.parser.JqlParseException;
import com.atlassian.jira.jql.parser.JqlQueryParser;
import com.atlassian.query.Query;
import com.decadis.jira.xchart.api.ChartParam;
import com.decadis.jira.xchart.api.model.Period
import com.decadis.jira.xchart.api.util.DateUtils;
def clear = { String string -> (string == null || string.trim().length() == 0 ) ? "-" : string; }
def metaCountGroup = chartBuilder.newDataCollector();
JqlQueryParser jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class);
Query query = null;
try {
query = jqlQueryParser.parseQuery(JQL);
} catch (JqlParseException e) {
throw new IllegalArgumentException("Bad JQL: " + jql);
}
Iterator<String> i = Values.iterator();
Set<String> fieldsIds = new HashSet<>();
while ( i.hasNext() )
{
String key = i.next();
if ( fieldsIds.contains(key) ) {
i.remove();
}
else {
fieldsIds.add(key);
}
}
def groupValueExtractorX = chartBuilder.getGrouper(GroupByX);
Map<String, String> keysToResolvedValues = new LinkedHashMap<String, String>();
Field documentField;
try
{
documentField = DocumentIssueImpl.class.getDeclaredField("document");
documentField.setAccessible(true);
for ( Issue issue : chartBuilder.getFilterUtils().performSearch(query, user) )
{
Document doc = (Document) documentField.get(issue);
for ( String groupX : groupValueExtractorX.getGroups((Document) documentField.get(issue)) )
{
groupX = groupValueExtractorX.getResolvedValue(groupX, issue);
groupX = clear(groupX);
for ( String key : fieldsIds )
{
def valueExtractor = chartBuilder.getValueExtractor(key);
keysToResolvedValues.put(key, valueExtractor.getTitle());
BigDecimal yValue = valueExtractor.get(issue, doc);
metaCountGroup.addValue(yValue, groupX, key);
}
}
}
} catch (Exception e){
System.out.println("e " + e);
}
metaCountGroup.fillMissingValues();
def chartData = chartBuilder.newChartData();
chartData.setXType(groupValueExtractorX.getGroupName());
chartData.setType("table");
chartData.setLabels(true);
chartBuilder.getChartUtil().transformResultMultiValue(metaCountGroup, chartData, true, keysToResolvedValues);
return chartData; |