загрузить модель экземпляра EMF, а затем программно создать в ней объект - PullRequest
0 голосов
/ 29 сентября 2018

Мне нужно загрузить модель экземпляра EMF и затем создать в ней объект, просто написав код в отдельном плагине.

Пожалуйста, объясните мне фрагмент кода о том, как создать этот объект?

Предположим, что у нас есть простая метамодель:

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Если вы хотите загрузить модель XML, если вы используете ее в плагине Eclipse, она должна быть такой простой:

ResourceSet resourceSet = new ResourceSetImpl();
Resource resource = resourceSet.getResource(fileURI, true);

Чтобы создать некоторые объекты в вашей модели, вам нужноиспользовать gactory, сгенерированный EMF из вашего .ecore.Если ваш .ecore описывает пакет с именем Database, ваша фабрика будет сгенерирована в DatabaseFactory.java.

User newUser = DatabaseFactory.INSTANCE.createUser();
newUser.setFirstName("xxxx");

Login login = DatabaseFactory.INSTANCE.createLogin();
login.setPassword("12345678");

newUser.getPasswords().add(login);

resource.getContents().add(newUser);

Чтобы получить User внутри этой модели:

User user = (User) resource.eContents().get(0);

(Это всего лишь пример, конечно, get(0) рискованно.)

0 голосов
/ 18 октября 2018

public Object execute (событие ExecutionEvent) выбрасывает ExecutionException {IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked (event);ISelection selection = window.getSelectionService (). GetSelection ("org.eclipse.jdt.ui.PackageExplorer");MessageDialog.openInformation (window.getShell (), «Test», selection.toString ());

                TreeSelection treeSelection = (TreeSelection) selection;
                TreePath[] treePaths = treeSelection.getPaths();
                TreePath treePath = treePaths[0];
                Object lastSegmentObj = treePath.getLastSegment();
                IFile file = (IFile) ((IAdaptable) lastSegmentObj).getAdapter(IFile.class);
                String path = file.getRawLocationURI().toString(); 
                URI uri = URI.createURI(path);

                User imodesene = UserFactory.eINSTANCE.createModesene();
                    imodesene.eAdapters().add(new EContentAdapter() {
                            @Override
                            public void notifyChanged(Notification notification) {
                                super.notifyChanged(notification);
                            }   
                        });

                ResourceSet resourceSet = new ResourceSetImpl();
                Resource resource = resourceSet.getResource(uri, true);
                imodesene = (User) resource.getContents().get(0);

                MessageDialog.openInformation(window.getShell(),"Test", "Load --- Name :"+imodesene.getName()+"\n");

                List<String> NetworkNodes = new ArrayList<>();
                EList<Network> listeNetwork = imodesene.getNetworkFacet().getNetwork();
                for (int it = 0; it < listeNetwork.size(); it++) {
                    EList<Node> listeNode = listeNetwork.get(it).getNodes();
                    for (int itt = 0; itt < listeNode.size(); itt++) {
                        NetworkNodes.add(listeNode.get(itt).getId());
                        }
                    }


                EList<PhysicalEnvironment> listeEnv = imodesene.getPhysicalEnvFacet().getPhysicalEnv();
                for (int it = 0; it < listeEnv.size(); it++) {
                    for (int itt = 0; itt < NetworkNodes.size(); itt++) {
                        NodeInstance nodeInstance = ModeseneFactory.eINSTANCE.createNodeInstance();
                        nodeInstance.setID(NetworkNodes.get(itt));
                        listeEnv.get(it).getZones().get(0).getNodes().add(nodeInstance);

                        }
                    }




            try {
                resource.save(null);
            } catch (IOException e) {
                e.printStackTrace();
            }

            MessageDialog.openInformation(window.getShell(),"Test", "--- END ---");


    return null;
}

}

...