Atlassian gadget plugin 만들기(2)

소만이·2024년 3월 31일

Atlassian

목록 보기
2/2
post-thumbnail

다음은 UserPref 부분이다.

UserPref란?

: 말 그대로 User Preferences을 정의하는데 사용된다. 이걸 통해서 gadget을 개인화하고 사용자별로 설정을 조정할 수 있다. userPref를 사용하여 사용자가 Gadget의 동작을 변경할 수 있는 여러 가지 설정을 제공한다. 또한 사용자가 gadget의 설정을 변경하면 변경 사항에 대해서 해당 사용자의 설정 프로필에 저장이 된다. 따라서 사용자가 gadget을 다시 로드하거나 새로고침하더라도 설정이 유지된다는 뜻이다.

위 사진에 있는 코드에서 startDate를 예를 들면 startDate에 변경된 값이 저장되고 그 값을 불러올 수도 있다.
gadget.getPref('startDate')로 말이다.

  var gadget = AJS.Gadget({
                        baseUrl: "__ATLASSIAN_BASE_URL__",
                        useOauth: "/rest/gadget/1.0/currentUser",
                        config: {
                   			 descriptor: function (args) {
                       		 return {
                            	fields: [
                                {
                                    id: "startDate",
                                    userpref: "startDate",
                                    type: "text",
                                    ....
                                },
                                	AJS.gadget.fields.nowConfigured()
                           		 ]
                        	   }
                    		},
                    	args: []
                		},
                        view:{
                         	onResizeAdjustHeight: true,
                            enableReload: true,
                        	template: function (args) {
                            },
                            args: []
                        }
                        
 });

gadget의 기본 구성방식은 이렇게 구성할 수 있다.

config

config는 해당 가젯을 설치했을 때 처음에 나오는 화면을 구성하는 것이다. 즉 어떤 조건을 넣어서 가젯 화면을 만들고 싶다면 config가 꼭 필요하다.
여기에 필요한 필드들을 만들어 가젯을 구성하는 것이다. 예를 들면 startDate 와 endDate 로 이슈를 가져와 그 기간에 해당하는 이슈들을 불러오려면 config에 startDate 와 endDate 필드가 꼭 필요하다.
https://developer.atlassian.com/server/framework/gadgets/field-definitions/
필드에 해당하는 정의에 대해서 자세하게 나와있는 문서이다.
여기에서 어떤 필드를 구성할지 보고 선택할 수 있다

나는 이렇게 구성하였는데, callback field는 가장 강력하고 유연한 필드를 구성할 수 있어서 선택하였다. div 로 감싸 javascript의 이벤트 핸들러를 쓸 수 있다. (parentDiv) ex> click event handler.

만약 새로 필드를 만들지 않고 현재 나의 jira에 있는 필드를 가져오고 싶다면 ajax option으로 가져올 수도 있다.

Ajax Option 이란?

: Atlassian Gadgets에서 Ajax Options는 Gadget이 Ajax를 통해 데이터를 동적으로 가져오는 데 사용되는 옵션들을 지정하는데 사용된다.. 이 옵션들은 Gadget이 외부 소스로부터 데이터를 가져오거나 업데이트할 때 사용되며, 비동기적인 데이터 교환을 용이하게 한다.

예를 들면 현재 나의 jira 사이트에서 사용 가능한 필드들을 가져오고 싶다면

args: [
         {
          	key: 'fields',
          	ajaxOptions: '__ATLASSIAN_BASE_URL__/rest/gadget/1.0/availableColumns',
         },
       ],

로 가져올 수 있다. 주소 창에 현재 나의 주소/rest/gadget/1.0/avilableColumns를 쳐보면 사용 가능한 필드들의 목록을 볼 수가 있다.

View

view는 가젯의 보여지는 화면을 구성할 수 있다. 또한 config를 통해 가져온 이슈들을 어떻게 보여줄 것인지 생성하는 곳이다.
onResizeAdjustHeight과 enableReload는 각각 가젯의 크기 조절 허용과 새로고침 허용을 한 것이다.

참고:
onResizeAdjustHeight -> https://developer.atlassian.com/server/framework/gadgets/adjusting-the-gadget-height-when-the-window-is-resized/
enableReload->
https://developer.atlassian.com/server/framework/gadgets/adding-a-reload-option-to-your-gadget/

view 에서 가져온 이슈들을 뿌리고 싶다면 Rest API 로 config 필드에 저장되어있던 값으로 이슈들을 먼저 가져와야한다. -> (gadget.getPref(필드값)) 물론 따로 config 필드에 저장되어있는 값이 따로 필요없을 수도 있다.

아무튼 이 또한 ajax option 으로 가져올 수가 있다.

args: [
         {
           key: 'this_google',
           ajaxOptions: function () {
               return {
                        url:'데이터를 가져올 주소',
                        contentType: "application/json",
                      };
         	},
        }
 ]

this_google key 로 이용해 return 값을 view에 뿌릴 수 있다.

그 전에 Rest API 를 사용하려면 또 다시

을 이용해, 이번엔 gadget plugin이 아닌 Rest API plugin을 먼저 설치해야 한다.

여기에서 14번을 선택해 설치하면 된다.

설정한 path로 Rest API 로 해당 프로젝트의 이슈들이나, 다른 정보들을 Atlassian 에서 가져올 수 있다.

Atlassian Rest API 주소는
cloud :
https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-group-issue-search
server : https://docs.atlassian.com/software/jira/docs/api/REST/9.13.0/#api/2/search-search

를 참고하면 된다.

Rest API로 데이터를 가져오려면 클래스를 하나 작성을 해야한다.
참고 : https://developer.atlassian.com/server/fisheye-crucible/rest-service-plugin-module-tutorial-for-fisheye/

클래스의 기본 형식은 대략 이렇게 구성하면 될 것 같다.

해당 jdk 버전과 sdk 버전들로 인해 ResponseEntity나 HttpHeaders 같은 기존에 썼던 spring framework 를 쓸 수 없어 나같은 경우에는 HttpURLConnection 을 써서 API 데이터(즉, 이슈들)을 가져왔다.

HttpURLConnection 글 참고.

그리고 메소드에 작성한 path를 아까 작성했던 args에 url에 넣어주면 데이터를 가져올 수가 있다.

url : '/rest/rest 모듈 설정한 이름/latest (최신버전)/클래스 패스/메소드 패스'

이렇게 말이다.

그래서 view의 해당하는 리턴받은 args 값을 가져와 해당 화면에 뿌릴 수가 있는 것이다.

 view: {
                            onResizeAdjustHeight: true,
                            enableReload: true,
                            template: function (args) {
                                  .....
                            }

여기서 args.key값 으로 데이터를 가져올 수 있다!

플러그인을 다 만들었으면

atlas-mvn package

를 통해 플러그인 패키지를 만들고 target에 설치된 jar 파일을 앱에 설치를 하면 된다!

0개의 댓글