5.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
для следующих типов:
-
UUID
-UuidTypeFactory
, описано выше. -
java.util.Date
-DateFactory
. Значение даты должно быть указано в форматеyyyy-MM-dd HH:mm:ss.SSS
, например:cuba.test.dateProp = 2013-12-12 00:00:00.000
-
List<Integer>
(список целых чисел) -IntegerListTypeFactory
. Значение свойства должно быть указано в виде списка чисел, разделенных пробелами, например:cuba.test.integerListProp = 1 2 3
-
List<String>
(список строк) -StringListTypeFactory
. Значение свойства должно быть указано в виде списка строк, разделенных символом "|", например:cuba.test.stringListProp = aaa|bbb|ccc