diff --git a/xml/filtrar-dados-xml/.gitignore b/xml/filtrar-dados-xml/.gitignore new file mode 100644 index 0000000..814982c --- /dev/null +++ b/xml/filtrar-dados-xml/.gitignore @@ -0,0 +1,148 @@ +# Visual Code +.project +.vscode/ +.classpath +.settings/ + +/reports +/bin +/target +target/ +.idea/ +*.iml +.metadata/ +RemoteSystemsTempFiles/ +Servers/ +*.log +*.log* +nohup.out +.DS_Store +*.orig +tmp.txt +*.hprof +tmp.txt +ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamString/ +ca.uhn.fhir.jpa.entity.ResourceTable/ + +# Vagrant stuff. +.vagrant +/vagrant/build +/vagrant/chef/tmp +jpaserver_derby_files + + +# Created by https://www.gitignore.io + +### Java ### +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear +*.class + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties + + +### Vim ### +[._]*.s[a-w][a-z] +[._]s[a-w][a-z] +*.un~ +Session.vim +.netrwhist +*~ + + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm + +*.iml + +## Directory-based project format: +.idea/ +# if you remove the above rule, at least ignore the following: + +# User-specific stuff: +.idea/workspace.xml + +.idea/dataSources.ids +.idea/dataSources.xml +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# Mongo Explorer plugin: +.idea/mongoSettings.xml + +## File-based project format: +*.ipr +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties + + +### Eclipse ### +*.pydevproject +.metadata +.gradle +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# JDT-specific (Eclipse Java Development Tools) +#.project +#.settings/ +#.classpath + +# PDT-specific +.buildpath + +# sbteclipse plugin +.target + +# TeXlipse plugin +.texlipse diff --git a/xml/filtrar-dados-xml/.travis.yml b/xml/filtrar-dados-xml/.travis.yml new file mode 100644 index 0000000..9594f75 --- /dev/null +++ b/xml/filtrar-dados-xml/.travis.yml @@ -0,0 +1,10 @@ +language: java + +script: + - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install sonar:sonar -Dsonar.organization="kyriosdata-github" -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN +cache: + directories: + - "$HOME/.m2/repository" + - "$HOME/.sonar/cache" +jdk: + - openjdk10 diff --git a/xml/filtrar-dados-xml/CONTRIBUTING.md b/xml/filtrar-dados-xml/CONTRIBUTING.md new file mode 100644 index 0000000..fd214ec --- /dev/null +++ b/xml/filtrar-dados-xml/CONTRIBUTING.md @@ -0,0 +1,5 @@ +# Como contribuir + +1. Faça um _fork_ +1. Crie um _branch_ específico para a sua contribuição. O nome do _branch_ deve estar no formato _issue/32_. Onde _32_ é o identificador único da _issue_ que está sendo contemplada pela contribuição. +1. Assine a Licença do Acordo de Contribuição. diff --git a/xml/filtrar-dados-xml/Dockerfile b/xml/filtrar-dados-xml/Dockerfile new file mode 100644 index 0000000..71482dc --- /dev/null +++ b/xml/filtrar-dados-xml/Dockerfile @@ -0,0 +1,5 @@ +FROM fabric8/java-alpine-openjdk8-jre + +ENTRYPOINT ["/usr/bin/java", "-jar", "/app.jar"] + +ADD target/api.jar /app.jar diff --git a/xml/filtrar-dados-xml/Dockerfile.jdk11 b/xml/filtrar-dados-xml/Dockerfile.jdk11 new file mode 100644 index 0000000..6568fa9 --- /dev/null +++ b/xml/filtrar-dados-xml/Dockerfile.jdk11 @@ -0,0 +1,5 @@ +FROM kyriosdata/jdk11 + +ENTRYPOINT ["java", "-jar", "/app.jar"] + +ADD target/api.jar /app.jar diff --git a/xml/filtrar-dados-xml/README.md b/xml/filtrar-dados-xml/README.md new file mode 100644 index 0000000..47af807 --- /dev/null +++ b/xml/filtrar-dados-xml/README.md @@ -0,0 +1,302 @@ +[![Build Status](https://travis-ci.com/kyriosdata/exemplo.svg)](https://travis-ci.com/kyriosdata/exemplo) +[![SonarCloud Status](https://sonarcloud.io/api/project_badges/measure?project=com.github.kyriosdata%3Aexemplo&metric=alert_status)](https://sonarcloud.io/dashboard?id=com.github.kyriosdata%3Aexemplo) +[![Known Vulnerabilities](https://snyk.io/test/github/kyriosdata/exemplo/badge.svg?targetFile=pom.xml)](https://snyk.io/test/github/kyriosdata/exemplo?targetFile=pom.xml) +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.kyriosdata/exemplo/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.kyriosdata/exemplo) + +# Escopo e objetivo +_Organizaço de código de referência para desenvolvimento de software em Java_. + +Esta organização inclui um conjunto "completo" de ferramentas, já configuradas, para o desenvolvimento +empregando Java. + +O projeto inclui: +(a) uma biblioteca formada por um único método que identifica o dia da semana para uma data fornecida; +(b) uma aplicação que oferece tal funcionalidade via linha de comandos e (c) uma RESTFul API ambas para acesso à funcionalidade da biblioteca. + +> _Objetivo: ilustrar uma organização de código em Java usando +"boas práticas" para inspirar projetos reais_. + +## Iniciando... + +- `git clone https://github.com/kyriosdata/exemplo` +- `cd exemplo` + +Agora você poderá executar os vários comandos abaixo. + +## Pré-requisitos +- `mvn --version`
+você deverá ver a indicação da versão do Maven instalada e +a versão do JDK, dentre outras. Observe que o JDK é obrigatório, assim como +a definição das variáveis de ambiente **JAVA_HOME** e **M2_HOME**. + +## Limpar, compilar, executar testes de unidade e cobertura +- `mvn clean`
+remove diretório _target_ + +- `mvn compile`
+compila o projeto, deposita resultados no diretório _target_ + +- `mvn test`
+executa todos os testes do projeto. Para executar apenas parte dos testes, por exemplo, +aqueles contidos em uma dada classe execute `mvn -Dtest=NomeDaClasseTest test`. Observe +que o sufixo do nome da classe de teste é `Test` (padrão recomendado). Para executar um +único teste `mvn -Dtest=NomeDaClasseTest#nomeDoMetodo test`. + +- `mvn verify -P cobertura`
+executa testes de unidade e produz relatório de +cobertura em _target/site/jacoco/index.html_ além de verificar se limite mínimo +de cobertura, conforme configurado, é satisfeito. + +## Empacotando o projeto +- `mvn package`
+gera arquivo _exemplo.jar_ no diretório _target_. Observe que +o arquivo gerado não é executável. Um arquivo jar é um arquivo no formato +zip. Você pode verificar o conteúde deste arquivo ao executar o comando `jar vft exemplo.jar`. + +- `mvn package -P executavel-dir`
+gera _exemplo-dir.jar_, executável, mas dependente do diretório _jars_, + também criado no diretório _target_. Para executar basta o comando + `java -jar target/exemplo-dir.jar`. Observe que se o diretório _jars_ for + removido, então este comando falha. Por último, o diretório _jars_ deve + ser depositado no mesmo diretório do arquivo _exemplo.jar_. + +- `mvn package -P executavel-unico`
+ gera jar executável correspondente ao aplicativo a ser executado via linha de comandos, + em um único arquivo, _target/exemplo-unico.jar_, + suficiente para ser transferido e executado. Para executá-lo basta o + comando `java -jar target/exemplo-unico.jar`. + + - `mvn package -P api`
+ gera jar executável juntamente com todas as dependências reunidas em um único arquivo, + _target/api.jar_. Este arquivo jar pode ser transferido para outro diretório + ou máquina e ser executado pelo comando `java -jar target/api.jar`. A execução e exemplos + de chamadas são fornecidos na seção seguinte. + +## Executando a aplicação e a RESTFul API +- `mvn exec:java -Dexec.mainClass="nome.completo.Classe" -Dexec.args="arg1 arg2"`
+executa o método _main_ da classe indicada na configuração do _plugin_ pertinente +no arquivo pom.xml. Depende de `mvn compile`. + +- `java -jar target/exemplo-unico.jar`
+executa o aplicativo por meio do arquivo jar criado pelo comando `mvn package + -P executavel-unico`, conforme comentado anteriormente. Observe que o comando + anterior e o corrente produzem o mesmo efeito, contudo, o arquivo jar + permite que seja enviado para um outro diretório ou outro computador, + onde pode ser executado, enquanto o comando anterior (acima) exige, + inclusive, a disponibilidade do Maven (o que pode ser útil em tempo de + desenvolvimento). + +- `java -jar target/api.jar` ou ainda `mvn spring-boot:run`
+coloca em execução a API gerada por `mvn package -P api` na porta padrão (8080). Para fazer uso de porta +diferente use `java -jar -Dserver.port=9876 target/api.jar`, por exemplo. Requisições podem ser +submetidas conforme abaixo: + - Abra o endereço _http://localhost:8080/ds_ no seu navegador, ou forneça + a seguinte URL para um dia específico + _http://localhost:8080/ds?data=01-01-2015_. + - Via linha de comandos (curl), `curl http://localhost:8080/ds` ou `curl + http://localhost:8080/ds?data=01-01-200`. + - Página HTML (há uma interface gráfica) no diretório **gui**, basta abrir + o arquivo [index.html](http://htmlpreview.github.com/?https://raw.githubusercontent.com/kyriosdata/exemplo/master/gui/index.html). + + +## Documentação + +- `mvn javadoc:javadoc`
+produz documentação do projeto depositada em +_target/site/apidocs/index.html_. Este comando está configurado para +o JDK 9. + +## Análise estática +Trata-se da análise do código sem que seja executado. Esta análise produz +uma "noção de quão bom" está o código sob alguns aspecto e, em consequência, +permite orientar eventuais ações de melhoria. Fique atento, "sair +bem" na análise estática não significa que "agrada usuários". A análise +estática observa o código. + +Todas estas análises devem ser realizadas em todos os projetos? Não! +Aquelas relevantes para um dado projeto deverão ser +configuradas em conformidade com o contexto em questão. + +- **Checkstyle** + - `mvn checkstyle:checkstyle`
+ gera análise de estilo em _target/site/checkstyle.html_. + Observe que o uso do plugin + **jxr** é necessário para geração de relatório do código fonte referenciável + pelo relatório gerado pelo Checkstyle. Contudo, o uso do **jxr** não é + obrigatório. + + - `mvn checkstyle:check`
+ faz com que o _build_ falhe se pelo menos +um estilo é violado + +- **Dependency Check (vulnerabilidades)** + - `mvn verify -P owasp`
+ análise de vulnerabilidades depositadas em + _target/dependency-check-report.html_. A primeira execução é relativamente + "longa", esteja preparado para esperar... + +- **JavaNCSS** + - `mvn javancss:check`
+ verifica limites de complexidade ciclomática (CC) e de linhas + de código sem comentário (NCSS). Este comando depende da compilação +prévia, ou seja _mvn compile_ + + - `mvn javancss:report`
+ gera relatório em _target/site/javancss.html_ e +também depende de compilação prévia, ou seja, _mvn compile_ + +- **JDepend** + - `mvn jdepend:generate`
+ gera relatório de algumas métricas, inclusive presença de ciclos em _target/site/jdepend-report.html_ + +- **PMD** + - `mvn jxr:jxr pmd:pmd`
+ gera relatório em _target/site/pmd.html_. Observe que o uso do plugin + **jxr** é necessário para geração de relatório do código fonte referenciável + pelo relatório perado pelo PMD. Contudo, o uso do **jxr** não é obrigatório. + + - `mvn pmd:check`
+ falha se pelo menos uma regra é violada + + - `mvn jxr:jxr pmd:cpd`
+ gera relatório de duplicidades encontradas. Observe que o uso do plugin + **jxr** é necessário para geração de relatório do código fonte referenciável + pelo relatório gerado pelo PMD. Contudo, o uso do **jxr** não é obrigatório. + +- **Spotbugs** + - `mvn spotbugs:spotbugs`
+ detecção de bugs + - `mvn spotbugs:check`
+ apenas verifica se há erros + - `mvn spotbugs:gui`
+ abre GUI para exibir bugs após _mvn spotbugs:spotbugs_ + +- **Spotbugs** (security) + - `mvn spotbugs:spotbugs -P security`
+ detecção de bugs + - `mvn spotbugs:check -P security`
+ apenas verifica se há erros + - `mvn spotbugs:gui -P security`
+ abre GUI para exibir bugs após _mvn spotbugs:spotbugs -P security_ + +- **Snyk** + + - `mvn snyk:test -P security`
+ análise de vulnerabilidade oferecida pelo serviço [Snyk](https://snyk.io). + A propriedade _snyk.token_ deve estar definida no arquivo + _$HOME/.m2/settings.xml_, conforme ilustrado abaixo. Alternativamente, + por conveniência, o valor pode ser fornecido via linha de comandos, + **-Dsnyk.token=API-TOKEN** (neste caso não é necessária a definição no + arquivo _settings.xml_. + ```xml + + + + + true + + + API-TOKEN AQUI + + + + + ``` + + + - `mvn snyk:monitor -P security`
+ Disponibiliza relatório em snyk.io (atualiza _badge_) + +## Relatório do projeto +- `mvn package site -P cobertura`
+Gera documentação do projeto, incluindo relatórios de análises estáticas em +_target/site/index.html_. + +- `mvn site:run` executa serviço que disponibiliza em http://localhost:8080 a +documentação gerada no passo anterior. + +## Disponibilizando biblioteca no repositório Maven Central +A boa notícia é que este _pom.xml_ está devidamente configurado para +publicação no Maven Central, contudo, depende de outras ações e da +configuração do arquivo _HOMEDIR/.m2/settings.xml_. + +- **Nexus Staging Maven Plugin** + - `mvn deploy -P deploy`
+ +Particularmente considero a publicação usando o Maven Central mais +complexa do que a alternativa recente oferecida pelo [JitPack](https://jitpack.io), +uma alternativa. + +## Dependências +O desenvolvimento de código em Java, em geral, usufrui de um significativo conjunto de bibliotecas e _frameworks_. Esta +reutilização é incorporada em um projeto por meio de dependências. Gerenciá-las +torna-se necessário e há dois _plugins_ úteis para tal. Consulte a documentação deles +para outros além daqueles ilustrados abaixo: Version Maven Plugin ([aqui](http://www.mojohaus.org/versions-maven-plugin/)) e Apache Maven Dependency Plugin ([aqui](https://maven.apache.org/plugins/maven-dependency-plugin/)). + +- `mvn versions:display-dependency-updates`
+Lista dependências para as quais há versões mais recentes do que aquelas empregadas. + +- `mvn versions:display-plugin-updates`
+Lista _plugins_ para as quais há versões mais recentes do que aquelas empregadas. + +- `mvn dependency:analyze`
+Analisar as dependências de um projeto. Dependência citada mas não utilizada, dentre +outras situações são relatadas por meio desta análise. + +- `mvn dependency:purge-local-repository`
+limpa dependências do projeto em questão do repositório local e obtém dependências novamente. Útil quando o repositório local é corrompido. + +- `mvn dependency:copy-dependencies`
+Copia dependências do projeto para o diretório **target/dependency**. + +## Banco de Dados H2 (bônus) +Dado o cenário "comum" no qual aplicações em Java fazem uso de um banco +relacional, aqui são oferecidos recursos para desenvolvimento usando o +H2 (https://www.h2database.com). + +- `mvn exec:java -P start-shell-h2`
+ Abre/cria banco para uso via linha de comandos. + Para criar o banco de nome `bancoNome` no diretório `dir` forneça + `jdbc:h2:/bancoNome`. Se existir, apenas será aberto. + Adicionalmente, forneça como _driver_ a classe `org.h2.Driver`. + Você pode fazer uso do diretório de sua + preferência, contudo, a sugestão é criar o banco no diretório `target` + (usado pelo comando seguinte). + +- `mvn exec:java -P start-h2`
+ Este comando abre uma interface gráfica, via _browser_, no endereço + http://localhost:8082. Observe que o comando anterior permite interagir + com o banco via linha de comandos. Este comando, ao contrário do + anterior, assume que o banco a ser aberto está no diretório `target`. + Quando fornecer a URL, use `.` para representar tal diretório. + + +## Outros recursos +- `mvn help:effective-pom`
+exibe POM de fato empregado + +- `mvn help:describe -Dcmd=clean`
+exibe detalhes da fase _clean_ + + +## Integração contínua +Notou os emblemas (_badges_) no início da página? Todo _commit_ na presente +página automaticamente irá realizar uma série de operações, como compilação, +execução dos testes de unidade e várias análises estáticas. O resultado +geral é imediatamente acessível por meio dos emblemas (clique neles), +onde detalhes são disponibilizados nas páginas correspondentes. +Observe que isso se transforma em um significativo **instrumento +de visibilidade do projeto**. + +Para projetos _open source_ os serviços oferecidos são gratuitos. Seguem aqui os +merecidos agradecimentos a: +- https://travis-ci.com +- https://sonarcloud.io +- https://snyk.io + +A lista acima não tem a pretensão de ser exclusiva. Abaixo seguem outros serviços: +- https://www.codacy.com/ +- https://codescene.io/ +- https://codecov.io/ +- http://circleci.com/ +- https://codeclimate.com/quality/ diff --git a/xml/filtrar-dados-xml/pom.xml b/xml/filtrar-dados-xml/pom.xml new file mode 100644 index 0000000..b05d197 --- /dev/null +++ b/xml/filtrar-dados-xml/pom.xml @@ -0,0 +1,1081 @@ + + + 4.0.0 + + com.github.newtonjose + filtrar-dados-xml + jar + 1.0.2 + + ${project.groupId}:${project.artifactId} + + + TODO: Descrição do repo + + + https://github.com/newtonjose/engenharia-software-spd/xml/filtrar-dados-xml + + + JSJ Dev + http://www.jsjdev.com + + + 2021 + + + + Creative Commons Attribution 4.0 International (CC BY 4.0) + + A atribuição deve conter, explicitamente, a seguinte + linha: + Copyright (c) 2016. Fábrica de Software - Instituto de + Informática (UFG) + + https://creativecommons.org/licenses/by/4.0/ + + + + + + newtonjose + Newton José + newtonjose@jsjdev.com + JSJ Dev + http://www.jsjdev.com + + + + + scm:git:https://github.com/newtonjose/engenharia-software-spd/xml/filtrar-dados-xml.git + + scm:git:https://github.com/newtonjose/engenharia-software-spd/xml/filtrar-dados-xml.git + + https://github.com/newtonjose/engenharia-software-spd/xml/filtrar-dados-xml + + + + 11 + ${java.version} + ${java.version} + UTF-8 + + com.github.newtonjose.pesquisa.application.Console + + + ${project.basedir}/tools + + 3.0.0 + 3.1.1 + 8.36.2 + 6.0.3 + 1.4.13 + 1.4.200 + 0.8.6 + 3.0.7 + 1.12.1 + 5.7.0 + 2.14.0 + 3.8.1 + 3.1.1 + 3.0.0 + 3.2.0 + 3.2.0 + 1.6.1 + 3.13.0 + 6.28.0 + 3.1.1 + 1.2.9 + 3.7.0.1746 + 4.1.3 + 2.22.2 + 1.10.1 + 1.4.16 + + + + + + org.codehaus.groovy + groovy-all + ${groovy.version} + pom + + + + com.thoughtworks.xstream + xstream + ${xstream.version} + + + + org.junit.jupiter + junit-jupiter + ${junit.versao} + test + + + + org.apache.logging.log4j + log4j-api + ${log4j2.version} + + + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + + + + + + org.apache.maven.plugins + maven-pmd-plugin + ${pmd.plugin.versao} + + + net.sourceforge.pmd + pmd-core + ${pmd.versao} + + + net.sourceforge.pmd + pmd-java + ${pmd.versao} + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.plugin.versao} + + + com.puppycrawl.tools + checkstyle + ${checkstyle.versao} + + + + + + + + filtrar-dados-xml + + + + org.codehaus.gmavenplus + gmavenplus-plugin + ${gmavenplus.version} + + + + execute + addSources + addTestSources + generateStubs + compile + generateTestStubs + compileTests + removeStubs + removeTestStubs + + + + + + org.codehaus.groovy + groovy-all + + ${groovy.version} + runtime + pom + + + + + + + + + + + com.github.spotbugs + spotbugs-maven-plugin + ${spotbugs-maven-plugin} + + + + org.apache.maven.plugins + maven-dependency-plugin + ${maven.dependency.plugin} + + + + org.apache.maven.plugins + maven-clean-plugin + 3.1.0 + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + + + org.apache.maven.plugins + maven-install-plugin + 2.5.2 + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.2 + + + + org.apache.maven.plugins + maven-site-plugin + 3.9.1 + + + + org.apache.maven.plugins + maven-resources-plugin + ${maven.resources.plugin} + + + + org.apache.maven.plugins + maven-antrun-plugin + ${antrun.version} + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.1 + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.plugin.versao} + + ${tools.dir}/checkstyle.xml + ${tools.dir}/checkstyle-suppressions.xml + 0 + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${surefire.versao} + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven.javadoc.plugin} + + public + + -html5 + + + + + + + + + org.codehaus.mojo + javancss-maven-plugin + 2.1 + + true + 11 + 20 + + + + + + + + org.sonarsource.scanner.maven + sonar-maven-plugin + ${sonar.versao} + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven.compiler.plugin} + + + + + + + + + + + + + org.apache.maven.plugins + maven-pmd-plugin + ${pmd.plugin.versao} + + true + utf-8 + 20 + 1.8 + + **/*Bean.java + **/generated/*.java + **/*Application.java + + + target/generated-sources/stubs + + + + category/java/multithreading.xml + category/java/performance.xml + category/java/security.xml + ${tools.dir}/pmd.xml + + + + + + org.codehaus.mojo + exec-maven-plugin + ${maven.exec.plugin} + + + + java + + + + + ${project.mainClass} + + + + + + + org.pitest + pitest-maven + ${pitest.version} + + + org.pitest + pitest-junit5-plugin + 0.12 + + + + 95 + + + + + + + + + + + + + + + org.owasp + dependency-check-maven + ${dependency.check.versao} + + + + aggregate + + + + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + ${project.info.reports.version} + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.1.1 + + + + javadoc-no-fork + test-javadoc-no-fork + + + + + + + org.codehaus.mojo + versions-maven-plugin + 2.7 + + + + dependency-updates-report + plugin-updates-report + property-updates-report + + + + + + + org.codehaus.mojo + javancss-maven-plugin + 2.1 + + true + 11 + 20 + + + + + org.apache.maven.plugins + maven-pmd-plugin + ${pmd.plugin.versao} + + true + utf-8 + 100 + + **/*Bean.java + **/generated/*.java + + + target/generated-sources/stubs + + + + category/java/multithreading.xml + category/java/performance.xml + category/java/security.xml + ${tools.dir}/pmd.xml + + + + + + org.codehaus.mojo + jdepend-maven-plugin + 2.0 + + + + org.apache.maven.plugins + maven-jxr-plugin + 3.0.0 + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.plugin.versao} + + + + checkstyle + + + + + + + + com.github.spotbugs + spotbugs-maven-plugin + ${spotbugs-maven-plugin} + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + + + report + + + + + + + + + + + + + + + + + + + start-h2 + + + com.h2database + h2 + ${h2.versao} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + + java + + + + + org.h2.tools.Server + + + -web + + -tcp + + -baseDir + target + + + -webPort + 8082 + + -browser + + + + + + + + + + + + + + start-shell-h2 + + + com.h2database + h2 + ${h2.versao} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + + java + + + + + org.h2.tools.Shell + + + + + + + + mutantes + + + + + + org.pitest + pitest + 1.5.0 + + + org.pitest + pitest-junit5-plugin + 0.12 + + + + + + com.github.newtonjose.exemplo.domain.Calendario + + + + com.github.newtonjose.exemplo.* + + + + + + + + + + docker + + + + com.spotify + dockerfile-maven-plugin + ${dockerfile-maven-plugin.version> + + + default + + build + push + + + + + spotify/foobar + ${project.version} + + target/filtrar-dados-xml-unico.jar + + + + + + + + + + + + owasp + + + + + + org.owasp + dependency-check-maven + ${dependency.check.versao} + + + + check + + + + + + + + + + + security + + + + + com.github.spotbugs + spotbugs-maven-plugin + ${spotbugs-maven-plugin} + + ${tools.dir}/spotbugs.xml + + Max + Low + true + + + com.h3xstream.findsecbugs + findsecbugs-plugin + ${findsecbugs-plugin.version} + + + + + + + + + + + + + io.snyk + snyk-maven-plugin + ${snyk.versao} + + + snyk-test + test + + test + + + + snyk-monitor + install + + monitor + + + + + ${snyk.token} + low + newtonjose + + + + + + + + + + + executavel-dir + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.1.1 + + + copy-dependencies + package + + copy-dependencies + + + runtime + + ${project.build.directory}/jars/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + executavel-unico + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.1 + + + package + + single + + + filtrar-dados-xml-unico + + + ${project.mainClass} + + + + + jar-with-dependencies + + + false + + + + + + + + + + + + + + cobertura + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + default-prepare-agent + + prepare-agent + + + + default-report + prepare-package + + report + + + + verificacao + + check + + + + + BUNDLE + + + LINE + COVEREDRATIO + 0.95 + + + + + + + + + + + + + + + release + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven.compiler.plugin} + + 1.8 + 1.8 + + + + -g:none + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.1.0 + + + package-sources + package + + jar + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.1.1 + + + package-javadoc + package + + jar + + + + + + + + + + + + + + deploy + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.1.1 + + public + + -html5 + + + + + package-javadoc + package + + jar + + + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.1.0 + + + package-sources + package + + jar-no-fork + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + ossrh + https://oss.sonatype.org/ + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + + + + + + + diff --git a/xml/filtrar-dados-xml/src/main/groovy/com/github/newtonjose/pesquisa/application/Console.groovy b/xml/filtrar-dados-xml/src/main/groovy/com/github/newtonjose/pesquisa/application/Console.groovy new file mode 100644 index 0000000..0dff3e3 --- /dev/null +++ b/xml/filtrar-dados-xml/src/main/groovy/com/github/newtonjose/pesquisa/application/Console.groovy @@ -0,0 +1,103 @@ +package com.github.newtonjose.pesquisa.application + +import com.github.newtonjose.pesquisa.domain.Curso + +import com.thoughtworks.xstream.XStream +import org.w3c.dom.Document +import org.w3c.dom.Element +import org.w3c.dom.NodeList +import org.xml.sax.SAXException + +import javax.xml.parsers.DocumentBuilder +import javax.xml.parsers.DocumentBuilderFactory +import javax.xml.parsers.ParserConfigurationException +import javax.xml.xpath.XPath +import javax.xml.xpath.XPathConstants +import javax.xml.xpath.XPathExpression +import javax.xml.xpath.XPathFactory + +class Console { + static def PATH = System.getenv("STATIC_DIR") + static def scanner = System.in.newReader() + static XPath xPath = XPathFactory.newInstance().newXPath() + static DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder() + static XStream xStream = new XStream() + + private static void pesquisaPorTexto(int op, Document documento) throws + SAXException { + + def filtro = "" + switch (op) { + case 1: + println "Insira o nome de um disciplina ou uma palavra:" + def disciplina = scanner.readLine() + filtro = "/universidade/curso[contains(disciplina," + + "'${disciplina.toUpperCase()}')]" + break + case 2: + println "Insira o nome de um curso ou um ano de criação:" + def nomeAno = scanner.readLine() + + if (nomeAno.toUpperCase().find($/[A-Z]+/$)) { + filtro = "/universidade/curso[contains(nome," + + "'${nomeAno.toUpperCase()}')]" + } else { + filtro = "/universidade/curso[ano>'${nomeAno as int}']" + } + break + case 3: + filtro = "/universidade/curso" + break + case 4: + System.exit(0) + break + default: + println "Nenhuma opção selecionada!" + } + + XPathExpression exp = xPath.compile(filtro) + + def lista = exp.evaluate(documento, XPathConstants.NODESET) as NodeList + if (lista.getLength()) { + for (int i = 0; i < lista.getLength(); i++) { + def el = lista.item(i) as Element + def curso = xStream.fromXML(el as String) as Curso + + println curso.toString() + } + } else { + println "Não existe nenhuma disciplina com este nome ou palavra." + } + } + + static void main(String[] args) { + assert System.getenv("STATIC_DIR") instanceof String + + xStream.alias("curso", Curso.class) + + // security issue + XStream.setupDefaultSecurity(xStream) + xStream.allowTypes(new Class[]{Curso.class}) + + try { + Document document = builder.parse(PATH) + + println "Selecione uma opção:\n" + + "1 - Pesquisar por texto\n" + + "2 - Pesquisar por número e texto\n" + + "3 - Listar todos os cursos\n" + + "4 - Sair" + + def opcao = scanner.readLine() as int + + pesquisaPorTexto(opcao, document) + + } catch (IOException ioe) { + System.err.println ioe.getMessage() + } catch (ParserConfigurationException pce) { + System.err.println pce.getMessage() + } catch (SAXException saxe) { + System.err.println saxe.getMessage() + } + } +} diff --git a/xml/filtrar-dados-xml/src/main/groovy/com/github/newtonjose/pesquisa/domain/Curso.groovy b/xml/filtrar-dados-xml/src/main/groovy/com/github/newtonjose/pesquisa/domain/Curso.groovy new file mode 100644 index 0000000..6212802 --- /dev/null +++ b/xml/filtrar-dados-xml/src/main/groovy/com/github/newtonjose/pesquisa/domain/Curso.groovy @@ -0,0 +1,15 @@ +package com.github.newtonjose.pesquisa.domain + +class Curso { + int iden + int ano + String nome + String disciplina + int ch + + @Override + String toString() { + return "Nome: " + nome + ", Iden: " + iden + ", Ano: " + ano + + ", Disciplina: " + disciplina + ", Ch: " + ch + } +} diff --git a/xml/filtrar-dados-xml/src/main/resources/log4j2.xml b/xml/filtrar-dados-xml/src/main/resources/log4j2.xml new file mode 100644 index 0000000..35a6a3c --- /dev/null +++ b/xml/filtrar-dados-xml/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/xml/filtrar-dados-xml/tools/README.md b/xml/filtrar-dados-xml/tools/README.md new file mode 100644 index 0000000..37a96c8 --- /dev/null +++ b/xml/filtrar-dados-xml/tools/README.md @@ -0,0 +1,3 @@ +# Configuração de ferramentas + +Arquivos que configuram ferramentas empregadas no processo de _build_. \ No newline at end of file diff --git a/xml/filtrar-dados-xml/tools/checkstyle-suppressions.xml b/xml/filtrar-dados-xml/tools/checkstyle-suppressions.xml new file mode 100644 index 0000000..64aa5c0 --- /dev/null +++ b/xml/filtrar-dados-xml/tools/checkstyle-suppressions.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/xml/filtrar-dados-xml/tools/checkstyle.xml b/xml/filtrar-dados-xml/tools/checkstyle.xml new file mode 100644 index 0000000..bb3594b --- /dev/null +++ b/xml/filtrar-dados-xml/tools/checkstyle.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xml/filtrar-dados-xml/tools/pmd.xml b/xml/filtrar-dados-xml/tools/pmd.xml new file mode 100644 index 0000000..71d1e39 --- /dev/null +++ b/xml/filtrar-dados-xml/tools/pmd.xml @@ -0,0 +1,291 @@ + + + + + + Configuração do PMD para o projeto. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xml/filtrar-dados-xml/tools/spotbugs.xml b/xml/filtrar-dados-xml/tools/spotbugs.xml new file mode 100644 index 0000000..18a47f4 --- /dev/null +++ b/xml/filtrar-dados-xml/tools/spotbugs.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file