Big Retail - P&D >Projeto Storex Custom > Novo Storex



Objetivo



Esse documento tem o objetivo de informar quais as modificações devem ser realizadas dentro dos projetos Mavem que tenham como base o Storex Standad, essas alterações são utilizadas para unificar os XML's dos projetos Standard com os Customizados.

Descrição da Solução



A solução se aplica a qualquer projeto Maven que tenha como finalidade realizar o merge dois xml's.

O projeto foi desenvolvido utilizando como base o projeto "storex-pos-studioz", mas essa atualização poderá ser aplicada a qualquer projeto que utilize Maven, para isso basta realizar as devidas alterações pertinentes em cada projeto.

Pré-requisito


Dentro dos projetos Customizados não haverá mais a presença dos arquivos .xml herdados do projeto Standard, agora o .xml do projeto Standard irá embarcado no .jar do Storex-Standard, a solução irá buscar esse .xml informado nas dependências do Maven de acordo com os parâmetros informados no pom.xml.

Alteração no Arquivo Pom.xml


Esse é o trecho de código que será alterado para efetuar a verificação se o .xml do Standad esta presente no .jar 

pom.xml
<!-- Verifica se existe o xml Custom na pasta, caso não, faz uma cópia do xml Standard e renomeia. -->
<profiles>
   <profile>
      <activation>
         <file>
            <missing>${basedir}/configuracao/padrao/servidor-configuracao/xml/linx-storex-pos-studioz-config.xml</missing>
         </file>
      </activation>
      <build>
         <plugins>
            <plugin>
               <groupId>com.coderplus.maven.plugins</groupId>
               <artifactId>copy-rename-maven-plugin</artifactId>
               <version>1.0</version>
               <executions>
                  <execution>
                     <id>copy-file</id>
                     <phase>package</phase>
                     <goals>
                        <goal>copy</goal>
                     </goals>
                     <configuration>
                        <sourceFile>${basedir}/configuracao/padrao/servidor-configuracao/xml/linx-storex-pos-standard-config.xml</sourceFile>
                        <destinationFile>src/main/resources/configuracao/xml/${project.artifactId}-config-${project.version}.xml</destinationFile>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>true</overWriteSnapshots>
                     </configuration>
                  </execution>
               </executions>
            </plugin>
         </plugins>
      </build>
   </profile>
</profiles>


<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xslt-maven-plugin</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<executions>
...
<!-- Extrai do .jar do projeto Standard o xml de configuração e salva na pasta. -->
<execution>
<id>unpack</id>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>linx-storex-pos-standard</artifactId>
<version>${linx-storex-pos-standard.version}</version>
<outputDirectory>${basedir}/configuracao/padrao/servidor-configuracao/xml/</outputDirectory>
<includes>**/*.xml</includes>
</artifactItem>
</artifactItems>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
<!-- Plugin responsável por realizar o merge dos xmls.-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xslt-maven-plugin</artifactId>
<executions>
<execution>
<id>merge-faces-config</id>
<phase>package</phase>
<goals>
<goal>transform</goal>
</goals>
<configuration>
<xslFile>${basedir}/configuracao/padrao/servidor-configuracao/xml/mergeXml.xsl</xslFile>
<srcDir>${basedir}/configuracao/padrao/servidor-configuracao/xml/</srcDir>
<destDir>${dist.dir}/</destDir>
<srcIncludes>linx-storex-pos-studioz-config.xml</srcIncludes>
<fileNameRegex>linx-storex-pos-studioz-config</fileNameRegex>
<fileNameReplacement>${project.artifactId}-config-${project.version}</fileNameReplacement>
</configuration>
</execution>
</executions>
</plugin>
</plugins>

Criação do Arquivo .XSLT


Para conseguir efetuar o merge dos XMLs de configuração será necessário criar um arquivo com a extensão .xsl chamado mergeConfig, com o auxilio do seu eclipse acesse o projeto customizado busque a pasta XML, clique com o botão direito na pasta e selecione a opção New (Novo) > File (Arquivo)

Esse é o trecho de código que deverá ser incluído no arquivo mergeConfig.xsl, nesse arquivo criado estarão os mapeamentos das tags que serão validadas.

mergeConfig.xsl

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>

<!–Carrega o xml Standard para mapeamento -->
<xsl:variable name="storexStandard" select="document('../../servidor-configuracao/xml/linx-storex-pos-standard-config.xml')" />

<xsl:template match="/">

<!-- percorre a tag do arquivo principal e copia no xml gerado -->
<data xmlns:rule="http://linxretail.com.br/configuration/rule"
xmlns:config="http://linxretail.com.br/configuration"
xmlns:value="http://linxretail.com.br/configuration/value"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="15.26.00">


<!-- percorre a tag do arquivo principal e copia no xml gerado -->
<application-type>
<xsl:for-each select="$storexStandard/data/application-type/child::*">
<xsl:copy-of select="." />
</xsl:for-each>
</application-type>
<groups>
<xsl:for-each select="$storexStandard/data/groups/child::*">
<xsl:copy-of select="." />
</xsl:for-each>
</groups>

<!-- percorre a tag e todos os nós filhos dos dois xmls e realiza o merge no xml gerado -->
<parameters>
<xsl:for-each
select="$storexStandard/data/parameters/child::*">
<xsl:copy-of select="." />
</xsl:for-each>

<xsl:for-each
select="data/parameters/child::*">
<xsl:copy-of select="." />
</xsl:for-each>
</parameters>

<!-- percorre a tag do arquivo principal e copia no xml gerado -->
<data-wipe>
<xsl:for-each select="$storexStandard/data/data-wipe/child::*">
<xsl:copy-of select="." />
</xsl:for-each>
</data-wipe>
</data>
</xsl:template>
</xsl:stylesheet>

Tegs Mais importantes para Configuração do Projeto



<xslFile>${basedir}/configuracao/padrao/servidor-configuracao/xml/mergeXml.xsl</xslFile>

  •  Indica o caminho onde está o xslt onde fica o mapeamento das tags que será realizado o merge.


<srcDir>${basedir}/configuracao/padrao/servidor-configuracao/xml/</srcDir>

<destDir>${resources.dir}/configuracao/xml/</destDir>

  •  Indica o caminho onde os .xml's origem e destino estão. 


<fileNameRegex>linx-storex-pos-studioz-config</fileNameRegex>

  • Nome do .xml Destino, o qual será feita a comparação com o .xml origem.



<fileNameReplacement>${project.artifactId}-config-${project.version}</fileNameReplacement>

  • Nome do .xml gerado já mergiado.


<xsl:variable name="storexStandard" select="document('../../servidor-configuracao/xml/linx-storex-pos-standard-config.xml')" />

  • Variável criada para referenciar o .xml origem que vai ser chamado logo abaixo dentro da tag que queremos validar.


<parameters>

  •  Está é a tag  que é comparada nos dois .xmls.


ATENÇÃO

  • O arquivo .xslt precisa estar na mesma pasta dos dois arquivos .xml's.

  • O arquivo .xml será gerado sempre que for executado o processo de build do Maven.

  • O .xml gerado deve ser salvo numa pasta onde o projeto enxergue para que seja empacotado junto com os demais arquivos no final do processo de Build.

  • Sem rótulos