Есть ли способ определить методы для модели данных при использовании FMPP? - PullRequest
0 голосов
/ 09 мая 2019

Я хочу добавить методы в мою модель данных, поэтому мне нужен способ указать их в моих файлах данных tdd. Например, имея файл данных tdd, содержащий два скаляра:

a: 1
b: 1 

Я хотел бы добавить метод area, который умножает их. Возможно ли это вообще, и если да, то как мне этого добиться?

1 Ответ

0 голосов
/ 11 мая 2019

Допустим, у вас есть MyUtils с методами foo() и bar(), и вы хотите получить доступ к ним в шаблонах.

Вы можете добавить произвольные объекты Java в модельиспользуя eval загрузчик данных в data, например myUtils: eval('new com.example.MyUtils()').Тогда вы можете выдать myUtils.foo() в шаблонах.Но вы хотели добавить методы на верхнем уровне.Это тоже возможно.Как в eval, так и в пользовательском DataLoader (в зависимости от того, что вы хотите использовать) у вас есть доступ к engine, объекту fmpp.Engine.И тогда вы можете воспользоваться этим трюком:

// Note: In case you are using eval, use Java 1.2 syntax (no generics).
TemplateHashModel myUtilsModel = (TemplateHashModel) engine.wrap(new MyUtils());
Map<String, TemplateModel> myUtilsMethodModels = new HashMap<>();
myUtilsMethodModels.put("foo", myUtilsModel.get("foo"));
myUtilsMethodModels.put("bar", myUtilsModel.get("bar"));
return myUtilsMethodModels;

Затем вы добавите Map к data без имени .(Если вы добавите Map к data без имени, его ключи станут переменными верхнего уровня.)

Конечно, его можно отполировать, чтобы получше, например, найти нужные вам методы автоматически и т. Д. ПлюсЯ не пробовал это выше (так что опечатки возможны).Но это основная идея.(Полагаю, было бы целесообразно, если бы у FMPP был загрузчик данных, который загружает статические методы класса ... Но сейчас его нет.)

...