Antes de iniciar este exercício, é necessário concluir o .
Neste exercício, você ativa o aplicativo 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:
- Ao clicar no botão Novo, o seguinte comportamento ocorre:
- A seleção é limpa na tabela de funcionários e a tabela está desativada.
- A limpeza da seleção da tabela causa a desativação do botão Excluir.
- O campo Filtro é desativado.
- Os campos de detalhes são limpos de quaisquer valores, exceto um novo ID do funcionário.
- O texto no botão Atualizar é alterado para Incluir.
- Ao clicar no botão Incluir, o seguinte comportamento ocorre:
- Os valores digitados nos campos de detalhes são incluídos no diretório como um novo registro do funcionário.
- A tabela é ativada e os valores são atualizados.
- O campo Filtro é ativado.
- O texto no botão Incluir é alterado para Atualizar.
Para incluir esse comportamento, conclua as seguintes etapas destacadas neste exercício:
- Incluir um Novo Objeto de Dados da Origem de Dados, Denominado createNewFullEmployeeRecord()
- Incluir um Objeto de Dados Básico para Facilitar Alternar de Objetos de Dados
- Religar Cada Campo do Funcionário ao switchingDataObject
- Definir um Sinalizador e um Método de Atualização e Modos de Alternância
- Incluir um Evento actionPerformed ao Botão Novo
- Religar o Botão Atualizar
- Incluir um Evento ao Binder do Botão Atualizar para Reconfigurar o Modo
1. Incluir um Novo Objeto de Dados da Origem de Dados, Denominado createNewFullEmployeeRecord():
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.
- Na paleta do Java Visual Editor, expanda a gaveta Objetos de Dados e selecione Objeto de Dados da Origem de Dados.
- Mova o ponteiro do mouse sobre a área em branco da visualização de design ou área livre e clique com o botão esquerdo para soltar o Objeto de Dados da Origem de Dados. Um novo Objeto de Dados da Origem de Dados é incluído e mostrado na área livre:

- Clique com o botão direito no Objeto de Dados da Origem de Dados e selecione o campo Renomear. Renomeie o objeto de dados como newEmployeeRecord.
- Clique com o botão direito no objeto de dados newEmployeeRecord e selecione Propriedades de Ligação. A caixa de diálogo Ligação dos Dados é aberta.
- No campo Origem de Dados, selecione webServiceDataSource.
- No campo Serviço, selecione createNewFullEmployeeRecord().
- Clique em OK.

Na área livre, você verá que o objeto de dados da origem de dados newEmployeeRecord está ligado ao serviço da Web.
2. Incluir um Objeto de Dados Básico para Facilitar Alternar de Objetos de Dados:
Como os campos de detalhes e o botão Atualizar 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, denominado switchingDataObject. Você utilizará esse Objeto de Dados Básico para alternar a ligação para os campos de texto entre selectedEmployeeRecord e newEmployeeRecord.
O novo Objeto de Dados Básico simplesmente aponta para outro objeto de dados (selectedEmployeeRecord), definido no exercício anterior. Este novo objeto de dados se tornará útil ao criar um método que manda esse objeto de dados básico utilizar o newEmployeeRecord criado anteriormente.
Em outras palavras, esse objeto de dados básico funcionará como um objeto de dados intermediário, que alterna entre o objeto de dados selectedEmployeeRecord e o objeto de dados newEmployeeRecord, permitindo que componentes visuais no aplicativo funcionem com dois objetos de dados diferentes.
- Na paleta do visual editor, selecione Objeto de Dados Básico e solte-o na área livre. Um basicDataObject é incluído.

- Renomeie o objeto de dados para switchingDataObject
- Na exibição Propriedades para switchingDataObject, defina a propriedade sourceObject como selectedEmployeeRecord. É possível selecionar selectedEmployeeRecord no menu drop-down na coluna Valor da propriedade.

Agora, switchingDataObject refere-se à selectedEmployeeRecord e reflete os mesmos valores.
3. Religar Cada Campo do Funcionário ao switchingDataObject:
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.
Para cada campo na seção Detalhes do Funcionário, conclua as seguintes etapas:
- Selecione o clique na guia Ligar.
- Na caixa de diálogo Ligações de Dados do Campo, selecione switchingDataObject. Você ligou anteriormente os campos a selectedEmployeeRecord.

- Certifique-se de que o campo ainda está ligado à propriedade do objeto de dados correto e clique em OK. Se você selecionar o campo na exibição de design, é possível consultar que as linhas do binder apontam, agora, para switchingDataObject.

4. Definir um Sinalizador e um Método de Atualização e Modos de Alternância:
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ário e o campo de filtro e define o texto no botão Atualizar como "Atualizar". 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 será definido como "Incluir".
Inclua o seguinte código em sua classe DirectoryApp.java antes do último sinal de chave de fechamento:
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. Incluir um Evento actionPerformed ao Botão Novo
Nesta etapa, você inclui código de evento ao clicar no botão Novo. 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.
- Na visualização de design, clique com o botão direito no botão Novo e selecioneEventos > actionPerformed. O código a seguir é gerado pelo método getNewButton():
newButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
}
});
- Substitua este stub gerado pelo seguinte código:
newButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
getNewEmployeeRecord().refresh();
isNewMode = true; //define o aplicativo como o modo novo
updateMode(); //altera a UI de acordo com o modo
getLastNameField().grabFocus();
}
});
6. Religar o Botão Atualizar:
Em um exercício anterior, você programou o
botão Atualizar 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:
- Na exibição de design, selecione o botão Atualizar. Observe a seta pintada de rosa, mostrando que selectedEmployeeRecord é o argumento para a chamada de serviço.
- Clique na guia Ligação no botão Atualizar.
- No campo Argumento, selecione switchingDataObject.

- Clique em OK.
Observe que a ação do botão está configurada para utilizar switchingDataObject como argumento para o método modifyEmployee:

7. Incluir um Evento ao Binder do Botão Atualizar para Reconfigurar o Modo:
Após clicar no botão Atualizar 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.
- Na exibição de design, selecione o botão Atualizar. Uma linha mostra a conexão do botão à origem de dados. Na linha, há um ícone que representa SwingDataServiceAction para o botão, que representa o binder de ação do botão.
- Clique com o botão direito no ícone do binder de ação do botão e selecione Eventos > Incluir Eventos.
Importante: Você está incluindo um evento ao binder do botão, não ao botão em si.
- Na caixa de diálogo Incluir Evento, expanda o nó actionBinder e selecione afterActionPerformed.
- Clique em Concluir. O stub de evento a seguir é incluído ao SwingDataServiceAction para o botão:
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) {}
});
- Substitua o stub gerado pelo código a seguir:
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) {}
});
Agora, ao executar o aplicativo é possível clicar no botão Novo e incluir um novo registro do funcionário.
Agora você está pronto para seguir para o próximo exercício: