#date #validation #custom-data-type #ocl #ecore
#Дата #проверка #пользовательский тип данных #ocl #ecore
Вопрос:
Я пытаюсь добавить проверку для типа даты в emf.ecore 2.23 в следующих примерах
invariant validation1:
self.startDate.before(self.terminationDate);
или
invariant validation2:
self.startDate < self.terminationDate;
Используя эту ссылку https://wiki.eclipse.org/EMF/Recipes#Recipe:_Generating_data_types_that_support_date .2Ftime_format,
Я включил дату java.util.Дата, но ocl по-прежнему не распознает методы.
Мне также не удалось добавить тип EAnnotation http:///org/eclipse/emf/ecore/util/DateConversionDelegate .
Ответ №1:
К сожалению, модели Ecore редактируются как EDataType, для которого EMF не поддерживает определяемые пользователем методы. OCL поддерживает только «находки» =/<> . Как только поддержка Eclipse OCL расширится для поддержки использования базовых языковых API, это хороший вариант использования для улучшения. Комментарий добавлен в https://bugs.eclipse.org/bugs/show_bug.cgi?id=370087
Сегодня это ошибка EMF. EDate должен был быть объявлен как EClass, но это создало бы другие трудности.
И снова сегодня обходным путем является объявление и ручная реализация класса EDateHelper без состояния с помощью методов, таких как раньше (date1 : EDate, date2 : EDate) : Boolean .
Комментарии:
1. Когда я установил новую версию Java, я могу использовать операторы <,> и = для сравнения дат вместо использования isBefore и других методов. Все работает нормально, спасибо, Эд.