IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Platform Discussion :

[EMF] Mise à jour de containment au travers de références


Sujet :

Eclipse Platform

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 132
    Points : 89
    Points
    89
    Par défaut [EMF] Mise à jour de containment au travers de références
    Bonjour,

    j'ai un problème de compréhension sur un point précis d'EMF.
    Voici le scénario:
    - j'ai une classe DataClasse métier,
    - j'ai une classe Container qui "contient" des attributs de type DataClasse avec l'attribut emf containment = true,
    - j'ai une classe ReferenceContainment qui contient des attributs de type DataClasse avec l'attribut emf containment = false (on va donc "pointer" vers les objets de la classe Container.

    Si je veux setter un membre de ReferenceContainment, le membre référencé ne s'update pas.
    Par exemple, je crée au moyen de la factory de mon modèle une nouvelle instance de DataClasse et que je passe par la méthode Set de ReferenceContainment, ma classe Container n'est pas impactée, comme si l'attribut "Containment" était en fait ephemère ...

    Quelle est la bonne manière de voir les choses ?

    Merci, alt3.

  2. #2
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 132
    Points : 89
    Points
    89
    Par défaut
    J'ai une réponse. Cela dit, j'aimerais avoir des remarques quant l'aspect judicieux de la chose.

    Je me suis inspiré de DeleteCommand pour récupérer toutes les références d'un objet pour updater ensuite l'objet source ainsi que ses références. Ainsi, tout est préservé et cohérent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        public static void updateObject(EObject source, EObject newValue) {
            // Search for all references to this object
            EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(source);
     
            Collection<EObject> eObjects = new LinkedHashSet<EObject>();
            eObjects.add(source);
            for (Iterator<EObject> j = (source).eAllContents(); j.hasNext(); )
            {
              eObjects.add(j.next());
            }
     
            Map<EObject, Collection<EStructuralFeature.Setting>> usages = EcoreUtil.UsageCrossReferencer.findAll(eObjects, editingDomain.getResourceSet());
     
            // Browse all references in order to update the object
            for (Iterator<EStructuralFeature.Setting> ite = usages.get(source).iterator(); ite.hasNext();) {
                EStructuralFeature.Setting setting = ite.next();
     
                EcoreUtil.replace(setting, setting.getEObject(), newValue);
            }
     
            EcoreUtil.replace(source, newValue);
        }

Discussions similaires

  1. Mise à jour d'un JLabel à travers un bouton
    Par Faty86 dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 31/03/2010, 15h52
  2. Réponses: 1
    Dernier message: 20/08/2009, 11h32
  3. Réponses: 6
    Dernier message: 19/06/2009, 17h20
  4. Mise à jour d'une valeur à travers toute les tables
    Par fisio dans le forum Modélisation
    Réponses: 13
    Dernier message: 31/03/2009, 08h50
  5. mise à jour à travers DBgrid
    Par linda80 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/08/2007, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo