No desenvolvimento de um widget para o Fluig Plataforma é possível programar certas ações a serem executadas em tempo de instalação, ativação ou desativação.
Importante
Esses eventos estão disponíveis desde que se utilize a Central de Componentes disponível no agrupador Aplicativos do Painel de controle ou a Exportação e Importação de Páginas disponível no agrupador Personalização do Painel de controle
Para que isso seja possível, é necessário criar uma classe em seu projeto Fluig que implemente a classe "com.fluig.sdk.api.component.activation.ActivationListener". É necessário também inserir uma annotation de mapeamento, que depois deverá ser referenciada no arquivo application.info.
Veja abaixo um exemplo dessa classe:
package com.fluig; import javax.ejb.Singleton; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import com.fluig.sdk.api.component.activation.ActivationEvent; import com.fluig.sdk.api.component.activation.ActivationListener; @Singleton(mappedName = "activator/codigo_widget", name = "activator/codigo_widget") public class ActivationClass implements ActivationListener { /** * @return nome do arquivo que será gerado e feito o deploy na central de componentes * @throws Exception */ @Override public String getArtifactFileName() throws Exception { return "nome-do-arquivo-gerado.war"; } /** * Evento chamado no momento da instalação (deploy) do artefato dentro da Central de Componentes. * @param event * @throws Exception */ @Override public void install(ActivationEvent event) throws Exception { } /** * Evento chamado no momento da ativação do artefato dentro da Central de Componentes. * @param event * @throws Exception */ @Override public void enable(ActivationEvent event) throws Exception { } /** * Evento chamado no momento da desativação do artefato dentro da Central de Componentes. * @param event * @throws Exception */ @Override public void disable(ActivationEvent event) throws Exception { } }
Em seguida, no arquivo application.info deve ser criada a propriedade "activation.class", cujo valor deve ser o mesmo da propriedade "name" da annotation da classe de ativação.
Para o exemplo dado acima a propriedade ficaria assim:
activation.class=activator/codigo_widget
Além disso, para que seu artefato seja corretamente gerado, é necessário adicionar algumas dependências ao seu projeto. Caso o seu projeto seja do tipo maven.
Utilize o código abaixo:
<dependencies> <dependency> <groupId>com.fluig</groupId> <artifactId>foundation-security-authentication-saml</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.fluig</groupId> <artifactId>wcm-sdk-service</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.fluig</groupId> <artifactId>wcm-common</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.fluig</groupId> <artifactId>fluig-sdk-common</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.fluig</groupId> <artifactId>fluig-sdk-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.fluig</groupId> <artifactId>wcm-core</artifactId> <type>jar</type> </dependency> <dependency> <groupId>com.fluig</groupId> <artifactId>ecm-ejb-api</artifactId> <type>jar</type> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <archive> <manifestEntries> <Dependencies>org.slf4j, com.fluig.api, com.fluig.api.common</Dependencies> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>yuicompressor-maven-plugin</artifactId> <executions> <execution> <goals> <goal>compress</goal> </goals> </execution> </executions> <configuration> <nosuffix>false</nosuffix> <force>true</force> <linebreakpos>-1</linebreakpos> <disableOptimizations>false</disableOptimizations> <gzip>false</gzip> <jswarn>false</jswarn> <nomunge>true</nomunge> <preserveAllSemiColons>false</preserveAllSemiColons> </configuration> </plugin> </plugins> </build>
Exemplo Completo
Para uma visão mais completa dessa técnica, é possível visualizar um dos widgets disponibilizados pela equipe do TOTVS Fluig Plataforma em nosso repositório de samples, como por exemplo o widget de convênios.