PacktLib: JIRA Development Cookbook

JIRA Development Cookbook

Credits

About the Author

Acknowledgment

About the Reviewers

www.PacktPub.com

Preface

Plugin Development Process

Introduction

Setting up the development environment

Creating a skeleton plugin

Deploying a plugin

Making changes and re-deploying a plugin

Testing and debugging

Understanding Plugin Framework

Introduction

Converting plugins from v1 to v2

Adding resources into plugins

Adding web resources into plugins

Building JIRA from source

Adding new webwork actions to JIRA

Extending a webwork action in JIRA

Working with Custom Fields

Introduction

Writing a simple custom field

Custom field searchers

Dealing with custom fields on an issue

Programming custom field options

Overriding validation of custom fields

Customizing the change log value

Migrating from one custom field type to another

Making custom fields sortable

Displaying custom fields on subtask columns

User and date fields from 4.1.x

Adding custom fields to notification mails

Adding help text for a custom field

Removing the 'none' option from a select field

Making the custom field project importable

Changing the size of a text area custom field

Programming Workflows

Introduction

Writing a workflow condition

Writing a workflow validator

Writing a workflow post function

Editing an active workflow

Making an issue editable/non-editable based on workflow status

Including/excluding resolutions for specific transitions

Permissions based on workflow status

Internationalization in workflow transitions

Obtaining available workflow actions programmatically

Programmatically progressing on workflows

Obtaining workflow history from the database

Re-ordering workflow actions in JIRA

Creating common transitions in workflows

Jelly escalation

Gadgets and Reporting in JIRA

Introduction

Writing a JIRA report

Reports in Excel format

Data validation in JIRA reports

Restricting access to reports

Object configurable parameters for reports

Creating a pie chart in JIRA

Writing JIRA 4 gadgets

Invoking REST services from gadgets

Configuring user preferences in gadgets

Accessing gadgets outside of JIRA

The Power of JIRA Searching

Introduction

Writing a JQL function

Sanitizing JQL functions

Adding a search request view

Smart querying using quick search

Searching in plugins

Parsing a JQL query in plugins

Linking directly to search queries

Index and de-index programmatically

Managing filters programmatically

Subscribing to a filter

Programming Issues

Introduction

Creating an issue from a plugin

Creating subtasks on an issue

Updating an issue

Deleting an issue

Adding new issue operations

Conditions on issue operations

Working with attachments

Time tracking and worklog management

Working with comments on issues

Programming Change Logs

Programming issue links

Validations on issue linking

Discarding fields while cloning

JavaScript tricks on issue fields

Customizing the UI

Introduction

Changing the basic look and feel

Adding new web sections in the UI

Adding new web items in the UI

Adding conditions for web fragments

Creating new velocity context for web fragments

Adding a new drop-down menu on the top navigation bar

Dynamic creation of web items

Adding new tabs in the View Issue screen

Adding new tabs in the Browse Project screen

Creating Project Tab Panel using fragments

Adding new tabs in the Browse Version screen

Adding new tabs in the Browse Component screen

Extending a webwork action to add UI elements

Displaying dynamic notifications/warnings on issues

Re-ordering Issue Operations in the View Issue page

Re-ordering fields in the View Issue page

Remote Access to JIRA

Introduction

Creating a SOAP client

Creating an issue via SOAP

Working with custom fields and SOAP

Attachments and SOAP

Worklogs and time tracking via SOAP

Commenting on an issue via SOAP

User and group management via SOAP

Progressing an issue in workflow using SOAP

Managing versions via SOAP

Administration methods in SOAP API

Deploy a SOAP service in JIRA

Deploy a XML-RPC service within JIRA

Writing a Java XML-RPC client

Expose services and data entities as REST APIs

Writing Java client for REST API

Dealing with a Database

Introduction

Extending JIRA DB with custom schema

Accessing DB entities from plugins

Persisting plugin information in JIRA DB

Using active objects to store data

Accessing JIRA configuration properties

Getting database connection for JDBC calls

Migrating a custom field from one type to another

Retrieving issue information from a Database

Retrieving custom field details from a database

Retrieving permissions on issues from a database

Retrieving workflow details from a database

Updating issue status in a database

Retrieving users and groups from a database

Dealing with Change history in a database

Useful Recipes

Introduction

Writing a service in JIRA

Adding configurable parameters to a service

Writing scheduled tasks in JIRA

Writing listeners in JIRA

Customizing e-mail content

Redirecting to different page in webwork actions

Adding custom behavior for user details

Deploying a servlet in JIRA

Adding shared parameters to Servlet Context

Writing a Servlet Context Listener

Using filters to intercept queries in JIRA

Adding and importing components in JIRA

Adding new module types to JIRA

Enabling access logs in JIRA

Enabling SQL logging in JIRA

Overriding JIRA's default components in plugins

Creating issues and comments from e-mail

Internationalization in webwork plugins

Sharing common libraries across v2 plugins

Operations using direct HTML links

Index