Ebben a részben lehetővé teszi új alkalmazott rekord létrehozását a Cégcímtár alkalmazásban.
Mivel az alkalmazás viselkedése bonyolultabb és dinamikusabb új alkalmazott hozzáadásánál, ez a feladat is bonyolultabb, és megkívánja a forráskód kézi módosítását. Ez a feladat bemutatja továbbá az adatobjektumok egyes fejlettebb képességeit is, és kreatív példákkal mutatja be a kötések és adatobjektumok egyéni célokra használásának módjait.
Az alábbi lista az alkalmazás kívánt viselkedését írja le:
A minta-webszolgáltatás nyújtotta createNewFullEmployeeRecord szolgáltatás új, üres alkalmazott rekordot biztosít, kitöltve a következő rendelkezésre álló alkalmazottazonosítóval. Ezt az üres rekordot lehet azután feltölteni az új alkalmazott információival, illetve visszaküldeni a webszolgáltatásnak.

Mivel a részletmezőknek és a Frissítés gombnak módot kell váltaniuk (frissítés elvégzéséhez és új alkalmazott létrehozásához), különböző időpontokban különböző adatobjektumhoz kell kötni őket. A lépés elvégzéséhez hozzá kell adni egy switchingDataObject nevű Alapszintű adatobjektumot. Ezt az Alapszintű adatobjektumot fogja a szövegmezők kötésének váltogatására használni a selectedEmployeeRecord és az newEmployeeRecord objektum között.
Bár minden alkalmazott részletmező hozzá van már kötve a selectedEmployeeRecord objektumhoz, most a switchingDataObject objektumhoz kell kötni őket. A mezők kötése után dinamikusan válthat a mezők adatobjektumai közt attól függően, hogy létező alkalmazottrekordot módosít vagy új alkalmazott rekordot vesz fel.
Az alábbi updateMode() metódus ellenőrzi, hogy a módjelző újra van-e állítva, és ennek megfelelően módosítja az alkalmazás viselkedését. Az isNewMode logikai jelző alapértelmezésben hamisra van állítva, és az updateMode() metódus engedélyezi az alkalmazott táblát, illetve a szűrő mezőt, valamint "Frissítés" értékre változtatja a Frissítés gomb feliratát. Ha az isNewMode igazra van állítva, akkor az alkalmazottak tábla tiltott, eltűnik róla minden kijelölés, a szűrő mező tiltott lesz, valamint a Frissítés gomb felirata "Hozzáadás" szövegre változik.
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");
}
}
Ebben a lépésben eseménykódot vesz fel az Új gomb kattintásához. Az esemény a newEmployeeRecord használatára utasítja a switchingDataObject objektumot, átállítja a módjelzőt "új" értékre, és futtatja az előző lépésben felvett updateMode() metódust.
Az előző részben beprogramozta a Frissítés gombot a webszolgáltatás modifyEmployee metódusának használatára. A művelet SwingDataServiceAction műveletként lett megvalósítva. A SwingDataServiceAction egyik tulajdonsága a forrásobjektum, ami a szolgáltatás paramétereként viselkedik. A módosítás művelet forrásobjektuma jelenleg a selectedEmployeeRecord. Ahhoz, hogy a gombot a frissítés és a hozzáadás vezérlésére is programozhassa, újra kell konfigurálnia a gomb műveleteit, hogy a switchingDataObject objektumot használja a modifyEmployee szolgáltatás paramétereként.
Miután a Frissítés gombra kattintott, és befejeződött a webszolgáltatás művelete, az alkalmazásnak vissza kell térnie az alapértelmezett módba és viselkedéshez. Ehhez egy eseményfigyelőt fog hozzáadni a gomb műveleti kötéseihez, ami a frissítés vagy hozzáadás művelet elvégzése után frissíti a módot és a táblát.
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() {
public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {
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();
}
public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {}
});