728x90
반응형
SMALL

이제 JIRA 관리자든 일반 사용자든 접근 가능한 상단 네비게이션 화면에 플러그인 관련 링크를 노출하는 방법을 소개한다.

화면으로 보면 이해가 좀 더 빠를 것 같다. 바로 이 부분.

 

 

여기에 플러그인 관련 링크를 노출시키고 빠른 접근성을 확보하기 위해 해야하는 절차들을 소개한다.

 

Web Section과 Web Item

이것 역시 Web Section과 Web Item과 연관이 있다.

그리고 아무튼 JIRA Plugin 개발은 무조건 다 Add-on Descriptor (atlassian-plugin.xml)에 리소스를 등록해야 한다.

 

그래서 우선 첫번째 단계는 아래와 같이 Web Item을 등록하는 것이다.

<web-item key="topNavKapproval" name="Link on My Links Main Section" section="system.top.navigation.bar" weight="150">
    <condition class="com.atlassian.jira.plugin.webfragment.conditions.UserLoggedInCondition" />
    <label key="K-Approval"></label>
    <link linkId="topNavKapproval"></link>
</web-item>

<web-section name="K-Approval Request Approval Section" i18n-name-key="section.kapproval.request.approval.name" key="kapprovalRequestSection" location="topNavKapproval" weight="10">
    <label key="section.kapproval.request.approval.label"></label>
</web-section>

 

Web Itemsection attribute는 `system.top.navigation.bar`라는 미리 정해져 있는 값이다.

그리고 지금껏 보지 못했던 내용이 하나 추가됐는데 바로 `condition` 태그이다. 이 컨디션 태그는 뭐냐면 어떤 특정 조건에 만족할 경우에만 이 상단 네비게이션 바에 버튼(링크)가 보여지게 하는 방법이다. 

 

그리고 이 컨디션은 또한 클래스가 이미 다 정해져있다. 그 중 하나가 바로 `com.atlassian.jira.plugin.webfragment.conditions.UserLoggedInCondition`이다.

클래스 이름만 봐도 유저가 로그인 된 상태인 조건이라고 짐작할 수 있다. 이 조건은 어떻게 알까? 다음 링크를 참고하자. 

 

Web Item conditions

Web Item conditions Web Item Conditions Conditions control whether a given web item will be displayed. com.atlassian.fisheye.plugin.web.conditions.HasCrucible This condition measures whether the product runs with a Crucible license. com.atlassian.fisheye.p

developer.atlassian.com

 

참고로 컨디션을 사용하려면 그냥 태그만 추가해서는 안된다. 이 컨디션의 클래스는 말 그대로 클래스를 가져오는 것이고 클래스를 가져온다는 것은 모듈(라이브러리)가 프로젝트에 포함된 상태여야 한다. 그리고 그건 프로젝트의 pom.xml 파일에서 추가한다.

 

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>jira-maven-plugin</artifactId>
            <version>${amps.version}</version>
            <extensions>true</extensions>
            <configuration>
                <productVersion>${jira.version}</productVersion>
                <productDataVersion>${jira.version}</productDataVersion>
                <enableQuickReload>true</enableQuickReload>

                <instructions>
                    <Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>

                    <!-- Add package to export here -->

                    <!-- Add package import here -->
                    <Import-Package>
                        com.atlassian.jira.plugin.webfragment.conditions,
                        org.eclipse.gemini.blueprint.*;resolution:="optional",
                        *
                    </Import-Package>

                    <!-- Ensure plugin is spring powered -->
                    <Spring-Context>*</Spring-Context>
                </instructions>
                <log4jProperties>src/main/resources/log4j.properties</log4jProperties>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

 

build 태그 안에 plugins 태그 안에 plugin`com.atlassian.maven.plugins` 안에 자세히 보면 <Import-Package> 라는 태그가 있다. 이 안에 `com.atlassian.jira.plugin.webfragment.conditions`를 추가해줘야 한다. 그러면 아래 라이브러리 안에 구현된 컨디션들을 확인해 볼 수 있을 것이다.

 

 

다시 돌아와서, 이제 컨디션까지 확인을 해봤고 label은 말 그대로 화면에 보여지는 Label을 의미한다.

그리고 그 다음에 Web Section이 나오는데 Web Section은 그 상단 네비게이션 바에서 버튼을 클릭하면 하단에 나오는 드롭다운 메뉴에서 섹션을 구분할 수가 있다. 그 구분 섹션을 의미한다. 다음 사진을 보자.

이렇게 빨간 박스로 구분된 섹션들을 말한다. 그리고 이 location 중요한데, 이 location은 상단 네비게이션 바 Itemkey가 되어야 한다. 그래야 그 상단 네비게이션 바에 섹션들이 들어가겠지?라는 합리적인 발상이 가능해진다. 그리고 label 태그는 i18n 리소스를 사용했다. 

 

그 다음, 섹션이 있으면 그 섹션에 각 링크들이 달릴것이다. 그래서 그 링크(버튼)들을 만들어야 한다.

<web-item key="menuKapprovalRequestApproval" i18n-name-key="menu.kapproval.request.approval.name" name="kapprovalRequestApproval" section="topNavKapproval/kapprovalRequestSection" weight="10">
    <label key="menu.kapproval.request.approval.label" ></label>
    <link linkId="menuKapprovalRequestApproval">/issues/?jql=issuekey in kapprovalRequestApproval()</link>
</web-item>

Web Item은 방금 본 Web Section 하단에 달릴 링크(버튼)이다. 

여기서도 역시 중요한건 section이다. 여기에 보면 `topNavKapproval/kapprovalRequestSection`으로 되어 있는데 `topNavKapproval`은 상단 네비게이션 바를 가리키는 Web ItemKey이다. 그리고 `kapprovalRequestSection`은 그 상단 네비게이션 바에 달리는 섹션의 Key이다.

 

전체 코드로 보면 아래와 같다.

<web-item key="topNavKapproval" name="Link on My Links Main Section" section="system.top.navigation.bar" weight="150">
    <condition class="com.atlassian.jira.plugin.webfragment.conditions.UserLoggedInCondition" />
    <label key="K-Approval"></label>
    <link linkId="topNavKapproval"></link>
</web-item>

<web-section name="K-Approval Request Approval Section" i18n-name-key="section.kapproval.request.approval.name" key="kapprovalRequestSection" location="topNavKapproval" weight="10">
    <label key="section.kapproval.request.approval.label"></label>
</web-section>

<web-item key="menuKapprovalRequestApproval" i18n-name-key="menu.kapproval.request.approval.name" name="kapprovalRequestApproval" section="topNavKapproval/kapprovalRequestSection" weight="10">
    <label key="menu.kapproval.request.approval.label" ></label>
    <link linkId="menuKapprovalRequestApproval">/issues/?jql=issuekey in kapprovalRequestApproval()</link>
</web-item>

 

그리고, 그 실질적으로 클릭 가능한 버튼인 `menuKapprovalRequestApproval`이라는 키를 가진 Web Item은 의미있는 링크를 가지고 있다. 그 링크는 특정 JQL을 실행하는 링크이고 이 JQL 함수는 내가 따로 만든 JQL이다. 이건 이후에 설명하겠다. 아무튼 이 버튼을 클릭하면? 지정된 JQL을 실행하는 화면으로 이동한다.

 

그래서 아래 사진이 완성된 화면이다. 

 

이렇게 상단 네비게이션 바에 플러그인의 링크를 노출시킬 수 있다. 그리고 그 각 버튼은 의미있는 화면으로의 이동이 되면 된다. 나같은 경우는 내가 만든 커스텀 JQL 함수를 실행하는 화면으로 이동시키게 만든 것이고 말 나온김에 다음 포스팅은 커스텀 JQL 함수를 만드는 방법을 포스팅 해보겠다.

 

참고로, 섹션을 또 추가하고 싶으면 위 방식대로 Web Section 추가하고 그 섹션 하위에 Web Item들을 위 방식 그대로 똑같이 추가해주면 된다.
728x90
반응형
LIST

+ Recent posts