2013-07-29 5 views
1

JIRA에서 사용자 정의 필드 유형을 개발 중입니다. 내 클래스는 매우 간단하며 GenericTextCFType을 확장합니다. 필자의 목표는 데이터베이스에 필드 값의 일부 식별자 (ID)를 저장하는 것이지만 이슈 폼에 필드 값의 사람이 읽을 수있는 캡션을 표시하는 것입니다.getSingularObjectFromString 메서드는 무엇을하는지 이해할 수 없습니까?

GenericTextCFType 클래스의 메소드를 검색하고 getSingularObjectFromString 메소드를 찾았는데 이해하지 못합니다. JIRA javadoc가 : "표현 계층에 의해 전달 된 문자열 값을 가진 단수 객체를 반환합니다" 그러나 단수 객체는 무엇이며 필요한 것은 무엇입니까?

답변

3

예, 멋진 이름이 아닙니다. "Practical JIRA Plugins" (O'Reilly)에서 자세히 설명했습니다. 여기에 많은 메소드에 대해 자세히 설명하는 압축 파일이 있습니다 (형식화에 대해 미안). 이 책은 또한 평소와 같이 CustomFieldType 인터페이스를 구현하는 대신합니다 예제의 사용자 정의 필드 타입 클래스는 NumberCFType보다 상속 계층 구조에서 클래스 이상까지 확장됩니다 https://bitbucket.org/mdoar/practical-jira-plugins

CustomFieldType 방법 에서 사용할 수 예를 일했다. 확장 할 클래스는 AbstractCustomFieldType이며 CustomFieldType을 구현하는 대부분의 클래스의 루트에 있습니다.

이름에 "SingularObject"가있는 CustomFieldType 인터페이스의 메서드는 단 일 개체 (이 예제에서는 Carrier 개체)를 참조합니다. Object를 참조하는 JIRA 4 커스텀 필드의 다른 모든 메소드는 전송 객체, 예를 들어 Carrier 객체의 Collection을 참조합니다. JIRA 5는 대부분의 사용자 정의 필드 메소드에서 Object 사용을 제거했습니다. 커스텀 필드가있는 JIRA 5.0의 변경 사항에 대한 자세한 내용은 https://developer.atlassian.com/display/JIRADEV/Java+API+Changes+in+JIRA+5.0#JavaAPIChangesinJIRA5.0-CustomFieldTypes을 참조하십시오. 클래스 계층에는 몇 가지 주요 변경 사항이 있었으며 대부분의 클래스는 이전처럼 Object를 사용하는 대신 Java generic을 매개 변수로 사용합니다.

일반적으로 사용자 지정 필드 형식 클래스의 생성자에 삽입되는 두 개의 개체가 있습니다. 첫 번째는 실제로 데이터베이스와 상호 작용할 CustomFieldValuePersister persister 오브젝트입니다. 두 번째는 사용자 정의 필드의 기본값을 저장하고 검색하는 데 사용되는 GenericConfigManager 객체입니다. 다른 객체는 필요에 따라 생성자에 삽입됩니다 (예 2-2의 DoubleConverter). 고려해야 할 첫 번째 메서드 집합은 사용자 지정 필드 형식이 어떤 방식 으로든 데이터베이스와 상호 작용할 때 사용하는 메서드 집합입니다.

getSingularObjectFromString() 

이 방법은 캐리어 객체로 "42.0 ### 답"로 데이터베이스에서 가져온 문자열로 변환합니다. 널 (NULL) 값은 정의 된 그러한 오브젝트가 없음을의 L합니다. 여러 값

Collection<Carrier> getValueFromIssue(CustomField field, Issue issue) 

이 필드는 주어진 문제에 대한 포함 된 내용을 추출하기위한 주요 방법으로

필드. Persister를 사용하여 문제의 데이터베이스에서 값을 검색하고 각 값을 Carrier 객체로 변환 한 다음 모든 Carrier 객체를 전송 객체 Collection에 배치합니다. null 값은이 필드에 주어진 문제에 대해 저장된 값이 없음을 의미합니다. 이것은 이러한 방법은 새 값을 만들거나 주어진 문제의 필드에 대한 기존 값을 업데이트 JIRA 5.0

createValue(CustomField field, Issue issue, Collection<Carrier> value) 
updateValue(CustomField field, Issue issue, Collection<Carrier> value) 

전에 개체를 반환하는 데 사용되는 방법 중 하나입니다.이를 수행하는 Persister는 Collection의 String이 저장 될 것으로 기대하므로이 두 메소드는 모두 getDbValueFromCollection 메소드를 호출하여이를 지원합니다.

getDbValueFromCollection() 

개인 맞춤형 메서드는 많은 사용자 지정 필드 형식 클래스에서 발견되며 때로는 다른 이름으로도 표시됩니다. 데이터베이스에 저장하기 위해 전송 객체 (예 : Carrier 객체 컬렉션)를 String Collection으로 변환하는 데 사용됩니다.

setDefaultValue(FieldConfig fieldConfig, Collection<Carrier> value) 

는 데이터베이스 repre- sentation에 전송 오브젝트 (캐리어 개체의 컬렉션을) 변환과 genericconfiguration 테이블의 데이터베이스에 저장합니다.

Collection<Carrier> getDefaultValue(FieldConfig fieldConfig) 

데이터베이스에서 기본값을 검색하여 전송 개체 (Carrier 개체 모음)로 변환합니다. FieldConfig 객체는 사용자 정의 필드의 각 기본값에 대한 컨텍스트를 나타냅니다.

다음으로 고려해야 할 방법은 웹 페이지와 어떤 방식으로 상호 작용하는 방법입니다. 웹 페이지의 모든 값은 사용자 정의 FieldParams 객체의 일부로 사용자 정의 필드 유형 객체에 도착합니다.이 객체는 HTML 입력 요소 값의 맵을위한 홀더입니다.

validateFromParams(CustomFieldParams params, ErrorCollection errors, FieldConfig config) 

사용자가 사용자 지정 필드 값을 편집 한 후에 호출되는 첫 번째 메서드입니다. 여기에 기록 된 오류는 편집 페이지의 필드 옆에 잘 표시됩니다. 유효성 FromParams 의해 허용 된 필드에 대한 새로운 값이 세정 및 전송 오브젝트로 변환된다

getValueFromCustomFieldParams(CustomFieldParams customFieldParams) 

이 방법이다. 사용자 정의 FieldParams 객체에는 사용자 정의 필드 ID 인 name 속성이있는 HTML 요소의 문자열 (예 : customfield_10010) 만 포함됩니다. null 값은이 필드에 값이 없음을 의미합니다.

getStringValueFromCustomFieldParams(CustomFieldParams parameters) 

이 메서드는 String, Collection of Strings 또는 CustomFieldParams 객체 일 수도있는 객체를 반환합니다. 제 3 장 : 고급 사용자 정의 필드 유형 속도 템플릿에 사용 된 값 변수를 채우는 데 사용됩니다. 또한 사용자 정의 필드 검색 프로그램에서 사용하는 Provider 클래스에서 사용됩니다.

String getStringFromSingularObject(Carrier singularObject) 

이 방법은 예상대로 getSingularObjectFromString과 정반대가 아닙니다. 대신 단수의 개체 (Carrier)를 데이터베이스 값이 아닌 웹 페이지에서 사용되는 문자열로 변환하는 데 사용됩니다. 반환 된 String은 검색을 위해 Lucene 색인에 저장된 내용이기도합니다 (57 페이지의 "보다 복잡한 검색기"). 단일 객체는 JIRA 5.0 이전에 Object로이 메소드에 전달되었습니다. 고려해야 할 CustomFieldType 방법

마지막 세트는 다음과 같습니다

Set<Long> remove(CustomField field) 

이 방법은 사용자 정의 필드가 완전히 JIRA 인스턴스에서 제거 될 때 호출 및 제거에 의해 영향을받은 문제의 ID를 반환합니다. 필드에서 값을 삭제하는 데 올바른 방법은 updateValue입니다.

String getChangelogValue(CustomField field, Object value) 
String getChangelogString(CustomField field, Object value) 

이러한 방법은 문제의 기록 탭에서 볼 수 텍스트 발생원 방법이다. 이 형식의 사용자 지정 필드가 변경되면이 메서드는 필드의 전후 값을 사용하여 호출됩니다.두 메서드의 차이점은 나중에 값이 무효화되면 대신 문자열 (https://developer.atlassian.com/display/JIRADEV/Database+Schema#DatabaseSchema-ChangeHistory)이 표시된다는 것입니다.

extractTransferObjectFromString() 
extractStringFromTransferObject() 

이러한 메서드는 CustomFieldType 인터페이스가 아니지만 프로젝트 가져 오기 중에 사용할 표준 다중 필드에 있습니다.

다른 인터페이스

일반적으로 사용자 정의 필드 유형에 의해 구현되는 몇 가지 다른 인터페이스입니다.

ProjectImportableCustomField 

이 인터페이스에서 getProjectImporter 방법은 사용자 정의 필드가 XML 백업에서 프로젝트를 가져 오는 동안 채워 방법을 구현하는 데 사용됩니다. 이 인터페이스를 구현하지 않으면 프로젝트 가져 오기에서 사용자 정의 필드의 값을 가져 오지 않습니다.

MultipleCustomFieldType 
MultipleSettableCustomFieldType 

이 두 인터페이스는 옵션이있는 사용자 정의 필드에서 사용되며 두 개 이상의 옵션을 가질 수 있습니다. 이러한 클래스의 경우 Java 클래스의 간단한 하위 클래스 인 Options 클래스를 사용하여 값에 액세스 할 수 있습니다. 이러한 인터페이스는 실제로 범용 다중 값 사용자 정의 필드 유형에 사용하기위한 것이 아닙니다.

다중 값 필드 | 41

SortableCustomField 

이 인터페이스는 두 개의 단일 오브젝트를 비교하는 비교 방법을 포함한다. 이것은 열의 제목을 클릭하여 문제 목록을 정렬 할 때 이슈 탐색기에서 사용됩니다. 이것은 실제로 연관된 검색자를 가지고 있지 않은 사용자 정의 필드에 대한 더 느린 폴백입니다 (4 장 참조).

RestAwareCustomFieldType 
RestCustomFieldTypeOperations 

이 두 인터페이스는 JIRA REST API가 어떤 필드를 검색하거나 업데이트 할 수 있는지를 알려줍니다. JIRA 5.0의 새로운 기능입니다.

+0

감사합니다. 일부 사항이 명확 해졌습니다. – omickron

+0

제발,이 질문을 관련성이 있으므로 읽어보십시오. 나는 아직도 혼란 스럽습니다. http://stackoverflow.com/questions/39703254/how-jira-plugin-custom-field-value-gets-processed-on-the-way-to-vm-templates – Emptyfruit

관련 문제