Bonjour les Lutins,

Sire, on en a gros....

Posons le contexte :
Le diagramme suivant représente le coeur de notre application tel que Florian nous a aider a le faire. On s’interessera particulierement a la relation Workstation -> Flow.

http://www.nomaka.fr/img/UML_Avant.png

Nous avons donc un contenant "Workstation" qui contient un contenu "Flow"

Notre premier code de création de Flow dans une Workstation est le suivant.

    WorkstationDAO ws_dao=EasyFlowDAOHelper.getWorkstationDAO(transaction);
           context.prepareTopiaId(Workstation.class, pWorkstation);
    FlowDAO flow_dao=EasyFlowDAOHelper.getFlowDAO(transaction);
           Flow newFlow = flow_dao.create(
                   ,Flow.PROPERTY_BEGIN, pDate
                   ,Flow.PROPERTY_RATIO,1);
    workstation.addFlow(newFlow); // Nous considerions que le Flow etait lie a la workstation ici
    ws_dao.update(pWorkstation);
           transaction.commitTransaction();

Nous nous assurions que les donnees etaient bien presentes par le chargement de la workstation par son nom puis du Flow par son TopiaID.

Seulement lorsque nous avons voulu charger une workstation et tout les flows qui lui sont lies il n’y avait aucun flow associes a la workstation.
Voici la requete TopiaQuery qui nous permet de recuperer la workstation et ses Flows :

    WorkstationDAO wsDAO = EasyFlowDAOHelper.getWorkstationDAO(transaction);
       TopiaQuery wsQuery = wsDAO.createQuery("W");
       wsQuery.addEquals(Workstation.PROPERTY_NAME,wsName);
       wsQuery.addLoad(Workstation.PROPERTY_FLOW);
       Workstation workstation = wsDAO.findByQuery(wsQuery);

Nous avons alors remis en cause le diagramme precedent et nous avons modifie la liaison Workstation / Flow comme sur le diagramme suivant :

http://www.nomaka.fr/img/UML_Apres.png

ce qui nous donne une nouvelle fonction de creation du flow comme suit :

    WorkstationDAO ws_dao=EasyFlowDAOHelper.getWorkstationDAO(transaction);
           context.prepareTopiaId(Workstation.class, pWorkstation);
    FlowDAO flow_dao=EasyFlowDAOHelper.getFlowDAO(transaction);
           Flow newFlow = flow_dao.create(
                   Flow.PROPERTY_WORKSTATION,pWorkstation // ici on se dit que cette fois, nous avons bien la relation....
                   ,Flow.PROPERTY_BEGIN, pDate
                   ,Flow.PROPERTY_RATIO,1);
    pWorkstation.addFlow(newFlow);
    ws_dao.update(pWorkstation);
           transaction.commitTransaction();

Nous utilisons la meme methode de chargement qui ne nous renvoie toujours pas ce qu’il nous faut...

La requete que nous avons reelement besoin est plus restrictive et utilise un fetch mais ne recupere  pas non plus le flow (logique en fait) :
    WorkstationDAO wsDAO = EasyFlowDAOHelper.getWorkstationDAO(transaction);
       TopiaQuery wsQuery = wsDAO.createQuery("W");
       wsQuery.addEquals(Workstation.PROPERTY_NAME,wsName);
    wsQuery.addFrom(Flow.class,"F");
       wsQuery.addLeftJoin("W."+Workstation.PROPERTY_FLOW, null, true);
       wsQuery.addWhere("F."+Flow.PROPERTY_END+" IS NULL");
    Workstation workstation = wsDAO.findByQuery(wsQuery);

Nous pensons que nous avons un probleme avec nos relations dans notre diagramme UML mais nous ne voyons pas ce qui ne vas pas...
Si c’est un probleme de code, nous ne voyons pas non plus...

Quelqu’un aurait une idee ?

Julien & Guillaume
Nomaka