Dans cette leçon, vous allez compléter l'application My Company Directory afin de permettre à l'utilisateur d'ajouter un nouvel enregistrement d'employé.
Comme l'ajout d'un nouvel employé exige de l'application un comportement plus compliqué et plus dynamique, cet exercice est plus complexe et nécessite que vous apportiez quelques modifications manuelles au code source. Il illustre également certaines fonctions avancées des objets de données et donne un exemple créatif des différentes techniques d'utilisation des lieurs (binders) et objets de données pour répondre à des besoins spécifiques.
La liste suivante décrit le comportement requis de l'application :
L'exemple de service Web comporte une méthode createNewFullEmployeeRecord dont le rôle est de fournir un nouvel enregistrement d'employé vide, recevant le premier ID d'employé disponible. L'enregistrement vide peut alors être alimenté par les données d'un nouvel employé et renvoyé au service Web.
Comme les zones de détails et le bouton Update doivent pouvoir alterner entre deux modes (un pour la mise à jour d'un enregistrement d'employé existant et un autre pour l'ajout d'un nouvel enregistement), ils doivent être liés à deux objets de données différents, correspondant chacun à l'un de ces deux modes. Pour faciliter cette étape, vous allez ajouter un objet de données de base appelé switchingDataObject. Cet objet permettra de commuter la liaison des zones de texte entre les objets selectedEmployeeRecord et newEmployeeRecord.
Les zones de détails de l'employé sont toutes déjà liées à selectedEmployeeRecord, mais vous devez maintenant les lier à switchingDataObject. Une fois ces liens établis, vous pourrez alterner dynamiquement entre les deux objets de données, selon que vous modifiez un enregistrement d'employé existant ou que vous ajoutez un nouvel enregistrement d'employé.
La méthode updateMode() présentée ci-après vérifie si le fanion isNewMode est true ou false, puis elle change en conséquence le comportement de l'application. Par défaut, le booléen isNewMode a la valeur false, ce qui signifie que le mode "mise à jour d'enregistrement" est en vigueur. Dans ces conditions, la méthode updateMode() active la table des employés et la zone Filter et affecte le texte "Update" au bouton updateCreateButton. Si le fanion isNewMode prend la valeur true, la table des employés est désactivée et ne comporte plus de sélection, la zone Filter est également désactivée et le texte du bouton devient "Add".
private boolean isNewMode = false; private void updateMode() { if (isNewMode) { getEmployeesTable().clearSelection(); getEmployeesTable().setEnabled(false); getFilterField().setEditable(false); getUpdateCreateButton().setText("Add"); } else { getEmployeesTable().setEnabled(true); getFilterField().setEditable(true); getUpdateCreateButton().setText("Update"); } }
Dans cette étape, vous allez ajouter un code d'événement qui sera utilisé lorsque le bouton New sera actionné. Cet événement indique à switchingDataObject d'utiliser l'objet de données newEmployeeRecord, affecte la valeur "true" au fanion isNewMode et exécute la méthode updateMode() que vous avez ajoutée à l'étape précédente.
Dans une précédente leçon, vous avez programmé le bouton Update afin qu'il utilise la méthode modifyEmployee du service Web. Cette action est implémentée sous forme de SwingDataServiceAction. Une des propriétés du SwingDataServiceAction est l'objet source, qui sert d'argument passé à la méthode du service. Actuellement, l'objet source de l'action de modification (modifyEmployeeAction) est selectedEmployeeRecord. Pour programmer le bouton afin qu'il contrôle alternativement une mise à jour et un ajout d'enregistrement, vous allez reconfigurer son action de sorte qu'elle utilise l'objet switchingDataObject comme argument passé à la méthode de service modifyEmployee.
Une fois que l'utilisateur a cliqué sur le bouton Update et que l'action correspondante a été effectuée par le service Web, l'application doit retrouver son comportement et son mode par défaut. Pour cela, vous allez ajouter un écouteur d'événements au lieur d'action du bouton, qui changera le mode et actualisera la table une fois la mise à jour ou l'ajout d'enregistrement effectué.
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() { public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) { if (isNewMode) { //Rétablir l'utilisation de selectedEmployeeRecord getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord()); //Sortir du mode 'nouvel enregistrement' isNewMode = false; updateMode(); } //Actualiser l'objet de données de la table getLightEmployeeRecordRows().refresh(); } public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} });