BISWindow
A BISWindow é a classe pai de todas as janelas do BIS. Sua principal finalidade é oferecer uma classe "pai" principal comum a todas as janelas do sistema. Filha de "Window" o Vaadin, contém todas as características da classe pai, que podem ser consultadas neste link.
Abaixo estão descritas as funcionalidades de BISWindow, seus conceitos e suas vantagens.
Destacar Conteúdo
Apesar de ser herdeira da Window do Vaadin, a BISWindow permite que seu conteúdo seja redirecionado para outro componente. Que é exatamente o que o SystemFrame faz. Ao anexar uma nova Window na interface (por exemplo usando a BISUI) o SystemFrame ao invés de exibir a nova janela, ele extraí o conteúdo da janela e o exibe dentro de um TabPanel que age como uma "barra de tarefas" do windows, exibindo todas as janelas abertas.
A intenção por trás disso era obviamente manter o código de cada janela em classes diferentes e ao mesmo tempo permitir que o SystemFrame permita que a janela possa ser destacada de dentro do TabPanel para outro lugar. Como por exemplo, uma janela popup, uma janela externa do navegador ou mesmo em algum tipo de visualização "dividida" da tela.
Registro dos Componentes
Ao invés de declarar todos os componentes da janela em atributos locais à classe, a BISWindow oferece os métodos abaixo para registrar o componente na instância da BISWindow. Esse registro nada mais é do que atribuir um ID para o componente de maneira que ele possa ser obtido em qualquer parte da instância, bastando requisita-lo pelo ID. Além de evitar um monte de declarações de classe, se os IDs utilizados forem padronizados é possível utilizar métodos genéricos para realizar algumas funções comuns, como validação dos campos.
Registro
Os métodos para registro dos componentes é:
registerComponent(String, Component)
Sendo que a String é o ID a ser passado e o Componente é o componente de tela criado. Além do método acima temos outros dois similares:
registerBISDefaultContainer(String, BISDefaultContainer<?,?>)
Utilizado para registrar container de componentes que precisam ser atualizados, e:
registerTab(String, Tab)
Que tem a função de registrar as abas criadas para serem colocadas em TabPanel.
![]() |
|
Obter Componente
Uma vez que os componentes foram registrados, eles podem ser obtidos novamente através do método genérico:
getRegisteredComponent(String)
Onde String é o ID definido no ato do registro do componente.
Para a maioria dos componentes utilizados existe um método específico que já faz o Cast para a classe correta. Os métodos estão disponíveis no JavaDOC ou na própria classe, todos seguem o padrão 'getRegistered<Nome do Componente>(String)'.
Validação Generalizada
Os componentes do Vaadin podem ser configurados para realizar algumas validações de formato (com ajuda dos BISDataHandler) e de obrigatoriedade de forma bem simples. Uma vez que as definições de validação foram definidas em cada campo, é possível fazer com que todos os campos sejam validades de uma única vez utilizando-se do prefixo dos IDs dos campos com o método:
validateRegisteredFieldStartingWith(String)
onde String é o prefixo do ID dos campos que se deseja validar. Por exemplo, se ao registrar os componentes da "tela de edição" de PersonVO todos começam com 'personvo.', basta passar este prefixo como parâmetro no método para todos os campos que se encaixam no critério sejam validados e fiquem em vermelho.
Este método retorna um boolean para indicar se todos os campos passaram com sucesso ou não. Basta 1 ter problema para que retorne false. Assim, antes de enviar o VO para o CRUD podemos fazer uma validação preliminar nos valores dos campos da tela com uma única linha.
Desregistrando o Componente
Em alguns momentos é necessário desregistrar os componentes criados e registrados, como por exemplo no caso de objetos criados dinamicamente devido a uma associação em lista. Ao sair da tela de cadastro precisamos que os campos sejam desregistrados por dois motivos:
- Primeiro porque enquanto o objeto continuar registrado o Garbage Colector não o remove da memória pois continuará a existir uma referência para ele (na hash de indexação da BISWindow);
- Segundo porque ao editar um componente que tenha uma lista de outros objetos e consequentemente objetos registrados com índices, podemos acabar deixando objetos em memória que atrapalharão a validação. Por exemplo, editamos um objeto com 5 item na sua lista. Deixamos os valores nos campos inválidos e cancelamos a alteração. Em seguida entramos para alterar outro item que só tem 2 itens na sua lista. Os campos desses dois filhos vão acabar sobrepondo os anteriores na Hash de índices, no entanto os outros 3 não fazem parte desse objeto e continuam registrados na BISWindow (mesmo que não associados ao layout) e o método de validação mencionado acima vai continuar chamando-os para as validações preliminares.
Para desregistrar um componente utilize o seguinte método:
unregisterField(String)
onde a String é o ID utilizado no registro do item. Para desregistrar vários componentes de uma única vez utilize:
unregisterFieldStartingWith(String)
onde a String é o prefixo do ID utilizado nos campos que desejamos desregistrar da memória.