Prima di iniziare questo esercizio, è necessario completare l'.
In questo esercizio verrà abilitata l'applicazione per aggiungere il
record di un nuovo dipendente. Poiché il comportamento dell'applicazione è più complicato e dinamico per l'aggiunta
di un nuovo dipendente, questo esercizio è più complesso e verrà richiesto di effettuare
alcune modifiche manuali al codice di origine. Inoltre, questo esercizio mostra
alcune funzioni avanzate degli oggetti dati, e fornisce un esempio dei diversi modi in cui è possibile utilizzare
i binder e gli oggetti dati.
Il seguente elenco descrive il comportamento previsto dell'applicazione:
- Facendo clic su Nuovo:
- La selezione viene cancellata nella tabella dei dipendenti e la tabella viene disabilitata.
- La cancellazione della selezione nella tabella fa sì che il pulsante Elimina venga disabilitato.
- Viene disabilitato il campo Filtro.
- I valori nel campo dei dettagli vengono cancellati, fatta eccezione per il nuovo ID dipendente.
- Il testo del pulsante Aggiorna diventa Aggiungi.
- Facendo clic su Aggiungi:
- I valori immessi nei campi dei dettagli vengono aggiunti alla struttura come nuovo record di dipendente.
- La tabella viene abilitata e i valori vengono aggiornati.
- Il campo Filtro viene abilitato.
- Il testo del pulsante Aggiungi diventa Aggiorna.
Per aggiungere questo comportamento, completare le seguenti istruzioni riportate in questo esercizio:
- Aggiunta di un nuovo Oggetto dati dell'origine dati che richiama createNewFullEmployeeRecord()
- Aggiunta di un Oggetto dati di base per facilitare l'alternanza degli oggetti dati
- Rebinding di ciascun campo di dipendente a switchingDataObject
- Definizione di un indicatore e di un metodo per l'aggiornamento e l'alternanza delle modalità
- Aggiunta di un evento actionPerformed al pulsante Nuovo
- Rebinding del pulsante Aggiorna
- Aggiunta di un evento al binder del pulsante Aggiorna per reimpostare la modalità
1. Aggiunta di un nuovo Oggetto dati dell'origine dati che richiama createNewFullEmployeeRecord():
Il servizio Web di esempio fornisce un servizio createNewFullEmployeeRecord che a sua volta fornisce un record
di dipendente nuovo, vuoto in cui verrà inserito il primo numero di ID dipendente disponibile.
In questo record vuoto possono successivamente essere inserite le informazioni relative al nuovo dipendente
e inoltrate al servizio Web.
- Nella tavolozza dell'editor visivo Java, espandere il cassetto
Oggetti di dati e selezionare Oggetto dati dell'origine Java.
- Spostare il mouse sull'area vuota della vista di progettazione o sull'area a formato libero
e fare clic con il pulsante sinistro del mouse per rilasciare l'Oggetto dati dell'origine Java.
Un nuovo Oggetto dati dell'origine dati viene aggiunto e mostrato nell'area a formato libero:

- Selezionare l'oggetto dati dell'origine dati con il tasto destro del mouse e scegliere Rinomina
campo. Rinominare l'oggetto dati in newEmployeeRecord.
- Selezionare l'oggetto dati newEmployeeRecord con il tasto destro del mouse e selezionare Proprietà
di binding. Viene visualizzata la finestra Binding di dati.
- Nel campo Origine dati, selezionare webServiceDataSource.
- Nel campo Servizio, selezionare createNewFullEmployeeRecord().
- Scegliere OK.

Nell'area a formato libero, viene visualizzato l'oggetto dati dell'origine dati newEmployeeRecord
associato al servizio Web.
2. Aggiunta di un Oggetto dati di base per facilitare l'alternanza degli oggetti dati:
Poiché i campi dei dettagli e il pulsante Aggiorna devono alternare le modalità
(sia per eseguire un aggiornamento che per la creazione di un nuovo dipendente), dovranno essere associati
a due diversi oggetti dati in due momenti diversi. Per semplificare queste operazioni, aggiungere un oggetto dati di
base chiamato switchingDataObject. Tale oggetto verrà utilizzato per alternare il binding per i campi di testo
tra selectedEmployeeRecord e newEmployeeRecord.
Il nuovo oggetto dati di base, indica semplicemente un altro oggetto
dati (selectedEmployeeRecord) definito in uno degli esercizi precedenti. Questo nuovo oggetto dati risulterà
utile durante la creazione di un metodo che indica all'oggetto di utilizzare il
newEmployeeRecord creato precedentemente.
In altre parole, l'oggetto dati di base funzionerà come oggetto dati intermedio che passa dall'oggetto dati
selectedEmployeeRecord all'oggetto dati newEmployeeRecord, consentendo ai componenti visivi dell'applicazione
di utilizzare due diversi oggetti dati.
- Nella tavolozza dell'editor visivo, selezionare Oggetto dati di base,
e rilasciarlo nell'area a formato libero. Viene aggiunto un basicDataObject.

- Ridenominare l'oggetto dati in switchingDataObject
- Nella vista Proprietà di switchingDataObject, impostare la proprietà
sourceObject su selectedEmployeeRecord. È possibile selezionare
selectedEmployeeRecord dal menu a discesa nella colonna Valore della proprietà.

A questo punto, switchingDataObject fa riferimento a selectedEmployeeRecord e ne rispecchia gli stessi valori.
3. Rebinding di ciascun campo di dipendente a switchingDataObject:
Anche se i campi dei dettagli del dipendente sono già associati a
selectedEmployeeRecord, adesso verranno associati a switchingDataObject. Dopo aver associato i campi,
sarà possibile passare dinamicamente da un oggetto dati all'altro per i campi, in base alle modifiche
apportate al record di un dipendente esistente o all'aggiunta di un nuovo record.
Per ciascuno dei campi nella sezione Dettagli dipendente, procedere come segue:
- Selezionare il campo e fare clic sulla scheda Binding.
- Nella finestra Binding di dati campo, selezionare switchingDataObject. Precedentemente
sono stati associati i campi a selectedEmployeeRecord.

- Assicurarsi che il campo sia ancora associato alla proprietà dell'oggetto dati e scegliere OK.
Se si seleziona il campo nella vista di progettazione, è possibile vedere che le linee del binder adesso
indicano l'oggetto switchingDataObject.

4. Definizione di un indicatore e di un metodo per l'aggiornamento e l'alternanza delle modalità:
Il seguente metodo updateMode() controlla se il modo è impostato su Nuovo, quindi modifica alcuni comportamenti
dell'applicazione di conseguenza. Per impostazione predefinita, l'indicatore
Booleano isNewMode è impostato su false, e il metodo updateMode() abilita la tabella dipendenti e il campo
dei filtri, ed imposta il testo sul pulsante Aggiorna in "Aggiorna". Se isNewMode è impostato su true,
la tabella dei dipendenti viene disabilitata e qualsiasi selezione sarà annullata, il campo filtro viene
disabilitato e il testo sul pulsante Aggiorna viene impostato su "Aggiungi".
Aggiungere il seguente codice alla classe DirectoryApp.java prima dell'ultima parentesi graffa chiusa:
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");
}
}
5. Aggiunta di un evento actionPerformed al pulsante Nuovo:
In questa fase, verrà aggiunto il codice di evento per il pulsante Nuovo.
L'evento indica a switchingDataObject di utilizzare l'oggetto dati newEmployeeRecord, imposta l'indicatore
di modalità su "new" ed esegue il metodo updateMode() aggiunto precedentemente.
- Nella vista di progettazione selezionare il pulsante Nuovo con il tasto destro del mouse, quindi
scegliere Eventi > actionPerformed. L'editor visivo genera un codice con uno stub di eventi
generico che stampa una riga nella console:
System.out.println("actionPerformed()");
- Sostituire questo stub generato (la riga System.out.println) con il seguente codice:
getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
getNewEmployeeRecord().refresh();
isNewMode = true; //sets application to new mode
updateMode(); //changes UI according to new mode
getLastNameField().grabFocus();
6. Rebinding del pulsante Aggiorna:
In uno degli esercizi precedenti, è stato programmato il pulsante
Aggiorna affinché utilizzi il metodo modifyEmployee sul servizio Web.
Questa azione viene implementata come una SwingDataServiceAction. Una delle proprietà di
SwingDataServiceAction è l'oggetto di origine, che agisce come argomento per il servizio. L'oggetto di origine
per l'azione di modifica è al momento impostato su selectedEmployeeRecord. Per programmare il
pulsante affinché controlli sia l'aggiornamento che l'aggiunta, è necessario riconfigurare
l'azione del pulsante per utilizzare switchingDataObject come argomento nel servizio modifyEmployee:
- Nella vista di progettazione, selezionare il pulsante Aggiorna.
Osservare la freccia rosa, punteggiata che mostra che selectedEmployeeRecord è l'argomento per la chiamata al servizio.
- Fare clic sulla scheda Binding nel pulsante Aggiorna.
- Nel campo Argomento, selezionare switchingDataObject.

- Scegliere OK.
A questo punto, osservare che l'azione del pulsante è
configurata per utilizzare switchingDataObject come argomento per il metodo modifyEmployee:

7. Aggiunta di un evento al binder del pulsante Aggiorna per reimpostare la modalità:
Dopo aver fatto clic su Aggiorna e una volta che l'azione è stata completata sul servizio
Web, ripristinare la modalità e il comportamento predefinito dell'applicazione.
Per ottenere questo risultato, aggiungere un listener di eventi al binder di azioni del pulsante che aggiornerà
la modalità e aggiornerà la tabella dopo aver eseguito l'aggiornamento o l'aggiunta.
- Nella vista di progettazione, selezionare il pulsante Aggiorna.
Una linea indica la connessione del pulsante all'origine dati. Sulla linea è raffigurata un'icona
che rappresenta la SwingDataServiceAction per il pulsante, il binder di azioni del pulsante.
- Selezionare l'icona del binder di azioni del pulsante con il tasto destro del mouse e scegliere
Eventi > Aggiungi eventi.
Importante: l'evento viene aggiunto al binder del pulsante e non al pulsante.
- Nella finestra Aggiunta eventi, espandere il nodo actionBinder e selezionare afterActionPerformed.
- Scegliere Fine. Il seguente stub di evento viene aggiunto alla SwingDataServiceAction per il pulsante:
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() {
public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {
System.out.println("afterActionPerformed()"); // TODO Auto-generated Event stub afterActionPerformed()
}
public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {}
});
- Sostituire la riga System.out.println("afterActionPerformed()"); con il seguente codice:
if (isNewMode) {
//Go back to using the selectedEmployeeRecord
getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord());
//Revert out of new mode
isNewMode = false;
updateMode();
}
// Refresh the table's data object
getLightEmployeeRecordRows().refresh();
A questo punto, quando viene eseguita l'applicazione sarà possibile fare clic su Nuovo ed aggiungere un nuovo record di dipendente.
Ora è possibile passare all'esercizio successivo: