Не могу понять, что делает метод getSingularObjectFromString?

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

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


person Mikhail Kopylov    schedule 29.07.2013    source источник


Ответы (1)


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

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

Методы в интерфейсе CustomFieldType с «SingularObject» в своем имени относятся к единственному объекту, в этом примере - объекту Carrier. Все другие методы в настраиваемых полях JIRA 4, которые ссылаются на объект, ссылаются на транспортный объект, например, на коллекцию объектов-перевозчиков. В JIRA 5 исключено использование Object в большинстве методов настраиваемых полей. Для получения дополнительной информации о том, что изменилось в 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)

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

Collection<Carrier> getDefaultValue(FieldConfig fieldConfig)

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

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

validateFromParams(CustomFieldParams params, ErrorCollection errors, FieldConfig config)

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

getValueFromCustomFieldParams(CustomFieldParams customFieldParams)

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

getStringValueFromCustomFieldParams(CustomFieldParams parameters)

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

String getStringFromSingularObject(Carrier singularObject)

Этот метод не является прямой противоположностью getSingularObjectFromString, как вы могли ожидать. Вместо этого он используется для преобразования особого объекта (Carrier) в строку, которая используется на веб-странице, а не в значение базы данных. Возвращенная строка также иногда сохраняется в индексах Lucene для поиска («Более сложные поисковые системы» на стр. 57). Единственный объект был передан в этот метод как Object до 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, но они существуют в стандартных полях Multi для использования во время импорта проекта.

Другие интерфейсы

Есть несколько других интерфейсов, которые обычно реализуются с помощью настраиваемых типов полей.

ProjectImportableCustomField

Метод getProjectImporter из этого интерфейса используется для реализации того, как настраиваемое поле заполняется во время импорта проекта из резервной копии XML. Если вы не реализуете этот интерфейс, при импорте проекта не будут импортироваться значения для вашего настраиваемого поля.

MultipleCustomFieldType
MultipleSettableCustomFieldType

Эти два интерфейса используются настраиваемыми полями с параметрами и, кроме того, могут иметь более одного параметра. Для этих классов значения могут быть доступны с помощью класса Options, который является простым подклассом Java List. Эти интерфейсы на самом деле не предназначены для использования универсальными типами настраиваемых полей с несколькими значениями.

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

SortableCustomField

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

RestAwareCustomFieldType
RestCustomFieldTypeOperations

Эти два интерфейса позволяют JIRA REST API узнать, какие поля можно получить или обновить. Новое в JIRA 5.0.

person mdoar    schedule 29.07.2013
comment
Пожалуйста, прочтите этот вопрос, поскольку он связан, и я все еще в замешательстве. stackoverflow.com/questions/39703254/ - person Emptyfruit; 26.09.2016