Re: [Eugene-devel] [Lutingenerator-devel] attributs - relation
Romain Manni-Bucau a écrit :
bonjour,
Bonjour, Pourriez vous utilisé la liste eugene-devel@list.nuiton.org à la place de celle ci svp ? Le projet lutingenerator et été renommé en eugene et a changé de forge et de liste de diffusion.
j'ai des soucis avec la réécriture de "chercheurs de champs et de relations". En effet je n'arrive pas à savoir exactement dans quel "sens" prendre les attributs-relations.
En particulier en recherchant les relation 1-*.
Je fait ça mais des fois il me renvoie true pour des relation *-1 : public boolean isAccepted(ObjectModelAttribute t) { ObjectModelAttribute reverse = t.getReverseAttribute(); return !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1; }
Effectivement, c'est pas très évident à debugguer. Utiliser vous un system de logger (commons-logging) ou un System.out.println() pour afficher des traces d'execution. Par exemple : public boolean isAccepted(ObjectModelAttribute t) { ObjectModelAttribute reverse = t.getReverseAttribute(); boolean accepted = !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1; log.debug("Test isAccepted for attribute " + t.getName()); log.debug(" reverse is " + reverse.getName()); log.debug(" isAccepted is " + accepted); return accepted; } Pourriez vous le faire tourner et nous faire parvenir votre fichier objectmodel. Éventuellement est les résultats obtenus et ceux attendus...
Ce test intervient dans la boucle suivante : for(ObjectModelAttribute a : clazz.getAttributes()) { ObjectModelAttribute reverse = a.getReverseAttribute(); if (a.isNavigable() && a.referenceClassifier() && reverse != null && Util.isEntity(a.getClassifier()) && Util.isEntity(reverse.getClassifier()) && p.isAccepted(a) ) { if (Util.debug()) System.out.println(clazz.getName() + " -> " + a.getClassifier().getName());
Relation r = new Relation(getType(reverse), Util.getRelationTitle(a), (ObjectModelClass) a.getClassifier(), null); for(Field f : new FieldSearcher((ObjectModelClass)a.getClassifier(), true).getTreePk()) r.addKeyMap(new KeyMap(Util.lineNumber()+FieldSearcher.getFieldName(r.getRelEntity(), f.getAttribute(), true), f.getName())); rel.add(r); } }
Je mets en pièce jointe mes "searcher"s.
Merci de votre aide.
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Désolé pour la liste. je joins mes objectmodels (je génère manufacturing mais il est lié à d'autres). Par contre la sortie boucle : [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ReturnItem -> ReturnHeader [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned cette sortie vient de getRelations() : private List<Relation> getRelations(Predicate<ObjectModelAttribute> p) { ... for(ObjectModelAttribute a : clazz.getAttributes()) { ObjectModelAttribute reverse = a.getReverseAttribute(); if (a.isNavigable() && a.referenceClassifier() && reverse != null && Util.isEntity(a.getClassifier()) && Util.isEntity(reverse.getClassifier()) && p.isAccepted(a) // a one level recursive relation && ! a.getClassifier().getName().equals(clazz.getName())) { if (Util.debug()) System.out.println(clazz.getName() + " -> " + a.getClassifier().getName()); ...blabla } return rel; } Le mercredi 19 août 2009 à 17:35 +0200, Eric Chatellier a écrit :
Romain Manni-Bucau a écrit :
bonjour,
Bonjour,
Pourriez vous utilisé la liste eugene-devel@list.nuiton.org à la place de celle ci svp ? Le projet lutingenerator et été renommé en eugene et a changé de forge et de liste de diffusion.
j'ai des soucis avec la réécriture de "chercheurs de champs et de relations". En effet je n'arrive pas à savoir exactement dans quel "sens" prendre les attributs-relations.
En particulier en recherchant les relation 1-*.
Je fait ça mais des fois il me renvoie true pour des relation *-1 : public boolean isAccepted(ObjectModelAttribute t) { ObjectModelAttribute reverse = t.getReverseAttribute(); return !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1; }
Effectivement, c'est pas très évident à debugguer. Utiliser vous un system de logger (commons-logging) ou un System.out.println() pour afficher des traces d'execution.
Par exemple :
public boolean isAccepted(ObjectModelAttribute t) {
ObjectModelAttribute reverse = t.getReverseAttribute(); boolean accepted = !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1;
log.debug("Test isAccepted for attribute " + t.getName()); log.debug(" reverse is " + reverse.getName()); log.debug(" isAccepted is " + accepted);
return accepted; }
Pourriez vous le faire tourner et nous faire parvenir votre fichier objectmodel. Éventuellement est les résultats obtenus et ceux attendus...
Ce test intervient dans la boucle suivante : for(ObjectModelAttribute a : clazz.getAttributes()) { ObjectModelAttribute reverse = a.getReverseAttribute(); if (a.isNavigable() && a.referenceClassifier() && reverse != null && Util.isEntity(a.getClassifier()) && Util.isEntity(reverse.getClassifier()) && p.isAccepted(a) ) { if (Util.debug()) System.out.println(clazz.getName() + " -> " + a.getClassifier().getName());
Relation r = new Relation(getType(reverse), Util.getRelationTitle(a), (ObjectModelClass) a.getClassifier(), null); for(Field f : new FieldSearcher((ObjectModelClass)a.getClassifier(), true).getTreePk()) r.addKeyMap(new KeyMap(Util.lineNumber()+FieldSearcher.getFieldName(r.getRelEntity(), f.getAttribute(), true), f.getName())); rel.add(r); } }
Je mets en pièce jointe mes "searcher"s.
Merci de votre aide.
Romain Manni-Bucau a écrit :
Désolé pour la liste. je joins mes objectmodels (je génère manufacturing mais il est lié à d'autres). Auriez vous le manufacturing.objectmodel correspondant ? Par contre la sortie boucle : [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ReturnItem -> ReturnHeader [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned
cette sortie vient de getRelations() :
private List<Relation> getRelations(Predicate<ObjectModelAttribute> p) { ...
for(ObjectModelAttribute a : clazz.getAttributes()) { ObjectModelAttribute reverse = a.getReverseAttribute(); if (a.isNavigable() && a.referenceClassifier() && reverse != null && Util.isEntity(a.getClassifier()) && Util.isEntity(reverse.getClassifier()) && p.isAccepted(a) // a one level recursive relation && ! a.getClassifier().getName().equals(clazz.getName())) { if (Util.debug()) System.out.println(clazz.getName() + " -> " + a.getClassifier().getName()); ...blabla }
return rel; }
Ok, par contre, c'est plutôt la sortie de la méthode qui ne fonctionne pas qui m'intéresse. Celle ci :
Effectivement, c'est pas très évident à debugguer. Utiliser vous un system de logger (commons-logging) ou un System.out.println() pour afficher des traces d'execution.
Par exemple :
public boolean isAccepted(ObjectModelAttribute t) {
ObjectModelAttribute reverse = t.getReverseAttribute(); boolean accepted = !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1;
log.debug("Test isAccepted for attribute " + t.getName()); log.debug(" reverse is " + reverse.getName()); log.debug(" isAccepted is " + accepted);
return accepted; }
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Le mercredi 19 août 2009 17:58:28, Eric Chatellier a écrit :
Romain Manni-Bucau a écrit :
Désolé pour la liste. je joins mes objectmodels (je génère manufacturing mais il est lié à d'autres).
Auriez vous le manufacturing.objectmodel correspondant ?
désolé j'ai pris les xmi :s
Par contre la sortie boucle : [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ReturnItem -> ReturnHeader [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned
cette sortie vient de getRelations() :
private List<Relation> getRelations(Predicate<ObjectModelAttribute> p) { ...
for(ObjectModelAttribute a : clazz.getAttributes()) { ObjectModelAttribute reverse = a.getReverseAttribute(); if (a.isNavigable() && a.referenceClassifier() && reverse != null && Util.isEntity(a.getClassifier()) && Util.isEntity(reverse.getClassifier()) && p.isAccepted(a) // a one level recursive relation && ! a.getClassifier().getName().equals(clazz.getName())) { if (Util.debug()) System.out.println(clazz.getName() + " -> " + a.getClassifier().getName()); ...blabla }
return rel; }
Ok, par contre, c'est plutôt la sortie de la méthode qui ne fonctionne pas qui m'intéresse.
Celle ci :
Effectivement, c'est pas très évident à debugguer. Utiliser vous un system de logger (commons-logging) ou un System.out.println() pour afficher des traces d'execution.
Par exemple :
public boolean isAccepted(ObjectModelAttribute t) {
ObjectModelAttribute reverse = t.getReverseAttribute(); boolean accepted = !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1;
log.debug("Test isAccepted for attribute " + t.getName()); log.debug(" reverse is " + reverse.getName()); log.debug(" isAccepted is " + accepted);
return accepted; }
j'affiche : System.out.println(t.getName() + " " + reverse.getName() + " " +(!reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1)); dans isAccepted() et j'obtiens ce qu'il y a dans out (j'ai bien sûr arrété la génération ;)). -- Manni-Bucau Romain
J'obtiens finalement une version qui à l'air de marcher mais je suis surpris de cette partie de code : public List<Relation> getAggregations() { return getRelations(new Predicate<ObjectModelAttribute>() { @Override public boolean isAccepted(ObjectModelAttribute t) { ObjectModelAttribute reverse = t.getReverseAttribute(); return reverse.isAggregate(); } }); } public List<Relation> getRelationOne() { return getRelations(new Predicate<ObjectModelAttribute>() { @Override public boolean isAccepted(ObjectModelAttribute t) { ObjectModelAttribute reverse = t.getReverseAttribute(); return !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && t.getMaxMultiplicity() == 1; } }); } pour les aggrégations/composition je teste le reverse attribute et pour les autres relations je teste l'attribut lui-même, c'est normal ? Le mercredi 19 août 2009 18:08:00, Manni-Bucau Romain (Néréide) a écrit :
Le mercredi 19 août 2009 17:58:28, Eric Chatellier a écrit :
Romain Manni-Bucau a écrit :
Désolé pour la liste. je joins mes objectmodels (je génère manufacturing mais il est lié à d'autres).
Auriez vous le manufacturing.objectmodel correspondant ?
désolé j'ai pris les xmi :s
Par contre la sortie boucle : [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] ReturnItem -> ReturnHeader [generator] ReturnItem -> ShipmentItem [generator] ShipmentItem -> Shipment [generator] ShipmentItem -> ShipmentStockItem [generator] StockItem -> StockEvent [generator] StockItem -> FacilityStockEvent [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] StockItem -> StockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned [generator] FacilityStockEvent -> FacilityStockEventPlanned
cette sortie vient de getRelations() :
private List<Relation> getRelations(Predicate<ObjectModelAttribute> p) { ...
for(ObjectModelAttribute a : clazz.getAttributes()) { ObjectModelAttribute reverse = a.getReverseAttribute(); if (a.isNavigable() && a.referenceClassifier() && reverse != null && Util.isEntity(a.getClassifier()) && Util.isEntity(reverse.getClassifier()) && p.isAccepted(a) // a one level recursive relation && ! a.getClassifier().getName().equals(clazz.getName())) { if (Util.debug()) System.out.println(clazz.getName() + " -> " + a.getClassifier().getName()); ...blabla }
return rel; }
Ok, par contre, c'est plutôt la sortie de la méthode qui ne fonctionne pas qui m'intéresse.
Celle ci :
Effectivement, c'est pas très évident à debugguer. Utiliser vous un system de logger (commons-logging) ou un System.out.println() pour afficher des traces d'execution.
Par exemple :
public boolean isAccepted(ObjectModelAttribute t) {
ObjectModelAttribute reverse = t.getReverseAttribute(); boolean accepted = !reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1;
log.debug("Test isAccepted for attribute " + t.getName()); log.debug(" reverse is " + reverse.getName()); log.debug(" isAccepted is " + accepted);
return accepted; }
j'affiche : System.out.println(t.getName() + " " + reverse.getName() + " " +(!reverse.isAggregate() && !reverse.isComposite() && !t.isAggregate() && !t.isComposite() && reverse.getMaxMultiplicity() == 1));
dans isAccepted() et j'obtiens ce qu'il y a dans out (j'ai bien sûr arrété la génération ;)).
-- Manni-Bucau Romain
participants (3)
-
Eric Chatellier -
Manni-Bucau Romain (Néréide) -
Romain Manni-Bucau