Recentemente, escrevi sobre a criação de aplicativos de desktop com Couchbase Lite e JavaFX. Conforme demonstrado, o Couchbase é uma excelente solução para armazenamento e sincronização de dados em um aplicativo de desktop devido ao Java SDK disponível. No entanto, sei que o JavaFX não é para todos.

Há outra estrutura semelhante para a criação de aplicativos de desktop em Java. Ela se chama Gluon e também oferece suporte para aplicativos Android e iOS. No entanto, neste exemplo, estamos analisando estritamente o desktop.

Veremos como criar um aplicativo de desktop Gluon usando praticamente o mesmo código encontrado em nosso exemplo anterior de JavaFX.

Os requisitos

Há alguns requisitos para criar um aplicativo Gluon que use o Couchbase.

  • JDK 1.7+
  • IntelliJ IDEA
  • Gateway de sincronização do Couchbase

Normalmente, não faço disso um requisito, mas é muito mais fácil criar um aplicativo Gluon com um IDE como o IntelliJ, por isso ele está na lista. Há um plug-in para o IntelliJ que criará um projeto Gluon com o Gradle e tudo o que você precisa.

Embora o Couchbase Sync Gateway não seja realmente um requisito, ele é necessário se você quiser adicionar suporte à sincronização entre seu aplicativo e o Couchbase Server/outras plataformas e dispositivos.

Criação de um novo projeto Gluon

Se você decidir usar o IntelliJ para criar seu projeto, certifique-se de que já tenha feito o download do plug-in Gluon, conforme descrito aqui.

Usando o IntelliJ, crie um novo projeto, mas opte por criar um projeto Gluon Desktop - Projeto de múltiplas visualizações com FXML conforme mostrado abaixo.

Em última análise, cabe a você decidir o que fazer a partir daqui, mas para ficar o mais próximo possível deste guia, dê ao seu projeto um com.couchbaselabs nome do pacote e glúon classe principal.

Tudo o que vem a seguir pode ser deixado como padrão, pois faremos apenas um aplicativo de duas páginas com o Gluon. Quando terminarmos, esperamos ter uma estrutura de arquivos e diretórios parecida com a seguinte:

Você notará que eu criei alguns arquivos extras, como CouchbaseSingleton.java e Todo.java.

Essencialmente, temos exibições XML e controladores para acompanhar essas exibições. Isso é muito semelhante ao que vimos em um Aplicativo JavaFX. Quando se trata de projetar essas exibições, temos algumas opções. Podemos usar XML bruto ou podemos usar Criador de cenas. Agora, esse SceneBuilder não deve ser confundido com o JavaFX SceneBuilder. Eu cometi esse erro e fiquei batendo cabeça por um bom tempo. A versão que queremos oferecerá suporte a aplicativos Gluon.

Antes de começarmos a adicionar o código do aplicativo, devemos adicionar nossas dependências ao arquivo Gradle do projeto. Se você não estiver familiarizado com o Gradle, ele faz o mesmo trabalho que o Maven ou o Ant. A sintaxe é diferente, mas eu a considero um pouco mais limpa. Abra o arquivo build.gradle e inclua o seguinte código:

O que é particularmente importante aqui são as dependências:

Isso incluirá a biblioteca Couchbase Lite, bem como o tempo de execução do aplicativo de desktop para o Gluon.

Com o projeto pronto, podemos começar a desenvolver o aplicativo.

Projetando a camada de dados do Couchbase

Ao trabalhar com o Couchbase, é uma boa ideia criar uma instância única dele. Isso significa que usaremos a mesma instância aberta durante todo o aplicativo, até decidirmos fechá-la.

Abra o arquivo src/main/java/com/couchbaselabs/CouchbaseSingleton.java e inclua o seguinte código:

Se você viu o aplicativo JavaFX que criei anteriormente, perceberá que esse singleton é o mesmo entre os dois projetos. Você pode até usar uma versão semelhante para Android.

No CouchbaseSingleton estamos criando e abrindo um banco de dados local chamado projeto fx. Esse banco de dados será usado em todo o aplicativo. Também estamos criando nossa visualização do Couchbase Lite para consulta. Essa todos emitirá um par de valores-chave de id de documento e documento para cada documento no banco de dados local.

O método do construtor é privado, o que significa que não queremos que o usuário possa instanciar um objeto a partir dele. Em vez disso, queremos usar um método estático getInstance para realizar o trabalho.

Embora não vamos nos preocupar com a replicação até o final do guia, queremos estabelecer a base. A startReplication nos permitirá definir a sincronização bidirecional com um Sync Gateway e o método stopReplication nos permitirá interromper a replicação, talvez quando o aplicativo for fechado.

Agora temos nossas funções para salvar e carregar dados.

No salvar estamos aceitando um método personalizado Todo objeto. Na verdade, esse objeto contém apenas uma identificação, um título e uma descrição. A classe tem a seguinte aparência:

A classe acima é encontrada no src/main/java/com/couchbaselabs/Todo.java arquivo. O que estamos fazendo é, na verdade, pegar o objeto e adicioná-lo como propriedades a um documento NoSQL do Couchbase. Depois de salvar o documento e obter um ID, retornamos o mesmo documento com o ID incluído.

A função de consulta executará a exibição que criamos anteriormente e adicionará cada um dos itens de resultado a uma matriz de Todo encerrando nosso banco de dados singleton.

Criação de uma visualização para dados de listagem

Vamos criar um aplicativo que usa várias exibições do Gluon em vez de tentar colocar tudo na mesma exibição. Isso não deve ser confundido com as exibições do Couchbase Lite, que tratam de dados e não de interface do usuário.

A exibição padrão será a primeira exibida quando iniciarmos o aplicativo. Essa visualização mostrará uma lista de todos os nossos elementos de todo. Se não estiver usando o SceneBuilder, a marcação XML encontrada em src/main/resources/com/couchbaselabs/views/primary.fxml seria parecido com o seguinte:

 

A visualização resultante será parecida com a seguinte:

Você verá na imagem que há uma barra de navegação com um botão, mas ela não aparece no layout XML. Em vez disso, o layout contém apenas a exibição de lista. No entanto, o XML faz referência ao nosso src/main/java/com/couchbaselabs/views/PrimaryPresenter.java file. Esse é o arquivo em que definimos não apenas a barra de navegação, mas também qualquer lógica que potencialize a exibição específica.

O src/main/java/com/couchbaselabs/views/PrimaryPresenter.java terá muita semelhança com o nosso projeto JavaFX, com as diferenças no componente de navegação.

No arquivo acima, temos a propriedade de exibição de lista vinculada à exibição de lista real no XML. O código que realmente importa, no entanto, é o código encontrado no arquivo inicializar método. Nele, fazemos três coisas fundamentais.

No código acima, definimos como os dados aparecerão na lista. Por padrão, ele aceita apenas dados de cadeia de caracteres, portanto, nós o substituímos para obter o título do nosso Todo objetos.

No listener acima, definimos o título da nossa barra de navegação e o botão. Quando o botão for pressionado, a exibição será alterada para a exibição secundária.

Por fim, resta-nos executar a consulta inicial de dados e preencher a lista, além de ouvir os novos dados à medida que eles chegam. Se houver alterações, elas serão iteradas e os indicadores serão revisados em cada documento alterado. Se houver um indicador excluído, os dados serão removidos do modo de exibição de lista. Se houver uma alteração, os dados do modo de exibição de lista serão removidos e, em seguida, substituídos. Caso contrário, os dados serão apenas adicionados. Como o ouvinte opera em um thread em segundo plano, as alterações na interface do usuário devem ser feitas dentro do thread Plataforma.runLater.

Isso nos leva à segunda e última visão.

Criação de uma visualização para salvar dados

A segunda visualização terá um formulário e será responsável pela entrada do usuário a ser adicionada ao banco de dados e exibida na visualização anterior. A marcação XML que alimenta essa visualização terá a seguinte aparência:

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixar uma resposta