< Anterior | Próximo >

Lição 2.6: Configurar Ações e Ligações para Incluir um Novo Funcionário

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:

  • Ao clicar no botão Novo (New), 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 (Delete).
    • O campo Filtro (Filter) é desativado.
    • Os campos de detalhes são limpos de quaisquer valores, exceto um novo ID do funcionário.
    • O texto no botão Atualizar (Update) é alterado para Incluir (Add).
  • Ao clicar no botão Incluir (Add), 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 (Filter) é ativado.
    • O texto no botão Incluir (Add) é alterado para Atualizar (Update).

Incluir um Novo Objeto de Dados da Origem de Dados, Que Chama 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.

  1. Na paleta do Java Visual Editor, expanda a gaveta Objetos de Dados e selecione Objeto de Dados da Origem de Dados (Data Source Data Object).
  2. 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 (Data Source Data Object). Um novo Objeto de Dados da Origem de Dados (Data Source Data Object) é incluído e mostrado na área livre:

    Objeto de Dados da Origem de Dados em Formato Livre. Não Configurado.

  3. Clique com o botão direito do mouse no Objeto de Dados da Origem de Dados (Data Source Data Object) e selecione o campo Renomear (Rename). Renomeie o objeto de dados como newEmployeeRecord.
  4. Clique com o botão direito no objeto de dados newEmployeeRecord e selecione Propriedades de Ligação (Binding Properties). A caixa de diálogo Ligação dos Dados (Data Binding) é aberta.
  5. No campo Origem de Dados (Data source), selecione webServiceDataSource.
  6. No campo Serviço (Service), selecione createNewFullEmployeeRecord()
  7. Clique em OK.
Na área de formato livre, você verá que o objeto de dados da origem de dados newEmployeeRecord está ligado ao serviço da Web.

Objeto de Dados newEmployeeRecord, Conectado ao webServiceDataSource

Incluir um Objeto de Dados Básico para Facilitar a Comutação de Objetos de Dados

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.

O novo Objeto de Dados Básico (Basic Data Object) 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.
  1. Na paleta do visual editor, selecione Objeto de Dados Básico (Basic Data Object) e solte-o na área livre. Um basicDataObject é incluído.

    Objeto de Dados Básico na Área Livre, Não Configurado

  2. Renomeie o objeto de dados para switchingDataObject
  3. Na exibição Propriedades para switchingDataObject, defina a propriedade sourceObject como selectedEmployeeRecord. Você pode selecionar selectedEmployeeRecord no menu drop-down na coluna Valor para a propriedade.

    Agora, switchingDataObject refere-se a selectedEmployeeRecord e reflete os mesmos valores:

    switchingDataObject na Área Livre, Conectado ao Objeto de Dados selectedEmployeeRecord

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 (Employee details), conclua as seguintes etapas:
  1. Selecione o clique na guia Ligar (Bind).
  2. Na caixa de diálogo Ligações de Dados do Campo (Field Data Bindings), selecione switchingDataObject. Você ligou anteriormente os campos a selectedEmployeeRecord.

    Caixa de Diálogo Ligações de Dados do Campo, Mostrando lastNameField Ligado à Propriedade lastName em switchingDataObject

  3. 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, poderá ver que as linhas do binder apontam, agora, para switchingDataObject.

    Campo de Detalhes Ligado a switchingDataObject

Definir um Sinalizador e um Método de Atualização e Modos de Comutação

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").

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");
   }
}

Incluir um Evento actionPerformed ao Botão Novo

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.

  1. Na visualização design, clique com o botão direito do mouse no botão Novo (New) e selecione Eventos (Events) > 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()
       }
    });
  2. 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();   }
    });

Religar o Botão Atualizar

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.

  1. Na exibição de design, selecione o botão Atualizar (Update). Observe a seta pintada de rosa, mostrando que selectedEmployeeRecord é o argumento para a chamada de serviço.
  2. Clique na guia Ligação (Bind) no botão Atualizar (Update).
  3. No campo Argumento (Argument), selecione switchingDataObject.

    Ligações de Ações de Componentes para o Botão Atualizar, Utilizando switchingDataObject

  4. Clique em OK.

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

    Botão Atualizar Ligado ao Serviço da Web com switchingDataObject como Argumento

Incluir um Evento ao Binder do Botão Atualizar para Reconfigurar o Modo

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.

Incluir o seguinte código ao método getModifyEmployeeAction() no botão Atualizar:
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) {}
});

Ponto de Verificação da Lição

Agora, quando você executa o aplicativo My Company Directory, pode clicar no botão Novo (New) e incluir um novo registro do funcionário.

< Anterior | Próximo >