User Tools

Site Tools


wiki:epims3_3:developer:ep-web

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
wiki:epims3_3:developer:ep-web [2008/03/04 17:00]
dupierris
wiki:epims3_3:developer:ep-web [2008/10/06 09:49] (current)
barthe
Line 10: Line 10:
  
     * Les JSP/JSF sont utilisés pour la partie présentation.     * Les JSP/JSF sont utilisés pour la partie présentation.
-    ​* Au niveau de la logique applicative on utilise le framework Spring qui est un conteneur léger et qui permet, d’une part, d’isoler les différentes technologies utilisées et ainsi de faciliter la substitution d’une implémentation par une autre. Et, d’autre part, Spring prend en charge la partie transactionnelle de O/RM.+     * Au niveau de la logique applicative on utilise le framework Spring qui est un conteneur léger et qui permet, d’une part, d’isoler les différentes technologies utilisées et ainsi de faciliter la substitution d’une implémentation par une autre. Et, d’autre part, Spring prend en charge la partie transactionnelle de O/RM.
     * Hibernate a été choisi pour la partie O/R Mapping. Ce framework a, entre autres, ​ l’avantage de s’interconnecter facilement avec Spring.     * Hibernate a été choisi pour la partie O/R Mapping. Ce framework a, entre autres, ​ l’avantage de s’interconnecter facilement avec Spring.
  
Line 105: Line 105:
 === Contrôle === === Contrôle ===
 Cette partie concerne tous les fichiers de configuration qui permettent : la configuration des Backing Bean (faces-managed-bean.xml),​ des navigations des pages JSP (faces-navigation.xml),​ configurations Spring (springAppContext.xml,​ springDataSource.xml) ainsi que des components utilisés dans l'​application. Cette partie concerne tous les fichiers de configuration qui permettent : la configuration des Backing Bean (faces-managed-bean.xml),​ des navigations des pages JSP (faces-navigation.xml),​ configurations Spring (springAppContext.xml,​ springDataSource.xml) ainsi que des components utilisés dans l'​application.
 +
  
  
 ===== Règles Développement ===== ===== Règles Développement =====
 Nous allons lister ici quelques règles de développement que nous utilisons (elles ne sont peut etre pas optimales !)  afin, d'une part d'​aider à la lecture du code et d'​autre part de permettre une certaine homogénisation du code développé par plusieurs personnnes.... Nous allons lister ici quelques règles de développement que nous utilisons (elles ne sont peut etre pas optimales !)  afin, d'une part d'​aider à la lecture du code et d'​autre part de permettre une certaine homogénisation du code développé par plusieurs personnnes....
 +
 Dans le code JAVA Dans le code JAVA
  
Line 122: Line 124:
           * getSampleNamePatterns() : Liste des patterns autorisés pour les sampleName : Pas utilisé à bcp d'​endroit mais propriétés constantes....           * getSampleNamePatterns() : Liste des patterns autorisés pour les sampleName : Pas utilisé à bcp d'​endroit mais propriétés constantes....
           * getAcquisitionProcessType : permet de faire des tests dans les pages...           * getAcquisitionProcessType : permet de faire des tests dans les pages...
 +
  
 Dans les pages JSF Dans les pages JSF
Line 158: Line 161:
  
 Il est bien entendu nécessaire d’avoir spécifié le bean ParamConstant de type ParameterNames dans le fichier //​faces-managed-bean.xml//​. Il est bien entendu nécessaire d’avoir spécifié le bean ParamConstant de type ParameterNames dans le fichier //​faces-managed-bean.xml//​.
 +
 +===== Utilisation d'​eP-Core =====
 +==== Spring ====
 +Rien de spécifique à faire, mais pour info:
 +
 +Aucune configuration supplémentaire à celle défini dans ePCore n'est nécessaire. Par conséquent,​ une fichier "​vide"​ de configuration de Spring est créé dans  ./​WebRoot/​WEB-INF/​ et l'on définit un ApplicationContext spring dans web.xml ayant l'​ApplicationContext d'​eP-Core comme context parent.:
 +   <​context-param>​
 +      <​param-name>​locatorFactorySelector</​param-name>​
 +      <​param-value>​classpath*:​springContext.xml</​param-value> ​        
 +   </​context-param>​
 +    ​
 +   <​context-param>​
 +     <​param-name>​parentContextKey</​param-name>​
 +     <​param-value>​epCore.context</​param-value> ​        
 +   </​context-param>​
 +  <​listener>​
 +     <​listener-class>​org.springframework.web.context.ContextLoaderListener</​listener-class>​
 +   </​listener>​
 +
 +Tous les objets qui doivent faire appel aux services de eP-Core doivent donc récupérer l'​ApplicationContext afin d’instancier le ServiceLocator. Les super-classes BaseBean et BaseConvertor,​ dont héritent tous les backing beans et convertor, instancient un ServiceLocator :
 +
 +   ​ServletContext context = FacesUtils.getServletContext();​
 +   ​serviceLocator_ = new  ServiceLocator(WebApplicationContextUtils.getRequiredWebApplicationContext(context)); ​
 +
 +==== JSF ====
 +
 +Tout comme des fichiers de configuration sont nécessaires pour Spring, il existe des fichiers de configuration propre à JSF dans  ./​WebRoot/​WEB-INF :
 +
 +    * faces-config.xml : contient la définition des Convertor/​Validator utilisés, et des définitions spécifiques à JSF.
 +    * faces-navigation.xml : contient les règles de navigations utilisées. Dans JSF la navigation depuis un lien ou un backing bean se fait par des mots clés qui, au niveau du fichier, correspondent à de nouvelles pages jsf.
 +    * faces-managed-beans.xml : définition des backing beans utilisés par JSF.
 +
 +Une description sommaire est donnée ici, pour plus d’information se référer à la documentation de JSF.
 +
 +===== Questions diverses autour des JSP / JSF =====
 +==== Différence entre les tag jsp:​redirect et jsp:foward ====
 +
 +//Foward// : Transfert la requête à la page spécifiée. La requête sera visible de la page destination éventuellement augmentée de nouveaux paramètres spécifiés dans le tag forward. ​
 +//​Redirect//​ : C’est la réponse au client qui indique la nouvelle URL (comme http redirect), le client réclame donc la nouvelle URL, sans info de la requête précédente.
 +
 +Plus précisément : 
 +
 +« When a Servlet or a JSP resource chooses to redirect the client using response.sendRedirect(url),​ the request object does not reach the second resource directly since the underlying implementation is an HTTP redirect. The server sends an HTTP 302 messages back to the client telling it that the resource has been moved to another url and that the client should access it there.
 +
 +In forward mechanism, the request object is forwarded to the second resource, thus maintaining any object binding to the request and its state, without a round trip to the client on the network. ​ »
 + 
 +  * <​jsp:​forward page="​web/​welcome.jsp"​ />
 +
 +      Tells the servlet runner to start executing a different servlet. Something like a "go to" done in the server.
 +      Browser ​                        ​Server
 +      ​
 +      Request page A
 +                                        Execute page A code
 +                                        Forward to page B
 +                                        Execute page B code
 +                                        Return page B response
 +
 +
 +  * response.sendRedirect("​web/​welcome.jsp"​);​
 +
 +     ​Return to the client browser a special tag, telling the browser to immediatly load the page described as a parameter.
 +     ​Browser ​                        ​Server
 +      ​
 +     ​Request page A
 +                                        Execute page A code
 +                                        Return redirect command
 +     ​Receive redirect
 +     ​Request page B
 +                                        Execute page B code
 +                                        Return page B response
 +
 +**__Remarque__** : Si on utilise <​jsp:​forward …> pour accéder à une page d’une zone protégée par mot de passe, aucun mot de passe n’est demandé !!!!!!!!! Dans ce cas, il est préférable d’utiliser redirect. ​
 +
 +===== Modification de la page d'​accueil =====
 +==== Changement des références aux labo : ====
 +    *  Dans WebRoot/​index.jsp : modification du nom du laboratoire directement dans le fichier
 +    * Dans le fichier src/​cea/​edyp/​epims/​view/​util/​messages.properties modifier le paramètre "​accueil_quid_pims_labo"​
 +
 +==== Changement de l'​adresse mail du webmaster : ====
 +    *  Dans le fichier src/​cea/​edyp/​epims/​view/​util/​messages.properties modifier le paramètre "​login_pb_mail"​
 +
 +===== Archivage =====
 +
 +
 +==== Pages JSF ====
 +La page JSF permettant l’archivage n’est accessible qu’aux administrateurs. Cette page est couplée à un backing bean, ArchiveBean,​ permettant d’accéder aux informations utiles et de lancer les actions d'​archivage. ​
 +
 +Les informations sont :
 +
 +    * La liste des études archivables et pour chacune d’entre elles la taille des données associées.
 +    * La liste des groupes de contrôles ‘archivable’ – en l’occurrence tous les groupes non encore archivés. De même, la taille de ces groupes doit être connue.
 +    * L’état d’avancement (en cours, terminé) et le statut (OK, ERROR) des archivages.
 +
 +----
 +**__ATTENTION__** : Dans l’implémentation choisie, il n’existe pas à proprement parlé d’entité représentant un groupe de contrôles. Par conséquent,​ il n’est pas possible de savoir si un groupe (du point de vue eP-Web) est archivé ou non.
 +
 +**__Solution__** : Les différents groupes étant organisés par date, si un groupe datant de x mois est vide on peut supposer qu’il a été archivé. On peut également, se contenter de dire que l’on ne liste que les groupes non vides, sans se préoccuper de savoir si il a été archivé ou non.
 +----
 +
 +A partir de ces listes, l’administrateur sélectionne certains des éléments (études et/ou groupes de contrôles) et demande à les archiver. Il est également possible depuis cette page de connaître l’état d’avancement de l’archivage. En effet, lorsque l’administrateur demande l’archivage,​ celui-ci est lancé mais l’application n’attend pas la fin de l’opération pour rendre la main à l’utilisateur.
 +
 +Les parties Historique et Archivage sont organisées en onglets, ainsi l’utilisateur peut se concentrer sur la partie qui l’intéresse.
 +
 +Depuis l’onglet Archivage, l’administrateur sélectionne les données à archiver et lance l'​archivage.
 +
 +{{ epw_onglet_archivage.png }}
 +** Figure 2 Onglet Archivage ** 
 +
 +L’onglet Historique contient d’une part la liste des archivages en cours et, d’autre part, la liste de tous les archivages déjà réalisés depuis le lancement du serveur. Le statut des archivages est également indiqué.
 +
 +{{ epw_onglet_historique.png }}
 +** Figure3 Onglet Historique ** 
 +
 +
 +==== Backing Bean ====
 +C’est le même backing bean qui est utilisé pour l’accès aux informations concernant la liste des données à archiver et pour accéder aux informations concernant l’état des opérations d’archivage.
 +
 +Le backing bean gère donc, d’une part, les deux types de données, ArchivableAcquisition et ArchivableStudy,​ qui représentent respectivement les groupes de contrôles archivables et les études archivables et, d’autre part, les objets ArchiveOperation qui représentent les opération d’archivages.
 +
 +Pour les objets ArchivableAcquisition et ArchivableStudy,​ un état selected est défini et  il est possible de connaître la taille des données associées.
 +
 +ArchivableStudy se contente d’encapsuler une Study. Ainsi, lors de l’archivage proprement dit, il suffira de déterminer l’ensemble des études sélectionnées et de faire appel aux services adéquats définis dans PitBuL.
 +
 +ArchivableAcquisition représente un ensemble de toutes les acquisitions de même type ayant été réalisés le même mois sur le même instrument. Afin de ne pas parcourir toutes les acquisitions et de rechercher celles n’étant pas encore archivées puis de les regrouper, chaque instance de ArchivableAcquisition est créé en fonction des acquisitions trouvées sur le SAN. Ainsi un objet ArchivableAcquisition représente un répertoire contenant un ensemble d’acquisitions. Néanmoins, lors de la recherche de ces répertoires,​ on connaît les caractéristique du groupe correspondant (type, date, instrument). Ces informations peuvent être sauvegardées au niveau de ArchivableAcquisition ​ et lors de l’archivage,​ il sera plus facile de déterminer quels acquisitions sont à archiver.
 +
 +Les objets ArchiveOperation qui représente une opération d’archivage,​ sont définis par un identifiant,​ un statut et éventuellement une date de fin. Le statut peut être soit en cour, si l’opération d’archivage est toujours en cours, soit OK, si l’opération d’archivage s’est correctement terminé, soit invalide, si l’opération d’archivage s’est terminé sur une erreur. Le dernier état est en réalité plus complet, puisque l’objet ArchiveOperation ​ retourne invalide seulement si il n’a pas pu déterminer la raison de l’erreur, sinon il retourne un message décrivant l’erreur qui est survenue.
 +
 +===== Etats de sortie =====
 +==== Pages JSF ====
 +=== Page d’accueil ===
 +La page JSF permettant d’accéder aux états de sortie est accessible à tous les utilisateurs sauf un des exports proposés (Volumétrie par Personne) n'est accéssible que pour les administrateurs. Cette page est couplée à deux backing bean, ExportTextualBean et ExportGraphicalBean,​ permettant de lancer les actions afin d’accéder aux différentes volumétries.
 +
 +{{ epw_etat_sorties.png }}
 +Chacun des liens de la page donne accès à d’autres pages JSF correspondant chacune au type de volumétrie choisi. Cette navigation est spécifiée dans le fichier de configuration faces_navigation.xml.
 +
 +=== Volumétrie par Programmes/​Projets/​Etudes ===
 +La page JSF donnant accès à cette volumétrie,​ state_context_volumetry.jsp,​ est aussi couplée au backing bean ExportTextualBean permettant d’accéder aux informations utiles et de lancer l’export.
 +
 +Informations utiles :
 +
 +    * Données à considérer : Programmes / projets / études ou  Programmes / projets
 +    * Liste des formats du fichier d’export proposés: XLS, HTML, PDF
 +    * Date de début et fin de la période de temps sur laquelle faire l'​export.
 +
 +A partir de cette page, l’utilisateur sélectionne le type d’export ainsi que le format du fichier qu’il voudrait obtenir, et de spécifier, si il le souhaite, la période de temps (en donnant la date de début et de fin) durant laquelle les données l’intéressent.
 +
 +=== Volumétrie par Instrument, Volumétrie par Nature d’Acquisition ===
 +Les pages JSF donnant accès à ces deux types de volumétrie sont state_graphical_intr_volumetry.jsp et state_graphical_nature_volumetry.jsp. ​   Ces pages sont respectivements couplées aux backing beans ExportGraphicalInstrumentBean et ExportGraphicalNatureBean. Ces deux beans dérivent de ExportGraphicalBean
 +
 +A partir de ces pages, l’utilisateur peut, selon le type de volumétrie,​ :
 +
 +- sélectionner le/les instruments sur lesquels il souhaite des volumétries ;
 +
 +- sélectionner la/les natures d’acquisition sur lesquelles il souhaite des volumétries
 +
 +- sélectionner l’option globale qui lui permet d’avoir la volumétrie total sur les acquisitions réalisées : sur tous les instruments / pour toutes les natures d’acquisition. ​
 +
 +L’utilisateur ​ spécifie, s'il le souhaite, la période de temps (en donnant la date de début et de fin) durant laquelle les données l’intéressent.
 +
 +=== Volumétrie par Personne ===
 +Ce lien n'est visible qu'aux administrateurs. La page JSP donnant accès à cette volumétrie,​ state_actor_volumetry.jsp,​ est couplée au backing bean ExportTextualBean qui lui permet d’afficher la liste des formats d’export proposés : XLS, HTML, PDF ainsi que d’effectuer l’export.
 +
 +A partir de cette page, l’utilisateur sélectionne le format du fichier qu’il souhaite obtenir, et spécifie, s'il le souhaite, la période de temps (en donnant la date de début et de fin) durant laquelle les données l’intéressent.
 +
 +
 +==== Backing Bean ====
 +ExportTextualBean,​ ExportGraphicalBean (et les deux classes dérivées): ​
 +
 +Ces backing beans possèdent une méthode export() qui leur permet, selon le type de volumétrie sélectionné,​ d’effectuer l’export correspondant en appelant les méthodes de la classe VolumetryTextFileExport,​ selon les étapes suivantes :
 +
 +  * Identification du type de volumétrie sélectionné (volumétrie programme : complet/​résumé,​ volumétrie par instrument, volumétrie par nature d’acquisition,​ volumétrie personne) dans les méthodes de la classe VolumetryTextFileExport,​ choisir ainsi le fichier JasperReport à utilisé et les parametres nécessaires à ce fichier;
 +
 +  * Identification du type de fichier sélectionné (xls, html, pdf) dans les méthodes de la classe VolumetryTextFileExport,​ et choisir la mise en forme adéquate du fichier JasperReport ;
 +
 +Ces backing beans possèdent également des méthodes qui renvoient à la page JSP (state_context_volumetry.jsp) la liste de certaines informations telles que : le type de volumétries disponibles,​ les formats de fichiers proposés, les spectromètres disponibles, ​ les natures d’analyses prises en charge par le laboratoire,​ … et retournent aussi les messages d'​erreurs adéquats lorsqu'​une exception est levée.
 +
 +==== Classes d’export ====
 +Les exports sur les Programmes/​Projets/​Etudes ainsi que sur les Personnes, étant des export textuels, ​ des accès direct à la base de données sont effectués à partir des fichiers JasperReport ​ pour les volumétries en spécifiant la requête dans la propriété <​query>​ du fichier.
 +
 +Par contre, les exports sur les Acquisitions,​ des classes JAVA se chargent d’effectuer les tâches suivantes :
 +  * AcquisitionVolumetry : permet de récupérer toutes les volumétries concernant les acquisitions : volumétries par nature d’acquisition,​ volumétries par spectromètre,​ volumétrie globale du laboratoire,​ ....
 +  * PieInstrumentAcquisitionVolumetry : cette classe se charge de la création d’un objet JFreeChart ​ contenant un objet chart  pour la représentation graphique. Cet objet sera transmis au fichier JasperReport correspondant à la volumétrie en question au moment du chargement des données et par l’intermédiaire de la classe JFreeChartScriptlet ​ en indiquant dans la propriété « Scriptlet Class» du fichier JasperReport ​ le nom de cette classe.
 +
 +==== Export JasperReport ====
 +Le package JasperReport est une solution de reporting Open Source pour générer du contenu dynamique et pour créer des documents par page et prêts à être imprimeés facilement et de façon flexible. La bibliothèque JasperReport est capable de fournir du contenu riche à l'​écran ou dans des fichiers PDF, HTML, XLS, CSV et XML.
 +
 +JasperReport est entièrement écrit en JAVA, et peut être intégré dans toute application J2EE pour générer dynamiquement des informations de manière simple et flexible.  ​
 +Sous JasperReport,​ un document est défini par un fichier xml, appelé fichier de design, ayant l’extension jrxml. Le fichier design est ensuite compilé ( JasperFillManager.fillReport() ) en un fichier binaire .jasper qui sera peuplé de deux manières possibles  ​
 +  * soit par des données passées en paramètres par l’application appelante au cours de son exécution ;
 +  * soit par des données récoltées d’une base de données dont une connexion peut être passée en paramètre par l’application appelant ou alors définie par JasperReport.
 +
 +{{ epw_classes_etat_sorties.png }}
 +** Figure 4 Classes impliquées dans les états de sortie ** 
 +
 +{{ epw_sequences_etat_sorties.png }}
 +** Figure 5 Séquence lors de l'​export de la volumétrie par nature ** 
 +
 +===== Composant JSF : Listes d’éléments prédéfinis =====
 +==== Contexte ====
 +A divers endroits de l’application Web, des listes (ou arbre) d’éléments sont affichées :
 +
 +  * Liste de Programmes – avec leurs projets et leurs études – (page organisation)
 +  * Liste de Projets orphelins – avec leurs études - (page organisation)
 +  * Liste d’Etudes orphelines (page organisation)
 +  * Liste de Projets et/ou Etudes répondant à certains critères (résultat de recherche)
 +  * Liste des Projets (resp. Etudes) d’un Programme (resp. Projet) donné (description d’un Programme – resp. Projet -)
 +  * Liste d’Acquisitions répondant à certains critères (résultat de recherche)
 +  * Liste d’Echantillons/​Acquisitions/​Echantillons en attente d'​acquisition d’une Etude donnée.
 +  * Liste des Programmes/​Projets/​Etudes appartenant à l'​utilisateur.
 +  * Liste d'​Echantillons en attente d'​acquisition appartenant à l'​utilisateur.
 +
 +L’objectif est, d’une part, d’homogénéiser l’IHM et, d’autre part, de faciliter les évolutions. En effet, tout ajout d’une fonction au niveau d’une liste sera visible aux différents endroits ou elle sera utilisé. Pour cela, le choix de l’utilisation d’un composant JSF pour l’affichage des listes a été choisi.
 +
 +Il reste néanmoins à déterminer quel(s) composant(s) (composant existant ou personnalisé) et le niveau de configuration que l’on souhaite autoriser.
 +
 +
 +==== Spécifications ====
 +=== Liste Programmes/​Projets/​Etudes ===
 +== Page Organisation ==
 +La particularité de ces listes est qu’elles sont des arbres ! En effet, pour chaque programme (resp. projet) on veut pouvoir avoir la liste des projets (resp. études) qui leurs sont rattachés. Par contre, ce n'est pas le cas pour les listes des études , exemple liste des études orphelines,​car ceux sont de vraies listes ! En effet, les études n’ont pas d’élément qui leurs sont rattachés.
 +
 +Dans le cadre de la description de l’organisation,​ seuls le nom du contexte et une icône sont affichés. ​ Le statut (ouvert, clos, archivé) du contexte doit également être indiqué, par une icône par exemple.
 +Le nom est un lien vers une page de description complète du contexte et l’icône permet l’accès à une page de description sommaires. ​
 +{{ epw_page_organisation.png }}
 +
 +
 +== Page Recherche ==
 +Enfin, lorsque l’on fait une recherche dans l’activité du laboratoire,​ le resultat répondant aux critères de recherche est donné sous forme de tableau pour chaque type d'​entité (Programme, Projet, Etude)  ​
 + 
 +{{ epw_page_recherche.png }}
 +
 +== Composant JSF ==
 +Si l’on souhaite faire un composant JSF qui puisse être utilisé dans les différents cas listé ici, voire de nouveaux cas de figure non encore rencontrés,​ il est nécessaire d’autoriser la configuration de divers paramètres. Néanmoins, si l’on rend trop configurable le composant, plus rien n’assure l’homogénéité de l’IHM. Un compromis pourrait être de permettre :
 +
 +  * de paramétrer si l’on souhaite ou non voir les fils des entités.
 +  * de spécifier le type d’affichage souhaité parmi 2 ou 3 : compact ou complet.
 +  * de cacher/voir les entités en cours/​clos ​
 +
 +Le mode compact affiche :
 + * le nom
 + * la nomenclature
 + * l’icône d’accès a la description sommaire
 +
 +Le mode complet affiche le tableau de la page de description. ​
 +
 +=== Liste des Echantillons / Acquisitions ===
 +== Page Description ==
 +Dans la page de description des études, la liste des échantillons,​ celle des échantillons en attente d'​acquisition,​ ainsi que celle des acquisitions sont accessibles sous forme de vues.
 +
 +//Liste des Echantillons//​ : cette page , subView_study_samples.jsp,​ couplée au Backing Bean StudyBean offre la possibilité de modifier l'​état d'un échantillon en cliquant sur la figure représentant une led, ou alors en sélectionnant les échantillons auquels on désire changer l'​état et leur attribuer un nouvel état.
 +
 +{{ epw_sample_list.png }}
 +
 +Dans le cas où le changement de statut se fait sur un échantillon et que ce changement concerne le passage du statut "​Disponible"​ à "En attente d'​acquisition"​ une pop-up s'​ouvre permettant la saisie des paramètres nécessaires à la planification de l'​échantillon en question:
 +{{ epw_status_chg.png }}
 +
 +Lorsqu'​il s'agit d'un ensemble d'​échantillons,​ une pop-up s'​ouvre lorsqu'​on click sur l'​icône ​ et présente selon l'​état souhaité les informations nécessaires à la planification des échantillons.
 +
 +{{ epw_status_set_chg.png }}
 +
 +//Liste des Echantillons en attente d'​acquisition//​ : cette page , subview_tobeanalysed_stdSamples.jsp,​ couplée au Backing Bean StudyBean permet de changer certaines données en les introduisant dans les champs qui leurs sont dédiés ou le faire pour un ensemble qu'on aurait sélectioné. ​
 +
 +{{ epw_sample_tobeannalyded.png }}
 +
 +//Liste des Acquisitions//​
 +
 +{{ epw_sample_acquisitions.png }}
 +
 +== Page Recherche ==
 +Une recherche d’acquisitions répondant à certains critères donne une liste (un tableau) en résultat. Cette liste doit contenir des informations autres que celles données dans la page de description. En effet, il faut préciser l’étude d’appartenance (pour les acquisitions recherche) et la nature de l’acquisition,​ la recherche étant faite éventuellement sur tous les types d’acquisitions.
 +
 +{{ epw_search_acquisitions.png }}
 +
 +===== Organisation des Backing Beans =====
 +Dans ce paragraphe, nous allons decrire la réalistion de quelques fonctions en décrivant l'​organisation des pages JSF et les Backing Bean utilisés.
 +
 +**ATTENTION**: ​ Ce chapitre n'est pas correcte !! Il correspond déjà à la version 4.0 !!!
 +
 +==== Description des Backing Beans ====
 +**Remarque** : dans le texte process = protocol_application du modèle...
 +**EntityGenericBeanBean** (Request):
 + Bean utilisé pour récuperer des infos generic : liste de tous les contacts, tous les acteurs...
 +
 +**SpectroGenericBean** (Request) :
 + Bean utilisé pour récupérer les infos générique autour de la spectro :liste de tous les types d'​instruments,​...
 +
 +**SamplesReceptionBean**(Session):​
 + Bean utilisé pour la création des samples. Gestion de la liste des samples en cours de création...
 +
 +**SampleModelBean** (Session):
 + Bean utilisé pour la gestion des patterns utilisés pour la création des samples : NamePattern,​ OriginalNamePattern..
 +
 +**UserBean** (Request):
 + Bean pour la création des utilisateurs
 +
 +**UserSessionBean** (Session):
 + Bean utilisé pour la gestion de l'​utilisateur courant :  coordonnées ​ et liste des échantillons de travail ( a revoir)
 +
 +**ProcessedSampleBean**
 + Bean représentant un échantillon et des informations annexes :  nombre et liste des acquisitions,​ liste des process/​demandes subis et dernier process....
 +
 +**ProcessStepBean**
 + Bean représentant un "​process"​ au sens large. Un process pouvant être un protocol_application ou une demande de passage en masse ou au robot. Ce bean est dérivé en autant de bean que de process différents
 +
 +**SamplesCacheBean**(Session):​
 + Bean utilisé pour la gestion des échantillons pour une étude données. Un cache est utilisé pour le temps où une même étude est sélectionnée. Ce bean gère la liste des échantillons en fonction de leur dernièr process. C'est également ce bean qui gère la taille des éléments par page pour les listes des échantillons / acquisitions
 +
 +**SampleToAnalyseBean**(Request) :
 + Bean utilisé pour le passage du statut d'un sample a "en attente d'​acq"​ : le temps de la validation des infos. Dans le cas d'un échantillon seul.
 +
 +**SamplesModifierBean** (Session):
 + Bean utilisé pour la modification des propriétés de plusieurs échantillons (d'une même étude) : statut (depuis la page liste des échantillons) ou  paramètres relatifs au planning en masse (depuis la page liste des échantillons planifiés) ​
 +
 +{{ epw_processedsamples.jpg }}
 +** Figure 6 : Diagramme de classes de Gestion des échantillons et des process associés. **
 +
 +==== Organisation autour des les listes d'​échantillons ====
 +Il existe plusieurs listes d'​échantillons correspondant chacune à un critère : Liste des échantillons en attente d'​acquisition ou de passage robot de l'​utilisateur en cours indépendement de l'​étude d'​appartenance,​ Liste des échantillons d'une étude donnée, Liste des échantillons en fonction du dernire process subi d'une étude donnée, ....
 +
 +Voici le schéma globale de l'​organisation des pages JSF et des Backing Beans  concernant la manipulation de ces listes:
 +
 +A REFAIRE !!! 
 +=== Liste des échantillons d'une étude donnée ===
 +Cette liste est affichée par la page subView_study_samples.jsp (incluse dans la page view_study). La liste est  gérée par  SamplesCacheBean. Les objets de cette liste sont des ProcessedSampleBean. Aucune modification sur les échantillons nr'est possible depuis cette page. //Sauf peut etre le changement de status => available a consumed.//
 +
 +    * StudyBean et la page sample_edit_attribute.jsp : Modification des échantillons sélectionnés ou de tous les échantillons
 +    * ProcessedSampleBean :  modification de l'​échantillon représenté par le bean. 
 +
 +=== Liste des échantillons par process pour une étude données ===
 +Cette liste est affichée par la page subView_study_process.jsp. (include dans viex_study),​ elle est également gérée par SamplesCacheBean. Le choix du process visualisé est géré par SamplesCacheBean. Une méthode ​
 +
 +    * Pour un ensemble d'​échatillons (tous ou ceux sélectionnés) par l'​intermédiaire bu bean StudyUtilBean et la page sample_edit_attribute.jsp qui affiche uniquement les attributs modifiables en fonction de la commande d'​origine (lien "​modification du type d'​instrument ou lien modification du commentaire...)
 +    * Pour un échantillon donné par l'​intermédiaire du bean StudySampleBean.
 +
 +=== Liste de tous les échantillons en attente d'​acquisition pour un utilisateur données ===
 +Cette liste est affichée par la page subView_study_process.jsp. (include dans viex_study),​ elle est également gérée par SamplesCacheBean. Le choix du process visualisé est géré par SamplesCacheBean. Une méthode ​
 +
 +    * Pour un ensemble d'​échatillons (tous ou ceux sélectionnés) par l'​intermédiaire bu bean StudyUtilBean et la page sample_edit_attribute.jsp qui affiche uniquement les attributs modifiables en fonction de la commande d'​origine (lien "​modification du type d'​instrument ou lien modification du commentaire...)
 +    * Pour un échantillon donné par l'​intermédiaire du bean StudySampleBean.
 +
 +=== Liste de tous les échantillons en attente d'​acquisition pour un utilisateur données: ===
 +Cette page, subView_user_samples.jsp,​ affiche la liste de tous les échantillons en attente d'​acquisition de l'​utilisateur. Elle récupère la liste de ces échantillons du bean UserSessionBean. Il est possible de modifier le status d'un échantillon donné par :
 +
 +    * StudySampleBean :  modification de l'​échantillon représenté par le bean. 
 +      * SampleToAnalyseBean : Dans le cas ou le status de l'​échantillon devient "a analyser"​ la page change_available_sample_status.jsp est affichée (dans une popup) afin de permettre la saise des informations relatives à la plannification en masse. ces informations sont sauvegardées dans SampleToAnalyseBean tant que la validation n'est pas effective.
 +
 +==== Création des échantillons ====
 +La création se fait en 3 étapes :
 +
 +    * Création de l'​origine biologique ​ + spécification nombre d'​échantillons : 
 +          o Utilisation des beans SamplesReceptionBean pour les fichiers attachés notament; et BiologicOriginBean
 +    * Création des échantillons
 +          o Utilisation des beans BiologicOriginBean et SamplesReceptionBean pour visualiser le choix fait en 1. et SamplesReceptionBean pour la création des échantillons,​ SampleModelBean pour la saisie automatique
 +    * Récapitulation des informations et validation :
 +          o Utilisation des beans BiologicOriginBean et SamplesReceptionBean pour l'​affichage des informations précédement saisies.
 +
 +{{ epw_samplecreate.png }}
 +** Figure 7 Diagramme de navigation JSF entre les différentes pages **
 +
wiki/epims3_3/developer/ep-web.1204646425.txt.gz · Last modified: 2008/09/24 15:35 (external edit)