2012-04-09 2 views
0

Привет всем я новичок в acceleoВызов acceleo шаблон из Java приложения

В моем проекте, у меня есть класс Java драйвер, который вызывает различные шаблоны acceleo. Некоторые из шаблонов имеют параметры без любого типа EObject. Я вызываю функции initialize() и doGenerate() сгенерированного модуля Java для шаблона. возникают проблемы:

  1. initialize() ожидает, что первым аргументом будет объект Ecore, а остальные параметры - как List. Однако, как я уже упоминал, некоторые из шаблонов не имеют параметров EObject. Как я могу назвать такие шаблоны из java-приложения?

  2. Чтобы обойти вышеуказанную проблему, я скорректировал свой драйвер и шаблоны, чтобы иметь фиктивный EObject в качестве первого параметра. Затем он вызывает шаблоны успешно, но он не будет генерировать какой-либо вывод. Шаблоны генерируют вывод, если я их вызываю из другого шаблона драйвера. Однако я не хочу писать свою программу драйверов в MTL, так как это требует сложного анализа модели данных.

Просьба сообщить мне, как я могу прогрессировать в своем случае.

Благодаря & уважение
Dhanunjaya М.

ответ

1

В API мы подвергаем по умолчанию через класс Java мы создаем вместе с модулями «основные» шаблоны и „фасадными“ классы Acceleo всегда предполагать, что существует EObject как первый параметр шаблонов, которые должны быть вызваны. Это было сделано для того, чтобы облегчить использование для большинства случаев использования (мы ожидаем, что этот вариант использования составит 90% от общего числа).

Для других случаев использования вам необходимо будет использовать API, которые находятся за этими фасадами. А именно, вы можете создать другой метод «initialize», который не принимает EObject в качестве параметра для этих случаев, если у вас его просто нет. Затем вам необходимо также переопределить метод «generate (Monitor)», чтобы он не использовал AcceleoService.doGenerate ... или любой другой метод AcceleoService: это класс «фасад», о котором я говорил.

Вам нужно будет вызвать метод, который имитирует действие AcceleoService.doGenerate, не полагаясь на объект EObject, чтобы найти шаблон, который необходимо вызвать. Если у вас нет SDK или источников Acceleo, вы можете заглянуть в код через github: AcceleoService#doGenerate.

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