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);
}
def valueExtractor = chartBuilder.getValueExtractor(Value);
if ( valueExtractor == null ) {
throw new IllegalArgumentException("No value extractor implementation for " + Value);
}
def groupValueExtractorX = chartBuilder.getGrouper(GroupByX);
def groupValueExtractorY = chartBuilder.getGrouper(GroupByY);
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)) )
{
for ( String groupY : groupValueExtractorY.getGroups((Document) documentField.get(issue)) )
{
groupY = groupValueExtractorY.getResolvedValue(groupY, issue);
groupX = groupValueExtractorX.getResolvedValue(groupX, issue);
groupY = clear(groupY);
groupX = clear(groupX);
metaCountGroup.addValue(valueExtractor.get(issue, doc), groupY, groupX);
}
}
}
} catch (Exception e){
System.out.println("e " + e);
}
metaCountGroup.fillMissingValues();
def chartData = chartBuilder.newChartData(groupValueExtractorY.getGroupName());
chartData.setXType(groupValueExtractorX.getGroupName());
chartData.setType("table");
chartData.setLabels(true);
chartData.addCustomData("title", valueExtractor.getTitle());
chartBuilder.getChartUtil().transformResult(metaCountGroup, chartData, true);
valueExtractor.formatValues(chartData);
return chartData; |