import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.DateFormat;
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.JqlQueryParser;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.query.Query;
import com.decadis.jira.xchart.api.model.Period;
import com.decadis.jira.xchart.api.util.DateUtils;
import com.decadis.jira.xchart.api.model.ChartData;
DateFormat dateFormat = DateUtils.SimpleDateFormat;
JqlQueryParser jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class);
Query query = jqlQueryParser.parseQuery(Jql_Param); //this is the parameter we created
Period selectedPeriod = Period.MONTH;
def countGroup = chartBuilder.newDataCollector();
def groupValueExtractorX = chartBuilder.getGrouper(GroupBy_Picker); //must be a fieldid, so either Group By Picker, or hardcoded fieldid
def groupValueExtractorY = chartBuilder.getGrouper("issuetype"); //can be replaced by a parameter
Field documentField;
documentField = DocumentIssueImpl.class.getDeclaredField("document");
documentField.setAccessible(true);
for ( Issue issue : chartBuilder.getFilterUtils().performSearch(query, user) )
{
for ( String groupX : groupValueExtractorX.getGroups((Document) documentField.get(issue)) )
{
for ( String groupY : groupValueExtractorY.getGroups((Document) documentField.get(issue)) )
{
groupY = (groupY != null) ? groupValueExtractorY.getResolvedValue(groupY, issue) : groupY;
groupX = (groupX != null) ? groupValueExtractorX.getResolvedValue(groupX, issue) : groupX;
countGroup.addValue(BigDecimal.ONE, groupY, groupX);
}
}
}
countGroup.fillMissingValues();
ChartData chartData = chartBuilder.newChartData("issuetype");
chartData.setXType("project");
chartData.setType("table");
chartBuilder.getChartUtil().transformResult(countGroup, chartData, true);
return chartData; |