2017-04-18 4 views
0

J'ai utilisé EMF pendant trois semaines. J'ai déjà créé mon méta-modèle et une instance en utilisant l'application Eclipse en cours d'exécution. Maintenant, mon problème est que j'ai plusieurs fichiers XMI enregistrés par l'instance en cours d'exécution d'Eclipse et je veux les analyser afin de créer un autre fichier texte traitant les données dans les fichiers xmi. Pour ce faire, j'utilise l'API XMIResource de EMF et lorsque je charge un fichier sans références croisées vers d'autres documents xmi, tout se passe bien. Toutefois, lorsque je charge un document xmi avec des références croisées à d'autres documents xmi, toutes les références croisées ne sont pas enregistrées correctement dans mon modèle Java.Chargement de plusieurs fichiers xmi avec EMF

J'ai utilisé ce morceau de code pour charger les fichiers XMI:

XMIResource resourceInTy = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/instancesTypes.model")); 
    resourceInTy.load(null); 
    Environment env1 = (Environment) resourceInTy.getContents().get(0); 

    XMIResource resourceContRel = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/ContextRelations.model")); 
    resourceContRel.load(null); 
    Environment env2 = (Environment) resourceContRel.getContents().get(0); 

    env.setTypes(env1.getTypes()); 
    env.setInstances(env1.getInstances()); 
    env.setContextRelations(env2.getContextRelations()); 

Comme vous pouvez le voir l'objet « Environnement » est mon objet racine de toutes les méta-modèle qui devrait contenir tous les objets Elist correctement définir après avoir analysé les fichiers xmi.

Le problème ici est qu'à l'intérieur de EList "ContextRelations" il devrait y avoir une référence à un autre objet appelé "Parameter" qui a une référence à l'objet Type. Si j'essaie de récupérer, une référence nulle sort! Je profondément recherché pour une autre question au sujet de ce problème, mais le plus proche, j'ai trouvé était un non-répondu à la question disponible sur ce lien: Loading Multiple files using EMF resource load?

Ici, il y a deux fichiers XMI: ContextRelations.model

<parameters number="5"> 
    <type href="instancesTypes.model#//@types.0"/> 
</parameters> 
<parameters number="6"> 
    <type href="instancesTypes.model#//@types.4"/> 
</parameters> 
<contextRelations name="in"parameters="//@parameters.0//@parameters.1"> 
    <initialComplexEvent href="Events.model#//@events.0"/> 
    <endingComplexEvent href="Events.model#//@events.1"/> 
</contextRelations> 

InstancesTypes.model

<types name="Emp"/> 
<types name="Cam"/> 
<types name="Comp"/> 
<types name="Fi"/> 
<types name="Loc"/> 
<types name="St"/> 
<types name="Read"/> 
<instances name="Alice" type="//@types.0"/> 
<instances name="r01" type="//@types.4"/> 
<instances name="Bob" type="//@types.0"/> 
<instances name="cctv1" type="//@types.1"/> 
<instances name="doc" type="//@types.3"/> 
<instances name="m1" type="//@types.2"/> 
<instances name="m2" type="//@types.2"/> 
<instances name="m3" type="//@types.2"/> 
<instances name="nfc01" type="//@types.6"/> 
<instances name="usb1" type="//@types.5"/> 

question secondaire:

Comme vous pouvez le voir, j'utilise trois objets racine: env1 et env2 sont utilisés comme variables temporaires qui placent leur contenu dans l'objet racine principal (env). Je fais cela parce que je ne sais pas comment analyser tous les fichiers xmi simultanément en créant un seul objet racine.

Quelqu'un peut-il m'aider s'il vous plaît?

Répondre