2013-07-29 9 views
1

Я разрабатываю собственный пользовательский тип поля в JIRA. Мой класс очень прост, он расширяет GenericTextCFType. Моя цель состоит в том, чтобы сохранить некоторый идентификатор (ID) значения поля в базе данных, но для отображения заголовка поля в поле «Проблема» для человека.Не могу понять, что делает метод getSingularObjectFromString?

Я искал методы класса GenericTextCFType и нашел метод getSingularObjectFromString, и я не понимаю, что он делает. JIRA javadoc говорит: «Возвращает объект Singular, заданный строковым значением, принятым уровнем представления» Но что такое Singular Object и для чего он нужен?

ответ

3

Да, это не замечательное имя. Я писал об этом подробно в «Практических плагинах JIRA» (O'Reilly). Вот отрывок оттуда, подробно описывающий многие из методов (извините за форматирование). В книге также работал примеры, доступные в https://bitbucket.org/mdoar/practical-jira-plugins

CustomFieldType Методы класса типа поля на примере будет реализовывать интерфейс CustomFieldType как обычно, но вместо этого будет расширять класс выше в иерархии наследования, чем NumberCFType. Класс, который мы будем расширять, - AbstractCustomFieldType, и он лежит в основе большинства классов, которые реализуют CustomFieldType.

Методы интерфейса CustomFieldType с «SingularObject» в их имени относятся к единственному объекту, в данном примере - к объекту Carrier. Все другие методы в пользовательских полях JIRA 4, которые относятся к объекту, относятся к транспортному объекту, например, к коллекции объектов Carrier. JIRA 5 удалила использование объекта в большинстве настраиваемых полевых методов. Для получения дополнительной информации о том, что изменилось в JIRA 5.0 с настраиваемыми полями, см. https://developer.atlassian.com/display/JIRADEV/Java+API+Changes+in+JIRA+5.0#JavaAPIChangesinJIRA5.0-CustomFieldTypes. В иерархии классов произошли некоторые существенные изменения, и большинство классов теперь имеют общий язык Java в качестве параметра, а не просто использовать объект по-прежнему.

Существует два объекта, которые обычно вводятся в конструктор класса настраиваемого типа поля. Первый - это объект-объект CustomFieldValuePersister, который фактически взаимодействует с базой данных. Второй - объект GenericConfigManager, который используется для хранения и получения значений по умолчанию для настраиваемого поля. Другие объекты вводятся в конструктор по мере необходимости, например, DoubleConverter в примере 2-2. Первый набор методов для рассмотрения - это те, которые пользовательский тип поля использует для взаимодействия с базой данных в некотором роде.

getSingularObjectFromString() 

Этот метод преобразует строку, взятую из базы данных, такие как «42,0 ### ответ» в объект Carrier. Нулевое значение означает, что такой объект не определен.

поля с несколькими значениями

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

Это основной метод для извлечения, что поле содержит для данного вопроса. Он использует persister для извлечения значений из базы данных для проблемы, преобразует каждое значение в объект Carrier и затем помещает все объекты Carrier в объект Transport Port. Нулевое значение означает, что это поле не имеет значения для данной проблемы. Это один из методов, которые используются для возвращения объекта, прежде чем JIRA 5.0

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

Эти методы создают новое значение или обновить существующее значение поля в данном вопросе.Персистент, который делает это, ожидает, что коллекция строк будет сохранена, поэтому оба этих метода вызовут метод getDbValueFromCollection, чтобы помочь с этим.

getDbValueFromCollection() 

Метод частного удобства, который можно найти во многих пользовательских классах полей типа, иногда с другим именем. Он используется для преобразования транспортного объекта (например, коллекции объектов Carrier) в коллекцию строк для хранения в базе данных.

setDefaultValue(FieldConfig fieldConfig, Collection<Carrier> value) 

Преобразовать транспортный объект (совокупность объектов Carrier) в своей базе данных представи- sentation и хранить в базе данных в таблице genericconfiguration.

Collection<Carrier> getDefaultValue(FieldConfig fieldConfig) 

Получить значение по умолчанию, если таковые имеются, из базы данных и преобразовать его в транспортный объект (совокупность объектов Carrier). Объект FieldConfig представляет собой контекст каждого значения по умолчанию в настраиваемом поле.

Следующий набор методов для рассмотрения - это те, которые каким-то образом взаимодействуют с веб-страницей. Все значения из веб-страниц поступают в пользовательский объект типа поля как часть объекта Custom FieldParams, который является держателем для Карты значений входных элементов HTML.

validateFromParams(CustomFieldParams params, ErrorCollection errors, FieldConfig config) 

Это первый метод, который вызывается после того, как пользователь отредактировал значение настраиваемого поля. Любые ошибки, записанные здесь, будут хорошо отображаться рядом с полем на странице редактирования.

getValueFromCustomFieldParams(CustomFieldParams customFieldParams) 

Этот метод, где новое значение поля, которое было принято валидации FromParams очищается и преобразуется в транспортный объект. Пользовательский объект FieldParams будет содержать только строки для элементов HTML с атрибутом имени, который является настраиваемым идентификатором поля, например, customfield_10010. Нулевое значение означает, что для этого поля нет значения.

getStringValueFromCustomFieldParams(CustomFieldParams parameters) 

Этот метод возвращает объект, который может быть строкой, коллекцией строк или даже объектом CustomFieldParams. Он используется для заполнения переменной значения, используемой в шаблонах Velocity в разделе 3: Расширенные пользовательские типы полей. Он также используется в классах провайдера, которые используются пользовательскими поисковыми пользователями.

String getStringFromSingularObject(Carrier singularObject) 

Этот метод не является прямой противоположностью getSingularObjectFromString, как вы могли ожидать. Вместо этого он используется для преобразования особого объекта (Carrier) в строку, которая используется на веб-странице, а не значение базы данных. Возвращенная строка также иногда хранится в индексах Lucene для поиска («Более сложные поисковые системы» на стр. 57). Особый объект был передан в этот метод как объект перед JIRA 5.0.

Окончательный набор методов CustomFieldType для рассмотрения:

Set<Long> remove(CustomField field) 

Этот метод вызывается, когда пользовательское поле полностью удаляется из экземпляра JIRA, и возвращает выпуск идентификаторами, которые пострадали от удаления. Правильный метод, используемый для удаления значения из поля, - 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-списка. Эти интерфейсы на самом деле не предназначены для использования в пользовательских типах полей общего назначения с несколькими значениями.

Поля с несколькими значениями | 41

SortableCustomField 

Этот интерфейс содержит метод сравнения для сравнения двух особых объектов. Это используется навигатором проблем, когда вы нажимаете заголовок столбца для сортировки страницы проблем. Это на самом деле более медленный резерв для настраиваемых полей, у которых нет связанного с ним поисковика (см. Главу 4).

RestAwareCustomFieldType 
RestCustomFieldTypeOperations 

Эти два интерфейса - это то, как API JIRA REST знает, какие поля могут быть восстановлены или обновлены. Новое в 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

Смежные вопросы