Histórico da Página
...
Arquivos de configuração do Plugin e para a sua geração
São dois os arquivos que deverão ser criados para a configuração e geração do plugin (os arquivos de exemplo estão no projeto Eclipse com fontes que são disponibilizados mais abaixo):
Criar manualmente o arquivo com Criar manualmente os arquivos com o layout do plugin externo e outras informações. Um template para a criação desse arquivo se encontra no dummyplugin para facilitar a vida do desenvolvedor e, tenha em mente, ele será validado pelo Intellector IW-Editor. Esse JSON deverá conter o nome do plugin externo e a sua classe de implementação em Java, lista das variáveis de entrada e outra de saída com o nome, tipo Java de cada uma, formato e descrição, e.g. abaixo para o nosso dummyplugin:
São dois os arquivos que deverão ser criados para a configuração e geração do plugin (os arquivos de exemplo estão no projeto Eclipse com fontes que são disponibilizados mais abaixo):
- JSON - arquivo com as definições da classe implementada pelo plugin, lista de variáveis de entrada e saída do plugin, propriedades que o usuário poderá alterar.
- POM.XML - Além das definições de armazento do plugin em um repositório contém informações sobre a geração do plugin.
JSON
Bloco de código | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?> <dummy> <!-- metodo de acesso para ser carregado no acesso --> <code name="br.com.tools.acessos.DummyAccess"/> <!-- esse deverah ser sufixo para ser acrescentado ao nome --> <!-- vindo da politica, entao irei buscar na hash da politica --> <!-- hash.getKey(cpf_dummy); um de/para para os elementos --> <nome_acesso>dummy</nome_acesso> <!-- contem os dados necessarios para entrada no Dummy --> <entrada> <!-- posso testar pelo valor obrigatorio dentro de cada --> <!-- acesso, ele dever ser "CPF" --> <field description="cpf requerente" type="String" format="">CPF</field> <field description="Data de Nascimento" type="Date" format="ddmmyyyy">DT_NASC</field> <field description="Tem seguro" type="Boolean" format="">TEM_SEGURO</field> <field description="Valor do salario" type="Double" format="">VAL_SALARIO</field> <field description="Idade do requerente" type="Integer" format="">IDADE</field> </entrada> <!-- contem todas as saidas disponiveis pelo Dummy --> <!-- Obs.: quando counter=alguma_coisa, entao todo o bloco --> <!-- abaixo sofrerah um looping baseado nesse counter --> <saida id="DUMMY" counter="" > <register description="Teste de boolean" type="Boolean" format="">BOOLEAN_VALUE</register> <register description="Teste pra tipo Data" type="Date" format="">DATE_VALUE</register> <register description="Teste pra tipo Double" type="Double" format="">DOUBLE_VALUE</register> <register description="Teste pra tipo Integer" type="Integer" format="">INTEGER_VALUE</register> <register description="Teste pra tipo String" type="String" format="">STRING_VALUE</register> </saida> <saida id="D100" counter="" > <register description="Um Nome qualquer" type="String" format="">D100_NOME</register> <register description="Uma data de Nascimento" type="Date" format="ddmmyyyy">D100_DTNASCIMENTO</register> <register description="Mostra o diretorio" type="String" format="">D100_MYDIR</register> <register description="Qualquer string" type="String" format="">D100_OUTRO</register> </saida> <saida id="D200" counter="D200_NUMCONSULTAS" > <register description="Simula String com contador" type="String" format="">D200_TIPO_</register> <register description={ "class_name": "br.com.totvs.plugins.dummyplugin.DummyPlugin" , "plugin_name": "dummyplugin", "description":"Descrição do Plugin", "layout": { "editable": true, "in": [ { "description": "cpf requerente", "type": "String", "name": "CPF", "format": "" }, { "description": "Data de Nascimento", "type": "Date", "name": "DT_NASC", "format": "ddMMyyyy" }, { "description": "Tem seguro", "type": "Boolean", "name": "TEM_SEGURO", "format": "" }, { "description": "Valor do salario", "type": "Double", "name": "VAL_SALARIO", "format": "" }, { "description": "Idade do requerente", "type": "Integer", "name": "IDADE", "format": "" } ], "out": [ { "id": "DUMMY", "counter": 0, "counter_max": 0, "register": [ { "description": "Teste de boolean", "type": "Boolean", "name": "BOOLEAN_VALUE", "format": "" }, { "description": "Teste pra tipo Data", "type": "Date", "name": "DATE_VALUE", "format": "ddMMyyyy" }, { "description": "Teste pra tipo Double", "type": "Double", "name": "DOUBLE_VALUE", "format": "" }, { "description": "Teste pra tipo Integer", "type": "Integer", "name": "INTEGER_VALUE", "format": "" }, { "description": "Teste pra tipo String", "type": "String", "name": "STRING_VALUE", "format": "" } ] }, { "id": "D100", "counter": 0, "counter_max": 0, "register": [ { "description": "Um Nome qualquer", "type": "String", "name": "D100_NOME", "format": "" }, { "description": "Uma data de Nascimento", "type": "Date", "name": "D100_DTNASCIMENTO", "format": "ddMMyyyy" }, { "description": "Mostra o diretorio", "type": "String", "name": "D100_MYDIR", "format": "" }, { "description": "Qualquer string", "type": "String", "name": "D100_OUTRO", "format": "" } ] }, { "id": "D200", "counter": 2, "counter_max": 3, "register": [ { "description": "Simula String com contador", "type": "String", "name": "D200_TIPO_", "format": "" }, { "description": "Simula Date com contador" type=, "type": "Date" format="yyyyddmm">D200, "name": "D200_DATA_</register> <register description=", "format": "yyyyddMM" }, { "description": "Simula String com contador" type=, "type": "String", "name": format="">D200D200_HORA_</register> <register description="", "format": "" }, { "description": "Simula String com contador", "type": "String", "name" type="String" format="">D200_MOEDA_</register> <register description="Simula Double com contador" type="Double" format="">D200_VALOR_</register> </saida> </dummy>: "D200_MOEDA_", "format": "" }, { "description": "Simula Double com contador", "type": "Double", "name": "D200_VALOR_", "format": "" } ] } ] }, "properties": { "database": "mango_d", "usuario": "claudio", "senha": "mariposa", "audita": true } } |
POM.XML
Bloco de código | ||||
---|---|---|---|---|
| ||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>grouo-id</groupId>
<artifactId>dummyplugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>Dummy para exemplificar plugins externos</description>
<properties>
<!-- nome da package e classe - FQN -->
<main-class>br.com.totvs.plugins.dummyplugin.DummyPlugin</main-class>
<!-- Nome do Plugin de acesso -->
<pluginname>dummyplugin</pluginname>
<description>Dummy para exemplificar plugins externos</description>
<!-- chave de acesso ao dado na persistencia -->
<primarykey>CPF</primarykey>
<pkdescription>CPF do adquirente</pkdescription>
<!-- Caminho para o Layout do Acesso -->
<layoutpath>resources/dummyplugin.json</layoutpath>
<!-- P - plugin / L - lib para plugin -->
<pluginlib>P</pluginlib>
</properties>
<distributionManagement>
<repository>
<id>releases</id>
<url>http://repo.com:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://repo.com:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<targetPath>resources</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>false</addClasspath>
<mainClass>${main-class}</mainClass>
</manifest>
<manifestSections>
<manifestSection>
<name>Intellector Entries</name>
<manifestEntries>
<Implementation-Plugin>${pluginname}</Implementation-Plugin>
<Implementation-Layout>${layoutpath}</Implementation-Layout>
<Implementation-Description>${description}</Implementation-Description>
<primarykey>${primarykey}</primarykey>
<pkdescription>${pkdescription}</pkdescription>
<Plugin-Lib>${pluginlib}</Plugin-Lib>
</manifestEntries>
</manifestSection>
</manifestSections>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<!-- Aqui estou forçando um clean toda vez que o maven install for
executado. -->
<id>auto-clean</id>
<phase>initialize</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<versionRange>[2.5,)</versionRange>
<goals>
<goal>clean</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>iw-server</groupId>
<artifactId>iw-server-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>iw-server</groupId>
<artifactId>iw-server-beans</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project> |
E o dummyaccess não é tão dummy assim...
...