3.2.9.3.2. Типы свойств
"Из коробки" платформой поддерживаются следующие типы свойств:
-
String
, простые типы и их объектные обертки (boolean
,Boolean
,int
,Integer
, etc.). -
Перечисления (
enum
). Значение свойства сохраняется в файле или БД в виде имени значения перечисления.Если перечисление реализует интерфейс
EnumClass
и имеет статический методfromId()
для получения значения по идентификатору, с помощью аннотации@EnumStore
можно задать хранение значения в виде идентификатора. Например:@Property("myapp.defaultCustomerGrade") @DefaultInteger(10) @EnumStore(EnumStoreMode.ID) CustomerGrade getDefaultCustomerGrade(); @EnumStore(EnumStoreMode.ID) void setDefaultCustomerGrade(CustomerGrade grade);
-
Классы персистентных сущностей. При обращении к свойству типа сущности происходит загрузка из БД экземпляра, заданного значением свойства.
Для поддержки произвольного типа необходимо реализовать классы TypeStringify
и TypeFactory
для преобразования значения в строку и из нее, и указать эти классы для свойства с помощью аннотаций @Stringify
и @Factory
.
Рассмотрим этот процесс на примере типа UUID
.
-
Создаем класс
com.haulmont.cuba.core.config.type.UuidTypeFactory
унаследованный отcom.haulmont.cuba.core.config.type.TypeFactory
и реализуем в нем метод:public Object build(String string) { if (string == null) { return null; } return UUID.fromString(string); }
-
TypeStringify
создавать не нужно, т.к. по умолчанию будет использован методtoString()
− в данном случае он нам подходит. -
Аннотируем свойство в конфигурационном интерфейсе:
@Factory(factory = UuidTypeFactory.class) UUID getUuidProp(); void setUuidProp(UUID value);
В платформе определены реализации TypeFactory
и Stringify
для следующих типов:
-
UUID
-UuidTypeFactory
, см. пример выше.TypeStringify
здесь не требуется, так как реализация методаtoString()
по умолчанию подходит для типаUUID
. -
java.util.Date
-DateFactory
иDateStringify
. Значение даты должно быть указано в форматеyyyy-MM-dd HH:mm:ss.SSS
, например:cuba.test.dateProp = 2013-12-12 00:00:00.000
Пример описания свойства с типом
Date
в конфигурационном интерфейсе:@Property("cuba.test.dateProp") @Factory(factory = DateFactory.class) @Stringify(stringify = DateStringify.class) Date getDateProp(); void setDateProp(Date date);
-
List<Integer>
(список целых чисел) -IntegerListTypeFactory
иIntegerListStringify
. Значение свойства должно быть указано в виде списка чисел, разделенных пробелами, например:cuba.test.integerListProp = 1 2 3
Пример описания свойства с типом
List<Integer>
в конфигурационном интерфейсе:@Property("cuba.test.integerListProp") @Factory(factory = IntegerListTypeFactory.class) @Stringify(stringify = IntegerListStringify.class) List<Integer> getIntegerListProp(); void setIntegerListProp(List<Integer> list);
-
List<String>
(список строк) -StringListTypeFactory
иStringListStringify
. Значение свойства должно быть указано в виде списка строк, разделенных символом "|", например:cuba.test.stringListProp = aaa|bbb|ccc
Пример описания свойства с типом
List<String>
в конфигурационном интерфейсе:@Property("cuba.test.stringListProp") @Factory(factory = StringListTypeFactory.class) @Stringify(stringify = StringListStringify.class) List<String> getStringListProp(); void setStringListProp(List<String> list);