Я работаю над проектом, состоящим из двух проектов плагина Eclipse. Один из них - проект EMF и содержит метамодель для приложения. Другой - это активный плагин, работающий над этой метамодели.Список всех доступных моделей в приложении EMF
Теперь я ищу способ перечислить все типы моделей, доступных в проекте метамодели. Поскольку мне в основном нужны все сгенерированные классы, я мог бы использовать отражения для итерации через пакет метамодели, но я бы предпочел бы более простой способ, если он есть.
модели уже перечислены в качестве расширений в plugin.xml
, как это:
<plugin>
<extension point="org.eclipse.emf.ecore.generated_package">
<package
uri="MyModel"
class="org.myproject.metamodel.MyModel.MyModelPackage"
genModel="model/MetaModel.genmodel"/>
</extension>
</plugin>
где класс MyModelPackage
расширяет EPackage
и org.myproject.metamodel.MyModel
содержит также все другие созданные классы, мне нужно, чтобы перечислить. Я предполагаю, что могу использовать эту информацию, но я до сих пор не знаю, как это сделать.
Update
Проект Я работаю над основан на EMFStore. Выполнение этой задачи предлагает перспективу EMFStore. Если у меня есть представление Navigator с проектом, я могу щелкнуть правой кнопкой мыши по этому проекту и выбрать New Model Element
. Это откроет диалог, в котором все элементы модели из моей метамодели перечислены так, чтобы это было возможно. Это должно быть сделано где-то в EMFStore или одной из его зависимостей. Я просмотрел исходный код, но не могу найти, где это делается.
Проект plugin.xml
проекта org.eclipse.emf.emfstore.perspective
относится к классу org.eclipse.emf.emfstore.emfperspective.EMFStorePerspective
, которого я не могу найти в источниках. Я импортировал проект через Eclipse Import Plug-Ins и Fragments, и у него нет исходной папки. В хранилищах хранилищ EMFStore я даже не могу найти этот проект.
Update
теперь я получил реестр, который содержит сгенерированные пакеты с помощью EPackage.Registry.INSTANCE
. К сожалению, он содержит больше, чем EPackages из одного проекта, содержащего метаданные (org.myproject.metamodel
). Теперь я просто ищу подходящий способ отфильтровать его, но все равно не могу его повесить.
Update
Как фильтрация не является частью моего первоначального вопроса я принял ответ на @SpaceTrucker. Для тех, кому любопытно, это, как я сделал это сейчас:
Registry registry = EPackage.Registry.INSTANCE;
for (String key : new HashSet<String>(registry.keySet())) {
EPackage ePackage = registry.getEPackage(key);
if (ePackage.getClass().getName().startsWith("org.myproject.metamodel")) {
//do stuf
}
}
Я не нашел способ фильтрации для проекта, но, к счастью, все пакеты начинаются с той же приставкой.
Звучит многообещающе. Проект уже имеет зависимость от MoDisco. Будет несколько дней, пока я не смогу заглянуть в нее снова, но спасибо заранее. –
'ECorePlugin.getDefaultRegistryImplementation()' возвращает 'null', но ваш ответ указал мне в правильном направлении.Я сейчас еще шаг и отредактирую свой вопрос. –