REST API гаджета Atlassian JIRA

Я написал гаджет JIRA, который делает AJAX-вызовы JIRA REST API, а затем использует данные; дата создания, дата разрешения и статус для создания двух отдельных массивов, содержащих данные следующим образом:

var dateCreated;
dateCreated =[[<created>, <daily total>],...];

Таким образом, если бы на «2011-1-1» было создано две задачи, блок элементов массива был бы

[ [‘2011-1-1’, 2],...]

Другой массив:

var statusDate;
statusDate=[[<resolutiondate>, <daily total>],...]

Таким образом, если бы на «2011-1-1» было создано две задачи, блок элементов массива был бы

[ [‘2011-1-1’, 2],...]

Я использовал ajaxOptions из гаджета JIRA для выполнения вызовов AJAX, и я смог получить данные и выполнить манипуляции с массивами с помощью Javascript и отобразить данные как общие проблемы, созданные и закрытые, на графике временных рядов. Однако в некоторых проектах было больше проблем, чем в других, и загрузка данных в диаграммы занимала около 30 секунд. Есть ли в JIRA сценарий внутреннего сервера, который я могу использовать, который может выполнять манипуляции с массивами на стороне сервера, прежде чем он перенесет данные в диаграммы, основанные на html и загруженные на клиентские машины? Я слышал о шаблонах Velocity в JIRA, но не уверен, что это одно из решений, к тому же очень сложно найти примеры шаблонов JIRA и Velocity.

Любая помощь приветствуется.

заранее спасибо


person codeBarer    schedule 15.03.2014    source источник


Ответы (1)


Вот пример использования шаблонов Velocity для JIRA (или вашего собственного сервиса REST).
Сделайте ajax-вызов из пользовательского интерфейса в сервис REST, и вы получите html-контент (или другие данные), которые вам нужны. Класс HtmlPresentationHelper, используемый в качестве оболочки для html-данных.
Вы можете использовать встроенный инструмент Jira для отладки этой (или вашей) службы REST: Браузер REST API: https://developer.atlassian.com/display/DOCS/Using+the+REST+API+Browser/
И не забудьте добавить свои шаблоны Velocity!

@Path("/")
public class CustomRestResource
{
    private String pathToTemplate = "templates/reports/timesheet-report/";
    private String templateFileName = "view.vm";

    @GET
    @Path("someMethod")
    @AnonymousAllowed
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Response anyName(@QueryParam("param") String param)
    {
        VelocityManager vm = ComponentAccessor.getVelocityManager();
        try
        {
            return Response.ok(new HtmlPresentationHelper(
                    vm.getBody(pathToTemplate, templateFileName, prepareVelocityParams(param))
            )).build();
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            return Response.serverError().build();
        }
    }

    Map<String, Object> prepareVelocityParams(String x)
    {
        Map<String, Object> velocityParams = new HashMap<String, Object>();
        velocityParams.put("someParam", x);
        velocityParams.put(...);
        ...  

        return velocityParams;
    }
}

@XmlRootElement
public class HtmlPresentationHelper
{
    @XmlElement
    private String html;

    private HtmlPresentationHelper()
    {
        // for JAXB
    }

    public HtmlPresentationHelper(String html)
    {
        this.html = html;
    }
}
person Community    schedule 25.03.2014