import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Date;
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.issue.IssueFieldConstants;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.fields.FieldManager;
import com.atlassian.jira.jql.builder.JqlClauseBuilder;
import com.atlassian.jira.jql.builder.JqlQueryBuilder;
import com.atlassian.jira.jql.parser.JqlQueryParser;
import com.atlassian.query.Query;
import com.atlassian.query.operator.Operator;
import com.decadis.jira.xchart.api.ChartParam;
import com.decadis.jira.xchart.api.model.Period;
import com.decadis.jira.xchart.api.util.DateUtils;
def fieldManager = ComponentAccessor.getFieldManager();
def i18n = ComponentAccessor.getJiraAuthenticationContext().getI18nHelper();
//helper method to create the JQL Query
def createQuery(String jql, Period period)
{
JqlQueryParser jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class);
Query query = null;
try {
JqlClauseBuilder jqlClauseBuilder = JqlQueryBuilder.newClauseBuilder(jqlQueryParser.parseQuery(jql));
query = jqlClauseBuilder.buildQuery();
} catch (Exception e) {
throw new IllegalArgumentException("Bad JQL: " + jql);
}
return query;
}
Period selectedPeriod = Period.fromString(TimePeriod);
Query query = createQuery(JQL_CREATED, selectedPeriod);
def countGroup = chartBuilder.newDataCollector();
Field documentField;
try
{
documentField = DocumentIssueImpl.class.getDeclaredField("document");
documentField.setAccessible(true);
for ( Issue issue : chartBuilder.getFilterUtils().performSearchOverrideSecurity(query) )
{
if(Display_Created_vs_Resolved)
countGroup.addValue(BigDecimal.ONE, "created", dateUtils.getPeriodGroup(issue.getCreated(), selectedPeriod));
if(Display_Trend)
countGroup.addValue(BigDecimal.ONE, "trend", dateUtils.getPeriodGroup(issue.getCreated(), selectedPeriod));
}
} catch (Exception e) {
System.out.println("Could not extract groups" + e);
}
query = createQuery(JQL_RESOLVED, selectedPeriod);
try
{
documentField = DocumentIssueImpl.class.getDeclaredField("document");
documentField.setAccessible(true);
for ( Issue issue : chartBuilder.getFilterUtils().performSearchOverrideSecurity(query) )
{
if(Display_Created_vs_Resolved)
countGroup.addValue(BigDecimal.ONE, "resolved", dateUtils.getPeriodGroup(issue.getResolutionDate(), selectedPeriod));
if(Display_Trend)
countGroup.addValue(BigDecimal.valueOf(-1), "trend", dateUtils.getPeriodGroup(issue.getResolutionDate(), selectedPeriod));
}
} catch (Exception e) {
System.out.println("Could not extract groups" + e);
}
def keys = countGroup.getAllKeys()
if(Display_Created_vs_Resolved) {
countGroup.get("created").fillMissingValues(keys);
countGroup.get("resolved").fillMissingValues(keys);
}
if(Display_Trend)
countGroup.get("trend").accumulate(keys);
// countGroup.fillMissingValues();
def chartData = chartBuilder.newChartData(i18n.getText("common.concepts.issues"));
if(Display_Created_vs_Resolved) {
chartData.addGroupName("created", "created");
chartData.addGroupName("resolved", "resolved");
}
if(Display_Trend) {
chartData.addGroupName("trend", "trend");
chartData.setYAxis("trend", "y2");
}
chartData.setxFormat(DateUtils.SimpleDateFormatD3);
chartData.setPeriod(selectedPeriod);
chartData.setType(ChartType);
chartBuilder.getChartUtil().transformResult(countGroup, chartData, false);
return chartData; |