Вопрос/проблема
Учитывая простой класс Java, исходящий из API, не поддерживающего EMF, такого как
public class BankAccount {
String ownerName;
int accountNumber;
// ...
}
а также предположим, что мне не разрешено изменять или перекомпилировать этот класс (потому что он из API).
Есть ли простой способ использовать этот класс в качестве ESuperType для EClass в EMF? (И, конечно, один класс - это просто пример. Мне нужно было бы обернуть API, состоящий из 30-50 классов...).
Собственные мысли
Лично я думаю, что это невозможно из коробки.
Я мог придумать только два способа, оба требуют значительных усилий и не так просты в реализации.
Создайте модель Ecore, которая отражает исходный класс (
EBankAccount
, имеющийownerName
иaccountNumber
какEAttributes
) и служебный метод/механизм, который заключает в себе исходный объект, копируя его поля в соответствующиеEStructuralFeatures
и добавляяEAdapter
, отвечающие за синхронизацию обоих объектов.Подключитесь к EMF.CodeGen и сделайте там немного волшебства, которое позволит использовать исходный класс в качестве суперкласса в сгенерированном коде, который в то же время все еще выполняет контракт EMF (= реализовать интерфейс
EObject
и т. д.).
Но, может быть, есть какая-то скрытая функция EMF (или существующего расширения), которая делает что-то в этом роде, а я о ней не знаю?