Nessa lição, você ativa o aplicativo My Company Directory para incluir um novo registro de funcionário.
Devido ao comportamento do aplicativo ser mais complicado e dinâmico para incluir um novo funcionário, este exercício é de natureza mais complexa e requer algumas alterações manuais no código fonte. Além disso, este exercício demonstra alguns recursos avançados dos objetos de dados e fornece um exemplo criativo de maneira que você pode utilizar binders e objetos de dados para ajustar às suas necessidades.
A lista a seguir descreve o comportamento requerido do aplicativo:
O serviço da Web de amostra fornece um serviço createNewFullEmployeeRecord, que fornece um novo registro de funcionário em branco, ocupado com o próximo número de ID de funcionário disponível. Este registro em branco pode, então, ser ocupado com novas informações do funcionário e enviado de volta ao serviço da Web.
Como os campos de detalhes e o botão Atualizar (Update) precisam alternar modos (para executarem uma atualização e criarem um novo funcionário), é necessário que sejam ligados a dois objetos de dados diferentes, em momentos diferentes. Para facilitar esta etapa, você incluirá um Objeto de Dados Básico (Basic Data Object), denominado switchingDataObject. Você utilizará esse Objeto de Dados Básico (Basic Data Object) para alternar a ligação para os campos de texto entre selectedEmployeeRecord e newEmployeeRecord.
Apesar de cada campo de detalhe do funcionário já estar ligado a selectedEmployeeRecord, você irá ligá-los agora a switchingDataObject. Após ligar os campos, é possível, dinamicamente, alternar entre objetos de dados para os campos, dependendo de você estar modificando um registro de funcionário existente ou incluindo um novo registro de funcionário.
O método updateMode() a seguir verifica se o sinalizador de modo está definido como novo, então altera algum comportamento do aplicativo adequadamente. Por padrão, o sinalizador Booleano isNewMode é definido como false e o método updateMode() ativa a tabela de funcionários e o campo de filtro e define o texto no botão Atualizar (Update) como "Atualizar" ("Update"). Se isNewMode estiver definido como true, a tabela de funcionários será desativada e limpa de qualquer seleção, o campo de filtro será desativado e o texto no botão Atualizar (Update) será definido como "Incluir" ("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"); } }
Nesta etapa, você inclui código de evento ao clicar no botão Novo (New). O evento instrui switchingDataObject a utilizar o objeto de dados newEmployeeRecord, define o sinalizador de modo como "novo" e executa o método updateMode() incluído na etapa anterior.
Em uma lição anterior, você programou o botão Atualizar (Update) para utilizar o método modifyEmployee no serviço da Web. Essa ação é implementada como um SwingDataServiceAction. Uma das propriedades do SwingDataServiceAction é o objeto de origem, o qual atua como o argumento para o serviço. O objeto de origem para a ação de modificação está atualmente definido como selectedEmployeeRecord. Para programar o botão para controlar uma atualização e uma inclusão, você reconfigurará a ação do botão para utilizar o switchingDataObject como um argumento para o serviço modifyEmployee.
Após clicar no botão Atualizar (Update) e concluir a ação no serviço da Web, você deseja que o aplicativo retorne ao seu modo e comportamento padrão. Para fazer isso, você inclui um listener de evento no binder de ação do botão, que atualizará o modo e a tabela após executar a atualização ou inclusão.
modifyEmployeeAction.addActionBinderListener( new jve.generated.IActionBinder.ActionBinderListener() { public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) { if (isNewMode) { //Volte a utilizar selectedEmployeeRecord getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord()); //Reversão do novo modo isNewMode = false; updateMode(); } // Atualize o objeto de dados da tabela getLightEmployeeRecordRows().refresh(); } public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} });