commit d6e3bc82caf903264c0deff0acdd78f295b555ea Author: fabiorj Date: Sat Dec 4 12:15:25 2021 -0300 commit inicial diff --git a/jrimum-bopepo/.gitignore b/jrimum-bopepo/.gitignore new file mode 100644 index 0000000..700e479 --- /dev/null +++ b/jrimum-bopepo/.gitignore @@ -0,0 +1,6 @@ +/bin +/target +.classpath +.DS_Store +.project +.settings \ No newline at end of file diff --git a/jrimum-bopepo/CHANGELOG.md b/jrimum-bopepo/CHANGELOG.md new file mode 100644 index 0000000..5220641 --- /dev/null +++ b/jrimum-bopepo/CHANGELOG.md @@ -0,0 +1,75 @@ +Bopepo Changelog +==================================================== + +0.2.3 (2014/02/01) main release GitHub +---------------------------------------------------------------------- + +**Improvement** + + * #1: Mudar passagem de parâmetros bancários de string para enum + * #2: Colocar complemento do endereço do sacado como campo padrão no boleto + * #4: Novo Banco: BRB + * #5: Novo enum com todos os campos padrões do boleto + * #6: Atualizar templates dos boletos em função da nova nomenclatura BACEN + * #7: Substituir funções de texto do utilix por similar em texgit + * #8: Inserir meta-dados realcionados ao PDF + * #9: Campos formatados em função do padrão de cada Banco + * #11: Novo Banco: CECRED + + +0.2.3-SNAPSHOT (2011-02-09) TracSVN +---------------------------------------------------------------------- + +**Fix** + + * #25: Implementação BANCO SANTANDER S.A. - Correção do uso de dígitos verificadores. + * #13: Banco Real - Mudança do número do documento pelo nosso número + +**Improvement** + + * #54: Implementação Campo Livre SICOB - CEF + * #58: Bancoob + * Novas formas de processamento em lote + * Novas formas para definição de template + * Opção de definição de compressão do PDF + * Classe para geração isolada de código de barras + * Classe para geração de pdfs estilo relatório + + +0.3-Litio-GeracaoGuia-VersaoAvaliacao-2011-04-14 (2011/04/14) TracSVN +---------------------------------------------------------------------- + + * Ajustes construtores de OrgaoRecebedor e Arrecadacao, que sofreram ajustes básicos nos parâmetros. + * Novo exemplo MinhaPrimeiraGuiaASerPagaEmVariosBancos. + + +0.2.3-SNAPSHOT (2011-02-09) TracSVN +---------------------------------------------------------------------- + +**Improvement** + + * Novo Banco: Banco do Nordeste + * Novo Boleto: Banco do Brasil convênio 7 dígitos nosso número 17 dígitos. + + +0.3-Litio-GeracaoGuia-VersaoAvaliacao-2010-09-17 (2010/09/17) TracSVN +---------------------------------------------------------------------- + +0.3-Litio-GeracaoGuia-VersaoAvaliacao-2010-09-09 (2010/09/09) TracSVN +---------------------------------------------------------------------- + +0.3-Litio-GeracaoGuia-VersaoAvaliacao-2010-06-10 (2010/06/10) TracSVN +---------------------------------------------------------------------- + +0.2.2 (2009/10/18) main release TracSVN +---------------------------------------------------------------------- + +0.2.1-INC2X (2008/11/13) incubation TracSVN +---------------------------------------------------------------------- + +0.2.1-INC2 (2008/07/15) incubation TracSVN +---------------------------------------------------------------------- + +0.2.1-INC (2008/06/15) incubation TracSVN +---------------------------------------------------------------------- + \ No newline at end of file diff --git a/jrimum-bopepo/LICENSE b/jrimum-bopepo/LICENSE new file mode 100644 index 0000000..37ec93a --- /dev/null +++ b/jrimum-bopepo/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/jrimum-bopepo/README.md b/jrimum-bopepo/README.md new file mode 100644 index 0000000..c15fa6d --- /dev/null +++ b/jrimum-bopepo/README.md @@ -0,0 +1,8 @@ +Bopepo +====== + +[![Build Status](https://ci-jrimum.rhcloud.com/buildStatus/icon?job=Bopepo)](https://ci-jrimum.rhcloud.com) + +Biblioteca Java para geração de boletos bancários. + + * http://jrimum.org/bopepo diff --git a/jrimum-bopepo/pom.xml b/jrimum-bopepo/pom.xml new file mode 100644 index 0000000..dc4282a --- /dev/null +++ b/jrimum-bopepo/pom.xml @@ -0,0 +1,263 @@ + + + 4.0.0 + br.com.rjconsultores + jrimum-bopepo + jar + Projeto Bopepo + 1.0.0 + Projeto open source de componentes de software para o domínio de negócios do Brasil. + http://www.jrimum.org/bopepo + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + Projeto JRimum + http://www.jrimum.org + + + + http://github.com/jrimum/bopepo/issues + GitHub + + + + http://github.com/jrimum/bopepo + + + + + Gilmar P. S. L. + gilmatryx@gmail.com + + + Misael Barreto + misaelbarreto@gmail.com + + + Rômulo Augusto + romulomail@gmail.com + + + + + UTF-8 + UTF-8 + + + + + disable-java8-doclint + + [1.8,) + + + -Xdoclint:none + + + + + + + + + src/main/resources + + **/*.odt + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.5 + 1.5 + + + + org.codehaus.mojo + animal-sniffer-maven-plugin + 1.6 + + + org.codehaus.mojo.signature + java18 + 1.0 + + + + + animal-sniffer + compile + + check + + + + + + maven-assembly-plugin + 2.4 + + + src/main/assembly/jrimum-bopepo-with-dependencies.xml + src/main/assembly/jrimum-bopepo-with-dependencies-src.xml + src/main/assembly/jrimum-bopepo-examples.xml + + + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + false + + org/jrimum/bopepo/**/* + + + org/jrimum/bopepo/excludes/**/* + org/jrimum/bopepo/**/*$* + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + package + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadoc + package + + jar + + + + + UTF-8 + UTF-8 + true + private + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.1 + + + + + + + + br.com.rjconsultores + jrimum-domkee + 1.0.0 + + + br.com.rjconsultores + jrimum-texgit + 1.0.0 + + + com.lowagie + itext + 2.0.8 + + + bouncycastle + bcmail-jdk14 + + + bouncycastle + bcprov-jdk14 + + + bouncycastle + bctsp-jdk14 + + + + + + com.itextpdf + itextpdf + 5.4.5 + test + + + com.google.guava + guava-jdk5 + 14.0.1 + test + + + org.hamcrest + hamcrest-all + 1.3 + test + + + org.mockito + mockito-all + 1.9.5 + test + + + commons-io + commons-io + 2.4 + test + + + junit + junit + 4.11 + test + + + + + + rj-releases + http://52.5.53.15:8081/nexus/content/repositories/releases/ + + + \ No newline at end of file diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoCarne3PorPagina.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoCarne3PorPagina.java new file mode 100644 index 0000000..f9976d3 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoCarne3PorPagina.java @@ -0,0 +1,158 @@ +package org.jrimum.bopepo.exemplo; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.pdf.Files; +import org.jrimum.bopepo.view.BoletoViewer; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.utilix.ClassLoaders; +import org.jrimum.utilix.Exceptions; + +import com.lowagie.text.Document; +import com.lowagie.text.DocumentException; +import com.lowagie.text.pdf.PdfContentByte; +import com.lowagie.text.pdf.PdfImportedPage; +import com.lowagie.text.pdf.PdfReader; +import com.lowagie.text.pdf.PdfWriter; + +/** + * Exemplo de boleto no estilo carnê com três boletos em uma página. + * + * @author Rômulo Augusto + */ +public class BoletoCarne3PorPagina { + + public static void main(String[] args) throws DocumentException, IOException { + + Boleto boletoBBNossoNumero10 = crieBoletoBBNossoNumero10(); + Boleto boletoBradesco = crieBoletoBradesco(); + + List boletos = new ArrayList(); + boletos.add(boletoBBNossoNumero10); + boletos.add(boletoBradesco); + boletos.add(boletoBBNossoNumero10); + boletos.add(boletoBradesco); + boletos.add(boletoBBNossoNumero10); + boletos.add(boletoBBNossoNumero10); + boletos.add(boletoBradesco); + boletos.add(boletoBBNossoNumero10); + + //Informando o template personalizado: + File templatePersonalizado = new File(ClassLoaders.getResource("/templates/BoletoCarne3PorPagina.pdf").getFile()); + + File boletosPorPagina = groupInPages(boletos, "Carne3PorPagina.pdf", templatePersonalizado); + + Exemplos.mostreBoletoNaTela(boletosPorPagina); + } + + private static File groupInPages(List boletos, String filePath, File templatePersonalizado) { + + File arq = null; + BoletoViewer boletoViewer = new BoletoViewer(boletos.get(0)); + boletoViewer.setTemplate(templatePersonalizado); + + List boletosEmBytes = new ArrayList(boletos.size()); + + for (Boleto bop : boletos) { + boletosEmBytes.add(boletoViewer.setBoleto(bop).getPdfAsByteArray()); + } + + try { + + arq = Files.bytesToFile(filePath, mergeFilesInPages(boletosEmBytes)); + + } catch (Exception e) { + Exceptions.throwIllegalStateException("Erro durante geração do PDF! Causado por " + e.getLocalizedMessage(), e); + } + + return arq; + } + + private static Boleto crieBoletoBBNossoNumero10() { + + Titulo titulo = Exemplos.crieTitulo(); + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567)); + contaBancaria.setCarteira(new Carteira(12)); + + titulo.setNossoNumero("1234567890"); + + Boleto boletoBBNossoNumero10 = Exemplos.crieBoleto(titulo); + + return boletoBBNossoNumero10; + } + + private static Boleto crieBoletoBradesco() { + + Titulo titulo = Exemplos.crieTitulo(); + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + contaBancaria.setBanco(BancosSuportados.BANCO_BRADESCO.create()); + contaBancaria.setAgencia(new Agencia(1234)); + contaBancaria.setCarteira(new Carteira(12)); + titulo.setNossoNumero("01234567891"); + contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567)); + + Boleto boletoBradesco = Exemplos.crieBoleto(titulo); + + return boletoBradesco; + } + + public static byte[] mergeFilesInPages(List pdfFilesAsByteArray) throws DocumentException, IOException { + + Document document = new Document(); + ByteArrayOutputStream byteOS = new ByteArrayOutputStream(); + + PdfWriter writer = PdfWriter.getInstance(document, byteOS); + + document.open(); + + PdfContentByte cb = writer.getDirectContent(); + float positionAnterior = 0; + + for (byte[] in : pdfFilesAsByteArray) { + + PdfReader reader = new PdfReader(in); + + for (int i = 1; i <= reader.getNumberOfPages(); i++) { + + float documentHeight = cb.getPdfDocument().getPageSize().getHeight(); + + //import the page from source pdf + PdfImportedPage page = writer.getImportedPage(reader, i); + float pagePosition = positionAnterior; + + if ( (documentHeight - positionAnterior) <= page.getHeight()) { + document.newPage(); + pagePosition = 0; + positionAnterior = 0; + } + + //add the page to the destination pdf + cb.addTemplate(page, 0, pagePosition); + + positionAnterior += page.getHeight(); + } + } + + byteOS.flush(); + document.close(); + + byte[] arquivoEmBytes = byteOS.toByteArray(); + byteOS.close(); + + return arquivoEmBytes; + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoComSacadorAvalista.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoComSacadorAvalista.java new file mode 100644 index 0000000..463e7f6 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoComSacadorAvalista.java @@ -0,0 +1,92 @@ +package org.jrimum.bopepo.exemplo; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.domkee.comum.pessoa.endereco.CEP; +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + * Exemplo de código para geração de um boleto simples com Sacador Avalista. + * + *

+ * Baseado no {@linkplain org.jrimum.bopepo.exemplo.MeuPrimeiroBoleto}. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public class BoletoComSacadorAvalista extends MeuPrimeiroBoleto{ + + /** + * Executa o exemplo. + * + * @param args + */ + public static void main(String[] args) { + + new BoletoComSacadorAvalista().exemplo(); + } + + /** + * Cria um boleto com sacador avalista, em passos distintos, com os dados necessários para a visualização. + * + * @return boleto com dados + */ + @Override + Boleto crieUmBoleto() { + + /* + * PASSO 1: Faça o mesmo que se fez em MeuPrimeiroBoleto. + */ + ContaBancaria contaBancaria = crieUmaContaBancaria(); + Cedente cedente = crieUmCedente(); + Sacado sacado = crieUmSacado(); + + /* + * PASSO 2: Informe os dados do Sacador Avalista. + */ + SacadorAvalista sacadorAvalista = crieUmSacadorAvalista(); + + /* + * PASSO 3: Crie um novo título/cobrança e informe os dados. + */ + Titulo titulo = crieOsDadosDoNovoTitulo(new Titulo(contaBancaria,sacado,cedente,sacadorAvalista)); + + /* + * PASSO 4: Crie o boleto e informe os dados necessários do mesmo jeito. + */ + Boleto boleto = crieOsDadosDoNovoBoleto(new Boleto(titulo)); + + return boleto; + } + + /** + * Cria uma instância de sacador avalista com os principais dados para o boleto. + * + * @return sacadorAvalista com os dados necssários + */ + private final SacadorAvalista crieUmSacadorAvalista() { + + SacadorAvalista sacadorAvalista = new SacadorAvalista("JRimum Enterprise", "00.000.000/0001-91"); + + // Informando o endereço do sacador avalista. + Endereco enderecoSacAval = new Endereco(); + enderecoSacAval.setUF(UnidadeFederativa.DF); + enderecoSacAval.setLocalidade("Brasília"); + enderecoSacAval.setCep(new CEP("70150-903")); + enderecoSacAval.setBairro("Grande Centro"); + enderecoSacAval.setLogradouro("Rua Eternamente Principal"); + enderecoSacAval.setNumero("001"); + sacadorAvalista.addEndereco(enderecoSacAval); + + return sacadorAvalista; + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/CampoLivreJRimumBank.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/CampoLivreJRimumBank.java new file mode 100644 index 0000000..49a24e1 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/CampoLivreJRimumBank.java @@ -0,0 +1,117 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 01/11/2010 - 10:30:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 01/11/2010 - 10:30:00 + * + */ +package org.jrimum.bopepo.exemplo; + +import static org.jrimum.texgit.type.component.Fillers.ZERO_LEFT; + +import org.jrimum.bopepo.campolivre.CampoLivre; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.FixedField; + +/** + *

+ * Campo Livre fictício para usar junto com o JRimumBank. + * Como todo campo livre, deve possuir o tamanho de 25 dígitos. + *

+ *

+ * O campo livre é, geralmente, formado através de dados do título. Assim, essa implementação + * recebe um título através de seu construtor. + *

+ * Segue abaixo o layout desse campo livre fictício: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo
20-2569 (6)Código da conta (sem o dígito)
26-2949 (4)Código da agência (sem o dígito)
30-3569 (6)ZEROS
36-4499 (9)Nosso número (sem o dígito)
+ * + * @author Rômulo Augusto + * @author Misael Barreto + * + */ +public class CampoLivreJRimumBank implements CampoLivre { + + private static final long serialVersionUID = 338556606717660573L; + + private Titulo titulo; + + public CampoLivreJRimumBank(Titulo titulo) { + this.titulo = titulo; + } + + + public void read(String g) { + //Sem leitura + } + + public String write() { + + ContaBancaria conta = titulo.getContaBancaria(); + + FixedField fieldConta = new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, ZERO_LEFT); + FixedField fieldAgencia = new FixedField(conta.getAgencia().getCodigo(), 4, ZERO_LEFT); + FixedField fieldZeros = new FixedField(0, 6, ZERO_LEFT); + FixedField fieldNossoNumero = new FixedField(titulo.getNossoNumero(), 9); + + return fieldConta.write() + fieldAgencia.write() + fieldZeros.write() + fieldNossoNumero.write(); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/Exemplos.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/Exemplos.java new file mode 100644 index 0000000..2ff9200 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/Exemplos.java @@ -0,0 +1,365 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 18/05/2008 - 21:15:39 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 18/05/2008 - 21:15:39 + * + */ + +package org.jrimum.bopepo.exemplo; + +import java.io.File; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.BoletoViewer; +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite; +import org.jrimum.utilix.Exceptions; + +/** + * Classe utilitária para criação de objetos necessários para geração dos + * boletos de exemplo. + * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class Exemplos { + + /** + * Utility class pattern: classe não instanciável + * + * @throws AssertionError Caso haja alguma tentativa de utilização deste construtor. + */ + private Exemplos() { + Exceptions.throwIllegalStateException("Instanciação não permitida!"); + } + + /** + *

+ * Devolve uma lista com mais de um boleto. + *

+ * + * @return List + * + * @since 0.2 + */ + public static List getVariosBoletos() { + + List boletos = new ArrayList(5); + + Titulo titulo; + + final Date VENCIMENTO = new GregorianCalendar(2000, Calendar.JULY, 3).getTime(); + + final Date DATA_DO_DOCUMENTO = new GregorianCalendar(2000, Calendar.APRIL, 14).getTime(); + + Sacado sacado = crieSacado(); + + Cedente cedente = crieCedente(); + + ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_DO_BRASIL.create()); + + contaBancaria.setAgencia(new Agencia(1234, "7")); + contaBancaria.setCarteira(new Carteira(5)); + contaBancaria.setNumeroDaConta(new NumeroDaConta(6789, "12")); + + cedente.addContaBancaria(contaBancaria); + + SacadorAvalista sacadorAvalista = crieSacadorAvalista(); + + // Fim Código em teste + titulo = new Titulo(contaBancaria,sacado, cedente, sacadorAvalista); + titulo.setNumeroDoDocumento("123456789"); + titulo.setNossoNumero("1234567890"); + titulo.setDigitoDoNossoNumero("5"); + titulo.setValor(BigDecimal.valueOf(100.23)); + titulo.setDataDoDocumento(DATA_DO_DOCUMENTO); + titulo.setDataDoVencimento(VENCIMENTO); + titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL); + titulo.setAceite(Aceite.A); + + Boleto b1,b2,b3,b4,b5; + b1 = new Boleto(titulo); + + b1.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento."); + b1.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado é injusto e esperamos seu pagamento assim mesmo."); + b1.setInstrucao1("PARA PAGAMENTO 1 "); + b1.getTitulo().getSacado().setNome("Misael Martins Motriz"); + + b2 = new Boleto(titulo); + + b2.setLocalPagamento(b1.getLocalPagamento()); + b2.setInstrucaoAoSacado(b1.getInstrucaoAoSacado()); + b2.setInstrucao1("PARA PAGAMENTO 2 "); + b2.getTitulo().getSacado().setNome("Samuca Meu Carro"); + + b3 = new Boleto(titulo); + + b3.setLocalPagamento(b1.getLocalPagamento()); + b3.setInstrucaoAoSacado(b1.getInstrucaoAoSacado()); + b3.setInstrucao1("PARA PAGAMENTO 3 "); + b3.getTitulo().getSacado().setNome("Romulo O Namorador"); + + b4 = new Boleto(titulo); + + b4.setLocalPagamento(b1.getLocalPagamento()); + b4.setInstrucaoAoSacado(b1.getInstrucaoAoSacado()); + b4.setInstrucao1("PARA PAGAMENTO 4 "); + b1.getTitulo().getSacado().setNome("Michelx E Seus Irmãos"); + + b5 = new Boleto(titulo); + + b5.setLocalPagamento(b1.getLocalPagamento()); + b5.setInstrucaoAoSacado(b1.getInstrucaoAoSacado()); + b5.setInstrucao1("PARA PAGAMENTO 5 "); + b5.getTitulo().getSacado().setNome("É o doido o que sobrescreveu."); + + boletos.add(b1); + boletos.add(b2); + boletos.add(b3); + boletos.add(b4); + boletos.add(b5); + + return boletos; + } + + /** + * Cria uma conta bancária com dados padrão. Esta contabancária não tem banco definido. + * + * @return + */ + public static ContaBancaria crieContaBancaria() { + + ContaBancaria contaBancaria = new ContaBancaria(); + + Agencia agencia = new Agencia(1234, "0"); + contaBancaria.setAgencia(agencia); + + NumeroDaConta numeroDaConta = new NumeroDaConta(123456, "0"); + contaBancaria.setNumeroDaConta(numeroDaConta); + + contaBancaria.setCarteira(new Carteira(1)); + + return contaBancaria; + } + + /** + * Cria um cedente com dados padrão. + * + * @return + */ + public static Cedente crieCedente() { + + Cedente cedente = new Cedente("PROJETO JRimum", "00.000.208/0001-00"); + + cedente.addContaBancaria(crieContaBancaria()); + + return cedente; + } + + /** + * Cria um Sacado com dados padrão. + * + * @return + */ + public static Sacado crieSacado() { + + Sacado sacado = new Sacado("JRimum Developer", "111.111.111-11"); + + Endereco endereco = new Endereco(); + endereco.setUF(UnidadeFederativa.RN); + endereco.setLocalidade("Natal"); + endereco.setCep("59064-120"); + endereco.setBairro("Centro"); + endereco.setLogradouro("Rua JRimum"); + endereco.setNumero("2332"); + + sacado.addEndereco(endereco); + + return sacado; + } + + /** + * Cria um Sacador Avalista padrão. + * + * @return + */ + public static SacadorAvalista crieSacadorAvalista() { + + SacadorAvalista sacadorAvalista = new SacadorAvalista("JavaRN", "00.000.000/0001-91"); + + Endereco endereco = new Endereco(); + endereco.setUF(UnidadeFederativa.PB); + endereco.setLocalidade("João Pessoa"); + endereco.setCep("59064-120"); + endereco.setBairro("Centro"); + endereco.setLogradouro("Rua JRimum Paraiba"); + endereco.setNumero("3223"); + + sacadorAvalista.addEndereco(endereco); + + return sacadorAvalista; + } + + /** + * Cria um título com dados padrão. + * + * @return + */ + public static Titulo crieTitulo() { + return crieTitulo(crieCedente(), crieSacado(), crieSacadorAvalista()); + } + + /** + * Cria um título com dados padrão sem sacador avalista. + * + * @return + */ + public static Titulo crieTituloSemSacadorAvalista() { + return crieTitulo(crieCedente(), crieSacado(), null); + } + + /** + * Cria um título a partir de um cedente, um sacado e um sacador avalista. + * + * @param cedente + * @param sacado + * @param sacadorAvalista + * @return + */ + public static Titulo crieTitulo(Cedente cedente, Sacado sacado, SacadorAvalista sacadorAvalista) { + + ContaBancaria contaBancariaDoCedente = cedente.getContasBancarias().iterator().next(); + Titulo titulo = null; + + if (sacadorAvalista != null) { + titulo = new Titulo(contaBancariaDoCedente, sacado, cedente, sacadorAvalista); + + } else { + titulo = new Titulo(contaBancariaDoCedente, sacado, cedente); + } + + titulo.setNumeroDoDocumento("123465"); + titulo.setNossoNumero("1"); + titulo.setDigitoDoNossoNumero("0"); + titulo.setValor(BigDecimal.TEN); + titulo.setDataDoDocumento(new Date()); + titulo.setDataDoVencimento(new Date()); + titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL); + titulo.setAceite(Aceite.A); + titulo.setDesconto(BigDecimal.ONE); + + return titulo; + } + + /** + * Cria um boleto a partir de um título. Para as informações extras, como instruções, + * é configurado um texto padrão. + * + * @param titulo + * @return + */ + public static Boleto crieBoleto(Titulo titulo) { + + Boleto boleto = new Boleto(titulo); + + boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento."); + + boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado não é o esperado, aproveite o DESCONTÃO!"); + + boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!"); + boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!"); + boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre."); + boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00"); + boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00"); + boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00"); + boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!"); + boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X."); + + return boleto; + } + + /** + * Gera o boleto. + * + * @param boleto + */ + public static void execute(Boleto boleto) { + execute(boleto, null); + } + + public static void executeComTemplate(Boleto boleto, File template) { + execute(boleto, template); + } + + /** + * Abre o arquivo no aplicativo padrão do sistema. + * + * @param arquivoBoleto + */ + public static void mostreBoletoNaTela(File arquivoBoleto) { + + try { + // Descomente se estiver usando java 6 ou superior + // java.awt.Desktop.getDesktop().open(arquivoBoleto); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void execute(Boleto boleto, File template) { + + BoletoViewer viewer = new BoletoViewer(boleto); + + if (template != null) { + viewer.setTemplate(template); + } + + File boletoPDF = viewer.getPdfAsFile("BOLETO_" + boleto.getClass().getSimpleName().toUpperCase() + ".PDF"); + + mostreBoletoNaTela(boletoPDF); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/JRimumBank.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/JRimumBank.java new file mode 100644 index 0000000..b4c19b2 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/JRimumBank.java @@ -0,0 +1,52 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 01/11/2010 - 09:37:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 01/11/2010 - 09:37:00 + * + */ +package org.jrimum.bopepo.exemplo; + +import javax.swing.ImageIcon; + +import org.jrimum.domkee.comum.pessoa.id.cprf.CNPJ; +import org.jrimum.domkee.financeiro.banco.febraban.Banco; +import org.jrimum.domkee.financeiro.banco.febraban.CodigoDeCompensacaoBACEN; +import org.jrimum.utilix.ClassLoaders; + +/** + * Banco fictício usado para exemplos genéricos. + * + * @author Rômulo Augusto + * @author Misael Barreto + * + */ +public class JRimumBank extends Banco { + + public JRimumBank() { + super(new CodigoDeCompensacaoBACEN("999"), "JRimum Bank", new CNPJ("02756617000167"), + "Banco Múltiplo", new ImageIcon(ClassLoaders.getResource("/img/999.png")).getImage()); + } +} \ No newline at end of file diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoleto.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoleto.java new file mode 100644 index 0000000..9e22580 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoleto.java @@ -0,0 +1,270 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 01/11/2010 - 09:37:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 01/11/2010 - 09:37:00 + * + */ +package org.jrimum.bopepo.exemplo; + +import java.io.File; +import java.math.BigDecimal; +import java.util.Date; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.BoletoViewer; +import org.jrimum.domkee.comum.pessoa.endereco.CEP; +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite; + +/** + * Exemplo de código para geração de um boleto simples. + * + *

+ * Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class MeuPrimeiroBoleto { + + /** + * Executa o exemplo. + * + * @param args + */ + public static void main(String[] args) { + + new MeuPrimeiroBoleto().exemplo(); + } + + /** + * Um simples exemplo de como gerar um boleto. + */ + final void exemplo() { + + /* + * Para gerar um boleto é preciso dos dados do boleto e de um + * visualizador de boletos. + */ + + /* + * Primeiro crie os dados do boleto. + */ + Boleto boleto = crieUmBoleto(); + + /* + * Em seguida, basta criar um visualizador para o boleto. + */ + BoletoViewer boletoViewer = new BoletoViewer(boleto); + + /* + * Depois, gere um arquivo, byte array ou stream. Nesse exemplo, um + * arquivo será salvo na mesma pasta do seu "projeto" + */ + + // Exemplos de uso: + // WINDOWS: boletoViewer.getAsPDF("C:/Temp/MeuBoleto.pdf"); + // LINUX: boletoViewer.getAsPDF("/home/temp/MeuBoleto.pdf"); + File arquivoPdf = boletoViewer.getPdfAsFile("MeuPrimeiroBoleto.pdf"); + + // Agora veja o arquivo gerado na tela. + mostreBoletoNaTela(arquivoPdf); + + } + + /** + * Cria um boleto, em passos distintos, com os dados necessários para a visualização. + * + * @return boleto com dados + */ + Boleto crieUmBoleto() { + + /* + * PASSO 1: Você precisa dos dados de uma conta bancária habilitada para + * emissão de boletos. + */ + ContaBancaria contaBancaria = crieUmaContaBancaria(); + + /* + * PASSO 2: Informe os dados do cedente. + */ + Cedente cedente = crieUmCedente(); + + /* + * PASSO 3: Informe os dados do Sacado. + */ + Sacado sacado = crieUmSacado(); + + /* + * PASSO 4: Crie um novo título/cobrança e informe os dados. + */ + Titulo titulo = crieOsDadosDoNovoTitulo(new Titulo(contaBancaria,sacado,cedente)); + + /* + * PASSO 5: Crie o boleto e informe os dados necessários. + */ + Boleto boleto = crieOsDadosDoNovoBoleto(new Boleto(titulo)); + + return boleto; + } + + /** + * Preenche os principais dados do boleto. + * + * @param boleto + * @return boleto com os dados necssários + */ + final Boleto crieOsDadosDoNovoBoleto(Boleto boleto) { + + boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento."); + boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado não é o esperado, aproveite o DESCONTÃO!"); + boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!"); + boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!"); + boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre."); + boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00"); + boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00"); + boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00"); + boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!"); + boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X."); + + return boleto; + } + + /** + * Preenche os principais dados do título. + * + * @param titulo + * + * @return título com os dados necssários + */ + final Titulo crieOsDadosDoNovoTitulo(Titulo titulo) { + + /* + * DADOS BÁSICOS. + */ + + titulo.setNumeroDoDocumento("123456"); + titulo.setNossoNumero("99345678912"); + titulo.setDigitoDoNossoNumero("5"); + titulo.setValor(BigDecimal.valueOf(0.23)); + + // Para informar a data de maneira simples você pode utilizar as + // classes utilitárias do JRimum. Abaixo temos alguns exemplos: + // (1) titulo.setDataDoVencimento( DateFormat.DDMMYYYY_B.parse("11/03/2011") ); + // (2) titulo.setDataDoVencimento( Dates.parse("11/03/2011", "dd/MM/yyyy") ); + titulo.setDataDoDocumento(new Date()); + titulo.setDataDoVencimento(new Date()); + + titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL); + titulo.setAceite(Aceite.A); + titulo.setDesconto(new BigDecimal(0.05)); + titulo.setDeducao(BigDecimal.ZERO); + titulo.setMora(BigDecimal.ZERO); + titulo.setAcrecimo(BigDecimal.ZERO); + titulo.setValorCobrado(BigDecimal.ZERO); + + return titulo; + } + + /** + * Cria uma instância de sacado com os principais dados para o boleto. + * + * @return sacado com os dados necssários + */ + final Sacado crieUmSacado() { + + Sacado sacado = new Sacado("Java Developer Pronto Para Férias", "222.222.222-22"); + + // Informando o endereço do sacado. + Endereco enderecoSac = new Endereco(); + enderecoSac.setUF(UnidadeFederativa.RN); + enderecoSac.setLocalidade("Natal"); + enderecoSac.setCep(new CEP("59064-120")); + enderecoSac.setBairro("Grande Centro"); + enderecoSac.setLogradouro("Rua poeta dos programas"); + enderecoSac.setNumero("1"); + sacado.addEndereco(enderecoSac); + + return sacado; + } + + /** + * Cria uma instância de cedente com os principais dados para o boleto. + * + * @return cedente com os dados necssários + */ + final Cedente crieUmCedente() { + + return new Cedente("Projeto JRimum", "00.000.208/0001-00"); + } + + /** + * Cria uma instância de conta bancária com os principais dados para o + * boleto em questão (Banco Bradesco). + * + * @return conta com os dados necssários + */ + final ContaBancaria crieUmaContaBancaria(){ + + ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_BRADESCO.create()); + contaBancaria.setNumeroDaConta(new NumeroDaConta(123456, "0")); + contaBancaria.setCarteira(new Carteira(30)); + contaBancaria.setAgencia(new Agencia(1234, "1")); + + return contaBancaria; + } + + /** + * Exibe o arquivo na tela. + * + * @param arquivoBoleto + */ + final void mostreBoletoNaTela(File arquivoBoleto) { + + try { + // Descomente se estiver usando java 6 ou superior + // java.awt.Desktop.getDesktop().open(arquivoBoleto); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoBancoNaoSuportado.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoBancoNaoSuportado.java new file mode 100644 index 0000000..7dc4bcf --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoBancoNaoSuportado.java @@ -0,0 +1,197 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 01/11/2010 - 09:37:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 01/11/2010 - 09:37:00 + * + */ +package org.jrimum.bopepo.exemplo; + +import java.io.File; +import java.math.BigDecimal; +import java.util.Date; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.campolivre.CampoLivre; +import org.jrimum.bopepo.view.BoletoViewer; +import org.jrimum.domkee.comum.pessoa.endereco.CEP; +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa; +import org.jrimum.domkee.financeiro.banco.Banco; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite; + +/** + *

+ * Exemplo de código para geração de um boleto simples. + *

+ *

+ * Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class MeuPrimeiroBoletoBancoNaoSuportado { + + public static void main(String[] args) { + + /* + * INFORMANDO DADOS SOBRE O CEDENTE. + */ + Cedente cedente = new Cedente("PROJETO JRimum", "00.000.208/0001-00"); + + /* + * INFORMANDO DADOS SOBRE O SACADO. + */ + Sacado sacado = new Sacado("JavaDeveloper Pronto Para Férias", "222.222.222-22"); + + // Informando o endereço do sacado. + Endereco enderecoSac = new Endereco(); + enderecoSac.setUF(UnidadeFederativa.RN); + enderecoSac.setLocalidade("Natal"); + enderecoSac.setCep(new CEP("59064-120")); + enderecoSac.setBairro("Grande Centro"); + enderecoSac.setLogradouro("Rua poeta dos programas"); + enderecoSac.setNumero("1"); + sacado.addEndereco(enderecoSac); + + /* + * INFORMANDO DADOS SOBRE O SACADOR AVALISTA. + */ + SacadorAvalista sacadorAvalista = new SacadorAvalista("JRimum Enterprise", "00.000.000/0001-91"); + + // Informando o endereço do sacador avalista. + Endereco enderecoSacAval = new Endereco(); + enderecoSacAval.setUF(UnidadeFederativa.DF); + enderecoSacAval.setLocalidade("Brasília"); + enderecoSacAval.setCep(new CEP("59000-000")); + enderecoSacAval.setBairro("Grande Centro"); + enderecoSacAval.setLogradouro("Rua Eternamente Principal"); + enderecoSacAval.setNumero("001"); + sacadorAvalista.addEndereco(enderecoSacAval); + + /* + * INFORMANDO OS DADOS SOBRE O TÍTULO. + */ + // RECURSO PONTO DE EXTENSÃO: + // Informando um banco que AINDA não é suportado nativamente pelo componente. + Banco banco = new JRimumBank(); + + + + // Informando dados sobre a conta bancária do título. + ContaBancaria contaBancaria = new ContaBancaria(banco); + contaBancaria.setNumeroDaConta(new NumeroDaConta(123456, "0")); + contaBancaria.setCarteira(new Carteira(30)); + contaBancaria.setAgencia(new Agencia(1234, "1")); + + Titulo titulo = new Titulo(contaBancaria, sacado, cedente, sacadorAvalista); + titulo.setNumeroDoDocumento("123456"); + titulo.setNossoNumero("993456789"); + titulo.setDigitoDoNossoNumero("5"); + titulo.setValor(BigDecimal.valueOf(0.23)); + titulo.setDataDoDocumento(new Date()); + titulo.setDataDoVencimento(new Date()); + titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL); + titulo.setAceite(Aceite.A); + titulo.setDesconto(new BigDecimal(0.05)); + titulo.setDeducao(BigDecimal.ZERO); + titulo.setMora(BigDecimal.ZERO); + titulo.setAcrecimo(BigDecimal.ZERO); + titulo.setValorCobrado(BigDecimal.ZERO); + + + + + + /* + * INFORMANDO OS DADOS SOBRE O BOLETO. + */ + + // RECURSO PONTO DE EXTENSÃO: + // Informando o campo livre do banco que AINDA não é suportado nativamente pelo componente. + CampoLivre campoLivre = new CampoLivreJRimumBank(titulo); + + Boleto boleto = new Boleto(titulo, campoLivre); + + boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em " + + "qualquer Banco até o Vencimento."); + boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor " + + "cobrado não é o esperado, aproveite o DESCONTÃO!"); + boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!"); + boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!"); + boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre."); + boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00"); + boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00"); + boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00"); + boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!"); + boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X."); + + /* + * GERANDO O BOLETO BANCÁRIO. + */ + // Instanciando um objeto "BoletoViewer", classe responsável pela + // geração do boleto bancário. + BoletoViewer boletoViewer = new BoletoViewer(boleto); + + // Gerando o arquivo. No caso o arquivo mencionado será salvo na mesma + // pasta do projeto. Outros exemplos: + // WINDOWS: boletoViewer.getAsPDF("C:/Temp/MeuBoleto.pdf"); + // LINUX: boletoViewer.getAsPDF("/home/temp/MeuBoleto.pdf"); + File arquivoPdf = boletoViewer.getPdfAsFile("MeuPrimeiroBoleto.pdf"); + + // Mostrando o boleto gerado na tela. + mostreBoletoNaTela(arquivoPdf); + } + + /** + * Exibe o arquivo na tela. + * + * @param arquivoBoleto + */ + private static void mostreBoletoNaTela(File arquivoBoleto) { + + try { + // Descomente se estiver usando java 6 ou superior + // java.awt.Desktop.getDesktop().open(arquivoBoleto); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoPersonalizado.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoPersonalizado.java new file mode 100644 index 0000000..8e0fc5f --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoPersonalizado.java @@ -0,0 +1,72 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 01/11/2010 - 09:37:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 01/11/2010 - 09:37:00 + * + */ +package org.jrimum.bopepo.exemplo; + +import java.io.File; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.BoletoViewer; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.utilix.ClassLoaders; + +/** + *

+ * Exemplo de código para geração de um boleto simples usando um template personalizado. + *

+ *

+ * Utiliza a classe utilitária Exemplos para criar os objetos necessários para gerar o boleto. + *

+ * + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class MeuPrimeiroBoletoPersonalizado { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + titulo.setNossoNumero("1234567890"); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + //Informando o template personalizado: + File templatePersonalizado = new File(ClassLoaders.getResource("/templates/BoletoTemplatePersonalizacaoSimples.pdf").getFile()); + BoletoViewer boletoViewer = new BoletoViewer(boleto, templatePersonalizado); + + File arquivoPdf = boletoViewer.getPdfAsFile("MeuBoletoPersonalizado.pdf"); + + Exemplos.mostreBoletoNaTela(arquivoPdf); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmUmArquivo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmUmArquivo.java new file mode 100644 index 0000000..cd4c4e8 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmUmArquivo.java @@ -0,0 +1,109 @@ + +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 18/05/2008 - 21:13:29 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 18/05/2008 - 21:13:29 + * + */ + +package org.jrimum.bopepo.exemplo; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.BoletoViewer; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo de código para geração de vários boletos em um único arquivo PDF. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class VariosBoletosEmUmArquivo { + + + public static void main(String[] args) { + + Boleto boletoBB = crieBoletoBB(); + Boleto boletoBradesco = crieBoletoBradesco(); + + List boletos = new ArrayList(); + boletos.add(boletoBB); + boletos.add(boletoBradesco); + + File pdf = BoletoViewer.groupInOnePDF(boletos, "PDFComVariosBoletos.pdf"); + Exemplos.mostreBoletoNaTela(pdf); + } + + /** + * Cria um boleto do banco Bradesco. + * @return + */ + private static Boleto crieBoletoBradesco() { + + Titulo tituloBradesco = Exemplos.crieTitulo(); + tituloBradesco.setNossoNumero("01234567891"); + + ContaBancaria contaBancariaBradesco = tituloBradesco.getContaBancaria(); + contaBancariaBradesco.setBanco(BancosSuportados.BANCO_BRADESCO.create()); + contaBancariaBradesco.setAgencia(new Agencia(1234)); + contaBancariaBradesco.setCarteira(new Carteira(12)); + contaBancariaBradesco.setNumeroDaConta(new NumeroDaConta(1234567)); + + return Exemplos.crieBoleto(tituloBradesco); + } + + /** + * Cria um boleto do Banco do Brasil. + * @return + */ + private static Boleto crieBoletoBB() { + + Titulo tituloBB = Exemplos.crieTitulo(); + tituloBB .setNossoNumero("1234567890"); + + ContaBancaria contaBancariaBB = tituloBB.getContaBancaria(); + contaBancariaBB.setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + + return Exemplos.crieBoleto(tituloBB); + } + +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmVariosArquivos.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmVariosArquivos.java new file mode 100644 index 0000000..49c183f --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmVariosArquivos.java @@ -0,0 +1,92 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 18/05/2008 - 21:13:29 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 18/05/2008 - 21:13:29 + * + */ + +package org.jrimum.bopepo.exemplo; + +import java.io.File; +import java.util.List; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.BoletoViewer; + + + +/** + * + *

+ * Exemplo de código para geração de vários boletos em um único arquivo PDF. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ + +public class VariosBoletosEmVariosArquivos { + + + public static void main(String[] args) { + + /* + * É bem simples, consiga os boletos + */ + + List boletos = Exemplos.getVariosBoletos(); + + /* + * Depois diga o nome do diretorio para onde os boletos serão gerados. + */ + + BoletoViewer.onePerPDF(boletos, new File("./"), "prefixo-boleto-", "-sufixo-DePagamento"); + + + /* + * Pronto, agora vamos conferir um: + */ + try{ + // Descomente se estiver usando java 6 ou superior + //java.awt.Desktop.getDesktop().open(new File("prefixo-boleto-1-sufixo-DePagamento.pdf")); + + }catch(Exception e){ + throw new RuntimeException("Arquivo não gerado!",e); + } + + /* + * É sério, é só isso mesmo! + * Se não acredita confira os vários arquivos que estão no diretório. + */ + + } + +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/banrisul/NossoNumero.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/banrisul/NossoNumero.java new file mode 100644 index 0000000..3ec8d8f --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/banrisul/NossoNumero.java @@ -0,0 +1,225 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 11/04/2011 - 23:20:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 11/04/2011 - 23:20:00 + * + */ + +package org.jrimum.bopepo.exemplo.banco.banrisul; + +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.utilix.Objects; +import org.jrimum.vallia.digitoverificador.Modulo; + +/** + * Classe responsável pela criação do Nosso Número referente ao Banco Banrisul. + * + * @author Gilmar P.S.L. + */ +public class NossoNumero { + + private int numero; + + private int dvMod10; + private int dvMod11; + + /** + * Nosso número calculado. + */ + private StringBuilder nossoNumero = new StringBuilder(""); + + /** + * Para uso interno. + */ + private NossoNumero() {} + + public static NossoNumero valueOf(int numero){ + + Objects.checkArgument(numero > 0, "Número [ "+numero+" ] inválido!"); + + NossoNumero nn = new NossoNumero(); + nn.numero = numero; + nn.create(); + + return nn; + } + + /** + * Responsável pela lógica de cálculo do dígito verificador informada pelo + * Bradesco. + *

+ * Para maiores esclarecimentos ver o manual do Bradesco. + *

+ */ + private void create(){ + + nossoNumero.append(Fillers.ZERO_LEFT.fill(numero, 8)); + + calculeDvMod10(); + calculeDvMod11(); + } + + private void calculeDvMod11() { + + int somatorio = Modulo.calculeSomaSequencialMod11(nossoNumero.toString()+getDvMod10(),2,7); + + int restoDivisao; + + /* + * Caso o somatório obtido seja menor que 11, considerar como resto da divisão o próprio somatório. + */ + if(somatorio < 11){ + restoDivisao = somatorio; + }else{ + restoDivisao = somatorio % 11; + } + + int restoSubtracao = (11 - restoDivisao); + + /* + * Caso o resto obtido no cálculo do módulo 11 seja 0, o segundo NC será + * igual ao próprio resto. + */ + if(restoDivisao == 0){ + this.dvMod11 = 0; + }else{ + + if(restoDivisao != 1){ + + this.dvMod11 = restoSubtracao; + + }else{ + /* + * Caso o resto obtido no cálculo do módulo 11 seja igual a 1, + * considera-se o DV inválido. Soma-se, então, "1" ao DV obtido + * do módulo "10" e refaz-se o cálculo do módulo “11” . + */ + this.dvMod10++; + + /* + * Se o dígito obtido pelo módulo “10” era igual a "9", + * considera-se então (9+1=10) DV inválido. Neste caso, o DV do + * módulo "10" automaticamente será igual a "0" e procede-se + * assim novo cálculo pelo módulo "11". + */ + if(this.dvMod10 == 10){ + + dvMod10 = 0; + } + + /* + * Novo cálculo + */ + calculeDvMod11(); + } + } + } + + private void calculeDvMod10() { + + int somatorio = Modulo.calculeSomaSequencialMod10(nossoNumero.toString(),1,2); + + int restoDivisao; + + /* + * Quando o somatório for menor que 10, o resto da divisão por 10 será o + * próprio somatório. + */ + if(somatorio < 10){ + restoDivisao = somatorio; + }else{ + restoDivisao = somatorio % 10; + } + + int restoSubtracao = (10 - restoDivisao); + + if(restoDivisao == 0){ + this.dvMod10 = 0; + }else{ + this.dvMod10 = restoSubtracao; + } + } + + /** + * Retorna o digito verificador calculado. + * + * @return String Digito Verificador de dois dígitos + */ + public String getDv(){ + return dvMod10+""+dvMod11; + } + + /** + * @return the dvMod10 + */ + public int getDvMod10() { + return dvMod10; + } + + /** + * @return the dvMod11 + */ + public int getDvMod11() { + return dvMod11; + } + + /** + * String com o nosso número sem o digito verificador. + * + * @return nosso número + */ + public String writeRaw(){ + return Fillers.ZERO_LEFT.fill(numero, 8); + } + + /** + * String com o nosso número com o digito verificador. + * + * @return nosso número + */ + public String writeFull(){ + return nossoNumero.toString(); + } + + /** + * String com o nosso número formatado com o digito verificador. + * + * @return nosso número + */ + public String writeFormated(){ + return Fillers.ZERO_LEFT.fill(numero, 8)+"."+getDv(); + } + + /** + * Escreve o nosso número formatado. + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return writeFormated(); + } + +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero10Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero10Exemplo.java new file mode 100644 index 0000000..43ea2c5 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero10Exemplo.java @@ -0,0 +1,67 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/09/2009 - 00:44:51 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/09/2009 - 00:44:51 + * + */ +package org.jrimum.bopepo.exemplo.banco.bb; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Banco do Brasil com Nosso Número 10 + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre + * do Banco do Brasil com Nosso Número 10 + *

+ * + * @author Rômulo Augusto + * + * @version 0.2 + */ +public class BoletoBBNossoNumero10Exemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + //Campos específicos para o Banco do Brasil com nosso número 10. + titulo.setNossoNumero("1234567890"); + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero11Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero11Exemplo.java new file mode 100644 index 0000000..c9603c8 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero11Exemplo.java @@ -0,0 +1,67 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/09/2009 - 00:44:51 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/09/2009 - 00:44:51 + * + */ +package org.jrimum.bopepo.exemplo.banco.bb; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Banco do Brasil com Nosso Número 11 + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre + * do Banco do Brasil com Nosso Número 11 + *

+ * + * @author Rômulo Augusto + * + * @version 0.2 + */ +public class BoletoBBNossoNumero11Exemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + //Campos específicos para o Banco do Brasil com nosso número 11. + titulo.setNossoNumero("12345678901"); + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio6Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio6Exemplo.java new file mode 100644 index 0000000..f4b8b67 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio6Exemplo.java @@ -0,0 +1,84 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/09/2009 - 00:44:51 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/09/2009 - 00:44:51 + * + */ +package org.jrimum.bopepo.exemplo.banco.bb; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Banco do Brasil com Nosso Número de 17 dígitos e Convênio de 6 posições. + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre + * do Banco do Brasil com Banco do Brasil com Nosso Número 17/Convênio 7; + *

+ * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @version 0.2 + */ +public class BoletoBBNossoNumero17Convenio6Exemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o Banco do Brasil com Nosso Número 17 / Convênio 6. + */ + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco do Brasil 001 + */ + contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + + /* + * Conta/Convênio de 6 posições ou seja, até 999999 + */ + contaBancaria.setNumeroDaConta(new NumeroDaConta(123456)); + + /* + * Nosso Número de 17 posições + */ + titulo.setNossoNumero("12345678901234567"); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio7Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio7Exemplo.java new file mode 100644 index 0000000..416ea13 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio7Exemplo.java @@ -0,0 +1,61 @@ +package org.jrimum.bopepo.exemplo.banco.bb; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Banco do Brasil com Nosso Número de 17 dígitos e Convênio de 7 posições. + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre + * do Banco do Brasil com Nosso Número 17/Convênio 7; + *

+ * + * @author Gilmar P.S.L. + * + * @version 0.2 + */ +public class BoletoBBNossoNumero17Convenio7Exemplo { + + +public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o Banco do Brasil com Nosso Número 17 / Convênio 6. + */ + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco do Brasil 001 + */ + contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + + /* + * Conta/Convênio de 7 posições ou seja, acima de 1.000.000 + */ + contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567)); + + /* + * Nosso Número de 17 posições + */ + titulo.setNossoNumero("12345678901234567"); + + /* + * Carteira com no máximo 2 dígitos + */ + contaBancaria.setCarteira(new Carteira(23)); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/package-info.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/package-info.java new file mode 100644 index 0000000..2bfb6b7 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/package-info.java @@ -0,0 +1,36 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 02/11/2010 - 18:06:18 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 02/11/2010 - 18:06:18 + * + */ + +/** + * Exemplos de geração de boletos para o Banco do Brasil. + * + * @author Gilmar P.S.L + * @author Rômulo Augusto + */ +package org.jrimum.bopepo.exemplo.banco.bb; \ No newline at end of file diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bnb/BoletoBancoDoNordesteDoBrasilExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bnb/BoletoBancoDoNordesteDoBrasilExemplo.java new file mode 100644 index 0000000..ba66d6f --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bnb/BoletoBancoDoNordesteDoBrasilExemplo.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/12/2010 - 13:24:00 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Created at: 16/12/2010 - 13:24:00 + * + */ + + +package org.jrimum.bopepo.exemplo.banco.bnb; + + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Banco do Nordeste + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre + * do Banco do Nordeste do Brasil + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Paulo Porto + * + * @version 0.2 + */ +public class BoletoBancoDoNordesteDoBrasilExemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o Banco do Nordeste. + */ + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco do Nordeste 004 + */ + contaBancaria.setBanco(BancosSuportados.BANCO_DO_NORDESTE_DO_BRASIL.create()); + + /* + * Agência com no máximo 4 dígitos + */ + contaBancaria.setAgencia(new Agencia(100)); + + /* + * Carteira com no máximo 2 dígitos + */ + contaBancaria.setCarteira(new Carteira(57)); + + /* + * Nosso Número com 7 dígitos + */ + titulo.setNossoNumero("7654321"); + + /* + * Dígito do Nosso Número + */ + titulo.setDigitoDoNossoNumero("0"); + + /* + * Número da conta com no máximo 7 dígitos e necessariamente com o dígito verificador + */ + contaBancaria.setNumeroDaConta(new NumeroDaConta(13677, "9")); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/BoletoBradescoExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/BoletoBradescoExemplo.java new file mode 100644 index 0000000..907e05c --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/BoletoBradescoExemplo.java @@ -0,0 +1,96 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/09/2009 - 00:44:51 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/09/2009 - 00:44:51 + * + */ +package org.jrimum.bopepo.exemplo.banco.bradesco; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Banco Bradesco + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre + * do Banco Bradesco + *

+ * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @version 0.2 + */ +public class BoletoBradescoExemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o Banco Bradesco. + */ + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco bradesco 237 + */ + contaBancaria.setBanco(BancosSuportados.BANCO_BRADESCO.create()); + + /* + * Agência com no máximo 4 dígitos + */ + contaBancaria.setAgencia(new Agencia(1234)); + + /* + * Carteira com no máximo 2 dígitos + */ + contaBancaria.setCarteira(new Carteira(12)); + + /* + * Nosso número com 11 dígitos + */ + titulo.setNossoNumero("01234567891"); + + /* + * Número da conta com no máxiom 7 dígitos + */ + contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567)); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/NossoNumero.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/NossoNumero.java new file mode 100644 index 0000000..96cf411 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/NossoNumero.java @@ -0,0 +1,145 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 07/04/2011 - 10:57:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 07/04/2011 - 10:57:00 + * + */ + +package org.jrimum.bopepo.exemplo.banco.bradesco; + +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.utilix.Objects; +import org.jrimum.vallia.digitoverificador.Modulo; + +/** + * Classe responsável pela criação do Nosso Número referente ao Banco Bradesco. + * + * @author Gilmar P.S.L. + */ +public class NossoNumero { + + private String carteira; + + private long numero; + + private String dv; + + private StringBuilder nossoNumero = new StringBuilder(""); + + /** + * Para uso interno. + */ + private NossoNumero() {} + + public static NossoNumero valueOf(long numero, int carteira){ + + Objects.checkArgument(numero > 0, "Número [ "+numero+" ] inválido!"); + Objects.checkArgument(carteira > 0, "Carteira [ "+carteira+" ] inválida!"); + Objects.checkArgument(carteira <= 99, "Carteira [ "+carteira+" ] inválida! Carteira Bradesco deve ser um número entre 1 e 99"); + + NossoNumero nn = new NossoNumero(); + nn.numero = numero; + nn.carteira = Fillers.ZERO_LEFT.fill(carteira, 2); + nn.create(); + + return nn; + } + + /** + * Responsável pela lógica de cálculo do dígito verificador informada pelo + * Bradesco. + *

+ * Para maiores esclarecimentos ver o manual do Bradesco. + *

+ */ + private void create(){ + + nossoNumero.append(Fillers.ZERO_LEFT.fill(numero, 11)); + + String formula = this.carteira+nossoNumero.toString(); + + int restoDivisao = Modulo.calculeMod11(formula,2,7); + + int restoSubtracao = (11 - restoDivisao); + + if(restoDivisao == 0){ + dv = "0"; + }else{ + if(restoSubtracao == 10){ + dv = "P"; + }else{ + dv = ""+restoSubtracao; + } + } + nossoNumero.append(dv); + } + + /** + * Retorna o digito verificador calculado. + * + * @return String Digito Verificador + */ + public String getDv(){ + return dv; + } + + /** + * String com o nosso número sem o digito verificador. + * + * @return nosso número + */ + public String writeRaw(){ + return Fillers.ZERO_LEFT.fill(numero, 11); + } + + /** + * String com o nosso número com o digito verificador. + * + * @return nosso número + */ + public String writeFull(){ + return nossoNumero.toString(); + } + + /** + * String com o nosso número formatado com o digito verificador. + * + * @return nosso número + */ + public String writeFormated(){ + return Fillers.ZERO_LEFT.fill(numero, 11)+"-"+dv; + } + + /** + * Escreve o nosso número formatado. + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return writeFormated(); + } + +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/brb/BoletoBancoDeBrasiliaExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/brb/BoletoBancoDeBrasiliaExemplo.java new file mode 100644 index 0000000..0d94725 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/brb/BoletoBancoDeBrasiliaExemplo.java @@ -0,0 +1,98 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 01/02/2014 - 17:49:03 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 01/02/2014 - 17:49:03 + * + */ + +package org.jrimum.bopepo.exemplo.banco.brb; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + * Exemplo do boleto para BRB - Banco de Brasília. + + *

+ * Mostra um exemplo funcional que gera um boleto para a implementação padrão do BRB. + *

+ * + * @author Gilmar P.S.L. + * + * @version 0.2 + */ +/** + * @author Gilmar P.S.L. + * + */ +public class BoletoBancoDeBrasiliaExemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o Banco de Brasília. + */ + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco 070 + */ + contaBancaria.setBanco(BancosSuportados.BANCO_DE_BRASILIA.create()); + + /* + * Código do agência com no máxiom 3 dígitos + */ + contaBancaria.setAgencia(new Agencia(58));//058 + + /* + * Código do conta com no máxiom 7 dígitos + */ + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(2006));//0002006 + + /* + * Carteira com no máximo 2 dígitos + */ + contaBancaria.setCarteira(new Carteira(1,TipoDeCobranca.SEM_REGISTRO)); + + /* + * Nosso número com 6 dígitos + */ + titulo.setNossoNumero("000001"); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cecred/BoletoCecredExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cecred/BoletoCecredExemplo.java new file mode 100644 index 0000000..fb9b67f --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cecred/BoletoCecredExemplo.java @@ -0,0 +1,103 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/01/2014 - 16:28:50 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/01/2014 - 16:28:50 + * + */ + +package org.jrimum.bopepo.exemplo.banco.cecred; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.bopepo.parametro.ParametroCECRED; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + * Exemplo do boleto para CECRED. + * + *

+ * Mostra um exemplo funcional que gera um boleto para a implementação padrão do + * CECRED. + *

+ * + * @author Gilmar P.S.L. + * + * @version 0.2 + */ +public class BoletoCecredExemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o CECRED. + */ + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco 085 + */ + contaBancaria.setBanco(BancosSuportados.CECRED.create()); + + /* + * Número da conta com no máximo 8 dígitos + */ + int conta = 12345; + + contaBancaria.setNumeroDaConta(new NumeroDaConta(conta)); + + /* + * Carteira com no máximo 2 dígitos + */ + contaBancaria.setCarteira(new Carteira(12)); + + /* + * Númeero sequencial do boleto com no máximo 9 dígitos + */ + String sequencial = "123456789"; + + /* + * Nosso número com exatamente 17 dígitos + * "numero_da_conta"[8] + "sequencial"[9] + */ + titulo.setNossoNumero("000"+conta+sequencial); + + /* + * Código do convênio com no máxiom 6 dígitos + */ + titulo.setParametrosBancarios(new ParametrosBancariosMap(ParametroCECRED.CODIGO_DO_CONVENIO, 123)); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cef/NossoNumeroCobrancaRapidaSICOB.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cef/NossoNumeroCobrancaRapidaSICOB.java new file mode 100644 index 0000000..4e2e828 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cef/NossoNumeroCobrancaRapidaSICOB.java @@ -0,0 +1,148 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 21/03/2013 - 11:25:33 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 21/03/2013 - 11:25:33 + * + */ +package org.jrimum.bopepo.exemplo.banco.cef; + +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.utilix.Objects; +import org.jrimum.vallia.digitoverificador.Modulo; + +/** + * Nosso Número referente a COBRANÇA RÁPIDA – 11 POSIÇÕES da CAIXA ECONÔMICA + * FEDERAL (CEF) + * + *
    + *
  • Campo com 10 posições sempre iniciando com 9;
  • + *
  • Utiliza 1 dígito verificador calculado através do módulo 11, com peso 2 a + * 9.
  • + *
+ * + *

+ * 9NNNNNNNNN - D1 + *

+ * + * + * @author Gilmar P.S.L. + */ +public class NossoNumeroCobrancaRapidaSICOB { + + private long numero; + + private String dv; + + private StringBuilder nossoNumero = new StringBuilder(""); + + /** + * Para uso interno. + */ + private NossoNumeroCobrancaRapidaSICOB() {} + + public static NossoNumeroCobrancaRapidaSICOB valueOf(long numero){ + + Objects.checkArgument(numero > 0, "Número [ "+numero+" ] inválido!"); + + NossoNumeroCobrancaRapidaSICOB nn = new NossoNumeroCobrancaRapidaSICOB(); + nn.numero = numero; + nn.create(); + + return nn; + } + + /** + * Responsável pela lógica de cálculo do dígito verificador informada pelo + * Bradesco. + *

+ * Para maiores esclarecimentos ver o manual do Bradesco. + *

+ */ + private void create(){ + + nossoNumero.append(9); + nossoNumero.append(Fillers.ZERO_LEFT.fill(numero, 9)); + + String formula = nossoNumero.toString(); + + int restoDivisao = Modulo.calculeMod11(formula,2,9); + + int restoSubtracao = (11 - restoDivisao); + + if(restoDivisao > 9){ + dv = "0"; + }else{ + dv = ""+restoSubtracao; + } + + nossoNumero.append(dv); + } + + /** + * Retorna o digito verificador calculado. + * + * @return String Digito Verificador + */ + public String getDv(){ + return dv; + } + + /** + * String com o nosso número sem o digito verificador. + * + * @return nosso número + */ + public String writeRaw(){ + return Fillers.ZERO_LEFT.fill(numero, 10); + } + + /** + * String com o nosso número com o digito verificador. + * + * @return nosso número + */ + public String writeFull(){ + return nossoNumero.toString(); + } + + /** + * String com o nosso número formatado com o digito verificador. + * + * @return nosso número + */ + public String writeFormated(){ + return "9"+Fillers.ZERO_LEFT.fill(numero, 9)+"-"+dv; + } + + /** + * Escreve o nosso número formatado. + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return writeFormated(); + } +} \ No newline at end of file diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/package-info.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/package-info.java new file mode 100644 index 0000000..e8b1384 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/package-info.java @@ -0,0 +1,35 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/08/2010 - 20:50:14 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/08/2010 - 20:50:14 + * + */ + +/** + * Criação de dados para os respectivos bancos na demonstração de geração de boletos. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.exemplo.banco; \ No newline at end of file diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/sicredi/BoletoSicrediExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/sicredi/BoletoSicrediExemplo.java new file mode 100644 index 0000000..76a4267 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/sicredi/BoletoSicrediExemplo.java @@ -0,0 +1,88 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 12/11/2010 - 12:47:22 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Created at: 12/11/2010 - 12:47:22 + * + */ + +package org.jrimum.bopepo.exemplo.banco.sicredi; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.bopepo.parametro.ParametroBancoSicredi; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Banco Sicredi + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre + * do Banco Sicredi + *

+ * + * @author Gilmar P.S.L. + * + * @version 0.2 + */ +public class BoletoSicrediExemplo { + +public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o Banco Sicredi. + */ + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco Sicredi 748 + */ + contaBancaria.setBanco(BancosSuportados.BANCO_SICREDI.create()); + + contaBancaria.setAgencia(new Agencia(165)); + contaBancaria.setNumeroDaConta(new NumeroDaConta(623)); + contaBancaria.setCarteira(new Carteira(1, TipoDeCobranca.SEM_REGISTRO)); + + titulo.setNossoNumero("07200003"); + titulo.setDigitoDoNossoNumero("1"); + + titulo.setParametrosBancarios(new ParametrosBancariosMap(ParametroBancoSicredi.POSTO_DA_AGENCIA, 2)); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/bancoob/BoletoBancoobCobrancaNaoRegistradaExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/bancoob/BoletoBancoobCobrancaNaoRegistradaExemplo.java new file mode 100644 index 0000000..a3d9cb1 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/bancoob/BoletoBancoobCobrancaNaoRegistradaExemplo.java @@ -0,0 +1,83 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 17/02/2011 - 12:40:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 17/02/2011 - 12:40:00 + */ + +package org.jrimum.bopepo.exemplo.bancoob; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.exemplo.Exemplos; +import org.jrimum.bopepo.parametro.ParametroBancoob; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Exemplo do boleto para o Bancoob - Cobrança não registrada. + *

+ *

+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo + * livre do Bancoob para cobrança não registrada. + *

+ * + * @author Gilmar P.S.L. + * + * @version 0.2 + */ +public class BoletoBancoobCobrancaNaoRegistradaExemplo { + + public static void main(String[] args) { + + Titulo titulo = Exemplos.crieTitulo(); + + /* + * Campos específicos para o Bancoob. + */ + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + + /* + * Banco Sicredi 756 + */ + contaBancaria.setBanco(BancosSuportados.BANCOOB.create()); + + contaBancaria.setAgencia(new Agencia(4340)); + contaBancaria.setNumeroDaConta(new NumeroDaConta(1)); + contaBancaria.setCarteira(new Carteira(1)); + + titulo.setNossoNumero("11000001"); + titulo.setParametrosBancarios(new ParametrosBancariosMap(ParametroBancoob.NUMERO_DA_PARCELA,Integer.valueOf(0))); + + Boleto boleto = Exemplos.crieBoleto(titulo); + + Exemplos.execute(boleto); + } +} diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/package-info.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/package-info.java new file mode 100644 index 0000000..4bbb396 --- /dev/null +++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/package-info.java @@ -0,0 +1,35 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/08/2010 - 20:50:14 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/08/2010 - 20:50:14 + * + */ + +/** + * Exemplos demosntrativos envolvendo a geração de boletos. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.exemplo; \ No newline at end of file diff --git a/jrimum-bopepo/src/examples/resources/img/999.png b/jrimum-bopepo/src/examples/resources/img/999.png new file mode 100644 index 0000000..bf0547d Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/img/999.png differ diff --git a/jrimum-bopepo/src/examples/resources/img/JRiboy.png b/jrimum-bopepo/src/examples/resources/img/JRiboy.png new file mode 100644 index 0000000..0515612 Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/img/JRiboy.png differ diff --git a/jrimum-bopepo/src/examples/resources/img/JRilogo.png b/jrimum-bopepo/src/examples/resources/img/JRilogo.png new file mode 100644 index 0000000..d93b705 Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/img/JRilogo.png differ diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.odt b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.odt new file mode 100644 index 0000000..3f70fe1 Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.odt differ diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.pdf b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.pdf new file mode 100644 index 0000000..80a846c Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.pdf differ diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.odt b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.odt new file mode 100644 index 0000000..1578958 Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.odt differ diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.pdf b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.pdf new file mode 100644 index 0000000..3fa22b9 Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.pdf differ diff --git a/jrimum-bopepo/src/main/assembly/jrimum-bopepo-examples.xml b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-examples.xml new file mode 100644 index 0000000..07651a4 --- /dev/null +++ b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-examples.xml @@ -0,0 +1,27 @@ + + examples + + zip + + + + src/examples/java + true + / + + **/*.java + + + + src/examples/resources + true + /resources + + **/** + + + + \ No newline at end of file diff --git a/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies-src.xml b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies-src.xml new file mode 100644 index 0000000..6e8aebf --- /dev/null +++ b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies-src.xml @@ -0,0 +1,60 @@ + + dep-sources + + jar + + false + + + /src/main/java + true + / + + **/*.java + + + + /src/main/resources + true + / + + **/** + + + + ../jrimum-texgit/src/main/java + true + / + + **/*.java + + + + ../jrimum-utilix/src/main/java + true + / + + **/*.java + + + + ../jrimum-vallia/src/main/java + true + / + + **/*.java + + + + ../jrimum-domkee/src/main/java + true + / + + **/*.java + + + + \ No newline at end of file diff --git a/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies.xml b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies.xml new file mode 100644 index 0000000..90b7a0e --- /dev/null +++ b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies.xml @@ -0,0 +1,22 @@ + + dep + + jar + + false + + + / + true + true + + commons-lang:commons-lang + log4j:log4j + com.lowagie:itext + + + + \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BancosSuportados.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BancosSuportados.java new file mode 100644 index 0000000..a11c843 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BancosSuportados.java @@ -0,0 +1,473 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 19:08:39 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 19:08:39 + * + */ + +package org.jrimum.bopepo; + +import java.util.HashMap; +import java.util.Map; + +import org.jrimum.domkee.comum.pessoa.id.cprf.CNPJ; +import org.jrimum.domkee.financeiro.banco.febraban.Banco; +import org.jrimum.domkee.financeiro.banco.febraban.CodigoDeCompensacaoBACEN; + +/** + *

+ * Enumeração dos bancos segundo o supervisão da BACEN em + * funcionamento no país e que possuem pelo menos uma implementação de + * ICampoLivre. + *

+ * + *

+ * A partir de um EnumBanco específico, como o + * BANCO_DO_BRASIL, você pode solicitar um nova instância de um + * banco representado por IBanco ou utilizar as costantes + * enumeradas e não enumeradas como melhor for o caso. + *

+ * + *
EXEMPLOS:
+ * + *

+ * Para uma nova instância do Banco do Brasil faça:
+ *
+ * + * IBanco bancoDoBrasil = EnumBancos.BANCO_DO_BRASIL.newInstance(); + * + *

+ * + *

+ * Para utilizar somento o código de compensação:
+ *
+ * + * EnumBancos.BANCO_DO_BRASIL.getCodigoDeCompensacao(); + * + *

+ * + *

+ * Para saber se um banco é suportado pelo componete, veja a lista antes + * (LinkParaLista) ou faça:
+ *
+ * + * EnumBancos.isSuportado(banco.getCodigoDeCompensacao) + * + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério + * @author Lukas + * Antunes - Colaborador com o banco Intermedium (077) + * @author Fernando Dias - + * Colaborador com o banco Rural (453) + * @author Paulo Porto - + * Colaborador com o Banco do Nordeste do Brasil (004). + * @author Fabiano Carrijo - + * Colaborador com o Banco Citibank (756). + * @author Douglas Ramiro - + * Colaborador com o Banco de Brasília (070). + * + * @see org.jrimum.bopepo.campolivre.CampoLivre + * @see org.jrimum.domkee.financeiro.banco.Banco + * + * @since 0.2 + * + * @version 0.2 + */ +public enum BancosSuportados{ + + /* + * <=====================================================================> + * Observe que toda a enumeração segue a ORDEM dos códigos de compensação. + * Caso queira modificar alguma coisa, leve sempre em consideração essa + * ORDEM. + * <=====================================================================> + */ + + /** + * Tipo enumerado que representa o Banco do Brasil, código + * de compensação 001 site. + * + * @since 0.2 + */ + BANCO_DO_BRASIL("001", "00000000000191", "BANCO DO BRASIL S.A.", "Banco do Brasil - Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Banco do Nordeste do Brasil, código + * de compensação 004 (site). + * + * @since 0.2-Helio + */ + BANCO_DO_NORDESTE_DO_BRASIL("004","07237373000120", "BANCO DO NORDESTE DO BRASIL S.A.","Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Banestes, Banco do Estado do Espírito Santo, + * código de compensação 021 + * + * site. + * + * @since 0.2 + */ + BANCO_DO_ESTADO_DO_ESPIRITO_SANTO("021", "28127603000178", "BANCO DO ESTADO DO ESPIRITO SANTO S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Santander Banco Santander + * (Brasil) S. A., código de compensação 033 + * site. + * + * @since 0.2 + */ + BANCO_SANTANDER("033", "90400888000142", "BANCO SANTANDER (BRASIL) S. A.", "Banco Mútiplo"), + + /** + * Tipo enumerado que representa o Banrisul, Banco do Estado do Rio Grande do Sul, + * código de compensação 041 + * site. + * + * @since 0.2 + */ + BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL("041", "92702067000196", "BANCO DO ESTADO DO RIO GRANDE DO SUL S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Banco BRB - Banco de Brasília, + * código de compensação 070 site. + * + * @since 0.2 + */ + BANCO_DE_BRASILIA("070","00000208000100","BRB- Banco de Brasília S.A.","Banco Múltiplo"), + + /** + * Tipo enumerado que representa o BANISA, Banco Intermedium, + * código de compensação 077 + * site. + * + * @since 0.2 + */ + BANCO_INTEMEDIUM("077", "00416968000101", "BANCO INTERMEDIUM S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o CECRED, Cooperativa Central de Crédito Urbano, + * código de compensação 085 + * site. + * + * @since 0.2 + */ + CECRED("085", "05.463.212/0001-29", "COOPERATIVA CENTRAL DE CRÉDITO URBANO - CECRED", "Cooperativa de Crédito"), + + /** + * Tipo enumerado que representa o Banco Caixa Econômica Federal, + * código de compensação 104 site. + * + * @since 0.2 + */ + CAIXA_ECONOMICA_FEDERAL("104", "00360305000104", "CAIXA ECONOMICA FEDERAL", "Caixa Econômica Federal"), + + /** + * Tipo enumerado que representa o Banco Bradesco, código + * de compensação 237 site. + * + * @since 0.2 + */ + BANCO_BRADESCO("237", "60746948000112", "BANCO BRADESCO S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Banco Itaú, código de + * compensação 341 site. + * + * @since 0.2 + */ + BANCO_ITAU("341", "60701190000104", "BANCO ITAÚ S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Banco ABN AMRO Real + * (http://www.bancoreal.com.br), + * código de compensação 356.
+ *

+ * Obs: Os bancos Sudameris e Bandepe + * foram incorporados ao Banco Real, portanto para gerar boletos bancários + * dos bancos citados utilize este tipo enumerado. + *

+ * @since 0.2 + */ + BANCO_ABN_AMRO_REAL("356", "33066408000115", "BANCO ABN AMRO REAL S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Banco Mercantil do Brasil + * (http://www.mercantildobrasil.com.br), + * código de compensação 389. + * @since 0.2 + */ + MERCANTIL_DO_BRASIL("389", "17184037000110", "BANCO MERCANTIL DO BRASIL S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o HSBC, código de + * compensação 399 site. + * + * @since 0.2 + */ + HSBC("399", "01701201000189", "HSBC BANK BRASIL S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Unibanco, código de + * compensação 409 site. + * + * @since 0.2 + */ + UNIBANCO("409", "33700394000140", "UNIBANCO-UNIAO DE BANCOS BRASILEIROS S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Unibanco, código de + * compensação 422 site. + * + * @since 0.2 + */ + BANCO_SAFRA("422", "58160789000128", "BANCO SAFRA S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Citibank, código de + * compensação 756 site. + * + * @since 0.2 + */ + CITIBANK("745", "33479023000180", "BANCO CITIBANK S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Banco Sicredi, código de + * compensação 748 site. + * + * @since 0.2 + */ + BANCO_SICREDI("748", "01181521000155", "BANCO COOPERATIVO SICREDI S.A.", "Banco Mútiplo Cooperativo"), + + /** + * Tipo enumerado que representa o Banco Rural, código de + * compensação 453 site. + * + * @since 0.2 + */ + BANCO_RURAL("453", "58160789000128", "BANCO RURAL S.A.", "Banco Múltiplo"), + + /** + * Tipo enumerado que representa o Bancoob, código de + * compensação 756 site. + * + * @since 0.2 + */ + BANCOOB("756", "02038232000164", "BANCO COOPERATIVO DO BRASIL S.A. - BANCOOB", "Banco Comercial Cooperativo"); + + /** + * Singleton Map para pesquisa por bancos suportados no + * componente. + * + * @since 0.2 + */ + public static final Map suportados = new HashMap( + BancosSuportados.values().length); + + static { + + suportados.put(BANCO_DO_BRASIL.codigoDeCompensacaoBACEN, BANCO_DO_BRASIL); + suportados.put(BANCO_DO_NORDESTE_DO_BRASIL.codigoDeCompensacaoBACEN, BANCO_DO_NORDESTE_DO_BRASIL); + suportados.put(CAIXA_ECONOMICA_FEDERAL.codigoDeCompensacaoBACEN, CAIXA_ECONOMICA_FEDERAL); + suportados.put(BANCO_BRADESCO.codigoDeCompensacaoBACEN, BANCO_BRADESCO); + suportados.put(BANCO_ABN_AMRO_REAL.codigoDeCompensacaoBACEN, BANCO_ABN_AMRO_REAL); + suportados.put(UNIBANCO.codigoDeCompensacaoBACEN, UNIBANCO); + suportados.put(HSBC.codigoDeCompensacaoBACEN, HSBC); + suportados.put(BANCO_ITAU.codigoDeCompensacaoBACEN, BANCO_ITAU); + suportados.put(BANCO_SAFRA.codigoDeCompensacaoBACEN, BANCO_SAFRA); + suportados.put(BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL.codigoDeCompensacaoBACEN, BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL); + suportados.put(MERCANTIL_DO_BRASIL.codigoDeCompensacaoBACEN, MERCANTIL_DO_BRASIL); + suportados.put(BANCO_DO_ESTADO_DO_ESPIRITO_SANTO.codigoDeCompensacaoBACEN, BANCO_DO_ESTADO_DO_ESPIRITO_SANTO); + suportados.put(BANCO_RURAL.codigoDeCompensacaoBACEN, BANCO_RURAL); + suportados.put(BANCO_SANTANDER.codigoDeCompensacaoBACEN, BANCO_SANTANDER); + suportados.put(BANCO_INTEMEDIUM.codigoDeCompensacaoBACEN, BANCO_INTEMEDIUM); + suportados.put(BANCO_SICREDI.codigoDeCompensacaoBACEN, BANCO_SICREDI); + suportados.put(BANCOOB.codigoDeCompensacaoBACEN, BANCOOB); + suportados.put(CITIBANK.codigoDeCompensacaoBACEN, CITIBANK); + suportados.put(BANCO_DE_BRASILIA.codigoDeCompensacaoBACEN, BANCO_DE_BRASILIA); + suportados.put(CECRED.codigoDeCompensacaoBACEN, CECRED); + } + + /** + * Códigos de instituições bancárias na compensação - COMPE BACEN. + * + * @since 0.2 + */ + private String codigoDeCompensacaoBACEN; + + /** + * CNPJ registrado na BACEN. + * + * @since 0.2 + */ + private String cNPJ; + + /** + * Nome da instituição registrado na BACEN. + * + * @since 0.2 + */ + private String instituicao; + + /** + * Segmento bancário da instituição registrado na BACEN. + * + * @since 0.2 + */ + private String segmento; + + /** + *

+ * Construtor naturalmente private responsável por criar uma + * única instância para cada banco. + *

+ * + * @param codigoDeCompensacaoBACEN + * @param cNPJ + * @param instituicao + * @param segmento + * + * @see java.lang.Enum + * @see Enum + * Guide + * + * @since 0.2 + * + */ + private BancosSuportados(String codigoDeCompensacaoBACEN, String cnpj, + String instituicao, String segmento) { + + this.codigoDeCompensacaoBACEN = codigoDeCompensacaoBACEN; + this.cNPJ = cnpj; + this.instituicao = instituicao; + this.segmento = segmento; + } + + + /** + *

+ * Verifica se exite suporte (implementação) de "Campos Livres" para o banco + * representado pelo codigoDeCompensacao. + *

+ * + * @param codigoDeCompensacao + * @return verdadeiro se existe implementação para o banco em questão. + * + * @since 0.2 + */ + public static boolean isSuportado(String codigoDeCompensacao) { + return suportados.containsKey(codigoDeCompensacao); + } + + /** + *

+ * Cria uma instância para o banco representado pelo tipo enumerado. + *

+ *

+ * Cada instância retornada por este método contém: + *

    + *
  • Código de componsação
  • + *
  • Nome da instituição
  • + *
  • CNPJ da instituição
  • + *
  • Segmento da instituição bancária
  • + *
+ *

+ * + * @return Uma instância do respectivo banco. + * + * @see org.jrimum.domkee.financeiro.banco.febraban.Banco#Banco(CodigoDeCompensacaoBACEN, String, CNPJ, String) + * @see Bancos supervisionados + * pela BACEN + * + * @since 0.2 + */ + public Banco create() { + return new Banco(new CodigoDeCompensacaoBACEN(this.codigoDeCompensacaoBACEN), this.instituicao, new CNPJ( + this.cNPJ), this.segmento); + } + + /** + * @return the codigoDeCompensacaoBACEN + * + * @since 0.2 + */ + public String getCodigoDeCompensacao() { + return codigoDeCompensacaoBACEN; + } + + /** + * @return the cNPJ + * + * @since 0.2 + */ + public String getCNPJ() { + return cNPJ; + } + + /** + * @return the instituicao + * + * @since 0.2 + */ + public String getInstituicao() { + return instituicao; + } + + /** + * @return the segmento + * + * @since 0.2 + */ + public String getSegmento() { + return segmento; + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/Boleto.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/Boleto.java new file mode 100644 index 0000000..045e17c --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/Boleto.java @@ -0,0 +1,572 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:04:06 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:04:06 + * + */ + +package org.jrimum.bopepo; + +import static org.jrimum.utilix.Objects.isNotNull; +import static org.jrimum.utilix.Objects.isNull; +import static org.jrimum.utilix.text.DateFormat.DDMMYYYY_B; + +import java.awt.Image; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.jrimum.bopepo.campolivre.CampoLivre; +import org.jrimum.bopepo.campolivre.CampoLivreFactory; +import org.jrimum.bopepo.campolivre.NotSupportedBancoException; +import org.jrimum.bopepo.campolivre.NotSupportedCampoLivreException; +import org.jrimum.bopepo.view.BoletoCampo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; + +/** + *

+ * É a representação do documento Boleto que por sua vez, representa títulos + * em cobrança. + *

+ * + *

+ * A classe encapsula os atributos integrantes e as funcionalidades inerentes + * à construção de tal documento. + *

+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * @author Samuel Valério + * + * @since 0.2 + * + * @version 0.2 + */ +public class Boleto { + + private static Logger log = Logger.getLogger(Boleto.class); + + /** + * @see Titulo + */ + private Titulo titulo; + + /** + * @see #setDataDeProcessamento(Date) + */ + private Date dataDeProcessamento; + + /** + * @see CodigoDeBarras + */ + private CodigoDeBarras codigoDeBarras; + + /** + * @see LinhaDigitavel + */ + private LinhaDigitavel linhaDigitavel; + + /** + * @see CampoLivre + */ + private CampoLivre campoLivre; + + /** + * @see #setLocalPagamento(String) + */ + private String localPagamento; + + /** + * @see #setInstrucaoAoSacado(String) + */ + private String instrucaoAoSacado; + + private String instrucao1; + private String instrucao2; + private String instrucao3; + private String instrucao4; + private String instrucao5; + private String instrucao6; + private String instrucao7; + private String instrucao8; + + /** + * @see #setTextosExtras(Map) + */ + private Map textosExtras; + + /** + *

+ * Map com nome do campo e imagem para este campo. + *

+ */ + private Map imagensExtras; + + /** + * Apenas cria um instâcia do boleto com os dados nulos. + */ + public Boleto() { + super(); + } + + /** + * Cria um boleto pronto para ser gerado. + * + * @param titulo + * @throws NotSupportedBancoException + * @throws NotSupportedCampoLivreException + */ + public Boleto(Titulo titulo)throws IllegalArgumentException, NotSupportedBancoException, NotSupportedCampoLivreException{ + + if(log.isTraceEnabled()) + log.trace("Instanciando boleto"); + + if(log.isDebugEnabled()) + log.debug("titulo instance : "+titulo); + + if(isNotNull(titulo)){ + + this.setTitulo(titulo); + this.setCampoLivre(CampoLivreFactory.create(titulo)); + this.load(); + + if(log.isDebugEnabled()){ + log.debug("boleto instance : " + this); + } + + }else { + + if(log.isDebugEnabled()){ + log.debug("Título Nulo - Valor Não Permitido!"); + } + + Exceptions.throwIllegalArgumentException("Título nulo!"); + } + + if(log.isDebugEnabled() || log.isTraceEnabled()){ + log.trace("Boleto Instanciado : "+this); + } + + } + + /** + * @param titulo + * @param campoLivre + */ + public Boleto(Titulo titulo, CampoLivre campoLivre) { + super(); + + if(log.isTraceEnabled()) + log.trace("Instanciando boleto"); + + if(log.isDebugEnabled()) + log.debug("titulo instance : "+titulo); + + if(log.isDebugEnabled()) + log.debug("campoLivre instance : "+campoLivre); + + if(isNotNull(titulo)){ + + this.setTitulo(titulo); + this.setCampoLivre(campoLivre); + this.load(); + + if(log.isDebugEnabled()) + log.debug("boleto instance : "+this); + + }else { + IllegalArgumentException e = new IllegalArgumentException("Título nulo!"); + log.error("Valor Não Permitido!",e); + throw e; + } + + if(log.isDebugEnabled() || log.isTraceEnabled()){ + + log.trace("Boleto Instanciado : "+this); + } + + } + + private void load(){ + + codigoDeBarras = new CodigoDeBarras(titulo, campoLivre); + linhaDigitavel = new LinhaDigitavel(codigoDeBarras); + dataDeProcessamento = new Date(); + + if(log.isInfoEnabled()){ + + log.info("Data de Processamento do Boleto : "+DDMMYYYY_B.format(dataDeProcessamento)); + } + } + + /** + * @return O campoLivre da isntância. + */ + public CampoLivre getCampoLivre() { + + return campoLivre; + } + + /** + * @param campoLivre the campoLivre to set + */ + private void setCampoLivre(CampoLivre campoLivre) { + + Objects.checkNotNull(campoLivre); + + int length = campoLivre.write().length(); + + if (length == CampoLivre.STRING_LENGTH) { + this.campoLivre = campoLivre; + + } else { + + if (length > CampoLivre.STRING_LENGTH) { + Exceptions.throwIllegalArgumentException("O tamanho da String [" + length + "] é maior que o especificado [" + CampoLivre.STRING_LENGTH + "]!"); + + } else { + Exceptions.throwIllegalArgumentException("O tamanho da String [" + length + "] é menor que o especificado [" + CampoLivre.STRING_LENGTH + "]!"); + } + } + } + + /** + * @return the titulo + */ + public Titulo getTitulo() { + return titulo; + } + + /** + * @param titulo the titulo to set + */ + public void setTitulo(Titulo titulo) { + this.titulo = titulo; + } + + /** + * @see #getDataDeProcessamento() + * + * @return the dataDeProcessamento + */ + public Date getDataDeProcessamento() { + return dataDeProcessamento; + } + + /** + *

+ * Data de emissão do boleto de cobrança. + *

+ * + * @param dataDeProcessamento the dataDeProcessamento to set + */ + public void setDataDeProcessamento(Date dataDeProcessamento) { + this.dataDeProcessamento = dataDeProcessamento; + } + + /** + * @return the codigoDeBarras + */ + public CodigoDeBarras getCodigoDeBarras() { + return codigoDeBarras; + } + + /** + * @param codigoDeBarras the codigoDeBarras to set + */ + public void setCodigoDeBarras(CodigoDeBarras codigoDeBarras) { + this.codigoDeBarras = codigoDeBarras; + } + + /** + * @return the linhaDigitavel + */ + public LinhaDigitavel getLinhaDigitavel() { + return linhaDigitavel; + } + + /** + * @param linhaDigitavel the linhaDigitavel to set + */ + public void setLinhaDigitavel(LinhaDigitavel linhaDigitavel) { + this.linhaDigitavel = linhaDigitavel; + } + + /** + * @see #setLocalPagamento(String) + * + * @return String local de pagamento + */ + public String getLocalPagamento() { + return localPagamento; + } + + /** + *

+ * Possíveis locais para pagamento. + *

+ *

+ * Exemplo: Pagável preferencialmente na Rede X ou em qualquer Banco até + * o Vencimento. + *

+ * + * @param localPagamento1 the localPagamento1 to set + */ + public void setLocalPagamento(String localPagamento1) { + this.localPagamento = localPagamento1; + } + + /** + * @see #setInstrucaoAoSacado(String) + * + * @return the instrucaoAoSacado + */ + public String getInstrucaoAoSacado() { + return instrucaoAoSacado; + } + + /** + *

+ * Instrução adicional ao sacado, para visualizar o conceito de negócio de sacado consultar o + * glossário. + *

+ * + * @param insturcaoAoSacado the insturcaoAoSacado to set + */ + public void setInstrucaoAoSacado(String insturcaoAoSacado) { + this.instrucaoAoSacado = insturcaoAoSacado; + } + + /** + * @return the instrucao1 + */ + public String getInstrucao1() { + return instrucao1; + } + + /** + * @param instrucao1 the instrucao1 to set + */ + public void setInstrucao1(String instrucao1) { + this.instrucao1 = instrucao1; + } + + /** + * @return the instrucao2 + */ + public String getInstrucao2() { + return instrucao2; + } + + /** + * @param instrucao2 the instrucao2 to set + */ + public void setInstrucao2(String instrucao2) { + this.instrucao2 = instrucao2; + } + + /** + * @return the instrucao3 + */ + public String getInstrucao3() { + return instrucao3; + } + + /** + * @param instrucao3 the instrucao3 to set + */ + public void setInstrucao3(String instrucao3) { + this.instrucao3 = instrucao3; + } + + /** + * @return the instrucao4 + */ + public String getInstrucao4() { + return instrucao4; + } + + /** + * @param instrucao4 the instrucao4 to set + */ + public void setInstrucao4(String instrucao4) { + this.instrucao4 = instrucao4; + } + + /** + * @return the instrucao5 + */ + public String getInstrucao5() { + return instrucao5; + } + + /** + * @param instrucao5 the instrucao5 to set + */ + public void setInstrucao5(String instrucao5) { + this.instrucao5 = instrucao5; + } + + /** + * @return the instrucao6 + */ + public String getInstrucao6() { + return instrucao6; + } + + /** + * @param instrucao6 the instrucao6 to set + */ + public void setInstrucao6(String instrucao6) { + this.instrucao6 = instrucao6; + } + + /** + * @return the instrucao7 + */ + public String getInstrucao7() { + return instrucao7; + } + + /** + * @param instrucao7 the instrucao7 to set + */ + public void setInstrucao7(String instrucao7) { + this.instrucao7 = instrucao7; + } + + /** + * @return the instrucao8 + */ + public String getInstrucao8() { + return instrucao8; + } + + /** + * @param instrucao8 the instrucao8 to set + */ + public void setInstrucao8(String instrucao8) { + this.instrucao8 = instrucao8; + } + + /** + * Sobrescreve um campo padrão do boleto. + * + * @param campo + * Nome do campo no template + * @param conteudo + * Texto a ser adicionado ao campo no template + */ + public void sobrescrevaCampo(BoletoCampo campo, String conteudo){ + addTextosExtras(campo.name(), conteudo); + } + + + /** + * @return Todas os campos de texto usados como extra ou sobrescrita no + * template. + */ + public Map getTextosExtras() { + + return this.textosExtras; + } + + + /** + * Substitui todos os campos extra da instância caso exista. + * + * @param textosExtras + * Campos atribuídos + */ + public void setTextosExtras(Map textosExtras) { + + this.textosExtras = textosExtras; + } + + /** + * Adiciona um campo de texto no boleto caso o campo informado tenha o mesmo + * nome no template da instância. + * + * @param campo + * Nome do campo no template + * @param conteudo + * Texto a ser adicionado ao campo no template + */ + public void addTextosExtras(String campo, String conteudo) { + + if(isNull(getTextosExtras())) { + setTextosExtras(new HashMap()); + } + + getTextosExtras().put(campo, conteudo); + } + + /** + * @return Todas os campos de imagem usados como extra ou sobrescrita no + * template. + */ + public Map getImagensExtras() { + return this.imagensExtras; + } + + /** + * Substitui todos os campos extra da instância caso exista. + * + * @param imagensExtras + * Campos atribuídos + */ + public void setImagensExtras(Map imagensExtras) { + this.imagensExtras = imagensExtras; + } + + /** + * Adiciona um campo de imagem no boleto caso o campo informado tenha o + * mesmo nome no template da instância. + * + * @param campo + * Nome do campo no template + * @param conteudo + * Imagem a ser adicionada ao campo no template + */ + public void addImagensExtras(String campo, Image conteudo) { + + if(isNull(getImagensExtras())) { + setImagensExtras(new HashMap()); + } + + getImagensExtras().put(campo, conteudo); + } + + @Override + public String toString() { + return Objects.toString(this); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoException.java new file mode 100644 index 0000000..89d5912 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoException.java @@ -0,0 +1,89 @@ + +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 23:35:28 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 23:35:28 + * + */ + +package org.jrimum.bopepo; + +/** + * + *

+ * Qualquer exceção gerada durante a geração de um Boleto gera uma BoletoExceptiton. Centraliza e localiza os problemas relativos a geração de um boleto. + *

+ * + * + * @author Gilmar P.S.L. + * + * @see org.jrimum.bopepo.BoletoException + * + * @since 0.2 + * + * @version 0.2 + */ + +public class BoletoException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = -3874521668322644183L; + + /** + * + */ + public BoletoException() { + + } + + /** + * @param message + * @param cause + */ + public BoletoException(String message, Throwable cause) { + super(message, cause); + + } + + /** + * @param message + */ + public BoletoException(String message) { + super(message); + + } + + /** + * @param cause + */ + public BoletoException(Throwable cause) { + super(cause); + + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoUtil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoUtil.java new file mode 100644 index 0000000..51d9b12 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoUtil.java @@ -0,0 +1,893 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 27/01/2010 - 00:53:43 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 27/01/2010 - 00:53:43 + * + */ + + +package org.jrimum.bopepo; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.apache.commons.lang.StringUtils.trim; +import static org.jrimum.utilix.Objects.checkNotNull; +import static org.jrimum.utilix.text.Strings.WHITE_SPACE; + +import org.jrimum.utilix.Exceptions; +import org.jrimum.vallia.digitoverificador.BoletoLinhaDigitavelDV; + +/** + *

+ * Utilitário para recuperar informações de strings de códigos de barras e + * linhas digitáveis de boletos. + *

+ * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public final class BoletoUtil { + + /* + * Regras REGEX. + */ + private static final String CODIGO_DE_BARRAS_REGEX = "\\d{44}"; + private static final String LINHA_DIGITAVEL_NUMERICA_REGEX = "\\d{47}"; + private static final String LINHA_DIGITAVEL_FORMATADA_REGEX = "\\d{5}\\.\\d{5} \\d{5}\\.\\d{6} \\d{5}\\.\\d{6} \\d{1} \\d{14}"; + /* + * Mensagens. + */ + private static final String MSG_CODIGO_DE_BARRAS = "Código de barras inválido!"; + private static final String MSG_LINHA_INVALIDA = "Linha digitável inválida!"; + private static final String MSG_STR_VAZIA = "String vazia [ \"%s\" ] tamanho [ %d ]."; + private static final String MSG_NAO_FORMATADA = "String formatada [ \"%s\" ] de tamanho [ %d ] está fora do padrão [ \"ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd\" ] tamanho = 54."; + private static final String MSG_STR_NUMERICA = "String numérica [ \"%s\" ] de tamanho [ %d ] está fora do padrão [ \"ddddddddddddddddddddddddddddddddddddddddddddddd\" ] tamanho = 47."; + + /** + * Utility class pattern: classe não instanciável + * + * @throws AssertionError + * caso haja alguma tentativa de utilização deste construtor. + */ + private BoletoUtil(){ + + Exceptions.throwIllegalStateException("Instanciação não permitida!"); + } + + /** + *

+ * Retorna o campo livre de uma dada linha digitável. + *

+ * + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String getCampoLivreDaLinhaDigitavelFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelFormatada(linhaDigitavel); + + final String linhaNumerica = linhaDigitavelFormatadaEmNumerica(linhaDigitavel); + + return new StringBuilder().append(linhaNumerica.substring(4, 9)) + .append(linhaNumerica.substring(10, 20)).append( + linhaNumerica.substring(21, 31)).toString(); + } + + /** + *

+ * Retorna o valor do título de uma dada linha digitável. + *

+ * + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String getValorDoTituloDaLinhaDigitavelFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelFormatada(linhaDigitavel); + + return linhaDigitavelFormatadaEmNumerica(linhaDigitavel).substring(37, + 47); + } + + /** + *

+ * Retorna o fator de vencimento de uma dada linha digitável. + *

+ * + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String getFatorDeVencimentoDaLinhaDigitavelFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelFormatada(linhaDigitavel); + + return linhaDigitavelFormatadaEmNumerica(linhaDigitavel).substring(33, + 37); + } + + /** + *

+ * Retorna o dígito verificador geral de uma dada linha digitável. + *

+ * + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String getDigitoVerificadorGeralDaLinhaDigitavelFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelFormatada(linhaDigitavel); + + return linhaDigitavelFormatadaEmNumerica(linhaDigitavel).substring(32, + 33); + } + + /** + *

+ * Retorna o código da moeda de uma dada linha digitável. + *

+ * + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String getCodigoDaMoedaDaLinhaDigitavelFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelFormatada(linhaDigitavel); + + return linhaDigitavelFormatadaEmNumerica(linhaDigitavel) + .substring(3, 4); + } + + /** + *

+ * Retorna o código do banco de uma dada linha digitável. + *

+ * + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String getCodigoDoBancoDaLinhaDigitavelFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelFormatada(linhaDigitavel); + + return linhaDigitavelFormatadaEmNumerica(linhaDigitavel) + .substring(0, 3); + } + + /** + *

+ * Retorna o campo livre de um dado código de barras. + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String getCampoLivreDoCodigoDeBarras( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + checkFormatoCodigoDeBarras(codigoDeBarras); + + return trim(codigoDeBarras).substring(19, 44); + } + + /** + *

+ * Retorna o valor do título de um dado código de barras. + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String getValorDoTituloDoCodigoDeBarras( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + checkFormatoCodigoDeBarras(codigoDeBarras); + + return trim(codigoDeBarras).substring(9, 19); + } + + /** + *

+ * Retorna o fator de vencimento de um dado código de barras. + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String getFatorDeVencimentoDoCodigoDeBarras( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + checkFormatoCodigoDeBarras(codigoDeBarras); + + return trim(codigoDeBarras).substring(5, 9); + } + + /** + *

+ * Retorna o dígito verificador de um dado código de barras. + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String getDigitoVerificadorGeralDoCodigoDeBarras( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + checkFormatoCodigoDeBarras(codigoDeBarras); + + return trim(codigoDeBarras).substring(4, 5); + } + + /** + *

+ * Retorna o código da moeda de um dado código de barras. + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String getCodigoDaMoedaDoCodigoDeBarras( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + checkFormatoCodigoDeBarras(codigoDeBarras); + + return trim(codigoDeBarras).substring(3, 4); + } + + /** + *

+ * Retorna o código do banco de um dado código de barras. + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return código do banco em string + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String getCodigoDoBancoDoCodigoDeBarras( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + checkFormatoCodigoDeBarras(codigoDeBarras); + + return trim(codigoDeBarras).substring(0, 3); + } + + /** + *

+ * Transforma um código de barras em uma linha digitável no formato + * FEBRABAN. + *

+ *

+ * "dddddddddddddddddddddddddddddddddddddddddddd"
+ *
+ * "ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd" + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return linha digitável contendo somente números + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String codigoDeBarrasEmLinhaDigitavelFormatada( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + return linhaDigitavelNumericaEmFormatada(codigoDeBarrasEmLinhaDigitavelNumerica(codigoDeBarras)); + } + + /** + *

+ * Transforma um código de barras em uma linha digitável numérica. + *

+ *

+ * "dddddddddddddddddddddddddddddddddddddddddddd"
+ *
+ * "ddddddddddddddddddddddddddddddddddddddddddddddd" + *

+ * + * @see #checkFormatoCodigoDeBarras(String) + * + * @param codigoDeBarras + * string contendo somente números + * @return linha digitável contendo somente números + * + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static String codigoDeBarrasEmLinhaDigitavelNumerica( + String codigoDeBarras) throws + IllegalArgumentException, CodigoDeBarrasException { + + checkFormatoCodigoDeBarras(codigoDeBarras); + + final BoletoLinhaDigitavelDV calculadorDV = new BoletoLinhaDigitavelDV(); + + final StringBuilder linhaDigitavel = new StringBuilder(); + + final String c = trim(codigoDeBarras); + + // campo1 + // banco + linhaDigitavel.append(c.substring(0, 3)); + // moeda + linhaDigitavel.append(c.substring(3, 4)); + linhaDigitavel.append(c.substring(19, 24)); + linhaDigitavel.append(calculadorDV.calcule(linhaDigitavel.toString())); + + // campo2 + linhaDigitavel.append(c.substring(24, 34)); + linhaDigitavel.append(calculadorDV.calcule(c.substring(24, 34))); + + // campo3 + linhaDigitavel.append(c.substring(34, 44)); + linhaDigitavel.append(calculadorDV.calcule(c.substring(34, 44))); + + // campo4=DV_Geral + linhaDigitavel.append(c.substring(4, 5)); + + // campo5 + linhaDigitavel.append(c.substring(5, 19)); + + return linhaDigitavel.toString(); + } + + /** + *

+ * Transforma uma linha digitável no formato FEBRABAN em um código de + * barras. + *

+ *

+ * "ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd" + *
+ *
+ * "dddddddddddddddddddddddddddddddddddddddddddd" + *

+ * + * @see #checkExistsLinhaDigitavel(String) + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return linha digitável contendo somente números + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String linhaDigitavelFormatadaEmCodigoDeBarras( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + return linhaDigitavelNumericaEmCodigoDeBarras(linhaDigitavelFormatadaEmNumerica(linhaDigitavel)); + } + + /** + *

+ * Transforma uma linha digitável não formatada em um código de barras. + *

+ *

+ * "ddddddddddddddddddddddddddddddddddddddddddddddd"
+ *
+ * "dddddddddddddddddddddddddddddddddddddddddddd" + *

+ * + * @see #checkExistsLinhaDigitavel(String) + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return linha digitável contendo somente números + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String linhaDigitavelNumericaEmCodigoDeBarras( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelNumerica(linhaDigitavel); + + final StringBuilder codigoDeBarras = new StringBuilder(); + + final String l = trim(linhaDigitavel); + + // banco + codigoDeBarras.append(l.substring(0, 3)); + // moeda + codigoDeBarras.append(l.substring(3, 4)); + + codigoDeBarras.append(l.substring(32, 33)); + codigoDeBarras.append(l.substring(33, 47)); + codigoDeBarras.append(l.substring(4, 9)); + codigoDeBarras.append(l.substring(10, 20)); + codigoDeBarras.append(l.substring(21, 31)); + + return codigoDeBarras.toString(); + } + + /** + *

+ * Remove formatação e espaços de uma linha digitável no formato FEBRABAN: + *

+ *

+ * "ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd" + *
+ *
+ * "ddddddddddddddddddddddddddddddddddddddddddddddd" + *

+ * + * @see #checkExistsLinhaDigitavel(String) + * @see #checkFormatoLinhaDigitavelFormatada(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return linha digitável contendo somente números + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String linhaDigitavelFormatadaEmNumerica( + String linhaDigitavel) throws IllegalArgumentException, + LinhaDigitavelException { + + checkFormatoLinhaDigitavelFormatada(linhaDigitavel); + + return linhaDigitavel.replaceAll(WHITE_SPACE, EMPTY).replaceAll("\\.", + EMPTY); + } + + /** + *

+ * Transforma linha digitável númerica em FEBRABAN: + *

+ *

+ * "ddddddddddddddddddddddddddddddddddddddddddddddd"
+ *
+ * "ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd" + *

+ * + * @see #checkExistsLinhaDigitavel(String) + * @see #checkFormatoLinhaDigitavelNumerica(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @return linha digitável contendo somente números + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static String linhaDigitavelNumericaEmFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkFormatoLinhaDigitavelNumerica(linhaDigitavel); + + final StringBuilder linhaFormatada = new StringBuilder(); + + final String l = trim(linhaDigitavel); + + linhaFormatada.append(l.substring(0, 5)); + linhaFormatada.append("."); + linhaFormatada.append(l.substring(5, 10)); + linhaFormatada.append(WHITE_SPACE); + linhaFormatada.append(l.substring(10, 15)); + linhaFormatada.append("."); + linhaFormatada.append(l.substring(15, 21)); + linhaFormatada.append(WHITE_SPACE); + linhaFormatada.append(l.substring(21, 26)); + linhaFormatada.append("."); + linhaFormatada.append(l.substring(26, 32)); + linhaFormatada.append(WHITE_SPACE); + linhaFormatada.append(l.substring(32, 33)); + linhaFormatada.append(WHITE_SPACE); + linhaFormatada.append(l.substring(33)); + + return linhaFormatada.toString(); + } + + /** + *

+ * Informa se um dado código de barras é válido ou não. + *

+ * + * @param codigoDeBarras + * @return true = valida + */ + public static boolean isCodigoDeBarrasValido(String codigoDeBarras) { + + if (isNotBlank(codigoDeBarras)) { + + return codigoDeBarras.trim().matches(CODIGO_DE_BARRAS_REGEX); + } else { + + return false; + } + } + + /** + *

+ * Informa se uma dada linha digitável formatada é válida ou não. + *

+ * + * @param linhaDigitavel + * @return true = valida + */ + public static boolean isLinhaDigitavelFormatadaValida( + String linhaDigitavel) { + + if (isNotBlank(linhaDigitavel)) { + + return linhaDigitavel.trim().matches( + LINHA_DIGITAVEL_FORMATADA_REGEX); + } else { + + return false; + } + } + + /** + *

+ * Informa se uma dada linha digitável é válida ou não. + *

+ * + * @param linhaDigitavel + * @return true = valida + */ + public static boolean isLinhaDigitavelNumericaValida( + String linhaDigitavel) { + + if (isNotBlank(linhaDigitavel)) { + + return linhaDigitavel.trim() + .matches(LINHA_DIGITAVEL_NUMERICA_REGEX); + } else { + + return false; + } + } + + /** + *

+ * Verifica se a linha digitável não é nula, não é + * vazia e é numérica, obedecendo o seguinte + * FEBRABAN: + *

+ *

+ * "ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd" + *

+ *

+ * Onde o número de dígitos é igual a 54 e o número de espaços é igual a 4. + *

+ *

+ *

    + *
  • Caso a string seja nula, lança uma IllegalArgumentException; + *
  • + *
  • Caso seja vazia, lança uma IllegalArgumentException;
  • + *
  • Caso não esteja no formato especificado, lança uma + * LinhaDigitavelException.
  • + *
+ *

+ * + * @see #checkExistsLinhaDigitavel(String) + * + * @param linhaDigitavel + * string no formato FEBRABAN + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static void checkFormatoLinhaDigitavelFormatada( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkExistsLinhaDigitavel(linhaDigitavel); + + if (!linhaDigitavel.contains(".")) { + throw new LinhaDigitavelException(MSG_LINHA_INVALIDA + + " " + + String.format(MSG_NAO_FORMATADA, linhaDigitavel, + linhaDigitavel.length()) + + " A linha digitável formatada deve conter pontos!"); + } + + if (!linhaDigitavel.trim().contains(" ")) { + throw new LinhaDigitavelException(MSG_LINHA_INVALIDA + + " " + + String.format(MSG_NAO_FORMATADA, linhaDigitavel, + linhaDigitavel.length()) + + " A linha digitável formatada deve conter espaços!"); + } + + if (!isLinhaDigitavelFormatadaValida(linhaDigitavel)) { + throw new LinhaDigitavelException(MSG_LINHA_INVALIDA + + " " + + String.format(MSG_NAO_FORMATADA, linhaDigitavel, + linhaDigitavel.length())); + } + } + + /** + *

+ * Verifica se a linha digitável não é nula, não é + * vazia e é numérica, obedecendo o seguinte + * formato: + *

+ *

+ * "ddddddddddddddddddddddddddddddddddddddddddddddd" + *

+ *

+ * Onde o número de dígitos é igual a 47. + *

+ *

+ *

    + *
  • Caso a string seja nula, lança uma IllegalArgumentException; + *
  • + *
  • Caso seja vazia, lança uma IllegalArgumentException;
  • + *
  • Caso não esteja no formato especificado, lança uma + * LinhaDigitavelException.
  • + *
+ *

+ * + * @see #checkExistsLinhaDigitavel(String) + * + * @param linhaDigitavel + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws LinhaDigitavelException + * quando a string não está no formato válido + */ + public static void checkFormatoLinhaDigitavelNumerica( + String linhaDigitavel) throws + IllegalArgumentException, LinhaDigitavelException { + + checkExistsLinhaDigitavel(linhaDigitavel); + + if (!isLinhaDigitavelNumericaValida(linhaDigitavel)) { + throw new LinhaDigitavelException(MSG_LINHA_INVALIDA + + " " + + String.format(MSG_STR_NUMERICA, linhaDigitavel, + linhaDigitavel.length()) + + " A linha deve conter apenas 47 dígitos númericos [0-9]!"); + } + + } + + /** + *

+ * Verifica se o código de barras não é nulo, não é + * vazio e é numérico, obedecendo o seguinte + * formato: + *

+ *

+ * "dddddddddddddddddddddddddddddddddddddddddddd" + *

+ *

+ * Onde o número de dígitos é igual a 44. + *

+ *

+ *

    + *
  • Caso a string seja nula, lança uma IllegalArgumentException; + *
  • + *
  • Caso seja vazia, lança uma IllegalArgumentException;
  • + *
  • Caso não esteja no formato especificado, lança uma + * LinhaDigitavelException.
  • + *
+ *

+ * + * @see #checkExistsLinhaDigitavel(String) + * + * @param codigoDeBarras + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + * @throws CodigoDeBarrasException + * quando a string não está no formato válido + */ + public static void checkFormatoCodigoDeBarras(String codigoDeBarras) + throws IllegalArgumentException, + CodigoDeBarrasException { + + checkExistsCodigoDeBarras(codigoDeBarras); + + if (!isCodigoDeBarrasValido(codigoDeBarras)) { + throw new CodigoDeBarrasException( + MSG_CODIGO_DE_BARRAS + + " " + + String.format(MSG_STR_NUMERICA, codigoDeBarras, + codigoDeBarras.length()) + + " O código de barras deve conter apenas 44 dígitos númericos [0-9]!"); + } + + } + + /** + *

+ * Verifica se a linha digitável não é nula e não é + * vazia. Caso nula lança uma IllegalArgumentException, + * caso vazia lança uma IllegalArgumentException. + *

+ *

+ * Considera-se vazia se linhaDigitavel.trim().length() == 0. + *

+ * + * @param linhaDigitavel + * + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + */ + public static void checkExistsLinhaDigitavel(String linhaDigitavel) + throws IllegalArgumentException { + + checkNotNull(linhaDigitavel, MSG_LINHA_INVALIDA); + + if (isBlank(linhaDigitavel)) { + Exceptions.throwIllegalArgumentException(MSG_LINHA_INVALIDA + + " " + + String.format(MSG_STR_VAZIA, linhaDigitavel, + linhaDigitavel.length())); + } + } + + /** + *

+ * Verifica se código de barras não é nulo e não é + * vazio. Caso nula lança uma IllegalArgumentException, + * caso vazia lança uma IllegalArgumentException. + *

+ *

+ * Considera-se vazia se linhaDigitavel.trim().length() == 0. + *

+ * + * @param codigoDeBarras + * @throws IllegalArgumentException + * quando a string é nula ou quando a string é vazia + */ + public static void checkExistsCodigoDeBarras(String codigoDeBarras) + throws IllegalArgumentException { + + checkNotNull(codigoDeBarras, MSG_LINHA_INVALIDA); + + if (isBlank(codigoDeBarras)) { + Exceptions.throwIllegalArgumentException(MSG_CODIGO_DE_BARRAS + + " " + + String.format(MSG_STR_VAZIA, codigoDeBarras, + codigoDeBarras.length())); + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarras.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarras.java new file mode 100644 index 0000000..d5b26ca --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarras.java @@ -0,0 +1,359 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:04:23 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:04:23 + * + */ + + +package org.jrimum.bopepo; + +import java.math.BigDecimal; +import java.util.Date; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.jrimum.bopepo.campolivre.CampoLivre; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.BlockOfFields; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.DecimalFormat; +import org.jrimum.vallia.digitoverificador.BoletoCodigoDeBarrasDV; + + +/** + *

+ * É um número único para cada Boleto composto dos seguintes campos: + *

+ *
+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo
01-0339(3)Identificação do banco
04-04 1 9 Código moeda (9-Real)
05-05 1 9 Dígito verificador do composição de barras (DV)
06-09 4 9(4)Posições 06 a 09 – fator de vencimento
10-19109(08)v99Posições 10 a 19 – valor nominal do título 
20-44 25 9(25) FixedField livre – utilizado de acordo com a especificação interna do banco + * emissor
+ *
+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class CodigoDeBarras extends BlockOfFields{ + + /** + * + */ + private static final long serialVersionUID = 748913164143978133L; + + private static Logger log = Logger.getLogger(CodigoDeBarras.class); + + /** + * + */ + private static final Integer FIELDS_LENGTH = 6; + + /** + * + */ + private static final Integer STRING_LENGTH = 44; + + /** + * Código do Banco. + */ + private FixedField codigoDoBanco; + + /** + * Código da moeda usada no boleto. + */ + private FixedField codigoDaMoeda; + + /** + * Mecanismo de autenticação usado no composição de barras. + * + * @see org.jrimum.vallia.digitoverificador.BoletoCodigoDeBarrasDV + */ + private FixedField digitoVerificadorGeral; + + /** + * Representa a quantidade de dias decorridos da data base à data de + * vencimento do título. + * + * @see FatorDeVencimento#toFator(Date) + */ + private FixedField fatorDeVencimento; + + /** + * Valor do título. + */ + private FixedField valorNominalDoTitulo; + + /** + * @see org.jrimum.bopepo.campolivre.CampoLivre + */ + private FixedField campoLivre; + + /** + *

+ * Cria um Código de Barras a partir do título e campo livre passados. + *

+ * + * @param titulo + * @param campoLivre + * + * @see CampoLivre + */ + CodigoDeBarras(Titulo titulo, CampoLivre campoLivre) { + super(); + setLength(STRING_LENGTH); + setSize(FIELDS_LENGTH); + + if(log.isTraceEnabled()) + log.trace("Instanciando o CodigoDeBarras"); + + if(log.isDebugEnabled()){ + log.debug("titulo instance : "+titulo); + log.debug("campoLivre instance : "+campoLivre); + } + + codigoDoBanco = new FixedField("0", 3, Fillers.ZERO_LEFT); + codigoDaMoeda = new FixedField(0, 1, Fillers.ZERO_LEFT); + digitoVerificadorGeral = new FixedField(0, 1, Fillers.ZERO_LEFT); + fatorDeVencimento = new FixedField(0, 4, Fillers.ZERO_LEFT); + valorNominalDoTitulo = new FixedField(new BigDecimal(0), 10,DecimalFormat.NUMBER_DD_BR.copy(),Fillers.ZERO_LEFT); + this.campoLivre = new FixedField(StringUtils.EMPTY, 25); + + add(codigoDoBanco); + add(codigoDaMoeda); + add(digitoVerificadorGeral); + add(fatorDeVencimento); + add(valorNominalDoTitulo); + add(this.campoLivre); + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + this.codigoDoBanco.setValue(contaBancaria.getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado()); + this.codigoDaMoeda.setValue(titulo.getTipoDeMoeda().getCodigo()); + this.calculateAndSetFatorDeVencimento(titulo.getDataDoVencimento()); + this.valorNominalDoTitulo.setValue(titulo.getValor()); + this.campoLivre.setValue(campoLivre.write()); + this.calculateAndSetDigitoVerificadorGeral(); + + if(log.isDebugEnabled() || log.isTraceEnabled()) + log.debug("codigoDeBarra instanciado : "+this); + } + + private void calculateAndSetDigitoVerificadorGeral() { + + if (log.isTraceEnabled()) + log.trace("Calculando Digito Verificador Geral"); + + // Instanciando o objeto irá calcular o dígito verificador do boleto. + BoletoCodigoDeBarrasDV calculadorDV = new BoletoCodigoDeBarrasDV(); + + // Preparando o conjunto de informações que será a base para o cálculo + // do dígito verificador, conforme normas da FEBRABAN. + StringBuilder toCalculateDV = new StringBuilder(codigoDoBanco.write()) + .append(codigoDaMoeda.write()) + .append(fatorDeVencimento.write()) + .append(valorNominalDoTitulo.write()) + .append(campoLivre.write()); + + // Realizando o cálculo dígito verificador e em seguida armazenando + // a informação no campo "digitoVerificadorGeral". + digitoVerificadorGeral.setValue( + calculadorDV.calcule(toCalculateDV.toString()) + ); + + if (log.isDebugEnabled()) + log.debug("Digito Verificador Geral calculado : " + + digitoVerificadorGeral.getValue()); + } + + /** + *

+ * Representa a quantidade de dias decorridos da data base à data de + * vencimento do título. + *

+ *

+ * É o resultado da subtração entre a data do vencimento do título e a DATA + * BASE, fixada em 07.10.1997 (03.07.2000 retrocedidos 1000 dias do in�cio + * do processo). + *

+ *

+ * Os bloquetos de cobrança emitidos a partir de primeiro de setembro de + * 2000 devem conter essas características, para que quando forem capturados + * pela rede bancária, os sistemas façam a operação inversa, ou seja, + * adicionar à data base o fator de vencimento capturado, obtendo, dessa + * forma, a data do vencimento do bloqueto. + *

+ * + * @param vencimento + */ + private void calculateAndSetFatorDeVencimento(Date vencimento) { + + fatorDeVencimento.setValue( + FatorDeVencimento.toFator(vencimento)); + } + + /** + * @return the codigoDoBanco + */ + FixedField getCodigoDoBanco() { + return codigoDoBanco; + } + + /** + * @param codigoDoBanco the codigoDoBanco to set + */ + void setCodigoDoBanco(FixedField codigoDoBanco) { + this.codigoDoBanco = codigoDoBanco; + } + + /** + * @return the codigoDaMoeda + */ + FixedField getCodigoDaMoeda() { + return codigoDaMoeda; + } + + /** + * @param codigoDaMoeda the codigoDaMoeda to set + */ + void setCodigoDaMoeda(FixedField codigoDaMoeda) { + this.codigoDaMoeda = codigoDaMoeda; + } + + /** + * @return the digitoVerificadorGeral + */ + FixedField getDigitoVerificadorGeral() { + return digitoVerificadorGeral; + } + + /** + * @param digitoVerificadorGeral the digitoVerificadorGeral to set + */ + void setDigitoVerificadorGeral(FixedField digitoVerificadorGeral) { + this.digitoVerificadorGeral = digitoVerificadorGeral; + } + + /** + * @return the fatorDeVencimento + */ + FixedField getFatorDeVencimento() { + return fatorDeVencimento; + } + + /** + * @param fatorDeVencimento the fatorDeVencimento to set + */ + void setFatorDeVencimento(FixedField fatorDeVencimento) { + this.fatorDeVencimento = fatorDeVencimento; + } + + /** + * @return the valorNominalDoTitulo + */ + FixedField getValorNominalDoTitulo() { + return valorNominalDoTitulo; + } + + /** + * @param valorNominalDoTitulo the valorNominalDoTitulo to set + */ + void setValorNominalDoTitulo(FixedField valorNominalDoTitulo) { + this.valorNominalDoTitulo = valorNominalDoTitulo; + } + + /** + * @return the campoLivre + */ + FixedField getCampoLivre() { + return campoLivre; + } + + /** + * @param campoLivre the campoLivre to set + */ + void setCampoLivre(FixedField campoLivre) { + this.campoLivre = campoLivre; + } + + @Override + public String toString() { + return Objects.toString(this); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarrasException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarrasException.java new file mode 100644 index 0000000..7c3549e --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarrasException.java @@ -0,0 +1,90 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 23:38:24 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 23:38:24 + * + */ + +package org.jrimum.bopepo; + + + +/** + * + *

+ * Qualquer exceção gerada durante a geração do Código de Barras gera uma CodigoDeBarrasException. Centraliza e localiza os problemas relativos a geração de um código de barras. + *

+ * + * + * @author Gilmar P.S.L. + * + * @see org.jrimum.bopepo.CodigoDeBarras + * + * @since 0.2 + * + * @version 0.2 + */ + +public class CodigoDeBarrasException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = -3577770829101964833L; + + /** + * + */ + public CodigoDeBarrasException() { + + } + + /** + * @param message + * @param cause + */ + public CodigoDeBarrasException(String message, Throwable cause) { + super(message, cause); + + } + + /** + * @param message + */ + public CodigoDeBarrasException(String message) { + super(message); + + } + + /** + * @param cause + */ + public CodigoDeBarrasException(Throwable cause) { + super(cause); + + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/FatorDeVencimento.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/FatorDeVencimento.java new file mode 100644 index 0000000..fc6c905 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/FatorDeVencimento.java @@ -0,0 +1,216 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:17:40 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:17:40 + * + */ + +package org.jrimum.bopepo; + +import static java.lang.String.format; +import static org.jrimum.utilix.Objects.isNull; +import static org.jrimum.utilix.text.DateFormat.DDMMYYYY_B; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import org.apache.commons.lang.time.DateUtils; +import org.jrimum.utilix.Dates; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * Serviços utilitários do universo bancário, como por exemplo calcular o fator + * de vencimento de boletos. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class FatorDeVencimento{ + + /** + *

+ * Data base para o cálculo do fator de vencimento fixada em 07/10/1997 pela + * FEBRABAN. + *

+ */ + private static final Calendar BASE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(1997, Calendar.OCTOBER, 7); + + /** + *

+ * Data base para o cálculo do fator de vencimento fixada em 07/10/1997 pela + * FEBRABAN. + *

+ */ + private static final Date DATA_BASE_DO_FATOR_DE_VENCIMENTO = BASE_DO_FATOR_DE_VENCIMENTO.getTime(); + + /** + *

+ * Data máxima alcançada pelo fator de vencimento com base fixada em + * 07/10/1997. + *

+ */ + private static final Date DATA_LIMITE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(2025, Calendar.FEBRUARY, 21).getTime(); + + /** + *

+ * Calcula o fator de vencimento a partir da subtração entre a DATA DE + * VENCIMENTO de um título e a DATA BASE fixada em 07/10/1997. + *

+ * + *

+ * O fator de vencimento nada mais é que um referencial numérico de 4 + * dígitos que representa a quantidade de dias decorridos desde a data base + * (07/10/1997) até a data de vencimento do título. Ou seja, a diferença em + * dias entre duas datas. + *

+ * + *

+ * Exemplos: + *

+ *
  • 07/10/1997 (Fator = 0);
  • 03/07/2000 + * (Fator = 1000);
  • 05/07/2000 (Fator = 1002);
  • 01/05/2002 + * (Fator = 1667);
  • 21/02/2025 (Fator = 9999).
+ * + *

+ * Funcionamento: + *

+ * + *
  • Caso a data de vencimento seja anterior a data + * base (Teoricamente fator negativo), uma exceção do tipo + * IllegalArgumentException será lançada.
  • A data limite para o + * cálculo do fator de vencimento é 21/02/2025 (Fator de vencimento = 9999). + * Caso a data de vencimento seja posterior a data limite, uma exceção do + * tipo IllegalArgumentException será lançada.
+ * + *

+ * ATENÇÃO, esse cálculo se refere a títulos em cobrança, + * ou melhor: BOLETOS. Desta forma, lembramos que a DATA BASE é uma norma da + * FEBRABAN. Essa norma diz que todos os boletos emitidos a partir de 1º de + * setembro de 2000 (primeiro dia útil = 03/07/2000 - SEGUNDA) devem seguir + * esta regra de cálculo para compor a informação de vencimento no código de + * barras. Portanto, boletos no padrão FEBRABAN quando capturados por + * sistemas da rede bancária permitem que se possa realizar a operação + * inversa, ou seja, adicionar à data base o fator de vencimento capturado. + * Obtendo então a data de vencimento deste boleto. + *

+ * @param data + * data de vencimento de um título + * @return fator de vencimento calculado + * @throws IllegalArgumentException + * + * @since 0.2 + */ + public static int toFator(Date data) throws IllegalArgumentException { + + if (isNull(data)) { + + return (Integer) Exceptions.throwIllegalArgumentException("Impossível realizar o cálculo do fator de vencimento de uma data nula!"); + + } else { + + Date dataTruncada = DateUtils.truncate(data, Calendar.DATE); + + checkIntervalo(dataTruncada); + + return (int) Dates.calculeDiferencaEmDias(DATA_BASE_DO_FATOR_DE_VENCIMENTO, dataTruncada); + } + } + + /** + *

+ * Transforma um fator de vencimento em um objeto data da forma inversa + * descrita em {@linkplain #toFator(Date)}. + *

+ * + * @param fator + * - Número entre o intervalo (incluíndo) 0 e 9999 + * @return Data do vencimento + * @throws IllegalArgumentException + * Caso o {@code fator} < 0 ou {@code fator} > 9999 + */ + public static Date toDate(int fator) throws IllegalArgumentException { + + checkIntervalo(fator); + + Calendar date = (Calendar) BASE_DO_FATOR_DE_VENCIMENTO.clone(); + + date.add(Calendar.DAY_OF_YEAR, fator); + + return DateUtils.truncate(date.getTime(), Calendar.DATE); + } + + /** + *

+ * Lança exceção caso a {@code dataVencimentoTruncada} esteja fora do + * intervalo entre a {@linkplain #DATA_BASE_DO_FATOR_DE_VENCIMENTO} e a + * {@linkplain #DATA_LIMITE_DO_FATOR_DE_VENCIMENTO}. + *

+ * + * @param dataVencimentoTruncada + * data de vencimento truncada com {@code + * DateUtils.truncate(date, Calendar.DATE)} + * @throws IllegalArgumentException + * Caso a data esteja {@code dataVencimentoTruncada} esteja fora + * do intervalo entre a + * {@linkplain #DATA_BASE_DO_FATOR_DE_VENCIMENTO} e a + * {@linkplain #DATA_LIMITE_DO_FATOR_DE_VENCIMENTO} + */ + private static void checkIntervalo(Date dataVencimentoTruncada) throws IllegalArgumentException { + + if(dataVencimentoTruncada.before(DATA_BASE_DO_FATOR_DE_VENCIMENTO) + || dataVencimentoTruncada.after(DATA_LIMITE_DO_FATOR_DE_VENCIMENTO)) { + + Exceptions.throwIllegalArgumentException( + format("Para o cálculo do fator de vencimento se faz necessário informar uma data entre %s e %s.", + DDMMYYYY_B.format(DATA_BASE_DO_FATOR_DE_VENCIMENTO), DDMMYYYY_B.format(DATA_LIMITE_DO_FATOR_DE_VENCIMENTO))); + + } + } + + /** + *

Lança exceção caso o {@code fator} estja fora do intervalo.

+ * + * @param fatorDeVencimento - Número entre o intervalo (incluíndo) 0 e 9999 + * @throws IllegalArgumentException Caso o {@code fator} < 0 ou {@code fator} > 9999 + */ + private static void checkIntervalo(int fatorDeVencimento) throws IllegalArgumentException { + + if (fatorDeVencimento < 0 || fatorDeVencimento > 9999) { + + Exceptions.throwIllegalArgumentException( + "Impossível transformar em data um fator menor que zero! O fator de vencimento deve ser um número entre 0 e 9999."); + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavel.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavel.java new file mode 100644 index 0000000..15448c3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavel.java @@ -0,0 +1,538 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:04:37 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:04:37 + * + */ + + +package org.jrimum.bopepo; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.jrimum.texgit.type.component.BlockOfFields; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; +import org.jrimum.vallia.digitoverificador.BoletoLinhaDigitavelDV; + + +/** + * + * Representa a linha digitável do boleto, embora a linha digitável contenha a + * mesma informação do código de barras, essa informação é disposta de uma forma + * diferente e são acrescentados 3 dígitos verificadores.
+ *
+ * Modelo:
+ *
+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoConteúdo
01-03 3 Identificação do banco
04-041 Código de moeda (9 – Real)
05-09 5 Cinco primeiras posições do campo livre (posições 20 a 24 do código de + * barras)
10-10 1 Dígito verificador do primeiro campo
11-20 10 6ª a 15ª posições do campo livre (posições 25 a 34 do código de barras) + *
21-21 1 Dígito verificador do segundo campo
22-31 10 16ª a 25ª posições do campo livre (posições 35 a 44 do código de barras) + *
32-32 1 Dígito verificador do terceiro campo
33-33 1 Dígito verificador geral (posição 5 do código de barras)
34-37 4 Posições 34 a 37 – fator de vencimento (posições 6 a 9 do código debarras)
37-47 10 Posições 38 a 47 – valor nominal do título(posições 10 a 19 do código de barras)
+ * + *
+ *
+ * + * Observações: + * + *
+ *
    + * + *
  • Em cada um dos três primeiros campos, após a 5a posição, deve ser + * inserido um ponto “.”, a fim de facilitar a visualização, para a digitação, + * quando necessário;
  • + *
  • Quinto campo: + *
      + *
      + *
    • preenchimento com zeros entre o fator de vencimento e o valor até + * completar 14 posições; + *
    • a existência de “0000” no campo “fator de vencimento” da linha digitável + * do bloqueto de cobrança é indicativo de que o código de barras não contém + * fator de vencimento. Nesse caso, o banco acolhedor/recebedor estará isento + * das responsabilidades pelo recebimento após o vencimento, que impede de + * identificar automaticamente se o bloqueto está ou não vencido;
    • + *
    • quando se tratar de bloquetos sem discriminação do valor no código de + * barras, a representação deverá ser com zeros;
    • + *
    • não deverá conter separação por pontos, vírgulas ou espaços;
    • + *
    + *
    + *
  • + *
  • Os dígitos verificadores referentes aos 1º, 2º e 3º campos não são + * representados no código de barras;
  • + *
  • Os dados da linha digitável não se apresentam na mesma ordem do código + * de barras.
  • + * + *
+ * + * + * @see org.jrimum.bopepo.CodigoDeBarras + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class LinhaDigitavel extends BlockOfFields { + + /** + * + */ + private static final long serialVersionUID = -6089634012523938802L; + + private static Logger log = Logger.getLogger(LinhaDigitavel.class); + + /** + * + */ + private static final Integer FIELDS_LENGTH = 5; + + /** + *

+ * Tamanho dos campos mais os espaços entre eles. + *

+ */ + private static final Integer STRING_LENGTH = 54; + + /** + * + */ + private FixedField innerCampo1; + + /** + * + */ + private FixedField innerCampo2; + + /** + * + */ + private FixedField innerCampo3; + + /** + *

+ * Digito verificador geral. + *

+ */ + private FixedField campo4; + + /** + * + */ + private FixedField innerCampo5; + + + /** + *

+ * Cria uma linha digitável a partir do código de barras passado. + *

+ * + * @param codigoDeBarras + * + * @see CodigoDeBarras + * + * @since 0.2 + */ + LinhaDigitavel(CodigoDeBarras codigoDeBarras) { + super(); + setLength(STRING_LENGTH); + setSize(FIELDS_LENGTH); + + if(log.isTraceEnabled()) + log.trace("Instanciando Linha Digitável"); + + if(log.isDebugEnabled()) + log.debug("codigoDeBarra instance : "+codigoDeBarras); + + innerCampo1 = new FixedField(new InnerCampo1(4,11),11); + innerCampo2 = new FixedField(new InnerCampo2(2,12),12); + innerCampo3 = new FixedField(new InnerCampo3(2,12),12); + campo4 = new FixedField(new Integer(0),1); + innerCampo5 = new FixedField(new InnerCampo5(2,14),14); + + add(innerCampo1); + add(innerCampo2); + add(innerCampo3); + add(campo4); + add(innerCampo5); + + this.innerCampo1.getValue().load(codigoDeBarras); + this.innerCampo2.getValue().load(codigoDeBarras); + this.innerCampo3.getValue().load(codigoDeBarras); + + this.campo4.setValue(codigoDeBarras.getDigitoVerificadorGeral().getValue()); + + if(log.isDebugEnabled()) + log.debug("InnerCampo 4 da Linha Digitável : "+this.campo4.getValue()); + + this.innerCampo5.getValue().load(codigoDeBarras); + + if(log.isDebugEnabled() || log.isTraceEnabled()) + log.debug("linhaDigitavel instanciada : "+this.write()); + } + + /** + * Escreve a linha digitável foramatada (com espaço entre os campos). + * + * @see org.jrimum.texgit.type.component.BlockOfFields#write() + */ + @Override + public String write(){ + + return new StringBuilder(innerCampo1.write()). + append(Strings.WHITE_SPACE). + append(innerCampo2.write()). + append(Strings.WHITE_SPACE). + append(innerCampo3.write()). + append(Strings.WHITE_SPACE). + append(campo4.write()). + append(Strings.WHITE_SPACE). + append(innerCampo5.write()).toString(); + + } + + private abstract class InnerCampo extends BlockOfFields { + + /** + * + */ + private static final long serialVersionUID = 6746400538765124943L; + /** + * + */ + protected final BoletoLinhaDigitavelDV calculadorDV = new BoletoLinhaDigitavelDV(); + + + protected InnerCampo(Integer fieldsLength, Integer stringLength) { + super(); + setLength(stringLength); + setSize(fieldsLength); + } + + } + + private abstract class InnerCampoFormatado extends InnerCampo { + + + /** + * + */ + private static final long serialVersionUID = 3650450185403697045L; + + protected InnerCampoFormatado(final Integer fieldsLength, final Integer stringLength) { + super(fieldsLength, stringLength); + } + + /** + *

+ * + * Aplicação do seguinte requisito da FEBRABAN:
+ * Em cada um dos três primeiros campos, após a quinta (5) posição, deve ser + * inserido um ponto “.”, a fim de facilitar a visualização, para a + * digitação, quando necessário. + * + *

+ * + * + * @see org.jrimum.texgit.type.component.BlockOfFields#write() + */ + @Override + public String write(){ + + StringBuilder lineOfFields = new StringBuilder(StringUtils.EMPTY); + + for(FixedField field : this){ + lineOfFields.append(field.write()); + } + + lineOfFields.insert(5, "."); + + return lineOfFields.toString(); + } + + } + + /** + * Componhe o campo 1 da linha digitável com os seguintes dados:
+ *
    + *
  • Identificação do banco
  • + *
  • Código de moeda (9 – Real)
  • + *
  • Cinco primeiras posições do campo livre (posições 20 a 24 do código + * de barras)
  • + *
  • Dígito verificador do primeiro campo
  • + *
+ * + * @param titulo + * @param codigoDeBarra + * @param calculadorDV + */ + private class InnerCampo1 extends InnerCampoFormatado{ + + /** + * + */ + private static final long serialVersionUID = 2948116051922000890L; + + /** + * @param fieldsLength + * @param stringLength + */ + private InnerCampo1(Integer fieldsLength, Integer stringLength) { + super(fieldsLength, stringLength); + } + + /** + * @param codigoDeBarras + */ + private void load(CodigoDeBarras codigoDeBarras){ + + if(log.isTraceEnabled()) + log.trace("Compondo campo 1 da Linha Digitável"); + + add(new FixedField(codigoDeBarras.write().substring(0, 3),3)); + add(new FixedField(codigoDeBarras.write().substring(3, 4),1)); + add(new FixedField(codigoDeBarras.write().substring(19, 24),5)); + add(new FixedField(calculadorDV.calcule(get(0).write() + get(1).write() + get(2).write()),1)); + + if(log.isDebugEnabled()) + log.debug("Digito verificador do Field 1 da Linha Digitável : "+get(3).getValue()); + + + if(log.isDebugEnabled() || log.isTraceEnabled()) + log.debug("Field 1 da Linha Digitável composto : "+write()); + } + + } + + /** + * Componhe o campo 2 da linha digitável com os seguintes dados:
+ *
    + *
  • 6ª a 15ª posições do campo livre (posições 25 a 34 do código de + * barras)
  • + *
  • Dígito verificador do segundo campo
  • + *
+ * + * @param codigoDeBarra + * @param calculadorDV + */ + private class InnerCampo2 extends InnerCampoFormatado{ + + /** + * + */ + private static final long serialVersionUID = -2201847536243988819L; + + /** + * @param fieldsLength + * @param stringLength + */ + private InnerCampo2(Integer fieldsLength, Integer stringLength) { + super(fieldsLength, stringLength); + } + + + /** + * @param codigoDeBarras + */ + private void load(CodigoDeBarras codigoDeBarras){ + + if(log.isTraceEnabled()) + log.trace("Compondo campo 2 da Linha Digitável"); + + add(new FixedField(codigoDeBarras.write().substring(24, 34),10)); + add(new FixedField(calculadorDV.calcule(get(0).write()),1)); + + if(log.isDebugEnabled()) + log.debug("Digito verificador do campo 2 da Linha Digitável : "+get(1).getValue()); + + if(log.isDebugEnabled() || log.isTraceEnabled()) + log.debug("InnerCampo 2 da Linha Digitável composto : "+write()); + } + + } + + /** + * Componhe o campo 3 da linha digitável com os seguintes dados:
+ *
    + *
  • 16ª a 25ª posições do campo livre (posições 35 a 44 do código de + * barras)
  • + *
  • Dígito verificador do terceiro campo
  • + *
+ * + * @param codigoDeBarra + * @param calculadorDV + */ + private class InnerCampo3 extends InnerCampoFormatado{ + + /** + * + */ + private static final long serialVersionUID = -4248472044788156665L; + + /** + * @param fieldsLength + * @param stringLength + */ + private InnerCampo3(Integer fieldsLength, Integer stringLength) { + super(fieldsLength, stringLength); + } + + /** + * @param codigoDeBarras + */ + private void load(CodigoDeBarras codigoDeBarras){ + + if(log.isTraceEnabled()) + log.trace("Compondo campo 3 da Linha Digitável"); + + add(new FixedField(codigoDeBarras.write().substring(34, 44),10)); + add(new FixedField(calculadorDV.calcule(get(0).write()),1)); + + if(log.isDebugEnabled()) + log.debug("Digito verificador do campo 3 da Linha Digitável : "+get(1).getValue()); + + if(log.isDebugEnabled() || log.isTraceEnabled()) + log.debug("InnerCampo 3 da Linha Digitável composto : "+write()); + + } + + } + + /** + * Componhe o campo 5 da linha digitável com os seguintes dados:
+ *
    + *
  • Posições 34 a 37 – fator de vencimento (posições 6 a 9 do código de + * barras)
  • + *
  • Posições 38 a 47 – valor nominal do título(posições 10 a 19 do + * código de barras)
  • + *
+ * + * @param codigoDeBarra + */ + private class InnerCampo5 extends InnerCampo{ + + /** + * + */ + private static final long serialVersionUID = -8040082112684009827L; + + /** + * @param fieldsLength + * @param stringLength + */ + private InnerCampo5(Integer fieldsLength, Integer stringLength) { + super(fieldsLength, stringLength); + } + + /** + * @param codigoDeBarras + */ + private void load(CodigoDeBarras codigoDeBarras){ + + if(log.isTraceEnabled()) + log.trace("Compondo campo 5 da Linha Digitável"); + + add(new FixedField(codigoDeBarras.write().substring(5, 9),4)); + add(new FixedField(codigoDeBarras.write().substring(9, 19),10)); + + if(log.isDebugEnabled() || log.isTraceEnabled()) + log.debug("InnerCampo 5 da Linha Digitável composto : "+write()); + + } + + } + + @Override + public String toString() { + return Objects.toString(this); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavelException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavelException.java new file mode 100644 index 0000000..a72e4e2 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavelException.java @@ -0,0 +1,91 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 23:39:43 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 23:39:43 + * + */ + +package org.jrimum.bopepo; + + + +/** + * + *

+ * Qualquer exceção gerada durante a geração da Linha Digitável gera uma LinhaDigitavelException. Centraliza e localiza os problemas relativos a geração de uma linha digitável. + *

+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @see org.jrimum.bopepo.LinhaDigitavel + * + * @since 0.2 + * + * @version 0.2 + */ +public class LinhaDigitavelException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = 8206303471509231915L; + + /** + * + */ + public LinhaDigitavelException() { + + } + + /** + * @param message + * @param cause + */ + public LinhaDigitavelException(String message, Throwable cause) { + super(message, cause); + + } + + /** + * @param message + */ + public LinhaDigitavelException(String message) { + super(message); + + } + + /** + * @param cause + */ + public LinhaDigitavelException(Throwable cause) { + super(cause); + + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/MeuPrimeiroBoleto.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/MeuPrimeiroBoleto.java new file mode 100644 index 0000000..196db93 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/MeuPrimeiroBoleto.java @@ -0,0 +1,278 @@ +package org.jrimum.bopepo; + +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 01/11/2010 - 09:37:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 01/11/2010 - 09:37:00 + * + */ + + +import java.io.File; +import java.math.BigDecimal; +import java.util.Date; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.BoletoViewer; +import org.jrimum.domkee.comum.pessoa.endereco.CEP; +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite; + +/** + * Exemplo de código para geração de um boleto simples. + * + *

+ * Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class MeuPrimeiroBoleto { + + /** + * Executa o exemplo. + * + * @param args + */ + public static void main(String[] args) { + + new MeuPrimeiroBoleto().exemplo(); + } + + /** + * Um simples exemplo de como gerar um boleto. + */ + final void exemplo() { + + /* + * Para gerar um boleto é preciso dos dados do boleto e de um + * visualizador de boletos. + */ + + /* + * Primeiro crie os dados do boleto. + */ + Boleto boleto = crieUmBoleto(); + + /* + * Em seguida, basta criar um visualizador para o boleto. + */ + BoletoViewer boletoViewer = new BoletoViewer(boleto); + + /* + * Depois, gere um arquivo, byte array ou stream. Nesse exemplo, um + * arquivo será salvo na mesma pasta do seu "projeto" + */ + + // Exemplos de uso: + // WINDOWS: boletoViewer.getAsPDF("C:/Temp/MeuBoleto.pdf"); + // LINUX: boletoViewer.getAsPDF("/home/temp/MeuBoleto.pdf"); + File arquivoPdf = boletoViewer.getPdfAsFile("MeuPrimeiroBoleto.pdf"); + + // Agora veja o arquivo gerado na tela. + mostreBoletoNaTela(arquivoPdf); + + } + + /** + * Cria um boleto, em passos distintos, com os dados necessários para a visualização. + * + * @return boleto com dados + */ + Boleto crieUmBoleto() { + + /* + * PASSO 1: Você precisa dos dados de uma conta bancária habilitada para + * emissão de boletos. + */ + ContaBancaria contaBancaria = crieUmaContaBancaria(); + + /* + * PASSO 2: Informe os dados do cedente. + */ + Cedente cedente = crieUmCedente(); + + /* + * PASSO 3: Informe os dados do Sacado. + */ + Sacado sacado = crieUmSacado(); + + /* + * PASSO 4: Crie um novo título/cobrança e informe os dados. + */ + Titulo titulo = crieOsDadosDoNovoTitulo(new Titulo(contaBancaria,sacado,cedente)); + + /* + * PASSO 5: Crie o boleto e informe os dados necessários. + */ + Boleto boleto = crieOsDadosDoNovoBoleto(new Boleto(titulo)); + + return boleto; + } + + /** + * Preenche os principais dados do boleto. + * + * @param boleto + * @return boleto com os dados necssários + */ + final Boleto crieOsDadosDoNovoBoleto(Boleto boleto) { + +// boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento."); +// boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado não é o esperado, aproveite o DESCONTÃO!"); +// boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!"); +// boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!"); +// boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre."); +// boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00"); +// boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00"); +// boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00"); +// boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!"); +// boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X."); + + return boleto; + } + + /** + * Preenche os principais dados do título. + * + * @param titulo + * + * @return título com os dados necssários + */ + final Titulo crieOsDadosDoNovoTitulo(Titulo titulo) { + + /* + * DADOS BÁSICOS. + */ + + titulo.setNumeroDoDocumento("05160935000159"); + titulo.setNossoNumero("0543129"); + titulo.setDigitoDoNossoNumero("8"); + titulo.setValor(BigDecimal.valueOf(822.59)); + + // Para informar a data de maneira simples você pode utilizar as + // classes utilitárias do JRimum. Abaixo temos alguns exemplos: + // (1) titulo.setDataDoVencimento( DateFormat.DDMMYYYY_B.parse("11/03/2011") ); + // (2) titulo.setDataDoVencimento( Dates.parse("11/03/2011", "dd/MM/yyyy") ); + titulo.setDataDoDocumento(new Date()); + + Date d = new Date(); + d.setDate(07); + d.setMonth(12-1); + titulo.setDataDoVencimento(d); + + titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL); + titulo.setAceite(Aceite.N); + titulo.setDesconto(new BigDecimal(223.64)); + titulo.setDeducao(BigDecimal.ZERO); + titulo.setMora(BigDecimal.ZERO); + titulo.setAcrecimo(BigDecimal.ZERO); + titulo.setValorCobrado(BigDecimal.ZERO); + + return titulo; + } + + /** + * Cria uma instância de sacado com os principais dados para o boleto. + * + * @return sacado com os dados necssários + */ + final Sacado crieUmSacado() { + + Sacado sacado = new Sacado("BREDA TRANSPORTE E SERVIÇOS S.A", "05160935000159"); + +// // Informando o endereço do sacado. +// Endereco enderecoSac = new Endereco(); +// enderecoSac.setUF(UnidadeFederativa.RN); +// enderecoSac.setLocalidade("Natal"); +// enderecoSac.setCep(new CEP("59064-120")); +// enderecoSac.setBairro("Grande Centro"); +// enderecoSac.setLogradouro("Rua poeta dos programas"); +// enderecoSac.setNumero("1"); +// sacado.addEndereco(enderecoSac); +// + return sacado; + } + + /** + * Cria uma instância de cedente com os principais dados para o boleto. + * + * @return cedente com os dados necssários + */ + final Cedente crieUmCedente() { + + return new Cedente("BREDA TRANSPORTE E SERVIÇOS S.A.", "05160935000159"); + } + + /** + * Cria uma instância de conta bancária com os principais dados para o + * boleto em questão (Banco Bradesco). + * + * @return conta com os dados necssários + */ + final ContaBancaria crieUmaContaBancaria(){ + + ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_SANTANDER.create()); + contaBancaria.setNumeroDaConta(new NumeroDaConta(1152386)); + contaBancaria.setAgencia(new Agencia(227, "1")); + contaBancaria.setCarteira(new Carteira(101, TipoDeCobranca.SEM_REGISTRO)); + + + return contaBancaria; + } + + /** + * Exibe o arquivo na tela. + * + * @param arquivoBoleto + */ + final void mostreBoletoNaTela(File arquivoBoleto) { + + try { + // Descomente se estiver usando java 6 ou superior + java.awt.Desktop.getDesktop().open(arquivoBoleto); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoCitibank.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoCitibank.java new file mode 100644 index 0000000..409f651 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoCitibank.java @@ -0,0 +1,84 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 17/02/2011 - 12:40:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÃ?â€?, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 17/02/2011 - 12:40:00 + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + * Interface comum para todos os campos livres do CITIBANK + * + * @author Fabiano Carrijo Justino + * @since 0.2 + * @version 0.2 + */ +abstract class AbstractCLBancoCitibank extends AbstractCampoLivre { + + /** + * {@code serialVersionUID = 6080749970883991308L} + */ + private static final long serialVersionUID = 6080749970883991308L; + + /** + *

+ * Cria um campo livre com um determinado número de campos + *

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength + * - Número de campos + */ + protected AbstractCLBancoCitibank(Integer fieldsLength) { + + super(fieldsLength); + } + + /** + * @param titulo + * @return um CampoLivre + * + */ + protected static CampoLivre create(Titulo titulo) + throws NotSupportedCampoLivreException { + checkNossoNumero(titulo); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkNossoNumero(titulo); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + switch(titulo.getNossoNumero().length()) + { + case 11: + return new CLBancoCitiBankNN11(titulo); + } + throw new NotSupportedCampoLivreException("Campo livre diponivel somente para titulos com nosso nmero composto por 10 posicoes(convenio com 7), 11 posicoes ou 17 posicoes(convenio com 6)."); + } + + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDeBrasilia.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDeBrasilia.java new file mode 100644 index 0000000..4806c15 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDeBrasilia.java @@ -0,0 +1,61 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 24/08/2013 - 19:54:00 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 24/08/2013 - 19:54:00 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do BRB - Banco de Brasília que + * venham a existir. + *

+ * + * @author Gilmar P.S.L + * @author Douglas Ramiro + * + * @since 0.2 + * + * @version 0.2 + */ +public abstract class AbstractCLBancoDeBrasilia extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = 3200353843356508888L; + + protected AbstractCLBancoDeBrasilia(Integer fieldsLength) { + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo){ + return new CLBancoDeBrasilia().build(titulo); + } +} \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoBrasil.java new file mode 100644 index 0000000..bcba1b7 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoBrasil.java @@ -0,0 +1,94 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:07:47 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:07:47 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco do Brasil que venham a existir. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBancoDoBrasil extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -7324315662526104153L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLBancoDoBrasil(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException{ + + checkNossoNumero(titulo); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + + switch(titulo.getNossoNumero().length()){ + case NN10: + return new CLBancoDoBrasilNN10(titulo); + case NN11: + return new CLBancoDoBrasilNN11(titulo); + case NN17: + if(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta() < 1000000){ + return new CLBancoDoBrasilNN17Convenio6(titulo); + }else{ + return new CLBancoDoBrasilNN17Convenio7().build(titulo); + } + default: + throw new NotSupportedCampoLivreException( + "Campo livre diponível somente para títulos com nosso número " + + "composto por 10 posições(convênio com 7), 11 posições ou " + + "17 posições(convênio com 6)." + ); + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoNordesteDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoNordesteDoBrasil.java new file mode 100644 index 0000000..2e00c1a --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoNordesteDoBrasil.java @@ -0,0 +1,53 @@ +/** + * + */ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco do Nordeste do + * Brasil que venham a existir. + *

+ * + * @author Misael Barreto + * @author Paulo Porto + * + * @since 0.2 + * + * @version 0.2 + */ +public abstract class AbstractCLBancoDoNordesteDoBrasil extends AbstractCampoLivre { + + + /** + * + */ + private static final long serialVersionUID = -5036970456320987443L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + * + * @since 0.2 + */ + protected AbstractCLBancoDoNordesteDoBrasil(Integer fieldsLength) { + + super(fieldsLength); + } + + /** + * @param titulo + * @return um CampoLivre + * + * @see org.jrimum.bopepo.campolivre.AbstractCLBancoDoNordesteDoBrasil#create(Titulo) + */ + protected static CampoLivre create(Titulo titulo){ + return new CLBancoDoNordesteDoBrasil().build(titulo); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoIntermedium.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoIntermedium.java new file mode 100644 index 0000000..9b1d1c7 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoIntermedium.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 11/08/2010 - 10:23:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 11/08/2010 - 10:23:00 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Intermedium que venham a + * existir. + *

+ * + * + * @author Gilmar P.S.L + * @author Lukas + * Antunes + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBancoIntermedium extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -8103863452995430046L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLBancoIntermedium(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo){ + + return new CLBancoIntermedium(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoReal.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoReal.java new file mode 100644 index 0000000..16dabb2 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoReal.java @@ -0,0 +1,73 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:08:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:08:00 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Real que venham a existir. + *

+ * + * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * + * @see AbstractCampoLivre + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBancoReal extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -2020155324741631945L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLBancoReal(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo){ + + return new CLBancoReal(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoRural.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoRural.java new file mode 100644 index 0000000..5cccdd2 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoRural.java @@ -0,0 +1,76 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Santander que venham a + * existir. + *

+ * + * @author Fernando Dias - + * Colaborador com o campo livre {@code CLBancoRuralCobrancaRegistrada} + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBancoRural extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -602454445158254612L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLBancoRural(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) { + + checkCarteiraNotNull(titulo); + checkRegistroDaCarteiraNotNull(titulo); + + switch(titulo.getContaBancaria().getCarteira().getTipoCobranca()){ + case SEM_REGISTRO: + return campoSemRegistro(titulo); + case COM_REGISTRO: + return new CLBancoRuralCobrancaRegistrada(titulo); + default: + return null; + } + } + + /** + * Determina e cria um campo livre de cobrança não registrada. + * + * @param titulo + * - título com as informações para geração do campo livre + * @return campo livre ou null + */ + private static CampoLivre campoSemRegistro(Titulo titulo) { + + checkNossoNumero(titulo); + + switch(titulo.getNossoNumero().length()){ + case NN10: + return new CLBancoRuralCobrancaNaoRegistradaSeguradora(titulo); + case NN15: + return new CLBancoRuralCobrancaNaoRegistrada(titulo); + default: + throw new NotSupportedCampoLivreException( + "Combrança sem registro com campo livre diponível somente para títulos com nosso número" + + " composto por 10 posições(apólice de seguro com I.O.S.) e 15 posições(padrão)." + ); + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafra.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafra.java new file mode 100644 index 0000000..7d71c33 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafra.java @@ -0,0 +1,151 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 20:27:04 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 20:27:04 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static java.lang.String.format; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * Interface comum para todos os campos livres do Banco Safra que venham a + * existir. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBancoSafra extends AbstractCampoLivre { + + /** + * {@code serialVersionUID = -555393808447532987L} + */ + private static final long serialVersionUID = -555393808447532987L; + + /** + * Códigos do "Tipo de Cobrança" utilizados nos boletos do Banco Safra. + * + * @author Gilmar P.S.L. + */ + protected enum TipoDeCobranca { + + /** + * 1 = Bloqueto Emitido pelo Banco. + */ + BOLETO_EMITIDO_PELO_BANCO, + /** + * 2 = Eletrônica Emitido pelo Cliente. + */ + DIRETA_BOLETO_EMITIDO_PELO_CLIENTE, + /** + * 4 = Express Emitido pelo Cliente. + */ + EXPRESS_BOLETO_EMITIDO_PELO_CLIENTE; + + public int codigo() { + switch (this) { + case BOLETO_EMITIDO_PELO_BANCO: + return 1; + case DIRETA_BOLETO_EMITIDO_PELO_CLIENTE: + return 2; + case EXPRESS_BOLETO_EMITIDO_PELO_CLIENTE: + return 4; + default: + return (Integer) Exceptions.throwIllegalStateException(format( + "Tipo \"%s\" sem código atribuído!", this)); + } + } + } + + /** + * Tamanho do campo Constante = 1, chamado de "SISTEMA", definido pelo Banco + * Safra nos dois campos livres: {@link CLBancoSafraCobrancaNaoRegistrada} e + * {@link CLBancoSafraCobrancaRegistrada}. + */ + private static final Integer CONSTANT_LENGTH_SISTEMA = Integer.valueOf(1); + + /** + * Valor do campo Constante = 7, chamado de "SISTEMA", definido pelo Banco + * Safra nos dois campos livres: {@link CLBancoSafraCobrancaNaoRegistrada} e + * {@link CLBancoSafraCobrancaRegistrada}. + */ + private static final Integer CONSTANT_VALUE_SISTEMA = Integer.valueOf(7); + + /** + * Constante em forma de campo {@link AbstractCLBancoSafra#CONSTANT_VALUE_SISTEMA} e {@link AbstractCLBancoSafra#CONSTANT_LENGTH_SISTEMA}. + */ + protected static final FixedField SISTEMA_CONSTANT_FIELD = new FixedField(CONSTANT_VALUE_SISTEMA, CONSTANT_LENGTH_SISTEMA); + + /** + * Tamanho do campo = 1, chamado de "TIPO DE COBRANÇA", definido pelo Banco + * Safra nos dois campos livres: {@link CLBancoSafraCobrancaNaoRegistrada} e + * {@link CLBancoSafraCobrancaRegistrada}. + */ + protected static final Integer TIPO_COBRANCA_FIELD_LENGTH = Integer.valueOf(1); + + /** + *

+ * Cria um campo livre com um determinado número de campos + *

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength + * - Número de campos + */ + protected AbstractCLBancoSafra(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) + throws NotSupportedCampoLivreException { + + checkCarteiraNotNull(titulo); + checkRegistroDaCarteiraNotNull(titulo); + + switch (titulo.getContaBancaria().getCarteira().getTipoCobranca()) { + case COM_REGISTRO: + return new CLBancoSafraCobrancaRegistrada().build(titulo); + case SEM_REGISTRO: + return new CLBancoSafraCobrancaNaoRegistrada().build(titulo); + default: + throw new NotSupportedCampoLivreException( + "Campo livre diponível somente para títulos com carteiras com tipo de cobrança " + + "COM_REGISTRO ou SEM_REGISTRO."); + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoob.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoob.java new file mode 100644 index 0000000..aa15830 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoob.java @@ -0,0 +1,77 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 17/02/2011 - 12:40:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 17/02/2011 - 12:40:00 + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Bancoob (BANCO COOPERATIVO DO + * BRASIL S.A.) que venham a existir. + *

+ * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBancoob extends AbstractCampoLivre { + + /** + * {@code serialVersionUID = 6080749970883991308L} + */ + private static final long serialVersionUID = 6080749970883991308L; + + /** + *

+ * Cria um campo livre com um determinado número de campos + *

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength + * - Número de campos + */ + protected AbstractCLBancoob(Integer fieldsLength) { + + super(fieldsLength); + } + + /** + * @param titulo + * @return um CampoLivre + * + * @see org.jrimum.bopepo.campolivre.AbstractCLBancoDoNordesteDoBrasil#create(Titulo) + */ + protected static CampoLivre create(Titulo titulo) { + + return new CLBancoobCobrancaNaoRegistrada().build(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanestes.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanestes.java new file mode 100644 index 0000000..5bb0283 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanestes.java @@ -0,0 +1,72 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: Dec 13, 2008 - 11:00:04 AM + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: Dec 13, 2008 - 11:00:04 AM + * + */ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Banestes que venham a + * existir. + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBanestes extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = 2713363808443832056L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLBanestes(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException { + + return new CLBanestes(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanrisul.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanrisul.java new file mode 100644 index 0000000..2e99d84 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanrisul.java @@ -0,0 +1,245 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 02/08/2008 - 12:06:09 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 02/08/2008 - 12:06:09 + * + */ +package org.jrimum.bopepo.campolivre; + +import org.apache.commons.lang.StringUtils; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.FixedField; +import org.jrimum.vallia.digitoverificador.Modulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Banrisul que venham a + * existir. + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBanrisul extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -259398499475894938L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLBanrisul(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException { + + checkCarteiraNotNull(titulo); + checkRegistroDaCarteiraNotNull(titulo); + + switch (titulo.getContaBancaria().getCarteira().getTipoCobranca()) { + + case COM_REGISTRO: + return new CLBanrisulCobrancaRegistrada(titulo); + case SEM_REGISTRO: + return new CLBanrisulCobrancaNaoRegistrada(titulo); + default: + throw new NotSupportedCampoLivreException("Campo livre diponível apenas para carteiras com ou sem cobrança."); + } + } + + /** + *

+ * Calcula o duplo dígito referente às posições 20 a 42 (módulos 10 e 11). + *

+ * + * + * @param seisPrimeirosCamposConcatenados + * @return duplo dígito + * + * @since 0.2 + */ + protected String calculaDuploDigito(String seisPrimeirosCamposConcatenados) { + // calcula soma do módulo 10 a partir dos seis primeiros campos concatenados + final int somaMod10 = Modulo.calculeSomaSequencialMod10(seisPrimeirosCamposConcatenados, 1, 2); + + // calcula resto do módulo 10 a partir do resultado da soma + final byte restoMod10 = calculeRestoMod10(somaMod10); + + // calcula primeiro DV a partir do resto módulo 10 + byte primeiroDV = calculePrimeiroDV(restoMod10); + + + // calcula soma do módulo 10 a partir dos seis primeiros campos concatenados + // incluindo o primeiro dígito + int somaMod11 = Modulo.calculeSomaSequencialMod11(seisPrimeirosCamposConcatenados + primeiroDV, 2, 7); + + // calcula o resto do módulo 11 a partir do resultado da soma + byte restoMod11 = calculeRestoMod11(somaMod11); + + // se o resto do módulo 11 for 1 então o primeiro dígito é inválido + // deve ser feito o recálculo até que o resto não seja 1 + while (restoMod11 == 1) { + + // encontra um valor válido para o primeiro DV + primeiroDV = encontreValorValidoParaPrimeiroDV(primeiroDV); + + // calcula a soma do módulo 11 agora com um valor + // válido para o DV + somaMod11 = Modulo.calculeSomaSequencialMod11(seisPrimeirosCamposConcatenados + primeiroDV, 2, 7); + + // calcula o resto do módulo 11 a partir do resultado da soma + restoMod11 = calculeRestoMod11(somaMod11); + } + + // calcula o segundo DV a partir do resto módulo 11 + final byte segundoDV = calculeSegundoDV(restoMod11); + + // concatena o primeiro DV com o segundo DV para + // formar o duplo dígito + return String.valueOf(primeiroDV) + String.valueOf(segundoDV); + } + + /** + *

+ * Calcula o segundo dígito verificador. + *

+ * + * @param restoMod11 + * @return segundo dígito + * + * @since 0.2 + */ + private byte calculeSegundoDV(byte restoMod11) { + final byte segundoDV; + if (restoMod11 == 0) + segundoDV = restoMod11; + else + segundoDV = (byte) (11 - restoMod11); + return segundoDV; + } + + /** + *

+ * Calcula o primeiro dígito verificador. + *

+ * + * @param restoMod10 + * @return primeiro dígito verificador + * + * @since 0.2 + */ + private byte calculePrimeiroDV(byte restoMod10) { + final byte primeiroDV; + if (restoMod10 == 0) + primeiroDV = 0; + else + primeiroDV = (byte) (10 - restoMod10); + return primeiroDV; + } + + /** + *

+ * Calcula o resto da soma módulo 10. + *

+ * + * @param somaMod10 + * @return Resto do modúlo 10 + * + * @since 0.2 + */ + private byte calculeRestoMod10(int somaMod10) { + final byte restoMod10; + if (somaMod10 < 10) + restoMod10 = (byte) somaMod10; + else + restoMod10 = (byte) (somaMod10 % 10); + return restoMod10; + } + + /** + *

+ * Encontra um valor válido para o primeiro dígito. + *

+ * + * @param primeiroDV + * @return valor válido para o primeiro dígito + * + * @since 0.2 + */ + private byte encontreValorValidoParaPrimeiroDV(byte primeiroDV) { + final byte novoValorDoPrimeiroDV; + if (primeiroDV == 9) + novoValorDoPrimeiroDV = 0; + else + novoValorDoPrimeiroDV = (byte) (primeiroDV + 1); + return novoValorDoPrimeiroDV; + } + + /** + *

+ * Calcula o resto do módulo 11. + *

+ * + * @param somaMod11 + * @return restro do módulo 11 + * + * @since 0.2 + */ + private byte calculeRestoMod11(int somaMod11) { + final byte restoMod11; + if (somaMod11 < 11) + restoMod11 = (byte) somaMod11; + else + restoMod11 = (byte) (somaMod11 % 11); + return restoMod11; + } + + protected String concateneOsCamposExistentesAteOMomento() { + + final StringBuilder camposExistentesAteOMomentoConcatenados = new StringBuilder(StringUtils.EMPTY); + + for (FixedField field : this) { + camposExistentesAteOMomentoConcatenados.append(field.write()); + } + + return camposExistentesAteOMomentoConcatenados.toString(); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBradesco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBradesco.java new file mode 100644 index 0000000..c1b7eeb --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBradesco.java @@ -0,0 +1,76 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:08:12 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:08:12 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Bradesco que venham a + * existir. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLBradesco extends AbstractCampoLivre { + + /** + * {@code serialVersionUID = -1733227746617862639L} + */ + private static final long serialVersionUID = -1733227746617862639L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + * + * @since 0.2 + */ + protected AbstractCLBradesco(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo){ + + return new CLBradesco().build(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCaixaEconomicaFederal.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCaixaEconomicaFederal.java new file mode 100644 index 0000000..ac70f37 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCaixaEconomicaFederal.java @@ -0,0 +1,93 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:08:25 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:08:25 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static java.lang.String.format; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Caixa Econômica Federal + * que venham a existir. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Rogério Kleinkauf - + * Colaborador do campo livre SIGCB + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLCaixaEconomicaFederal extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -4104858478390595830L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLCaixaEconomicaFederal(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException{ + + checkNossoNumero(titulo); + + switch(titulo.getNossoNumero().length()){ + case NN10: + return new CLCaixaEconomicaFederalSICOBNossoNumero10(titulo); + case NN14: + return new CLCaixaEconomicaFederalSICOBNossoNumero14().build(titulo); + case NN15: + return new CLCaixaEconomicaFederalSIGCB(titulo); + case NN17: + return new CLCaixaEconomicaFederalSINCO(titulo); + default: + throw new NotSupportedCampoLivreException( + format("Campo Livre não suportado para o Nosso Número [%s] de tamanho [%s]." + + " Apenas títulos com Nosso Número de tamanho [%s] são suportados (SICOB, SIGCB e SINCO respectivamente)." + ,titulo.getNossoNumero(), titulo.getNossoNumero().length() + ,NN10 + "," + NN14 + ","+ NN15 + "," + NN17) + ); + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCecred.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCecred.java new file mode 100644 index 0000000..b397068 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCecred.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/01/2014 - 13:31:39 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/01/2014 - 13:31:39 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do CECRED - Cooperativa Central de Crédito Urbano que + * venham a existir. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public abstract class AbstractCLCecred extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -5579081722726761569L; + + protected AbstractCLCecred(Integer fieldsLength) { + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo){ + return new CLCecred().build(titulo); + } + +} \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLHSBC.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLHSBC.java new file mode 100644 index 0000000..e9aa532 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLHSBC.java @@ -0,0 +1,83 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:08:12 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:08:12 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco HSBC que venham a + * existir. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLHSBC extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = 3179450500491723317L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLHSBC(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) { + + checkCarteiraNotNull(titulo); + checkRegistroDaCarteiraNotNull(titulo); + + switch(titulo.getContaBancaria().getCarteira().getTipoCobranca()){ + case SEM_REGISTRO: + return new CLHSBCCobrancaNaoRegistrada(titulo); + case COM_REGISTRO: + return new CLHSBCCobrancaRegistrada(titulo); + default: + return null; + } + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLItau.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLItau.java new file mode 100644 index 0000000..25b72e6 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLItau.java @@ -0,0 +1,138 @@ + +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/04/2008 - 23:08:17 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/04/2008 - 23:08:17 + * + */ + +package org.jrimum.bopepo.campolivre; +import static org.jrimum.vallia.digitoverificador.Modulo.MOD10; + +import java.util.HashSet; +import java.util.Set; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.vallia.digitoverificador.Modulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Itaú que venham a + * existir. + *

+ * + * @author Gilmar P.S.L + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLItau extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -3082903872777434482L; + + /** + *

+ * Carteiras especiais sem registro na qual são utilizadas 15 posições numéricas + * para identificação do título liquidado (8 do Nosso Número e 7 do Seu Número). + *

+ */ + private static final Set CARTEIRAS_ESPECIAIS = new HashSet(8); + + static{ + + CARTEIRAS_ESPECIAIS.add(106); + CARTEIRAS_ESPECIAIS.add(107); + CARTEIRAS_ESPECIAIS.add(122); + CARTEIRAS_ESPECIAIS.add(142); + CARTEIRAS_ESPECIAIS.add(143); + CARTEIRAS_ESPECIAIS.add(195); + CARTEIRAS_ESPECIAIS.add(196); + CARTEIRAS_ESPECIAIS.add(198); + } + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLItau(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo){ + + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + + /* + * Se a carteira for especial, a forma de construir o campo livre será diferente. + */ + if(CARTEIRAS_ESPECIAIS.contains(titulo.getContaBancaria().getCarteira().getCodigo())) { + + return new CLItauComCarteirasEspeciais(titulo); + + }else { + + return new CLItauPadrao(titulo); + } + } + + /** + *

+ * Método auxiliar para calcular o dígito verificador dos campos 31 e 41. + * O dígito é calculado com base em um campo fornecido pelos métodos que o chamam + * (calculeDigitoDaPosicao31 e calculeDigitoDaPosicao41) + *

+ *

+ * O cálculo é feito através do módulo 10. + *

+ * + * @param campo + * @return Dígito verificador do campo fornecido. + * + * @since + */ + protected Integer calculeDigitoVerificador(String campo) { + + int restoDivisao = Modulo.calculeMod10(campo, 1, 2); + int digito = MOD10 - restoDivisao; + + if(digito > 9) { + digito = 0; + } + + return new Integer(digito); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLMercantilDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLMercantilDoBrasil.java new file mode 100644 index 0000000..852f343 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLMercantilDoBrasil.java @@ -0,0 +1,70 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 25/09/2008 - 21:20:19 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2008 - 21:20:19 + * + */ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Mercantil do Brasil que + * venham a existir. + *

+ * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLMercantilDoBrasil extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -6705784312499730452L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLMercantilDoBrasil(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException { + + return new CLMercantilDoBrasil(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSantander.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSantander.java new file mode 100644 index 0000000..0031963 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSantander.java @@ -0,0 +1,40 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Santander que venham a + * existir. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLSantander extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = 1882819688182515282L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLSantander(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) { + + return new CLBancoSantander(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSicredi.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSicredi.java new file mode 100644 index 0000000..9f8111c --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSicredi.java @@ -0,0 +1,73 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:07:11 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:07:11 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + *

+ * Interface comum para todos os campos livres do Banco Sicredi que venham a + * existir. + *

+ * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCLSicredi extends AbstractCampoLivre { + + /** + * {@code serialVersionUID = 636384334503863949L} + */ + private static final long serialVersionUID = 636384334503863949L; + + /** + *

+ * Cria um campo livre com um determinado número de campos + *

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength + * - Número de campos + */ + protected AbstractCLSicredi(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) { + + return new CLSicredi().build(titulo); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLUnibanco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLUnibanco.java new file mode 100644 index 0000000..bfa5e29 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLUnibanco.java @@ -0,0 +1,70 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.vallia.digitoverificador.Modulo; + +abstract class AbstractCLUnibanco extends AbstractCampoLivre { + + /** + * + */ + private static final long serialVersionUID = -6169577742706045367L; + + /** + *

Cria um campo livre com um determinado número de campos

+ * + * @see AbstractCampoLivre + * + * @param fieldsLength - Número de campos + */ + protected AbstractCLUnibanco(Integer fieldsLength) { + + super(fieldsLength); + } + + protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException { + + checkCarteiraNotNull(titulo); + checkRegistroDaCarteiraNotNull(titulo); + + switch(titulo.getContaBancaria().getCarteira().getTipoCobranca()){ + case SEM_REGISTRO: + return new CLUnibancoCobrancaNaoRegistrada(titulo); + case COM_REGISTRO: + return new CLUnibancoCobrancaRegistrada(titulo); + default: + return null; + } + } + + /** + *

+ * Calcula o dígito verificador para + * referência do cliente (cobrança sem registro) e base para + * cálculo do super dígito do nosso numero (cobrança com registro). + *

+ * + * @param numero + * @return String dígito + * + * @since 0.2 + */ + String calculeDigitoEmModulo11(String numero) { + + String dv = ""; + + int soma = Modulo.calculeSomaSequencialMod11(numero, 2, 9); + + soma *= 10; + + final int resto = soma % 11; + + if (resto == 10 || resto == 0) + dv = "0"; + else + dv = "" + resto; + + return dv; + + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java new file mode 100644 index 0000000..7434008 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java @@ -0,0 +1,787 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:07:11 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:07:11 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static java.lang.String.format; +import static java.math.BigDecimal.ZERO; +import static org.jrimum.domkee.financeiro.banco.febraban.Banco.isCodigoDeCompensacaoOK; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.FixedField; +import org.jrimum.texgit.type.component.BlockOfFields; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +/** + *

+ * Esta classe é responsável por determinar a interface campo livre e também + * determinar qual implementação de campo livre se aplica a um determinado + * título. + *

+ * + *

+ * Uma outra forma de analisar esta classe é sob o prisma de uma Abstract + * Factory. + *

+ * + *

+ *

+ *
Field Livre: + *
É um espaço reservado no código de barras e a sua implementação varia de + * banco para banco.
+ *
+ *

+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Lukas + * Antunes - Colaborador com o banco Intermedium (077) + * @author Fernando Dias - + * Colaborador com o banco Rural (453) + * @author Paulo Porto - + * Colaborador com o Banco do Nordeste do Brasil (004). + * @author Fabiano Carrijo - + * Colaborador com o Banco Citibank (756). + * @author Douglas Ramiro - + * Colaborador com o Banco de Brasília (070). + * + * @since 0.2 + * + * @version 0.2 + */ +abstract class AbstractCampoLivre extends BlockOfFields implements CampoLivre { + + /** + * {@code serialVersionUID = 4605730904122445595L} + */ + private static final long serialVersionUID = 4605730904122445595L; + + /** + * Looger. + */ + private static Logger log = Logger.getLogger(Objects.class); + + /** + * Nosso número com 7 posições. + */ + static final int NN7 = 7; + + /** + * Nosso número com 8 posições. + */ + static final int NN8 = 8; + + /** + * Nosso número com 9 posições. + */ + static final int NN9 = 9; + + /** + * Nosso número com 10 posições. + */ + static final int NN10 = 10; + + /** + * Nosso número com 11 posições. + */ + static final int NN11 = 11; + + /** + * Nosso número com 14 posições. + */ + static final int NN14 = 14; + + /** + * Nosso número com 15 posições. + */ + static final int NN15 = 15; + + /** + * Nosso número com 17 posições. + */ + static final int NN17 = 17; + + /** + * Subclasses não precisam definir o tamanho. + */ + @SuppressWarnings("unused") + private AbstractCampoLivre(Integer fieldsLength, Integer stringLength) { + super(null,null); + } + + /** + * Cria um campo livre com um determinado número de campos + * + * @param fieldsLength + * - Número de campos + */ + protected AbstractCampoLivre(Integer fieldsLength) { + super(); + setLength(CampoLivre.STRING_LENGTH); + setSize(fieldsLength); + } + + /** + * Cria um campo livre a partir dos dados contidos no título fornecido. + * + * @param titulo + * com todos os dados para a geração do campo livre + * @return instância de campo livre ou nulo. + * @throws NotSupportedBancoException + * Caso o banco informado na conta bancária não tenha nenhuma + * implementação de campo livre. + * @throws NotSupportedCampoLivreException + * Caso exista implementações de campo livre para o banco + * informa na conta bancária, mas nenhuma dessas implementações + * foram adequadas para os dados do título. + * @throws CampoLivreException + * Caso ocorra algum problema na geração do campo livre. + */ + protected static CampoLivre create(Titulo titulo) throws NotSupportedBancoException, + NotSupportedCampoLivreException, CampoLivreException { + + if (log.isTraceEnabled()){ + + log.trace("Instanciando Campo livre"); + } + if (log.isDebugEnabled()){ + + log.debug("titulo instance : " + titulo); + } + + try{ + + checkTituloNotNull(titulo); + checkContaBancariaNotNull(titulo); + checkBancoNotNull(titulo); + + if (log.isDebugEnabled()){ + + log.debug(format("Campo Livre do Banco: %s", titulo.getContaBancaria().getBanco().getNome())); + } + + if (BancosSuportados.isSuportado(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado())) { + + final BancosSuportados banco = BancosSuportados.suportados.get( titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado()); + + switch (banco) { + + case BANCO_BRADESCO: return AbstractCLBradesco.create(titulo); + case BANCO_DO_BRASIL: return AbstractCLBancoDoBrasil.create(titulo); + case BANCO_DO_NORDESTE_DO_BRASIL: return AbstractCLBancoDoNordesteDoBrasil.create(titulo); + case BANCO_ABN_AMRO_REAL: return AbstractCLBancoReal.create(titulo); + case CAIXA_ECONOMICA_FEDERAL: return AbstractCLCaixaEconomicaFederal.create(titulo); + case HSBC: return AbstractCLHSBC.create(titulo); + case UNIBANCO: return AbstractCLUnibanco.create(titulo); + case BANCO_ITAU: return AbstractCLItau.create(titulo); + case BANCO_SAFRA: return AbstractCLBancoSafra.create(titulo); + case BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL: return AbstractCLBanrisul.create(titulo); + case MERCANTIL_DO_BRASIL: return AbstractCLMercantilDoBrasil.create(titulo); + case BANCO_DO_ESTADO_DO_ESPIRITO_SANTO: return AbstractCLBanestes.create(titulo); + case BANCO_RURAL: return AbstractCLBancoRural.create(titulo); + case BANCO_SANTANDER: return AbstractCLSantander.create(titulo); + case BANCO_INTEMEDIUM: return AbstractCLBancoIntermedium.create(titulo); + case BANCO_SICREDI: return AbstractCLSicredi.create(titulo); + case BANCOOB: return AbstractCLBancoob.create(titulo); + case CITIBANK: return AbstractCLBancoCitibank.create(titulo); + case BANCO_DE_BRASILIA: return AbstractCLBancoDeBrasilia.create(titulo); + case CECRED: return AbstractCLCecred.create(titulo); + + default: + /* + * Se chegar neste ponto e nenhum campo livre foi definido, então é + * sinal de que existe implementações de campo livre para o banco em + * questão, só que nenhuma destas implementações serviu e a classe + * abstrata responsável por fornecer o campo livre não gerou a + * exceção NotSupportedCampoLivreException. Trata-se de uma mensagem + * genérica que será utilizada somente em último caso. + */ + throw new NotSupportedCampoLivreException( + "Não há implementações de campo livre para o banco " + + titulo.getContaBancaria().getBanco() + .getCodigoDeCompensacaoBACEN().getCodigoFormatado() + + " compatíveis com as " + + "caracteríticas do título informado."); + } + } else { + + /* + * Se chegar até este ponto, é sinal de que para o banco em + * questão, apesar de estar definido no EnumBancos, não há + * implementações de campo livre, logo considera-se o banco com + * não suportado. + */ + throw new NotSupportedBancoException(); + } + } catch(CampoLivreException e) { + /* + * Caso seja uma exceção esperada. + */ + throw e; + + } catch(Exception e) { + /* + * Encapsula-se qualquer outra exceção. + */ + throw new CampoLivreException(e); + } + } + + /** + *

+ * Constrói um campo livre após executar os métodos + * {@link AbstractCampoLivre#checkValues(Titulo)} e {@link AbstractCampoLivre#addFields(Titulo)}, retornando em + * seguida esta instância pronta para escrita. + *

+ * + * @param titulo + * + * @return a instância pronta para escrita + * + * @since 0.2 + */ + protected final CampoLivre build(Titulo titulo) { + + checkValues(titulo); + + addFields(titulo); + + return this; + } + + /** + *

+ * Usado pelo método {@link AbstractCampoLivre#build(Titulo)} para verificar a consistência do + * campo livre. Se algum inconsistência for verificada, este método deverá + * lança-la. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected abstract void checkValues(Titulo titulo); + + /** + *

+ * Usado pelo método {@link AbstractCampoLivre#build(Titulo)}, adiciona os campos do campo + * livre deixando-o pronto para escrita. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected abstract void addFields(Titulo titulo); + + /** + *

+ * Gera o campo livre a parir dos campos armazenados sem verificar se está + * compatível com número de fields declarado pelo campo livre. Isso implica + * que a string retornada poderá ser menor do que 25 caracteres. + *

+ * + * @return string a partir dos campos contidos até o momento. + * + * @since 0.2 + */ + protected final String writeFields() { + + StringBuilder campoLivreAtual = new StringBuilder(); + + for(FixedField f : this){ + campoLivreAtual.append(f.write()); + } + + return campoLivreAtual.toString(); + } + + /* + * Validações inicias. + */ + + /** + *

+ * Verifica se o título não é nulo, senão lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + private static void checkTituloNotNull(Titulo titulo){ + + Objects.checkNotNull(titulo, "Título não pode ser nulo!"); + } + + /** + *

+ * Verifica se a conta bancária do título não é nula, senão lança uma + * {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + private static void checkContaBancariaNotNull(Titulo titulo) { + + Objects.checkNotNull(titulo.getContaBancaria(), "Conta bancária do título não pode ser nula!"); + } + + /** + *

+ * Verifica se o banco da conta bancária do título não é nulo, senão lança + * uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + private static void checkBancoNotNull(Titulo titulo) { + + Objects.checkNotNull(titulo.getContaBancaria().getBanco(), "Banco da conta bancária do título não pode ser nulo!"); + + boolean expression = isCodigoDeCompensacaoOK(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado()); + + Objects.checkArgument(expression, format("Código de compensação [%s] inválido!", titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado())); + } + + /* + * Validações para subclasses. + */ + + /** + *

+ * Verifica se a carteira da conta bancária do título não é nula, senão + * lança uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkCarteiraNotNull(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getCarteira(), "Carteira da conta bancária do título não pode ser nula!"); + } + + /** + *

+ * Verifica se o tipo da carteira da conta bancária do título não é nulo, + * senão lança uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkRegistroDaCarteiraNotNull(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getCarteira().getTipoCobranca(), "Tipo de cobrança (COM ou SEM registro) da carteira não pode ser nulo!"); + } + + /** + *

+ * Verifica se o código da carteira da conta bancária do título não é nulo e + * se é um número > 0, caso contrário lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkCodigoDaCarteira(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getCarteira().getCodigo(), "Código da carteira não pode ser nulo!"); + + boolean expression = titulo.getContaBancaria().getCarteira().getCodigo() > 0; + + Objects.checkArgument(expression, format("Código da carteira deve ser um número inteiro natural positivo e não [%s].",titulo.getContaBancaria().getCarteira().getCodigo())); + } + + /** + *

+ * Verifica se o código da carteira da conta bancária do título é um número + * menor que ou igual ao limite informado, caso contrário lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * @param limite - Limite máximo permitido + * + * @since 0.2 + */ + protected final static void checkCodigoDaCarteiraMenorOuIgualQue(Titulo titulo, int limite){ + + boolean expression = titulo.getContaBancaria().getCarteira().getCodigo() <= limite; + + Objects.checkArgument(expression,format("Código [%s] da carteira deve ser um número menor que ou igual a [%s].", titulo.getContaBancaria().getCarteira().getCodigo(), limite)); + } + + /** + *

+ * Verifica se a agência da conta bancária do título não é nula, senão lança + * uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkAgenciaNotNull(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getAgencia(), "Agência bancária do título não pode ser nula!"); + } + + /** + *

+ * Verifica se o código do número da agência bancária não é nulo e se é + * um número > 0, caso contrário lança uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkCodigoDaAgencia(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getAgencia().getCodigo(), "Código da agência bancária não pode ser nulo!"); + + boolean expression = titulo.getContaBancaria().getAgencia().getCodigo() > 0; + + Objects.checkArgument(expression, format("Código da agência bancária deve ser um número inteiro natural positivo e não [%s].",titulo.getContaBancaria().getAgencia().getCodigo())); + } + + /** + *

+ * Verifica se o código do número da agência da conta bancária do título é + * um número menor que ou igual ao limite informado, caso contrário lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * @param limite + * - Limite máximo permitido + * + * @since 0.2 + */ + protected final static void checkCodigoDaAgenciaMenorOuIgualQue(Titulo titulo, int limite){ + + boolean expression = titulo.getContaBancaria().getAgencia().getCodigo() <= limite; + + Objects.checkArgument(expression , format("Código [%s] da agência deve ser um número menor que ou igual a [%s].", titulo.getContaBancaria().getAgencia().getCodigo(), limite)); + } + + /** + *

+ * Verifica se o dígito verificador da agência da conta bancária não é nulo, + * não é vazio e se é numérico, caso contrário lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkDigitoDoCodigoDaAgencia(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), "Dígito verificador da agência bancária não pode ser nulo!"); + Strings.checkNotBlank(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), format("Dígito verificador [\"%s\"] da agência bancária não pode ser vazio!",titulo.getContaBancaria().getAgencia().getDigitoVerificador())); + Strings.checkNotNumeric(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), format("Nesse contexto o dígito verificador [\"%s\"] da agência bancária deve ser numérico!", titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta())); + } + + /** + *

+ * Verifica se o número da conta da conta bancária do título não é nulo, + * senão lança uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkNumeroDaContaNotNull(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getNumeroDaConta(), "Número da conta bancária do título não pode ser nulo!"); + } + + /** + *

+ * Verifica se o código do do número da conta bancária não é nulo e se é um + * número > 0, caso contrário lança uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkCodigoDoNumeroDaConta(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), "Código do número da conta bancária não pode ser nulo!"); + + boolean expression = titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta() > 0; + + Objects.checkArgument(expression, format("Código do número da conta bancária deve ser um número inteiro natural positivo e não [%s].", titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta())); + } + + /** + *

+ * Verifica se o código do número da conta bancária do título é um número + * menor que ou igual ao limite informado, caso contrário lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * @param limite - Limite máximo permitido + * + * @since 0.2 + */ + protected final static void checkCodigoDoNumeroDaContaMenorOuIgualQue(Titulo titulo, int limite){ + + boolean expression = titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta() <= limite; + + Objects.checkArgument(expression, format("Código [%s] do número da conta deve ser um número menor que ou igual a [%s].", titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), limite)); + } + + /** + *

+ * Verifica se o dígito verificador do número da conta bancária não é nulo, + * não é vazio e se é numérico, caso contrário lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkDigitoDoCodigoDoNumeroDaConta(Titulo titulo){ + + Objects.checkNotNull(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), "Dígito verificador do número da conta bancária não pode ser nulo!"); + Strings.checkNotBlank(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), format("Dígito verificador [\"%s\"] do número da conta bancária não pode ser vazio!", titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta())); + Strings.checkNotNumeric(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), format("Nesse contexto o dígito verificador [\"%s\"] do número da conta deve ser numérico!", titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta())); + } + + /** + *

+ * Verifica se onosso número do título não é nulo, não é vazio e se é + * numérico, caso contrário lança uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkNossoNumero(Titulo titulo){ + + Objects.checkNotNull(titulo.getNossoNumero(), "Nosso número do título não pode ser nulo!"); + Strings.checkNotBlank(titulo.getNossoNumero(), format("Nosso número [\"%s\"] do título não pode ser vazio!", titulo.getNossoNumero())); + Strings.checkNotNumeric(titulo.getNossoNumero(), format("Nosso número [\"%s\"] do título deve conter somente dígitos numéricos!", titulo.getNossoNumero())); + } + + /** + *

+ * Verifica se o nosso número do título tem o tamanho determinado, caso + * contrário lança uma {@code IllegalArgumentException} com a mensagem + * "Tamanho do nosso número [%s] diferente do esperado [%s]!". + *

+ * + * @param titulo + * @param length + * - Tamanho que deve ser + * + * @since 0.2 + */ + protected final static void checkTamanhoDoNossoNumero(Titulo titulo, int length) { + + checkTamanhoNossoNumero(titulo, length, format( + "Tamanho [%s] do nosso número [\"%s\"] diferente do esperado [%s]!", + StringUtils.length(titulo.getNossoNumero()), titulo.getNossoNumero(), length)); + } + + /** + *

+ * Verifica se o nosso número do título tem o tamanho determinado, caso + * contrário lança uma {@code IllegalArgumentException} com a mensagem + * determinada. + *

+ * + * @param titulo + * @param length + * - Tamanho que deve ser + * @param msg + * - Mensagem para erro + * + * @since 0.2 + */ + protected final static void checkTamanhoNossoNumero(Titulo titulo, int length, String msg){ + + Objects.checkArgument(titulo.getNossoNumero().length() == length, msg); + } + + /** + *

+ * Verifica se o dígito verificador do nosso número do título não é nulo, + * não é vazio e se é numérico (natural positivo), caso contrário lança uma + * {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkDigitoDoNossoNumero(Titulo titulo){ + + Objects.checkNotNull(titulo.getDigitoDoNossoNumero(), "Dígito verificador do nosso número do título não pode ser nulo!"); + Strings.checkNotBlank(titulo.getDigitoDoNossoNumero(), format("Dígito verificador [\"%s\"] do nosso número do título não pode ser vazio!", titulo.getDigitoDoNossoNumero())); + Strings.checkNotNumeric(titulo.getDigitoDoNossoNumero(), format("Nesse contexto o dígito verificador [\"%s\"] do nosso número deve ser um número inteiro positivo!", titulo.getDigitoDoNossoNumero())); + } + + /** + *

+ * Verifica se o dígito do nosso número do título tem o tamanho determinado, caso + * contrário lança uma {@code IllegalArgumentException} com a mensagem + * "Tamanho [%s] do dígito do nosso número [\"%s\"] diferente do esperado [%s]!". + *

+ * + * @param titulo + * @param length + * - Tamanho que deve ser + * + * @since 0.2 + */ + protected final static void checkTamanhoDigitoDoNossoNumero(Titulo titulo, int length) { + + checkTamanhoDigitoDoNossoNumero(titulo, length, format( + "Tamanho [%s] do dígito do nosso número [\"%s\"] diferente do esperado [%s]!", + StringUtils.length(titulo.getDigitoDoNossoNumero()), titulo.getDigitoDoNossoNumero(), length)); + } + + /** + *

+ * Verifica se o dígito do nosso número do título tem o tamanho determinado, caso + * contrário lança uma {@code IllegalArgumentException} com a mensagem + * determinada. + *

+ * + * @param titulo + * @param length + * - Tamanho que deve ser + * @param msg + * - Mensagem para erro + * + * @since 0.2 + */ + protected final static void checkTamanhoDigitoDoNossoNumero(Titulo titulo, int length, String msg){ + + Objects.checkArgument(titulo.getDigitoDoNossoNumero().length() == length, msg); + } + + /** + *

+ * Verifica se o valor do título não é nulo e é positivo, caso contrário lança uma + * {@code IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + protected final static void checkValor(Titulo titulo){ + + Objects.checkNotNull(titulo.getValor(), "Valor do título não pode ser nulo!"); + Objects.checkArgument(titulo.getValor().compareTo(ZERO) >= 0, format("O valor do título deve ser um número positivo ou zero e não [%s].",titulo.getValor())); + } + + /** + *

+ * Verifica se o título contém {@code ParametrosBancariosMap} e se este + * contém um valor não é nulo do parâmetro determinado, caso contrário lança + * uma {@code IllegalArgumentException}. + *

+ * + * @param titulo + * @param param + * Parâmetro a ser validado + * + * @since 0.2 + */ + protected final static void checkParametroBancario(Titulo titulo, ParametroBancario param){ + + Objects.checkNotNull(titulo.getParametrosBancarios(), format("O parâmetro bancário [\"%s\"] é necessário! [titulo.getParametrosBancarios() == null]",param)); + Objects.checkArgument(titulo.getParametrosBancarios().contemComNome(param),format("Parâmetro bancário [\"%s\"] não encontrado!",param)); + Objects.checkNotNull(titulo.getParametrosBancarios().getValor(param), format("Parâmetro bancário [\"%s\"] não contém valor!", param)); + } + + /** + *

+ * Verifica se o título com o parâmetro informado é um número inteiro menor + * que ou igual ao limite informado, caso contrário lança uma + * {@code IllegalArgumentException}. + *

+ * + * @param titulo + * @param param + * Parâmetro a ser validado + * @param limite + * Limite máximo permitido + * + * @since 0.2 + */ + protected final static void checkParametroBancarioMenorOuIgualQue(Titulo titulo, ParametroBancario param, int limite){ + + checkParametroBancario(titulo, param); + + int valor = titulo.getParametrosBancarios().getValor(param).intValue(); + + boolean expression = valor <= limite; + + Objects.checkArgument(expression, format("Parâmetro [%s] com valor [%s] deve ser um número menor que ou igual a [%s].", param, valor, limite)); + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + return Objects.toString(this); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoCitiBankNN11.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoCitiBankNN11.java new file mode 100644 index 0000000..c77ac82 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoCitiBankNN11.java @@ -0,0 +1,74 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:08:37 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÃ?â€?, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:08:37 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + * Interface comum para todos os campos livres do CITIBANK + * + * @author Fabiano Carrijo Justino + * @since 0.2 + * @version 0.2 + */ + +class CLBancoCitiBankNN11 extends AbstractCLBancoDoBrasil { + private static final long serialVersionUID = -7675528811239346517L; + private static final Integer FIELDS_LENGTH = Integer.valueOf(6); + + //TODO OBTER DADOS ATRAVÉS DE OBJETOS DO BOPEPO + CLBancoCitiBankNN11(Titulo titulo) + { + super(FIELDS_LENGTH); + ContaBancaria conta = titulo.getContaBancaria(); + String nossoNumero = titulo.getNossoNumero(); +// add(new Field(conta.getProduto().getCodigo(), Integer.valueOf(1), Fillers.ZERO_LEFT)); +// add(new Field(conta.getPortifolio().getCodigo(), Integer.valueOf(3), Fillers.ZERO_LEFT)); +// add(new Field(conta.getCosmos().getCodigo(), Integer.valueOf(1), Fillers.ZERO_LEFT)); +// add(new Field(conta.getCosmosConta().getCodigo(), Integer.valueOf(8), Fillers.ZERO_LEFT)); +// add(new Field(nossoNumero, Integer.valueOf(11), Fillers.ZERO_LEFT)); +// add(new Field(conta.getProduto().getCodigo(), Integer.valueOf(1), Fillers.ZERO_LEFT)); + } + + protected void addFields(Titulo titulo) + { + +// throw new UnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + protected void checkValues(Titulo titulo) + { + throw new UnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDeBrasilia.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDeBrasilia.java new file mode 100644 index 0000000..8bacbe9 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDeBrasilia.java @@ -0,0 +1,359 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 24/08/2013 - 19:54:00 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 24/08/2013 - 19:54:00 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static java.lang.String.format; +import static org.jrimum.bopepo.parametro.ParametroBancoDeBrasilia.CHAVE_ASBACE_DIGITO1; +import static org.jrimum.bopepo.parametro.ParametroBancoDeBrasilia.CHAVE_ASBACE_DIGITO2; + +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Objects; +import org.jrimum.vallia.digitoverificador.Modulo; + +/** + *

+ * O campo livre do BRB - Banco de Brasília deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2239(3)fixo "000" ZEROSZEROS
23-2539(3)Agência Cedente (Sem o dígito verificador, completar com zeros a esquerda quando necessário)Código da Agência (sem dígito)
26-327 9(7)Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)Conta do Cedente (sem dígito)
33-3319Carteira | Modalidade/ CategoriaCategoria - referente ao tipo de cobrança 1-sem registro impressão local, 2-com registro impressão local
34-396 9(6)Número do Nosso Número(Sem o digito verificador)Número sequencial
40-423 9(3)Código BACEN(Sem o digito verificador)Código do Banco- 070 - BRB
43-4319Dígito verificador 1 da CHAVE ASBACEDV1
44-4419Dígito verificador 2 da CHAVE ASBACEDV2
+ * + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * + * @author Gilmar P.S.L + * @author Douglas Ramiro + * + * @since 0.2 + * + * @version 0.2 + */ +/** + * @author gleitao + * + */ +public class CLBancoDeBrasilia extends AbstractCLBancoDeBrasilia{ + + /** + * + */ + private static final long serialVersionUID = -6099168685425835517L; + + /** + * Número de campos = 8. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(8); + + /** + * Tamanho do primeiro campo "Campo Zerado [000]" = 3. + */ + private static final Integer CAMPO_ZERADO_LENGTH = Integer.valueOf(3); + + /** + * Valor do campo "Campo Zerado" = "000". + */ + private static final String CAMPO_ZERADO_VALUE = "000"; + + /** + * Tamanho do campo Agência = 3. + */ + private static final Integer AGENCIA_LENGTH = Integer.valueOf(3); + + /** + * Tamanho do campo Conta = 7. + */ + private static final Integer CONTA_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Nosso Número = 6. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(6); + + /** + * Tamanho do campo Carteira = 1. + */ + private static final Integer CARTEIRA_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo do dígito da chave ASBACE = 1. + */ + private static final Integer DIGITO_CHAVE_ASBACE_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo Banco = 3. + */ + private static final Integer BANCO_LENGTH = Integer.valueOf(3); + + /** + * Tipo de cobrança: 1-Sem registro impressão local (mesmo que carteira, modalidade ou categoria). + */ + private static final Integer CARTEIRA_SEM_REGISTRO = Integer.valueOf(1);; + + /** + * Tipo de cobrança: 2-Com registro impressão local (mesmo que carteira, modalidade ou categoria). + */ + private static final Integer CARTEIRA_COM_REGISTRO = Integer.valueOf(2); + + /** + * Dígito verificador calculado em função da CHAVE ASBACE e necessário para o cálculo do {@link #digitoVerificador2DaChaveASBACE}. + */ + private Integer digitoVerificador1DaChaveASBACE; + + /** + * Dígito verificador calculado em função da CHAVE ASBACE + {@link #digitoVerificador1DaChaveASBACE}. + */ + private Integer digitoVerificador2DaChaveASBACE; + + /** + *

+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + *

+ * + * @since 0.2 + */ + protected CLBancoDeBrasilia() { + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + * + * @since 0.2 + */ + @Override + protected void checkValues(Titulo titulo) { + + checkAgenciaNotNull(titulo); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 999); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, 6); + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCarteiraComOuSemRegistro(titulo); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + * + * @since 0.2 + */ + @Override + protected void addFields(Titulo titulo) { + + this.add(new FixedField(CAMPO_ZERADO_VALUE, CAMPO_ZERADO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigo(), BANCO_LENGTH, Fillers.ZERO_LEFT)); + calculeDigitosNecessariosDaChaveASBACE(); + this.add(new FixedField(this.digitoVerificador1DaChaveASBACE, DIGITO_CHAVE_ASBACE_LENGTH)); + this.add(new FixedField(this.digitoVerificador2DaChaveASBACE, DIGITO_CHAVE_ASBACE_LENGTH)); + + disponibilizeDigitosDaChaveAsbaceNeste(titulo); + } + + /** + * Calcula os dos dígitos verificadores da CHAVE ASBACE. + * + * @since 0.2 + */ + private void calculeDigitosNecessariosDaChaveASBACE() { + calculeChaveAsbaceDigito1(); + calculeChaveAsbaceDigito2(); + } + + /** + * Calcula o primeiro dígito da CHAVE ASBECE independente do segundo, mas o + * segundo DV depende deste e quando o segundo é calculado este pode, + * talvez, ser alterado. + * + * @since 0.2 + */ + private void calculeChaveAsbaceDigito1(){ + + final String chaveAasbace = writeFields(); + + int dig = Modulo.calculeMod10(chaveAasbace, 1, 2); + + if(dig == 0){ + this.digitoVerificador1DaChaveASBACE = dig; + }else{ + this.digitoVerificador1DaChaveASBACE = 10 - dig; + } + } + + /** + * Calcula o segundo dígito da CHAVE ASBECE, recursivamente dependendo do valor do primeiro DV. + * + * @since 0.2 + */ + private void calculeChaveAsbaceDigito2(){ + final String chaveAasbaceComDv1 = writeFields()+this.digitoVerificador1DaChaveASBACE; + + int digito2 = Modulo.calculeMod11(chaveAasbaceComDv1, 2, 7); + + if(digito2 == 0){ + this.digitoVerificador2DaChaveASBACE = digito2; + }else{ + + if(digito2 != 1){ + this.digitoVerificador2DaChaveASBACE = 11 - digito2; + }else{ + + int digito1Recalculado = this.digitoVerificador1DaChaveASBACE + 1; + + this.digitoVerificador1DaChaveASBACE = (digito1Recalculado == 10) ? 0 : digito1Recalculado; + + calculeChaveAsbaceDigito2(); + } + } + } + + /** + * Disponibiliza no objeto titulo os dígitos da CHAVE ASBACE = mesmo que o + * campo livre menos os dois ultimos digitos. + * + * @param titulo + * + * @since 0.2 + */ + private void disponibilizeDigitosDaChaveAsbaceNeste(Titulo titulo) { + + ParametrosBancariosMap parametrosBancarios = titulo.getParametrosBancarios(); + + if(parametrosBancarios == null){ + parametrosBancarios = new ParametrosBancariosMap(); + } + + parametrosBancarios.adicione(CHAVE_ASBACE_DIGITO1, this.digitoVerificador1DaChaveASBACE); + parametrosBancarios.adicione(CHAVE_ASBACE_DIGITO2, this.digitoVerificador2DaChaveASBACE); + + titulo.setParametrosBancarios(parametrosBancarios); + } + + /** + *

+ * Verifica se o código da carteira da conta bancária do título não é nulo e + * se é um número > 0, caso contrário lança uma {@code + * IllegalArgumentException}. + *

+ * + * @param titulo + * + * @since 0.2 + */ + private void checkCarteiraComOuSemRegistro(Titulo titulo) { + + Integer codigoCarteira = titulo.getContaBancaria().getCarteira().getCodigo(); + + final boolean carteiraValida = codigoCarteira.equals(CARTEIRA_SEM_REGISTRO) || codigoCarteira.equals(CARTEIRA_COM_REGISTRO); + + Objects.checkArgument(carteiraValida, format("Código da carteira deve ser \"1-Sem registro impressão local\" ou \"2-Com registro impressão local\" e não [%s].", titulo.getContaBancaria().getCarteira().getCodigo())); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN10.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN10.java new file mode 100644 index 0000000..c310318 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN10.java @@ -0,0 +1,141 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:08:37 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:08:37 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + + +/** + * + * O campo livre do Banco do Brasil com o nosso número de 10 dígitos deve seguir + * esta forma: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2569(6) ZEROSZEROS
26-3279(7) Conta do cedente (sem dígito)Convênio (sem dígito)
33-42109(10) Nosso NúmeroNosso Número
43-4429(2) CarteiraCarteira
+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since JRimum 1.0 + * + * @version 0.2 + */ +class CLBancoDoBrasilNN10 extends AbstractCLBancoDoBrasil { + /** + * + */ + private static final long serialVersionUID = -7675528811239346517L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco do Brasil + * que tenha o nosso número de tamanho 10. + *

+ * @param titulo título com as informações para geração do campo livre + */ + CLBancoDoBrasilNN10(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + + String nossoNumero = titulo.getNossoNumero(); + + this.add(new FixedField("", 6, Fillers.ZERO_LEFT)); + + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT)); + + this.add(new FixedField(nossoNumero, 10, Fillers.ZERO_LEFT)); + + this.add(new FixedField(conta.getCarteira().getCodigo(), 2, Fillers.ZERO_LEFT)); + + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN11.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN11.java new file mode 100644 index 0000000..9eb75c1 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN11.java @@ -0,0 +1,140 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:08:50 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:08:50 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + * + * O campo livre do Banco do Brasil com o nosso número de 11 dígitos deve seguir + * esta forma: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-30119(11) Nosso número (sem dígito)Nosso número (sem dígito)
31-3449(4) Código da agência (sem dígito)Código da Agência (sem dígito)
35-4289(8) Código da conta (sem dígito)Convênio (sem dígito)
43-4429(2) CarteiraCarteira
+ * + * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoDoBrasilNN11 extends AbstractCLBancoDoBrasil { + + /** + * + */ + private static final long serialVersionUID = -4859699102593834115L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco do Brasil + * que tenha o nosso número de tamanho 11. + *

+ * @param titulo título com as informações para geração do campo livre + */ + CLBancoDoBrasilNN11(Titulo titulo) { + + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + String nossoNumero = titulo.getNossoNumero(); + + this.add(new FixedField(nossoNumero, 11, Fillers.ZERO_LEFT)); + + this.add(new FixedField(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 8, Fillers.ZERO_LEFT)); + + this.add(new FixedField(conta.getCarteira().getCodigo(), 2, Fillers.ZERO_LEFT)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio6.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio6.java new file mode 100644 index 0000000..d5b210b --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio6.java @@ -0,0 +1,137 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:09:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:09:00 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + * + * O campo livre do Banco do Brasil com o nosso número de 17 dígitos e convênio + * de 7 posições deve seguir esta forma: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2569(6)Conta do cedente (sem dígito)Convênio (sem dígito)
26-42179(17)Nosso Número (sem dígito)Nosso Número (sem dígito)
43-4429(2)Fixo 21 (serviço)Fixo 21 (serviço)
+ * + * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoDoBrasilNN17Convenio6 extends AbstractCLBancoDoBrasil{ + + /** + * + */ + private static final long serialVersionUID = 3035422743112225831L; + + /** + * + */ + private static final int SERVICO = 21; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 3; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco do Brasil + * que tenha o nosso número de tamanho 17. + *

+ * @param titulo título com as informações para geração do campo livre + */ + CLBancoDoBrasilNN17Convenio6(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + String nossoNumero = titulo.getNossoNumero(); + + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT)); + + this.add(new FixedField(nossoNumero, 17, Fillers.ZERO_LEFT)); + this.add(new FixedField(SERVICO, 2)); + + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio7.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio7.java new file mode 100644 index 0000000..05dddbb --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio7.java @@ -0,0 +1,91 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; + +/** + * + * O campo livre do Banco do Brasil com o nosso número de 17 dígitos e convênio + * de 7 posições deve seguir esta forma: + * + + * + * + * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoDoBrasilNN17Convenio7 extends AbstractCLBancoDoBrasil { + + /** + * {@code serialVersionUID = 2347714390743602306L} + */ + private static final long serialVersionUID = 2347714390743602306L; + + /** + * Número de campos = 3. + */ + protected static final Integer FIELDS_LENGTH = Integer.valueOf(3); + + /** + * Tamanho do campo Constante = 6. + */ + protected static final Integer CONSTANT_LENGTH = Integer.valueOf(6); + + /** + * Valor do campo Constante = 0. + */ + protected static final Integer CONSTANT_VALUE = Integer.valueOf(0); + + /** + * Constante em forma de campo {@link #CONSTANT_VALUE} e + * {@link #CONSTANT_LENGTH}, valor escrito: "000000". + */ + private static final FixedField CONSTANT_FIELD = new FixedField(CONSTANT_VALUE, CONSTANT_LENGTH, Fillers.ZERO_LEFT); + + /** + * Tamanho do campo Nosso Número = 17. + */ + protected static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(17); + + /** + * Tamanho do campo Carteira = 2. + */ + protected static final Integer CARTEIRA_LENGTH = Integer.valueOf(2); + + /** + *

+ * Cria um campo livre instanciando o número de fields ({@code + * FIELDS_LENGTH}) deste campo. + *

+ * + * @since 0.2 + */ + protected CLBancoDoBrasilNN17Convenio7() { + + super(FIELDS_LENGTH); + } + + @Override + protected void checkValues(Titulo titulo) { + + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN17); + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99); + } + + @Override + protected void addFields(Titulo titulo) { + + this.add(CONSTANT_FIELD); + this.add(new FixedField(titulo.getNossoNumero(),NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT)); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoNordesteDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoNordesteDoBrasil.java new file mode 100644 index 0000000..17edfad --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoNordesteDoBrasil.java @@ -0,0 +1,218 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/12/2010 - 13:24:00 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Created at: 16/12/2010 - 13:24:00 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; + +/** + *

+ * O campo livre do Banco do Nordeste deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2349(4)Agência Cedente (sem o digito verificador, completar com zeros à esquerda quando necessário)Código da Agência (sem dígito)
24-3079(7)Conta do Cedente (sem o dígito verificador, completar com zeros à esquerda quando necessário)Conta do Cedente (sem dígito)
31-3119(1)Dígito da Conta do CedenteDígito da Conta do Cedente
32-3879(7)Nosso Número (sem o dígito verificador, completar com zeros à esquerda quando necessário)Nosso Número (No. Bancário) (sem dígito)
39-3919(1)Dígito do Nosso NúmeroDígito do Nosso Número (No. Bancário)
40-4129(2)Carteira (utilizar o código da carteira)Carteira (Tipo de Operação)
42-4439(3)Preenchar campo com ZEROS.Campo zerado
+ *
+ * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Paulo Porto + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoDoNordesteDoBrasil extends AbstractCLBancoDoNordesteDoBrasil { + + /** + * {@code serialVersionUID = 5203223333877548162L} + */ + private static final long serialVersionUID = 5203223333877548162L; + + /** + * Número de campos = 7. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Agência = 4. + */ + private static final Integer AGENCIA_LENGTH = Integer.valueOf(4); + + /** + * Tamanho do campo Conta = 7. + */ + private static final Integer CONTA_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Dígito da Conta = 1. + */ + private static final Integer DIGITO_CONTA_LENGTH = Integer.valueOf(1); + + + /** + * Tamanho do campo Nosso Número = 7. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Dígito do Nosso Número = 1. + */ + private static final Integer DIGITO_NOSSO_NUMERO_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo Carteira = 2. + */ + private static final Integer CARTEIRA_LENGTH = Integer.valueOf(2); + + + /** + * Tamanho do campo "Campo Zerado" = 3. + */ + private static final Integer CAMPO_ZERADO_LENGTH = Integer.valueOf(3); + + /** + * Valor do campo "Campo Zerado" = 0. + */ + protected static final Integer CAMPO_ZERADO_VALUE = Integer.valueOf(0); + + /** + *

+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + *

+ * + * @since 0.2 + */ + protected CLBancoDoNordesteDoBrasil() { + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void checkValues(Titulo titulo){ + + checkAgenciaNotNull(titulo); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999); + checkDigitoDoCodigoDoNumeroDaConta(titulo); + checkNossoNumero(titulo); + checkDigitoDoNossoNumero(titulo); + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void addFields(Titulo titulo) { + + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), DIGITO_CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getDigitoDoNossoNumero(), DIGITO_NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(CAMPO_ZERADO_VALUE, CAMPO_ZERADO_LENGTH, Fillers.ZERO_LEFT)); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoIntermedium.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoIntermedium.java new file mode 100644 index 0000000..2f0bd39 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoIntermedium.java @@ -0,0 +1,141 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 11/08/2010 - 10:23:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 11/08/2010 - 10:23:00 + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + + +/** + * O campo livre do Banco Intermedium deve seguir esta forma: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo
20-2344 Código da agência
24-2522 Constante = 70
26-361111 Nosso número sem o dígito
37-4266 Código da conta
43-4311 Dígito da conta
44-4411 Constante = 0
+ * + * + * @author Gilmar P.S.L + * @author Lukas Antunes + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoIntermedium extends AbstractCLBancoIntermedium { + + /** + * + */ + private static final long serialVersionUID = 858563493013156459L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 6; + + private static final Integer CONSTANTE_70 = Integer.valueOf(70); + + private static final Integer CONSTANTE_0 = Integer.valueOf(0); + + /** + *

+ * Dado um título, cria um campo livre para banco Intermedium (077). + *

+ * + * @param titulo - título com as informações para geração do campo livre + */ + CLBancoIntermedium(Titulo titulo) { + + super(FIELDS_LENGTH); + + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(CONSTANTE_70, 2)); + this.add(new FixedField(titulo.getNossoNumero(), 11, Fillers.ZERO_LEFT)); + this.add(new FixedField( titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT)); + this.add(new FixedField( titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), 1, Fillers.ZERO_LEFT)); + this.add(new FixedField(CONSTANTE_0, 1)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoReal.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoReal.java new file mode 100644 index 0000000..deecadc --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoReal.java @@ -0,0 +1,194 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:09:11 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:09:11 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.text.Strings; +import org.jrimum.vallia.digitoverificador.Modulo; +import org.jrimum.vallia.digitoverificador.TipoDeModulo; + +/** + *

*** COBRANÇA SEM REGISTRO ***

+ * O campo livre do Banco Real deve seguir esta forma: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2349(4)Código da agência (sem dígito)Agência - Código da agência do cedente
24-3079(7) Código da conta (sem dígito)Conta - Número da conta do cedente
31-3119(1) Dígito verificadorDigitão - Dígito de cobrança
32-44139(13) Número do título(máximo de 13 posições numéricas)Número do banco - Número do título no banco
+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ + +class CLBancoReal extends AbstractCLBancoReal { + + /** + * + */ + private static final long serialVersionUID = -5294809022535972391L; + + private static final Modulo modulo10 = new Modulo(TipoDeModulo.MODULO10); + + /** + * Tamanho deste campo. + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco Real. + *

+ * @param titulo título com as informações para geração do campo livre + */ + CLBancoReal(Titulo titulo) { + + super(FIELDS_LENGTH); + + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT)); + this.add(new FixedField(calculeDigitoDaPosicao31(titulo.getNossoNumero(), titulo.getContaBancaria().getAgencia().getCodigo(), titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta()), 1, Fillers.ZERO_LEFT)); + this.add(new FixedField(Strings.eliminateSymbols(titulo.getNossoNumero()), 13, Fillers.ZERO_LEFT)); + } + + /** + *

+ * Calcula o Dígito da posição 31 deste campo livre (CLBancoReal). + *

+ * + *

+ * No cálculo do dígito da posição 31 são considerados, para a obtenção do + * dígito, os dados {[NOSSO NÚMERO],[AGÊNCIA],[CONTA]} calculado pelos + * critérios do Módulo 10. + *

+ *
Exemplo:
+ * + *
+ * + * + * + * + * + * + * + * + * + * + * + * + *
Nosso Número1234567890123
Agência4444
Conta Corrente7777777
+ * + * @param nossoNumero + * @param agencia + * @param contaCorrente + * @return Dígito verficador calculado + * + * @see org.jrimum.vallia.digitoverificador.Modulo + * + * @since 0.2 + */ + private String calculeDigitoDaPosicao31(String nossoNumero, + Integer agencia, Integer contaCorrente) { + + StringBuilder formula = new StringBuilder(); + String dV = null; + + formula.append(Fillers.ZERO_LEFT.fill(nossoNumero, 13)); + formula.append(Fillers.ZERO_LEFT.fill(agencia, 4)); + formula.append(Fillers.ZERO_LEFT.fill(contaCorrente, 7)); + + int restoDivisao = modulo10.calcule(formula.toString()); + + int restoSubtracao = (10 - restoDivisao); + + if (restoSubtracao == 10) { + dV = "0"; + } else { + + dV = "" + restoSubtracao; + } + + return dV; + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistrada.java new file mode 100644 index 0000000..ea7b1e0 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistrada.java @@ -0,0 +1,120 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoRural.CODIGO_REDUZIDO; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * O campo livre do Banco Rural, para cobrança não registrada, deve seguir esta + * forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)Tipo de Cobrança - 9Tipo de Cobrança - 9
21-2339(3)Código da AgênciaAgência Cedente
24-2639(3)Código Reduzido do ClienteO código reduzido deverá ser + * solicitado ao gerente da agência.
27-41159(15)Seu númeroNosso número
42-4439(3)Constante "000"Zeros
+ * + * @author Gilmar P.S.L. + */ +class CLBancoRuralCobrancaNaoRegistrada extends AbstractCLBancoRural{ + + /** + * + */ + private static final long serialVersionUID = -837754906530330855L; + + /** + * Número de campos. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(5); + + /** + * Tipo de Cobrança = 9. + */ + private static final Integer TIPO_COBRANCA = Integer.valueOf(9); + + /** + * Constante + */ + private static final String ZEROS = "000"; + + /** + *

+ * Dado um título, cria um campo livre para cobrança não registrada do Banco + * Rural. + *

+ * + * @param titulo + * - Título com as informações para geração do campo livre + */ + CLBancoRuralCobrancaNaoRegistrada(Titulo titulo) { + + super(FIELDS_LENGTH); + + this.add( new FixedField( TIPO_COBRANCA , 1 ) ); + this.add( new FixedField( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) ); + this.add( new FixedField(titulo.getParametrosBancarios().getValor(CODIGO_REDUZIDO), 3, Fillers.ZERO_LEFT ) ); + this.add( new FixedField( titulo.getNossoNumero(), 15 , Fillers.ZERO_LEFT ) ); + this.add( new FixedField( ZEROS, 3)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistradaSeguradora.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistradaSeguradora.java new file mode 100644 index 0000000..18fb120 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistradaSeguradora.java @@ -0,0 +1,127 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoRural.CODIGO_REDUZIDO; +import static org.jrimum.bopepo.parametro.ParametroBancoRural.VALOR_IOS; + +import java.math.BigDecimal; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.text.DecimalFormat; + +/** + *

+ * O campo livre do Banco Rural, para cobrança sem registro (apólice de seguro + * com I.O.S.), deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)Tipo de Cobrança - 4Tipo de Cobrança - 4
21-2339(3)Código da AgênciaAgência Cedente
24-2639(3)Código Reduzido do ClienteO código reduzido deverá ser + * solicitado ao gerente da agência.
27-36109(10)Seu númeroNosso número
37-3719(1)Dígito seu NúmeroDígito nosso número
42-4439(3)Valor I.O.S. 05 (cinco) inteiros, + * 02 (duas) decimaisValor do imposto
+ * + * @author Gilmar P.S.L. + */ +class CLBancoRuralCobrancaNaoRegistradaSeguradora extends AbstractCLBancoRural{ + + /** + * + */ + private static final long serialVersionUID = -2427800425370567806L; + + /** + * Número de campos. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(6); + + /** + * Tipo de Cobrança = 4. + */ + private static final Integer TIPO_COBRANCA = Integer.valueOf(4); + + /** + *

+ * Dado um título, cria um campo livre para cobrança sem registro – apólice de seguro com I.O.S.. + *

+ * + * @param titulo + * - título com as informações para geração do campo livre + */ + CLBancoRuralCobrancaNaoRegistradaSeguradora(Titulo titulo) { + + super(FIELDS_LENGTH); + + this.add( new FixedField( TIPO_COBRANCA , 1 ) ); + this.add( new FixedField( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) ); + this.add( new FixedField(titulo.getParametrosBancarios().getValor(CODIGO_REDUZIDO), 3, Fillers.ZERO_LEFT ) ); + this.add( new FixedField( titulo.getNossoNumero(), 10 , Fillers.ZERO_LEFT ) ); + this.add( new FixedField( titulo.getDigitoDoNossoNumero(), 1 , Fillers.ZERO_LEFT ) ); + this.add( new FixedField(titulo.getParametrosBancarios().getValor(VALOR_IOS), 7, DecimalFormat.NUMBER_DD_BR.copy(), Fillers.ZERO_LEFT)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaRegistrada.java new file mode 100644 index 0000000..47d2dae --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaRegistrada.java @@ -0,0 +1,131 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * O campo livre do Banco Rural, para cobrança registrada, deve seguir esta + * forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)Tipo de Cobrança - 0Tipo de Cobrança - 0
21-2339(3)Código da AgênciaAgência Cedente
24-3299(9)Conta CorrenteConta do Cedente
33-3319(1)Dígito da Conta CorrenteDígito da Conta do Cedente
34-4079(7)Nosso NúmeroNosso Número
41-4119(1)Dígito do Nosso NúmeroDígito do Nosso Número
42-4439(3)Constante "000"Zeros
+ * + * @author Fernando Dias + * @author Gilmar P.S.L. + */ +class CLBancoRuralCobrancaRegistrada extends AbstractCLBancoRural{ + + private static final long serialVersionUID = -5166628254198207874L; + + /** + * Número de campos. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(7); + + /** + * Tipo de Cobrança = 0. + */ + private static final Integer TIPO_COBRANCA = Integer.valueOf(0); + + /** + * Constante + */ + private static final String ZEROS = "000"; + + /** + *

+ * Dado um título, cria um campo livre para cobrança registrada do Banco + * Rural. + *

+ * + * @param titulo + * - título com as informações para geração do campo livre + */ + CLBancoRuralCobrancaRegistrada(Titulo titulo) { + + super(FIELDS_LENGTH); + + this.add( new FixedField( TIPO_COBRANCA , 1 ) ); + this.add( new FixedField( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) ); + this.add( new FixedField( titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 9, Fillers.ZERO_LEFT ) ); + this.add( new FixedField( titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), 1 ) ); + this.add( new FixedField( titulo.getNossoNumero(), 7 , Fillers.ZERO_LEFT ) ); + this.add( new FixedField( titulo.getDigitoDoNossoNumero(), 1 ) ); + this.add( new FixedField( ZEROS, 3)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaNaoRegistrada.java new file mode 100644 index 0000000..9059be0 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaNaoRegistrada.java @@ -0,0 +1,164 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 21:54:06 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 21:54:06 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; + +/** + *

+ * O campo livre do Bradesco deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)Sistema = constante 7Valor fixo 7
21-2669(6)Fixo atribuído pelo banco (*) + * Identificação numérica com cinco números + um dígito verificadorNúmero da conta + DV
27-4317 9(17)Livre do cliente - Variável + * conforme necessidade do clienteNosso Número (sem dígito)
44-4419Tipo cobrança = constante 4 - + * Express Emitido pelo ClienteValor fixo 4
+ * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoSafraCobrancaNaoRegistrada extends AbstractCLBancoSafra { + + /** + * {@code serialVersionUID = -6573340701469029151L} + */ + private static final long serialVersionUID = -6573340701469029151L; + + /** + * Tamanho do número de campos = 5. + */ + protected static final Integer FIELDS_LENGTH = Integer.valueOf(5); + + /** + * Tamanho do campo Conta = 5. + */ + private static final Integer CONTA_LENGTH = Integer.valueOf(5); + + /** + * Tamanho do campo Dígito da Conta = 1. + */ + private static final Integer CONTA_DIGITO_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo Nosso Número = 17. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(17); + + /** + * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH} + * ) deste campo. + * + * @since 0.2 + */ + protected CLBancoSafraCobrancaNaoRegistrada() { + + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void checkValues(Titulo titulo) { + + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 999999); + checkDigitoDoCodigoDoNumeroDaConta(titulo); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN17); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void addFields(Titulo titulo) { + + this.add(SISTEMA_CONSTANT_FIELD); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), CONTA_DIGITO_LENGTH)); + this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH)); + this.add(new FixedField(TipoDeCobranca.EXPRESS_BOLETO_EMITIDO_PELO_CLIENTE.codigo(), TIPO_COBRANCA_FIELD_LENGTH)); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaRegistrada.java new file mode 100644 index 0000000..5289c09 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaRegistrada.java @@ -0,0 +1,181 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 20:31:39 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 20:31:39 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; + +/** + *

+ * O campo livre do Bradesco deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)Sistema = constante 7Valor fixo 7
21-34149(14)Código do cliente = Agência + + * ContaCódigo do cliente = (Ag[4] + + * dv[1]) + (Cc[8] + dv[1])
35-439 9(9)Número do Nosso Número(Sem o + * digito verificador)Nosso Número do título exatamente + * com 9 dígitos (sem dígito verificador)
44-4419Tipo cobrança = constante 2 - + * Eletrônica Emitido pelo ClienteValor fixo 2
+ * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBancoSafraCobrancaRegistrada extends AbstractCLBancoSafra { + + /** + * {@code serialVersionUID = -4532989921797507161L} + */ + private static final long serialVersionUID = -4532989921797507161L; + + /** + * Tamanho do número de campos = 7. + */ + protected static final Integer FIELDS_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Agência = 4. + */ + private static final Integer AGENCIA_LENGTH = Integer.valueOf(4); + + /** + * Tamanho do campo Dígito da Agência = 1. + */ + private static final Integer AGENCIA_DIGITO_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo Conta = 8. + */ + private static final Integer CONTA_LENGTH = Integer.valueOf(8); + + /** + * Tamanho do campo Dígito da Conta = 1. + */ + private static final Integer CONTA_DIGITO_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo Nosso Número = 9. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(9); + + /** + * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH} + * ) deste campo. + * + * @since 0.2 + */ + protected CLBancoSafraCobrancaRegistrada() { + + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void checkValues(Titulo titulo){ + + checkAgenciaNotNull(titulo); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999); + checkDigitoDoCodigoDaAgencia(titulo); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 999999); + checkDigitoDoCodigoDoNumeroDaConta(titulo); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN9); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void addFields(Titulo titulo) { + + this.add(SISTEMA_CONSTANT_FIELD); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), AGENCIA_DIGITO_LENGTH)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), CONTA_DIGITO_LENGTH)); + this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH)); + this.add(new FixedField(TipoDeCobranca.DIRETA_BOLETO_EMITIDO_PELO_CLIENTE.codigo(), TIPO_COBRANCA_FIELD_LENGTH)); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSantander.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSantander.java new file mode 100644 index 0000000..66e4e2c --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSantander.java @@ -0,0 +1,184 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoSantander.IOF_SEGURADORA; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; + +/** + *

+ * O campo livre do Banco Santander deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo
20-2019(01)Fixo "9"
21-2779(7)Conta do cedente padrão Santander
28-40139(13) + *

+ * Nosso Número com zeros a esquerda. OBS: Caso o arquivo de + * registro para os títulos seja de 400 bytes (CNAB) + *

+ *
    + *
  • Banco 353 (Banco Santander) - Utilizar somente 08 posições do Nosso Numero (07 posições + + * DV), zerando os 05 primeiros dígitos
  • + *
  • Banco 008 (Meridional do Brasil S/A) - Utilizar somente 09 posições do Nosso Numero (08 posições + + * DV), zerando os 04 primeiros dígitos
  • + *
+ *
41-4119(1) + *

+ * IOF – Seguradoras (Se 7% informar 7. Limitado a 9%) + *

+ *

+ * Demais clientes usar 0 (zero) + *

+ *
42-4439(3) + *
    + *
  • 101 - Cobrança Simples Rápida COM Registro
  • + *
  • 102 - Cobrança simples – SEM Registro
  • + *
  • 104 - Cobrança Simples Eletrônica - COM Registro
  • + *
  • 201 - Penhor Rápida com Registro
  • + *
+ *
+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Dani Schinniger + */ +class CLBancoSantander extends AbstractCLSantander implements CampoLivre { + + /** + * + */ + private static final long serialVersionUID = -412221524249334574L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 5; + + /** + * Constante informada no manual. + */ + private static final Integer CONSTANTE = Integer.valueOf(9); + + /** + * 101- Cobrança Simples Rápida COM Registro + */ + private static final int CARTEIRA_RAPIDA_COM_REGISTRO = 101; + + /** + * 201- Penhor Rápida com Registro + */ + private static final int CARTEIRA_RAPIDA_SEM_REGISTRO = 201; + + /** + * 102- Cobrança simples – SEM Registro + */ + private static final int CARTEIRA_SIMPLES_SEM_REGISTRO = 102; + + /** + * 104- Cobrança Simples Eletrônica - COM Registro + */ + private static final int COBRANCA_SIMPLES_ELETRONICA_COM_REGISTRO = 104; + + CLBancoSantander(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + StringBuilder nossoNumero = new StringBuilder(titulo.getNossoNumero()); + nossoNumero.append(titulo.getDigitoDoNossoNumero()); + + this.add(new FixedField(CONSTANTE, 1)); + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT)); +// this.add(new FixedField(conta.getNumeroDaConta().getDigitoDaConta(), 1)); + + this.add(new FixedField(nossoNumero.toString(), 13, Fillers.ZERO_LEFT)); + + // IOF – Seguradoras + + if (titulo.hasParametrosBancarios() + && Objects.isNotNull(titulo.getParametrosBancarios().getValor( + IOF_SEGURADORA))) { + + this.add(new FixedField(titulo + .getParametrosBancarios().getValor(IOF_SEGURADORA), 1)); + + } else { + + this.add(new FixedField(0, 1)); + } + + // Tipo de Modalidade Carteira + + switch (conta.getCarteira().getCodigo()) { + + case CARTEIRA_RAPIDA_COM_REGISTRO: + case CARTEIRA_RAPIDA_SEM_REGISTRO: + case CARTEIRA_SIMPLES_SEM_REGISTRO: + case COBRANCA_SIMPLES_ELETRONICA_COM_REGISTRO: + + this.add(new FixedField(conta.getCarteira().getCodigo(), 3, + Fillers.ZERO_LEFT)); + + break; + + default: + + Exceptions.throwIllegalArgumentException(String.format( + "CARTEIRA [%s] NÃO SUPORTADA!", conta.getCarteira() + .getCodigo())); + } + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoobCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoobCobrancaNaoRegistrada.java new file mode 100644 index 0000000..062dc35 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoobCobrancaNaoRegistrada.java @@ -0,0 +1,238 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 17/02/2011 - 12:40:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 17/02/2011 - 12:40:00 + */ + +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoob.MODALIDADE_DE_COBRANCA; +import static org.jrimum.bopepo.parametro.ParametroBancoob.NUMERO_DA_PARCELA; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; + +/** + *

+ * O campo livre do bradesco deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)CarteiraCarteira
21-2449(4)Agência Cedente (Cooperativa) (sem o dígito + * verificador, completar com zeros a esquerda quando necessário)Código da Agência (sem dígito)
25-2629(2)ModalidadeModalidade
27-3379(7)Código do Cliente (sem o dígito + * verificador, completar com zeros a esquerda quando necessário)Conta do Beneficiário (sem dígito)
34-4079(7)Número do título(sem o dígito + * verificador, completar com zeros a esquerda quando necessário)Nosso Número (sem dígito)
41-4119(1)Dígito verificador do Nosso NúmeroDígito verificador do Nosso Número
42-4439(3)Número da Parcela (completar com zeros a esquerda quando necessário)Número da Parcela
+ * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * + * @author Gilmar P.S.L + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class CLBancoobCobrancaNaoRegistrada extends AbstractCLBancoob{ + + /** + * {@code serialVersionUID = 2864939240695151533L} + */ + private static final long serialVersionUID = 2864939240695151533L; + + /** + * Número de campos = 6. + */ + protected static final Integer FIELDS_LENGTH = 8; + + /** + * Tamanho do campo Carteira = 1. + */ + protected static final Integer CARTEIRA_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo Agência = 4. + */ + protected static final Integer AGENCIA_LENGTH = Integer.valueOf(4); + + /** + * Tamanho do campo código da modalidade de cobrança = 2. + */ + protected static final Integer MODALIDADE_DE_COBRANCA_LENGTH = Integer.valueOf(2); + + /** + * Valor do código da modalidade de cobrança (01) = SIMPLES. + */ + protected static final Integer COBRANCA_SIMPLES = Integer.valueOf(1); + + /** + * Tamanho do campo Nosso Número = 7. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Dígito Verificador do Nosso Número = 1. + */ + private static final Integer DV_NOSSO_NUMERO_LENGTH = Integer.valueOf(1); + + /** + * Tamanho do campo Conta = 6. + */ + private static final Integer CONTA_LENGTH = Integer.valueOf(6); + + /** + * Tamanho do campo Dígito da conta = 1 + */ + private static final Integer DV_CONTA_LENGTH = 1; + + /** + * Valor do número de parcelas = 1. + */ + private static final Integer UMA_PARCELA = Integer.valueOf(1); + + /** + * Tamanho do campo Conta = 3. + */ + private static final Integer NUMERO_DA_PARCELA_LENGTH = 3; + + /** + *

+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + *

+ * + * @since 0.2 + */ + protected CLBancoobCobrancaNaoRegistrada() { + super(FIELDS_LENGTH); + } + + @Override + protected void checkValues(Titulo titulo) { + + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCodigoDaCarteiraMenorOuIgualQue(titulo, 9); + checkAgenciaNotNull(titulo); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN7); + checkDigitoDoNossoNumero(titulo); + checkTamanhoDigitoDoNossoNumero(titulo, DV_NOSSO_NUMERO_LENGTH); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999); + checkDigitoDoCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 999999); + } + + @Override + protected void addFields(Titulo titulo) { + + Integer codigoDaModalidadeDeCobranca = COBRANCA_SIMPLES; + Integer numeroDaParcela = UMA_PARCELA; + + if (titulo.hasParametrosBancarios()) { + + if (titulo.getParametrosBancarios().contemComNome(MODALIDADE_DE_COBRANCA)) { + checkParametroBancario(titulo, MODALIDADE_DE_COBRANCA); + codigoDaModalidadeDeCobranca = titulo.getParametrosBancarios().getValor(MODALIDADE_DE_COBRANCA); + } + + if (titulo.getParametrosBancarios().contemComNome(NUMERO_DA_PARCELA)) { + checkParametroBancario(titulo, NUMERO_DA_PARCELA); + numeroDaParcela = titulo.getParametrosBancarios().getValor(NUMERO_DA_PARCELA); + } + } + + this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(codigoDaModalidadeDeCobranca, MODALIDADE_DE_COBRANCA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), DV_CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNossoNumero(),NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getDigitoDoNossoNumero(),DV_NOSSO_NUMERO_LENGTH)); + this.add(new FixedField(numeroDaParcela, NUMERO_DA_PARCELA_LENGTH, Fillers.ZERO_LEFT)); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanestes.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanestes.java new file mode 100644 index 0000000..397381a --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanestes.java @@ -0,0 +1,222 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: Dec 13, 2008 - 10:40:38 AM + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: Dec 13, 2008 - 10:40:38 AM + * + */ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.utilix.Objects.exists; + +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.vallia.digitoverificador.Modulo; +import org.jrimum.vallia.digitoverificador.TipoDeModulo; + +/** + * + *

+ * Representação do campo livre usado para boletos com carteiras (cobrança) + * sem registro, caucionadas e com registro. O tipo de cobrança de carteira caucionada + * se enquadra no conceito de cobrança registrada, sendo diferenciada pelo código + * da carteira. + *

+ * + *

+ * Layout:
+ *

+ *

+ * Cobrança Normal - CAMPO LIVRE - Chave ASBACE + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoCampo Livre No Código De + * Barras (20 a 44)
20 a 27Nosso Número (sem os dois dígitos)
28 a 38Conta Corrente
39 a 39Produto = 2-Sem registro; 3-Caucionada; 4,5,6 e 7-Cobrança com registro
40 a 42Constante = "021" Código do BANESTES
43 a 44Duplo Dígito referente às posições 20 a 42
+ *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBanestes extends AbstractCLBanestes { + + /** + * + */ + private static final long serialVersionUID = 476678476727564241L; + + private static final Integer FIELDS_LENGTH = 5; + + public CLBanestes(Titulo titulo) { + + super(FIELDS_LENGTH); + + this.add(new FixedField(Integer.valueOf(titulo.getNossoNumero()), 8, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 11, Fillers.ZERO_LEFT)); + + final Integer codigoDaCarteiraDeCobranca = titulo.getContaBancaria().getCarteira().getCodigo(); + + if (exists(codigoDaCarteiraDeCobranca)) { + this.add(new FixedField(codigoDaCarteiraDeCobranca, 1)); + + } else { + + final TipoDeCobranca tipoDeCobranca = titulo.getContaBancaria().getCarteira().getTipoCobranca(); + + if (tipoDeCobranca == null) { + throw new CampoLivreException("Tipo de cobrança da carteira não foi especificado!"); + } + + switch (tipoDeCobranca) { + + case SEM_REGISTRO: + this.add(new FixedField(2, 1)); + break; + + case COM_REGISTRO: + if (codigoDaCarteiraDeCobranca >= 3 && codigoDaCarteiraDeCobranca <= 7) { + + this.add(new FixedField(codigoDaCarteiraDeCobranca, 1)); + break; + + } else { + throw new CampoLivreException("Código da carteira de cobrança com registro deve ser" + + " especificado com 3,4,5,6 ou 7. Valor atual = [" + codigoDaCarteiraDeCobranca + "]"); + } + default: + throw new CampoLivreException("Tipo de cobrança [" + tipoDeCobranca + "] não é suportado!"); + + } + } + this.add(new FixedField(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigo().byteValue(), 3, Fillers.ZERO_LEFT)); + this.add(new FixedField(calculaDuploDV(), 2, Fillers.ZERO_LEFT)); + } + + /** + * Calcula duplo dígito verificador da posição 0 à 23 do campo livre (Chave ASBACE).. + * + * @return Duplo dígito verificador. + * + */ + private byte calculaDuploDV() { + final byte duploDV; + + String fields = writeFields(); + + byte primeiroDV = calculaPrimeiroDV(fields); + + final byte segundoDV; + + // resto proveniente do módulo 11 com pesos de 2 a 7 + int restoDoModulo11 = new Modulo(TipoDeModulo.MODULO11, 7, 2).calcule(fields + primeiroDV); + + if (restoDoModulo11 == 0) { + segundoDV = 0; + } else if (restoDoModulo11 == 1) { + if (primeiroDV == 9) { + primeiroDV = 0; + } else { + primeiroDV++; + } + segundoDV = (byte) new Modulo(TipoDeModulo.MODULO11, 7, 2).calcule(fields + primeiroDV); + } else { + segundoDV = (byte) (11 - restoDoModulo11); + } + + duploDV = Byte.parseByte(String.valueOf(primeiroDV) + String.valueOf(segundoDV)); + + return duploDV; + } + + /** + * Calcula o primeiro dígito verificador. + * + * @param fields + * + * @return O primeiro dígito verificador dos dois existentes na chave ASBACE (Campo livre). + */ + private byte calculaPrimeiroDV(String fields) { + final byte primeiroDV; + + // resto proveniente do módulo 10 + byte restoDoModulo10 = (byte) new Modulo(TipoDeModulo.MODULO10).calcule(fields); + + // se não houver resto, primeiroDV = 0 + // caso contrário, primeiroDV = 10 - resto + primeiroDV = (byte) ((restoDoModulo10 == 0) ? 0 : 10 - restoDoModulo10); + return primeiroDV; + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaNaoRegistrada.java new file mode 100644 index 0000000..698c028 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaNaoRegistrada.java @@ -0,0 +1,158 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/07/2008 - 11:15:33 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/07/2008 - 11:15:33 + * + */ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * O campo livre do Barisul para cobrança não registrada (Cobrança Direta + * "sem registro" - Sistema BDL/Carteira de Letras) deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)Tipo de Cobrança: constante = 2 + * "2" Cobrança Direta, Fichário + * emitido pelo CLIENTE.
21-2119(1)Constante "1"Constante "1"
22-2549(4)Código da Agência sem digito + * verificadorCódigo da Agência, com quatro + * dígitos, sem o Número de Controle.
26-3279(7)Código do Cedente sem dígito + * verificadorCódigo do Cedente sem Número de + * Controle.
33-4089(8)Seu número sem dígito verificador + * Nosso Número sem Número de + * Controle
41-4229(2)Constante "40"Constante "40"
43-4429(2)Dois dígitos verificadores + * calculados com os campos anteriores pelos (módulos 10 e 11)Duplo Dígito referente às + * posições 20 a 42 (módulos 10 e 11)
+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBanrisulCobrancaNaoRegistrada extends AbstractCLBanrisul { + + /** + * + */ + private static final long serialVersionUID = -6078207986734440842L; + + private static final Integer FIELDS_LENGTH = 7; + + CLBanrisulCobrancaNaoRegistrada(Titulo titulo) { + super(FIELDS_LENGTH); + + this.add(new FixedField(2, 1)); + this.add(new FixedField("1", 1)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT)); + this.add(new FixedField(Integer.valueOf(titulo.getNossoNumero()), 8, Fillers.ZERO_LEFT)); + this.add(new FixedField("40", 2)); + + this.add(new FixedField(calculaDuploDigito(concateneOsCamposExistentesAteOMomento()), 2)); + + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaRegistrada.java new file mode 100644 index 0000000..2150f9d --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaRegistrada.java @@ -0,0 +1,161 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 02/08/2008 - 13:39:46 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 02/08/2008 - 13:39:46 + * + */ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * Representação do campo livre usado para boletos com carteiras ( + * cobrança) com registro. + *

+ * + *

+ * O campo livre do Barisul para cobrança registrada (Cobrança Normal + * "com registro" - Sistema BDL/Carteira de Letras) deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2019(1)Tipo de Cobrança: constante = 1 + * "1" Cobrança Normal, Fichário + * emitido pelo BANRISUL
21-2119(1)Constante "1"Constante "1"
22-2549(4)Código da Agência sem digito + * verificadorCódigo da Agência, com quatro + * dígitos, sem o Número de Controle.
26-3279(7)Código do Cedente sem dígito + * verificadorCódigo do Cedente sem Número de + * Controle.
33-4089(8)Seu número sem dígito verificador + * Nosso Número sem Número de + * Controle
41-4229(2)Constante "40"Constante "40"
43-4429(2)Dois dígitos verificadores + * calculados com os campos anteriores pelos (módulos 10 e 11)Duplo Dígito referente às + * posições 20 a 42 (módulos 10 e 11)
+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBanrisulCobrancaRegistrada extends AbstractCLBanrisul { + + /** + * + */ + private static final long serialVersionUID = 1577477244182494602L; + + private static final Integer FIELDS_LENGTH = 7; + + CLBanrisulCobrancaRegistrada(Titulo titulo) { + super(FIELDS_LENGTH); + + this.add(new FixedField(1, 1)); + this.add(new FixedField("1", 1)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT)); + this.add(new FixedField(Integer.valueOf(titulo.getNossoNumero()),8, Fillers.ZERO_LEFT)); + this.add(new FixedField("40", 2)); + this.add(new FixedField(calculaDuploDigito(concateneOsCamposExistentesAteOMomento()),2)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBradesco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBradesco.java new file mode 100644 index 0000000..7965e07 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBradesco.java @@ -0,0 +1,195 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:09:27 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:09:27 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; + +/** + *

+ * O campo livre do Bradesco deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2349(4)Agência Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)Código da Agência (sem dígito)
24-2529(2)Código da CarteiraCódigo da Carteira
26-3611 9(11)Número do Nosso Número(Sem o digito verificador)Nosso Número (sem dígito)
37-437 9(7)Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)Conta do Cedente (sem dígito)
44-4419Constante "0"Zero Fixo
+ * + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +class CLBradesco extends AbstractCLBradesco { + + /** + * {@code serialVersionUID = -1253549781074159862L} + */ + private static final long serialVersionUID = -1253549781074159862L; + + /** + * Número de campos = 5. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(5); + + /** + * Tamanho do campo Agência = 4. + */ + private static final Integer AGENCIA_LENGTH = Integer.valueOf(4); + + /** + * Tamanho do campo Carteira = 2. + */ + private static final Integer CARTEIRA_LENGTH = Integer.valueOf(2); + + /** + * Tamanho do campo Nosso Número = 11. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(11); + + /** + * Tamanho do campo Conta = 7. + */ + private static final Integer CONTA_LENGTH = Integer.valueOf(7); + + /** + * Tamanho do campo Constante = 1. + */ + private static final Integer CONSTANT_LENGTH = Integer.valueOf(1); + + /** + * Valor do campo Constante = 0. + */ + private static final Integer CONSTANT_VALUE = Integer.valueOf(0); + + /** + * Constante em forma de campo {@linkplain #CONSTANT_VALUE} e {@linkplain #CONSTANT_LENGTH}. + */ + private static final FixedField CONSTANT_FIELD = new FixedField(CONSTANT_VALUE, CONSTANT_LENGTH); + + /** + * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + * + * @since 0.2 + */ + protected CLBradesco() { + + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void checkValues(Titulo titulo){ + + checkAgenciaNotNull(titulo); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999); + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN11); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void addFields(Titulo titulo) { + + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(CONSTANT_FIELD); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero10.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero10.java new file mode 100644 index 0000000..4a02937 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero10.java @@ -0,0 +1,217 @@ +package org.jrimum.bopepo.campolivre; + +import static java.lang.String.format; +import static org.jrimum.bopepo.parametro.ParametroCaixaEconomicaFederal.CODIGO_OPERACAO; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; + +/** + *

+ * O campo livre da Caixa Econômica Federal para cobrança simples (CS), rápida(CR) e sem registro (SR) + * - SICOB, deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-29109(10)Nosso Número + * Nosso Número no padrão de uma das + * três cobranças (simples, rápida ou sem registro) + * + *

Exemplos:
+ * Cobrança Simples - Nosso número inicia com 3. Ex: Carteira 11
+ * Cobrança Rápida - Nosso número inicia com 9. Ex: Carteira 12
+ * Cobrança Sem Registro - Nosso número inicia com 80, 81 ou 82. Ex: Carteira 14. + *

+ * + *
30-3349(4)Código da AgênciaCódigo da Agência Cedente
34-3639(3)Código da OperaçãoOperação Código
37-4489(8)Código do número da contaCódigo fornecido pela Agência
+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + + * @see Manuais SICOB - Caixa + * @see Especificação código barras com nosso número de 11 posições + * @see Leiaute de Arquivo Eletrônico Padrão CNAB 240 - Cobrança Bancária CAIXA - SICOB + * + * @since 0.2 + * + * @version 0.2 + */ +class CLCaixaEconomicaFederalSICOBNossoNumero10 extends AbstractCLCaixaEconomicaFederal { + + /** + * + */ + private static final long serialVersionUID = 5585190685525441426L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco Caixa Econômica + * Federal que tenha o serviço SINCO. + *

+ * + * @param titulo - Título com as informações para geração do campo livre + */ + CLCaixaEconomicaFederalSICOBNossoNumero10(Titulo titulo) { + + super(FIELDS_LENGTH); + + Objects.checkNotNull(titulo.getParametrosBancarios(), "Parâmetros bancários necessários [titulo.getParametrosBancarios()==null]!"); + checkPadraoNossoNumero(titulo.getNossoNumero()); + + // TODO: Testar checkPadraoNossoNumeroPorCodigoDaCarteira; + /* + Integer codigoDaCarteira = titulo.getContaBancaria().getCarteira().getCodigo(); + if (Objects.isNotNull(codigoDaCarteira)) { + checkPadraoNossoNumeroPorCodigoDaCarteira(titulo.getNossoNumero(), codigoDaCarteira); + } + */ + + this.add(new FixedField(titulo.getNossoNumero(), 10)); + + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + + if(titulo.getParametrosBancarios().contemComNome(CODIGO_OPERACAO)){ + + Integer cnpv = titulo.getParametrosBancarios().getValor(CODIGO_OPERACAO); + + Objects.checkNotNull(titulo.getParametrosBancarios(), "Parâmetro bancário código operação inválido [CodigoOperacao==null]!"); + + this.add(new FixedField(cnpv, 3, Fillers.ZERO_LEFT)); + + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 8, Fillers.ZERO_LEFT)); + + }else{ + + throw new CampoLivreException("Parâmetro bancário código operação (\"CodigoOperacao\") não encontrado!"); + } + + } + + /** + *

+ * Verifica se o nosso número do título começa com 3 (identificador da + * Carteira Simples), 9 (identificador da Carteira Rápida) ou 80, 81 ou 82 + * (que são identificadores da Carteira Sem Registro); Caso contrário gera + * uma {@code IllegalArgumentException}. + *

+ * + *

+ * Padrões aceitos de 10 dígitos: + *

    + *
  • 3NNNNNNNNN (a ser validado com os colegas da Neogrid)
  • + *
  • 9NNNNNNNNN
  • + *
  • 80NNNNNNNN
  • + *
  • 81NNNNNNNN
  • + *
  • 82NNNNNNNN
  • + *
+ *

+ * + * @param nn + * - Nosso Número + */ + private void checkPadraoNossoNumero(String nn){ + if(!nn.startsWith("3") && !nn.startsWith("9") && !nn.startsWith("80") && !nn.startsWith("81") && !nn.startsWith("82")){ + Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB o nosso número [%s] deve começar com 3 que é o identificador da \"carteira siples\" [3NNNNNNNNN] ou 9 que é o identificador da \"carteira rápida\" [9NNNNNNNNN] ou 80, 81 e 82 para \"carteira sem registro\" [82NNNNNNNN]!", nn)); + } + } + + /** + *

+ * Verifica se o nosso número informado tem o padrão esperado de acordo com + * o código da carteira informada. + *

+ *

+ * Obs: Como não há uma garantia documental de que todo nosso número que + * começa com "3" pertencerá somente a carteira 11, então o mais + * coerente é não amarrar o início do nosso número a determinada carteira, + * mas sim o contrário, ou seja, amarrar que toda carteira 11 tem de ter o + * nosso número iniciando com 3". O mesmo raciocíno serve para as outras + * carteiras. + *

+ * + * @param nossoNumero + * - Nosso Número + * @param codigoDaCarteira + * - Código da carteira + */ + private void checkPadraoNossoNumeroPorCodigoDaCarteira(String nossoNumero, Integer codigoDaCarteira){ + switch (codigoDaCarteira) { + case 11: + if(!nossoNumero.startsWith("3")){ + Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 11 (cobrança simples), o nosso número [%s] deve começar com 3!", nossoNumero)); + } + break; + + case 12: + if(!nossoNumero.startsWith("9")){ + Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 12 (cobrança rápida), o nosso número [%s] deve começar com 9!", nossoNumero)); + } + break; + + case 14: + if(!nossoNumero.startsWith("80") && !nossoNumero.startsWith("81") && !nossoNumero.startsWith("82")){ + Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 14 (cobrança sem registro), o nosso número [%s] deve começar com 80, 81 ou 82!", nossoNumero)); + } + break; + } + } + + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero14.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero14.java new file mode 100644 index 0000000..b949bac --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero14.java @@ -0,0 +1,222 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/04/2011 - 20:16:07 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/04/2011 - 20:16:07 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static java.lang.String.format; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Objects; + +/** + *

+ * O campo livre da Caixa para Cobrança Sem Registro SICOB - Nosso Número 16 + * posições, deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2459(5)Código do Cliente(sem dígito + * verificador)Código do Cliente Cedente + * fornecido pela CAIXA
25-2849(4)Código da Agência(sem dígito + * verificador)CNPJ da Agência da Conta do + * Cliente Cedente
29-2919(1)Código da Carteira = 8Código da Carteira = 8
30-3019(1)Constante = 7Constante = 7
31-4414 9(14)Nosso Número(sem dígito + * verificador)Nosso Número do Cliente com 14 + * posições
+ * + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2.3 + */ +class CLCaixaEconomicaFederalSICOBNossoNumero14 extends AbstractCLCaixaEconomicaFederal { + + /** + * {@code serialVersionUID = 4219053358562778591L} + */ + private static final long serialVersionUID = 4219053358562778591L; + + /** + * Número de campos = 5. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(5); + + /** + * Tamanho do campo Conta = 5. + */ + private static final Integer CONTA_LENGTH = Integer.valueOf(5); + + /** + * Tamanho do campo Agência = 4. + */ + private static final Integer AGENCIA_LENGTH = Integer.valueOf(4); + + /** + * Tamanho do campo Nosso Número = 14. + */ + protected static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(14); + + /** + * Constante "7". + */ + private static final FixedField CONSTANT_FIELD = new FixedField(7, 1); + + /** + * Valor constante do campo "Carteira" = 8 - Carteira Sem Registro Eletrônica. + */ + private static final Integer CARTEIRA_SEM_REGISTRO = Integer.valueOf(8); + + /** + * Código da carteira: sempre 8. + */ + private static final FixedField CARTEIRA_FIELD = new FixedField(CARTEIRA_SEM_REGISTRO, 1); + + /** + *

+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + *

+ * + * @since 0.2 + */ + protected CLCaixaEconomicaFederalSICOBNossoNumero14() { + + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void checkValues(Titulo titulo){ + + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 99999); + checkAgenciaNotNull(titulo); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999); + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCodigoDaCarteiraMenorOuIgualQue(titulo, 9); + checkCarteiraSemRegistro(titulo); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN14); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void addFields(Titulo titulo) { + + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT)); + this.add(CARTEIRA_FIELD); + this.add(CONSTANT_FIELD); + this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + } + + /** + * Verifica se o código da carteira da conta bancária do título é igual + * (carteira simples), caso contrário lança uma {@code + * IllegalArgumentException}. + * + *

+ * Motivo extraído do manual do banco:
+ *
+ * Carteira Sem Registro Eletrônica com Nosso Número de 16 posições, + * sendo que 14 destas posições são para livre uso pelo Cedente. Apenas + * Clientes Cedentes com Código do Cedente na operação 870 podem operar com + * a Cobrança Sem Registro com 16 posições de Nosso Número. + *

+ * + * @param titulo + */ + private void checkCarteiraSemRegistro(Titulo titulo) { + + Objects.checkArgument( + titulo.getContaBancaria().getCarteira().getCodigo().equals(CARTEIRA_SEM_REGISTRO), + format("Apenas a carteira de código [8] \"Carteira Sem Registro Eletrônica\" é permitida e não o código [%s]!", titulo.getContaBancaria().getCarteira().getCodigo()) + ); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSIGCB.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSIGCB.java new file mode 100644 index 0000000..1377e69 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSIGCB.java @@ -0,0 +1,242 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 28/07/2010 - 21:05:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 28/07/2010 - 21:05:00 + * + */ + +package org.jrimum.bopepo.campolivre; +import static org.jrimum.vallia.digitoverificador.Modulo.MOD11; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.vallia.digitoverificador.Modulo; + +/** + *

+ * O campo livre para o modelo SIGCB segue esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoConteúdo
01-056Código do Cedente
061Dígito Verificador do Código do Cedente
07-093Nosso Número – Seqüência 1
101Constante 1
11-133Nosso Número – Seqüência 2
141Constante 2
15-239Nosso Número – Seqüência 3
241Dígito Verificador do Campo Livre
+ * + * @author Gilmar P.S.L + * @author Rogério Kleinkauf + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +class CLCaixaEconomicaFederalSIGCB extends AbstractCLCaixaEconomicaFederal { + + /** + * + */ + private static final long serialVersionUID = -7642075752245778160L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 8; + + /** + * Modalidade de cobrança. + */ + private static final int COBRANCA_REGISTRADA = 1; + + /** + * Modalidade de cobrança. + */ + private static final int COBRANCA_NAO_REGISTRADA = 2; + + /** + * Constante que indica emissão de boleto pelo cedente. + */ + private static final int EMISSAO_CEDENTE = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco Caixa + * Econômica Federal que tenha o serviço SIGCB. + *

+ * + * @param titulo + * - Título com as informações para geração do campo livre. + */ + CLCaixaEconomicaFederalSIGCB(Titulo titulo) { + + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + String nossoNumero = titulo.getNossoNumero(); + + Integer dVCodigoDoCedente = calculeDigitoVerificador(conta.getNumeroDaConta().getCodigoDaConta().toString()); + + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT)); + this.add(new FixedField(dVCodigoDoCedente, 1)); + this.add(new FixedField(nossoNumero.substring(0, 3), 3)); + + if(conta.getCarteira().isComRegistro()){ + + this.add(new FixedField(COBRANCA_REGISTRADA, 1)); + + }else{ + + this.add(new FixedField(COBRANCA_NAO_REGISTRADA, 1)); + } + + this.add(new FixedField(nossoNumero.substring(3, 6), 3)); + this.add(new FixedField(EMISSAO_CEDENTE, 1)); + this.add(new FixedField(nossoNumero.substring(6, 15), 9)); + + this.add(new FixedField(calculeDigitoVerificador(gereCampoLivre()), 1)); + } + + /** + * Gera o número que serve para calcular o digito verificador do campoLivre, que é todo o campo livre menos o dígito verificador. + + *

+ * Os campos utilizados são: + *

    + *
  • Código do Cedente: 06 posições
  • + *
  • Dígito Verificador do Código do Cedente: 01 posição
  • + *
  • Nosso Número – Seqüência 1: 03 posições
  • + *
  • Constante 1: 01 posição
  • + *
  • Nosso Número – Seqüência 2: 03 posições
  • + *
  • Constante 2: 01 posição
  • + *
  • Nosso Número – Seqüência 3: 09 posições
  • + *
+ *

+ * + * @return String com campos, exceto o dígito verificador. + * + * @since 0.2 + */ + private String gereCampoLivre() { + + return writeFields(); + } + + /** + * Este dígito é calculado através do Módulo 11 com os pesos 2 e 9. + * + * @param numeroParaCalculo + * @return digito + * + * @since 0.2 + */ + private int calculeDigitoVerificador(String numeroParaCalculo) { + + int soma = Modulo.calculeSomaSequencialMod11(numeroParaCalculo.toString(), 2, 9); + + int dvCampoLivre; + + if (soma < MOD11) { + + dvCampoLivre = MOD11 - soma; + + } else { + + int restoDiv11 = soma % MOD11; + + int subResto = MOD11 - restoDiv11; + + if (subResto > 9) { + + dvCampoLivre = 0; + + } else { + + dvCampoLivre = subResto; + } + } + + return dvCampoLivre; + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSINCO.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSINCO.java new file mode 100644 index 0000000..540ef4b --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSINCO.java @@ -0,0 +1,126 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:09:45 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:09:45 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * O campo livre para o modelo SINCO segue esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoConteúdo
011Número "1" (valor fixo)
02-076Código do cliente CEDENTE (fornecido pela CAIXA)
081Número "9" (valor fixo)
09-2517Posições livres do "nosso número"
+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +class CLCaixaEconomicaFederalSINCO extends AbstractCLCaixaEconomicaFederal { + + private static final long serialVersionUID = -7642075752245778160L; + + /** + * Quantidade de campos. Tamanho da lista de campos. + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco Caixa Econômica + * Federal que tenha o serviço SINCO. + *

+ * @param titulo Título com as informações para geração do campo livre. + */ + CLCaixaEconomicaFederalSINCO(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + + String nossoNumero = titulo.getNossoNumero(); + + this.add(new FixedField(1, 1)); + + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT)); + + this.add(new FixedField(9, 1)); + this.add(new FixedField(nossoNumero, 17)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCecred.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCecred.java new file mode 100644 index 0000000..78ba94a --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCecred.java @@ -0,0 +1,97 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.parametro.ParametroCECRED; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; + +/** + *

+ * O campo livre do CECRED - Cooperativa Central de Crédito Urbano deve seguir esta forma: + *

+ * + * TODO tabela com campos + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * + * @author Gilmar P.S.L + * @author Douglas Ramiro + * + * @since 0.2 + * + * @version 0.2 + */ +public class CLCecred extends AbstractCLBancoDeBrasilia{ + + /** + * + */ + private static final long serialVersionUID = 7075964070090557563L; + + /** + * Número de campos = 3. + */ + private static final Integer FIELDS_LENGTH = Integer.valueOf(3); + + /** + * Tamanho do campo Convênio = 6. + */ + private static final Integer CONVENIO_LENGTH = Integer.valueOf(6); + + /** + * Tamanho do campo Nosso Número = 17. + */ + private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(17); + + /** + * Tamanho do campo Carteira = 2. + */ + private static final Integer CARTEIRA_LENGTH = Integer.valueOf(2); + + /** + *

+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + *

+ * + * @since 0.2 + */ + protected CLCecred() { + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + * + * @since 0.2 + */ + @Override + protected void checkValues(Titulo titulo) { + + checkParametroBancario(titulo, ParametroCECRED.CODIGO_DO_CONVENIO); + checkParametroBancarioMenorOuIgualQue(titulo, ParametroCECRED.CODIGO_DO_CONVENIO, 999999); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, 17); + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + * + * @since 0.2 + */ + @Override + protected void addFields(Titulo titulo) { + + this.add(new FixedField(titulo.getParametrosBancarios().getValor(ParametroCECRED.CODIGO_DO_CONVENIO), CONVENIO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT)); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaNaoRegistrada.java new file mode 100644 index 0000000..672b904 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaNaoRegistrada.java @@ -0,0 +1,226 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:09:27 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:09:27 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroHSBC.IDENTIFICADOR_CNR; + +import java.util.Calendar; +import java.util.Date; + +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; + +/** + *

+ * O campo livre do HSBC, para cobrança não registrada(CNR), deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-2679(7) Conta do cedente (sem dígito)Código do cedente
27-39139(13) Nosso número (sem dígito) + * Número bancário - Código do documento, sem os dígitos + * verificadores e tipo identificador. + *
40-4349(4) Fator de vencimentoou Data do vencimento no formato juliano
44-4419(1) 2 FIXOCódigo do Aplicativo CNR = 2
+ * + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +class CLHSBCCobrancaNaoRegistrada extends AbstractCLHSBC { + + /** + * + */ + private static final long serialVersionUID = -1253549781074159862L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco HSBC que tenha + * o tipo de cobrança não registrada. + *

+ * + * @param titulo + * título com as informações para geração do campo livre + */ + CLHSBCCobrancaNaoRegistrada(Titulo titulo) { + + super(FIELDS_LENGTH); + + checkExistsParametrosBancarios(titulo); + checkExistsParametroTipoIdentificadorCNR(titulo + .getParametrosBancarios()); + + Integer tipoIdentificadorCNR = titulo + .getParametrosBancarios().getValor(IDENTIFICADOR_CNR); + + ContaBancaria conta = titulo.getContaBancaria(); + String nossoNumero = titulo.getNossoNumero(); + + // Conta do cedente (sem dígito) + this.add(new FixedField( + conta.getNumeroDaConta().getCodigoDaConta(), 7, + Fillers.ZERO_LEFT)); + + // Nosso número (sem dígito) + this.add(new FixedField(nossoNumero, 13, Fillers.ZERO_LEFT)); + + this.add(new FixedField(getDataVencimentoFormatoJuliano( + tipoIdentificadorCNR, titulo.getDataDoVencimento()), 4, + Fillers.ZERO_LEFT)); + + // 2 FIXO (Código do Aplicativo CNR - Cob. Não Registrada) + this.add(new FixedField(2, 1)); + + } + + private String getDataVencimentoFormatoJuliano(Integer tipoIdentificadorCNR, Date vencimento) { + + final int SEM_VENCIMENTO = 5; + final int COM_VENCIMENTO = 4; + + switch (tipoIdentificadorCNR) { + + case SEM_VENCIMENTO: + + return "0000"; + + case COM_VENCIMENTO: + + return getVencimentoFormatoJuliano(vencimento); + + default: + return Exceptions.throwIllegalStateException("Tipo de identificador CNR desconhecido!"); + } + } + + private String getVencimentoFormatoJuliano(Date vencimento) { + + Calendar c = Calendar.getInstance(); + c.setTime(vencimento); + + return new StringBuilder(String.valueOf(c.get(Calendar.DAY_OF_YEAR))) + .append(String.valueOf(c.get(Calendar.YEAR) % 10)) + .toString(); + } + + private void checkExistsParametrosBancarios(Titulo titulo) { + + if (Objects.isNull(titulo.getParametrosBancarios()) + && titulo.getParametrosBancarios().isVazio()) { + + throw new CampoLivreException( + "Parâmetros bancários nulos em \"Titulo.parametrosBancarios\". O parâmetro bancário de nome e tipo [ IDENTIFICADOR_CNR ] deve ser fornecido para este caso."); + + } + } + + private void checkExistsParametroTipoIdentificadorCNR(ParametrosBancariosMap parametros) { + + Integer tipoIdentificadorCNR = parametros + .getValor(IDENTIFICADOR_CNR); + + if (Objects.isNull(tipoIdentificadorCNR)) { + + throw new CampoLivreException( + "Parâmetro bancário [ IDENTIFICADOR_CNR ] não encontrado em \"Titulo.parametrosBancarios\". O nome do parâmetro deve ser IDENTIFICADOR_CNR."); + } + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaRegistrada.java new file mode 100644 index 0000000..6220e35 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaRegistrada.java @@ -0,0 +1,144 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/08/2010 - 22:33:26 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/08/2010 - 22:33:26 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * O campo livre do HSBC, para cobrança registrada(CSB), deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-30119(11) Nosso número com dígitoNúmero Bancário
31-3449(4) Código da Agência.Código da Agência.
35-4179(7) Conta Corrente.Conta de cobrança.
42-4329(2) Código da carteira="00"Código da carteira="00"
44-4429(2) Constante="1"Código do aplicativo da Cobrança (COB) = "1"
+ * + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +class CLHSBCCobrancaRegistrada extends AbstractCLHSBC{ + + /** + * + */ + private static final long serialVersionUID = -5052841093486791338L; + + private static final Integer FIELDS_LENGTH = 6; + + private static final String CODIGO_DA_CARTEIRA = "00"; + + private static final Integer CODIGO_DO_APLICATIVO = Integer.valueOf(1); + + /** + * *

+ * Dado um título, cria um campo livre para cobrança registrada do banco HSBC. + *

+ * + * @param titulo - título com as informações para geração do campo livre + */ + CLHSBCCobrancaRegistrada(Titulo titulo) { + + super(FIELDS_LENGTH); + + this.add(new FixedField(titulo.getNossoNumero(), 10, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getDigitoDoNossoNumero(), 1)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT)); + this.add(new FixedField(CODIGO_DA_CARTEIRA, 2)); + this.add(new FixedField(CODIGO_DO_APLICATIVO, 1)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauComCarteirasEspeciais.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauComCarteirasEspeciais.java new file mode 100644 index 0000000..66ad1f0 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauComCarteirasEspeciais.java @@ -0,0 +1,185 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/04/2008 - 23:09:08 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/04/2008 - 23:09:08 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + * Campo livre padrão do Banco Itaú + * + *

+ * Constrói o campo livre no caso especial, ou seja, quando a carteira for: + * 106, 107, 122, 142, 143, 195, 196 ou 198. + *

+ * + *

+ *

Layout do Banco Itaú para o campo livre ESPECIAL

+ *
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
PosiçãoTamanhoPictureConteúdo
20 a 2239(03)Carteira
23 a 3089(08)Nosso número
31 a 3779(07)Seu Número (Número do Documento)
38 a 4259(05)Código do Cliente (fornecido pelo Banco)
43 a 4319(01)DAC dos campos acima (posições 20 a 42 veja anexo 3)
44 a 4419(01)Zero
+ *
+ * 

+ * + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +class CLItauComCarteirasEspeciais extends AbstractCLItau { + + /** + * + */ + private static final long serialVersionUID = -1532454262023154419L; + + /** + * Tamanho do campo livre para carteiras especiais. + */ + private static final Integer FIELDS_LENGTH = 6; + + /** + * Dado um título, cria o campo livre do Banco Itaú para carteiras + * especiais. + * + * @param titulo + * título com as informações para geração do campo livre + */ + public CLItauComCarteirasEspeciais(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + + this.add(new FixedField(conta.getCarteira().getCodigo(), 3, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNossoNumero(), 8, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNumeroDoDocumento(), 7, Fillers.ZERO_LEFT)); + + //Aqui é o código do cedente, simbolizado pelo código da conta bancária. + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 5, Fillers.ZERO_LEFT)); + + this.add(new FixedField(calculeDigitoDoCampoLivreEspecial( + conta.getCarteira().getCodigo(), + titulo.getNossoNumero(), + titulo.getNumeroDoDocumento(), + conta.getNumeroDaConta().getCodigoDaConta()), 1)); + this.add(new FixedField(0, 1)); + } + + /** + * Calcula o dígito verificador para o campo livre especial a partir do + * código da carteira, do nosso número, do número do documento e do código + * da conta. + * + * @param codigoDaCarteira + * @param nossoNumero + * @param numeroDoDocumento + * @param codigoDaConta + * @return Integer digito + * + * @since 0.2 + */ + private Integer calculeDigitoDoCampoLivreEspecial(Integer codigoDaCarteira, + String nossoNumero, String numeroDoDocumento, Integer codigoDaConta) { + + StringBuilder campo = new StringBuilder(); + + campo.append(Fillers.ZERO_LEFT.fill(codigoDaCarteira.intValue(), 3)); + campo.append(Fillers.ZERO_LEFT.fill(nossoNumero, 8)); + campo.append(Fillers.ZERO_LEFT.fill(numeroDoDocumento, 7)); + campo.append(Fillers.ZERO_LEFT.fill(codigoDaConta, 5)); + + return calculeDigitoVerificador(campo.toString()); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauPadrao.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauPadrao.java new file mode 100644 index 0000000..03ef346 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauPadrao.java @@ -0,0 +1,297 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/04/2008 - 23:09:08 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/04/2008 - 23:09:08 + * + */ + +package org.jrimum.bopepo.campolivre; + +import java.util.Arrays; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + * + * + *

+ * Campo livre padrão do Banco Itaú + *

+ * + *

+ *

Layout do Banco Itaú para o campo livre PADRÃO

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo
20 a 2239(03)Carteira
23 a 3089(08)Nosso número
31 a 3119(01)DAC [Agência /Conta/Carteira/Nosso Número]
32 a 3549(04)N.º da Agência cedente
36 a 4059(05)N.º da Conta Corrente
41 a 4119(01)DAC [Agência/Conta Corrente]
42 a 4439(03)Zeros
+ *

+ * + * @author Rômulo Augusto + * @author Misael Barreto + * @author Fernando Martin + * + * @since 0.2 + * + * @version 0.2 + */ +class CLItauPadrao extends AbstractCLItau { + + /** + * + */ + private static final long serialVersionUID = 1544486299245786533L; + + /** + * Tamanho deste campo. Em outras palavras, é a quantidade de partes que + * compõem este campo livre. + */ + private static final Integer FIELDS_LENGTH = 7; + + /** + *

+ * Dado um título, cria o campo livre padrão do Banco Itaú. + *

+ * @param titulo título com as informações para geração do campo livre + */ + public CLItauPadrao(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + + this.add(new FixedField(conta.getCarteira().getCodigo(), 3, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getNossoNumero(), 8, Fillers.ZERO_LEFT)); + + this.add(new FixedField(calculeDigitoDaPosicao31( + conta.getAgencia().getCodigo(), + conta.getNumeroDaConta().getCodigoDaConta(), + conta.getCarteira().getCodigo(), + titulo.getNossoNumero()), 1)); + + this.add(new FixedField(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 5, Fillers.ZERO_LEFT)); + + this.add(new FixedField(calculeDigitoDaPosicao41( + conta.getAgencia().getCodigo(), + conta.getNumeroDaConta().getCodigoDaConta()), 1)); + + this.add(new FixedField("000", 3)); + } + + /** + *

+ * Calcula o dígito verificador do campo 31 a partir do código da agência, + * do código da conta, do código da carteira e do nosso número. + *

+ *

+ * À exceção, estão as carteiras escriturais 104, 105, 112, 113, 114, 147, + * 166 e 212 e na modalidade direta as carteiras 126, 131, 146, 150 + * e 168, cuja obtenção está baseada apenas nos dados "CARTEIRA/NOSSO NÚMERO" + * da operação. Fonte: + * Manual ITAÚ, mais especificamente nas páginas 19 e 30. + *

+ *

+ * Exemplo do cálculo: + *
+ *

+	 * AG / CONTA = 0057 / 12345-7 CART / NNº = 110 / 12345678-?
+	 * 
+	 * Sequência para Cálculo 	0 0 5 7 1 2 3 4 5 1 1 0 1 2 3 4 5 6 7 8
+	 * Módulo 10 		1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
+	 * 			| | | | | | | | | | | | | | | | | | | |___________8 x 2 = 16 (1+6)
+	 * 			| | | | | | | | | | | | | | | | | | | ____________7 x 1 = 7
+	 *			| | | | | | | | | | | | | | | | | | ______________6 x 2 = 12 (1+2)
+	 * 			| | | | | | | | | | | | | | | | | ________________5 x 1 = 5
+	 * 			| | | | | | | | | | | | | | | | | ________________4 x 2 = 8
+	 *			| | | | | | | | | | | | | | | ____________________3 x 1 = 3
+	 * 			| | | | | | | | | | | | | | ______________________2 x 2 = 4
+	 * 			| | | | | | | | | | | | | ________________________1 x 1 = 1
+	 * 			| | | | | | | | | | | | __________________________0 x 2 = 0
+	 * 			| | | | | | | | | | | ____________________________1 x 1 = 1
+	 * 			| | | | | | | | | | ______________________________1 x 2 = 2
+	 * 			| | | | | | | | | ________________________________5 x 1 = 5
+	 * 			| | | | | | | | __________________________________4 x 2 = 8
+	 * 			| | | | | | | ____________________________________3 x 1 = 3
+	 * 			| | | | | | ______________________________________2 x 2 = 4
+	 * 			| | | | | ________________________________________1 x 1 = 1
+	 * 			| | | | __________________________________________7 x 2 = 14 (1+4)
+	 * 			| | | ____________________________________________5 x 1 = 5
+	 * 			| | ______________________________________________0 x 2 = 0
+	 * 			| ________________________________________________0 x 1 = 0
+	 * 
+	 * Total 								            72
+	 * 
+	 * Dividir o resultado da soma por 10 => 72 / 10 = 7, resto = 2
+	 *  
+	 * DAC = 10 - 2 = 8
+	 * Portanto DAC = 8
+	 * 
+ *

+ * + * @param codigoDaAgencia + * @param codigoDaConta + * @param codigoDaCarteira + * @param nossoNumero + * @return Integer dígito + * + * @since 0.2 + */ + private Integer calculeDigitoDaPosicao31(Integer codigoDaAgencia, + Integer codigoDaConta, Integer codigoDaCarteira, String nossoNumero) { + + // Carteiras "exceção". + Integer[] carteirasEscriturais = {104, 105, 112, 113, 114, 147, 166, 212}; + Integer[] carteirasModalidadeDireta = {126, 131, 146, 150, 168}; + + StringBuilder campo = new StringBuilder(); + campo.append(Fillers.ZERO_LEFT.fill(codigoDaCarteira.intValue(), 3)); + campo.append(Fillers.ZERO_LEFT.fill(nossoNumero, 8)); + + /* + * Se a carteira em questão não estiver nas lista de exceções então + * acrescenta-se a agência e a conta para compor a base para o cálculo + * do DAC. + */ + if (Arrays.binarySearch(carteirasModalidadeDireta, codigoDaCarteira) < 0 + && Arrays.binarySearch(carteirasEscriturais, codigoDaCarteira) < 0) { + + campo.insert(0, Fillers.ZERO_LEFT.fill(codigoDaConta.intValue(), 5)); + campo.insert(0, Fillers.ZERO_LEFT.fill(codigoDaAgencia.intValue(), 4)); + } + + return calculeDigitoVerificador(campo.toString()); + } + + /** + *

+ * Calcula o dígito verificador do campo 41 a partir do código da agência e + * do código da conta. + *

+ *

+ * O cálculo é feito da seguinte forma:
+ *

    + *
  1. + * Multiplica-se cada algarismo do campo pela sequência de multiplicadores + * 2, 1, 2, 1, 2, 1..., posicionados da direita para a esquerda; + *
  2. + *
  3. + * Some individualmente, os algarismos dos resultados dos produtos, obtendo-se o total (N); + *
  4. + *
  5. + * Divida o total encontrado (N) por 10, e determine o resto da divisão como MOD 10 (N); + *
  6. + *
  7. + * Encontre o DAC através da seguinte expressão: DAC = 10 – Mod 10 (N) + *
    + * OBS.: Se o resultado da etapa d for 10, considere o DAC = 0. + *
  8. + *
+ * + *

+ * + * @param codigoDaAgencia + * @param codigoDaConta + * @return Integer digito + * + * @since 0.2 + */ + private Integer calculeDigitoDaPosicao41(Integer codigoDaAgencia, + Integer codigoDaConta) { + + StringBuilder campo = new StringBuilder(); + campo.append(Fillers.ZERO_LEFT.fill(codigoDaAgencia.intValue(), 4)); + campo.append(Fillers.ZERO_LEFT.fill(codigoDaConta.intValue(), 5)); + + return calculeDigitoVerificador(campo.toString()); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} + diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLMercantilDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLMercantilDoBrasil.java new file mode 100644 index 0000000..7965d6e --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLMercantilDoBrasil.java @@ -0,0 +1,167 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 25/09/2008 - 21:23:20 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2008 - 21:23:20 + * + */ +package org.jrimum.bopepo.campolivre; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; + +/** + * + *

+ * Campo Livre para o Banco Mercantil do Brasil. Segue o seguinte formato: + *
+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Posição TamanhoPictureConteúdo
20-2349Agência do Cedente(sem dígito)
24-34119Nosso Número (com dígito)
35-4399Código do Cedente (Contrato de Cobrança)
44-4419Indicador de desconto:
=2 sem desconto
=0 com desconto
+ *

+ * + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +class CLMercantilDoBrasil extends AbstractCLMercantilDoBrasil { + + /** + * + */ + private static final long serialVersionUID = 2335934898236961987L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 4; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco Mercantil do Brasil. + *

+ * @param titulo título com as informações para geração do campo livre + */ + CLMercantilDoBrasil(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria contaBancaria = titulo.getContaBancaria(); + +// int digitoDoNossoNumero = calculeDigitoVerificadorDoNossoNumero(contaBancaria.getAgencia().getCodigoDaAgencia(), nossoNumero); + + //TODO Verificar de onde virá esta informação: apenas verificar se o título tem ou não valor de desconto. + int desconto; + if(titulo.getDesconto() == null || titulo.getDesconto().equals(BigDecimal.ZERO.setScale(2, RoundingMode.DOWN))) { + desconto = 2; + + } else { + desconto = 0; + } + + this.add(new FixedField(contaBancaria.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + + this.add(new FixedField(titulo.getNossoNumero() + titulo.getDigitoDoNossoNumero(), 11, Fillers.ZERO_LEFT)); + + this.add(new FixedField(contaBancaria.getNumeroDaConta().getCodigoDaConta(), 9, Fillers.ZERO_LEFT)); + + this.add(new FixedField(desconto, 1)); + } + +// /** +// * +// *

+// * Calcula o dígito verificador do Nosso Número. +// *

+// *

+// * É calculado através do módulo 11 a partir do código da agência e do Nosso Número. +// *

+// * +// * @param agencia Código da agência +// * @param nossoNumero Nosso Número +// * @return digito verificador +// * +// * @since 0.2 +// */ +// private int calculeDigitoVerificadorDoNossoNumero(Integer agencia, String nossoNumero) { +// +// Modulo modulo = new Modulo(EnumModulo.MODULO11); +// int resto = modulo.calcule(Fillers.ZERO_LEFT.fill(agencia, 4) + nossoNumero); +// +// int digito = modulo.valor() - resto; +// +// return digito; +// } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLSicredi.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLSicredi.java new file mode 100644 index 0000000..7622b9e --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLSicredi.java @@ -0,0 +1,276 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 15/01/2010 - 20:40:59 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 15/01/2010 - 20:40:59 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static java.lang.String.format; +import static java.math.BigDecimal.ZERO; +import static org.jrimum.bopepo.parametro.ParametroBancoSicredi.POSTO_DA_AGENCIA; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Objects; +import org.jrimum.vallia.digitoverificador.Modulo; +import org.jrimum.vallia.digitoverificador.TipoDeModulo; + +/** + *

+ * O campo livre do banco Sicredi deve seguir esta forma: + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-201tipo de cobrança: "1" ou "3"Código numérico correspondente ao tipo de cobrança: "1"- Com Registro ou "3"- Sem Registro
21-211Constante correspondente ao tipo de carteira: "1"- carteira simples. Embora no código fonte do manual mencione outras duas possibilidades "2"-Caucionada ou "3"-Descontada.Código númerico correspondente ao tipo de carteira: "1" - carteira simples
22-298Nosso Número (8)Nosso Número
30-301DV do Nosso Número (1)Dígito Verificador do Nosso Número
31-344Cooperativa de crédito / agência cedenteCooperativa de crédito / agência cedente
35-362Unidade de atendimento / posto da agênica cedenteUnidade de atendimento / posto da agênica cedente
37-415Código do CedenteCódigo do Cedente
42-421Filler: 1 (um) quando o campo "valor do documento" diferente de 0 (zero), caso contrário zero.1 (um) quando o campo "valor do documento" diferente de 0 (zero), caso contrário zero.
43-431Constante "0"- ZeroZero Fixo
44-441Dígito verificador do campo livre calculado por módulo 11 com aproveitamento total (resto igual a (0) zero ou (1) um o Dígito será (0) zero)Dígito verificador do campo livre calculado por módulo 11 com aproveitamento total (resto igual a (0) zero ou (1) um o Dígito será (0) zero)
+ * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre + * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +class CLSicredi extends AbstractCLSicredi { + + /** + * {@code serialVersionUID = 7697120719706717353L} + */ + private static final long serialVersionUID = 7697120719706717353L; + + /** + * Número de campos = 10. + */ + private static final Integer FIELDS_LENGTH = 10; + + /** + * Código númerico correspondente ao tipo de cobrança: "1" - Com Registro. + */ + private static final String COBRANCA_COM_REGISTRO = "1"; + + /** + * Código númerico correspondente ao tipo de cobrança: "3" - Sem Registro. + */ + private static final String COBRANCA_SEM_REGISTRO = "3"; + + /** + * Valor constante do campo "Tipo da Carteira": "1" - carteira simples. + */ + private static final Integer CARTEIRA_SIMPLES_VALUE = Integer.valueOf(1); + + /** + * Segunda posição do campo livre. + */ + private static final FixedField FIELD_CARTEIRA = new FixedField(CARTEIRA_SIMPLES_VALUE, 1); + + /** + * Instância de módulo 11 para cálculo do DV do campo livre. + */ + private static final Modulo modulo11 = new Modulo(TipoDeModulo.MODULO11); + + /** + * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo. + * + * @since 0.2 + */ + protected CLSicredi() { + + super(FIELDS_LENGTH); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void checkValues(Titulo titulo){ + + checkCarteiraNotNull(titulo); + checkCodigoDaCarteira(titulo); + checkCarteiraSimples(titulo); + checkRegistroDaCarteiraNotNull(titulo); + checkNossoNumero(titulo); + checkTamanhoDoNossoNumero(titulo, NN8); + checkDigitoDoNossoNumero(titulo); + checkTamanhoDigitoDoNossoNumero(titulo, 1); + checkCodigoDaAgencia(titulo); + checkCodigoDaAgenciaMenorOuIgualQue(titulo, 99999); + checkParametroBancario(titulo, POSTO_DA_AGENCIA); + checkNumeroDaContaNotNull(titulo); + checkCodigoDoNumeroDaConta(titulo); + checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 99999); + checkValor(titulo); + } + + /** + * {@inheritDoc} + * + * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo) + */ + @Override + protected void addFields(Titulo titulo) { + + if(titulo.getContaBancaria().getCarteira().isComRegistro()){ + + this.add(new FixedField(COBRANCA_COM_REGISTRO, 1)); + + }else{ + + this.add(new FixedField(COBRANCA_SEM_REGISTRO, 1)); + } + + this.add(FIELD_CARTEIRA); + this.add(new FixedField(titulo.getNossoNumero(), 8, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getDigitoDoNossoNumero(), 1, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getParametrosBancarios().getValor(POSTO_DA_AGENCIA), 2, Fillers.ZERO_LEFT)); + this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 5, Fillers.ZERO_LEFT)); + + if (titulo.getValor().compareTo(ZERO) == 1) { + + this.add(new FixedField("1", 1)); + + } else { + + this.add(new FixedField("0", 1)); + } + + this.add(new FixedField("0", 1)); + this.add(new FixedField(calculeDigitoVerificador(), 1)); + } + + /** + * Verifica se o código da carteira da conta bancária do título é igual 1 + * (carteira simples), caso contrário lança uma {@code + * IllegalArgumentException}. + * + * @param titulo + */ + private void checkCarteiraSimples(Titulo titulo) { + + Objects.checkArgument( + titulo.getContaBancaria().getCarteira().getCodigo().equals(CARTEIRA_SIMPLES_VALUE), + format("Apenas a carteira de código [1] \"carteira simples\" é permitida e não o código [%s]!", titulo.getContaBancaria().getCarteira().getCodigo()) + ); + } + + /** + * Calcula o dígito verificador deste campo livre (posição 25 do campo livre + * 44 do código de barras) com módulo 11 a partir das 24 posições deste + * campo livre. + * + * @return dígito verificador + * + * @since 0.2 + */ + private Integer calculeDigitoVerificador() { + + final int resto = modulo11.calcule(writeFields()); + + if (resto == 0 || resto == 1) { + + return Integer.valueOf(0); + + } else{ + + return Integer.valueOf(modulo11.valor() - resto); + } + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaNaoRegistrada.java new file mode 100644 index 0000000..c4d1c08 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaNaoRegistrada.java @@ -0,0 +1,161 @@ +package org.jrimum.bopepo.campolivre; + +import org.apache.commons.lang.StringUtils; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +/** + * + *

+ * Representação do campo livre usado para boletos com carteiras (cobrança) + * sem registro. + *

+ * + *

+ * Layout:
+ *

+ *

+ * Cobrança Especial (sem registro) + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoCampo Livre No Código De + * Barras (20 a 44)
20Código da transação = 5
21 a 26Número do Cliente (Espécie de conta)
27Dígito Verificador do Número do Cliente
28 a 29zeros
30 a 43Referência do Cliente (Nosso Número Gerado Pelo + * Cliente)
44Dígito Verificador da Referência do Cliente
+ *

+ * + * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ + +class CLUnibancoCobrancaNaoRegistrada extends AbstractCLUnibanco { + + /** + * + */ + private static final long serialVersionUID = 487906631678160993L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 6; + + private static final Integer CODIGO_TRANSACAO = 5; + + private static final Integer RESERVADO = 0; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco Unibanco + * que tenha o tipo de cobrança não registrada. + *

+ * @param titulo título com as informações para geração do campo livre + */ + CLUnibancoCobrancaNaoRegistrada(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + + Objects.checkNotNull(conta,"Conta Bancária NULA!"); + Objects.checkNotNull(conta.getNumeroDaConta(),"Número da Conta Bancária NULO!"); + Objects.checkNotNull(conta.getNumeroDaConta().getCodigoDaConta(),"Código da Conta Bancária NULO!"); + Objects.checkNotNull(conta.getNumeroDaConta().getDigitoDaConta(),"Dígito da Conta Bancária NULO!"); + Objects.checkNotNull(titulo.getNossoNumero(),"Nosso Número NULO!"); + + this.add(new FixedField(CODIGO_TRANSACAO, 1)); + + if(conta.getNumeroDaConta().getCodigoDaConta() > 0){ + + this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT)); + + }else{ + throw new CampoLivreException(new IllegalArgumentException("Conta bancária com valor inválido, a conta deve ser um número inteiro positivo, e não: "+conta.getNumeroDaConta().getCodigoDaConta())); + } + + if(StringUtils.isNumeric(conta.getNumeroDaConta().getDigitoDaConta())){ + + Integer digitoDaConta = Integer.valueOf(conta.getNumeroDaConta().getDigitoDaConta()); + + if(digitoDaConta >= 0){ + + this.add(new FixedField(Integer.valueOf(digitoDaConta), 1)); + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O dígito da conta deve ser um número inteiro não-negativo, e não: ["+conta.getNumeroDaConta().getDigitoDaConta()+"]")); + } + + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O dígito da conta deve ser numérico, e não: ["+conta.getNumeroDaConta().getDigitoDaConta()+"]")); + } + + this.add(new FixedField(RESERVADO, 2, Fillers.ZERO_LEFT)); + + if(StringUtils.isNumeric(titulo.getNossoNumero())){ + + if(Long.valueOf(Strings.removeStartWithZeros(titulo.getNossoNumero()))>0){ + + this.add(new FixedField(titulo.getNossoNumero(), 14,Fillers.ZERO_LEFT)); + + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser um número inteiro positivo, e não: ["+titulo.getNossoNumero()+"]")); + } + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser numérico, e não: ["+titulo.getNossoNumero()+"]")); + } + + this.add(new FixedField(calculeDigitoEmModulo11(titulo.getNossoNumero()), 1)); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaRegistrada.java new file mode 100644 index 0000000..9fb87c8 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaRegistrada.java @@ -0,0 +1,192 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.utilix.text.DateFormat.YYMMDD; + +import java.util.Date; + +import org.apache.commons.lang.StringUtils; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +/** + * + *

+ * Representação do campo livre usado para boletos com carteiras (cobrança) + * com registro. + *

+ * + *

+ * Layout:
+ *

+ *

+ * Cobrança Direta (com registro) + *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
PosiçãoCampo Livre No Código De + * Barras (20 a 44)
20 a 21Código da transação = 04
22 a 27Data do Vencimento do Título (AAMMDD)
28 a 31Agência do Cedente
32Dígito Verificador da Agência do Cedente
33 a 43Nosso Número
44Super Digito do Nosso Número (*)
+ *

+ * + * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ + +class CLUnibancoCobrancaRegistrada extends AbstractCLUnibanco { + + /** + * + */ + private static final long serialVersionUID = -2740172688796212239L; + + /** + * + */ + private static final Integer FIELDS_LENGTH = 6; + + private static final String CODIGO_TRANSACAO = "04"; + + /** + *

+ * Dado um título, cria um campo livre para o padrão do Banco Unibanco + * que tenha o tipo de cobrança registrada. + *

+ * @param titulo título com as informações para geração do campo livre + */ + CLUnibancoCobrancaRegistrada(Titulo titulo) { + super(FIELDS_LENGTH); + + ContaBancaria conta = titulo.getContaBancaria(); + + Objects.checkNotNull(conta,"Conta Bancária NULA!"); + Objects.checkNotNull(titulo.getDataDoVencimento(), "Data de vencimento do título NULA!"); + Objects.checkNotNull(conta.getAgencia().getCodigo(), "Número da Agência Bancária NULO!"); + Objects.checkNotNull(conta.getAgencia().getDigitoVerificador(),"Dígito da Agência Bancária NULO!"); + Objects.checkNotNull(titulo.getNossoNumero(),"Nosso Número NULO!"); + + this.add(new FixedField(CODIGO_TRANSACAO, 2)); + this.add(new FixedField(titulo.getDataDoVencimento(), 6, YYMMDD.copy())); + + if(conta.getAgencia().getCodigo() > 0){ + + this.add(new FixedField(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT)); + + }else{ + + throw new CampoLivreException(new IllegalArgumentException("Agência bancária com valor inválido, a agência deve ser um número inteiro positivo, e não: "+conta.getNumeroDaConta().getCodigoDaConta())); + } + + + if (StringUtils.isNumeric(conta.getAgencia().getDigitoVerificador())) { + + Integer digitoDaAgencia = Integer.valueOf(conta.getAgencia().getDigitoVerificador()); + + if(digitoDaAgencia>=0){ + + this.add(new FixedField(Integer.valueOf(digitoDaAgencia), 1)); + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O dígito da agência deve ser um número interio não-negativo, e não: ["+conta.getAgencia().getDigitoVerificador()+"]")); + } + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O dígito da agência deve ser numérico, e não: ["+conta.getAgencia().getDigitoVerificador()+"]")); + } + + if(StringUtils.isNumeric(titulo.getNossoNumero())){ + + if(Long.valueOf(Strings.removeStartWithZeros(titulo.getNossoNumero()))>0){ + + this.add(new FixedField(titulo.getNossoNumero(), 11,Fillers.ZERO_LEFT)); + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser um número natural positivo, e não: ["+titulo.getNossoNumero()+"]")); + } + }else{ + + throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser numérico, e não: ["+titulo.getNossoNumero()+"]")); + } + + this.add(new FixedField(calculeSuperDigito(titulo.getNossoNumero()), 1)); + } + + /** + *

+ * Calcula o Super Dígito do Nosso Número. + *

+ * + *

+ * Super dígito do “Nosso Número” [calculado com o MÓDULO 11 (de 2 a 9)] + * obtido utilizando-se os algarismos do “Nosso Número” acrescido do número + * 1 à esquerda = [1/NNNNNNNNNNN] e multiplicando-se a sequência obetem-se a + * soma dos produtos. Em seguida multiplicando-se novamente a soma por 10 e + * depois realizando-se o módulo 11. + *

+ * + * + * @param nossoNumero + * + * @return Dígito verficador calculado + * + * @see #calculeDigitoEmModulo11(String) + * @see org.jrimum.vallia.digitoverificador.Modulo + * + * @since 0.2 + */ + private String calculeSuperDigito(String nossoNumero) { + + return calculeDigitoEmModulo11("1" + nossoNumero); + } + + @Override + protected void addFields(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } + + @Override + protected void checkValues(Titulo titulo) { + // TODO IMPLEMENTAR + Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivre.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivre.java new file mode 100644 index 0000000..53f6b34 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivre.java @@ -0,0 +1,57 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:10:11 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:10:11 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.texgit.TextStream; + + +/** + *

+ * Essa é uma Interace com um propósito de marcar e agrupar tipos campo livre. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @see AbstractCampoLivre + * + * @since 0.2 + * + * @version 0.2 + */ +public interface CampoLivre extends TextStream{ + + /** + * Tamanho do Campo Livre, igual para qualquer que seja o banco. + */ + Integer STRING_LENGTH = 25; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreException.java new file mode 100644 index 0000000..6dc6b9d --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreException.java @@ -0,0 +1,85 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 21:14:40 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 21:14:40 + * + */ + +package org.jrimum.bopepo.campolivre; + +/** + *

+ * Qualquer exceção gerada durante a geração de um campo livre gera uma CampoLivreException. Centraliza e localiza os problemas relativos a geração de um campo livre. + *

+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @see org.jrimum.bopepo.campolivre.CampoLivre + * + * @since 0.2 + * + * @version 0.2 + */ +public class CampoLivreException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = 893327780214327141L; + + /** + * + */ + public CampoLivreException() { + super(); + } + + /** + * @param message + * @param cause + */ + public CampoLivreException(String message, Throwable cause) { + super(message, cause); + } + + /** + * @param message + */ + public CampoLivreException(String message) { + super(message); + } + + /** + * @param cause + */ + public CampoLivreException(Throwable cause) { + super(cause); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreFactory.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreFactory.java new file mode 100644 index 0000000..53b77f1 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreFactory.java @@ -0,0 +1,134 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:09:58 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:09:58 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.containsAny; +import static org.apache.commons.lang.StringUtils.isNumeric; +import static org.apache.commons.lang.StringUtils.strip; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.texgit.type.component.Fillers; +import org.jrimum.texgit.type.component.FixedField; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + + +/** + *

+ * Esta classe tem como finalidade encapsular toda a lógica de criação de um + * campo livre e de fornecer para o pacote + * org.jrimum.bopepo.campolivre + * um único ponto de acesso ao mesmo. + *

+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public final class CampoLivreFactory { + + /** + *

+ * Devolve um CampoLivre de acordo com o Banco contido na conta bancária do título. + *

+ *

+ * Caso exista implementação para o banco o retorno terá uma referência não nula. + *

+ * + * @param titulo + * + * @return Uma referência para um CampoLivre. + * @throws NotSupportedBancoException + * @throws NotSupportedCampoLivreException + */ + public static CampoLivre create(Titulo titulo) throws NotSupportedBancoException, NotSupportedCampoLivreException { + + return AbstractCampoLivre.create(titulo); + } + + /** + * Devolve um CampoLivre a partir de uma String. + * + * @param strCampoLivre + * + * @return Referência para uma instância anônima de CampoLivre. + * + * @throws NullPointerException + * @throws IllegalArgumentException + */ + public static CampoLivre create(String strCampoLivre) { + Objects.checkNotNull(strCampoLivre); + + strCampoLivre = strip(strCampoLivre); + + Strings.checkNotBlank(strCampoLivre, "O Campo Livre não deve ser vazio!"); + + Objects.checkArgument(strCampoLivre.length() == CampoLivre.STRING_LENGTH, "O tamanho do Campo Livre [ " + strCampoLivre + " ] deve ser igual a 25 e não ["+strCampoLivre.length()+"]!"); + Objects.checkArgument(!containsAny(strCampoLivre, " "), "O Campo Livre [ " + strCampoLivre + " ] não deve conter espaços em branco!"); + Objects.checkArgument(isNumeric(strCampoLivre),"O Campo Livre [ " + strCampoLivre + " ] deve ser uma String numérica!"); + + return valueOf(strCampoLivre); + } + + private static CampoLivre valueOf(String strCampoLivre) { + CampoLivre campoLivre = new CampoLivre() { + private static final long serialVersionUID = -7592488081807235080L; + + FixedField campo = new FixedField(EMPTY, + STRING_LENGTH, Fillers.ZERO_LEFT); + + public void read(String str) { + campo.read(str); + } + + public String write() { + return campo.write(); + } + }; + campoLivre.read(strCampoLivre); + return campoLivre; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return Objects.toString(this); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedBancoException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedBancoException.java new file mode 100644 index 0000000..456a0fa --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedBancoException.java @@ -0,0 +1,92 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:10:19 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:10:19 + * + */ + + +package org.jrimum.bopepo.campolivre; + + +/** + *

+ * Exceção indicadora de não existência de um referido banco ou problemas com dados de um banco. + *

+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class NotSupportedBancoException extends CampoLivreException { + + /** + * + */ + private static final long serialVersionUID = 1L; + + private static String msg = "Banco não suportado por não haver " + + "implementações de Campo Livre para " + + "o mesmo."; + + + /** + * + */ + public NotSupportedBancoException() { + super(msg); + } + + /** + * @param message + * @param cause + */ + @SuppressWarnings("unused") + private NotSupportedBancoException(String message, Throwable cause) { + super(message, cause); + } + + /** + * @param message + */ + @SuppressWarnings("unused") + private NotSupportedBancoException(String message) { + super(message); + } + + /** + * @param cause + */ + @SuppressWarnings("unused") + private NotSupportedBancoException(Throwable cause) { + super(msg, cause); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedCampoLivreException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedCampoLivreException.java new file mode 100644 index 0000000..61dc5b4 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedCampoLivreException.java @@ -0,0 +1,87 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:10:27 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:10:27 + * + */ + + +package org.jrimum.bopepo.campolivre; + + +/** + * + *

+ * Exceção indicadora de não existência de um campolivre para os dados correntes de um boleto. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class NotSupportedCampoLivreException extends CampoLivreException { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * + */ + public NotSupportedCampoLivreException() { + super(); + } + + /** + * @param message + * @param cause + */ + public NotSupportedCampoLivreException(String message, Throwable cause) { + super(message, cause); + + } + + /** + * @param message + */ + public NotSupportedCampoLivreException(String message) { + super(message); + + } + + /** + * @param cause + */ + public NotSupportedCampoLivreException(Throwable cause) { + super(cause); + + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/package-info.java new file mode 100644 index 0000000..2dfc108 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/package-info.java @@ -0,0 +1,35 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/08/2010 - 20:50:14 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/08/2010 - 20:50:14 + * + */ + +/** + * Fábricas de campos livres para os bancos suportados. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.campolivre; \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/package-info.java new file mode 100644 index 0000000..f53fae0 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/package-info.java @@ -0,0 +1,36 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/08/2010 - 20:50:14 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/08/2010 - 20:50:14 + * + */ + +/** + * Classes e utilitários responsáveis pela geração de boletos e derivados como: + * {@link org.jrimum.bopepo.Boleto}, {@link org.jrimum.bopepo.BancosSuportados}, {@link org.jrimum.bopepo.CodigoDeBarras}, {@link org.jrimum.bopepo.LinhaDigitavel}, {@link org.jrimum.bopepo.BoletoUtil}, etc. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo; \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoDeBrasilia.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoDeBrasilia.java new file mode 100644 index 0000000..929e813 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoDeBrasilia.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/09/2013 - 12:11:51 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2013 - 12:11:51 + * + */ + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#BANCO_DE_BRASILIA}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroBancoDeBrasilia implements + ParametroBancario { + CHAVE_ASBACE_DIGITO1, CHAVE_ASBACE_DIGITO2; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoRural.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoRural.java new file mode 100644 index 0000000..9228a35 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoRural.java @@ -0,0 +1,50 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/09/2013 - 12:11:51 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2013 - 12:11:51 + * + */ + + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#BANCO_RURAL}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroBancoRural implements ParametroBancario{ + CODIGO_REDUZIDO, + VALOR_IOS; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSantander.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSantander.java new file mode 100644 index 0000000..f1b94d1 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSantander.java @@ -0,0 +1,54 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/09/2013 - 12:11:51 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2013 - 12:11:51 + * + */ + + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#BANCO_SANTANDER}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroBancoSantander implements ParametroBancario{ + /** + * Chave de pesquisa em parâmetros bancários para saber se o boelto deve + * usar IOF – Seguradoras: (Se 7% informar 7. Limitado a 9%); Demais + * clientes usar 0 (zero). + */ + IOF_SEGURADORA; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSicredi.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSicredi.java new file mode 100644 index 0000000..c94742c --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoSicredi.java @@ -0,0 +1,52 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/09/2013 - 12:11:51 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2013 - 12:11:51 + * + */ + + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#BANCO_SICREDI}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroBancoSicredi implements ParametroBancario{ + /** + * Nome do parâmetro bancário contendo o valor do posto da agência SICREDI. + */ + POSTO_DA_AGENCIA; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoob.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoob.java new file mode 100644 index 0000000..0c6391e --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoob.java @@ -0,0 +1,50 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/09/2013 - 12:11:51 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2013 - 12:11:51 + * + */ + + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#BANCOOB}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroBancoob implements ParametroBancario{ + MODALIDADE_DE_COBRANCA, + NUMERO_DA_PARCELA; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroCECRED.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroCECRED.java new file mode 100644 index 0000000..70884b3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroCECRED.java @@ -0,0 +1,47 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/01/2014 - 13:57:10 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/01/2014 - 13:57:10 + * + */ + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + +/** + * Parâmetros bancários específicos para o {@link BancosSuportados#CECRED}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroCECRED implements ParametroBancario { + CODIGO_DO_CONVENIO; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroCaixaEconomicaFederal.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroCaixaEconomicaFederal.java new file mode 100644 index 0000000..04e0e5e --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroCaixaEconomicaFederal.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/09/2013 - 12:11:51 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2013 - 12:11:51 + * + */ + + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#CAIXA_ECONOMICA_FEDERAL}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroCaixaEconomicaFederal implements ParametroBancario{ + CODIGO_OPERACAO; +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroHSBC.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroHSBC.java new file mode 100644 index 0000000..883e787 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroHSBC.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/09/2013 - 12:11:51 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2013 - 12:11:51 + * + */ + + +package org.jrimum.bopepo.parametro; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametroBancario; + + +/** + * Parâmetros bancários específicos para o + * {@link BancosSuportados#HSBC}. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public enum ParametroHSBC implements ParametroBancario{ + IDENTIFICADOR_CNR +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/package-info.java new file mode 100644 index 0000000..9863edc --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/package-info.java @@ -0,0 +1,37 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 06/10/2013 - 18:15:40 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 06/10/2013 - 18:15:40 + * + */ + +/** + * Classes e utilitários responsáveis pela geração de boletos e derivados como: + * {@link org.jrimum.bopepo.Boleto}, {@link org.jrimum.bopepo.BancosSuportados}, {@link org.jrimum.bopepo.CodigoDeBarras}, {@link org.jrimum.bopepo.LinhaDigitavel}, {@link org.jrimum.bopepo.BoletoUtil}, etc. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.parametro; \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/CodigoDeBarras.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/CodigoDeBarras.java new file mode 100644 index 0000000..db491c3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/CodigoDeBarras.java @@ -0,0 +1,110 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/04/2011 - 14:49:07 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/04/2011 - 14:49:07 + * + */ + +package org.jrimum.bopepo.pdf; + +import static java.lang.String.format; + +import java.awt.Color; +import java.awt.Image; + +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +import com.lowagie.text.pdf.BarcodeInter25; + + +/** + * Classe geradora de código de barras no padrão FEBRABAN. + * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class CodigoDeBarras { + + private String codigo; + + /** + * Classe não instanciável + * + * @throws IllegalStateException + * Caso haja alguma tentativa de utilização deste construtor. + * + * @since 0.2 + */ + @SuppressWarnings("unused") + private CodigoDeBarras() { + + Exceptions.throwIllegalStateException("Instanciação não permitida!"); + } + + public CodigoDeBarras(String codigo){ + + checkCodigo(codigo); + + this.codigo = codigo; + } + + public static CodigoDeBarras valueOf(String codigo){ + checkCodigo(codigo); + return new CodigoDeBarras(codigo); + } + + public String write(){ + + return codigo; + } + + public Image toImage(){ + + // Montando o código de barras. + BarcodeInter25 barCode = new BarcodeInter25(); + barCode.setCode(this.write()); + + barCode.setExtended(true); + barCode.setBarHeight(35); + barCode.setFont(null); + barCode.setN(3); + + return barCode.createAwtImage(Color.BLACK, Color.WHITE); + } + + private static void checkCodigo(String str) { + + Objects.checkNotNull(str, "Código nulo!"); + Strings.checkNotBlank(str, format("Código ausente! str = \"%s\"",str)); + Strings.checkNotNumeric(str, format("Código não contém apenas números! str = \"%s\"",str)); + Objects.checkArgument(str.length()==44, format("Código com tamanho diferente de 44 dígitos! str = \"%s\"",str)); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/Files.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/Files.java new file mode 100644 index 0000000..b2f1a58 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/Files.java @@ -0,0 +1,435 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:17:54 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:17:54 + * + */ + +package org.jrimum.bopepo.pdf; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.WeakHashMap; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +/** + *

+ * Utilitário para manipular arquivos e fluxos de arquivos. + *

+ * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class Files { + + private static final int DEFAULT_BUFFER_SIZE = 4096; + + public static final String ZIP_SUFFIX = ".zip"; + + /** + * Utility class pattern: classe não instanciável + * + * @throws IllegalStateException + * Caso haja alguma tentativa de utilização deste construtor. + */ + private Files() { + + Exceptions.throwIllegalStateException("Instanciação não permitida!"); + } + + /** + *

+ * Transforma um array de bytes em um arquivo. + *

+ * + * @param pathName + * - Caminho do arquivo para onde os bytes serão escritos. + * @param bytes + * - Bytes a serem copiados. + * + * @return Objeto File com o conteúdo sendo o dos bytes + * + * @throws FileNotFoundException + * @throws IOException + * @throws IllegalArgumentException + * Caso {@code pathName} ou {@code bytes} seja null, vazio ou + * contenha apenas espaços em branco + * @since 0.2 + */ + public static File bytesToFile(String pathName, byte[] bytes) + throws FileNotFoundException, IOException { + + Strings.checkNotBlank(pathName); + Objects.checkNotNull(bytes); + + return bytesToFile(new File(pathName), bytes); + } + + /** + *

+ * Transforma um array de bytes em um arquivo. + *

+ * + * @param file + * - arquivo para onde os bytes serão escritos. + * @param bytes + * - Bytes a serem copiados. + * + * @return Objeto File com o conteúdo sendo o dos bytes + * + * @throws FileNotFoundException + * @throws IOException + * @throws IllegalArgumentException + * Caso {@code pathName} ou {@code bytes} seja null, vazio ou + * contenha apenas espaços em branco + * + * @since 0.2 + */ + public static File bytesToFile(File file, byte[] bytes) + throws FileNotFoundException, IOException { + + Objects.checkNotNull(file); + Objects.checkNotNull(bytes); + + if (file.length() > Integer.MAX_VALUE) { + Exceptions.throwIllegalArgumentException( + "TAMANHO DO ARQUIVO MAIOR DO QUE O SUPORTADO: " + + Integer.MAX_VALUE); + } + + OutputStream out = new FileOutputStream(file); + + out.write(bytes); + out.flush(); + out.close(); + + return file; + } + + /** + *

+ * Transforma um array de bytes em um ByteArrayOutputStream. + *

+ * + * @param bytes + * - Bytes que serão escritos no objeto ByteArrayOutputStream + * + * @return ByteArrayOutputStream ou null + * + * @throws IOException + * @throws IllegalArgumentException + * Caso os {@code bytes} sejam {@code null}. + * + * @since 0.2 + */ + public static ByteArrayOutputStream bytesToStream(byte[] bytes) + throws IOException { + + Objects.checkNotNull(bytes); + + ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + byteOut.write(bytes); + + return byteOut; + } + + /** + * Retorna o conteúdo do arquivo em um array de bytes. + * + * @param file + * @return Conteúdo em um array de bytes. + * @throws IOException + * @throws IllegalArgumentException + * Caso o {@code file} seja {@code null}. + */ + public static byte[] fileToBytes(File file) throws IOException { + + Objects.checkNotNull(file); + + InputStream is = new FileInputStream(file); + + byte[] bytes = new byte[(int) file.length()]; + + int offset = 0; + int numRead = 0; + + while ((offset < bytes.length) + && ((numRead = is.read(bytes, offset, bytes.length - offset)) >= 0)) { + offset += numRead; + } + + is.close(); + + Objects.checkArgument(offset == bytes.length, + "Não foi possível completar a leitura do arquivo: " + + file.getName()); + + return bytes; + } + + /** + * Retorna o conteúdo do {@code InputStream} em um array de bytes. + * + *

+ * Fecha o {@code InputStream} após leitura. + *

+ * + * @param input + * @return Conteúdo em um array de bytes. + * @throws IOException + * @throws IllegalArgumentException + * Caso o {@code input} seja {@code null}. + */ + public static byte[] toByteArray(InputStream input) throws IOException { + + Objects.checkNotNull(input); + + ByteArrayOutputStream output = new ByteArrayOutputStream(); + + byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; + + int n = 0; + + while (-1 != (n = input.read(buffer))) { + + output.write(buffer, 0, n); + } + + input.close(); + + return output.toByteArray(); + } + + public static File zip(File f){ + + return zip(f.getName(), f); + } + + public static File zip(String zipedName, File f){ + + try { + + return bytesToFile(File.createTempFile(zipedName, ZIP_SUFFIX),zip(toByteArray(f), f.getName())); + + } catch (IOException e) { + + throw new IllegalStateException(e); + } + } + + public static byte[] zip(byte[] fileToZip, String fileZipedName){ + + ByteArrayOutputStream obout = new ByteArrayOutputStream(); + + ZipOutputStream out = null; + + try { + + out = new ZipOutputStream(obout); + out.setMethod(ZipOutputStream.DEFLATED); + out.putNextEntry(new ZipEntry(fileZipedName)); + + out.write(fileToZip); + + + } catch (IOException e) { + + throw new IllegalStateException(e); + + }finally{ + + if(out != null){ + + try { + + // Close the input stream and return bytes + out.close(); + + } catch (Exception e) { + + return Exceptions.throwIllegalStateException(e); + } + } + } + + return obout.toByteArray(); + } + + public static File zip(Collection files){ + + Map toZip = new WeakHashMap(files.size()); + + for(File f : files){ + toZip.put(f.getName(), f); + } + + return zip(toZip); + } + + public static File zip(Map files){ + + return zip("ZipedFiles", files); + } + + public static File zip(String zipedName, Map files){ + + Map bytFiles = new HashMap(files.size()); + + for (Entry nameAndFile : files.entrySet()) { + + bytFiles.put(nameAndFile.getKey(), toByteArray(nameAndFile + .getValue())); + } + + try { + + return bytesToFile(File.createTempFile(zipedName,ZIP_SUFFIX),zipBytes(bytFiles)); + + } catch (IOException e) { + + throw new IllegalStateException(e); + } + } + + public static byte[] zipBytes(Map files) { + + // Create a buffer for reading the files + byte[] buf = new byte[DEFAULT_BUFFER_SIZE]; + + ByteArrayOutputStream outs = new ByteArrayOutputStream(); + + try { + // Create the ZIP file + ZipOutputStream out = new ZipOutputStream(outs); + + // Compress the files + for (Entry entry : files.entrySet()) { + + if (entry.getValue() != null) { + + ByteArrayInputStream in = new ByteArrayInputStream(entry + .getValue()); + + // Add ZIP entry to output stream. + out.putNextEntry(new ZipEntry(normalizeName(entry.getKey()))); + + // Transfer bytes from the file to the ZIP file + int len; + + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + + // Complete the entry + out.closeEntry(); + in.close(); + } + } + + // Complete the ZIP file + out.close(); + + return outs.toByteArray(); + + } catch (IOException e) { + + throw new IllegalStateException(e); + } + } + + public static byte[] toByteArray(File file){ + + try{ + + InputStream is = new FileInputStream(file); + + long length = file.length(); + + if (length > Integer.MAX_VALUE) { + Exceptions.throwIllegalArgumentException(String.format("File is too large! Max file length capacity is %s bytes.",length)); + } + + byte[] bytes = new byte[(int)length]; + + int offset = 0; + int numRead = 0; + while ((offset < bytes.length) + && ((numRead=is.read(bytes, offset, bytes.length-offset)) >= 0)) { + offset += numRead; + } + + is.close(); + + if (offset < bytes.length) { + throw new IOException("Could not completely read file "+file.getName()); + } + + return bytes; + + }catch (Exception e) { + return Exceptions.throwIllegalStateException(e); + } + } + + /** + * Gera uma string para ser utilizada como nome de arquivo. Ou como base de + * código para retirar acentos de um texto com Java Os nomes são sem acento + * e ao invés de " " é usado _ . + * + * @param name + * string a ser usada como nome borderoArquivo + * @return retorna o nome do borderoArquivo alterado. + */ + public static String normalizeName(String name) { + name = name.replaceAll(" ", "_"); + name = Strings.eliminateAccent(name); + name = name.replaceAll("[^\\p{ASCII}]", ""); + return name; + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PDFs.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PDFs.java new file mode 100644 index 0000000..413c6b4 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PDFs.java @@ -0,0 +1,188 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 30/03/2008 - 23:49:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 23:49:00 + * + */ + +package org.jrimum.bopepo.pdf; + +import java.io.ByteArrayOutputStream; +import java.util.Collection; + +import org.jrimum.utilix.Exceptions; + +import com.lowagie.text.Document; +import com.lowagie.text.DocumentException; +import com.lowagie.text.Image; +import com.lowagie.text.pdf.PdfCopy; +import com.lowagie.text.pdf.PdfReader; +import com.lowagie.text.pdf.PdfStamper; + +/** + * Serviços e atividades relacionadas a manipulação de PDF (provavelmente da lib + * iText). + * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public class PDFs{ + + /** + *

+ * Muda um input field para uma imgem com as dimensões e possição do field. + *

+ * + * @param stamper + * @param positions + * @param image + * @return rectanglePDF + * @throws DocumentException + * + * @since 0.2 + */ + public static PdfRectangle changeFieldToImage(PdfStamper stamper, + float[] positions, Image image) throws DocumentException { + + PdfRectangle rect = new PdfRectangle(positions); + + return changeFieldToImage(stamper, rect, image); + } + + /** + *

+ * Muda um input field para uma imgem com as dimensões e possição do field. + *

+ * + * @param stamper + * @param rect + * @param image + * @return rectanglePDF + * @throws DocumentException + * + * @since 0.2 + */ + public static PdfRectangle changeFieldToImage(PdfStamper stamper, + PdfRectangle rect, Image image) throws DocumentException { + + // Ajustando o tamanho da imagem de acordo com o tamanho do campo. + // image.scaleToFit(rect.getWidth(), rect.getHeight()); + image.scaleAbsolute(rect.getWidth(), rect.getHeight()); + + // A rotina abaixo tem por objetivo deixar a imagem posicionada no + // centro + // do field, tanto na perspectiva horizontal como na vertical. + // Caso não se queira mais posicionar a imagem no centro do field, basta + // efetuar a chamada a seguir: + // "image.setAbsolutePosition + // (rect.getLowerLeftX(),rect.getLowerLeftY());" + image.setAbsolutePosition(rect.getLowerLeftX() + + (rect.getWidth() - image.getScaledWidth()) / 2, rect + .getLowerLeftY() + + (rect.getHeight() - image.getScaledHeight()) / 2); + + stamper.getOverContent(rect.getPage()).addImage(image); + + return rect; + } + + /** + * Junta varios arquivos pdf em um só. + * + * @param pdfFiles + * Coleção de array de bytes + * + * @return Arquivo PDF em forma de byte + * @since 0.2 + */ + public static byte[] mergeFiles(Collection pdfFiles) { + + return mergeFiles(pdfFiles, null); + } + + /** + * Junta varios arquivos pdf em um só. + * + * @param pdfFiles + * Coleção de array de bytes + * @param info + * Usa somente as informações + * (title,subject,keywords,author,creator) + * + * @return Arquivo PDF em forma de byte + * + * @since 0.2 + */ + public static byte[] mergeFiles(Collection pdfFiles, PdfDocInfo info) { + + try{ + + ByteArrayOutputStream byteOS = new ByteArrayOutputStream(); + + Document document = new Document(); + + PdfCopy copy = new PdfCopy(document, byteOS); + + document.open(); + + for (byte[] f : pdfFiles) { + + PdfReader reader = new PdfReader(f); + + for (int page = 1; page <= reader.getNumberOfPages(); page++) { + + copy.addPage(copy.getImportedPage(reader, page)); + } + + reader.close(); + } + + document.addCreationDate(); + + if(info != null){ + + document.addAuthor(info.author()); + document.addCreator(info.creator()); + document.addTitle(info.title()); + document.addSubject(info.subject()); + document.addKeywords(info.keywords()); + } + + copy.close(); + document.close(); + byteOS.close(); + + return byteOS.toByteArray(); + + }catch (Exception e) { + return Exceptions.throwIllegalStateException(e); + } + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDateConverter.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDateConverter.java new file mode 100644 index 0000000..8dcb9c5 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDateConverter.java @@ -0,0 +1,163 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/09/2011 - 16:07:23 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/09/2011 - 16:07:23 + * + */ + +package org.jrimum.bopepo.pdf; + +import static java.lang.String.format; +import static org.jrimum.texgit.type.component.Fillers.ZERO_LEFT; +import static org.jrimum.utilix.Objects.isNotNull; + +import java.util.Calendar; +import java.util.TimeZone; + +import org.jrimum.utilix.Objects; + +/** + * Converte datas para o formato usando no padrão PDF. + * + *

+ * PDF defines standard date format, which closely follows that of the + * international standard ASN.1 (Abstract Syntax Notation One), defined in + * ISO/IEC 8824. A date is a string of the form (D:YYYYMMDDHHmmSSOHH'mm') + * where:
+ *

    + *
  • YYYY is the year
  • + *
  • MM is the month
  • + *
  • DD is the day (01-31)
  • + *
  • HH is the hour (00-23)
  • + *
  • mm is the minute (00-59)
  • + *
  • SS is the second (00-59)
  • + *
  • O is the relationship of local time to Universal Time (UT), + * denoted by one of the characters +, -, or Z (see below)
  • + *
  • HH followed by ' is the absolute value of the offset from UT in + * hours (00-23)
  • + *
  • mm followed by ' is the absolute value of the offset from UT in + * minutes (00-59)
  • + *
+ * The apostrophe character (') after HH and mm is part of the syntax. All + * fields after the year are optional. (The prefix D:, although also optional, + * is strongly recommended.) + *

+ *

+ * The default values for MM and DD are both 01; all other numerical fields + * default to zero values. A plus sign (+) as the value of the O field signifies + * that local time is later than UT, a minus sign (-) that local time is earlier + * than UT, and the letter Z that local time is equal to UT. If no UT + * information is specified, the relationship of the specified time to UT is + * considered to be unknown. Whether or not the time zone is known, the rest of + * the date should be specified in local time. + *

+ *

+ * For example, April 14, 2010, at 9:50 PM, U.S. Pacific Standard Time, is + * represented by the string (D:201004142150-08'00') + *

+ * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class PdfDateConverter { + + /** + * Converte a data para o formato de data do PDF: + * {@code D:YYYYMMDDHHmmSSOHH'mm'}, caso não exista um time zone, o fuso + * horário do meridiano de Greenwich então será usado, resultando em + * D:YYYYMMDDHHmm{@code "Z00'00'"}. + * + * @param date + * + * @return data no formato PDF: {@code D:YYYYMMDDHHmmSSOHH'mm'} + */ + public static String convert(final Calendar date) { + + Objects.checkNotNull(date, + "Null não pode ser convertido em uma data no formato PDF!"); + + final int NOT_INDEX = 1; + + StringBuilder dateTime = new StringBuilder("D:") + .append(date.get(Calendar.YEAR)) + .append(ZERO_LEFT.fill(date.get(Calendar.MONTH) + NOT_INDEX, 2)) + .append(ZERO_LEFT.fill(date.get(Calendar.DAY_OF_MONTH), 2)) + .append(ZERO_LEFT.fill(date.get(Calendar.HOUR_OF_DAY), 2)) + .append(ZERO_LEFT.fill(date.get(Calendar.MINUTE), 2)) + .append(ZERO_LEFT.fill(date.get(Calendar.SECOND), 2)) + .append(convertTimeZone(date)); + + return dateTime.toString(); + } + + /** + * Converte o time zone para o formato {@code "OHH'mm'"}, caso não exista um + * time zone, o fuso horário do meridiano de Greenwich então será usado, + * resultando no valor {@code "Z00'00'"}. + * + * @param date + * + * @return time zone no formato {@code "OHH'mm'"} + */ + private static String convertTimeZone(final Calendar date) { + + final int MINUTES_PER_HOUR = 60; + final int MILLISECONDS_PER_SECOND = 1000; + final int SECONDS_PER_MINUTE = 60; + + final TimeZone tz = date.getTimeZone(); + + String timeZone = "Z00'00'"; + + if (isNotNull(tz)) { + + final long offset = tz.getOffset(date.getTimeInMillis()); + + final long timeInMinutes = Math.abs(offset)/MILLISECONDS_PER_SECOND/SECONDS_PER_MINUTE; + + final String signal = offset == 0 ? "Z" : (offset > 0 ? "+" : "-"); + + long hours = 0; + long minutes = 0; + + if (timeInMinutes > MINUTES_PER_HOUR) { + + hours = timeInMinutes / MINUTES_PER_HOUR; + minutes = timeInMinutes % MINUTES_PER_HOUR; + + } else { + minutes = timeInMinutes; + } + + timeZone = format("%1$s%2$02d'%3$02d'", signal, hours, minutes); + } + + return timeZone; + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocInfo.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocInfo.java new file mode 100644 index 0000000..c70bc3c --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocInfo.java @@ -0,0 +1,410 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 19/09/2011 - 15:43:26 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 19/09/2011 - 15:43:26 + * + */ + +package org.jrimum.bopepo.pdf; + +import static org.jrimum.utilix.Objects.checkNotNull; +import static org.jrimum.utilix.Objects.isNotNull; + +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; + +import com.lowagie.text.pdf.PdfDate; + +/** + * Pricipais informações de um documento PDF: Título, Autor, Assunto, + * Palavras-chave, Aplicativo criador, Data de criação e Data de modificação + * . + * + * @author Gilmar P.S.L. + * + */ +public class PdfDocInfo { + + /* + * Mesmas chaves de pesquisa usadas pelo itext. + */ + + /** + * Key = Título do documento. + */ + private static final String DOC_TITLE = "Title"; + /** + * Key = Autor do documento. + */ + private static final String DOC_AUTHOR = "Author"; + /** + * Key = Assunto do documento. + */ + private static final String DOC_SUBJECT = "Subject"; + /** + * Key = Palavras-chave do documento. + */ + private static final String DOC_KEYWORDS = "Keywords"; + /** + * Key = Ferramenta/Software usada para do documento. + */ + private static final String DOC_CREATOR = "Creator"; + /** + * Key = Data de criação do documento. + */ + private static final String DOC_CREATION_DATE = "CreationDate"; + /** + * Key = Data de modificação do documento. + */ + private static final String DOC_MODIFACTION_DATE = "ModDate"; + + /** + * Key = Ferramenta/Software que de fato produziu o documento. + */ + private static final String DOC_PRODUCER = "Producer"; + + /** + * Map com informações sobre o documento: Title, Author, Subject, etc. + */ + private final Map docInfo; + + /** + * Modo de criação não utilizado e não permitido. + */ + private PdfDocInfo() { + Exceptions.throwIllegalStateException("Estado não permitido!"); + docInfo = null; + } + + /** + * Apenas para uso interno. + * + * @param info + */ + private PdfDocInfo(Map info) { + + checkNotNull(info); + + this.docInfo = info; + } + + /** + * Cria uma nova instância sem informações. + * + * @return referência prota para uso + */ + public static PdfDocInfo create() { + + return new PdfDocInfo(new HashMap(8)); + } + + /** + * Cria uma nova instância com as informações fornecidas. + * + * @param info Informações sobre um documento + * + * @return referência prota para uso + */ + public static PdfDocInfo create(Map info) { + + checkNotNull(info, "INFO INVÁLIDA!"); + + return new PdfDocInfo(info); + } + + /** + * Define o Título do documento. + * + * @param title + * + * @return Esta instância após a operação + */ + public PdfDocInfo title(String title) { + + if (isNotNull(title)) { + docInfo.put(DOC_TITLE, title); + } + + return this; + } + + /** + * Define o Autor do documento. + * + * @param author + * + * @return Esta instância após a operação + */ + public PdfDocInfo author(String author) { + + if (isNotNull(author)) { + docInfo.put(DOC_AUTHOR, author); + } + + return this; + } + + /** + * Define o Assunto do documento. + * + * @param subject + * + * @return Esta instância após a operação + */ + public PdfDocInfo subject(String subject) { + + if (isNotNull(subject)) { + docInfo.put(DOC_SUBJECT, subject); + } + + return this; + } + + /** + * Define as Palavras-chave do documento. + * + * @param keywords + * + * @return Esta instância após a operação + */ + public PdfDocInfo keywords(String keywords) { + + if (isNotNull(keywords)) { + docInfo.put(DOC_KEYWORDS, keywords); + } + + return this; + } + + /** + * Define o Software/Ferramenta de criação do documento. + * + * @param creator + * + * @return Esta instância após a operação + */ + public PdfDocInfo creator(String creator) { + + if (isNotNull(creator)) { + docInfo.put(DOC_CREATOR, creator); + } + + return this; + } + + /** + * Define a Data de criação do documento. + * + * @param date + * Data de criação + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * quando a date é nula + */ + public PdfDocInfo creation(Calendar date) { + + Objects.checkNotNull(date, "Valor null não permitido para data de criação do documento!"); + + docInfo.put(DOC_CREATION_DATE, PdfDateConverter.convert(date)); + + return this; + } + + /** + * Define a Data de modificação do documento. + * + * @param date + * Data de modificação + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * quando a date é nula + */ + public PdfDocInfo modification(Calendar date) { + + Objects.checkNotNull(date, "Valor null não permitido para data de modificação do documento!");Objects.checkNotNull(date); + + docInfo.put(DOC_MODIFACTION_DATE, PdfDateConverter.convert(date)); + + return this; + } + + /** + * @return Título do documento + */ + public String title() { + + return docInfo.get(DOC_TITLE); + } + + /** + * @return Autor do documento + */ + public String author() { + + return docInfo.get(DOC_AUTHOR); + } + + /** + * @return Assunto do documento + */ + public String subject() { + + return docInfo.get(DOC_SUBJECT); + } + + /** + * @return Palavras-chave do documento + */ + public String keywords() { + + return docInfo.get(DOC_KEYWORDS); + } + + /** + * @return Criador do documento + */ + public String creator() { + + return docInfo.get(DOC_CREATOR); + } + + /** + * Data de criação do documento em string, provalvelmento no seguinte + * formato: (D:YYYYMMDDHHmmSSOHH'mm'). + * + * @return Data de criação do documento + */ + public String creationRaw() { + + return docInfo.get(DOC_CREATION_DATE); + } + + /** + * @return Data de criação do documento + */ + public Calendar creation() { + + return PdfDate.decode(docInfo.get(DOC_CREATION_DATE)); + } + + /** + * Data de modificação do documento em string, provalvelmento no seguinte + * formato: (D:YYYYMMDDHHmmSSOHH'mm'). + * + * @return Data de modificação do documento + */ + public String modificationRaw() { + + return docInfo.get(DOC_MODIFACTION_DATE); + } + + /** + * @return Data de modificação do documento + */ + public Calendar modification() { + + return PdfDate.decode(docInfo.get(DOC_MODIFACTION_DATE)); + + } + + /** + * Retorna a descrição do produtor do documento. + * + *

+ * Obs: "You can’t change this without breaking the software license that + * allows you to use iText for free." + *

+ * + * @return Descrição do produtor + */ + public String producer() { + + return docInfo.get(DOC_PRODUCER); + } + + /** + * Transforma as informações do documento em um novo Map a cada chamada. + * + * @return Map de informações + */ + public Map toMap(){ + + return new HashMap(docInfo); + } + + /** + * Geração a partir do {@code hashCode()} do {@linkplain #docInfo}. + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((docInfo == null) ? 0 : docInfo.hashCode()); + return result; + } + + /** + * Comparação com base no {@linkplain #docInfo}. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PdfDocInfo other = (PdfDocInfo) obj; + if (docInfo == null) { + if (other.docInfo != null) + return false; + } else if (!docInfo.equals(other.docInfo)) + return false; + return true; + } + + /** + * Informação contida em {@linkplain #docInfo}. + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "PdfDocInfo [docInfo=" + docInfo + "]"; + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocMix.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocMix.java new file mode 100644 index 0000000..f1464a9 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocMix.java @@ -0,0 +1,1202 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/04/2011 - 14:49:07 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/04/2011 - 14:49:07 + * + */ + +package org.jrimum.bopepo.pdf; + +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.jrimum.utilix.Collections.hasElement; +import static org.jrimum.utilix.Objects.checkNotNull; +import static org.jrimum.utilix.Objects.isNotNull; +import static org.jrimum.utilix.Objects.isNull; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.WeakHashMap; + +import org.apache.log4j.Logger; +import org.jrimum.utilix.Collections; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +import com.lowagie.text.Image; +import com.lowagie.text.pdf.AcroFields; +import com.lowagie.text.pdf.PdfBoolean; +import com.lowagie.text.pdf.PdfName; +import com.lowagie.text.pdf.PdfReader; +import com.lowagie.text.pdf.PdfStamper; + +/** + * Classe geradora de documentos PDF utilizando templates com fields. + * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class PdfDocMix { + + private static final Logger LOG = Logger.getLogger(PdfDocMix.class); + + private PdfReader reader; + private PdfStamper stamper; + private AcroFields form; + + private ByteArrayOutputStream outputStream; + + private Map imagesInUseMap = new WeakHashMap(); + + /** + * Template em byte array. + */ + private byte[] template; + + /** + * Informações sobre o documento. + */ + private PdfDocInfo docInfo = PdfDocInfo.create(); + + /** + * Map dos campos de texto do documento com nome e valor. + */ + private Map txtMap; + + /** + * Map dos campos de imagem do documento com nome e valor. + */ + private Map imgMap; + + /** + * Modo full compression do PDF, default = true. + * + * @since 0.2 + */ + private boolean fullCompression = true; + + /** + * Remove todos os campos do PDF, default = true. + * + * @since 0.2 + */ + private boolean removeFields = true; + + /** + * Indicação de que o título do documento deve ser mostrado barra superior. + * + * @since 0.2 + */ + private Boolean displayDocTitle; + + /** + * Cria uma instância sem o template que será utilizado para construir o + * documento. + * + * @since 0.2 + */ + private PdfDocMix() {} + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param template + * + * @since 0.2 + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix(byte[] template) { + + checkTemplateFile(template); + setTemplate(template); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templateUrl + * + * @since 0.2 + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix(URL templateUrl) { + + checkTemplateFile(templateUrl); + setTemplate(templateUrl); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templateInput + * + * @since 0.2 + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix(InputStream templateInput) { + + checkTemplateFile(templateInput); + setTemplate(templateInput); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templatePath + * + * @since 0.2 + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix(String templatePath) { + + checkTemplatePath(templatePath); + setTemplate(templatePath); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templateFile + * + * @since 0.2 + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix(File templateFile) { + + checkTemplateFile(templateFile); + setTemplate(templateFile); + } + + /** + * Cria uma instância sem o template que será utilizado para construir o + * documento. + * + * @since 0.2 + * + * @return Esta instância após a operação + */ + public static PdfDocMix create() { + + return new PdfDocMix(); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param template + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public static PdfDocMix createWithTemplate(byte[] template) { + + checkTemplateFile(template); + + return new PdfDocMix(template); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templateUrl + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public static PdfDocMix createWithTemplate(URL templateUrl) { + + checkTemplateFile(templateUrl); + + return new PdfDocMix(templateUrl); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templateInput + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public static PdfDocMix createWithTemplate(InputStream templateInput) { + + checkTemplateFile(templateInput); + + return new PdfDocMix(templateInput); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templatePath + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public static PdfDocMix createWithTemplate(String templatePath) { + + checkTemplatePath(templatePath); + + return new PdfDocMix(templatePath); + } + + /** + * Cria uma instância com o template que será utilizado para construir o + * documento. + * + * @param templateFile + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public static PdfDocMix createWithTemplate(File templateFile) { + + checkTemplateFile(templateFile); + + return new PdfDocMix(templateFile); + } + + /** + * Define o template que será utilizado para construir o + * documento. + * + * @param template + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix withTemplate(byte[] template) { + + checkTemplateFile(template); + + return setTemplate(template); + } + + /** + * Define o template que será utilizado para construir o + * documento. + * + * @param templateUrl + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix withTemplate(URL templateUrl) { + + checkTemplateFile(templateUrl); + + return setTemplate(templateUrl); + } + + /** + * Define o template que será utilizado para construir o + * documento. + * + * @param templateInput + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix withTemplate(InputStream templateInput) { + + checkTemplateFile(templateInput); + + return setTemplate(templateInput); + } + + /** + * Define o template que será utilizado para construir o + * documento. + * + * @param templatePath + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix withTemplate(String templatePath) { + + checkTemplatePath(templatePath); + + return setTemplate(templatePath); + } + + /** + * Define o template que será utilizado para construir o + * documento. + * + * @param templateFile + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public PdfDocMix withTemplate(File templateFile) { + + checkTemplateFile(templateFile); + + return setTemplate(templateFile); + } + + /** + * Retorna um {@code Map} com os campos e seus respectivos textos adicionados nessa + * instância. + * + * @return Map de campo,texto + * + * @since 0.2 + */ + public Map getTextFields() { + return this.txtMap; + } + + /** + * Coloca todos chave-valor na instância, caso uma chave existe o valor será + * substituído. Caso a instância não contenha valores ainda, atribui o + * {@code Map} informado para uso no preenchimento de campos de Texto na + * instância. + * + * @param txtMap + * Map com os campos(key) e textos(value) + * @return Esta instância após a operação + * + * @since 0.2 + */ + public PdfDocMix putAllTexts(Map txtMap) { + + Collections.checkNotEmpty(txtMap, "Campos ausentes!"); + + if (isNull(this.txtMap)) { + this.txtMap = txtMap; + }else{ + this.txtMap.putAll(txtMap); + } + + return this; + } + + /** + * Coloca um par {@code key,value} para uso no preenchimento de campos de + * Texto na instância. + * + * @param name + * Nome do campo + * @param value + * Valor em texto do campo + * + * @return Esta instância após a operação + * + * @since 0.2 + */ + public PdfDocMix put(String name, String value) { + + Strings.checkNotBlank(name, "Nome do campo ausente!"); + + if (isNull(txtMap)) { + this.txtMap = new WeakHashMap(); + } + + this.txtMap.put(name, value); + + return this; + } + + /** + * Retorna um {@code Map} com os campos e suas respectivas imagens + * adicionadas nessa instância. + * + * @return Map de campo,imagem + * + * @since 0.2 + */ + public Map getImageFields() { + return this.imgMap; + } + + /** + * Coloca todos chave-valor na instância, caso uma chave existe o valor + * será substituído. Caso a instância não contenha valores ainda, atribui o + * {@code Map} informado para uso no preenchimento de campos de Imagem na + * instância. + * + * @param imgMap + * Map com os campos(key) e imagens(value) + * @return Esta instância após a operação + * + * @since 0.2 + */ + public PdfDocMix putAllImages(Map imgMap) { + + Collections.checkNotEmpty(imgMap, "Campos ausentes!"); + + if (isNull(this.imgMap)) { + this.imgMap = imgMap; + }else{ + this.imgMap.putAll(imgMap); + } + + return this; + } + + /** + * Coloca um par {@code key,value} para uso no preenchimento de campos de + * Imagem na instância. + * + * @param name + * Nome do campo + * @param value + * Valor em {@link java.awt.Image} do campo + * + * @return Esta instância após a operação + * + * @since 0.2 + */ + public PdfDocMix put(String name, java.awt.Image value) { + + Strings.checkNotBlank(name, "Nome do campo ausente!"); + + if (isNull(imgMap)) { + this.imgMap = new WeakHashMap(); + } + + this.imgMap.put(name, value); + + return this; + } + + /** + * Habilita/Desabilita o modo full compression do PDF veja + * {@link com.lowagie.text.pdf.PdfStamper#setFullCompression()}. + * + *

+ * Itext doc: Sets the document's compression to the new 1.5 mode with + * object streams and xref streams. + *

+ * + * @param option + * Escolha de compressão + * + * @return Esta instância após a operação + * + * @since 0.2 + * + */ + public PdfDocMix withFullCompression(boolean option) { + this.fullCompression = option; + return this; + } + + /** + * Habilita/Desabilita a remoção dos campos do PDF. + * + *

+ * Por padrão os campos são removidos, ou seja, default = true. + *

+ * + * @param option + * Escolha por remoção + * + * @return Esta instância após a operação + * + * @since 0.2 + * + */ + public PdfDocMix removeFields(boolean option) { + this.removeFields = option; + return this; + } + + /** + * Define o Título do documento. + * + * @param title + * + * @return Esta instância após a operação + */ + public PdfDocMix withTitle(String title){ + docInfo.title(title); + return this; + } + + /** + * Define o Autor do documento. + * + * @param author + * + * @return Esta instância após a operação + */ + public PdfDocMix withAuthor(String author){ + docInfo.author(author); + return this; + } + + /** + * Define o Assunto do documento. + * + * @param subject + * + * @return Esta instância após a operação + */ + public PdfDocMix withSubject(String subject){ + docInfo.subject(subject); + return this; + } + + /** + * Define as Palavras-chave do documento. + * + * @param keywords + * + * @return Esta instância após a operação + */ + public PdfDocMix withKeywords(String keywords){ + docInfo.keywords(keywords); + return this; + } + + /** + * Define o Software/Ferramenta de criação do documento. + * + * @param creator + * + * @return Esta instância após a operação + */ + public PdfDocMix withCreator(String creator){ + docInfo.creator(creator); + return this; + } + + /** + * Define a data de criação do documento. + * + * @param date Data de criação + * + * @return Esta instância após a operação + */ + public PdfDocMix withCreation(Calendar date){ + docInfo.creation(date); + return this; + } + + /** + * Redefine as meta-informações do documento, ex: título, autor, data de + * criação, etc. + * + *

+ * Todas as informações anteriormente atribuídas por: + * {@linkplain #withTitle(String)}, {@linkplain #withSubject(String)}, etc. serão + * substituídas pelo conteúdo do {@code docInfo} nessa operação. + *

+ * + * @param docInfo + * Informações sobre o documento + * + * @return Esta instância após a operação + * + * @see org.jrimum.bopepo.pdf.PdfDocInfo + */ + public PdfDocMix withDocInfo(PdfDocInfo docInfo){ + + checkNotNull(docInfo, "Valor null para docInfo não permitido!"); + + this.docInfo = docInfo; + + return this; + } + + /** + * Define se o título do documento será exibido na barra superior do PDF. + * + *

+ * Caso não seja informada uma opção, prevalece a definição do template PDF. + *

+ * + * @param option + * + * @return Esta instância após a operação + */ + public PdfDocMix withDisplayDocTilteOption(boolean option){ + + this.displayDocTitle = option; + + return this; + } + + /** + * Retorna o documento em forma de arquivo PDF. + * + * @param destPath + * Caminho completo do arquivo o qual o documento será gerado + * @return Documento em forma de arquivo PDF + * + * @since 0.2 + * + */ + public File toFile(String destPath) { + + checkDestPath(destPath); + + return toFile(new File(destPath)); + } + + /** + * Retorna o documento em forma de arquivo PDF. + * + * @param destURL + * URL do arquivo o qual o documento será gerado + * @return Documento em forma de arquivo PDF + * + * @since 0.2 + * + */ + public File toFile(URL destURL){ + + checkDestURL(destURL); + + try { + + return toFile(new File(destURL.toURI())); + + } catch (Exception e) { + + LOG.error( + "Erro durante a criação do arquivo! " + + e.getLocalizedMessage(), e); + + return Exceptions.throwIllegalStateException( + "Erro ao tentar criar arquivo! " + "Causado por " + + e.getLocalizedMessage(), e); + } + } + + /** + * Retorna o documento em forma de arquivo PDF. + * + * @param destFile + * Arquivo o qual o boleto será gerado + * @return Documento em forma de arquivo PDF + * @throws IllegalStateException + * Caso ocorral algum problema imprevisto + * + * @since 0.2 + * + */ + public File toFile(File destFile) { + + checkDestFile(destFile); + + try { + + process(); + + return Files.bytesToFile(destFile, outputStream.toByteArray()); + + } catch (Exception e) { + + LOG.error( + "Erro durante a criação do arquivo! " + + e.getLocalizedMessage(), e); + + return Exceptions.throwIllegalStateException( + "Erro ao tentar criar arquivo! " + "Causado por " + + e.getLocalizedMessage(), e); + } + } + + /** + * Retorna o arquivo PDF em um stream de array de bytes. + * + * @return O PDF em stream + * + * @since 0.2 + * + */ + public ByteArrayOutputStream toStream() { + + try { + + process(); + + return Files.bytesToStream(outputStream.toByteArray()); + + } catch (Exception e) { + + LOG.error( + "Erro durante a criação do stream! " + + e.getLocalizedMessage(), e); + + return Exceptions.throwIllegalStateException( + "Erro durante a criação do stream! " + "Causado por " + + e.getLocalizedMessage(), e); + } + } + + /** + * Retorna o arquivo PDF em array de bytes. + * + * @return O PDF em array de bytes + * + * @since 0.2 + * + */ + public byte[] toBytes() { + + try { + + process(); + + return outputStream.toByteArray(); + + } catch (Exception e) { + + LOG.error( + "Erro durante a criação do array de bytes! " + + e.getLocalizedMessage(), e); + + return Exceptions.throwIllegalStateException( + "Erro durante a criação do array de bytes! " + + "Causado por " + e.getLocalizedMessage(), e); + } + } + + /** + * Retorna o uma cópia do template atual do viewer em array de bytes. + * + * @return Template em bytes + * + * @since 0.2 + * + */ + public byte[] getTemplate() { + + return template.clone(); + } + + /** + * Define o template que será utilizado para construir o documento. + * + * @param template + * + * @return Esta instância após a operação + * + * @since 0.2 + * + */ + private PdfDocMix setTemplate(byte[] template) { + this.template = template; + return this; + } + + /** + * Define o template que será utilizado para construir o documento. + * + * @param templateUrl + * + * @return Esta instância após a operação + * + * @since 0.2 + * + */ + private PdfDocMix setTemplate(URL templateUrl) { + try { + setTemplate(templateUrl.openStream()); + return this; + } catch (Exception e) { + return Exceptions.throwIllegalStateException(e); + } + } + + /** + * Define o template que será utilizado para construir o documento. + * + * @param templateInput + * + * @return Esta instância após a operação + * + * @since 0.2 + * + */ + private PdfDocMix setTemplate(InputStream templateInput) { + try { + setTemplate(Files.toByteArray(templateInput)); + return this; + } catch (Exception e) { + return Exceptions.throwIllegalStateException(e); + } + } + + /** + * Define o template que será utilizado para construir o documento. + * + * @param templatePath + * + * @return Esta instância após a operação + * + * @since 0.2 + * + */ + private PdfDocMix setTemplate(String templatePath) { + setTemplate(new File(templatePath)); + return this; + } + + /** + * Define o template que será utilizado para construir o documento. + * + * @param templateFile + * + * @return Esta instância após a operação + * + * @since 0.2 + * + */ + private PdfDocMix setTemplate(File templateFile) { + try { + setTemplate(Files.fileToBytes(templateFile)); + return this; + } catch (Exception e) { + return Exceptions.throwIllegalStateException(e); + } + } + + /** + * Indica se o viewer foi habilitado a comprimir o pdf do documento gerado. + * + * @see #withFullCompression(boolean) + * + * @return indicativo de compressão + * + * @since 0.2 + * + */ + private boolean isFullCompression() { + return this.fullCompression; + } + + /** + * Indica se o viewer foi habilitado para remover todos os campos do pdf + * gerado. + * + * @see #removeFields + * + * @return indicativo de compressão + * + * @since 0.2 + */ + private boolean isRemoveFields() { + return removeFields; + } + + /** + * Executa os seguintes métodos na sequência: + *
    + *
  1. {@linkplain #init()}
  2. + *
  3. {@linkplain #fillFields()}
  4. + *
  5. {@linkplain #end()}
  6. + *
+ * + * @since 0.2 + */ + private void process() { + + init(); + fillFields(); + end(); + } + + /** + * Inicializa os principais objetos para a escrita dos dados do documento no + * template PDF: {@code stamper}, {@code reader} e {@code outputStream}. + * + * @since 0.2 + */ + private void init() { + + try { + + reader = new PdfReader(getTemplate()); + + outputStream = new ByteArrayOutputStream(); + + stamper = new PdfStamper(reader, outputStream); + + final String JRIMUM = "jrimum.org/bopepo"; + + String creator = docInfo.creator(); + + if(isBlank(creator)){ + withCreator(JRIMUM); + }else{ + withCreator(creator+" by ("+JRIMUM+")"); + } + + if(isNull(docInfo.creation())){ + docInfo.creation(Calendar.getInstance()); + } + + stamper.setMoreInfo((HashMap)docInfo.toMap()); + + if(isNotNull(displayDocTitle)){ + stamper.addViewerPreference(PdfName.DISPLAYDOCTITLE, displayDocTitle ? PdfBoolean.PDFTRUE : PdfBoolean.PDFFALSE); + } + + form = stamper.getAcroFields(); + + } catch (Exception e) { + + Exceptions.throwIllegalStateException(e); + } + } + + /** + * Preenche todos os campos do formulário PDF com os dados do documento + * contido na instância. + * + * @since 0.2 + */ + private void fillFields() { + + setTextFields(); + setImageFields(); + } + + /** + * Adiciona, caso existam, os textos definidos em + * {@linkplain #put(String, String)} ou {@linkplain #putAllTexts(Map)}. + * + * @since 0.2 + */ + private void setTextFields() { + + if (hasElement(txtMap)) { + for (Entry e : txtMap.entrySet()) { + try { + form.setField(e.getKey(), e.getValue()); + } catch (Exception ex) { + Exceptions.throwIllegalStateException(ex); + } + } + } + } + + /** + * Coloca as imagens dos campos no pdf de acordo com o nome dos campos do + * documento atribuídos no map e templante. + * + * @since 0.2 + */ + private void setImageFields() { + + if (hasElement(imgMap)) { + for (Entry e : imgMap.entrySet()) { + setImage(e.getKey(),e.getValue()); + } + } + } + + /** + * Coloca uma imagem no pdf de acordo com o nome do field no templante. + * + * @param fieldName + * @param image + * + * @since 0.2 + */ + private void setImage(String fieldName, java.awt.Image image) { + + float posImgField[]; + + if (isNotBlank(fieldName)) { + + posImgField = form.getFieldPositions(fieldName); + + if (isNotNull(posImgField)) { + try { + PDFs.changeFieldToImage(stamper, posImgField, getPdfImage(image)); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + }else{ + LOG.warn("Posicionamento do campo de imagem nao encontrado! CAMPO: "+fieldName); + } + } + } + + public Image getPdfImage(java.awt.Image image){ + + Image pdfImage = imagesInUseMap.get(image); + + if(isNull(pdfImage)){ + try { + pdfImage = Image.getInstance(image, null); + imagesInUseMap.put(image, pdfImage); + } catch (Exception ex) { + Exceptions.throwIllegalStateException(ex); + } + } + return pdfImage; + } + + /** + * Finaliza a escrita de dados no template através do fechamento do + * {@code stamper}, {@code reader} e {@code outputStream}. + * + * @since 0.2 + */ + private void end() { + + if (isFullCompression()) { + stamper.setFullCompression(); + } + + if (isRemoveFields()) { + stamper.setFreeTextFlattening(true); + stamper.setFormFlattening(true); + reader.removeFields(); + } else { + stamper.setFreeTextFlattening(false); + stamper.setFormFlattening(false); + } + + reader.consolidateNamedDestinations(); + + reader.eliminateSharedStreams(); + + try { + // Send immediately + outputStream.flush(); + // close All in this order + outputStream.close(); + reader.close(); + stamper.close(); + + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + } + + private static void checkDestPath(String path) { + + checkString(path, + "Caminho destinado a geração do(s) arquivo(s) não contém informação!"); + } + + private static void checkTemplatePath(String path) { + + checkString(path, "Caminho do template não contém informação!"); + } + + private static void checkTemplateFile(Object template) { + + Objects.checkNotNull(template, "Arquivo de template nulo!"); + } + + private static void checkString(String str, String msg) { + + Objects.checkNotNull(str); + Strings.checkNotBlank(str, msg); + } + + private static void checkDestURL(URL url) { + + Objects.checkNotNull(url, + "URL destinada a geração do(s) documentos(s) nula!"); + } + + private static void checkDestFile(File file) { + + Objects.checkNotNull(file, + "Arquivo destinado a geração do(s) documentos(s) nulo!"); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocReader.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocReader.java new file mode 100644 index 0000000..a6420f7 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfDocReader.java @@ -0,0 +1,301 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 19/09/2011 - 15:43:26 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 19/09/2011 - 15:43:26 + * + */ + +package org.jrimum.bopepo.pdf; + +import static org.jrimum.utilix.Collections.hasElement; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.jrimum.utilix.Exceptions; + +import com.lowagie.text.pdf.AcroFields; +import com.lowagie.text.pdf.PdfReader; + +/** + * Leitor de documentos PDF. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class PdfDocReader{ + + private final PdfReader reader; + private final AcroFields form; + private final PdfDocInfo docInfo; + + /** + * Modo de criação não utilizado e não permitido. + */ + @SuppressWarnings("unused") + private PdfDocReader() { + Exceptions.throwIllegalStateException("Estado não permitido!"); + reader = null; + this.form = null; + this.docInfo = null; + } + + /** + * Ler e analisa o documento. + * + * @param pdfIn + * Byte array contendo o documento + */ + @SuppressWarnings("unchecked") + public PdfDocReader(byte[] pdfIn){ + PdfReader r = null; + try { + r = new PdfReader(pdfIn); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Ler e analisa o documento. + * + * @param is + * Stream contendo o documento + */ + @SuppressWarnings("unchecked") + public PdfDocReader(InputStream is){ + PdfReader r = null; + try { + r = new PdfReader(is); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Ler e analisa o documento. + * + * @param url + * URL do documento + */ + @SuppressWarnings("unchecked") + public PdfDocReader(URL url){ + PdfReader r = null; + try { + r = new PdfReader(url); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Ler e analisa o documento. + * + * @param file + * Arquivo contendo o documento + */ + @SuppressWarnings("unchecked") + public PdfDocReader(File file){ + PdfReader r = null; + try { + r = new PdfReader(new FileInputStream(file)); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Ler e analisa o documento. + * + * @param pdfIn + * Byte array contendo o documento + * @param ownerPassword + * Senha para ler o documento. + */ + @SuppressWarnings("unchecked") + public PdfDocReader(byte[] pdfIn, byte[] ownerPassword){ + PdfReader r = null; + try { + r = new PdfReader(pdfIn,ownerPassword); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Ler e analisa o documento. + * + * @param is + * Stream contendo o documento + * @param ownerPassword + * Senha para ler o documento. + */ + @SuppressWarnings("unchecked") + public PdfDocReader(InputStream is, byte[] ownerPassword){ + PdfReader r = null; + try { + r = new PdfReader(is,ownerPassword); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Ler e analisa o documento. + * + * @param url + * URL do documento + * @param ownerPassword + * Senha para ler o documento. + */ + @SuppressWarnings("unchecked") + public PdfDocReader(URL url, byte[] ownerPassword){ + PdfReader r = null; + try { + r = new PdfReader(url,ownerPassword); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Ler e analisa o documento. + * + * @param file + * Arquivo contendo o documento + * @param ownerPassword + * Senha para ler o documento. + */ + @SuppressWarnings("unchecked") + public PdfDocReader(File file, byte[] ownerPassword){ + PdfReader r = null; + try { + r = new PdfReader(new FileInputStream(file),ownerPassword); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + this.reader = r; + this.form = reader.getAcroFields(); + this.docInfo = PdfDocInfo.create(this.reader.getInfo()); + } + + /** + * Retorna, ou não, o valor de um campo procurando pelo seu nome + * ("fully qualified" ou não). + * + * @param name + * Nome do campo + * @return Valor do campo + */ + public String getField(String name){ + + return this.form.getField(name); + } + + /** + * Retorna todos os nomes de campos contidos no documento. Os nomes são + * dados na forma "fully qualified". + * + * @return Coleção de nomes em um {@linkplain java.util.Set} + */ + @SuppressWarnings("unchecked") + public Collection getFieldsNames() { + + return form.getFields().keySet(); + } + + /** + * Retorna todos os campos contidos no documento. Os nomes dos campos são + * dados na forma "fully qualified". + * + * @return Map(campo,valor) + */ + public Map getFields(){ + + Collection names = getFieldsNames(); + + if(hasElement(names)){ + Map fields = new HashMap(names.size()); + for(String name : names){ + fields.put(name, getField(name)); + } + return fields; + } + + return Collections.emptyMap(); + } + + /** + * Retorna as informações sobre o documento: Título, Autor, etc. + * + * @return info + */ + public PdfDocInfo getInfo(){ + + return this.docInfo; + } + + /** + * Fecha o leitor. Necessário para liberar o recurso. + */ + public void close(){ + try { + this.reader.close(); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfRectangle.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfRectangle.java new file mode 100644 index 0000000..8d28798 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/PdfRectangle.java @@ -0,0 +1,121 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 12:57:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 12:57:00 + * + */ + +package org.jrimum.bopepo.pdf; + +import com.lowagie.text.Rectangle; + +/** + *

+ * Classe adapter para facilitar as operações com os fields pdf com a lib iText. + *

+ * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public class PdfRectangle extends Rectangle { + + private int page; + + /** + *Constrói um retângulo com os seguintes valores do array: + *[page, llx, lly, urx, ury]. + */ + public PdfRectangle(float[] positions) { + super(positions[1], positions[2], positions[3], positions[4]); + page = (int) positions[0]; + } + + /** + * @param llx - lower left x + * @param lly - lower left y + * @param urx - upper right x + * @param ury - upper right y + */ + public PdfRectangle(float llx, float lly, float urx, float ury) { + super(llx, lly, urx, ury); + } + + /** + * Cria um retângulo iniciando da origem (0,0). + * + * @param urx - upper right x + * @param ury - upper right y + */ + public PdfRectangle(float urx, float ury) { + super(urx, ury); + } + + /** + * Cria um retângulo a partir do objeto Rectangle. + * @param rect + */ + public PdfRectangle(Rectangle rect) { + super(rect); + } + + /** + * @return page + */ + public int getPage() { + return page; + } + + /** + * @return llx - lower left x + */ + public float getLowerLeftX() { + return this.llx; + } + + /** + * @return lly - lower left y + */ + public float getLowerLeftY() { + return lly; + } + + /** + * + * @return urx - upper right x + */ + public float getUpperRightX() { + return urx; + } + + /** + * @return ury - upper right y + */ + public float getUpperRightY() { + return ury; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/package-info.java new file mode 100644 index 0000000..8b84e60 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/pdf/package-info.java @@ -0,0 +1,35 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/08/2010 - 20:50:14 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/08/2010 - 20:50:14 + * + */ + +/** + * Classes com o propósito de suportar funcionalidades de manipulação de documentos PDF. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.pdf; \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/BoletoCampo.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/BoletoCampo.java new file mode 100644 index 0000000..4e77144 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/BoletoCampo.java @@ -0,0 +1,107 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 29/08/2013 - 19:19:25 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 29/08/2013 - 19:19:25 + * + */ + +package org.jrimum.bopepo.view; + +/** + * Enumeração com todos os campos padrão FEBRABAN utilizados no boleto. + * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public enum BoletoCampo { + + /* + * Campos em ordem alfabetica + */ + + //Ficha de Compensação + txtFcAceite, + txtFcAgenciaCodigoCedente, + txtFcCarteira, + txtFcCedente, + txtFcCodBanco, + txtFcCodigoBarra, + txtFcDataDocumento, + txtFcDataProcessamento, + txtFcDataVencimento, + txtFcDescontoAbatimento, + txtFcEspecie, + txtFcEspecieDocumento, + txtFcInstrucaoAoCaixa1, + txtFcInstrucaoAoCaixa2, + txtFcInstrucaoAoCaixa3, + txtFcInstrucaoAoCaixa4, + txtFcInstrucaoAoCaixa5, + txtFcInstrucaoAoCaixa6, + txtFcInstrucaoAoCaixa7, + txtFcInstrucaoAoCaixa8, + txtFcLinhaDigitavel, + txtFcLocalPagamento, + txtFcLogoBanco, + txtFcMoraMulta, + txtFcNossoNumero, + txtFcNumeroDocumento, + txtFcOutraDeducao, + txtFcOutroAcrescimo, + txtFcQuantidade, + txtFcSacadoL1, + txtFcSacadoL2, + txtFcSacadoL3, + txtFcSacadorAvalistaL1, + txtFcSacadorAvalistaL2, + txtFcSacadorAvalistaL3, + txtFcUsoBanco, + txtFcValor, + txtFcValorCobrado, + txtFcValorDocumento, + //Recibo do Sacado + txtRsAgenciaCodigoCedente, + txtRsCedente, + txtRsCodBanco, + txtRsCpfCnpj, + txtRsDataVencimento, + txtRsDescontoAbatimento, + txtRsEspecie, + txtRsInstrucaoAoSacado, + txtRsLinhaDigitavel, + txtRsLogoBanco, + txtRsMoraMulta, + txtRsNossoNumero, + txtRsNumeroDocumento, + txtRsOutraDeducao, + txtRsOutroAcrescimo, + txtRsQuantidade, + txtRsSacado, + txtRsValorCobrado, + txtRsValorDocumento +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/BoletoViewer.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/BoletoViewer.java new file mode 100644 index 0000000..c0b28c3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/BoletoViewer.java @@ -0,0 +1,1453 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 08/05/2008 - 00:10:01 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 08/05/2008 - 00:10:01 + * + */ + +package org.jrimum.bopepo.view; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.jrimum.utilix.Objects.isNotNull; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.log4j.Logger; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.pdf.Files; +import org.jrimum.utilix.Collections; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +/** + *

+ * Agrupa as formas de "visão" de um boleto. + *

+ * + *

+ * Exemplo de formas de visualização: + *

    + *
  • PDF
  • + *
  • Stream
  • + *
  • Array de Bytes
  • + *
  • Outros
  • + *
+ *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério + * + * @since 0.2 + * + * @version 0.2 + */ +public class BoletoViewer { + + /** + * + */ + private static Logger log = Logger.getLogger(BoletoViewer.class); + + /** + *

+ * Engine responsável pela visualização em formato PDF. + *

+ */ + private PdfViewer pdfViewer; + + /** + *

+ * Instancia o visualizador com o template padrão. + *

+ * + * @param boleto + * Boleto preenchido + * + * @throws IllegalArgumentException + * Caso o {@code boleto} seja nulo + */ + public BoletoViewer(Boleto boleto) { + + checkBoleto(boleto); + + this.pdfViewer = new PdfViewer(boleto); + } + + /** + *

+ * Instancia o visualizador com um template determinado. + *

+ * + * @param boleto + * Boleto preenchido + * @param templatePath + * Template PDF o qual o boleto será gerado + * + * @throws IllegalArgumentException + * Caso o {@code boleto} ou {@code template} seja nulo + */ + public BoletoViewer(Boleto boleto, String templatePath) { + + checkBoleto(boleto); + checkTemplatePath(templatePath); + + this.pdfViewer = new PdfViewer(boleto); + + setTemplate(templatePath); + } + + /** + *

+ * Instancia o visualizador com um template determinado. + *

+ * + * @param boleto + * Boleto preenchido + * @param templateFile + * Template PDF o qual o boleto será gerado + * + * @throws IllegalArgumentException + * Caso o {@code boleto} ou {@code template} seja nulo + */ + public BoletoViewer(Boleto boleto, File templateFile) { + + checkBoleto(boleto); + checkTemplateFile(templateFile); + + this.pdfViewer = new PdfViewer(boleto); + + setTemplate(templateFile); + } + + /** + *

+ * Instancia o visualizador com um template determinado. + *

+ * + * @param boleto + * Boleto preenchido + * @param templateUrl + * Template PDF o qual o boleto será gerado + * + * @throws IllegalArgumentException + * Caso o {@code boleto} ou {@code template} seja nulo + */ + public BoletoViewer(Boleto boleto, URL templateUrl) { + + checkBoleto(boleto); + checkTemplateFile(templateUrl); + + this.pdfViewer = new PdfViewer(boleto); + + setTemplate(templateUrl); + } + + /** + *

+ * Instancia o visualizador com um template determinado. + *

+ * + * @param boleto + * Boleto preenchido + * @param templateInput + * Template PDF o qual o boleto será gerado + * + * @throws IllegalArgumentException + * Caso o {@code boleto} ou {@code template} seja nulo + */ + public BoletoViewer(Boleto boleto, InputStream templateInput) { + + checkBoleto(boleto); + checkTemplateFile(templateInput); + + this.pdfViewer = new PdfViewer(boleto); + + setTemplate(templateInput); + } + + /** + *

+ * Instancia o visualizador com um template determinado. + *

+ * + * @param boleto + * Boleto preenchido + * @param template + * Template PDF o qual o boleto será gerado + * + * @throws IllegalArgumentException + * Caso o {@code boleto} ou {@code template} seja nulo + */ + public BoletoViewer(Boleto boleto, byte[] template) { + + checkBoleto(boleto); + checkTemplateFile(template); + + this.pdfViewer = new PdfViewer(boleto); + + setTemplate(template); + } + + /** + * Para uso interno do componente + */ + protected BoletoViewer() { + + this.pdfViewer = new PdfViewer(); + } + + /** + * Para uso interno do componente + */ + protected BoletoViewer(PdfViewer pdfViewer) { + + this.pdfViewer = pdfViewer; + } + + /** + *

+ * Instancia o visualizador com o template padrão. Caso o boleto seja nulo, + * nenhuma instância do viewer é criada. + *

+ * + * @param boleto + * Boleto preenchido + * + * @throws IllegalArgumentException + * Caso o {@code boleto} seja nulo + */ + public static BoletoViewer create(Boleto boleto) { + + checkBoleto(boleto); + + return new BoletoViewer(boleto); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. Ex: Se a lista contém + * 10 boletos, ao final será gerado um único arquivo PDF contendo os 10 + * boletos, sendo 1 boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * + * @return Arquivo PDF em array de bytes gerado com os boletos da lista + * + * @since 0.2 + */ + public static byte[] groupInOnePDF(List boletos) { + + checkBoletosList(boletos); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer()); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. + * Ex: Se a lista contém 10 boletos, ao final será gerado + * um único arquivo PDF contendo os 10 boletos, sendo 1 + * boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destPath + * Caminho para o arquivo que armazenará os boletos + * + * @return Arquivo PDF gerado com os boletos da lista + * + * @since 0.2 + */ + public static File groupInOnePDF(List boletos, String destPath) { + + checkBoletosList(boletos); + checkDestPath(destPath); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer(), + new File(destPath)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. + * Ex: Se a lista contém 10 boletos, ao final será gerado + * um único arquivo PDF contendo os 10 boletos, sendo 1 + * boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destFile + * Arquivo que armazenará os boletos + * + * @return Arquivo PDF gerado com os boletos da lista + * + * @since 0.2 + */ + public static File groupInOnePDF(List boletos, File destFile) { + + checkBoletosList(boletos); + checkDestFile(destFile); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer(), destFile); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. + * Ex: Se a lista contém 10 boletos, ao final será gerado + * um único arquivo PDF contendo os 10 boletos, sendo 1 + * boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param templatePath + * Caminho para o arquivo com o template para geração + * @return Arquivo PDF em array de bytes gerado com os boletos da lista + * + * @since 0.2 + */ + public static byte[] groupInOnePdfWithTemplate(List boletos, String templatePath) { + + checkBoletosList(boletos); + checkTemplatePath(templatePath); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer().setTemplate(templatePath)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. Ex: Se a lista contém + * 10 boletos, ao final será gerado um único arquivo PDF contendo os 10 + * boletos, sendo 1 boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param templateUrl + * Arquivo com o template para geração + * @return Arquivo PDF em array de bytes gerado com os boletos da lista + * + * @since 0.2 + */ + public static byte[] groupInOnePdfWithTemplate(List boletos, URL templateUrl) { + + checkBoletosList(boletos); + checkTemplateFile(templateUrl); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer().setTemplate(templateUrl)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. Ex: Se a lista contém + * 10 boletos, ao final será gerado um único arquivo PDF contendo os 10 + * boletos, sendo 1 boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param templateFile + * Arquivo com o template para geração + * @return Arquivo PDF em array de bytes gerado com os boletos da lista + * + * @since 0.2 + */ + public static byte[] groupInOnePdfWithTemplate(List boletos, File templateFile) { + + checkBoletosList(boletos); + checkTemplateFile(templateFile); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer().setTemplate(templateFile)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. Ex: Se a lista contém + * 10 boletos, ao final será gerado um único arquivo PDF contendo os 10 + * boletos, sendo 1 boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param templateInput + * Arquivo com o template para geração + * @return Arquivo PDF em array de bytes gerado com os boletos da lista + * + * @since 0.2 + */ + public static byte[] groupInOnePdfWithTemplate(List boletos, InputStream templateInput) { + + checkBoletosList(boletos); + checkTemplateFile(templateInput); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer().setTemplate(templateInput)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. Ex: Se a lista contém + * 10 boletos, ao final será gerado um único arquivo PDF contendo os 10 + * boletos, sendo 1 boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param template + * Arquivo com o template para geração + * @return Arquivo PDF em array de bytes gerado com os boletos da lista + * + * @since 0.2 + */ + public static byte[] groupInOnePdfWithTemplate(List boletos, byte[] template) { + + checkBoletosList(boletos); + checkTemplateFile(template); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer().setTemplate(template)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. + * Ex: Se a lista contém 10 boletos, ao final será gerado + * um único arquivo PDF contendo os 10 boletos, sendo 1 + * boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destPath + * Caminho para o arquivo que armazenará os boletos + * @param templatePath + * Caminho para o arquivo com o template para geração + * @return Arquivo PDF gerado com os boletos da lista + * + * @since 0.2 + */ + public static File groupInOnePdfWithTemplate(List boletos, String destPath, + String templatePath) { + + checkBoletosList(boletos); + checkDestPath(destPath); + checkTemplatePath(templatePath); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer().setTemplate(templatePath), + new File(destPath)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. + * Ex: Se a lista contém 10 boletos, ao final será gerado + * um único arquivo PDF contendo os 10 boletos, sendo 1 + * boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destPath + * Caminho para o arquivo que armazenará os boletos + * @param templateFile + * Arquivo com o template para geração + * @return Arquivo PDF gerado com os boletos da lista + * + * @since 0.2 + */ + public static File groupInOnePdfWithTemplate(List boletos, String destPath, + File templateFile) { + + checkBoletosList(boletos); + checkDestPath(destPath); + checkTemplateFile(templateFile); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer().setTemplate(templateFile), + new File(destPath)); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. + * Ex: Se a lista contém 10 boletos, ao final será gerado + * um único arquivo PDF contendo os 10 boletos, sendo 1 + * boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destFile + * Arquivo que armazenará os boletos + * @param templatePath + * Caminho para o arquivo com o template para geração + * @return Arquivo PDF gerado com os boletos da lista + * + * @since 0.2 + */ + public static File groupInOnePdfWithTemplate(List boletos, File destFile, + String templatePath) { + + checkBoletosList(boletos); + checkDestFile(destFile); + checkTemplatePath(templatePath); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer() + .setTemplate(templatePath), destFile); + } + + /** + *

+ * Agrupa os boletos da lista em um único arquivo PDF. + * Ex: Se a lista contém 10 boletos, ao final será gerado + * um único arquivo PDF contendo os 10 boletos, sendo 1 + * boleto em cada página. + *

+ * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destFile + * Arquivo que armazenará os boletos + * @param templateFile + * Arquivo com o template para geração + * @return Arquivo PDF gerado com os boletos da lista + * + * @since 0.2 + */ + public static File groupInOnePdfWithTemplate(List boletos, File destFile, + File templateFile) { + + checkBoletosList(boletos); + checkDestFile(destFile); + checkTemplateFile(templateFile); + + return PdfViewerMultiProcessor.groupInOnePDF(boletos, new BoletoViewer() + .setTemplate(templateFile), destFile); + } + + /** + *

+ * Agrupa os boletos das listas com seus respectivos templates em um único + * arquivo PDF. Caso exista sequência na coleção, a mesma é mantida. + *

+ * + * + * @param templatesAndBoletos + * Coleção de templates e boletos a serem agrupados + * + * @return Arquivo PDF em array de bytes gerado com os boletos fornecidos + * + * @since 0.2 + */ + public static byte[] groupInOnePdfWithTemplates(Collection>> templatesAndBoletos) { + + checkTemplateBoletosEntries(templatesAndBoletos); + + return PdfViewerMultiProcessor.groupInOnePDF(templatesAndBoletos); + } + + /** + *

+ * Agrupa os boletos das listas com seus respectivos templates em um único + * arquivo PDF. Caso exista sequência na coleção, a mesma é mantida. + *

+ * + * + * @param templatesAndBoletos + * Coleção de templates e boletos a serem agrupados + * + * @param destFile + * Arquivo que armazenará os boletos + * + * @return Arquivo PDF em array de bytes gerado com os boletos fornecidos + * + * @since 0.2 + */ + public static File groupInOnePdfWithTemplates(Collection>> templatesAndBoletos, File destFile) { + + checkTemplateBoletosEntries(templatesAndBoletos); + checkDestFile(destFile); + + try { + + return Files.bytesToFile(destFile, PdfViewerMultiProcessor.groupInOnePDF(templatesAndBoletos)); + + } catch (Exception e) { + + return Exceptions.throwIllegalStateException("Erro inesperado!", e); + } + } + + /** + *

+ * Agrupa os boletos das listas com seus respectivos templates em um único + * arquivo PDF. Caso exista sequência no Map, a mesma dependerá da chamada + * ao método {@link java.util.Map#entrySet() entrySet} do mesmo. + *

+ * + * + * @param templatesAndBoletos + * Mapa de templates e boletos a serem agrupados + * + * @return Arquivo PDF em array de bytes gerado com os boletos fornecidos + * + * @since 0.2 + */ + public static byte[] groupInOnePdfWithTemplates(Map> templatesAndBoletos) { + + checkTemplateBoletosEntries(templatesAndBoletos); + + return groupInOnePdfWithTemplates(templatesAndBoletos.entrySet()); + } + + /** + *

+ * Agrupa os boletos das listas com seus respectivos templates em um único + * arquivo PDF. Caso exista sequência no Map, a mesma dependerá da chamada + * ao método {@link java.util.Map#entrySet() entrySet} do mesmo. + *

+ * + * + * @param templatesAndBoletos + * Mapa de templates e boletos a serem agrupados + * + * @param destFile + * Arquivo que armazenará os boletos + * + * @return Arquivo PDF em array de bytes gerado com os boletos fornecidos + * + * @since 0.2 + */ + public static File groupInOnePdfWithTemplates(Map> templatesAndBoletos, File destFile) { + + checkTemplateBoletosEntries(templatesAndBoletos); + checkDestFile(destFile); + + return groupInOnePdfWithTemplates(templatesAndBoletos.entrySet(), destFile); + } + + /** + *

+ * Agrupa os boletos das listas com seus respectivos templates em um único + * arquivo PDF. Caso exista sequência no Map, a mesma dependerá da chamada + * ao método {@link java.util.Map#entrySet() entrySet} do mesmo. + *

+ * * + * @param boletos + * Lista com os boletos a serem gerados + * + * @return Arquivo PDF em array de bytes gerado com os boletos fornecidos + * + * @since 0.2 + */ + public static List onePerPDF(List boletos) { + + checkBoletosList(boletos); + + return PdfViewerMultiProcessor.onePerPDF(boletos); + } + + /** + *

+ * Gera o arquivo PDF para cada boleto contido na lista. O nome do arquivo + * segue a forma:
+ *
+ * diretorio + (/ ou \\) + (indice do arquivo na lista + 1) + ".pdf" + *

+ * + *

+ * Exemplo, uma lista com 3 boletos: {@code onePerPDF(boletos, file);}
+ *
+ * Arquivos gerados: + *

    + *
  • 1.pdf
  • + *
  • 2.pdf
  • + *
  • 3.pdf
  • + *
+ *

+ * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destPath + * Diretório o qual os boletos serão criados + * + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + public static List onePerPDF(List boletos, String destPath) { + + checkBoletosList(boletos); + checkDestPath(destPath); + + return onePerPDF(boletos, new File(destPath), EMPTY, EMPTY); + } + + /** + *

+ * Gera o arquivo PDF para cada boleto contido na lista. O nome do arquivo + * segue a forma:
+ *
+ * diretorio + (/ ou \\) + (indice do arquivo na lista + 1) + ".pdf" + *

+ * + *

+ * Exemplo, uma lista com 3 boletos: {@code onePerPDF(boletos, file);}
+ *
+ * Arquivos gerados: + *

    + *
  • 1.pdf
  • + *
  • 2.pdf
  • + *
  • 3.pdf
  • + *
+ *

+ * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destDir + * Diretório o qual os boletos serão criados + * + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + public static List onePerPDF(List boletos, File destDir) { + + checkBoletosList(boletos); + checkDestDir(destDir); + + return onePerPDF(boletos, destDir, EMPTY, EMPTY); + } + + /** + *

+ * Gera o arquivo PDF para cada boleto contido na lista. O nome do arquivo + * segue a forma:
+ *
+ * diretorio + (/ ou \\) prefixo + (indice do arquivo na lista + 1) + ".pdf" + *

+ * + *

+ * Exemplo, uma lista com 3 boletos: {@code onePerPDF(boletos, file, + * "BoletoPrefixo");}
+ *
+ * Arquivos gerados: + *

    + *
  • BoletoPrefixo1.pdf
  • + *
  • BoletoPrefixo2.pdf
  • + *
  • BoletoPrefixo3.pdf
  • + *
+ *

+ * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destPath + * Diretório o qual os boletos serão criados + * @param prefixo + * Prefixo do nome do arquivo + * + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + public static List onePerPDF(List boletos, String destPath, String prefixo) { + + checkBoletosList(boletos); + checkDestPath(destPath); + + return onePerPDF(boletos, new File(destPath), prefixo, EMPTY); + } + + /** + *

+ * Gera o arquivo PDF para cada boleto contido na lista. O nome do arquivo + * segue a forma:
+ *
+ * diretorio + (/ ou \\) prefixo + (indice do arquivo na lista + 1) + ".pdf" + *

+ * + *

+ * Exemplo, uma lista com 3 boletos: {@code onePerPDF(boletos, file, + * "BoletoPrefixo");}
+ *
+ * Arquivos gerados: + *

    + *
  • BoletoPrefixo1.pdf
  • + *
  • BoletoPrefixo2.pdf
  • + *
  • BoletoPrefixo3.pdf
  • + *
+ *

+ * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destDir + * Diretório o qual os boletos serão criados + * @param prefixo + * Prefixo do nome do arquivo + * + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + public static List onePerPDF(List boletos, File destDir, String prefixo) { + + checkBoletosList(boletos); + checkDestDir(destDir); + + return onePerPDF(boletos, destDir, prefixo, EMPTY); + } + + /** + *

+ * Gera o arquivo PDF para cada boleto contido na lista. O nome do arquivo + * segue a forma:
+ *
+ * diretorio + (/ ou \\) prefixo + (indice do arquivo na lista + 1) + sufixo + ".pdf" + *

+ * + *

+ * Exemplo, uma lista com 3 boletos: {@code onePerPDF(boletos, file, + * "BoletoPrefixo", "exSufixo");}
+ *
+ * Arquivos gerados: + *

    + *
  • BoletoPrefixo1exSufixo.pdf
  • + *
  • BoletoPrefixo2exSufixo.pdf
  • + *
  • BoletoPrefixo3exSufixo.pdf
  • + *
+ *

+ * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destPath + * Diretório o qual os boletos serão criados + * @param prefixo + * Prefixo do nome do arquivo + * @param sufixo + * Sufixo do nome do arquivo + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + public static List onePerPDF(List boletos, String destPath, String prefixo, String sufixo) { + + checkBoletosList(boletos); + checkDestPath(destPath); + + return onePerPDF(boletos, new File(destPath), prefixo, sufixo); + } + + /** + *

+ * Gera o arquivo PDF para cada boleto contido na lista. O nome do arquivo + * segue a forma:
+ *
+ * diretorio + (/ ou \\) prefixo + (indice do arquivo na lista + 1) + sufixo + ".pdf" + *

+ * + *

+ * Exemplo, uma lista com 3 boletos: {@code onePerPDF(boletos, file, + * "BoletoPrefixo", "exSufixo");}
+ *
+ * Arquivos gerados: + *

    + *
  • BoletoPrefixo1exSufixo.pdf
  • + *
  • BoletoPrefixo2exSufixo.pdf
  • + *
  • BoletoPrefixo3exSufixo.pdf
  • + *
+ *

+ * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destDir + * Diretório o qual os boletos serão criados + * @param prefixo + * Prefixo do nome do arquivo + * @param sufixo + * Sufixo do nome do arquivo + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + public static List onePerPDF(List boletos, File destDir, String prefixo, String sufixo) { + + checkBoletosList(boletos); + checkDestDir(destDir); + + List files = new ArrayList(boletos.size()); + + files.addAll(PdfViewerMultiProcessor.onePerPDF(boletos, destDir, prefixo, sufixo)); + + return files; + } + + public static List onePerPDFWithTemplate(List boletos, String templatePath) { + + checkBoletosList(boletos); + checkTemplatePath(templatePath); + + return PdfViewerMultiProcessor.onePerPDF(boletos, new BoletoViewer().setTemplate(templatePath)); + } + + public static List onePerPDFWithTemplate(List boletos, URL templateUrl) { + + checkBoletosList(boletos); + checkTemplateFile(templateUrl); + + return PdfViewerMultiProcessor.onePerPDF(boletos, new BoletoViewer().setTemplate(templateUrl)); + } + + public static List onePerPDFWithTemplate(List boletos, File templateFile) { + + checkBoletosList(boletos); + checkTemplateFile(templateFile); + + return PdfViewerMultiProcessor.onePerPDF(boletos, new BoletoViewer().setTemplate(templateFile)); + } + + public static List onePerPDFWithTemplate(List boletos, InputStream templateInput) { + + checkBoletosList(boletos); + checkTemplateFile(templateInput); + + return PdfViewerMultiProcessor.onePerPDF(boletos, new BoletoViewer().setTemplate(templateInput)); + } + + public static List onePerPDFWithTemplate(List boletos, byte[] template) { + + checkBoletosList(boletos); + checkTemplateFile(template); + + return PdfViewerMultiProcessor.onePerPDF(boletos, new BoletoViewer().setTemplate(template)); + } + + /** + *

+ * Agrupa os boletos das listas com seus respectivos templates em um único + * arquivo PDF. Caso exista sequência na coleção, a mesma é mantida. + *

+ * + * + * @param templatesAndBoletos + * Coleção de templates e boletos a serem agrupados + * + * @return Arquivo PDF em array de bytes gerado com os boletos fornecidos + * + * @since 0.2 + */ + public static List onePerPdfWithTemplates(Collection>> templatesAndBoletos) { + + checkTemplateBoletosEntries(templatesAndBoletos); + + return PdfViewerMultiProcessor.onePerPDF(templatesAndBoletos); + } + + /** + * Indica se o PDF do boleto gerado deve ser comprimido completamente ou + * não, o padrão é true. + * + *

+ * "Full compression" foi introduzido no modelo de documento de PDF 1.5, o + * que quer dizer que os boletos gerados por padrão pelo Bopepo estão nesse + * modelo a menos que se utilize este método informando o contrário: {@code + * #setPdfFullCompression(false)}. + *

+ *

+ * Um PDF que seja "fully compressed", só pode ser lido por um visualizador + * PDF como Acrobat Reader 6 ou superior. Entretanto, se o documento + * não for comprimido [ {@code #setPdfFullCompression(false)} ], o boleto pdf + * gerado no modelo de documento PDF 1.4 poderá ser lido por um visualizador + * tal qual Acrobat Reader 5 ou superior. + *

+ * + * @param option Escolha de compressão + * + * @return Esta instância após a operação + * + * @since 0.2 + */ + public BoletoViewer setPdfFullCompression(boolean option){ + + pdfViewer.setFullCompression(option); + + return this; + } + + /** + * Define o título do documento PDF gerado. + * + * @param titulo + * para ser exibido como título do documento PDF + * @return Esta instância após a operação + * + * @since 0.2 + */ + public BoletoViewer setPdfTitulo(String titulo) { + + pdfViewer.setTitle(titulo); + + return this; + } + + /** + * Define se o título do documento PDF gerado será mostrado ou não (padrão true). + * + * @param opcao + * para exibir título do documento PDF (true) + * @return Esta instância após a operação + * + * @since 0.2 + */ + public BoletoViewer setPdfExibirTitulo(boolean opcao) { + + pdfViewer.setDisplayTitle(opcao); + + return this; + } + + /** + * Define o autor do documento PDF gerado. + * + * @param autor + * do documento PDF + * @return Esta instância após a operação + * + * @since 0.2 + */ + public BoletoViewer setPdfAutor(String autor) { + + pdfViewer.setAuthor(autor); + + return this; + } + + /** + * Define o assunto do documento PDF gerado. + * + * @param assunto + * do documento PDF + * @return Esta instância após a operação + * + * @since 0.2 + */ + public BoletoViewer setPdfAssunto(String assunto) { + + pdfViewer.setSubject(assunto); + + return this; + } + + /** + * Define as palavras chave do documento PDF gerado. + * + * @param palavrasChave + * do documento PDF + * @return Esta instância após a operação + * + * @since 0.2 + */ + public BoletoViewer setPdfPalavrasChave(String palavrasChave) { + + pdfViewer.setKeywords(palavrasChave); + + return this; + } + + /** + * Define se o os campos do documento PDF gerado devem ser removidos ou não (padrão true). + * + * @param opcao + * para remover campos do documento PDF (true) + * @return Esta instância após a operação + * + * @since 0.2 + */ + public BoletoViewer setPdfRemoverCampos(boolean opcao) { + + pdfViewer.setRemoveFields(opcao); + + return this; + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param template + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + * + * @since 0.2 + */ + public BoletoViewer setTemplate(byte[] template) { + + checkTemplateFile(template); + + this.pdfViewer.setTemplate(template); + + return this; + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templateUrl + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public BoletoViewer setTemplate(URL templateUrl) { + + checkTemplateFile(templateUrl); + + this.pdfViewer.setTemplate(templateUrl); + + return this; + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templateInput + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public BoletoViewer setTemplate(InputStream templateInput) { + + checkTemplateFile(templateInput); + + this.pdfViewer.setTemplate(templateInput); + + return this; + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templatePath + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public BoletoViewer setTemplate(String templatePath) { + + checkTemplatePath(templatePath); + + this.pdfViewer.setTemplate(templatePath); + + return this; + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templateFile + * + * @since 0.2 + * + * @return Esta instância após a operação + * + * @throws IllegalArgumentException + * Caso o {@code template} seja nulo + */ + public BoletoViewer setTemplate(File templateFile) { + + checkTemplateFile(templateFile); + + this.pdfViewer.setTemplate(templateFile); + + return this; + } + + /** + *

+ * Atribui um boleto para uso no visualizador. {@code Null} não é permitido. + *

+ * + * @param boleto + * Boleto a ser visualizado + * + * @since 0.2 + * + * @return Esta instância após a operação + */ + public BoletoViewer setBoleto(Boleto boleto) { + + checkBoleto(boleto); + + updateViewerPDF(boleto); + + return this; + } + + /** + *

+ * Caso algum template tenha sido utilizado, este método define que após sua + * execução o boleto será consturído com o template padrão. + *

+ * + * @since 0.2 + * + * @return Esta instância após a operação + */ + public BoletoViewer removeTemplate() { + + final String DEFAULT = null; + + if (isNotNull(pdfViewer)) { + pdfViewer.setTemplate(DEFAULT); + } + + return this; + } + + /** + *

+ * Retorna o aquivo template utilizado pelo visualizador, que pode ser o + * template padrão ou outro. + *

+ * + * @return Arquivo template + * + * @since 0.2 + */ + public byte[] getTemplate() { + + return pdfViewer.getTemplate(); + } + + /** + *

+ * Retorna o boleto usado pelo visualizador + *

+ * + * @return o boleto + * + * @since 0.2 + */ + public Boleto getBoleto() { + + return pdfViewer.getBoleto(); + } + + /** + *

+ * Retorna o boleto em um arquivo pdf. + *

+ * + * @param destPath + * Caminho onde será criado o arquivo pdf + * @return Boleo em File + * + * @since 0.2 + */ + public File getPdfAsFile(String destPath) { + + if (log.isDebugEnabled()) { + log.debug("documento instance : " + pdfViewer); + } + + return pdfViewer.getFile(destPath); + } + + /** + *

+ * Retorna o boleto em um arquivo pdf. + *

+ * + * @param destFile + * Caminho onde será criado o arquivo pdf + * @return Boleto em File + * + * @since 0.2 + */ + public File getPdfAsFile(File destFile) { + + if (log.isDebugEnabled()) { + log.debug("documento instance : " + pdfViewer); + } + + return pdfViewer.getFile(destFile); + } + + /** + *

+ * Retorna o boleto em uma stream de bytes. + *

+ * + * @return Boleto em ByteArrayOutputStream + * + * @since 0.2 + */ + public ByteArrayOutputStream getPdfAsStream() { + + if (log.isDebugEnabled()) { + log.debug("documento instance : " + pdfViewer); + } + + return pdfViewer.getStream(); + + } + + /** + *

+ * Retorna o boleto em um array de bytes. + *

+ * + * @return Boleto em byte[] + * + * @since 0.2 + */ + public byte[] getPdfAsByteArray() { + + if (log.isDebugEnabled()) { + log.debug("documento instance : " + pdfViewer); + } + + return pdfViewer.getBytes(); + } + + /** + *

+ * Atualiza o objeto BoletoViewer mantendo as "invariantes". + *

+ * + * @param boleto + * + * @since 0.2 + */ + private void updateViewerPDF(Boleto boleto) { + + if (isNotNull(this.pdfViewer)) { + + this.pdfViewer.setBoleto(boleto); + + } else { + + this.pdfViewer = new PdfViewer(boleto); + } + } + + private static void checkDestPath(String path) { + + checkString(path, "Caminho destinado a geração do(s) arquivo(s) não contém informação!"); + } + + private static void checkTemplatePath(String path) { + + checkString(path, "Caminho do template não contém informação!"); + } + + private static void checkTemplateFile(Object template) { + + Objects.checkNotNull(template, "Arquivo de template nulo!"); + } + + private static void checkString(String str, String msg) { + + Objects.checkNotNull(str); + Strings.checkNotBlank(str, msg); + } + + private static void checkDestDir(File file) { + + Objects.checkNotNull(file, "Diretório destinado a geração do(s) boleto(s) nulo!"); + Objects.checkArgument(file.isDirectory(), "Isto não é um diretório válido!"); + } + + private static void checkDestFile(File file) { + + Objects.checkNotNull(file, "Arquivo destinado a geração do(s) boleto(s) nulo!"); + } + + private static void checkBoleto(Boleto boleto) { + + Objects.checkNotNull(boleto, "Boleto nulo!"); + } + + private static void checkBoletosList(List boletos) { + + Objects.checkNotNull(boletos, "Lista de boletos nula!"); + Collections.checkNotEmpty(boletos, "A Lista de boletos está vazia!"); + } + + private static void checkTemplateBoletosEntries(Collection>> templatesAndBoletos) { + + Collections.checkNotEmpty(templatesAndBoletos, "A Coleção de pares: (template,boletos) está vazia!"); + } + + private static void checkTemplateBoletosEntries(Map> templatesAndBoletos) { + + Collections.checkNotEmpty(templatesAndBoletos, "O Mapa (template,boletos) está vazio!"); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/PdfViewer.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/PdfViewer.java new file mode 100644 index 0000000..43a9a7f --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/PdfViewer.java @@ -0,0 +1,478 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:05:16 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:05:16 + * + */ + +package org.jrimum.bopepo.view; + +import static org.jrimum.utilix.Objects.isNull; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.log4j.Logger; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.pdf.Files; +import org.jrimum.bopepo.pdf.PdfDocMix; +import org.jrimum.bopepo.view.info.BoletoInfoViewBuilder; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * Classe utilizada para preencher o PDF do boleto com os dados do título e boleto. + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +class PdfViewer { + + private static Logger log = Logger.getLogger(PdfViewer.class); + + private final ResourceBundle resourceBundle; + + private PdfDocMix doc; + private Boleto boleto; + private byte[] template; + + /** + * Para uso interno do componente + * + * @since 0.2 + * + */ + protected PdfViewer() { + + resourceBundle = new ResourceBundle(); + doc = PdfDocMix.create(); + } + + /** + * Para uso interno do componente + * + * @param boleto + * + * @since 0.2 + * + */ + protected PdfViewer(Boleto boleto) { + + this(); + + this.boleto = boleto; + } + + /** + * Para uso interno do componente + * + * @param boleto Boleto para visualização + * @param template Template a ser utilizado na visualização + * + * @since 0.2 + * + */ + protected PdfViewer(Boleto boleto, byte[] template) { + + this(boleto); + + setTemplate(template); + } + + /** + * Retorna o boleto em forma de arquivo PDF. + * + * @param destPath + * Caminho completo do arquivo o qual o boleto será gerado + * @return Boleto em forma de arquivo PDF + * + * @since 0.2 + * + */ + protected File getFile(String destPath) { + + + return getFile(new File(destPath)); + } + + /** + * Retorna o boleto em forma de arquivo PDF. + * + * @param destFile + * Arquivo o qual o boleto será gerado + * @return Boleto em forma de arquivo PDF + * @throws IllegalStateException + * Caso ocorral algum problema imprevisto + * + * @since 0.2 + * + */ + protected File getFile(File destFile) { + + try { + + processarPdf(); + + return doc.toFile(destFile); + + } catch (Exception e) { + + log.error("Erro durante a criação do arquivo! " + e.getLocalizedMessage(), e); + + return Exceptions.throwIllegalStateException("Erro ao tentar criar arquivo! " +"Causado por " + e.getLocalizedMessage(), e); + } + } + + /** + * Retorna o arquivo PDF em um stream de array de bytes. + * + * @return O PDF em stream + * + * @since 0.2 + * + */ + protected ByteArrayOutputStream getStream() { + + try { + + processarPdf(); + + return doc.toStream(); + + } catch (Exception e) { + + log.error("Erro durante a criação do stream! " + e.getLocalizedMessage(), e); + + return Exceptions.throwIllegalStateException("Erro durante a criação do stream! " +"Causado por " + e.getLocalizedMessage(), e); + } + } + + /** + * Retorna o arquivo PDF em array de bytes. + * + * @return O PDF em array de bytes + * + * @since 0.2 + * + */ + protected byte[] getBytes() { + + try { + + processarPdf(); + + return doc.toBytes(); + + } catch (Exception e) { + + log.error("Erro durante a criação do array de bytes! " + e.getLocalizedMessage(), e); + + return Exceptions.throwIllegalStateException("Erro durante a criação do array de bytes! " +"Causado por " + e.getLocalizedMessage(), e); + } + } + + /** + * Retorna o template atual do viewer em array de bytes. + * + * @return Template em bytes + * + * @since 0.2 + * + */ + protected byte[] getTemplate() { + return template; + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param template + * + * @since 0.2 + * + */ + protected void setTemplate(byte[] template) { + this.template = template; + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templateUrl + * + * @since 0.2 + * + */ + protected void setTemplate(URL templateUrl) { + try { + setTemplate(templateUrl.openStream()); + } catch (IOException e) { + Exceptions.throwIllegalStateException(e); + } + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templateInput + * + * @since 0.2 + * + */ + protected void setTemplate(InputStream templateInput) { + try { + setTemplate(Files.toByteArray(templateInput)); + } catch (IOException e) { + Exceptions.throwIllegalStateException(e); + } + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templatePath + * + * @since 0.2 + * + */ + protected void setTemplate(String templatePath) { + setTemplate(new File(templatePath)); + } + + /** + * Define o template que será utilizado para construir o boleto. + * + * @param templateFile + * + * @since 0.2 + * + */ + protected void setTemplate(File templateFile) { + try { + setTemplate(Files.fileToBytes(templateFile)); + } catch (IOException e) { + Exceptions.throwIllegalStateException(e); + } + } + + /** + * Habilita o modo full compression do PDF veja + * {@link com.lowagie.text.pdf.PdfStamper#setFullCompression()}. + * + *

+ * Itext doc: Sets the document's compression to the new 1.5 mode with + * object streams and xref streams. + *

+ * + * @param option + * Escolha de compressão. + * + * @since 0.2 + * + */ + protected void setFullCompression(boolean option){ + doc.withFullCompression(option); + } + + /** + * Define o título do documento PDF gerado. + * + * @param title + * para ser exibido como título do documento PDF + * + * @since 0.2 + */ + protected void setTitle(String title){ + doc.withTitle(title); + } + + /** + * Define se o título do documento PDF gerado será mostrado ou não (padrão true). + * + * @param option + * para exibir título do documento PDF (true) + * + * @since 0.2 + */ + protected void setDisplayTitle(boolean option) { + doc.withDisplayDocTilteOption(option); + } + + /** + * Define o autor do documento PDF gerado. + * + * @param author + * do documento PDF + * + * @since 0.2 + */ + protected void setAuthor(String author){ + doc.withAuthor(author); + } + + /** + * Define o assunto do documento PDF gerado. + * + * @param subject + * do documento PDF + * + * @since 0.2 + */ + protected void setSubject(String subject) { + doc.withSubject(subject); + } + + /** + * Define as palavras chave do documento PDF gerado. + * + * @param keywords + * do documento PDF + * + * @since 0.2 + */ + protected void setKeywords(String keywords) { + doc.withKeywords(keywords); + } + + /** + * Define se o os campos do documento PDF gerado devem ser removidos ou não (padrão true). + * + * @param option + * para remover campos do documento PDF (true) + * + * @since 0.2 + */ + protected void setRemoveFields(boolean option) { + doc.removeFields(option); + } + + /** + * @return the boleto + * + * @since 0.2 + * + */ + protected Boleto getBoleto() { + return this.boleto; + } + + /** + * Define o boleto a ser usado no preenchimento do PDF. + * + * @param boleto + * + * @since 0.2 + */ + protected void setBoleto(Boleto boleto) { + this.boleto = boleto; + } + + + /** + * Processa o PDF colocando os dados do Boleto no PDF. + * + * @since 0.2 + */ + private void processarPdf(){ + + byte[] template = null; + + if (isTemplateFromResource()) { + template = getTemplateFromResource(); + } else { + template = getTemplate(); + } + + doc.withTemplate(template); + + BoletoInfoViewBuilder builder = new BoletoInfoViewBuilder(this.resourceBundle,this.boleto).build(); + + doc.putAllTexts(builder.texts()); + doc.putAllImages(builder.images()); + } + + /** + * Retorna o template padrão a ser usado, dependendo se o boleto é com ou + * sem sacador avalsita. + * + * @return URL do template padrão + * + * @since 0.2 + * + */ + private byte[] getTemplateFromResource() { + + if (boleto.getTitulo().hasSacadorAvalista()) { + + return resourceBundle.getTemplateComSacadorAvalista(); + + } else { + + return resourceBundle.getTemplateSemSacadorAvalista(); + } + } + + /** + * Verifica se o template que será utilizado virá do resource ou é externo, + * ou seja, se o usuário definiu ou não um template. + * + * @return true caso o template que pode ser definido pelo usuário for null; + * false caso o usuário tenha definido um template. + * + * @since 0.2 + * + */ + private boolean isTemplateFromResource() { + + return isNull(getTemplate()); + } + + + /** + * Exibe os valores de instância. + * + * @see org.jrimum.utilix.Objects#toString() + */ + @Override + public String toString() { + + ToStringBuilder tsb = new ToStringBuilder(this); + + tsb.append(boleto); + + return tsb.toString(); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/PdfViewerMultiProcessor.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/PdfViewerMultiProcessor.java new file mode 100644 index 0000000..ac1fae3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/PdfViewerMultiProcessor.java @@ -0,0 +1,264 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 19/03/2011 - ‎21:56:10 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 19/03/2011 - ‎21:56:10 + * + */ + +package org.jrimum.bopepo.view; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map.Entry; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.pdf.Files; +import org.jrimum.bopepo.pdf.PDFs; +import org.jrimum.utilix.Exceptions; + +/** + *

+ * Classe utilizada para preencher o PDF de boletos em lote. + *

+ * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +class PdfViewerMultiProcessor { + + /** + * Agrupa os boletos da lista em um único arquivo PDF. + * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param boletoViewer + * Visualizador contendo o template para geração + * + * @return Arquivo PDF em array de bytes gerado com os boletos da lista + * + * @since 0.2 + */ + protected static byte[] groupInOnePDF(List boletos, BoletoViewer boletoViewer) { + + byte[] file = null; + + List boletosEmBytes = new ArrayList(boletos.size()); + + for (Boleto bop : boletos) { + boletosEmBytes.add(boletoViewer.setBoleto(bop).getPdfAsByteArray()); + } + + try { + + file = PDFs.mergeFiles(boletosEmBytes); + + boletosEmBytes.clear(); + + return file; + + } catch (Exception e) { + + return Exceptions.throwIllegalStateException("Erro durante geração do PDF! Causado por " + e.getLocalizedMessage(), e); + } + } + + /** + * Agrupa os boletos da lista em um único arquivo PDF. + * + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param boletoViewer + * Visualizador contendo o template para geração + * @param fileDest + * Arquivo o qual armazenará os boletos + * @return Arquivo PDF gerado com os boletos da lista + * + * @since 0.2 + */ + protected static File groupInOnePDF(List boletos, BoletoViewer boletoViewer, File fileDest) { + + try { + + return Files.bytesToFile(fileDest, groupInOnePDF(boletos, boletoViewer)); + + } catch (Exception e) { + + return Exceptions.throwIllegalStateException("Erro durante geração do PDF! Causado por " + e.getLocalizedMessage(), e); + } + } + + /** + * Agrupa os boletos das listas com seus respectivos templates em um único + * arquivo PDF. Caso exista sequência na coleção, a mesma é mantida. + * + * + * @param templatesAndBoletos + * Coleção de templates e boletos a serem agrupados + * + * @return Arquivo PDF em array de bytes gerado com os boletos fornecidos + * + * @since 0.2 + */ + protected static byte[] groupInOnePDF(Collection>> templatesAndBoletos) { + + byte[] file = null; + + List toMerge = new ArrayList(templatesAndBoletos.size()); + + BoletoViewer viewer = new BoletoViewer(); + + for(Entry> entry : templatesAndBoletos){ + + toMerge.add(groupInOnePDF(entry.getValue(), viewer.setTemplate(entry.getKey()))); + } + + file = PDFs.mergeFiles(toMerge); + + toMerge.clear(); + + return file; + } + + /** + * Gera um arquivo PDF para cada boleto contido na lista. O nome do arquivo + * segue a forma:
+ *
+ * diretorio + (/ ou \\) prefixo + (indice do arquivo na lista + 1) + sufixo + ".pdf" + * + *

+ * Exemplo, uma lista com 3 boletos: {@code onePerPDF(boletos, file, + * "BoletoPrefixo", "exSufixo");}
+ *
+ * Arquivos gerados: + *

    + *
  • BoletoPrefixo1exSufixo.pdf
  • + *
  • BoletoPrefixo2exSufixo.pdf
  • + *
  • BoletoPrefixo3exSufixo.pdf
  • + *
+ *

+ * + * @param boletos + * Lista com os boletos a serem agrupados + * @param destDir + * Diretório o qual os boletos serão criados + * @param prefixo + * Prefixo do nome do arquivo + * @param sufixo + * Sufixo do nome do arquivo + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + protected static List onePerPDF(List boletos, File destDir, String prefixo, String sufixo) { + + final List arquivos = new ArrayList(boletos.size()); + final BoletoViewer bv = new BoletoViewer(); + int cont = 1; + + for (Boleto bop : boletos) { + arquivos.add(bv.setBoleto(bop).getPdfAsFile(destDir.getAbsolutePath() + File.separator + prefixo + cont++ + sufixo + ".pdf")); + } + + return arquivos; + } + + /** + * Gera um arquivo PDF para cada boleto contido na lista utilizando o + * template padrão do Bopepo. + * + * @param boletos + * Lista com os boletos a serem agrupados + * + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + protected static List onePerPDF(List boletos) { + + return onePerPDF(boletos, new BoletoViewer()); + } + + /** + * Gera um arquivo PDF para cada boleto contido na lista utilizando o Viewer + * informado. + * + * @param boletos + * Lista com os boletos a serem agrupados + * @param boletoViewer + * Viewer contendo as informações necessárias, incluindo template + * + * @return Lista contendo os arquivos PDF gerados a partir da lista de + * boletos + * + * @since 0.2 + */ + protected static List onePerPDF(List boletos, BoletoViewer boletoViewer) { + + final List arquivos = new ArrayList(boletos.size()); + + for (Boleto bop : boletos) { + arquivos.add(boletoViewer.setBoleto(bop).getPdfAsByteArray()); + } + + return arquivos; + } + + /** + * Gera um arquivo PDF para cada template e boleto relacionado em cada + * Entry. Caso exista sequência na coleção, a mesma é mantida. + * + * + * @param templatesAndBoletos + * - Coleção de templates e boletos para geração de arquivo PDF + * + * @return Lista contendo os arquivos PDF gerados com cada template e seus + * boletos + * + * @since 0.2 + */ + protected static List onePerPDF(Collection>> templatesAndBoletos) { + + List boletos = new ArrayList(templatesAndBoletos.size()); + + BoletoViewer viewer = new BoletoViewer(); + + for(Entry> entry : templatesAndBoletos){ + + boletos.addAll(onePerPDF(entry.getValue(), viewer.setTemplate(entry.getKey()))); + } + + return boletos; + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/ResourceBundle.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/ResourceBundle.java new file mode 100644 index 0000000..3c8c98d --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/ResourceBundle.java @@ -0,0 +1,185 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 27/09/2011 - ‎16:11:14 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 27/09/2011 - ‎16:11:14 + * + */ + +package org.jrimum.bopepo.view; + +import static java.lang.String.format; +import static org.jrimum.utilix.Objects.isNull; + +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Map; +import java.util.TreeMap; + +import javax.imageio.ImageIO; + +import org.jrimum.bopepo.pdf.Files; +import org.jrimum.utilix.ClassLoaders; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; +import org.jrimum.utilix.text.Strings; + +/** + * Acessa os resources usados pelo Bopepo e os mantém nesta instância para as + * próximas chamadas. + * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public class ResourceBundle { + + /** + * Nome do arquivo pdf. + */ + public static final String BOLETO_TEMPLATE_COM_SACADOR_AVALISTA = "BoletoTemplateComSacadorAvalista.pdf"; + + /** + * Nome do arquivo pdf. + */ + public static final String BOLETO_TEMPLATE_SEM_SACADOR_AVALISTA = "BoletoTemplateSemSacadorAvalista.pdf"; + + /** + * Imagens usadas na instancia. + */ + private final Map imagensLogoBanco; + + /** + * Template do projeto usando na isntancia. + */ + private byte[] defaultTemplateComSacadorAvalista; + + /** + * Template do projeto usando na isntancia. + */ + private byte[] defaultTemplateSemSacadorAvalista; + + /** + * Inicia a instancia com os valores padrões necessários. + */ + public ResourceBundle(){ + imagensLogoBanco = new TreeMap(); + } + + /** + * + * + * @return template em bytes + */ + public byte[] getTemplateComSacadorAvalista() { + + if (isNull(defaultTemplateComSacadorAvalista)) { + + defaultTemplateComSacadorAvalista = loadPdf("BoletoTemplateComSacadorAvalista.pdf"); + } + + return defaultTemplateComSacadorAvalista; + } + + public byte[] getTemplateSemSacadorAvalista() { + + if (isNull(defaultTemplateSemSacadorAvalista)) { + + defaultTemplateSemSacadorAvalista = loadPdf("BoletoTemplateSemSacadorAvalista.pdf"); + } + + return defaultTemplateSemSacadorAvalista; + } + + public Image getLogotipoDoBanco(String codigo){ + + Image logo = imagensLogoBanco.get(codigo); + + if(isNull(logo)){ + logo = loadLogotipoDoBanco(codigo); + imagensLogoBanco.put(codigo, logo); + } + + return logo; + } + + private BufferedImage loadLogotipoDoBanco(String codigo){ + + final String path = "/img/%s.png"; + + Strings.checkNotBlank(codigo,"Codigo do banco não informado!"); + + final String logo = format(path, codigo); + + URL url = ClassLoaders.getResource(logo, this.getClass()); + + Objects.checkNotNull(url, format("Logo não \"%s\" não encontrada!",logo)); + + BufferedImage imageLogo = null; + + try { + imageLogo = ImageIO.read(url); + Objects.checkNotNull(imageLogo); + } catch (IOException e) { + Exceptions.throwIllegalStateException("Erro ao tentar ler a imagem logotipo do banco "+codigo,e); + } + + return imageLogo; + } + + private byte[] loadPdf(String fileName){ + + byte[] pdf = null; + InputStream is = null; + + try { + + is = ClassLoaders.getResource( + "/pdf/"+fileName, + this.getClass()).openStream(); + + pdf = Files.toByteArray(is); + + } catch (Exception e) { + + Exceptions.throwIllegalStateException(e); + + }finally{ + if(is != null){ + try { + is.close(); + } catch (Exception e) { + Exceptions.throwIllegalStateException(e); + } + } + } + + return pdf; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/BoletoInfoView.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/BoletoInfoView.java new file mode 100644 index 0000000..f1c3ac3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/BoletoInfoView.java @@ -0,0 +1,50 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 17/10/2013 - 00:09:30 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 17/10/2013 - 00:09:30 + * + */ + +package org.jrimum.bopepo.view.info; + +import java.awt.Image; +import java.util.Map; + +/** + * Contém todos os campos de imagem e texto usados para preencher o boleto. + * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public interface BoletoInfoView { + + public Map texts(); + + public Map images(); +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/BoletoInfoViewBuilder.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/BoletoInfoViewBuilder.java new file mode 100644 index 0000000..4af5223 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/BoletoInfoViewBuilder.java @@ -0,0 +1,308 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 17/12/2013 - 19:09:47 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 17/12/2013 - 19:09:47 + * + */ + +package org.jrimum.bopepo.view.info; + +import static org.jrimum.utilix.Objects.isNotNull; + +import java.awt.Image; +import java.util.Map; +import java.util.Map.Entry; +import java.util.WeakHashMap; + +import org.apache.log4j.Logger; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.BoletoCampo; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.BoletoInfoCampoView; +import org.jrimum.bopepo.view.info.campo.BoletoInfoCampoViewFactory; +import org.jrimum.utilix.Collections; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; + +/** + * Lê os dados do Boleto e monta-os para uso em {@linkplain #texts()} e {@linkplain #images()}. + * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public class BoletoInfoViewBuilder { + + private static Logger log = Logger.getLogger(BoletoInfoViewBuilder.class); + + private final Map text; + private final Map image; + + private final Map boletoTextosExtra; + private final Map boletoImagensExtra; + + private final BoletoInfoCampoView boletoInfoCampo; + + + /** + * Modo de instanciação não permitido. + * + * @throws IllegalStateException + * Caso haja alguma tentativa de utilização deste construtor. + */ + @SuppressWarnings("unused") + private BoletoInfoViewBuilder(){ + Exceptions.throwIllegalStateException("Instanciação não permitida!"); + text = null; + image = null; + boletoTextosExtra = null; + boletoImagensExtra = null; + boletoInfoCampo = null; + } + + public BoletoInfoViewBuilder(ResourceBundle resourceBundle, Boleto boleto){ + + Objects.checkNotNull(resourceBundle); + Objects.checkNotNull(boleto); + + text = new WeakHashMap(); + image = new WeakHashMap(); + + this.boletoTextosExtra = boleto.getTextosExtras(); + this.boletoImagensExtra = boleto.getImagensExtras(); + this.boletoInfoCampo = BoletoInfoCampoViewFactory.create(resourceBundle, boleto); + } + + public Map texts(){ + + return new WeakHashMap(text); + } + + public Map images(){ + + return new WeakHashMap(image); + } + + /** + * Preenche todos os campos com os dados do boleto contido na instância. + * + * @return Esta instância após operação + * + * @since 0.2 + */ + public BoletoInfoViewBuilder build(){ + + setLogotipoDoBanco(); + setCodigoDoBanco(); + setLinhaDigitavel(); + setCedente(); + setAgenciaCodigoCedente(); + setEspecie(); + setNossoNumero(); + setNumeroDocumento(); + setCprfCedente(); + setDataVencimeto(); + setValorDocumento(); + setDescontoAbatimento(); + setOutraDeducao(); + setMoraMulta(); + setOutroAcrescimo(); + setValorCobrado(); + setInstrucaoAoSacado(); + setInstrucaoAoCaixa(); + setSacado(); + setLocalPagamento(); + setDataDocumento(); + setEspecieDoc(); + setAceite(); + setDataProcessamento(); + setSacadorAvalista(); + setCodigoDeBarras(); + setCarteira(); + setTodosOsCamposTexto(); + setTodosOsCamposImagem(); + + return this; + } + + private void setInstrucaoAoSacado(){ + text.put(BoletoCampo.txtRsInstrucaoAoSacado.name(), boletoInfoCampo.getTextoRsInstrucaoAoSacado()); + } + + private void setCprfCedente(){ + text.put(BoletoCampo.txtRsCpfCnpj.name(), boletoInfoCampo.getTextoRsCpfCnpj()); + } + + private void setDataProcessamento(){ + text.put(BoletoCampo.txtFcDataProcessamento.name(), boletoInfoCampo.getTextoFcDataProcessamento()); + } + + private void setLocalPagamento(){ + text.put(BoletoCampo.txtFcLocalPagamento.name(), boletoInfoCampo.getTextoFcLocalPagamento()); + } + + private void setAceite(){ + text.put(BoletoCampo.txtFcAceite.name(), boletoInfoCampo.getTextoFcAceite()); + } + + private void setEspecieDoc(){ + text.put(BoletoCampo.txtFcEspecieDocumento.name(), boletoInfoCampo.getTextoFcEspecieDocumento()); + } + + private void setDataDocumento(){ + text.put(BoletoCampo.txtFcDataDocumento.name(), boletoInfoCampo.getTextoFcDataDocumento()); + } + + private void setCarteira(){ + text.put(BoletoCampo.txtFcCarteira.name(), boletoInfoCampo.getTextoFcCarteira()); + } + + private void setSacado(){ + text.put(BoletoCampo.txtRsSacado.name(), boletoInfoCampo.getTextoRsSacado()); + text.put(BoletoCampo.txtFcSacadoL1.name(), boletoInfoCampo.getTextoFcSacadoL1()); + text.put(BoletoCampo.txtFcSacadoL2.name(), boletoInfoCampo.getTextoFcSacadoL2()); + text.put(BoletoCampo.txtFcSacadoL3.name(), boletoInfoCampo.getTextoFcSacadoL3()); + } + + private void setSacadorAvalista(){ + text.put(BoletoCampo.txtFcSacadorAvalistaL1.name(), boletoInfoCampo.getTextoFcSacadorAvalistaL1()); + text.put(BoletoCampo.txtFcSacadorAvalistaL2.name(), boletoInfoCampo.getTextoFcSacadorAvalistaL2()); + text.put(BoletoCampo.txtFcSacadorAvalistaL3.name(), boletoInfoCampo.getTextoFcSacadorAvalistaL3()); + } + + private void setInstrucaoAoCaixa(){ + text.put(BoletoCampo.txtFcInstrucaoAoCaixa1.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa1()); + text.put(BoletoCampo.txtFcInstrucaoAoCaixa2.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa2()); + text.put(BoletoCampo.txtFcInstrucaoAoCaixa3.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa3()); + text.put(BoletoCampo.txtFcInstrucaoAoCaixa4.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa4()); + text.put(BoletoCampo.txtFcInstrucaoAoCaixa5.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa5()); + text.put(BoletoCampo.txtFcInstrucaoAoCaixa6.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa6()); + text.put(BoletoCampo.txtFcInstrucaoAoCaixa7.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa7()); + text.put(BoletoCampo.txtFcInstrucaoAoCaixa8.name(), boletoInfoCampo.getTextoFcInstrucaoAoCaixa8()); + } + + private void setMoraMulta(){ + text.put(BoletoCampo.txtRsMoraMulta.name(), boletoInfoCampo.getTextoRsMoraMulta()); + text.put(BoletoCampo.txtFcMoraMulta.name(), boletoInfoCampo.getTextoFcMoraMulta()); + } + + private void setOutroAcrescimo(){ + text.put(BoletoCampo.txtRsOutroAcrescimo.name(), boletoInfoCampo.getTextoRsOutroAcrescimo()); + text.put(BoletoCampo.txtFcOutroAcrescimo.name(), boletoInfoCampo.getTextoFcOutroAcrescimo()); + } + + private void setOutraDeducao(){ + text.put(BoletoCampo.txtRsOutraDeducao.name(), boletoInfoCampo.getTextoRsOutraDeducao()); + text.put(BoletoCampo.txtFcOutraDeducao.name(), boletoInfoCampo.getTextoFcOutraDeducao()); + } + + private void setDescontoAbatimento(){ + text.put(BoletoCampo.txtRsDescontoAbatimento.name(), boletoInfoCampo.getTextoRsDescontoAbatimento()); + text.put(BoletoCampo.txtFcDescontoAbatimento.name(), boletoInfoCampo.getTextoFcDescontoAbatimento()); + } + private void setValorDocumento(){ + text.put(BoletoCampo.txtRsValorDocumento.name(), boletoInfoCampo.getTextoRsValorDocumento()); + text.put(BoletoCampo.txtFcValorDocumento.name(), boletoInfoCampo.getTextoFcValorDocumento()); + } + + private void setValorCobrado(){ + text.put(BoletoCampo.txtRsValorCobrado.name(), boletoInfoCampo.getTextoRsValorCobrado()); + text.put(BoletoCampo.txtFcValorCobrado.name(), boletoInfoCampo.getTextoFcValorCobrado()); + } + + private void setDataVencimeto(){ + text.put(BoletoCampo.txtRsDataVencimento.name(), boletoInfoCampo.getTextoRsDataVencimento()); + text.put(BoletoCampo.txtFcDataVencimento.name(), boletoInfoCampo.getTextoFcDataVencimento()); + } + + private void setNumeroDocumento(){ + text.put(BoletoCampo.txtRsNumeroDocumento.name(), boletoInfoCampo.getTextoRsNumeroDocumento()); + text.put(BoletoCampo.txtFcNumeroDocumento.name(), boletoInfoCampo.getTextoFcNumeroDocumento()); + } + + private void setCedente(){ + text.put(BoletoCampo.txtRsCedente.name(), boletoInfoCampo.getTextoRsCedente()); + text.put(BoletoCampo.txtFcCedente.name(), boletoInfoCampo.getTextoFcCedente()); + } + + private void setEspecie(){ + text.put(BoletoCampo.txtRsEspecie.name(), boletoInfoCampo.getTextoRsEspecie()); + text.put(BoletoCampo.txtFcEspecie.name(), boletoInfoCampo.getTextoFcEspecie()); + } + + private void setCodigoDoBanco(){ + text.put(BoletoCampo.txtRsCodBanco.name(), boletoInfoCampo.getTextoRsCodigoBanco()); + text.put(BoletoCampo.txtFcCodBanco.name(), boletoInfoCampo.getTextoFcCodigoBanco()); + } + + private void setAgenciaCodigoCedente(){ + text.put(BoletoCampo.txtRsAgenciaCodigoCedente.name(), boletoInfoCampo.getTextoRsAgenciaCodigoCedente()); + text.put(BoletoCampo.txtFcAgenciaCodigoCedente.name(), boletoInfoCampo.getTextoFcAgenciaCodigoCedente()); + } + + private void setNossoNumero(){ + text.put(BoletoCampo.txtRsNossoNumero.name(), boletoInfoCampo.getTextoRsNossoNumero()); + text.put(BoletoCampo.txtFcNossoNumero.name(), boletoInfoCampo.getTextoFcNossoNumero()); + } + + private void setLogotipoDoBanco(){ + if (isNotNull(boletoInfoCampo.getImagemFcLogoBanco())) { + image.put(BoletoCampo.txtRsLogoBanco.name(),boletoInfoCampo.getImagemRsLogoBanco()); + image.put(BoletoCampo.txtFcLogoBanco.name(),boletoInfoCampo.getImagemFcLogoBanco()); + } else { + log.warn("Banco sem imagem definida. O nome da instituição será usado como logo."); + text.put(BoletoCampo.txtRsLogoBanco.name(),boletoInfoCampo.getTextoRsLogoBanco()); + text.put(BoletoCampo.txtFcLogoBanco.name(),boletoInfoCampo.getTextoFcLogoBanco()); + } + } + + private void setLinhaDigitavel(){ + text.put(BoletoCampo.txtRsLinhaDigitavel.name(), boletoInfoCampo.getTextoRsLinhaDigitavel()); + text.put(BoletoCampo.txtFcLinhaDigitavel.name(), boletoInfoCampo.getTextoFcLinhaDigitavel()); + } + + private void setCodigoDeBarras(){ + image.put(BoletoCampo.txtFcCodigoBarra.name(), boletoInfoCampo.getImagemFcCodigoBarra()); + } + + private void setTodosOsCamposTexto(){ + if (Collections.hasElement(this.boletoTextosExtra)) { + for (Entry entry : boletoTextosExtra.entrySet()) { + text.put(entry.getKey(), entry.getValue()); + } + } + } + + private void setTodosOsCamposImagem(){ + if (Collections.hasElement(boletoImagensExtra)) { + for (Entry entry : boletoImagensExtra.entrySet()) { + image.put(entry.getKey(), entry.getValue()); + } + } + } +} \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/AbstractBoletoInfoCampoView.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/AbstractBoletoInfoCampoView.java new file mode 100644 index 0000000..bb259b3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/AbstractBoletoInfoCampoView.java @@ -0,0 +1,343 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/01/2014 - 22:11:18 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/01/2014 - 22:11:18 + * + */ + +package org.jrimum.bopepo.view.info.campo; + + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoAgenciaCodigoCedente.getTextoAgenciaCodigoCedente; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoCodigoBanco.getTextoCodigoDoBanco; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoEndereco.getTextoEnderecoLinha1; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoEndereco.getTextoEnderecoLinha2; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoLogoBanco.getImagemBanco; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoNossoNumero.getTextoNossoNumero; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoPessoa.getTextoNomeCprfDaPessoa; +import static org.jrimum.utilix.Objects.isNotNull; +import static org.jrimum.utilix.Objects.whenNull; +import static org.jrimum.utilix.text.DateFormat.DDMMYYYY_B; +import static org.jrimum.utilix.text.DecimalFormat.MONEY_DD_BR; + +import java.awt.Image; +import java.math.BigDecimal; +import java.util.Date; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.pdf.CodigoDeBarras; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.utilix.Exceptions; +import org.jrimum.utilix.Objects; + +/** + * @author Gilmar P.S.L. + * + */ +public abstract class AbstractBoletoInfoCampoView implements BoletoInfoCampoView{ + + private final ResourceBundle resourceBundle; + + private final Boleto boleto; + + /** + * Modo de instanciação não permitido. + * + * @throws IllegalStateException + * Caso haja alguma tentativa de utilização deste construtor. + */ + @SuppressWarnings("unused") + private AbstractBoletoInfoCampoView(){ + Exceptions.throwIllegalStateException("Instanciação não permitida!"); + resourceBundle = null; + boleto = null; + } + + public AbstractBoletoInfoCampoView(ResourceBundle resourceBundle, Boleto boleto){ + Objects.checkNotNull(resourceBundle); + Objects.checkNotNull(boleto); + this.resourceBundle = resourceBundle; + this.boleto = boleto; + } + + public String getTextoRsInstrucaoAoSacado() { + return getValue(boleto.getInstrucaoAoSacado()); + } + + public String getTextoRsCpfCnpj() { + return boleto.getTitulo().getCedente().getCPRF().getCodigoFormatado(); + } + + public String getTextoRsSacado(){ + return getTextoFcSacadoL1(); + } + + public String getTextoFcSacadoL1(){ + return getTextoNomeCprfDaPessoa(boleto.getTitulo().getSacado()); + } + + public String getTextoFcSacadoL2(){ + return getTextoEnderecoLinha1(boleto.getTitulo().getSacado()); + } + + public String getTextoFcSacadoL3(){ + return getTextoEnderecoLinha2(boleto.getTitulo().getSacado()); + } + + public String getTextoFcSacadorAvalistaL1(){ + return getTextoNomeCprfDaPessoa(boleto.getTitulo().getSacadorAvalista()); + } + + public String getTextoFcSacadorAvalistaL2(){ + return getTextoEnderecoLinha1(boleto.getTitulo().getSacadorAvalista()); + } + + public String getTextoFcSacadorAvalistaL3(){ + return getTextoEnderecoLinha2(boleto.getTitulo().getSacadorAvalista()); + } + + public String getTextoFcDataProcessamento(){ + return getValue(boleto.getDataDeProcessamento()); + } + + public String getTextoFcAceite(){ + return getValue(boleto.getTitulo().getAceite()); + } + + public String getTextoFcEspecieDocumento() { + return whenNull(boleto.getTitulo().getTipoDeDocumento(), EMPTY, boleto.getTitulo().getTipoDeDocumento().getSigla()); + } + + public String getTextoFcDataDocumento(){ + return getValue(boleto.getTitulo().getDataDoDocumento()); + } + + public String getTextoFcLocalPagamento(){ + return getValue(boleto.getLocalPagamento()); + } + + public String getTextoFcCarteira(){ + return whenNull(boleto.getTitulo().getContaBancaria().getCarteira(), EMPTY, boleto.getTitulo().getContaBancaria().getCarteira().getCodigo().toString()); + } + + public String getTextoFcInstrucaoAoCaixa1(){ + return getValue(boleto.getInstrucao1()); + } + + public String getTextoFcInstrucaoAoCaixa2(){ + return getValue(boleto.getInstrucao2()); + } + + public String getTextoFcInstrucaoAoCaixa3(){ + return getValue(boleto.getInstrucao3()); + } + + public String getTextoFcInstrucaoAoCaixa4(){ + return getValue(boleto.getInstrucao4()); + } + + public String getTextoFcInstrucaoAoCaixa5(){ + return getValue(boleto.getInstrucao5()); + } + + public String getTextoFcInstrucaoAoCaixa6(){ + return getValue(boleto.getInstrucao6()); + } + + public String getTextoFcInstrucaoAoCaixa7(){ + return getValue(boleto.getInstrucao7()); + } + + public String getTextoFcInstrucaoAoCaixa8(){ + return getValue(boleto.getInstrucao8()); + } + + public String getTextoRsMoraMulta(){ + return getTextoFcMoraMulta(); + } + + public String getTextoFcMoraMulta(){ + return getValue(boleto.getTitulo().getMora()); + } + + public String getTextoRsOutroAcrescimo(){ + return getTextoFcOutroAcrescimo(); + } + + public String getTextoFcOutroAcrescimo(){ + return getValue(boleto.getTitulo().getAcrecimo()); + } + + public String getTextoRsOutraDeducao(){ + return getTextoFcOutraDeducao(); + } + + public String getTextoFcOutraDeducao(){ + return getValue(boleto.getTitulo().getDeducao()); + } + + public String getTextoRsDescontoAbatimento(){ + return getTextoFcDescontoAbatimento(); + } + + public String getTextoFcDescontoAbatimento(){ + return getValue(boleto.getTitulo().getDesconto()); + } + + public String getTextoRsValorDocumento(){ + return getTextoFcValorDocumento(); + } + + public String getTextoFcValorDocumento(){ + return getValue(boleto.getTitulo().getValor()); + } + + public String getTextoRsValorCobrado(){ + return getTextoFcValorCobrado(); + } + + public String getTextoFcValorCobrado(){ + return getValue(boleto.getTitulo().getValorCobrado()); + } + + public String getTextoRsDataVencimento(){ + return getTextoFcDataVencimento(); + } + + public String getTextoFcDataVencimento(){ + return getValue(boleto.getTitulo().getDataDoVencimento()); + } + + public String getTextoRsNumeroDocumento(){ + return getTextoFcNumeroDocumento(); + } + + public String getTextoFcNumeroDocumento(){ + return getValue(boleto.getTitulo().getNumeroDoDocumento()); + } + + public String getTextoRsCedente(){ + return getTextoFcCedente(); + } + + public String getTextoFcCedente(){ + return getValue(boleto.getTitulo().getCedente().getNome()); + } + + public String getTextoRsEspecie(){ + return getTextoFcEspecie(); + } + + public String getTextoFcEspecie(){ + return getValue(boleto.getTitulo().getTipoDeMoeda()); + } + + public String getTextoRsCodigoBanco(){ + return getTextoFcCodigoBanco(); + } + + public String getTextoFcCodigoBanco(){ + return getTextoCodigoDoBanco(boleto.getTitulo().getContaBancaria()); + } + + public String getTextoRsAgenciaCodigoCedente(){ + return getTextoFcAgenciaCodigoCedente(); + } + + public String getTextoFcAgenciaCodigoCedente(){ + return getTextoAgenciaCodigoCedente(boleto.getTitulo().getContaBancaria()); + } + + public String getTextoRsNossoNumero(){ + return getTextoFcNossoNumero(); + } + + public String getTextoFcNossoNumero(){ + return getTextoNossoNumero(boleto.getTitulo()); + } + + public Image getImagemRsLogoBanco(){ + return getImagemFcLogoBanco(); + } + + public Image getImagemFcLogoBanco(){ + return getImagemBanco(resourceBundle, boleto.getTitulo().getContaBancaria()); + } + + public String getTextoRsLogoBanco(){ + return getTextoFcLogoBanco(); + } + + public String getTextoFcLogoBanco(){ + return boleto.getTitulo().getContaBancaria().getBanco().getNome(); + } + + public String getTextoRsLinhaDigitavel(){ + return getTextoFcLinhaDigitavel(); + } + + public String getTextoFcLinhaDigitavel(){ + return boleto.getLinhaDigitavel().write(); + } + + public Image getImagemFcCodigoBarra(){ + return CodigoDeBarras.valueOf(boleto.getCodigoDeBarras().write()).toImage(); + } + + protected final Boleto getBoleto(){ + return this.boleto; + } + + private String getValue(String value){ + if(isNotBlank(value)){ + return value; + } + return EMPTY; + } + + private String getValue(Date value){ + if(isNotNull(value)){ + return DDMMYYYY_B.format(value); + } + return EMPTY; + } + + private String getValue(BigDecimal value){ + if(isNotNull(value)){ + return MONEY_DD_BR.format(value); + } + return EMPTY; + } + + private > String getValue(T value){ + if(isNotNull(value)){ + return value.name(); + } + return EMPTY; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoAgenciaCodigoCedente.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoAgenciaCodigoCedente.java new file mode 100644 index 0000000..50e3509 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoAgenciaCodigoCedente.java @@ -0,0 +1,95 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 17/01/2014 - 14:38:51 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 17/01/2014 - 14:38:51 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.jrimum.utilix.Objects.isNotNull; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; + +/** + * Formata a agência e o número da conta. + * + * @author Gilmar P.S.L. + */ +public class BoletoInfoCampoAgenciaCodigoCedente { + + /** + * Retorna a agência e o número da conta no seguinte formato: {@code "1234-1 / 123456-0"}. + * + * + * @param conta + * @return string formatada para ser exibida no boleto + */ + public static String getTextoAgenciaCodigoCedente(ContaBancaria conta){ + + StringBuilder texto = new StringBuilder(EMPTY); + boolean temAgencia = false; + + + if (isNotNull(conta.getAgencia())) { + + temAgencia = true; + + if (isNotNull(conta.getAgencia().getCodigo())){ + texto.append(conta.getAgencia().getCodigo()); + } + + if (isNotBlank(conta.getAgencia().getDigitoVerificador().toString())) { + + texto.append("-"); + texto.append(conta.getAgencia().getDigitoVerificador()); + } + } + + if(isNotNull(conta.getNumeroDaConta())){ + + if(temAgencia){ + texto.append(" / "); + } + + if (isNotNull(conta.getNumeroDaConta().getCodigoDaConta())) { + + texto.append(conta.getNumeroDaConta().getCodigoDaConta()); + + if (isNotBlank(conta.getNumeroDaConta().getDigitoDaConta())) { + + texto.append("-"); + texto.append(conta.getNumeroDaConta().getDigitoDaConta()); + } + } + } + + return texto.toString(); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoCodigoBanco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoCodigoBanco.java new file mode 100644 index 0000000..d2dad1b --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoCodigoBanco.java @@ -0,0 +1,54 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/01/2014 - 19:22:01 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/01/2014 - 19:22:01 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; + +/** + * @author Gilmar P.S.L. + */ +public class BoletoInfoCampoCodigoBanco { + + /** + * Retorna o código de compensação do banco fomatado no estilo "001-9". + * + * + * @param conta + * @return string formatada para ser exibida no boleto + */ + public static String getTextoCodigoDoBanco(ContaBancaria conta){ + + String codigoCompensacao = conta.getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado(); + String digitoCompensacao = conta.getBanco().getCodigoDeCompensacaoBACEN().getDigito().toString(); + + return codigoCompensacao + "-" + digitoCompensacao; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoEndereco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoEndereco.java new file mode 100644 index 0000000..b3c5946 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoEndereco.java @@ -0,0 +1,123 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 17/01/2014 - 19:32:45 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 17/01/2014 - 19:32:45 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.isNotBlank; +import static org.jrimum.utilix.Objects.isNotNull; + +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.financeiro.banco.febraban.EntidadeDeCobranca; + +/** + * @author Gilmar P.S.L. + */ +public class BoletoInfoCampoEndereco { + + public static String getTextoEnderecoLinha1(EntidadeDeCobranca pessoa){ + if (isNotNull(pessoa)) { + return getTextoEnderecoLinha1(pessoa.getNextEndereco()); + } + return EMPTY; + } + + public static String getTextoEnderecoLinha1(Endereco endereco){ + + final StringBuilder texto = new StringBuilder(EMPTY); + + if (isNotNull(endereco)) { + + boolean temBairro = false; + boolean temLocalidade = false; + + if (isNotBlank(endereco.getBairro())) { + temBairro = true; + texto.append(endereco.getBairro()); + } + + if (isNotBlank(endereco.getLocalidade())) { + temLocalidade = true; + if(temBairro){ + texto.append(" - "); + } + texto.append(endereco.getLocalidade()); + } + + if (isNotNull(endereco.getUF())) { + if(temBairro || temLocalidade){ + texto.append(" / "); + } + texto.append(endereco.getUF().getSigla()); + } + } + + return texto.toString(); + } + + public static String getTextoEnderecoLinha2(EntidadeDeCobranca pessoa){ + if (isNotNull(pessoa)) { + return getTextoEnderecoLinha2(pessoa.getNextEndereco()); + } + return EMPTY; + } + + public static String getTextoEnderecoLinha2(Endereco endereco){ + + final StringBuilder texto = new StringBuilder(EMPTY); + + if (isNotNull(endereco)) { + + if (isNotBlank(endereco.getLogradouro())) { + texto.append(endereco.getLogradouro()); + } + + if (isNotBlank(endereco.getNumero())) { + texto.append(", n°: ") + .append(endereco.getNumero()); + } + + if (isNotBlank(endereco.getComplemento())) { + texto.append(" / ") + .append(endereco.getComplemento()); + } + + if (isNotNull(endereco.getCEP()) && isNotBlank(endereco.getCEP().getCep())) { + texto.append(" - ") + .append("CEP: ") + .append(endereco.getCEP().getCep()); + } + + } + + return texto.toString(); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoLogoBanco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoLogoBanco.java new file mode 100644 index 0000000..62c1d58 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoLogoBanco.java @@ -0,0 +1,65 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/01/2014 - 21:35:45 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/01/2014 - 21:35:45 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.jrimum.bopepo.BancosSuportados.isSuportado; +import static org.jrimum.utilix.Objects.isNotNull; + +import java.awt.Image; + +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; + +/** + * @author Gilmar P.S.L. + * + */ +public class BoletoInfoCampoLogoBanco { + + public static Image getImagemBanco(ResourceBundle resourceBundle, ContaBancaria conta){ + + if (isNotNull(conta.getBanco().getImgLogo())) { + return conta.getBanco().getImgLogo(); + } + + if (isSuportado(conta.getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado())) { + + conta.getBanco().setImgLogo( + resourceBundle + .getLogotipoDoBanco(conta.getBanco() + .getCodigoDeCompensacaoBACEN() + .getCodigoFormatado())); + } + + return conta.getBanco().getImgLogo(); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoNossoNumero.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoNossoNumero.java new file mode 100644 index 0000000..aaf31b0 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoNossoNumero.java @@ -0,0 +1,66 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 19:27:46 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 19:27:46 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.isNotBlank; + +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + * Formata o Nosso Número do Título que é impresso no boleto. + * + * @author Gilmar P.S.L. + */ +public class BoletoInfoCampoNossoNumero { + + /** + * Retorna o nosso número fomatado no estilo "123456-7". + * + * + * @param titulo + * @return string formatada para ser exibida no boleto + */ + public static String getTextoNossoNumero(Titulo titulo) { + + StringBuilder texto = new StringBuilder(EMPTY); + + if (isNotBlank(titulo.getNossoNumero())) { + texto.append(titulo.getNossoNumero()); + + if (isNotBlank(titulo.getDigitoDoNossoNumero())) { + texto.append("-" + titulo.getDigitoDoNossoNumero()); + } + } + + return texto.toString(); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoPessoa.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoPessoa.java new file mode 100644 index 0000000..5cc3c90 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoPessoa.java @@ -0,0 +1,87 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 14:01:19 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 14:01:19 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.jrimum.utilix.Objects.isNotNull; + +import org.jrimum.domkee.financeiro.banco.febraban.EntidadeDeCobranca; + +/** + * Formata os dados como CPRF e Nome de uma pessoa que são impressos no boleto. + * + * @author Gilmar P.S.L. + */ +public class BoletoInfoCampoPessoa { + + /** + * Retorna o texto formatado no estilo {@code "%nome, %tipo_de_cprf: %cprf"}: + * + *
    + *
  • "Fulando Da Silva, CPF: 111.111.111-11"
  • + *
  • "Empresa Boa, CNPJ: 00.123.456/0001-78"
  • + *
+ * + * @param pessoa + * @return string formatada para ser exibida no boleto + */ + public static String getTextoNomeCprfDaPessoa(EntidadeDeCobranca pessoa) { + StringBuilder sb = new StringBuilder(EMPTY); + boolean temNome = false; + + if (isNotNull(pessoa)) { + + if (isNotNull(pessoa.getNome())) { + temNome = true; + sb.append(pessoa.getNome()); + } + + if (isNotNull(pessoa.getCPRF())) { + + if(temNome){ + sb.append(", "); + } + + if (pessoa.getCPRF().isFisica()) { + sb.append("CPF: "); + + } else if (pessoa.getCPRF().isJuridica()) { + sb.append("CNPJ: "); + } + + sb.append(pessoa.getCPRF().getCodigoFormatado()); + } + } + + return sb.toString(); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoView.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoView.java new file mode 100644 index 0000000..ab66688 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoView.java @@ -0,0 +1,102 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/01/2014 - 22:10:01 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/01/2014 - 22:10:01 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import java.awt.Image; + + +/** + * @author Gilmar P.S.L. + * + */ +public interface BoletoInfoCampoView { + + //Recibo do Sacado + public Image getImagemRsLogoBanco(); + public String getTextoRsLogoBanco(); + public String getTextoRsCodigoBanco(); + public String getTextoRsLinhaDigitavel(); + public String getTextoRsSacado(); + public String getTextoRsNossoNumero(); + public String getTextoRsCedente(); + public String getTextoRsAgenciaCodigoCedente(); + public String getTextoRsInstrucaoAoSacado(); + public String getTextoRsMoraMulta(); + public String getTextoRsOutroAcrescimo(); + public String getTextoRsOutraDeducao(); + public String getTextoRsDescontoAbatimento(); + public String getTextoRsValorDocumento(); + public String getTextoRsValorCobrado(); + public String getTextoRsDataVencimento(); + public String getTextoRsCpfCnpj(); + public String getTextoRsNumeroDocumento(); + public String getTextoRsEspecie(); + + //Ficha de Compensação + public Image getImagemFcLogoBanco(); + public String getTextoFcLogoBanco(); + public String getTextoFcCodigoBanco(); + public String getTextoFcLinhaDigitavel(); + public String getTextoFcNossoNumero(); + public String getTextoFcAgenciaCodigoCedente(); + public String getTextoFcDataProcessamento(); + public String getTextoFcAceite(); + public String getTextoFcEspecieDocumento(); + public String getTextoFcDataDocumento(); + public String getTextoFcLocalPagamento(); + public String getTextoFcCarteira(); + public String getTextoFcSacadoL1(); + public String getTextoFcSacadoL2(); + public String getTextoFcSacadoL3(); + public String getTextoFcSacadorAvalistaL1(); + public String getTextoFcSacadorAvalistaL2(); + public String getTextoFcSacadorAvalistaL3(); + public String getTextoFcInstrucaoAoCaixa1(); + public String getTextoFcInstrucaoAoCaixa2(); + public String getTextoFcInstrucaoAoCaixa3(); + public String getTextoFcInstrucaoAoCaixa4(); + public String getTextoFcInstrucaoAoCaixa5(); + public String getTextoFcInstrucaoAoCaixa6(); + public String getTextoFcInstrucaoAoCaixa7(); + public String getTextoFcInstrucaoAoCaixa8(); + public String getTextoFcMoraMulta(); + public String getTextoFcOutroAcrescimo(); + public String getTextoFcOutraDeducao(); + public String getTextoFcDescontoAbatimento(); + public String getTextoFcValorDocumento(); + public String getTextoFcValorCobrado(); + public String getTextoFcDataVencimento(); + public String getTextoFcNumeroDocumento(); + public String getTextoFcCedente(); + public String getTextoFcEspecie(); + public Image getImagemFcCodigoBarra(); + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoViewFactory.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoViewFactory.java new file mode 100644 index 0000000..492ae27 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoCampoViewFactory.java @@ -0,0 +1,82 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/01/2014 - 22:42:27 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/01/2014 - 22:42:27 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.jrimum.utilix.Objects.isNotNull; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.caixa.BoletoInfoViewCaixaFactory; +import org.jrimum.bopepo.view.info.campo.hsbc.AbstractBoletoInfoViewHSBC; + +/** + * @author Gilmar P.S.L. + * + */ +public class BoletoInfoCampoViewFactory { + + public static BoletoInfoCampoView create(ResourceBundle resourceBundle, + Boleto boleto) { + + final BancosSuportados banco = BancosSuportados.suportados.get(boleto + .getTitulo().getContaBancaria().getBanco() + .getCodigoDeCompensacaoBACEN().getCodigoFormatado()); + + if (isNotNull(banco)) { + switch (banco) { + case BANCO_BRADESCO: return new BoletoInfoViewBradesco(resourceBundle, boleto); + // case BANCO_DO_BRASIL: return new ..; + // case BANCO_DO_NORDESTE_DO_BRASIL: return new ..; + // case BANCO_ABN_AMRO_REAL: return new ..; + case CAIXA_ECONOMICA_FEDERAL: return BoletoInfoViewCaixaFactory.create(resourceBundle, boleto); + case HSBC: return AbstractBoletoInfoViewHSBC.create(resourceBundle, boleto); + // case UNIBANCO: return new ..; + // case BANCO_ITAU: return new ..; + // case BANCO_SAFRA: return new ..; + // case BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL: return new ..; + // case MERCANTIL_DO_BRASIL: return new ..; + // case BANCO_DO_ESTADO_DO_ESPIRITO_SANTO: return new ..; + // case BANCO_RURAL: return new ..; + // case BANCO_SANTANDER: return new ..; + // case BANCO_INTEMEDIUM: return nCew ..; + case BANCO_SICREDI: return new BoletoInfoViewSicredi(resourceBundle, boleto); + // case BANCOOB: return new ..; + // case CITIBANK: return new ..; + // case BANCO_DE_BRASILIA: return new ..; + case CECRED: return new BoletoInfoViewCecred(resourceBundle, boleto); + } + } + + return new BoletoInfoViewDefault(resourceBundle, boleto); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewBradesco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewBradesco.java new file mode 100644 index 0000000..752511a --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewBradesco.java @@ -0,0 +1,87 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 27/01/2014 - 02:21:50 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 27/01/2014 - 02:21:50 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang.StringUtils.leftPad; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; + +/** + * @author Gilmar P.S.L. + */ +public class BoletoInfoViewBradesco extends AbstractBoletoInfoCampoView{ + + BoletoInfoViewBradesco(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcLocalPagamento() { + String textoFcLocalPagamento = super.getTextoFcLocalPagamento(); + return isBlank(textoFcLocalPagamento) ? "Pagável Preferencialmente na rede Bradesco ou no Bradesco expresso" : textoFcLocalPagamento; + } + + @Override + public String getTextoFcAgenciaCodigoCedente() { + Agencia agencia = getBoleto().getTitulo().getContaBancaria().getAgencia(); + NumeroDaConta numeroDaConta = getBoleto().getTitulo().getContaBancaria().getNumeroDaConta(); + + return leftPad(agencia.getCodigo().toString(), 4, "0") + + "-" + agencia.getDigitoVerificador() + + " / " + + leftPad(numeroDaConta.getCodigoDaConta().toString(), 7, "0") + + "-" + numeroDaConta.getDigitoDaConta(); + } + + @Override + public String getTextoRsAgenciaCodigoCedente() { + return getTextoFcAgenciaCodigoCedente(); + } + + @Override + public String getTextoFcNossoNumero() { + Carteira carteira = getBoleto().getTitulo().getContaBancaria().getCarteira(); + return leftPad(carteira.getCodigo().toString(), 2, "0") + + "/" + + getBoleto().getTitulo().getNossoNumero() + + "-" + getBoleto().getTitulo().getDigitoDoNossoNumero(); + } + + @Override + public String getTextoRsNossoNumero() { + return getTextoFcNossoNumero(); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewCecred.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewCecred.java new file mode 100644 index 0000000..f776315 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewCecred.java @@ -0,0 +1,78 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 04/02/2014 - 21:28:09 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 04/02/2014 - 21:28:09 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.apache.commons.lang.StringUtils.isBlank; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; + +/** + * @author Gilmar P.S.L. + */ +public class BoletoInfoViewCecred extends AbstractBoletoInfoCampoView { + + BoletoInfoViewCecred(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcLocalPagamento() { + String textoFcLocalPagamento = super.getTextoFcLocalPagamento(); + return isBlank(textoFcLocalPagamento) ? "PAGAVEL PREFERENCIALMENTE NAS COOPERATIVAS DO SISTEMA CECRED." : textoFcLocalPagamento; + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoRsAgenciaCodigoCedente() + */ + @Override + public String getTextoRsAgenciaCodigoCedente() { + return getAgenciaCodigoCedente(); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoFcAgenciaCodigoCedente() + */ + @Override + public String getTextoFcAgenciaCodigoCedente() { + return getAgenciaCodigoCedente(); + } + + private String getAgenciaCodigoCedente(){ + Integer agencia = super.getBoleto().getTitulo().getContaBancaria().getAgencia().getCodigo(); + String agDv = super.getBoleto().getTitulo().getContaBancaria().getAgencia().getDigitoVerificador(); + Integer numeroDaConta = super.getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getCodigoDaConta(); + String contaDv = super.getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getDigitoDaConta(); + + return String.format("%04d-%s / %07d-%s", agencia, agDv, numeroDaConta, contaDv); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewDefault.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewDefault.java new file mode 100644 index 0000000..ac2667a --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewDefault.java @@ -0,0 +1,45 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/01/2014 - 22:19:19 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/01/2014 - 22:19:19 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; + +/** + * @author Gilmar P.S.L. + * + */ +class BoletoInfoViewDefault extends AbstractBoletoInfoCampoView{ + + BoletoInfoViewDefault(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewSicredi.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewSicredi.java new file mode 100644 index 0000000..a2a24a6 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/BoletoInfoViewSicredi.java @@ -0,0 +1,133 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 31/01/2014 - 00:11:24 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 31/01/2014 - 00:11:24 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.parametro.ParametroBancoSicredi; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite; + +/** + * @author Gilmar P.S.L. + * + */ +public class BoletoInfoViewSicredi extends AbstractBoletoInfoCampoView{ + + BoletoInfoViewSicredi(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoRsCodigoBanco() + */ + @Override + public String getTextoRsCodigoBanco() { + return getTextoCodigoDoBanco(); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoFcCodigoBanco() + */ + @Override + public String getTextoFcCodigoBanco() { + return getTextoCodigoDoBanco(); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoFcLocalPagamento() + */ + @Override + public String getTextoFcLocalPagamento() { + return "Preferencialmente nas cooperativas de crédito do SICREDI"; + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoRsAgenciaCodigoCedente() + */ + @Override + public String getTextoRsAgenciaCodigoCedente() { + return getAgenciaCodigoCedente(); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoFcAgenciaCodigoCedente() + */ + @Override + public String getTextoFcAgenciaCodigoCedente() { + return getAgenciaCodigoCedente(); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoRsNossoNumero() + */ + @Override + public String getTextoRsNossoNumero() { + return getTextoNossoNumero(); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoFcNossoNumero() + */ + @Override + public String getTextoFcNossoNumero() { + return getTextoNossoNumero(); + } + + /** + * @see org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView#getTextoFcAceite() + */ + @Override + public String getTextoFcAceite() { + Aceite aceite = super.getBoleto().getTitulo().getAceite(); + if(aceite == Aceite.A){ + return "SIM"; + } + return "NÃO"; + } + + private String getAgenciaCodigoCedente(){ + Integer agencia = super.getBoleto().getTitulo().getContaBancaria().getAgencia().getCodigo(); + Integer posto = super.getBoleto().getTitulo().getParametrosBancarios().getValor(ParametroBancoSicredi.POSTO_DA_AGENCIA); + Integer codigoCedente = super.getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getCodigoDaConta(); + + return String.format("%04d.%02d.%05d", agencia, posto, codigoCedente); + } + + private String getTextoNossoNumero() { + String nn = super.getTextoFcNossoNumero(); + return nn.substring(0,2)+"/"+nn.substring(2); + } + + private String getTextoCodigoDoBanco(){ + return super.getTextoFcCodigoBanco().replace("-0", "-X"); + } + +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaFactory.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaFactory.java new file mode 100644 index 0000000..6ec0cef --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaFactory.java @@ -0,0 +1,30 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.BoletoInfoCampoView; + +/** + * Factory para determinar qual a implementação da CAIXA será usada de acordo com o convênio (SIGCB, SINCO, SICOB). + * @author Rômulo Augusto + */ +public class BoletoInfoViewCaixaFactory { + + private static final int NN10 = 10; + private static final int NN14 = 14; + private static final int NN15 = 15; + private static final int NN17 = 17; + + public static BoletoInfoCampoView create(ResourceBundle resourceBundle, Boleto boleto) { + String nossoNumero = boleto.getTitulo().getNossoNumero(); + switch (nossoNumero.length()) { + + case NN10: return new BoletoInfoViewCaixaSICOB10(resourceBundle, boleto); + case NN14: return new BoletoInfoViewCaixaSICOB14(resourceBundle, boleto); + case NN15: return new BoletoInfoViewCaixaSIGCB(resourceBundle, boleto); + case NN17: return new BoletoInfoViewCaixaSINCO(resourceBundle, boleto); + } + + return null; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSICOB10.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSICOB10.java new file mode 100644 index 0000000..a860229 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSICOB10.java @@ -0,0 +1,43 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.jrimum.utilix.Objects.isNotNull; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.parametro.ParametroCaixaEconomicaFederal; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; + +/** + * View para o convênio SICOB, Nosso número com 10 dígitos, da CAIXA. + * + * @author Rômulo Augusto + */ +public class BoletoInfoViewCaixaSICOB10 extends AbstractBoletoInfoCampoView { + + public BoletoInfoViewCaixaSICOB10(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcCarteira() { + String textoCarteira = EMPTY; + Carteira carteira = getBoleto().getTitulo().getContaBancaria().getCarteira(); + if (isNotNull(carteira) && isNotNull(carteira.getTipoCobranca())) { + textoCarteira = (carteira.getTipoCobranca().equals(TipoDeCobranca.COM_REGISTRO)) ? "CR" : "SR"; + } + return textoCarteira; + } + + @Override + public String getTextoFcAgenciaCodigoCedente() { + Integer agencia = getBoleto().getTitulo().getContaBancaria().getAgencia().getCodigo(); + Integer codigoOperacao = getBoleto().getTitulo().getParametrosBancarios().getValor(ParametroCaixaEconomicaFederal.CODIGO_OPERACAO); + Integer codigoBeneficiario = getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getCodigoDaConta(); + String digitoDaConta = getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getDigitoDaConta(); + + return String.format("%04d.%03d.%08d-%s", agencia, codigoOperacao, codigoBeneficiario, digitoDaConta); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSICOB14.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSICOB14.java new file mode 100644 index 0000000..68733fe --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSICOB14.java @@ -0,0 +1,56 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.jrimum.utilix.Objects.isNotNull; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.parametro.ParametroCaixaEconomicaFederal; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; + +/** + * View para o convênio SICOB, Nosso número com 14 dígitos, da CAIXA. + * + * @author Rômulo Augusto + */ +public class BoletoInfoViewCaixaSICOB14 extends AbstractBoletoInfoCampoView { + + private static final int CODIGO_OPERACAO_PADRAO = 870; + + public BoletoInfoViewCaixaSICOB14(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcCarteira() { + return "SR"; + } + + @Override + public String getTextoFcAgenciaCodigoCedente() { + Integer agencia = getBoleto().getTitulo().getContaBancaria().getAgencia().getCodigo(); + Integer codigoOperacao = getCodigoOperacao(); + Integer codigoBeneficiario = getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getCodigoDaConta(); + String digitoDaConta = getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getDigitoDaConta(); + + return String.format("%04d.%03d.%08d-%s", agencia, codigoOperacao, codigoBeneficiario, digitoDaConta); + } + + private Integer getCodigoOperacao() { + Titulo titulo = getBoleto().getTitulo(); + Integer codigoOperacao = CODIGO_OPERACAO_PADRAO; + + if (titulo.hasParametrosBancarios() && isNotNull(titulo.getParametrosBancarios().getValor(ParametroCaixaEconomicaFederal.CODIGO_OPERACAO))) { + codigoOperacao = titulo.getParametrosBancarios().getValor(ParametroCaixaEconomicaFederal.CODIGO_OPERACAO); + } + + return codigoOperacao; + } + + @Override + public String getTextoFcLocalPagamento() { + String textoFcLocalPagamento = super.getTextoFcLocalPagamento(); + return isBlank(textoFcLocalPagamento) ? "PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE" : textoFcLocalPagamento; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSIGCB.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSIGCB.java new file mode 100644 index 0000000..9cb3fe3 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSIGCB.java @@ -0,0 +1,39 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.apache.commons.lang.StringUtils.isBlank; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView; + +/** + * View para o convênio SIGCB da CAIXA. + * + * @author Rômulo Augusto + */ +public class BoletoInfoViewCaixaSIGCB extends AbstractBoletoInfoCampoView { + + private static final String EMISSAO_BENEFICIARIO = "4"; + + BoletoInfoViewCaixaSIGCB(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcNossoNumero() { + return getBoleto().getTitulo().getContaBancaria().getCarteira().getCodigo() + + EMISSAO_BENEFICIARIO + + super.getTextoFcNossoNumero(); + } + + @Override + public String getTextoFcCarteira() { + return (getBoleto().getTitulo().getContaBancaria().getCarteira().isComRegistro()) ? "RG" : "SR"; + } + + @Override + public String getTextoFcLocalPagamento() { + String textoFcLocalPagamento = super.getTextoFcLocalPagamento(); + return isBlank(textoFcLocalPagamento) ? "PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE" : textoFcLocalPagamento; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSINCO.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSINCO.java new file mode 100644 index 0000000..4e1c213 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/caixa/BoletoInfoViewCaixaSINCO.java @@ -0,0 +1,30 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView; + +/** + * View para o convênio SINCO da CAIXA. + * + * @author Rômulo Augusto + */ +public class BoletoInfoViewCaixaSINCO extends AbstractBoletoInfoCampoView { + + private static final String CARTEIRA_SINCO = "01"; + private static final int CONSTANTE_NOSSO_NUMERO = 9; + + BoletoInfoViewCaixaSINCO(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcNossoNumero() { + return CONSTANTE_NOSSO_NUMERO + super.getTextoFcNossoNumero(); + } + + @Override + public String getTextoFcCarteira() { + return CARTEIRA_SINCO; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/AbstractBoletoInfoViewHSBC.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/AbstractBoletoInfoViewHSBC.java new file mode 100644 index 0000000..ebc023c --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/AbstractBoletoInfoViewHSBC.java @@ -0,0 +1,48 @@ +package org.jrimum.bopepo.view.info.campo.hsbc; + +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.apache.commons.lang.StringUtils.leftPad; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.AbstractBoletoInfoCampoView; +import org.jrimum.bopepo.view.info.campo.BoletoInfoCampoView; + +/** + * Define campos iguais para as cobranças registrada e não registrada. + * @author Rômulo Augusto + */ +public class AbstractBoletoInfoViewHSBC extends AbstractBoletoInfoCampoView { + + public static BoletoInfoCampoView create(ResourceBundle resourceBundle, Boleto boleto) { + if (boleto.getTitulo().getContaBancaria().getCarteira().isComRegistro()) { + return new BoletoInfoViewHSBCRegistrada(resourceBundle, boleto); + } + return new BoletoInfoViewHSBCNaoRegistrada(resourceBundle, boleto); + } + + public AbstractBoletoInfoViewHSBC(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcLocalPagamento() { + String textoFcLocalPagamento = super.getTextoFcLocalPagamento(); + return isBlank(textoFcLocalPagamento) ? "PAGAR PREFERENCIALMENTE EM AGÊNCIA DO HSBC" : textoFcLocalPagamento; + } + + @Override + public String getTextoFcAgenciaCodigoCedente() { + return leftPad(getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getCodigoDaConta().toString(), 7, "0"); + } + + @Override + public String getTextoFcNossoNumero() { + return getBoleto().getTitulo().getNossoNumero() + getBoleto().getTitulo().getDigitoDoNossoNumero(); + } + + @Override + public String getTextoRsNossoNumero() { + return getTextoFcNossoNumero(); + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/BoletoInfoViewHSBCNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/BoletoInfoViewHSBCNaoRegistrada.java new file mode 100644 index 0000000..bf72f21 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/BoletoInfoViewHSBCNaoRegistrada.java @@ -0,0 +1,44 @@ +package org.jrimum.bopepo.view.info.campo.hsbc; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.leftPad; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; + +/** + * View para a cobrança não registrada do HSBC. + * + * @author Rômulo Augusto + */ +public class BoletoInfoViewHSBCNaoRegistrada extends AbstractBoletoInfoViewHSBC{ + + public BoletoInfoViewHSBCNaoRegistrada(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcAgenciaCodigoCedente() { + return leftPad(getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getCodigoDaConta().toString(), 7, "0"); + } + + @Override + public String getTextoRsAgenciaCodigoCedente() { + return getTextoFcAgenciaCodigoCedente(); + } + + @Override + public String getTextoFcEspecieDocumento() { + return EMPTY; + } + + @Override + public String getTextoFcAceite() { + return EMPTY; + } + + @Override + public String getTextoFcCarteira() { + return "CNR"; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/BoletoInfoViewHSBCRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/BoletoInfoViewHSBCRegistrada.java new file mode 100644 index 0000000..e43a4c6 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/hsbc/BoletoInfoViewHSBCRegistrada.java @@ -0,0 +1,45 @@ +package org.jrimum.bopepo.view.info.campo.hsbc; + +import static org.apache.commons.lang.StringUtils.leftPad; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.view.ResourceBundle; + +/** + * View para a cobrança registrada do HSBC. + * + * @author Rômulo Augusto + */ +public class BoletoInfoViewHSBCRegistrada extends AbstractBoletoInfoViewHSBC { + + public BoletoInfoViewHSBCRegistrada(ResourceBundle resourceBundle, Boleto boleto) { + super(resourceBundle, boleto); + } + + @Override + public String getTextoFcAgenciaCodigoCedente() { + String agencia = leftPad(getBoleto().getTitulo().getContaBancaria().getAgencia().getCodigo().toString(), 4, "0"); + String conta = leftPad(getBoleto().getTitulo().getContaBancaria().getNumeroDaConta().getCodigoDaConta().toString(), 7, "0"); + return agencia + conta; + } + + @Override + public String getTextoRsAgenciaCodigoCedente() { + return getTextoFcAgenciaCodigoCedente(); + } + + @Override + public String getTextoFcEspecieDocumento() { + return "PD"; + } + + @Override + public String getTextoFcAceite() { + return "NÃO"; + } + + @Override + public String getTextoFcCarteira() { + return "CSB"; + } +} diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/package-info.java new file mode 100644 index 0000000..dfec9b5 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/campo/package-info.java @@ -0,0 +1,37 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 17/01/2014 - 18:44:56 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 17/01/2014 - 18:44:56 + * + */ + + +/** + * Classes que geram os dados formatados para campos do boleto. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.view.info.campo; \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/package-info.java new file mode 100644 index 0000000..b752f57 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/info/package-info.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 28/08/2013 - 13:47:41 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 28/08/2013 - 13:47:41 + * + */ + +/** + * Classes utilizadas para gerar os dados visualizados nos boletos + * com formatação específica dos dados para cada banco. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.view.info; \ No newline at end of file diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/package-info.java new file mode 100644 index 0000000..edb8359 --- /dev/null +++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/view/package-info.java @@ -0,0 +1,35 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/08/2010 - 20:50:14 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/08/2010 - 20:50:14 + * + */ + +/** + * Classes utilizadas para gerar e visualizar boletos. + * + * @author Gilmar P.S.L + */ +package org.jrimum.bopepo.view; \ No newline at end of file diff --git a/jrimum-bopepo/src/main/resources/img/001.png b/jrimum-bopepo/src/main/resources/img/001.png new file mode 100644 index 0000000..e30cbc6 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/001.png differ diff --git a/jrimum-bopepo/src/main/resources/img/004.png b/jrimum-bopepo/src/main/resources/img/004.png new file mode 100644 index 0000000..8c34215 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/004.png differ diff --git a/jrimum-bopepo/src/main/resources/img/021.png b/jrimum-bopepo/src/main/resources/img/021.png new file mode 100644 index 0000000..e3f745f Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/021.png differ diff --git a/jrimum-bopepo/src/main/resources/img/033.png b/jrimum-bopepo/src/main/resources/img/033.png new file mode 100644 index 0000000..4f70a8a Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/033.png differ diff --git a/jrimum-bopepo/src/main/resources/img/041.png b/jrimum-bopepo/src/main/resources/img/041.png new file mode 100644 index 0000000..6032038 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/041.png differ diff --git a/jrimum-bopepo/src/main/resources/img/070.png b/jrimum-bopepo/src/main/resources/img/070.png new file mode 100644 index 0000000..9fbb497 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/070.png differ diff --git a/jrimum-bopepo/src/main/resources/img/077.png b/jrimum-bopepo/src/main/resources/img/077.png new file mode 100644 index 0000000..98c07aa Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/077.png differ diff --git a/jrimum-bopepo/src/main/resources/img/085.png b/jrimum-bopepo/src/main/resources/img/085.png new file mode 100644 index 0000000..0c0b3f5 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/085.png differ diff --git a/jrimum-bopepo/src/main/resources/img/104.png b/jrimum-bopepo/src/main/resources/img/104.png new file mode 100644 index 0000000..1b493fe Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/104.png differ diff --git a/jrimum-bopepo/src/main/resources/img/151.png b/jrimum-bopepo/src/main/resources/img/151.png new file mode 100644 index 0000000..40618f4 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/151.png differ diff --git a/jrimum-bopepo/src/main/resources/img/237.png b/jrimum-bopepo/src/main/resources/img/237.png new file mode 100644 index 0000000..0479a1b Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/237.png differ diff --git a/jrimum-bopepo/src/main/resources/img/341.png b/jrimum-bopepo/src/main/resources/img/341.png new file mode 100644 index 0000000..ee594d8 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/341.png differ diff --git a/jrimum-bopepo/src/main/resources/img/356.png b/jrimum-bopepo/src/main/resources/img/356.png new file mode 100644 index 0000000..48d1802 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/356.png differ diff --git a/jrimum-bopepo/src/main/resources/img/389.png b/jrimum-bopepo/src/main/resources/img/389.png new file mode 100644 index 0000000..a68f666 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/389.png differ diff --git a/jrimum-bopepo/src/main/resources/img/399.png b/jrimum-bopepo/src/main/resources/img/399.png new file mode 100644 index 0000000..32369c1 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/399.png differ diff --git a/jrimum-bopepo/src/main/resources/img/409.png b/jrimum-bopepo/src/main/resources/img/409.png new file mode 100644 index 0000000..d65bbad Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/409.png differ diff --git a/jrimum-bopepo/src/main/resources/img/422.png b/jrimum-bopepo/src/main/resources/img/422.png new file mode 100644 index 0000000..b7f1099 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/422.png differ diff --git a/jrimum-bopepo/src/main/resources/img/453.png b/jrimum-bopepo/src/main/resources/img/453.png new file mode 100644 index 0000000..8a4d16b Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/453.png differ diff --git a/jrimum-bopepo/src/main/resources/img/745.png b/jrimum-bopepo/src/main/resources/img/745.png new file mode 100644 index 0000000..af9ea4c Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/745.png differ diff --git a/jrimum-bopepo/src/main/resources/img/748.png b/jrimum-bopepo/src/main/resources/img/748.png new file mode 100644 index 0000000..3b6b96d Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/748.png differ diff --git a/jrimum-bopepo/src/main/resources/img/756.png b/jrimum-bopepo/src/main/resources/img/756.png new file mode 100644 index 0000000..b01fb44 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/756.png differ diff --git a/jrimum-bopepo/src/main/resources/img/Boleto_Completo.png b/jrimum-bopepo/src/main/resources/img/Boleto_Completo.png new file mode 100644 index 0000000..7a9074c Binary files /dev/null and b/jrimum-bopepo/src/main/resources/img/Boleto_Completo.png differ diff --git a/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateComSacadorAvalista.odt b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateComSacadorAvalista.odt new file mode 100644 index 0000000..29f1827 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateComSacadorAvalista.odt differ diff --git a/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateComSacadorAvalista.pdf b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateComSacadorAvalista.pdf new file mode 100644 index 0000000..182e4ea Binary files /dev/null and b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateComSacadorAvalista.pdf differ diff --git a/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateSemSacadorAvalista.odt b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateSemSacadorAvalista.odt new file mode 100644 index 0000000..fad7916 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateSemSacadorAvalista.odt differ diff --git a/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateSemSacadorAvalista.pdf b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateSemSacadorAvalista.pdf new file mode 100644 index 0000000..a363932 Binary files /dev/null and b/jrimum-bopepo/src/main/resources/pdf/BoletoTemplateSemSacadorAvalista.pdf differ diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBancosSuportados.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBancosSuportados.java new file mode 100644 index 0000000..4b1dfa6 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBancosSuportados.java @@ -0,0 +1,79 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 19:11:33 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 19:11:33 + * + */ + + +package org.jrimum.bopepo; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + */ +public class TestBancosSuportados{ + + /** + * Quantidade atual + */ + @Test + public void deve_ser_igual_a_quantidade_de_bancos_declarados_no_enum_e_a_quantidade_disponivel_como_suportado() { + + assertEquals(BancosSuportados.values().length, BancosSuportados.suportados.size()); + } + + /** + * Conferência de códigos + */ + @Test + public void deve_ter_o_codigos_bacen_igual_o_da_especificacao_febraban() { + + + //Bancos implementados: + assertEquals(BancosSuportados.BANCO_DO_BRASIL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "001"); + assertEquals(BancosSuportados.BANCO_DO_NORDESTE_DO_BRASIL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "004"); + assertEquals(BancosSuportados.CAIXA_ECONOMICA_FEDERAL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "104"); + assertEquals(BancosSuportados.BANCO_BRADESCO.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "237"); + assertEquals(BancosSuportados.BANCO_ABN_AMRO_REAL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "356"); + assertEquals(BancosSuportados.UNIBANCO.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "409"); + assertEquals(BancosSuportados.HSBC.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "399"); + assertEquals(BancosSuportados.BANCO_ITAU.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "341"); + assertEquals(BancosSuportados.BANCO_SAFRA.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "422"); + assertEquals(BancosSuportados.BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "041"); + assertEquals(BancosSuportados.MERCANTIL_DO_BRASIL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "389"); + assertEquals(BancosSuportados.BANCO_DO_ESTADO_DO_ESPIRITO_SANTO.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "021"); + assertEquals(BancosSuportados.BANCO_RURAL.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "453"); + assertEquals(BancosSuportados.BANCO_SANTANDER.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "033"); + assertEquals(BancosSuportados.BANCO_INTEMEDIUM.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "077"); + assertEquals(BancosSuportados.BANCO_SICREDI.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "748"); + assertEquals(BancosSuportados.BANCOOB.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "756"); + assertEquals(BancosSuportados.CITIBANK.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "745"); + assertEquals(BancosSuportados.BANCO_DE_BRASILIA.create().getCodigoDeCompensacaoBACEN().getCodigoFormatado(), "070"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBoleto.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBoleto.java new file mode 100644 index 0000000..2d73003 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBoleto.java @@ -0,0 +1,254 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:11:45 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:11:45 + * + */ + +package org.jrimum.bopepo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.awt.Image; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import javax.imageio.ImageIO; + +import org.jrimum.bopepo.campolivre.CampoLivre; +import org.jrimum.bopepo.campolivre.NotSupportedBancoException; +import org.jrimum.bopepo.campolivre.NotSupportedCampoLivreException; +import org.jrimum.bopepo.view.BoletoCampo; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeMoeda; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.utilix.ClassLoaders; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste da classe Boleto + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ + +public class TestBoleto{ + + private Titulo titulo; + + private Date VENCIMENTO = new GregorianCalendar(2000, Calendar.JULY, 3).getTime(); + + private Boleto boleto; + + + @Before + public void setUp() throws Exception { + + Sacado sacado = new Sacado("Sacado"); + Cedente cedente = new Cedente("Cedente"); + + ContaBancaria contaBancaria = new ContaBancaria(); + contaBancaria.setBanco(BancosSuportados.BANCO_BRADESCO.create()); + + Agencia agencia = new Agencia(1234, "1"); + contaBancaria.setAgencia(agencia); + + contaBancaria.setCarteira(new Carteira(5)); + + NumeroDaConta numeroDaConta = new NumeroDaConta(); + numeroDaConta.setCodigoDaConta(6789); + contaBancaria.setNumeroDaConta(numeroDaConta); + + titulo = new Titulo(contaBancaria, sacado, cedente); + titulo.setNossoNumero("12345678901"); + titulo.setTipoDeMoeda(TipoDeMoeda.REAL); + titulo.setValor(BigDecimal.valueOf(100.23)); + titulo.setDataDoVencimento(VENCIMENTO); + + boleto = new Boleto(titulo); + + } + + /** + * Test method for {@link org.jrimum.bopepo.Boleto#Boleto(Titulo)}. + * @throws NotSupportedBancoException + * @throws NotSupportedCampoLivreException + */ + @Test + public void testGetInstance() throws NotSupportedBancoException, NotSupportedCampoLivreException { + + assertNotNull(boleto); + assertNotNull(boleto.getTitulo()); + + try{ + new Boleto(null); + assertTrue(false); + fail("Teste Falho!"); + + } catch(IllegalArgumentException illegalArgumentException){ + assertTrue(true); + } + } + + /** + * Test method for {@link org.jrimum.bopepo.Boleto#getCodigoDeBarras()}. + */ + @Test + public void testGetCodigoDeBarra() { + + assertNotNull(boleto.getCodigoDeBarras()); + + } + + /** + * Test method for {@link org.jrimum.bopepo.Boleto#getLinhaDigitavel()}. + */ + @Test + public void testGetLinhaDigitavel() { + assertNotNull(boleto.getLinhaDigitavel()); + } + + /** + * Test method for {@link org.jrimum.bopepo.Boleto#getDataDeProcessamento()}. + */ + @Test + public void testGetDataDeProcessamento() { + DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); + Date agora = new Date(); + + assertEquals(df.format(agora), df.format(boleto.getDataDeProcessamento())); + } + + @Test(expected = IllegalArgumentException.class) + public void testSetCampoLivreNull() { + + boleto = new Boleto(titulo, null); + } + + @SuppressWarnings("serial") + @Test + public void testSetCampoLivreTamanhoCorreto() { + + boleto = new Boleto(titulo, new CampoLivre() { + + public String write() { + return "1234567890123456789012345"; + } + + public void read(String g) { + } + }); + + assertNotNull(boleto.getCampoLivre()); + assertNotNull(boleto.getCampoLivre().write()); + assertEquals(CampoLivre.STRING_LENGTH.intValue(), boleto.getCampoLivre().write().length()); + } + + @Test(expected = IllegalArgumentException.class) + public void testSetCampoLivreTamanhoMaior() { + + boleto = new Boleto(titulo, new CampoLivre() { + + private static final long serialVersionUID = 1L; + + public String write() { + return "1234567890123456789012345000"; + } + + public void read(String g) { + } + }); + } + + @Test(expected = IllegalArgumentException.class) + public void testSetCampoLivreTamanhoMenor() { + + boleto = new Boleto(titulo, new CampoLivre() { + + private static final long serialVersionUID = 1L; + + public String write() { + return "12345678901234567890"; + } + + public void read(String g) { + } + }); + } + + @Test + public void deve_sobrescrever_os_campos_texto_padrao_do_boleto() throws Exception { + final String campoCendente = "txtFcCedente"; + final String conteudoOriginal = "Banco dos Desenvolvedores"; + final String conteudoSobrescrito = "Banco JRimum"; + boleto.addTextosExtras(campoCendente, conteudoOriginal); + assertEquals(boleto.getTextosExtras().get(campoCendente), conteudoOriginal); + + boleto.sobrescrevaCampo(BoletoCampo.txtFcCedente, conteudoSobrescrito); + + assertEquals(boleto.getTextosExtras().get(campoCendente), conteudoSobrescrito); + } + + @Test + public void deve_adicionar_campos_texto_ao_boleto() throws Exception { + final String campo = "meuCampo"; + final String conteudo = "Meu conteudo especial!"; + + boleto.addTextosExtras(campo, conteudo); + + assertEquals(boleto.getTextosExtras().get(campo), conteudo); + } + + @Test + public void deve_adicionar_campos_imagem_ao_boleto() throws Exception { + final String campo = "meuCampo"; + final Image conteudo = ImageIO.read(ClassLoaders.getResource("img/001.png")); + assertNotNull(conteudo); + + boleto.addImagensExtras(campo, conteudo); + + assertEquals(boleto.getImagensExtras().get(campo), conteudo); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBoletoUtil.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBoletoUtil.java new file mode 100644 index 0000000..f736100 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestBoletoUtil.java @@ -0,0 +1,404 @@ +package org.jrimum.bopepo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.ArrayList; + +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoUtil { + + private static final String CODIGO_DO_BANCO_EXPECTED = "399"; + + private static final String CODIGO_DA_MOEDA_EXPECTED = "9"; + + private static final String CODIGO_DV_GERAL_EXPECTED = "3"; + + private static final String FATOR_DE_VENCIMENTO_EXPECTED = "4371"; + + private static final String VALOR_NOMINAL_EXPECTED = "0000000965"; + + private static final String CAMPO_LIVRE_EXPECTED = "1234567000000000022226892"; + + private static final String CODIGO_DE_BARRAS_EXPECTED = new StringBuilder() + .append(CODIGO_DO_BANCO_EXPECTED) + .append(CODIGO_DA_MOEDA_EXPECTED) + .append(CODIGO_DV_GERAL_EXPECTED) + .append(FATOR_DE_VENCIMENTO_EXPECTED) + .append(VALOR_NOMINAL_EXPECTED) + .append(CAMPO_LIVRE_EXPECTED) + .toString(); + + private static String LINHA_DIGITAVEL_FORMATADA_EXPECTED = "39991.23452 67000.000009 00222.268922 3 43710000000965"; + private static String LINHA_DIGITAVEL_NUMERICA_EXPECTED = "39991234526700000000900222268922343710000000965"; + + private static final ArrayList INPUTS_CODIGO_DE_BARRAS = new ArrayList(); + + private static final ArrayList INPUTS_LINHAS_DIGITAVEIS_FORMATADAS = new ArrayList(); + private static final ArrayList INPUTS_LINHAS_DIGITAVEIS_NUMERICAS = new ArrayList(); + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + + /* + * ENTRADAS FORMATADAS + */ + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991.23452 67000.000009 00222.268922 3 43710000000 965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991.23452 67000.000009 00222.268922 3 4371000000096"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991.23452 67000.000009 00222.268922 $ 43710000000965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991.23452 67000.000009 00222.26892 3 43710000000965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991.23452 67000.00000 00222.268922 3 43710000000965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991.2345 67000.000009 00222.268922 3 43710000000965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add(0 + LINHA_DIGITAVEL_FORMATADA_EXPECTED); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add(LINHA_DIGITAVEL_FORMATADA_EXPECTED + 0); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991.2345267000.00000900222.268922343710000000965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991234526700000000900222268922343710000000965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991$23452 67000$000009 00222$268922 3 43710000000965"); + INPUTS_LINHAS_DIGITAVEIS_FORMATADAS.add("39991#23452 67000#000009 00222#268922 3 43710000000965"); + /* + * ENTRADAS NÃO FORMATADAS + */ + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add("000000000000000000000000000000000000000000000000"); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add("0000000000000000000000000000000000000000000000"); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add("000000000000000000000000x0000000000000000000000"); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add("000000000000000000000000 0000000000000000000000"); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add(0 + LINHA_DIGITAVEL_NUMERICA_EXPECTED); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add(0 + LINHA_DIGITAVEL_NUMERICA_EXPECTED + 0); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add(LINHA_DIGITAVEL_NUMERICA_EXPECTED + 0); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add(" 000000000000000000000000x0000000000000000000000"); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add(" 000000000000000000000000x0000000000000000000000 "); + INPUTS_LINHAS_DIGITAVEIS_NUMERICAS.add("000000000000000000000000x0000000000000000000000 "); + /* + * ENTRADAS DE CÓDIGOS DE BARRAS + */ + INPUTS_CODIGO_DE_BARRAS.add("000000000000000000000000000000000000000000000000"); + INPUTS_CODIGO_DE_BARRAS.add("0000000000000000000000000000000000000000000000"); + INPUTS_CODIGO_DE_BARRAS.add("000000000000000000000009x9000000000000000000000"); + INPUTS_CODIGO_DE_BARRAS.add("000000000000000000000009 9000000000000000000000"); + INPUTS_CODIGO_DE_BARRAS.add(1 + CODIGO_DE_BARRAS_EXPECTED); + INPUTS_CODIGO_DE_BARRAS.add(1 + CODIGO_DE_BARRAS_EXPECTED + 2); + INPUTS_CODIGO_DE_BARRAS.add(CODIGO_DE_BARRAS_EXPECTED + 9); + INPUTS_CODIGO_DE_BARRAS.add(" 100000000000000000000009x9000000000000000000000"); + INPUTS_CODIGO_DE_BARRAS.add(" 100000000000000000000009x9000000000000000000002 "); + INPUTS_CODIGO_DE_BARRAS.add("000000000000000000000009x9000000000000000000001 "); + } + + @Test + public void testGetCampoLivreDaLinhaDigitavelFormatada() { + + assertEquals(CAMPO_LIVRE_EXPECTED, BoletoUtil.getCampoLivreDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertTrue(!CAMPO_LIVRE_EXPECTED.equals(BoletoUtil.getCampoLivreDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("0", "1")))); + } + + @Test + public void testGetValorDoTituloDaLinhaDigitavelFormatada() { + + assertEquals(VALOR_NOMINAL_EXPECTED, BoletoUtil.getValorDoTituloDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertTrue(!VALOR_NOMINAL_EXPECTED.equals(BoletoUtil.getValorDoTituloDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("0", "1")))); + } + + @Test + public void testGetFatorDeVencimentoDaLinhaDigitavelFormatada() { + + assertEquals(FATOR_DE_VENCIMENTO_EXPECTED, BoletoUtil.getFatorDeVencimentoDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertTrue(!FATOR_DE_VENCIMENTO_EXPECTED.equals(BoletoUtil.getFatorDeVencimentoDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("7", "9")))); + } + + @Test + public void testGetDigitoVerificadorGeralDaLinhaDigitavelFormatada() { + + assertEquals(CODIGO_DV_GERAL_EXPECTED, BoletoUtil.getDigitoVerificadorGeralDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertTrue(!CODIGO_DV_GERAL_EXPECTED.equals(BoletoUtil.getDigitoVerificadorGeralDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("3", "6")))); + } + + @Test + public void testGetCodigoDaMoedaDaLinhaDigitavelFormatada() { + + assertEquals(CODIGO_DA_MOEDA_EXPECTED, BoletoUtil.getCodigoDaMoedaDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertTrue(!CODIGO_DA_MOEDA_EXPECTED.equals(BoletoUtil.getCodigoDaMoedaDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("9", "5")))); + } + + @Test + public void testGetCodigoDoBancoDaLinhaDigitavelFormatada() { + + assertEquals(CODIGO_DO_BANCO_EXPECTED, BoletoUtil.getCodigoDoBancoDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertTrue(!CODIGO_DE_BARRAS_EXPECTED.equals(BoletoUtil.getCodigoDoBancoDaLinhaDigitavelFormatada(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("9", "4")))); + } + + @Test + public void testGetCampoLivreDoCodigoDeBarras() { + + assertEquals(CAMPO_LIVRE_EXPECTED, BoletoUtil.getCampoLivreDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED)); + assertTrue(!CAMPO_LIVRE_EXPECTED.equals(BoletoUtil.getCampoLivreDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED.replace("0", "1")))); + } + + @Test + public void testGetValorDoTituloDoCodigoDeBarras() { + + assertEquals(VALOR_NOMINAL_EXPECTED, BoletoUtil.getValorDoTituloDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED)); + assertTrue(!VALOR_NOMINAL_EXPECTED.equals(BoletoUtil.getValorDoTituloDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED.replace("0", "1")))); + } + + @Test + public void testGetFatorDeVencimentoDoCodigoDeBarras() { + + assertEquals(FATOR_DE_VENCIMENTO_EXPECTED, BoletoUtil.getFatorDeVencimentoDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED)); + assertTrue(!FATOR_DE_VENCIMENTO_EXPECTED.equals(BoletoUtil.getFatorDeVencimentoDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED.replace("7", "9")))); + } + + @Test + public void testGetDigitoVerificadorGeralDoCodigoDeBarras() { + + assertEquals(CODIGO_DV_GERAL_EXPECTED, BoletoUtil.getDigitoVerificadorGeralDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED)); + assertTrue(!CODIGO_DV_GERAL_EXPECTED.equals(BoletoUtil.getDigitoVerificadorGeralDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED.replace("3", "6")))); + } + + @Test + public void testGetCodigoDaMoedaDoCodigoDeBarras() { + + assertEquals(CODIGO_DA_MOEDA_EXPECTED, BoletoUtil.getCodigoDaMoedaDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED)); + assertTrue(!CODIGO_DA_MOEDA_EXPECTED.equals(BoletoUtil.getCodigoDaMoedaDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED.replace("9", "5")))); + } + + @Test + public void testGetCodigoDoBancoDoCodigoDeBarras() { + + assertEquals(CODIGO_DO_BANCO_EXPECTED, BoletoUtil.getCodigoDoBancoDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED)); + assertTrue(!CODIGO_DE_BARRAS_EXPECTED.equals(BoletoUtil.getCodigoDoBancoDoCodigoDeBarras(CODIGO_DE_BARRAS_EXPECTED.replace("9", "4")))); + } + + @Test + public void testCodigoDeBarrasEmLinhaDigitavelFormatada() { + + assertEquals(CODIGO_DE_BARRAS_EXPECTED, BoletoUtil.linhaDigitavelFormatadaEmCodigoDeBarras(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertEquals(CODIGO_DE_BARRAS_EXPECTED, BoletoUtil.linhaDigitavelFormatadaEmCodigoDeBarras(" "+LINHA_DIGITAVEL_FORMATADA_EXPECTED+" ")); + assertTrue(!CODIGO_DE_BARRAS_EXPECTED.equals(BoletoUtil.linhaDigitavelFormatadaEmCodigoDeBarras(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("8", "3")))); + } + + @Test + public void testCodigoDeBarrasLinhaDigitavelNumerica() { + + assertEquals(LINHA_DIGITAVEL_NUMERICA_EXPECTED, BoletoUtil.codigoDeBarrasEmLinhaDigitavelNumerica(CODIGO_DE_BARRAS_EXPECTED)); + assertEquals(LINHA_DIGITAVEL_NUMERICA_EXPECTED, BoletoUtil.codigoDeBarrasEmLinhaDigitavelNumerica(" "+CODIGO_DE_BARRAS_EXPECTED+" ")); + assertTrue(!LINHA_DIGITAVEL_NUMERICA_EXPECTED.equals(BoletoUtil.codigoDeBarrasEmLinhaDigitavelNumerica(CODIGO_DE_BARRAS_EXPECTED.replace("8", "3")))); + } + + @Test + public void testLinhaDigitavelFormatadaEmCodigoDeBarras() { + + assertEquals(CODIGO_DE_BARRAS_EXPECTED, BoletoUtil.linhaDigitavelFormatadaEmCodigoDeBarras(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertEquals(CODIGO_DE_BARRAS_EXPECTED, BoletoUtil.linhaDigitavelFormatadaEmCodigoDeBarras(" "+LINHA_DIGITAVEL_FORMATADA_EXPECTED+" ")); + assertTrue(!CODIGO_DE_BARRAS_EXPECTED.equals(BoletoUtil.linhaDigitavelFormatadaEmCodigoDeBarras(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("8", "3")))); + } + + @Test + public void testLinhaDigitavelNumericaEmCodigoDeBarras() { + + assertEquals(CODIGO_DE_BARRAS_EXPECTED, BoletoUtil.linhaDigitavelNumericaEmCodigoDeBarras(LINHA_DIGITAVEL_NUMERICA_EXPECTED)); + assertEquals(CODIGO_DE_BARRAS_EXPECTED, BoletoUtil.linhaDigitavelNumericaEmCodigoDeBarras(" "+LINHA_DIGITAVEL_NUMERICA_EXPECTED+" ")); + assertTrue(!CODIGO_DE_BARRAS_EXPECTED.equals(BoletoUtil.linhaDigitavelNumericaEmCodigoDeBarras(LINHA_DIGITAVEL_NUMERICA_EXPECTED.replace("8", "3")))); + } + + @Test + public void testCheckFormatoCodigoDeBarras() { + for (String inputTest : INPUTS_CODIGO_DE_BARRAS) { + try { + BoletoUtil.checkFormatoCodigoDeBarras(inputTest); + fail("Controle de formatação falho."); + } catch (CodigoDeBarrasException e) { + assertTrue(true); + } + } + } + + @Test(expected = IllegalArgumentException.class) + public void testCheckExistsCodigoDeBarrasComArgumentoStringNull() { + + BoletoUtil.checkExistsCodigoDeBarras(null); + } + + @Test + public void testCheckExistsCodigoDeBarrasComArgumentoStringVazio() { + + StringBuilder emptyInput = new StringBuilder(""); + + for (int i = 0; i <= 60; i++) { + try { + BoletoUtil.checkExistsCodigoDeBarras(emptyInput.toString()); + fail("Controle de espaços falho."); + } catch (IllegalArgumentException e) { + assertTrue(true); + } + emptyInput.append(" "); + } + } + + + @Test + public void testIsCodigoDeBarrasValido() { + + assertTrue(!BoletoUtil.isCodigoDeBarrasValido(null)); + assertTrue(BoletoUtil.isCodigoDeBarrasValido(CODIGO_DE_BARRAS_EXPECTED)); + assertTrue(!BoletoUtil.isCodigoDeBarrasValido(CODIGO_DE_BARRAS_EXPECTED+0)); + assertTrue(!BoletoUtil.isCodigoDeBarrasValido(1+CODIGO_DE_BARRAS_EXPECTED)); + } + + @Test + public void testIsLinhaDigitavelFormatadaValida() { + + assertTrue(!BoletoUtil.isLinhaDigitavelFormatadaValida(null)); + assertTrue(BoletoUtil.isLinhaDigitavelFormatadaValida(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertTrue(!BoletoUtil.isLinhaDigitavelFormatadaValida(LINHA_DIGITAVEL_FORMATADA_EXPECTED+0)); + assertTrue(!BoletoUtil.isLinhaDigitavelFormatadaValida(LINHA_DIGITAVEL_NUMERICA_EXPECTED)); + } + + @Test + public void testIsLinhaDigitavelNumericaValida() { + + assertTrue(!BoletoUtil.isLinhaDigitavelNumericaValida(null)); + assertTrue(BoletoUtil.isLinhaDigitavelNumericaValida(LINHA_DIGITAVEL_NUMERICA_EXPECTED)); + assertTrue(!BoletoUtil.isLinhaDigitavelNumericaValida(0+LINHA_DIGITAVEL_NUMERICA_EXPECTED)); + assertTrue(!BoletoUtil.isLinhaDigitavelNumericaValida(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + } + + @Test + public void testCheckFormatoLinhaDigitavelFormatada() { + + for (String inputTest : INPUTS_LINHAS_DIGITAVEIS_FORMATADAS) { + try { + BoletoUtil.checkFormatoLinhaDigitavelFormatada(inputTest); + fail("Controle de formatação falho."); + } catch (LinhaDigitavelException e) { + assertTrue(true); + } + } + } + + @Test + public void testCheckFormatoLinhaDigitavelNumerica() { + for (String inputTest : INPUTS_LINHAS_DIGITAVEIS_NUMERICAS) { + try { + BoletoUtil.checkFormatoLinhaDigitavelNumerica(inputTest); + fail("Controle de formatação falho."); + } catch (LinhaDigitavelException e) { + assertTrue(true); + } + } + } + + @Test(expected = IllegalArgumentException.class) + public void testCheckExistsLinhaDigitavelComArgumentoStringNull() { + + BoletoUtil.checkExistsLinhaDigitavel(null); + } + + @Test + public void testCheckExistsLinhaDigitavelComArgumentoStringVazio() { + + StringBuilder emptyInput = new StringBuilder(""); + + for (int i = 0; i <= 60; i++) { + try { + BoletoUtil.checkExistsLinhaDigitavel(emptyInput.toString()); + fail("Controle de espaços falho."); + } catch (IllegalArgumentException e) { + assertTrue(true); + } + emptyInput.append(" "); + } + } + + @Test(expected = IllegalArgumentException.class) + public void testLinhaDigitavelFormatadaEmNumericaComArgumentoNull() { + + BoletoUtil.linhaDigitavelFormatadaEmNumerica(null); + } + + @Test + public void testLinhaDigitavelFormatadaEmNumericaComArgumentoStringVazio() { + + StringBuilder emptyInput = new StringBuilder(""); + + for (int i = 0; i <= 60; i++) { + try { + BoletoUtil.linhaDigitavelFormatadaEmNumerica(emptyInput + .toString()); + fail("Controle de espaços falho."); + } catch (IllegalArgumentException e) { + assertTrue(true); + } + emptyInput.append(" "); + } + } + + @Test + public void testLinhaDigitavelFormatadaEmNumericaComArgumentoStringDeFormatoNaoPrevisto() { + + for (String inputTest : INPUTS_LINHAS_DIGITAVEIS_FORMATADAS) { + try { + BoletoUtil.linhaDigitavelFormatadaEmNumerica(inputTest); + fail("Controle de formatação falho."); + } catch (LinhaDigitavelException e) { + assertTrue(true); + } + } + } + + @Test + public void testLinhaDigitavelFormatadaEmNumerica() { + + assertEquals(LINHA_DIGITAVEL_NUMERICA_EXPECTED,BoletoUtil.linhaDigitavelFormatadaEmNumerica(LINHA_DIGITAVEL_FORMATADA_EXPECTED)); + assertEquals(LINHA_DIGITAVEL_NUMERICA_EXPECTED,BoletoUtil.linhaDigitavelFormatadaEmNumerica(" "+LINHA_DIGITAVEL_FORMATADA_EXPECTED+" ")); + assertTrue(!LINHA_DIGITAVEL_NUMERICA_EXPECTED.equals(BoletoUtil.linhaDigitavelFormatadaEmNumerica(LINHA_DIGITAVEL_FORMATADA_EXPECTED.replace("8", "3")))); + } + + @Test(expected = IllegalArgumentException.class) + public void testLinhaDigitavelNumericaEmFormatadaComArgumentoNull() { + + BoletoUtil.linhaDigitavelNumericaEmFormatada(null); + } + + @Test + public void testLinhaDigitavelNumericaEmFormatadaComArgumentoStringVazio() { + + StringBuilder emptyInput = new StringBuilder(""); + + for (int i = 0; i <= 60; i++) { + try { + BoletoUtil.linhaDigitavelNumericaEmFormatada(emptyInput + .toString()); + fail("Controle de espaços falho."); + } catch (IllegalArgumentException e) { + assertTrue(true); + } + emptyInput.append(" "); + } + } + + @Test + public void testLinhaDigitavelNumericaEmFormatadaComArgumentoStringDeFormatoNaoPrevisto() { + + for (String inputTest : INPUTS_LINHAS_DIGITAVEIS_NUMERICAS) { + try { + BoletoUtil.linhaDigitavelNumericaEmFormatada(inputTest); + fail("Controle de formatação falho."); + } catch (LinhaDigitavelException e) { + assertTrue(true); + } + } + } + + @Test + public void testLinhaDigitavelNumericaEmFormatada() { + + assertEquals(LINHA_DIGITAVEL_FORMATADA_EXPECTED,BoletoUtil.linhaDigitavelNumericaEmFormatada(LINHA_DIGITAVEL_NUMERICA_EXPECTED)); + assertEquals(LINHA_DIGITAVEL_FORMATADA_EXPECTED,BoletoUtil.linhaDigitavelNumericaEmFormatada(" "+LINHA_DIGITAVEL_NUMERICA_EXPECTED+" ")); + assertTrue(!LINHA_DIGITAVEL_FORMATADA_EXPECTED.equals(BoletoUtil.linhaDigitavelNumericaEmFormatada(LINHA_DIGITAVEL_NUMERICA_EXPECTED.replace("8", "3")))); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestCodigoDeBarras.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestCodigoDeBarras.java new file mode 100644 index 0000000..e7f9f1d --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestCodigoDeBarras.java @@ -0,0 +1,140 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:12:06 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:12:06 + * + */ + + +package org.jrimum.bopepo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.math.BigDecimal; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import org.jrimum.bopepo.campolivre.CampoLivre; +import org.jrimum.bopepo.campolivre.CampoLivreFactory; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeMoeda; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.junit.Before; +import org.junit.Test; + +/** + * + * Teste Unitário para:
+ * {@link org.jrimum.bopepo.CodigoDeBarras#getFatorDeVencimento()} + * + * + * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCodigoDeBarras{ + + private CampoLivre clBradesco; + + private Titulo titulo; + + private CodigoDeBarras codigoDeBarras; + + private Date VENCIMENTO = new GregorianCalendar(2000, Calendar.JULY, 3).getTime(); + + @Before + public void setUp() throws Exception { + + Sacado sacado = new Sacado("Sacado"); + Cedente cedente = new Cedente("Cedente"); + + ContaBancaria contaBancaria = new ContaBancaria(); + contaBancaria.setBanco(BancosSuportados.BANCO_BRADESCO.create()); + + Agencia agencia = new Agencia(1234, "1"); + contaBancaria.setAgencia(agencia); + + contaBancaria.setCarteira(new Carteira(5)); + + NumeroDaConta numeroDaConta = new NumeroDaConta(); + numeroDaConta.setCodigoDaConta(6789); + contaBancaria.setNumeroDaConta(numeroDaConta); + + titulo = new Titulo(contaBancaria, sacado, cedente); + titulo.setNossoNumero("12345678901"); + titulo.setTipoDeMoeda(TipoDeMoeda.REAL); + titulo.setValor(BigDecimal.valueOf(100.23)); + titulo.setDataDoVencimento(VENCIMENTO); + + clBradesco = CampoLivreFactory.create(titulo); + + codigoDeBarras = new CodigoDeBarras(titulo, clBradesco); + + } + + /** + * Test method for + * {@link org.jrimum.bopepo.CodigoDeBarras#getDigitoVerificadorGeral()}. + */ + @Test + public void testGetDigitoVerificadorGeral() { + assertTrue(2 == codigoDeBarras.getDigitoVerificadorGeral().getValue()); + } + + /** + * Test method for + * {@link org.jrimum.bopepo.CodigoDeBarras#toString()}. + */ + @Test + public void testWrite() { + + assertEquals("23792100000000100231234051234567890100067890", codigoDeBarras.write()); + + } + + /** + * Test method for + * {@link org.jrimum.bopepo.CodigoDeBarras#getFatorDeVencimento()}. + */ + @Test + public void testGetFatorDeVencimento() { + + assertTrue(1000 == codigoDeBarras.getFatorDeVencimento().getValue()); + + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestFatorDeVencimento.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestFatorDeVencimento.java new file mode 100644 index 0000000..b7b1dc9 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestFatorDeVencimento.java @@ -0,0 +1,107 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:15:56 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:15:56 + * + */ +package org.jrimum.bopepo; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import org.apache.commons.lang.time.DateUtils; +import org.junit.Test; + + +public class TestFatorDeVencimento { + + private GregorianCalendar data = new GregorianCalendar(); + + @Test(expected = IllegalArgumentException.class) + public void testToFatorComDataNula() { + + FatorDeVencimento.toFator(null); + } + + @Test(expected = IllegalArgumentException.class) + public void testToFatorComDataMenorQueDataBase() { + + data.set(1997, Calendar.JANUARY, 1); + + FatorDeVencimento.toFator(data.getTime()); + } + + @Test(expected = IllegalArgumentException.class) + public void testToFatorComDataMaiorQueDataLimite() { + + data.set(2025, Calendar.FEBRUARY, 22); + + FatorDeVencimento.toFator(data.getTime()); + } + + @Test + public final void testToFator() { + + data.set(2000, Calendar.JULY, 3); + assertEquals(1000, FatorDeVencimento.toFator(data.getTime())); + + data.set(2000, Calendar.JULY, 5); + assertEquals(1002, FatorDeVencimento.toFator(data.getTime())); + + data.set(2025, Calendar.FEBRUARY, 21); + assertEquals(9999, FatorDeVencimento.toFator(data.getTime())); + } + + @Test(expected = IllegalArgumentException.class) + public void testToDateComFatorMenorQueLimiteBase() { + + FatorDeVencimento.toDate(-1); + } + + @Test(expected = IllegalArgumentException.class) + public void testToDateComFatorMaiorQueLimiteMaximo() { + + FatorDeVencimento.toDate(10000); + } + + @Test + public final void testToDate() { + + data.set(2000, Calendar.JULY, 3); + Date date = DateUtils.truncate(data.getTime() ,Calendar.DATE); + assertEquals(date, FatorDeVencimento.toDate(1000)); + + data.set(2000, Calendar.JULY, 5); + date = DateUtils.truncate(data.getTime() ,Calendar.DATE); + assertEquals(date, FatorDeVencimento.toDate(1002)); + + data.set(2025, Calendar.FEBRUARY, 21); + date = DateUtils.truncate(data.getTime() ,Calendar.DATE); + assertEquals(date, FatorDeVencimento.toDate(9999)); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestLinhaDigitavel.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestLinhaDigitavel.java new file mode 100644 index 0000000..607a78e --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/TestLinhaDigitavel.java @@ -0,0 +1,110 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:12:17 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:12:17 + * + */ + + +package org.jrimum.bopepo; + +import static org.junit.Assert.assertEquals; + +import java.math.BigDecimal; +import java.util.Date; + +import org.jrimum.bopepo.campolivre.CampoLivre; +import org.jrimum.bopepo.campolivre.CampoLivreFactory; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeMoeda; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.utilix.text.DateFormat; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + * + */ +public class TestLinhaDigitavel{ + + private CampoLivre clBradesco; + + private Titulo titulo; + + private CodigoDeBarras codigoDeBarras; + + private LinhaDigitavel linhaDigitavel; + + private Date VENCIMENTO = DateFormat.DDMMYYYY_B.parse("03/07/2000"); + + @Before + public void setUp() throws Exception { + + Sacado sacado = new Sacado("Sacado"); + Cedente cedente = new Cedente("Cedente"); + + ContaBancaria contaBancaria = new ContaBancaria(); + contaBancaria.setBanco(BancosSuportados.BANCO_BRADESCO.create()); + + Agencia agencia = new Agencia(1234, "1"); + contaBancaria.setAgencia(agencia); + + contaBancaria.setCarteira(new Carteira(5)); + + NumeroDaConta numeroDaConta = new NumeroDaConta(); + numeroDaConta.setCodigoDaConta(6789); + contaBancaria.setNumeroDaConta(numeroDaConta); + + titulo = new Titulo(contaBancaria, sacado, cedente); + titulo.setNossoNumero("12345678901"); + titulo.setTipoDeMoeda(TipoDeMoeda.REAL); + titulo.setValor(BigDecimal.valueOf(100.23)); + titulo.setDataDoVencimento(VENCIMENTO); + + clBradesco = CampoLivreFactory.create(titulo); + + codigoDeBarras = new CodigoDeBarras(titulo, clBradesco); + + linhaDigitavel = new LinhaDigitavel(codigoDeBarras); + + } + + /** + * Test method for {@link org.jrimum.bopepo.LinhaDigitavel#toString()}. + */ + @Test + public void testWrite() { + + assertEquals("23791.23405 51234.567892 01000.678902 2 10000000010023", linhaDigitavel.write()); + + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafraBaseTest.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafraBaseTest.java new file mode 100644 index 0000000..636d95d --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafraBaseTest.java @@ -0,0 +1,42 @@ +package org.jrimum.bopepo.campolivre; + +import org.junit.Test; + +/** + * Classe base para os testes de campos livres do Banco Safra, contendo métodos + * básicos de testes comuns que se encontra no {@linkplain AbstractCLBancoSafra} + * . + * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public abstract class AbstractCLBancoSafraBaseTest extends AbstractCampoLivreBaseTest{ + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraNull() { + + testeSeNaoPermiteCarteiraNula(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraSemTipoDeCobranca() { + + testeSeNaoPermiteCarteiraSemTipoDeCobranca(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoNegativo() { + + testeSeNaoPermiteCarteiraComCodigoNegativo(); + + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoAcimaDe2Digitos() { + + testeSeNaoPermiteCarteiraComCodigoAcimaDoLimite(111); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/AbstractCampoLivreBaseTest.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/AbstractCampoLivreBaseTest.java new file mode 100644 index 0000000..f07bebf --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/AbstractCampoLivreBaseTest.java @@ -0,0 +1,439 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 15/02/2010 - 17:42:20 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 15/02/2010 - 17:42:20 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.math.RoundingMode; + +import org.jrimum.domkee.financeiro.banco.ParametroBancario; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.junit.Test; + +/** + *

+ * Classe base para os testes de campos livres. Contém os métodos + * básicos de testes de qualquer campo livre. + *

+ *

+ * Todos os testes de campo livre devem herdar desta classe. + *

+ * + * @author Gilmar P.S.L + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public abstract class AbstractCampoLivreBaseTest { + + protected final Titulo titulo; + + private CampoLivre campoLivreToTest; + + private String campoLivreValidoAsString; + + public AbstractCampoLivreBaseTest() { + super(); + this.titulo = new Titulo(new ContaBancaria(), new Sacado("S"), new Cedente("C")); + } + + /* + * Testes para obrigatórios de todos os campos livres. + */ + + @Test + public final void seCriacaoDoCampoLivreOcorreSemFalha() { + + assertNotNull(campoLivreToTest); + } + + @Test + public final void seTamanhoDoCampoLivreEscritoIgualA25() { + campoLivreToTest.write().length(); + assertEquals(25, campoLivreToTest.write().length()); + } + + @Test + public final void seClasseDaInstaciaDoCampoLivreEstaCorreta() { + + @SuppressWarnings("unchecked") + Class classeGeradoraDoCampoLivre = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + + assertEquals(classeGeradoraDoCampoLivre, campoLivreToTest.getClass()); + } + + @Test + public final void seCampoLivreEscritoEstaCorreto() { + campoLivreToTest.write(); + assertEquals(campoLivreValidoAsString, campoLivreToTest.write()); + } + + /* + * Testes para uso específico + */ + + protected final void testeSeNaoPermiteAgenciaNula() throws CampoLivreException{ + + titulo.getContaBancaria().setAgencia(null); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteAgenciaComCodigoZero() throws CampoLivreException{ + + titulo.getContaBancaria().setAgencia(new Agencia(-0)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteAgenciaComCodigoNegativo() throws IllegalArgumentException{ + + //uma exceção deve ser lançada aqui + titulo.getContaBancaria().setAgencia(new Agencia(-1)); + } + + protected final void testeSeNaoPermiteNumeroDaAgenciaComDigitosAcimaDoLimite(int limiteAcima) throws CampoLivreException { + + titulo.getContaBancaria().setAgencia(new Agencia(limiteAcima)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteDigitoDaAgenciaNulo() throws CampoLivreException { + + titulo.getContaBancaria().setAgencia(new Agencia(1)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteDigitoDaAgenciaNaoNumerico() throws CampoLivreException { + + titulo.getContaBancaria().setAgencia(new Agencia(1,"X")); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteCarteiraNula() throws CampoLivreException { + + titulo.getContaBancaria().setCarteira(null); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteCarteiraSemTipoDeCobranca() throws CampoLivreException{ + + titulo.getContaBancaria().setCarteira(new Carteira()); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteCarteiraComCodigoNegativo() throws CampoLivreException{ + + titulo.getContaBancaria().setCarteira(new Carteira(-1)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteCarteiraComCodigoAcimaDoLimite(int limiteAcima) throws CampoLivreException{ + + titulo.getContaBancaria().setCarteira(new Carteira(limiteAcima)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNossoNumeroNulo() throws CampoLivreException{ + + titulo.setNossoNumero(null); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNossoNumeroComBrancos(int nnLength) throws CampoLivreException{ + + StringBuilder nnBlank = new StringBuilder(nnLength); + + for(int i = 1; i <= nnLength; i++){ + nnBlank.append(" "); + } + + titulo.setNossoNumero(nnBlank.toString()); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNossoNumeroComEspacos(int nnLength) throws CampoLivreException{ + + //Nosso número randômico + String nnRadom = nossoNumeroRadom(nnLength); + + char[] nn = nnRadom.toCharArray(); + + //Com espaço (+ ou -) no meio + nn[nnRadom.length()/2] = ' '; + + titulo.setNossoNumero(nn.toString()); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(int nnOutLength) throws CampoLivreException{ + + titulo.setNossoNumero(nossoNumeroRadom(nnOutLength)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNumeroDaContaNulo() throws CampoLivreException{ + + titulo.getContaBancaria().setNumeroDaConta(null); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNumeroDaContaComCodigoZero() throws CampoLivreException{ + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(0)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNumeroDaContaComCodigoNegativo() throws CampoLivreException{ + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(-1)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(int limiteAcima) throws CampoLivreException{ + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(limiteAcima)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteDigitoDaContaNulo() throws CampoLivreException { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteDigitoDaContaVazio() throws CampoLivreException { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1,EMPTY)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteDigitoDaContaNegativo() throws CampoLivreException { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1,"-1")); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteDigitoDaContaNaoNumerico() throws CampoLivreException { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1,"X")); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteParametroBancarioNulo() throws CampoLivreException{ + + titulo.setParametrosBancarios(null); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteParametroBancarioAusente() throws CampoLivreException{ + + titulo.setParametrosBancarios(new ParametrosBancariosMap()); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteParametroBancarioSemValor(ParametroBancario parametro) throws IllegalArgumentException{ + + //uma exceção deve ser lançada aqui + titulo.setParametrosBancarios(new ParametrosBancariosMap(parametro, null)); + } + + protected final void testeSeNaoPermiteParametroBancarioComValorAcimaDoLimite(ParametroBancario parametro, Integer limiteAcima) throws IllegalArgumentException{ + + titulo.setParametrosBancarios(new ParametrosBancariosMap(parametro, limiteAcima)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + protected final void testeSeNaoPermiteValorDoTituloNulo() throws NullPointerException{ + + //uma exceção deve ser lançada aqui + titulo.setValor(null); + } + + protected final void testeSeNaoPermiteValorDoTituloNegativo() throws CampoLivreException{ + + titulo.setValor(BigDecimal.valueOf(-23.4150)); + + createCampoLivreToTest(); + + //uma exceção deve ser lançada aqui + writeCampoLivre(); + } + + /* + * Obtenção de novas instâncias. + */ + + public final void createCampoLivreToTest() { + this.campoLivreToTest = CampoLivreFactory.create(titulo); + } + + /* + * Acessores + */ + + /** + * Simplesmente escreve o campo livre executando o método {@code write()}. + * + * @return campo livre + */ + public final String writeCampoLivre(){ + + return campoLivreToTest.write(); + } + + protected final void setCampoLivreEsperadoComoString(String campoLivreValidoAsString) { + this.campoLivreValidoAsString = campoLivreValidoAsString; + } + + /* + * Helpers + */ + + /** + * Gera um nosso numero randomicamente com o tamanho determinado. + * + * @param nnLength + * @return geraNossoNumero + */ + private final String nossoNumeroRadom(int nnLength){ + + //Nosso número randômico + return new BigDecimal(Math.random()).movePointRight(nnLength).setScale(0,RoundingMode.DOWN).toString(); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDeBrasilia.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDeBrasilia.java new file mode 100644 index 0000000..4f10764 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDeBrasilia.java @@ -0,0 +1,181 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 24/08/2013 - 19:54:00 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 24/08/2013 - 19:54:00 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoDeBrasilia.CHAVE_ASBACE_DIGITO1; +import static org.jrimum.bopepo.parametro.ParametroBancoDeBrasilia.CHAVE_ASBACE_DIGITO2; +import static org.junit.Assert.assertEquals; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do BRB - Banco de Brasília. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoDeBrasilia extends AbstractCampoLivreBaseTest { + + private final int NOSSO_NUMERO_LENGTH = 6; + + @Before + public void setUp() { + + titulo.getContaBancaria().setBanco( + BancosSuportados.BANCO_DE_BRASILIA.create()); + + titulo.getContaBancaria().setAgencia(new Agencia(58)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(6002006)); + titulo.getContaBancaria().setCarteira(new Carteira(1,TipoDeCobranca.SEM_REGISTRO)); + titulo.setNossoNumero("000001"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0000586002006100000107045"); + assertEquals(4, titulo.getParametrosBancarios().getValor(CHAVE_ASBACE_DIGITO1)); + assertEquals(5, titulo.getParametrosBancarios().getValor(CHAVE_ASBACE_DIGITO2)); + } + + @Test + public void seGeraCorretoParaCarteiraComRegistro(){ + + titulo.getContaBancaria().setCarteira(new Carteira(2,TipoDeCobranca.COM_REGISTRO)); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0000586002006200000107031"); + + seCampoLivreEscritoEstaCorreto(); + assertEquals(3, titulo.getParametrosBancarios().getValor(CHAVE_ASBACE_DIGITO1)); + assertEquals(1, titulo.getParametrosBancarios().getValor(CHAVE_ASBACE_DIGITO2)); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaNula() { + + testeSeNaoPermiteAgenciaNula(); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteAgenciaComCodigoNegativo() { + + testeSeNaoPermiteAgenciaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaComCodigoZero() { + + testeSeNaoPermiteAgenciaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaAgenciaAcimaDe3Digitos() { + + testeSeNaoPermiteNumeroDaAgenciaComDigitosAcimaDoLimite(1000); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaNulo() { + + testeSeNaoPermiteNumeroDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoZero() { + + testeSeNaoPermiteNumeroDaContaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoNegativo() { + + testeSeNaoPermiteNumeroDaContaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoAcimaDe7Digitos() { + + testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(12345678); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroNulo() { + + testeSeNaoPermiteNossoNumeroNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComBrancos() { + + testeSeNaoPermiteNossoNumeroComBrancos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComEspacos() { + + testeSeNaoPermiteNossoNumeroComEspacos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe6() { + + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH - 1); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraNull() { + + testeSeNaoPermiteCarteiraNula(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoNegativo() { + + testeSeNaoPermiteCarteiraComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoAcimaDe2() { + + testeSeNaoPermiteCarteiraComCodigoAcimaDoLimite(3); + } + +} \ No newline at end of file diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN10.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN10.java new file mode 100644 index 0000000..b504490 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN10.java @@ -0,0 +1,67 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 15/02/2010 - 18:40:47 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 15/02/2010 - 18:40:47 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco do brasil com o nosso número + * de tamanho igual a 10. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoDoBrasilNN10 extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + titulo.getContaBancaria().setCarteira(new Carteira(5)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(6789)); + titulo.setNossoNumero("1234567890"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0000000006789123456789005"); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN11.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN11.java new file mode 100644 index 0000000..69a9cac --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN11.java @@ -0,0 +1,68 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:13:47 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:13:47 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco do brasil com o nosso número + * de tamanho igual a 11. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoDoBrasilNN11 extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1234, "1")); + titulo.getContaBancaria().setCarteira(new Carteira(5)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(6789)); + titulo.setNossoNumero("12345678901"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1234567890112340000678905"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN17Convenio6.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN17Convenio6.java new file mode 100644 index 0000000..f2ba267 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN17Convenio6.java @@ -0,0 +1,66 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:13:58 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:13:58 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + +/** + * + * Teste unitário do campo livre do banco do brasil com o nosso número + * de tamanho igual a 17 e convênio de 6 posições. + * + * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoDoBrasilNN17Convenio6 extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(123456)); + titulo.setNossoNumero("12345678901234567"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1234561234567890123456721"); + } + +} \ No newline at end of file diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN17Convenio7.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN17Convenio7.java new file mode 100644 index 0000000..1559d1d --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoDoBrasilNN17Convenio7.java @@ -0,0 +1,35 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + + +/** + * + * Teste unitário do campo livre do banco do brasil com o nosso número + * de tamanho igual a 17 e convênio de 7 posições. + * + * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoDoBrasilNN17Convenio7 extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_BRASIL.create()); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1234567)); + titulo.getContaBancaria().setCarteira(new Carteira(23)); + titulo.setNossoNumero("12345678901234567"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0000001234567890123456723"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoIntermedium.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoIntermedium.java new file mode 100644 index 0000000..7d29cc1 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoIntermedium.java @@ -0,0 +1,34 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do Banco Intermedium. + *

+ * + * @author Gilmar P.S.L + * @author Fernando Dias + * + */ +public class TestCLBancoIntermedium extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_INTEMEDIUM.create()); + titulo.getContaBancaria().setAgencia( new Agencia(54, "0")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(149666,"6")); + titulo.getContaBancaria().setCarteira(new Carteira(5)); + titulo.setNossoNumero("5611002"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0054700000561100214966660"); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoReal.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoReal.java new file mode 100644 index 0000000..1073b61 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoReal.java @@ -0,0 +1,69 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:14:06 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:14:06 + * + */ + + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco real + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLBancoReal extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_ABN_AMRO_REAL.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1018)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(16324)); + titulo.setNumeroDoDocumento("1234567890123"); + titulo.setNossoNumero("1234567890123"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1018001632491234567890123"); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaNaoRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaNaoRegistrada.java new file mode 100644 index 0000000..ea8281c --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaNaoRegistrada.java @@ -0,0 +1,44 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoRural.CODIGO_REDUZIDO; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco Rural - Cobrança não Registrada. + *

+ * + * @author Gilmar P.S.L + * @author Fernando Dias + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoRuralCobrancaNaoRegistrada extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_RURAL.create()); + titulo.getContaBancaria().setAgencia(new Agencia(133, "1")); + titulo.getContaBancaria().setCarteira(new Carteira(5,TipoDeCobranca.SEM_REGISTRO)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(6789)); + titulo.setNossoNumero("123456789012345"); + + // Código Reduzido do Cliente fornecido pelo Banco + titulo.setParametrosBancarios( new ParametrosBancariosMap(CODIGO_REDUZIDO, 123)); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("9133123123456789012345000"); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaNaoRegistradaSeguradora.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaNaoRegistradaSeguradora.java new file mode 100644 index 0000000..f4cc6c8 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaNaoRegistradaSeguradora.java @@ -0,0 +1,51 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoRural.CODIGO_REDUZIDO; +import static org.jrimum.bopepo.parametro.ParametroBancoRural.VALOR_IOS; + +import java.math.BigDecimal; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do Banco Rural - Cobrança não Registrada Seguradora. + *

+ * + * @author Gilmar P.S.L + * @author Fernando Dias + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoRuralCobrancaNaoRegistradaSeguradora extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_RURAL.create()); + titulo.getContaBancaria().setAgencia(new Agencia(155, "1")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1625462,"9")); + titulo.getContaBancaria().setCarteira(new Carteira(101, TipoDeCobranca.SEM_REGISTRO)); + titulo.setNossoNumero("0000022569"); + titulo.setDigitoDoNossoNumero("7"); + + ParametrosBancariosMap map = new ParametrosBancariosMap(); + map.adicione(VALOR_IOS, new BigDecimal("40.77")); + map.adicione(CODIGO_REDUZIDO, 1); + + titulo.setParametrosBancarios(map); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("4155001000002256970004077"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaRegistrada.java new file mode 100644 index 0000000..a2bb957 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoRuralCobrancaRegistrada.java @@ -0,0 +1,38 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco Rural - Cobrança Registrada. + *

+ * + * @author Gilmar P.S.L + * @author Fernando Dias + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoRuralCobrancaRegistrada extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_RURAL.create()); + titulo.getContaBancaria().setAgencia(new Agencia(133, "1")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(6789,"1")); + titulo.getContaBancaria().setCarteira(new Carteira(5,TipoDeCobranca.COM_REGISTRO)); + titulo.setNossoNumero("1234567"); + titulo.setDigitoDoNossoNumero("1"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0133000006789112345671000"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSafraCobrancaNaoRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSafraCobrancaNaoRegistrada.java new file mode 100644 index 0000000..5ec42a2 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSafraCobrancaNaoRegistrada.java @@ -0,0 +1,146 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 22:36:47 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 22:36:47 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco safra para cobrança não registrada + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLBancoSafraCobrancaNaoRegistrada extends AbstractCLBancoSafraBaseTest { + + private final int NOSSO_NUMERO_LENGTH = 17; + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_SAFRA.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1730, "0")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(12110, "0")); + titulo.getContaBancaria().setCarteira(new Carteira(6, TipoDeCobranca.SEM_REGISTRO)); + titulo.setNossoNumero("12345678901234567"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("7121100123456789012345674"); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaNulo() { + + testeSeNaoPermiteNumeroDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoZero() { + + testeSeNaoPermiteNumeroDaContaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoNegativo() { + + testeSeNaoPermiteNumeroDaContaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoAcimaDe8Digitos() { + + testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(123456789); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNulo() { + + testeSeNaoPermiteDigitoDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaVazio() { + + testeSeNaoPermiteDigitoDaContaVazio(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNegativo() { + + testeSeNaoPermiteDigitoDaContaNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNaoNumerico() { + + testeSeNaoPermiteDigitoDaContaNaoNumerico(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroNulo() { + + testeSeNaoPermiteNossoNumeroNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComBrancos() { + + testeSeNaoPermiteNossoNumeroComBrancos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComEspacos() { + + testeSeNaoPermiteNossoNumeroComEspacos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe9() { + + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH - 1); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSafraCobrancaRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSafraCobrancaRegistrada.java new file mode 100644 index 0000000..4673c21 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSafraCobrancaRegistrada.java @@ -0,0 +1,182 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/04/2008 - 22:36:47 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/04/2008 - 22:36:47 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco safra para cobrança registrada + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLBancoSafraCobrancaRegistrada extends AbstractCLBancoSafraBaseTest { + + private final int NOSSO_NUMERO_LENGTH = 9; + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_SAFRA.create()); + titulo.getContaBancaria().setAgencia(new Agencia(100, "0")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(727469,"8")); + titulo.getContaBancaria().setCarteira(new Carteira(70, TipoDeCobranca.COM_REGISTRO)); + titulo.setNossoNumero("960900152"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("7010000072746989609001522"); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaNula() { + + testeSeNaoPermiteAgenciaNula(); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteAgenciaComCodigoNegativo() { + + testeSeNaoPermiteAgenciaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaComCodigoZero() { + + testeSeNaoPermiteAgenciaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaAgenciaAcimaDe4Digitos() { + + testeSeNaoPermiteNumeroDaAgenciaComDigitosAcimaDoLimite(10000); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaAgenciaNulo() { + + testeSeNaoPermiteDigitoDaAgenciaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaAgenciaNaoNumerico() { + + testeSeNaoPermiteDigitoDaAgenciaNaoNumerico(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaNulo() { + + testeSeNaoPermiteNumeroDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoZero() { + + testeSeNaoPermiteNumeroDaContaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoNegativo() { + + testeSeNaoPermiteNumeroDaContaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoAcimaDe8Digitos() { + + testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(123456789); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNulo() { + + testeSeNaoPermiteDigitoDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaVazio() { + + testeSeNaoPermiteDigitoDaContaVazio(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNegativo() { + + testeSeNaoPermiteDigitoDaContaNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNaoNumerico() { + + testeSeNaoPermiteDigitoDaContaNaoNumerico(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroNulo() { + + testeSeNaoPermiteNossoNumeroNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComBrancos() { + + testeSeNaoPermiteNossoNumeroComBrancos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComEspacos() { + + testeSeNaoPermiteNossoNumeroComEspacos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe9() { + + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH - 1); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSantander.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSantander.java new file mode 100644 index 0000000..35af23e --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoSantander.java @@ -0,0 +1,63 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoSantander.IOF_SEGURADORA; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco Santander. + *

+ * + * @author Gilmar P.S.L. + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoSantander extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_SANTANDER.create()); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(162546,"9")); + titulo.getContaBancaria().setCarteira(new Carteira(101, TipoDeCobranca.COM_REGISTRO, "101- Cobrança Simples Rápida COM Registro")); + titulo.setNossoNumero("00000000002"); + titulo.setDigitoDoNossoNumero("7"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("9162546900000000000270101"); + + } + + @Test + public void testIofSeguradora(){ + + titulo.setParametrosBancarios(new ParametrosBancariosMap(IOF_SEGURADORA, 8)); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("9162546900000000000278101"); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void testCarteiras(){ + + //Carteira nao autorizada + titulo.getContaBancaria().setCarteira(new Carteira(123)); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoobCobrancaNaoRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoobCobrancaNaoRegistrada.java new file mode 100644 index 0000000..ca57ddd --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBancoobCobrancaNaoRegistrada.java @@ -0,0 +1,98 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 17/02/2011 - 12:40:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 17/02/2011 - 12:40:00 + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do Banco Bancoob para cobrança não registrada. + *

+ * + * @author Gilmar P.S.L + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBancoobCobrancaNaoRegistrada extends AbstractCampoLivreBaseTest{ + + private final int NOSSO_NUMERO_LENGTH = 7; + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCOOB.create()); + titulo.getContaBancaria().setAgencia(new Agencia(4340)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(1, "0")); + titulo.getContaBancaria().setCarteira(new Carteira(1)); + titulo.setNossoNumero("0200000"); + titulo.setDigitoDoNossoNumero("1"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1434001000001002000001001"); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe7() { + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH + 1); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNulo() { + testeSeNaoPermiteDigitoDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNaoNumero() { + testeSeNaoPermiteDigitoDaContaNaoNumerico(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaNegativo() { + testeSeNaoPermiteDigitoDaContaNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDaContaVazio() { + testeSeNaoPermiteDigitoDaContaVazio(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaMaiorQueSeisDigitos() { + testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(1000000); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanestes.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanestes.java new file mode 100644 index 0000000..3d12ee4 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanestes.java @@ -0,0 +1,129 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: Dec 13, 2008 - 1:07:16 PM + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: Dec 13, 2008 - 1:07:16 PM + * + */ +package org.jrimum.bopepo.campolivre; + +import static org.junit.Assert.assertEquals; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + * + *

+ * Valida a implementação do campo livre para o Banco Banestes. + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBanestes extends AbstractCampoLivreBaseTest { + + @Before + public void setUp() { + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_ESTADO_DO_ESPIRITO_SANTO.create()); + titulo.getContaBancaria().setCarteira(new Carteira(4, TipoDeCobranca.COM_REGISTRO)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(7730070)); + titulo.setNossoNumero("10297"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0001029700007730070402182"); + } + + /** + * Configura, no título, a carteira utilizada no teste. + * + * @param carteira + */ + private void setCarteiraDoTitulo(Carteira carteira) { + titulo.getContaBancaria().setCarteira(carteira); + } + + @Test + public void seOWriteRetornaOValorEsperadoParaUmaCarteiraSemRegistro() { + + final Carteira carteira = new Carteira(); + carteira.setTipoCobranca(TipoDeCobranca.SEM_REGISTRO); + setCarteiraDoTitulo(carteira); + + createCampoLivreToTest(); + + assertEquals("Testando um campo livre válido da carteira sem registro.", "0001029700007730070202108", writeCampoLivre()); + } + + @Test + public void seOWriteRetornaOValorEsperadoParaUmaCarteiraCaucionada() { + + setCarteiraDoTitulo(new Carteira(3, TipoDeCobranca.COM_REGISTRO)); + + createCampoLivreToTest(); + + assertEquals("Testando um campo livre válido da carteira caucionada.", "0001029700007730070302196", writeCampoLivre()); + } + + @Test(expected=CampoLivreException.class) + public void criacaoSemTipoDeCobranca() { + + setCarteiraDoTitulo(new Carteira()); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoSemNumeroDaConta() { + + titulo.getContaBancaria().setNumeroDaConta(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoSemNossoNumero() { + + titulo.setNossoNumero(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoNossoNumeroMaiorQue8Digitos() { + + titulo.setNossoNumero("123456789"); + CampoLivreFactory.create(titulo); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanrisulCobrancaNaoRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanrisulCobrancaNaoRegistrada.java new file mode 100644 index 0000000..98ada5a --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanrisulCobrancaNaoRegistrada.java @@ -0,0 +1,121 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 02/08/2008 - 16:37:47 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 02/08/2008 - 16:37:47 + * + */ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + * + *

+ * Valida a implementação do campo livre com cobrança não registrada para o Banco + * Banrisul. + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBanrisulCobrancaNaoRegistrada extends AbstractCampoLivreBaseTest { + + @Before + public void setUp() { + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL.create()); + titulo.getContaBancaria().setCarteira(new Carteira(1, TipoDeCobranca.SEM_REGISTRO)); + titulo.getContaBancaria().setAgencia(new Agencia(1102)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(9000150)); + titulo.setNossoNumero("22832563"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("2111029000150228325634059"); + } + + @Test(expected = CampoLivreException.class) + public void criacaoSemTipoDeCobranca() { + + titulo.getContaBancaria().setCarteira(new Carteira(1, null)); + CampoLivreFactory.create(titulo); + } + + @Test(expected = CampoLivreException.class) + public void criacaoSemAgencia() { + + titulo.getContaBancaria().setAgencia(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected = CampoLivreException.class) + public void criacaoSemNumeroDaConta() { + + titulo.getContaBancaria().setNumeroDaConta(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected = CampoLivreException.class) + public void criacaoSemNossoNumero() { + + titulo.setNossoNumero(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected = CampoLivreException.class) + public void criacaoAgenciaComCodigoMaiorQue4Digitos() { + + titulo.getContaBancaria().setAgencia(new Agencia(10000, "1")); + CampoLivreFactory.create(titulo); + } + + @Test(expected = CampoLivreException.class) + public void criacaoNumeroDaContaMaiorQue7Digitos() { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(12345678)); + CampoLivreFactory.create(titulo); + } + + @Test(expected = CampoLivreException.class) + public void criacaoNossoNumeroMaiorQue8Digitos() { + + titulo.setNossoNumero("123456789"); + CampoLivreFactory.create(titulo); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanrisulCobrancaRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanrisulCobrancaRegistrada.java new file mode 100644 index 0000000..6b519a1 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBanrisulCobrancaRegistrada.java @@ -0,0 +1,121 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/07/2008 - 10:58:09 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/07/2008 - 10:58:09 + * + */ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + * + *

+ * Valida a implementação do campo livre com cobrança registrada + * para o Banco Banrisul. + *

+ * + * @author Gilmar P.S.L. + * @author Misael Barreto + * @author Rômulo Augusto + * @author Samuel Valério Valerio + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBanrisulCobrancaRegistrada extends AbstractCampoLivreBaseTest { + + @Before + public void setUp() { + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL.create()); + titulo.getContaBancaria().setCarteira(new Carteira(1, TipoDeCobranca.COM_REGISTRO)); + titulo.getContaBancaria().setAgencia(new Agencia(1102)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(9000150)); + titulo.setNossoNumero("22832563"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1111029000150228325634071"); + } + + @Test(expected=CampoLivreException.class) + public void criacaoSemTipoDeCobranca() { + + titulo.getContaBancaria().setCarteira(new Carteira(1, null)); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoSemAgencia() { + + titulo.getContaBancaria().setAgencia(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoSemNumeroDaConta() { + + titulo.getContaBancaria().setNumeroDaConta(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoSemNossoNumero() { + + titulo.setNossoNumero(null); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoAgenciaComCodigoMaiorQue4Digitos() { + + titulo.getContaBancaria().setAgencia(new Agencia(10000, "1")); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoNumeroDaContaMaiorQue7Digitos() { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(12345678)); + CampoLivreFactory.create(titulo); + } + + @Test(expected=CampoLivreException.class) + public void criacaoNossoNumeroMaiorQue8Digitos(){ + + titulo.setNossoNumero("123456789"); + CampoLivreFactory.create(titulo); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBradesco.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBradesco.java new file mode 100644 index 0000000..60ea9f9 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLBradesco.java @@ -0,0 +1,161 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:14:15 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:14:15 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco bradesco. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento + * Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLBradesco extends AbstractCampoLivreBaseTest { + + private final int NOSSO_NUMERO_LENGTH = 11; + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_BRADESCO.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1234, "1")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(6789)); + titulo.getContaBancaria().setCarteira(new Carteira(5)); + titulo.setNossoNumero("12345678901"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1234051234567890100067890"); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaNula() { + + testeSeNaoPermiteAgenciaNula(); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteAgenciaComCodigoNegativo() { + + testeSeNaoPermiteAgenciaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaComCodigoZero() { + + testeSeNaoPermiteAgenciaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaAgenciaAcimaDe4Digitos() { + + testeSeNaoPermiteNumeroDaAgenciaComDigitosAcimaDoLimite(10000); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraNull() { + + testeSeNaoPermiteCarteiraNula(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoNegativo() { + + testeSeNaoPermiteCarteiraComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoAcimaDe2Digitos() { + + testeSeNaoPermiteCarteiraComCodigoAcimaDoLimite(111); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroNulo() { + + testeSeNaoPermiteNossoNumeroNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComBrancos() { + + testeSeNaoPermiteNossoNumeroComBrancos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComEspacos() { + + testeSeNaoPermiteNossoNumeroComEspacos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe11() { + + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH - 1); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaNulo() { + + testeSeNaoPermiteNumeroDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoZero() { + + testeSeNaoPermiteNumeroDaContaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoNegativo() { + + testeSeNaoPermiteNumeroDaContaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoAcimaDe7Digitos() { + + testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(12345678); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSICOBNossoNumero14.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSICOBNossoNumero14.java new file mode 100644 index 0000000..05e026b --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSICOBNossoNumero14.java @@ -0,0 +1,170 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/04/2011 - 20:16:07 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/04/2011 - 20:16:07 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre da Caixa Econômica Federal: "Cobrança Sem + * Registro SICOB - Nosso Número 16 posições. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLCaixaEconomicaFederalSICOBNossoNumero14 extends AbstractCampoLivreBaseTest { + + private static final int NOSSO_NUMERO_LENGTH = 14; + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.CAIXA_ECONOMICA_FEDERAL.create()); + titulo.getContaBancaria().setAgencia(new Agencia(255, "5")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(78)); + titulo.getContaBancaria().setCarteira(new Carteira(8)); + titulo.setNossoNumero("00000000113732"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0007802558700000000113732"); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaNulo() { + + testeSeNaoPermiteNumeroDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoZero() { + + testeSeNaoPermiteNumeroDaContaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoNegativo() { + + testeSeNaoPermiteNumeroDaContaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoAcimaDe5Digitos() { + + testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(123456); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaNula() { + + testeSeNaoPermiteAgenciaNula(); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteAgenciaComCodigoNegativo() { + + testeSeNaoPermiteAgenciaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaComCodigoZero() { + + testeSeNaoPermiteAgenciaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaAgenciaAcimaDe4Digitos() { + + testeSeNaoPermiteNumeroDaAgenciaComDigitosAcimaDoLimite(10000); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraNull() { + + titulo.getContaBancaria().setCarteira(null); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoNegativo() { + + titulo.getContaBancaria().setCarteira(new Carteira(-1)); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraQueNaoSejaSemRegistro() { + + titulo.getContaBancaria().setCarteira(new Carteira(1)); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroNulo() { + + testeSeNaoPermiteNossoNumeroNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComBrancos() { + + testeSeNaoPermiteNossoNumeroComBrancos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComEspacos() { + + testeSeNaoPermiteNossoNumeroComEspacos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe14() { + + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH - 1); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSIGCB.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSIGCB.java new file mode 100644 index 0000000..66d7413 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSIGCB.java @@ -0,0 +1,64 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 28/07/2010 - 21:05:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 28/07/2010 - 21:05:00 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco caixa econômica federal para o serviço SIGCB. + *

+ * + * @author Gilmar P.S.L + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLCaixaEconomicaFederalSIGCB extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.CAIXA_ECONOMICA_FEDERAL.create()); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(5507,"7")); + titulo.getContaBancaria().setCarteira(new Carteira(24, TipoDeCobranca.COM_REGISTRO)); + titulo.setNossoNumero("000000000000019"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0055077000100040000000190"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSINCO.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSINCO.java new file mode 100644 index 0000000..5692079 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCaixaEconomicaFederalSINCO.java @@ -0,0 +1,63 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/03/2008 - 18:14:35 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/03/2008 - 18:14:35 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco caixa econômica federal para o serviço SINCO. + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLCaixaEconomicaFederalSINCO extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.CAIXA_ECONOMICA_FEDERAL.create()); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(2)); + titulo.setNossoNumero("10000000020061732"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1000002910000000020061732"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCecred.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCecred.java new file mode 100644 index 0000000..14a8667 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLCecred.java @@ -0,0 +1,136 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 21/01/2014 - 14:48:31 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 21/01/2014 - 14:48:31 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroCECRED.CODIGO_DO_CONVENIO; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre CECRED. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLCecred extends AbstractCampoLivreBaseTest { + + private final int NOSSO_NUMERO_LENGTH = 9; + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.CECRED.create()); + titulo.getContaBancaria().setCarteira(new Carteira(1)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(12345678)); + titulo.setNossoNumero("12345678000123456"); + titulo.setParametrosBancarios(new ParametrosBancariosMap(CODIGO_DO_CONVENIO, 654321)); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("6543211234567800012345601"); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteParametroBancarioNulo() { + + testeSeNaoPermiteParametroBancarioNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteParametroBancarioPostoDaAgenciaAusente() { + + testeSeNaoPermiteParametroBancarioAusente(); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteParametroBancarioCodigoDoConvenioSemValor() { + + testeSeNaoPermiteParametroBancarioSemValor(CODIGO_DO_CONVENIO); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteParametroBancarioCodigoDoConvenioComValorAcimaDe6Digitos() { + + testeSeNaoPermiteParametroBancarioComValorAcimaDoLimite(CODIGO_DO_CONVENIO, 1234567); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroNulo() { + + testeSeNaoPermiteNossoNumeroNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComBrancos() { + + testeSeNaoPermiteNossoNumeroComBrancos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComEspacos() { + + testeSeNaoPermiteNossoNumeroComEspacos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe9() { + + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH - 1); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraNull() { + + testeSeNaoPermiteCarteiraNula(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoNegativo() { + + testeSeNaoPermiteCarteiraComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoAcimaDe2Digitos() { + + testeSeNaoPermiteCarteiraComCodigoAcimaDoLimite(100); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLHSBCCobrancaNaoRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLHSBCCobrancaNaoRegistrada.java new file mode 100644 index 0000000..306c8ee --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLHSBCCobrancaNaoRegistrada.java @@ -0,0 +1,42 @@ +/** + * + */ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroHSBC.IDENTIFICADOR_CNR; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.jrimum.domkee.financeiro.banco.hsbc.TipoIdentificadorCNR; +import org.junit.Before; + +/** + * @author Gilmar P.S.L + * @author Misael Barreto + */ +public class TestCLHSBCCobrancaNaoRegistrada extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.HSBC.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1234, "1")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(8351202,"2")); + titulo.getContaBancaria().setCarteira(new Carteira(1, TipoDeCobranca.SEM_REGISTRO)); + titulo.setNossoNumero("0000239104761"); + titulo.setDataDoVencimento(new GregorianCalendar(2008, Calendar.JULY, 4).getTime()); + titulo.setParametrosBancarios(new ParametrosBancariosMap(IDENTIFICADOR_CNR, TipoIdentificadorCNR.COM_VENCIMENTO.getConstante())); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("8351202000023910476118682"); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLHSBCCobrancaRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLHSBCCobrancaRegistrada.java new file mode 100644 index 0000000..9ee01fd --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLHSBCCobrancaRegistrada.java @@ -0,0 +1,42 @@ +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroHSBC.IDENTIFICADOR_CNR; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.jrimum.domkee.financeiro.banco.hsbc.TipoIdentificadorCNR; +import org.junit.Before; + +/** + * @author Gilmar P.S.L + * @author Fernando Dias + */ +public class TestCLHSBCCobrancaRegistrada extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + //TODO FAZER TESTE REAL + + titulo.getContaBancaria().setBanco(BancosSuportados.HSBC.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1234, "1")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(8351202,"2")); + titulo.getContaBancaria().setCarteira(new Carteira(1, TipoDeCobranca.SEM_REGISTRO)); + titulo.setNossoNumero("0000239104761"); + titulo.setDataDoVencimento(new GregorianCalendar(2008, Calendar.JULY, 4).getTime()); + titulo.setParametrosBancarios(new ParametrosBancariosMap(IDENTIFICADOR_CNR, TipoIdentificadorCNR.COM_VENCIMENTO.getConstante())); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("8351202000023910476118682"); + } + + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLItauComCarteirasEspeciais.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLItauComCarteirasEspeciais.java new file mode 100644 index 0000000..acb7bfd --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLItauComCarteirasEspeciais.java @@ -0,0 +1,71 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/04/2008 - 23:09:08 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/04/2008 - 23:09:08 + * + */ + +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; + +/** + *

+ * Teste unitário do campo livre do banco itaú para carteiras especiais + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLItauComCarteirasEspeciais extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_ITAU.create()); + titulo.getContaBancaria().setAgencia(new Agencia(57, "1")); + titulo.getContaBancaria().setCarteira(new Carteira(198)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(12345)); + titulo.setNumeroDoDocumento("1234567"); + titulo.setNossoNumero("12345678"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1981234567812345671234580"); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLItauPadrao.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLItauPadrao.java new file mode 100644 index 0000000..0a8fad5 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLItauPadrao.java @@ -0,0 +1,84 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/04/2008 - 23:09:08 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/04/2008 - 23:09:08 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.junit.Assert.assertEquals; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco itaú para carteiras padrão + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLItauPadrao extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_ITAU.create()); + titulo.getContaBancaria().setAgencia(new Agencia(57, "1")); + titulo.getContaBancaria().setCarteira(new Carteira(110)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(12345)); + titulo.setNumeroDoDocumento("1234567"); + titulo.setNossoNumero("12345678"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1101234567880057123457000"); + } + + @Test + public void testWriteParaCarteirasQueNaoPrecisamDeContaEAgencia() { + + titulo.getContaBancaria().setCarteira(new Carteira(198)); + + createCampoLivreToTest(); + + assertEquals(25, writeCampoLivre().length()); + assertEquals("1981234567812345671234580", writeCampoLivre()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLMercantilDoBrasil.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLMercantilDoBrasil.java new file mode 100644 index 0000000..27cc73b --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLMercantilDoBrasil.java @@ -0,0 +1,81 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 25/09/2008 - 20:55:13 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 25/09/2008 - 20:55:13 + * + */ +package org.jrimum.bopepo.campolivre; + +import java.math.BigDecimal; + +import org.junit.Assert; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco mercantil do brasil + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLMercantilDoBrasil extends AbstractCampoLivreBaseTest { + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.MERCANTIL_DO_BRASIL.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1234, "1")); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(123456789)); + titulo.setNossoNumero("1234567890"); + titulo.setDigitoDoNossoNumero("5"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("1234123456789051234567892"); //Sem desconto + } + + @Test + public void testWriteComDesconto() { + + titulo.setDesconto(BigDecimal.TEN); + createCampoLivreToTest(); + + Assert.assertEquals("1234123456789051234567890", writeCampoLivre()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLSicredi.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLSicredi.java new file mode 100644 index 0000000..7b9affe --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLSicredi.java @@ -0,0 +1,237 @@ +/* + * Copyright 2010 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 25/11/2010 - 15:35:00 + * + * ================================================================================ + * + * Direitos autorais 2010 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 25/11/2010 - 15:35:00 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.jrimum.bopepo.parametro.ParametroBancoSicredi.POSTO_DA_AGENCIA; + +import java.math.BigDecimal; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + + +/** + *

+ * Teste unitário do campo livre do banco SICREDI. + *

+ * + * @author Gilmar P.S.L + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCLSicredi extends AbstractCampoLivreBaseTest { + + private final int NOSSO_NUMERO_LENGTH = 8; + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_SICREDI.create()); + titulo.getContaBancaria().setAgencia(new Agencia(165)); + titulo.getContaBancaria().setCarteira(new Carteira(1, TipoDeCobranca.SEM_REGISTRO)); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(623)); + titulo.setNossoNumero("07200003"); + titulo.setDigitoDoNossoNumero("1"); + titulo.setParametrosBancarios(new ParametrosBancariosMap(POSTO_DA_AGENCIA, 2)); + titulo.setValor(new BigDecimal("150.35")); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("3107200003101650200623101"); + } + + @Test + public void seEscritaOndeTituloNaoTemValorEstahCorreta(){ + + titulo.setValor(new BigDecimal("0.00")); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("3107200003101650200623004"); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraComCodigoNegativo() { + + testeSeNaoPermiteCarteiraComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteCarteiraQueNaoSimples() { + + titulo.getContaBancaria().setCarteira(new Carteira(3, TipoDeCobranca.SEM_REGISTRO)); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteRegistroDaCarteiraNull() { + + titulo.getContaBancaria().setCarteira(new Carteira(1)); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroNulo() { + + testeSeNaoPermiteNossoNumeroNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComBrancos() { + + testeSeNaoPermiteNossoNumeroComBrancos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComEspacos() { + + testeSeNaoPermiteNossoNumeroComEspacos(NOSSO_NUMERO_LENGTH); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNossoNumeroComTamanhoDiferenteDe11() { + + testeSeNaoPermiteNossoNumeroComTamanhoDiferenteDoEspecificado(NOSSO_NUMERO_LENGTH - 1); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDoNossoNumeroAusente() { + + titulo.setDigitoDoNossoNumero(""); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteDigitoDoNossoNumeroComTamanhoDiferenteDe1() { + + titulo.setDigitoDoNossoNumero("124"); + + createCampoLivreToTest(); + + seCampoLivreEscritoEstaCorreto(); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteAgenciaComCodigoNegativo() { + + testeSeNaoPermiteAgenciaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaComCodigoZero() { + + testeSeNaoPermiteAgenciaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteAgenciaNula() { + + testeSeNaoPermiteAgenciaNula(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaAgenciaAcimaDe4Digitos() { + + testeSeNaoPermiteNumeroDaAgenciaComDigitosAcimaDoLimite(10000); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteParametroBancarioNulo() { + + testeSeNaoPermiteParametroBancarioNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteParametroBancarioPostoDaAgenciaAusente() { + + testeSeNaoPermiteParametroBancarioAusente(); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteParametroBancarioPostoDaAgenciaSemValor() { + + testeSeNaoPermiteParametroBancarioSemValor(POSTO_DA_AGENCIA); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaNulo() { + + testeSeNaoPermiteNumeroDaContaNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoZero() { + + testeSeNaoPermiteNumeroDaContaComCodigoZero(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoNegativo() { + + testeSeNaoPermiteNumeroDaContaComCodigoNegativo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteNumeroDaContaComCodigoAcimaDe5Digitos() { + + testeSeNaoPermiteNumeroDaContaComCodigoAcimaDoLimite(123456); + } + + @Test(expected = NullPointerException.class) + public void seNaoPermiteValorDoTituloNulo() { + + testeSeNaoPermiteValorDoTituloNulo(); + } + + @Test(expected = CampoLivreException.class) + public void seNaoPermiteValorDoTituloNegativo() { + + testeSeNaoPermiteValorDoTituloNegativo(); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLUnibancoCobrancaNaoRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLUnibancoCobrancaNaoRegistrada.java new file mode 100644 index 0000000..b719261 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLUnibancoCobrancaNaoRegistrada.java @@ -0,0 +1,140 @@ +package org.jrimum.bopepo.campolivre; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco unibanco para cobrança não registrada + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLUnibancoCobrancaNaoRegistrada extends AbstractCampoLivreBaseTest { + + /** + *

+ * Situação: precisamos emitir um título para um sacado com essas + * características: + *

+ *

+ * Banco: UNIBANCO – identificação 409
+ * Moeda: Real – R$ - identificação 9
+ * Vencimento: 31 de dezembro de 2001
+ * Valor: R$1000,00
+ * Código para transação CVT: 5 (cobrança sem registro – 7744-5)
+ * Número de referência do cliente(NossoNúmero) : 112233445566777
+ * Número de referência do cliente (Código Conta): 1234561
+ *

+ *

+ * NÚMERO DE ORIGEM DO CÓDIGO DE BARRAS: + *

+ *

+ * + *

+	 * 409  9  2  1546  0000100000  5  1234561  00  112233445566777
+	 * 
+ * + *

+ *

+ * LINHA DIGITÁVEL: + *

+ *

+ * + *

+	 * 40995.12347  56100.112236  34455.667773  2  15460000100000
+	 * 
+ * + *

+ * + * @throws Exception + * + * @since 0.2 + */ + + @Before + public void setUp(){ + + titulo.getContaBancaria().setBanco(BancosSuportados.UNIBANCO.create()); + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(123456, "1")); + titulo.getContaBancaria().setCarteira(new Carteira(123, TipoDeCobranca.SEM_REGISTRO)); + titulo.getContaBancaria().setAgencia(new Agencia(01234, "1")); + titulo.setNumeroDoDocumento("1234567"); + titulo.setNossoNumero("11223344556677"); + titulo.setDigitoDoNossoNumero("7"); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("5123456100112233445566777"); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComContaNula() { + + titulo.getContaBancaria().setNumeroDaConta(null); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComContaNegativa() { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(-23)); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComDigitoDaContaNula() { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(23, null)); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComDigitoDaContaNegativa() { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(2, "-3")); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComDigitoDaContaNaoNumerico() { + + titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(-23, "X")); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComNossoNumeroNula() { + + titulo.setNossoNumero(null); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComNossoNumeroNegativo() { + + titulo.setNossoNumero("-012345679012345"); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComNossoNumeroNaoNumerico() { + + titulo.setNossoNumero("123456790123y45"); + createCampoLivreToTest(); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLUnibancoCobrancaRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLUnibancoCobrancaRegistrada.java new file mode 100644 index 0000000..112282f --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCLUnibancoCobrancaRegistrada.java @@ -0,0 +1,146 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 25/04/2008 - 01:53:23 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 25/04/2008 - 01:53:23 + * + */ + +package org.jrimum.bopepo.campolivre; + +import java.util.Calendar; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + *

+ * Teste unitário do campo livre do banco unibanco para cobrança não registrada + *

+ * + * @author Gilmar P.S.L + * @author Misael Barreto + * @author Rômulo Augusto + * @author Nordeste Fomento Mercantil + * + * @since 0.2 + * + * @version 0.2 + * + */ +public class TestCLUnibancoCobrancaRegistrada extends AbstractCampoLivreBaseTest { + + /** + *

+ * Cobrança com registro
+ *
+ * Situação: precisamos emitir um título para um sacado com essas + * características: + *

+ *

+ * Banco: UNIBANCO – identificação 409
+ * Agência: 0001-9
+ * Moeda: Real – R$ - identificação 9
+ * Vencimento: 31 de dezembro de 2001
+ * Valor: R$1000,00
+ * Código para transação CVT: 04 (cobrança com registro – 5539-5)
+ * “Nosso Número”: 11223344554
+ *

+ * + *

+ * NÚMERO DE ORIGEM DO CÓDIGO DE BARRAS:
+ *
+ * + *

+	 * 409 9  1  1546  0000100000  04  011231  0001  9  11223344554  0
+	 * 
+ * + *
+ * LINHA DIGITÁVEL:
+ * + *
+	 * 40990.40117  20100.019110  22334.455403  1  15460000100000
+	 * 
+ * + *

+ * + * + * @throws Exception + * + * @since + */ + @Before + public void setUp(){ + + Calendar cal = Calendar.getInstance(); + + cal.set(2001,Calendar.DECEMBER,31); + + + titulo.getContaBancaria().setBanco(BancosSuportados.UNIBANCO.create()); + titulo.getContaBancaria().setAgencia(new Agencia(1, "9")); + titulo.getContaBancaria().setCarteira(new Carteira(123,TipoDeCobranca.COM_REGISTRO)); + titulo.setNumeroDoDocumento("1234567"); + titulo.setNossoNumero("11223344554"); + titulo.setDataDoVencimento(cal.getTime()); + + createCampoLivreToTest(); + + setCampoLivreEsperadoComoString("0401123100019112233445540"); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComAgenciaNula() { + + titulo.getContaBancaria().setAgencia(null); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComNossoNumeroNulo() { + + titulo.setNossoNumero(null); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComNossoNumeroNegativo() { + + titulo.setNossoNumero("-012345679012345"); + createCampoLivreToTest(); + } + + @Test(expected = CampoLivreException.class) + public final void testGetInstanceComNossoNumeroNaoNumerico() { + + titulo.setNossoNumero("123456790123y45"); + createCampoLivreToTest(); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCampoLivreFactory.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCampoLivreFactory.java new file mode 100644 index 0000000..5c0ae40 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/campolivre/TestCampoLivreFactory.java @@ -0,0 +1,110 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 23/02/2010 - 14:11:00 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 23/02/2010 - 14:11:00 + * + */ + +package org.jrimum.bopepo.campolivre; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.apache.commons.lang.StringUtils; +import org.junit.Test; + +/** + *

+ * Teste da classe CampoLivreFactory. + *

+ * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @since 0.2 + * + * @version 0.2 + */ +public class TestCampoLivreFactory { + + private static final String CAMPO_LIVRE_EXEMPLO = "1234567890123456789012345"; + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteCriacaoComStringNula() { + + CampoLivreFactory.create((String)null); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteCriacaoComEmptyString() { + + CampoLivreFactory.create(StringUtils.EMPTY); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteCriacaoComBlankString() { + + CampoLivreFactory.create(" "); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteCriacaoComStringComWhiteSpaces() { + + CampoLivreFactory.create("12345678 9012345678 9012345"); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteCriacaoComStringComLengthMaiorQue25() { + + CampoLivreFactory.create("12345678901234567890123456"); + } + + @Test(expected = IllegalArgumentException.class) + public void seNaoPermiteCriacaoComStringComLengthMenorQue25() { + + CampoLivreFactory.create("123456789012345678901234"); + } + + @Test + public void seCriacaoDoCampoLivreOcorreSemFalha() { + + assertNotNull(CampoLivreFactory.create(CAMPO_LIVRE_EXEMPLO)); + } + + @Test + public void seTamanhoDoCampoLivreEscritoIgualA25() { + + assertEquals(25, CampoLivreFactory.create(CAMPO_LIVRE_EXEMPLO).write().length()); + } + + @Test + public void seCampoLivreEscritoEstaCorreto() { + + CampoLivre campoLivreCriado = CampoLivreFactory.create(CAMPO_LIVRE_EXEMPLO); + + assertEquals(CAMPO_LIVRE_EXEMPLO, campoLivreCriado.write()); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/BoletoBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/BoletoBuilder.java new file mode 100644 index 0000000..2b84eeb --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/BoletoBuilder.java @@ -0,0 +1,87 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 08/09/2013 - 00:05:33 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 08/09/2013 - 00:05:33 + * + */ + +package org.jrimum.bopepo.excludes; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.utilix.text.DateFormat; + +/** + * Criação de dados para testes. + * + * @author Gilmar P.S.L. + */ +public class BoletoBuilder { + + private Boleto boleto; + + public BoletoBuilder(){ + this.boleto = newDefaultValue(); + } + + public static Boleto defaultValue(){ + return newDefaultValue(); + } + + public static Boleto defaultValueSacadorAvalista(){ + return newDefaultValueSacadorAvalista(); + } + + public Boleto build(){ + return this.boleto; + } + + private static Boleto newDefaultValue() { + Boleto boleto = new Boleto(TituloBuilder.defaultValue()); + setDefaultValues(boleto); + return boleto; + } + + private static Boleto newDefaultValueSacadorAvalista() { + Boleto boleto = new Boleto(TituloBuilder.defaultValueSacadorAvalista()); + setDefaultValues(boleto); + return boleto; + } + + private static void setDefaultValues(Boleto boleto){ + + boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento."); + boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado não é o esperado, aproveite o DESCONTÃO!"); + boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!"); + boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!"); + boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre."); + boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00"); + boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00"); + boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00"); + boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!"); + boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X."); + boleto.setDataDeProcessamento(DateFormat.DDMMYYYY_B.parse("14/01/2020")); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/CedenteBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/CedenteBuilder.java new file mode 100644 index 0000000..6986cd1 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/CedenteBuilder.java @@ -0,0 +1,57 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 15:36:43 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 15:36:43 + * + */ + +package org.jrimum.bopepo.excludes; + +import org.jrimum.domkee.financeiro.banco.febraban.Cedente; + +/** + * @author Gilmar P.S.L. + */ +public class CedenteBuilder { + + private Cedente ced; + + public CedenteBuilder(){ + this.ced = newDefaultValue(); + } + + public static Cedente defaultValue(){ + return newDefaultValue(); + } + + public Cedente build(){ + return this.ced; + } + + private static Cedente newDefaultValue(){ + return new Cedente("Projeto JRimum", "00.000.208/0001-00"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/ContaBancariaBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/ContaBancariaBuilder.java new file mode 100644 index 0000000..a1f09ea --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/ContaBancariaBuilder.java @@ -0,0 +1,66 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 18:47:22 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 18:47:22 + * + */ + +package org.jrimum.bopepo.excludes; + +import org.jrimum.bopepo.BancosSuportados; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; + +/** + * @author Gilmar P.S.L. + */ +public class ContaBancariaBuilder { + + private ContaBancaria conta; + + public ContaBancariaBuilder(){ + this.conta = newDefaultValue(); + } + + public static ContaBancaria defaultValue(){ + return newDefaultValue(); + } + + public ContaBancaria build(){ + return this.conta; + } + + private static ContaBancaria newDefaultValue(){ + ContaBancaria conta = new ContaBancaria(BancosSuportados.BANCO_BRADESCO.create()); + conta.setNumeroDaConta(new NumeroDaConta(123456, "0")); + conta.setCarteira(new Carteira(30)); + conta.setAgencia(new Agencia(1234, "1")); + + return conta; + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/EnderecoBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/EnderecoBuilder.java new file mode 100644 index 0000000..c10dd29 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/EnderecoBuilder.java @@ -0,0 +1,102 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 14:39:37 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 14:39:37 + * + */ + +package org.jrimum.bopepo.excludes; + +import org.jrimum.domkee.comum.pessoa.endereco.CEP; +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa; + +/** + * @author Gilmar P.S.L. + */ +public class EnderecoBuilder { + + private Endereco end; + + public static Endereco defaultValue(){ + return newDefaultValue(); + } + + public EnderecoBuilder(){ + this.end = defaultValue(); + } + + public EnderecoBuilder withLocalidade(String localidade){ + end.setLocalidade(localidade); + return this; + } + + public EnderecoBuilder withBairro(String bairro){ + end.setBairro(bairro); + return this; + } + + public EnderecoBuilder withLogradouro(String logradouro){ + end.setLogradouro(logradouro); + return this; + } + + public EnderecoBuilder withNumero(String numero){ + end.setNumero(numero); + return this; + } + + public EnderecoBuilder with(String complemento){ + end.setComplemento(complemento); + return this; + } + + public EnderecoBuilder withCep(String cep){ + end.setCep(new CEP(cep)); + return this; + } + + public EnderecoBuilder with(UnidadeFederativa uf){ + this.end.setUF(uf); + return this; + } + + public Endereco build(){ + return end; + } + + private static Endereco newDefaultValue(){ + Endereco end = new Endereco(); + end.setUF(UnidadeFederativa.RN); + end.setLocalidade("Natal"); + end.setCep(new CEP("59064-120")); + end.setBairro("Grande Centro"); + end.setLogradouro("Rua poeta dos programas"); + end.setNumero("1"); + end.setComplemento("Apt 101"); + return end; + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/Images.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/Images.java new file mode 100644 index 0000000..ceae5a1 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/Images.java @@ -0,0 +1,81 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 08/09/2013 - 17:33:00 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 08/09/2013 - 17:33:00 + * + */ + +package org.jrimum.bopepo.excludes; + +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.image.BufferedImage; + +/** + * Operações com imagem em geral. + * + * @author Gilmar P.S.L. + */ +public class Images { + + /** + * Realiza a comparação entre imagens. + * + * @param b1 + * @param b2 + * @return true se são iguais. + */ + public static boolean areEqual(BufferedImage b1, BufferedImage b2) { + if (b1.getWidth() != b2.getWidth()) { + return false; + } + if (b1.getHeight() != b2.getHeight()) { + return false; + } + for (int i = 0; i < b1.getWidth(); i++) { + for (int j = 0; j < b1.getHeight(); j++) { + if (b1.getRGB(i, j) != b2.getRGB(i, j)) { + return false; + } + } + } + return true; + } + + /** + * Transforma em um BufferedImage. + * + * @param image + * @return BufferedImage + */ + public static BufferedImage toBufferedImage(Image image) { + final int grayScale = 10; + BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), + image.getHeight(null), grayScale); + Graphics2D g2d = bufferedImage.createGraphics(); + g2d.drawImage(image, null, null); + return bufferedImage; + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/PDFs.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/PDFs.java new file mode 100644 index 0000000..ea94b1f --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/PDFs.java @@ -0,0 +1,88 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 12/01/2014 - 17:09:13 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 12/01/2014 - 17:09:13 + * + */ + +package org.jrimum.bopepo.excludes; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Collection; +import java.util.Map; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +import com.itextpdf.text.pdf.PdfReader; +import com.itextpdf.text.pdf.parser.ImageRenderInfo; +import com.itextpdf.text.pdf.parser.PdfImageObject; +import com.itextpdf.text.pdf.parser.PdfReaderContentParser; +import com.itextpdf.text.pdf.parser.RenderListener; +import com.itextpdf.text.pdf.parser.TextRenderInfo; + +/** + * Utilitário para operações com PDFs. + * + * @author Gilmar P.S.L. + */ +public class PDFs { + + public static Map> getImages(byte[] pdf) throws IOException{ + PdfReader reader = new PdfReader(pdf); + PdfReaderContentParser parser = new PdfReaderContentParser(reader); + ImageRenderListener listener = new ImageRenderListener(); + for (int i = 1; i <= reader.getNumberOfPages(); i++) { + parser.processContent(i, listener); + } + reader.close(); + return listener.getImages(); + } + + public static class ImageRenderListener implements RenderListener { + private Multimap images = ArrayListMultimap + .create(); + public void renderImage(ImageRenderInfo renderInfo) { + try { + PdfImageObject image = renderInfo.getImage(); + if (image == null) { + return; + } + final String ref = String.format("Ref-%s-%s", renderInfo.getRef() + .getNumber(), image.getFileType()); + images.put(ref, image.getBufferedImage()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public Map> getImages(){ + return images.asMap(); + } + public void beginTextBlock() {} + public void endTextBlock() {} + public void renderText(TextRenderInfo renderInfo) {} + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/SacadoBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/SacadoBuilder.java new file mode 100644 index 0000000..ffd783e --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/SacadoBuilder.java @@ -0,0 +1,59 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 15:20:04 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 15:20:04 + * + */ + +package org.jrimum.bopepo.excludes; + +import org.jrimum.domkee.financeiro.banco.febraban.Sacado; + +/** + * @author Gilmar P.S.L. + */ +public class SacadoBuilder { + + private Sacado sac; + + public SacadoBuilder(){ + this.sac = newDefaultValue(); + } + + public static Sacado defaultValue(){ + return newDefaultValue(); + } + + public Sacado build(){ + return this.sac; + } + + private static Sacado newDefaultValue(){ + Sacado sac = new Sacado("JRimum Developer Pronto Para Férias", "222.222.222-22"); + sac.addEndereco(EnderecoBuilder.defaultValue()); + return sac; + } +} \ No newline at end of file diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/SacadorAvalistaBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/SacadorAvalistaBuilder.java new file mode 100644 index 0000000..1d1d5e7 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/SacadorAvalistaBuilder.java @@ -0,0 +1,73 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 18:39:58 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 18:39:58 + * + */ + +package org.jrimum.bopepo.excludes; + +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa; +import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista; + +/** + * @author Gilmar P.S.L. + */ +public class SacadorAvalistaBuilder { + + private SacadorAvalista sacador; + + public SacadorAvalistaBuilder(){ + this.sacador = newDefaultValue(); + } + + public static SacadorAvalista defaultValue(){ + return newDefaultValue(); + } + + public SacadorAvalista build(){ + return this.sacador; + } + + private static SacadorAvalista newDefaultValue(){ + + SacadorAvalista sacadorAvalista = new SacadorAvalista("Mastermum", "00.000.000/0001-91"); + + Endereco enderecoSacAval = new EnderecoBuilder() + .with(UnidadeFederativa.DF) + .withLocalidade("Brasília") + .withCep("70150-903") + .withBairro("Grande Centro") + .withLogradouro("Rua Eternamente Principal") + .withNumero("001") + .build(); + + sacadorAvalista.addEndereco(enderecoSacAval); + + return sacadorAvalista; + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/TituloBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/TituloBuilder.java new file mode 100644 index 0000000..650459e --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/excludes/TituloBuilder.java @@ -0,0 +1,94 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 18:56:03 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 18:56:03 + * + */ + +package org.jrimum.bopepo.excludes; + +import java.math.BigDecimal; + +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite; +import org.jrimum.utilix.text.DateFormat; + +/** + * @author Gilmar P.S.L. + */ +public class TituloBuilder { + + private Titulo titulo; + + public TituloBuilder(){ + this.titulo = newDefaultValue(); + } + + public static Titulo defaultValue(){ + return newDefaultValue(); + } + + public static Titulo defaultValueSacadorAvalista(){ + return newDefaultValueSacadorAvalista(); + } + + public Titulo build(){ + return this.titulo; + } + + private static Titulo newDefaultValue() { + Titulo titulo = new Titulo(ContaBancariaBuilder.defaultValue(), + SacadoBuilder.defaultValue(), CedenteBuilder.defaultValue()); + setDefaultValues(titulo); + return titulo; + } + + private static Titulo newDefaultValueSacadorAvalista() { + Titulo titulo = new Titulo(ContaBancariaBuilder.defaultValue(), + SacadoBuilder.defaultValue(), CedenteBuilder.defaultValue(), + SacadorAvalistaBuilder.defaultValue()); + setDefaultValues(titulo); + return titulo; + } + + private static void setDefaultValues(Titulo titulo){ + + titulo.setNumeroDoDocumento("123456"); + titulo.setNossoNumero("99345678912"); + titulo.setDigitoDoNossoNumero("5"); + titulo.setValor(BigDecimal.valueOf(0.23)); + titulo.setDataDoDocumento(DateFormat.DDMMYYYY_B.parse("01/01/2020")); + titulo.setDataDoVencimento(DateFormat.DDMMYYYY_B.parse("07/09/2020")); + titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL); + titulo.setAceite(Aceite.A); + titulo.setDesconto(new BigDecimal(0.05)); + titulo.setDeducao(BigDecimal.ZERO); + titulo.setMora(BigDecimal.ZERO); + titulo.setAcrecimo(BigDecimal.ZERO); + titulo.setValorCobrado(BigDecimal.ZERO); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/functional/TestBoletoPdfFeatures.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/functional/TestBoletoPdfFeatures.java new file mode 100644 index 0000000..3a733b8 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/functional/TestBoletoPdfFeatures.java @@ -0,0 +1,86 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 10/12/2013 - 19:18:43 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 10/12/2013 - 19:18:43 + * + */ + + +package org.jrimum.bopepo.functional; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.pdf.PdfDocInfo; +import org.jrimum.bopepo.pdf.PdfDocReader; +import org.jrimum.bopepo.view.BoletoViewer; +import org.junit.Test; + +public class TestBoletoPdfFeatures { + + @Test + public void deve_ter_todos_os_meta_dados_do_boleto_em_pdf_definidos_pelo_usuario() { + byte[] boletoPdf = BoletoViewer.create(BoletoBuilder.defaultValue()) + .setPdfTitulo("Titulo") + .setPdfAssunto("Assunto") + .setPdfPalavrasChave("Palavras Chave") + .setPdfAutor("Autor") + .getPdfAsByteArray(); + + PdfDocInfo pdfMetaInfo = new PdfDocReader(boletoPdf).getInfo(); + + assertThat(pdfMetaInfo.title(), equalTo("Titulo")); + assertThat(pdfMetaInfo.subject(), equalTo("Assunto")); + assertThat(pdfMetaInfo.keywords(), equalTo("Palavras Chave")); + assertThat(pdfMetaInfo.author(), equalTo("Autor")); + } + + @Test + public void deve_comprimir_pdf_por_padrao() { + final boolean NAO = false; + byte[] boletoPdfComprimido = BoletoViewer.create(BoletoBuilder.defaultValue()).getPdfAsByteArray(); + byte[] boletoPdfNaoComprimido = BoletoViewer.create(BoletoBuilder.defaultValue()).setPdfFullCompression(NAO).getPdfAsByteArray(); + + assertTrue(boletoPdfComprimido.length < boletoPdfNaoComprimido.length); + } + + @Test + public void deve_remover_campos_por_padrao() { + final boolean NAO = false; + byte[] boletoPdfSemCampos = BoletoViewer.create(BoletoBuilder.defaultValue()).getPdfAsByteArray(); + byte[] boletoPdfComCampos = BoletoViewer.create(BoletoBuilder.defaultValue()).setPdfRemoverCampos(NAO).getPdfAsByteArray(); + + PdfDocReader pdfDocSemCampos = new PdfDocReader(boletoPdfSemCampos); + PdfDocReader pdfDocComCampos = new PdfDocReader(boletoPdfComCampos); + + assertThat(pdfDocSemCampos.getFields().size(), equalTo(0)); + assertThat(pdfDocComCampos.getFields().size(), not(equalTo(0))); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/functional/TestValoresDosCamposDoBoletoBradescoPDF.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/functional/TestValoresDosCamposDoBoletoBradescoPDF.java new file mode 100644 index 0000000..a762295 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/functional/TestValoresDosCamposDoBoletoBradescoPDF.java @@ -0,0 +1,178 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 12/01/2014 - 17:33:16 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 12/01/2014 - 17:33:16 + * + */ + +package org.jrimum.bopepo.functional; + +import static java.lang.String.format; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; + +import javax.imageio.ImageIO; + +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.excludes.Images; +import org.jrimum.bopepo.excludes.PDFs; +import org.jrimum.bopepo.pdf.CodigoDeBarras; +import org.jrimum.bopepo.pdf.PdfDocReader; +import org.jrimum.bopepo.view.BoletoCampo; +import org.jrimum.bopepo.view.BoletoViewer; +import org.junit.Test; + +import com.google.common.collect.Iterables; +import com.google.common.io.Resources; + + +/** + * @author Gilmar P.S.L. + */ +public class TestValoresDosCamposDoBoletoBradescoPDF { + + /** + * Por definição, o pdf do boleto contém apenas duas imagens: logo do banco e o código de barras. + * + * @throws IOException + */ + @Test + public void deve_gerar_boleto_com_apenas_duas_imagens() throws IOException{ + BoletoViewer boletoViewer = BoletoViewer + .create(BoletoBuilder.defaultValueSacadorAvalista()); + + Map> images = PDFs.getImages(boletoViewer.getPdfAsByteArray()); + + assertThat(images.size(), equalTo(2));//logo do banco e codigo de barras + + } + + @Test + public void deve_gerar_boleto_com_duas_logos_do_banco() throws IOException{ + BoletoViewer boletoViewer = BoletoViewer + .create(BoletoBuilder.defaultValueSacadorAvalista()); + + Map> imagensNoBoleto = PDFs.getImages(boletoViewer.getPdfAsByteArray()); + + Collection logosNoBoleto = getImagem(ImagemDoBoleto.LOGO_BANCO, imagensNoBoleto); + + BufferedImage logoBancoBradescoEsperado = ImageIO.read(Resources.getResource("img/237.png")); + + BufferedImage logo1Boleto = Iterables.get(logosNoBoleto, 0); + BufferedImage logo2Boleto = Iterables.get(logosNoBoleto, 1); + + + assertThat(logosNoBoleto.size(), equalTo(2)); + assertTrue(Images.areEqual(logo1Boleto, logoBancoBradescoEsperado)); + assertTrue(Images.areEqual(logo1Boleto, logo2Boleto)); + } + + @Test + public void deve_gerar_boleto_com_codigo_de_barras() throws IOException{ + BoletoViewer boletoViewer = BoletoViewer + .create(BoletoBuilder.defaultValueSacadorAvalista()); + + Map> imagesMap = PDFs.getImages(boletoViewer.getPdfAsByteArray()); + + Collection codigoDeBarrasImgCollection = getImagem(ImagemDoBoleto.CODIGO_DE_BARRAS, imagesMap); + + String codigoDeBarrasNumerico = boletoViewer.getBoleto().getCodigoDeBarras().write(); + + BufferedImage codigoDeBarrasImgEsperado = Images.toBufferedImage(CodigoDeBarras.valueOf(codigoDeBarrasNumerico).toImage()); + + assertThat(codigoDeBarrasImgCollection.size(), equalTo(1)); + assertTrue(Images.areEqual(codigoDeBarrasImgEsperado, codigoDeBarrasImgCollection.iterator().next())); + + //TODO Ler o código de barras e conferir o número + } + + @Test + public void deve_gerar_boleto_com_os_campos_texto_formatados_corretamente() throws IOException { + boolean NAO = false; + byte[] boletoPdf = BoletoViewer + .create(BoletoBuilder.defaultValueSacadorAvalista()) + .setPdfRemoverCampos(NAO) + .getPdfAsByteArray(); + + Map camposDoBoleto = new PdfDocReader(boletoPdf).getFields(); + Set> valoresEsperados = getValoresEsperadosParaBoletoBradescoPDF(); + + assertThat(camposDoBoleto.size(), equalTo(valoresEsperados.size())); + assertThat(camposDoBoleto.size(), equalTo(BoletoCampo.values().length)); + assertThatAreEquals(camposDoBoleto, valoresEsperados); + } + + private void assertThatAreEquals(Map camposDoBoleto, + Set> valoresEsperados) { + + for(Entry campoValorEsperado : valoresEsperados){ + + Object nomeDoCampoEsperado = campoValorEsperado.getKey(); + Object valorDoCampoEsperado = campoValorEsperado.getValue(); + String valorDoCampoNoBoleto = camposDoBoleto.get(nomeDoCampoEsperado); + + assertThat(format("Campo [%s] ",nomeDoCampoEsperado),valorDoCampoNoBoleto, equalTo(valorDoCampoEsperado)); + } + } + + private Set> getValoresEsperadosParaBoletoBradescoPDF() throws IOException { + Properties properties = new Properties(); + properties.load(Resources.getResource("ValoresEsperadosDosCamposParaBoletoBradescoPDF.properties").openStream()); + return properties.entrySet(); + } + + private Collection getImagem(ImagemDoBoleto imagem, Map> imagesMap){ + for (Collection images : imagesMap.values()) { + if(images.size() == imagem.quantidade()){ + return images; + } + } + return Collections.emptyList(); + } + + private enum ImagemDoBoleto{ + LOGO_BANCO(2), + CODIGO_DE_BARRAS(1); + private final int quantidade; + private ImagemDoBoleto(int q){ + quantidade = q; + } + public int quantidade(){ + return quantidade; + } + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/Resources.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/Resources.java new file mode 100644 index 0000000..e1028a0 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/Resources.java @@ -0,0 +1,77 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 23/09/2011 - 17:03:00 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 23/09/2011 - 17:03:00 + * + */ + +package org.jrimum.bopepo.pdf; + +import java.io.InputStream; + +import org.jrimum.utilix.ClassLoaders; + +/** + * Classe para centralizar ponto de acesso aos resources usados nos testes, não instanciável. + * + *

+ * Note que um mesmo resouce é usado e mais de uma classe de teste. + *

+ * + * + * @author Gilmar P.S.L. + * + */ +public abstract class Resources { + + /** + * Mesmo título para ambos os arquivos. + */ + public static final String DOCUMENT_TITLE = "Arquivo para insumo em testes"; + + /** + * Arquivo no classpath sem fields. + * + * @return arquivo pronto para uso + */ + public static final InputStream crieInputStreamParaArquivoSemCampos(){ + return ClassLoaders.getResourceAsStream("ArquivoSemCampos.pdf"); + } + + /** + * Arquivo no classpath com 3 campos: + * + *
    + *
  • nomeDoTestador:"JRiboy Brasileiro da Ordem do Progresso"
  • + *
  • funcaoDoTestador:"Developer"
  • + *
  • nomeDoTeste:"A definir..."
  • + * + * + * @return arquivo pronto para uso + */ + public static final InputStream crieInputStreamParaArquivoComCampos(){ + return ClassLoaders.getResourceAsStream("ArquivoComCampos.pdf"); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestFiles.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestFiles.java new file mode 100644 index 0000000..c0bca56 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestFiles.java @@ -0,0 +1,106 @@ +/* + * Copyright 2008 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 24/02/2010 - 14:13:34 + * + * ================================================================================ + * + * Direitos autorais 2008 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 24/02/2010 - 14:13:34 + * + */ + +package org.jrimum.bopepo.pdf; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.junit.Assert; + +import org.apache.commons.lang.StringUtils; +import org.junit.Test; + +/** + * Teste da classe Files. + * + * @author Rômulo Augusto + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class TestFiles { + + @Test(expected = IllegalArgumentException.class) + public void testBytes2FilePathNameNull() throws FileNotFoundException, IOException { + String filePath = null; + Files.bytesToFile(filePath, new byte[] {}); + } + + @Test(expected = IllegalArgumentException.class) + public void testBytes2FileBytesNull() throws FileNotFoundException, IOException { + Files.bytesToFile("./target", null); + } + + @Test(expected = IllegalArgumentException.class) + public void testBytes2FilePathNameEmpty() throws FileNotFoundException, IOException { + Files.bytesToFile(StringUtils.EMPTY, new byte[] {}); + } + + @Test(expected = IllegalArgumentException.class) + public void testBytes2FilePathNameBlank() throws FileNotFoundException, IOException { + Files.bytesToFile(StringUtils.EMPTY, new byte[] {}); + } + + @Test + public void testBytes2File() throws FileNotFoundException, IOException { + + byte valor1 = (byte) 1; + byte valor2 = (byte) 2; + byte valor3 = (byte) 3; + + //Criar o arquivo antes de testar + String file = "./target/fileExistente"; + Assert.assertNotNull(Files.bytesToFile(file, new byte[] {valor1, valor2, valor3})); + new File(file).delete(); + } + + @Test(expected = IllegalArgumentException.class) + public void testBytes2StreamBytesNull() throws IOException { + Files.bytesToStream(null); + } + + @Test + public void testBytes2Stream() throws IOException { + + byte valor1 = (byte) 1; + byte valor2 = (byte) 2; + byte valor3 = (byte) 3; + + ByteArrayOutputStream out = Files.bytesToStream(new byte[] {valor1, valor2, valor3}); + + Assert.assertNotNull(out); + + out.close(); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDateConverter.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDateConverter.java new file mode 100644 index 0000000..46814b7 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDateConverter.java @@ -0,0 +1,91 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 30/09/2011 - 16:07:23 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 30/09/2011 - 16:07:23 + * + */ + +package org.jrimum.bopepo.pdf; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; +import java.util.TimeZone; + +import org.junit.Test; + +/** + * Teste unitário da classe PdfDateConverter. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class TestPdfDateConverter { + + @Test(expected=IllegalArgumentException.class) + public void seNaoPermiteConversaoDeValoresNulos(){ + + PdfDateConverter.convert(null); + } + + @Test + public void comTimeZoneZero(){ + + final String expectedDate = "D:20110930144532Z00'00'"; + + Calendar c = Calendar.getInstance(); + c.set(2011, Calendar.SEPTEMBER, 30, 14, 45, 32); + c.setTimeZone(TimeZone.getTimeZone("GMT")); + + assertEquals(expectedDate,PdfDateConverter.convert(c)); + } + + @Test + public void comTimeZoneMaiorQueZero(){ + + final String expectedDate = "D:20110930144532+05'23'"; + + Calendar c = Calendar.getInstance(); + c.set(2011, Calendar.SEPTEMBER, 30, 14, 45, 32); + c.setTimeZone(TimeZone.getTimeZone("GMT+05:23")); + + assertEquals(expectedDate,PdfDateConverter.convert(c)); + } + + @Test + public void comTimeZoneMenorQueZero(){ + + final String expectedDate = "D:20110930144532-05'23'"; + + Calendar c = Calendar.getInstance(); + c.set(2011, Calendar.SEPTEMBER, 30, 14, 45, 32); + c.setTimeZone(TimeZone.getTimeZone("GMT-05:23")); + + assertEquals(expectedDate,PdfDateConverter.convert(c)); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocInfo.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocInfo.java new file mode 100644 index 0000000..7b0ae2f --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocInfo.java @@ -0,0 +1,235 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 19/09/2011 - 15:43:26 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 19/09/2011 - 15:43:26 + * + */ + +package org.jrimum.bopepo.pdf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; + +import org.junit.Before; +import org.junit.Test; + +/** + * Teste da unitário da classe {@linkplain PdfDocInfo}. + * + * @author Gilmar P.S.L. + */ +public class TestPdfDocInfo { + + private final String TITLE = "Modelo Geral"; + private final String SUBJECT = "Template para uso geral"; + private final String KEYWORDS = "Modelo, Artefato, Exemplo"; + private final String AUTHOR = "Gilmar P.S.L."; + private final String CREATOR = "Writer"; + private final String CREATION_DATE = "D:20110414170209-03'00'"; + private final String MOD_DATE = "D:20110414191242-03'00'"; + private final String PRODUCER = "BrOffice 3.3; modified using iText 5.0.6 (c) 1T3XT BVBA"; + + private Map info; + + @Before + public void setUp(){ + + info = new HashMap(8); + info.put("Title", TITLE); + info.put("Subject", SUBJECT); + info.put("Keywords", KEYWORDS); + info.put("Author", AUTHOR); + info.put("Creator", CREATOR); + info.put("Producer", PRODUCER); + info.put("CreationDate",CREATION_DATE); + info.put("ModDate", MOD_DATE); + } + + @Test + public void titleInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create().title(TITLE); + + assertEquals(TITLE, docInfo.title()); + } + + @Test + public void subjectInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create().subject(SUBJECT); + + assertEquals(SUBJECT, docInfo.subject()); + } + + @Test + public void keywordsInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create().keywords(KEYWORDS); + + assertEquals(KEYWORDS, docInfo.keywords()); + } + + @Test + public void authorInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create().author(AUTHOR); + + assertEquals(AUTHOR, docInfo.author()); + } + + @Test + public void creatorInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create().creator(CREATOR); + + assertEquals(CREATOR, docInfo.creator()); + } + + @Test + public void producerInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create(info); + + assertEquals(PRODUCER, docInfo.producer()); + } + + @Test + public void creationRawInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create(info); + + assertEquals(CREATION_DATE, docInfo.creationRaw()); + } + + @Test + public void creation(){ + + PdfDocInfo docInfo = PdfDocInfo.create(info); + + assertEquals(CREATION_DATE, PdfDateConverter.convert(docInfo.creation())); + } + + @Test + public void creationWithCalendar(){ + + final Calendar c = Calendar.getInstance(); + c.set(2011, Calendar.APRIL, 14, 17, 2, 9); + c.setTimeZone(TimeZone.getTimeZone("GMT-03:00")); + + PdfDocInfo docInfo = PdfDocInfo.create(); + + docInfo.creation(c); + + assertEquals(CREATION_DATE, PdfDateConverter.convert(docInfo.creation())); + } + + @Test + public void modificationRawInfo(){ + + PdfDocInfo docInfo = PdfDocInfo.create(info); + + assertEquals(MOD_DATE, docInfo.modificationRaw()); + } + + @Test + public void modification(){ + + PdfDocInfo docInfo = PdfDocInfo.create(info); + + assertEquals(MOD_DATE, PdfDateConverter.convert(docInfo.modification())); + } + + @Test + public void modificationWithCalendar(){ + + final Calendar c = Calendar.getInstance(); + c.set(2011, Calendar.APRIL, 14, 19, 12, 42); + c.setTimeZone(TimeZone.getTimeZone("GMT-03:00")); + + PdfDocInfo docInfo = PdfDocInfo.create(); + + docInfo.modification(c); + + assertEquals(MOD_DATE, PdfDateConverter.convert(docInfo.modification())); + } + + @Test + public void equalsInCaseEquals(){ + + PdfDocInfo docInfo1 = PdfDocInfo.create(info); + PdfDocInfo docInfo2 = PdfDocInfo.create(new HashMap(info)); + + assertEquals(docInfo1, docInfo2); + } + + @Test + public void equalsInCaseDiff(){ + + PdfDocInfo docInfo1 = PdfDocInfo.create(info); + + Map diffInfo = new HashMap(info); + diffInfo.put("Author", "OUTRO"); + + PdfDocInfo docInfo2 = PdfDocInfo.create(diffInfo); + + assertTrue("Deve ser diferente!",!docInfo1.equals(docInfo2)); + } + + @Test + public void hashCodeInCaseEquals(){ + + PdfDocInfo docInfo1 = PdfDocInfo.create(info); + PdfDocInfo docInfo2 = PdfDocInfo.create(new HashMap(info)); + + assertEquals(docInfo1.hashCode(), docInfo2.hashCode()); + } + + @Test + public void hashCodeInCaseDiff(){ + + PdfDocInfo docInfo1 = PdfDocInfo.create(info); + + Map diffInfo = new HashMap(info); + diffInfo.put("Author", "OUTRO"); + + PdfDocInfo docInfo2 = PdfDocInfo.create(diffInfo); + + assertTrue("Deve ser diferente!",docInfo1.hashCode() != docInfo2.hashCode()); + } + + @Test + public void docInfoToMap(){ + + PdfDocInfo docInfo = PdfDocInfo.create(info); + + assertEquals(info, docInfo.toMap()); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocMix.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocMix.java new file mode 100644 index 0000000..f0b5bca --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocMix.java @@ -0,0 +1,420 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 14/04/2011 - 14:49:07 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 14/04/2011 - 14:49:07 + * + */ + +package org.jrimum.bopepo.pdf; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.awt.Image; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.FileUtils; +import org.junit.Test; + +/** + * Teste unitário da classe PdfDocMix. + * + * @author Gilmar P.S.L. + * @author Rômulo Augusto + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class TestPdfDocMix { + + private PdfDocMix doc = null; + + @Test(expected=IllegalArgumentException.class) + public void seNaoPermiteCriarComTemplateNullBytes(){ + + byte[] NULL_BYTE_ARRAY = null; + + doc = PdfDocMix.createWithTemplate(NULL_BYTE_ARRAY); + } + + @Test(expected=IllegalArgumentException.class) + public void seNaoPermiteCriarComTemplateNullInputStream(){ + + InputStream NULL_INPUT_STREAM = null; + + doc = PdfDocMix.createWithTemplate(NULL_INPUT_STREAM); + } + + @Test(expected=IllegalArgumentException.class) + public void seNaoPermiteCriarComTemplateNullURL(){ + + URL NULL_URL = null; + + doc = PdfDocMix.createWithTemplate(NULL_URL); + } + + @Test(expected=IllegalArgumentException.class) + public void seNaoPermiteCriarComTemplateNullFile(){ + + File NULL_FILE = null; + + doc = PdfDocMix.createWithTemplate(NULL_FILE); + } + + @Test + public void sePermiteCriarComTemplateBytes(){ + + doc = PdfDocMix.createWithTemplate(EMPTY.getBytes()); + + assertNotNull(doc); + } + + @Test + public void sePermiteCriarComTemplateInputStream(){ + + doc = PdfDocMix.createWithTemplate(new ByteArrayInputStream(EMPTY.getBytes())); + + assertNotNull(doc); + } + + @Test + public void sePermiteCriarComTemplateURL() throws MalformedURLException{ + + doc = PdfDocMix.createWithTemplate(new URL("file:///")); + + assertNotNull(doc); + } + + @Test + public void sePermiteCriarComTemplateFile() throws IOException{ + + doc = PdfDocMix.createWithTemplate(File.createTempFile(this.getClass().getName(), EMPTY)); + + assertNotNull(doc); + } + + @Test + public void seTemplateEhAtribuidoCorretamenteNaInstancia(){ + + final String X = "TEMPLATE"; + + doc = new PdfDocMix(X.getBytes()); + + assertEquals(X, new String(doc.getTemplate())); + } + + @Test + public void sePermiteMudarTemplateCorretamenteBytes(){ + + doc = new PdfDocMix(EMPTY.getBytes()); + + assertEquals("DEVE SER EMPTY", EMPTY, new String(doc.getTemplate())); + + final String Y = "OUTRO_TEMPLATE"; + + doc.withTemplate(Y.getBytes()); + + assertEquals(Y, new String(doc.getTemplate())); + } + + @Test + public void seColocaTextoCorretamenteNaVariavel(){ + + doc = createDoc(); + + doc.put("k1", "v1"); + + Map definido = new HashMap(1); + definido.put("k1", "v1"); + + assertEquals(definido, doc.getTextFields()); + } + + @Test + public void seColocaTextosCorretamenteNaVariavel(){ + + doc = createDoc(); + + Map old = new HashMap(3); + old.put("k1", "v1"); + old.put("k2", "v2"); + + doc.putAllTexts(old); + + assertEquals(old, doc.getTextFields()); + + Map newOne = new HashMap(old); + newOne.put("k3", "v3"); + + doc.putAllTexts(newOne); + + assertEquals(old, doc.getTextFields()); + } + + @Test + public void seColocaImagemCorretamenteNaVariavel(){ + + doc = createDoc(); + + final Image img = null; + + doc.put("k1", img); + + Map definido = new HashMap(1); + definido.put("k1", img); + + assertEquals(definido, doc.getImageFields()); + } + + @Test + public void seColocaImagensCorretamenteNaVariavel(){ + + final Image img1 = null; + final Image img2 = null; + final Image img3 = null; + + doc = createDoc(); + + Map old = new HashMap(3); + old.put("k1", img1); + old.put("k2", img2); + + doc.putAllImages(old); + + assertEquals(old,doc.getImageFields()); + + Map newOne = new HashMap(old); + newOne.put("k3", img3); + + doc.putAllImages(newOne); + + assertEquals(newOne, doc.getImageFields()); + } + + @Test + public void seGeraDocumentoCorretamenteEmBytes() throws IOException{ + + doc = createDoc(); + + PdfDocReader readerArqBase = new PdfDocReader(Resources.crieInputStreamParaArquivoComCampos()); + + PdfDocReader readerArqNovo = new PdfDocReader(doc.toBytes()); + + assertTrue("DEVEM SER IGUAIS", + Resources.DOCUMENT_TITLE.equals(readerArqBase.getInfo().title()) + && + Resources.DOCUMENT_TITLE.equals(readerArqNovo.getInfo().title())); + + readerArqBase.close(); + readerArqNovo.close(); + } + + @Test + public void seRemoveCamposDeTextoCorretamente(){ + + doc = createDoc(); + + doc.put("k1", "v1"); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertTrue(reader.getFields().isEmpty()); + + reader.close(); + } + + @Test + public void seColocaTextoCorretamenteNoArquivo(){ + + doc = createDoc(); + + doc.put("nomeDoTestador", "Gilmar P.S.L."); + doc.put("funcaoDoTestador", "Tester"); + doc.put("nomeDoTeste", "sePutTextCorretamenteNoArquivo"); + + doc.removeFields(false); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertEquals(doc.getTextFields(), reader.getFields()); + + reader.close(); + } + + @Test + public void seColocaTituloCorretamenteNoArquivo(){ + + final String TITULO = "Titulo Corretamente No Arquivo?"; + + doc = createDoc(); + + doc.withTitle(TITULO); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertEquals(TITULO, reader.getInfo().title()); + + reader.close(); + } + + @Test + public void seColocaAssuntoCorretamenteNoArquivo(){ + + final String ASSUNTO = "Assunto Correto No Arquivo?"; + + doc = createDoc(); + + doc.withSubject(ASSUNTO); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertEquals(ASSUNTO, reader.getInfo().subject()); + + reader.close(); + } + + @Test + public void seColocaPalavrasChaveCorretamenteNoArquivo(){ + + final String PALAVRA_CHAVE = "palavras, chave, corretas, no arquivo?"; + + doc = createDoc(); + + doc.withKeywords(PALAVRA_CHAVE); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertEquals(PALAVRA_CHAVE, reader.getInfo().keywords()); + + reader.close(); + } + + @Test + public void seMudaDocinfo(){ + + final String NOVO_TITULO = "Título mudado agora!"; + + PdfDocInfo docInfo = PdfDocInfo.create(); + docInfo.title(NOVO_TITULO); + + doc = createDoc(); + + doc.withDocInfo(docInfo); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertEquals(NOVO_TITULO, reader.getInfo().title()); + + reader.close(); + } + + @Test + public void seColocaAutorCorretamenteNoArquivo(){ + + final String AUTOR = "Este (você) é o autor do arquivo?"; + + doc = createDoc(); + + doc.withAuthor(AUTOR); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertEquals(AUTOR, reader.getInfo().author()); + + reader.close(); + } + + @Test + public void seColocaCriadorCorretamenteNoArquivo(){ + + final String CRIADOR = "Minha Aplicação"; + + doc = createDoc(); + + doc.withCreator(CRIADOR); + + PdfDocReader reader = new PdfDocReader(doc.toBytes()); + + assertEquals(CRIADOR+" by (jrimum.org/bopepo)", reader.getInfo().creator()); + + reader.close(); + } + + @Test + public void seGeraDocumentoEmArquivoViaParamentroFile() throws IOException{ + + final String file = "ArquivoComCampos"; + final String filePath = "./src/test/resources/"+file+".pdf"; + + doc = createDoc(); + + PdfDocReader readerArqBase = new PdfDocReader(Resources.crieInputStreamParaArquivoComCampos()); + + final File arqBase = new File(filePath); + final File arqTest = File.createTempFile(file, ".pdf"); + + FileUtils.copyFile(arqBase, arqTest); + + doc.toFile(arqTest); + + PdfDocReader readerArqNovo = new PdfDocReader(arqBase); + + assertTrue("DEVEM SER IGUAIS", + Resources.DOCUMENT_TITLE.equals(readerArqBase.getInfo().title()) + && + Resources.DOCUMENT_TITLE.equals(readerArqNovo.getInfo().title())); + + readerArqBase.close(); + readerArqNovo.close(); + arqTest.delete(); + } + + /** + * Arquivo no classpath com 3 campos: + * + *
      + *
    • nomeDoTestador:"JRiboy Brasileiro da Ordem do Progresso"
    • + *
    • funcaoDoTestador:"Developer"
    • + *
    • nomeDoTeste:"A definir..."
    • + * + * + * @return doc pronto para uso + * + * @see org.jrimum.bopepo.pdf.Resources#crieInputStreamParaArquivoComCampos() + */ + private PdfDocMix createDoc(){ + return new PdfDocMix(Resources.crieInputStreamParaArquivoComCampos()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocReader.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocReader.java new file mode 100644 index 0000000..0f22a25 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/pdf/TestPdfDocReader.java @@ -0,0 +1,165 @@ +/* + * Copyright 2011 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 19/09/2011 - 15:43:26 + * + * ================================================================================ + * + * Direitos autorais 2011 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 19/09/2011 - 15:43:26 + * + */ + +package org.jrimum.bopepo.pdf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.text.ParseException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.junit.After; +import org.junit.Test; + +/** + * Teste unitário da classe TestPdfDocReader. + * + * @author Gilmar P.S.L. + * + * @version 0.2.3 + * + * @since 0.2 + */ +public class TestPdfDocReader { + + private PdfDocReader reader; + + @Test + public void seDocInfoEstahCorreto() throws ParseException{ + + reader = crieReaderParaArquivoSemCampos(); + + PdfDocInfo info = reader.getInfo(); + + assertEquals(Resources.DOCUMENT_TITLE, info.title()); + assertEquals("Caso de teste", info.subject()); + assertEquals("Teste, JRimum", info.keywords()); + assertEquals("Gilmar P.S.L.", info.author()); + assertEquals("Writer", info.creator()); + assertEquals("BrOffice 3.3", info.producer()); + assertEquals("D:20110923112741-03'00'", info.creationRaw()); + } + + @Test + public void seGetFieldRetornaNullQuandoNaoTemCamposDisponiveis(){ + + reader = crieReaderParaArquivoSemCampos(); + + assertNull(reader.getField("teste")); + } + + @Test + public void seGetFieldsNamesRetornaVazioQuandoNaoTemCamposDisponiveis(){ + + reader = crieReaderParaArquivoSemCampos(); + + assertTrue(reader.getFieldsNames().isEmpty()); + } + + @Test + public void seGetFieldsRetornaVazioQuandoNaoTemCamposDisponiveis(){ + + reader = crieReaderParaArquivoSemCampos(); + + assertTrue(reader.getFields().isEmpty()); + } + + @Test + public void seGetFieldRetornaValorCorretoQuandoCamposEstaoDisponiveis(){ + + reader = crieReaderParaArquivoComCampos(); + + assertEquals("Developer",reader.getField("funcaoDoTestador")); + } + + @Test + public void seGetFieldsNamesRetornaValoresCorretosQuandoCamposEstaoDisponiveis(){ + + reader = crieReaderParaArquivoComCampos(); + + Set camposDefinidos = new HashSet(3); + + camposDefinidos.add("nomeDoTestador"); + camposDefinidos.add("funcaoDoTestador"); + camposDefinidos.add("nomeDoTeste"); + + assertEquals(camposDefinidos,reader.getFieldsNames()); + } + + @Test + public void seGetFieldsRetornaValoresCorretosQuandoCamposEstaoDisponiveis(){ + + reader = crieReaderParaArquivoComCampos(); + + Map definicao = new HashMap(3); + definicao.put("nomeDoTestador","JRiboy Brasileiro da Ordem do Progresso"); + definicao.put("funcaoDoTestador","Developer"); + definicao.put("nomeDoTeste","A definir..."); + + assertEquals(definicao, reader.getFields()); + } + + @After + public void tearDown(){ + reader.close(); + } + + /** + * Arquivo no classpath sem fields. + * + * @return reader pronto para uso + * + * @see org.jrimum.bopepo.pdf.Resources#crieInputStreamParaArquivoSemCampos() + */ + private PdfDocReader crieReaderParaArquivoSemCampos(){ + return new PdfDocReader(Resources.crieInputStreamParaArquivoSemCampos()); + } + + /** + * Arquivo no classpath com 3 campos: + * + *
        + *
      • nomeDoTestador:"JRiboy Brasileiro da Ordem do Progresso"
      • + *
      • funcaoDoTestador:"Developer"
      • + *
      • nomeDoTeste:"A definir..."
      • + * + * + * @return reader pronto para uso + * + * org.jrimum.bopepo.pdf.Resources#crieInputStreamParaArquivoComCampos() + */ + private PdfDocReader crieReaderParaArquivoComCampos(){ + return new PdfDocReader(Resources.crieInputStreamParaArquivoComCampos()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/TestBoletoViewer.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/TestBoletoViewer.java new file mode 100644 index 0000000..5bdafef --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/TestBoletoViewer.java @@ -0,0 +1,122 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/10/2013 - 00:36:20 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/10/2013 - 00:36:20 + * + */ + + +package org.jrimum.bopepo.view; + +import static org.mockito.Mockito.verify; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + + +/** + * @author Gilmar P.S.L. + */ +@RunWith(MockitoJUnitRunner.class) +public class TestBoletoViewer { + + @Mock + private PdfViewer pdfViewer; + + private BoletoViewer boletoViewer; + + @Before + public void setup(){ + boletoViewer = new BoletoViewer(pdfViewer); + } + + @Test + public void deve_chamar_metodo_de_definicao_da_compressao_em_pdfview(){ + boolean option = true; + + boletoViewer.setPdfFullCompression(option); + + verify(pdfViewer).setFullCompression(option); + } + + @Test + public void deve_chamar_metodo_de_definicao_do_titulo_em_pdfview(){ + String titulo = "Boleto de Pagamento"; + + boletoViewer.setPdfTitulo(titulo); + + verify(pdfViewer).setTitle(titulo); + } + + @Test + public void deve_chamar_metodo_de_definicao_da_opcao_de_mostrar_titulo_em_pdfview(){ + boolean opcao = true; + + boletoViewer.setPdfExibirTitulo(opcao); + + verify(pdfViewer).setDisplayTitle(opcao); + } + + @Test + public void deve_chamar_metodo_de_definicao_do_autor_em_pdfview(){ + String autor = "Eu"; + + boletoViewer.setPdfAutor(autor); + + verify(pdfViewer).setAuthor(autor); + } + + @Test + public void deve_chamar_metodo_de_definicao_do_assunto_em_pdfview(){ + String assunto = "Importante"; + + boletoViewer.setPdfAssunto(assunto); + + verify(pdfViewer).setSubject(assunto); + } + + @Test + public void deve_chamar_metodo_de_definicao_das_palavras_chave_em_pdfview(){ + String palavrasChave = "minhas, palavras, chaves"; + + boletoViewer.setPdfPalavrasChave(palavrasChave); + + verify(pdfViewer).setKeywords(palavrasChave); + } + + @Test + public void deve_chamar_metodo_de_definicao_da_opcao_de_remover_os_campos_em_pdfview(){ + boolean opcao = true; + + boletoViewer.setPdfRemoverCampos(opcao); + + verify(pdfViewer).setRemoveFields(opcao); + } + +} \ No newline at end of file diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/TestResourceBundle.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/TestResourceBundle.java new file mode 100644 index 0000000..7bebf9f --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/TestResourceBundle.java @@ -0,0 +1,107 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 08/09/2013 - 12:14:45 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 08/09/2013 - 12:14:45 + * + */ + +package org.jrimum.bopepo.view; + +import static org.jrimum.bopepo.view.ResourceBundle.BOLETO_TEMPLATE_COM_SACADOR_AVALISTA; +import static org.jrimum.bopepo.view.ResourceBundle.BOLETO_TEMPLATE_SEM_SACADOR_AVALISTA; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.IOException; + +import javax.imageio.ImageIO; + +import org.jrimum.bopepo.excludes.Images; +import org.junit.Test; + +import com.google.common.io.Resources; + +/** + * @author Gilmar P.S.L. + */ +public class TestResourceBundle { + + @Test + public void deve_carregar_a_logo_do_banco_do_resource() throws Exception { + + BufferedImage logoBanco001Esperado = ImageIO.read(Resources.getResource("img/001.png")); + assertNotNull(logoBanco001Esperado); + + BufferedImage logoBanco001Carregado = (BufferedImage) new ResourceBundle().getLogotipoDoBanco("001"); + assertNotNull(logoBanco001Carregado); + + assertTrue(Images.areEqual(logoBanco001Esperado, logoBanco001Carregado)); + } + + @Test + public void deve_carregar_o_mesmo_objeto_imagem_apos_o_primeiro_carregamento_de_uma_mesma_logo() throws Exception { + + ResourceBundle resourceBundle = new ResourceBundle(); + + Image logoBanco001Carregado = resourceBundle.getLogotipoDoBanco("001"); + assertNotNull(logoBanco001Carregado); + Image logoBanco001Carregado2 = resourceBundle.getLogotipoDoBanco("001"); + assertNotNull(logoBanco001Carregado2); + + assertEquals(logoBanco001Carregado, logoBanco001Carregado2); + } + + @Test + public void deve_carregar_o_boleto_template_sem_sacador_avalista() throws Exception { + + byte[] templateEsperado = getTempateEsperado(BOLETO_TEMPLATE_SEM_SACADOR_AVALISTA); + assertNotNull(templateEsperado); + + byte[] templateCarregado = new ResourceBundle().getTemplateSemSacadorAvalista(); + assertNotNull(templateCarregado); + + assertEquals(templateEsperado.length, templateCarregado.length); + } + + @Test + public void deve_carregar_o_boleto_template_com_sacador_avalista() throws Exception { + + byte[] templateEsperado = getTempateEsperado(BOLETO_TEMPLATE_COM_SACADOR_AVALISTA); + assertNotNull(templateEsperado); + + byte[] templateCarregado = new ResourceBundle().getTemplateComSacadorAvalista(); + assertNotNull(templateCarregado); + + assertEquals(templateEsperado.length, templateCarregado.length); + } + + private byte[] getTempateEsperado(String nomeDoTemplate) throws IOException { + + return Resources.asByteSource(Resources.getResource("pdf/"+nomeDoTemplate)).read(); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/TestBoletoInfoViewBuilder.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/TestBoletoInfoViewBuilder.java new file mode 100644 index 0000000..7c0d9c7 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/TestBoletoInfoViewBuilder.java @@ -0,0 +1,97 @@ +/* + * Copyright 2013 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * Created at: 08/09/2013 - 01:13:22 + * + * ================================================================================ + * + * Direitos autorais 2013 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar + * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob + * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER + * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a + * reger permissões e limitações sob esta LICENÇA. + * + * Criado em: 08/09/2013 - 01:13:22 + * + */ + +package org.jrimum.bopepo.view.info; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.jrimum.utilix.Objects.whenNull; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.util.Map; +import java.util.TreeMap; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.excludes.Images; +import org.jrimum.bopepo.pdf.CodigoDeBarras; +import org.jrimum.bopepo.view.BoletoCampo; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.BoletoInfoViewBuilder; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoInfoViewBuilder { + + private Boleto boleto; + private ResourceBundle resourceBundle; + private BoletoInfoViewBuilder boletoInfoViewBuilder; + private java.util.ResourceBundle boletoDadosEsperados; + + @Before + public void setup(){ + + this.resourceBundle = new ResourceBundle(); + this.boleto = BoletoBuilder.defaultValueSacadorAvalista(); + this.boletoInfoViewBuilder = new BoletoInfoViewBuilder(resourceBundle, boleto).build(); + this.boletoDadosEsperados = java.util.ResourceBundle.getBundle("ValoresEsperadosDosCamposParaBoletoBradescoPDF"); + } + + @Test + public void deve_ter_todos_os_campos_de_texto_padrao_preenchidos_com_textos_formatados_para_exibir_no_boleto(){ + + Map camposTextoNoBoleto = new TreeMap (boletoInfoViewBuilder.texts()); + + for(BoletoCampo campo: BoletoCampo.values()){ + String textoEsperado = boletoDadosEsperados.getString(campo.name()); + String textoAtual = whenNull(camposTextoNoBoleto.get(campo.name()), EMPTY); + assertEquals("CAMPO: "+campo,textoEsperado,textoAtual); + } + } + + @Test + public void deve_ter_todos_os_campos_de_imagem_padrao_preenchidos_com_as_imagens_corretas_para_exibir_no_boleto(){ + + Map camposImagem = boletoInfoViewBuilder.images(); + + Image logoBancoBradescoEsperada = resourceBundle.getLogotipoDoBanco("237"); + assertEquals(logoBancoBradescoEsperada, camposImagem.get(BoletoCampo.txtRsLogoBanco.name())); + assertEquals(logoBancoBradescoEsperada, camposImagem.get(BoletoCampo.txtFcLogoBanco.name())); + + BufferedImage codigoDeBarrasEsperado = Images.toBufferedImage(CodigoDeBarras.valueOf(boleto.getCodigoDeBarras().write()).toImage()); + BufferedImage codigoDeBarradasCriado = Images.toBufferedImage(camposImagem.get(BoletoCampo.txtFcCodigoBarra.name())); + assertTrue(Images.areEqual(codigoDeBarrasEsperado,codigoDeBarradasCriado)); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoAgenciaCodigoCedente.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoAgenciaCodigoCedente.java new file mode 100644 index 0000000..8084bf3 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoAgenciaCodigoCedente.java @@ -0,0 +1,96 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 17/01/2014 - 14:38:22 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 17/01/2014 - 14:38:22 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.hamcrest.Matchers.equalTo; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoAgenciaCodigoCedente.getTextoAgenciaCodigoCedente; +import static org.junit.Assert.*; + +import org.jrimum.bopepo.excludes.ContaBancariaBuilder; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoInfoCampoAgenciaCodigoCedente { + + @Test + public void deve_retornar_agencia_com_dv_e_numero_da_conta_com_dv(){ + ContaBancaria conta = ContaBancariaBuilder.defaultValue(); + + assertThat(getTextoAgenciaCodigoCedente(conta), equalTo("1234-1 / 123456-0")); + } + + @Test + public void deve_retornar_agencia_sem_dv_e_numero_da_conta_com_dv(){ + ContaBancaria conta = ContaBancariaBuilder.defaultValue(); + conta.setAgencia(new Agencia(conta.getAgencia().getCodigo())); + + assertThat(getTextoAgenciaCodigoCedente(conta), equalTo("1234 / 123456-0")); + } + + @Test + public void deve_retornar_agencia_com_dv_e_numero_da_conta_sem_dv(){ + ContaBancaria conta = ContaBancariaBuilder.defaultValue(); + conta.setNumeroDaConta(new NumeroDaConta(conta.getNumeroDaConta().getCodigoDaConta())); + + assertThat(getTextoAgenciaCodigoCedente(conta), equalTo("1234-1 / 123456")); + } + + @Test + public void deve_retornar_agencia_sem_dv_e_numero_da_conta_sem_dv(){ + ContaBancaria conta = ContaBancariaBuilder.defaultValue(); + conta.setAgencia(new Agencia(conta.getAgencia().getCodigo())); + conta.setNumeroDaConta(new NumeroDaConta(conta.getNumeroDaConta().getCodigoDaConta())); + + assertThat(getTextoAgenciaCodigoCedente(conta), equalTo("1234 / 123456")); + } + + @Test + public void deve_nao_gerar_exceptions_quando_agencia_ausente(){ + ContaBancaria conta = ContaBancariaBuilder.defaultValue(); + conta.setAgencia(null); + + assertThat(getTextoAgenciaCodigoCedente(conta), equalTo("123456-0")); + } + + @Test + public void deve_nao_gerar_exceptions_quando_conta_ausente(){ + ContaBancaria conta = ContaBancariaBuilder.defaultValue(); + conta.setNumeroDaConta(null); + + assertThat(getTextoAgenciaCodigoCedente(conta), equalTo("1234-1")); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoCodigoBanco.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoCodigoBanco.java new file mode 100644 index 0000000..28f400a --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoCodigoBanco.java @@ -0,0 +1,54 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 16/01/2014 - 19:17:47 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 16/01/2014 - 19:17:47 + * + */ + + +package org.jrimum.bopepo.view.info.campo; + +import static org.hamcrest.Matchers.equalTo; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoCodigoBanco.getTextoCodigoDoBanco; +import static org.junit.Assert.*; + +import org.jrimum.bopepo.excludes.ContaBancariaBuilder; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.junit.Test; + + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoInfoCampoCodigoBanco { + + @Test + public void deve_retornar_codigo_de_compensacao_com_dv(){ + ContaBancaria conta = ContaBancariaBuilder.defaultValue(); + + assertThat(getTextoCodigoDoBanco(conta), equalTo("237-2")); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoEndereco.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoEndereco.java new file mode 100644 index 0000000..100fc13 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoEndereco.java @@ -0,0 +1,265 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 17/01/2014 - 19:32:45 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 17/01/2014 - 19:32:45 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.*; + +import org.jrimum.bopepo.excludes.EnderecoBuilder; +import org.jrimum.domkee.comum.pessoa.endereco.CEP; +import org.jrimum.domkee.comum.pessoa.endereco.Endereco; +import org.jrimum.domkee.financeiro.banco.febraban.EntidadeDeCobranca; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoInfoCampoEndereco { + + private static final String ENDERECO_ESPERADO_LINHA1 = "Grande Centro - Natal / RN"; + private static final String ENDERECO_ESPERADO_LINHA2 = "Rua poeta dos programas, n°: 1 / Apt 101 - CEP: 59064-120"; + + //LINHA1 + + @Test + public void deve_retornar_linha1_correta_para_entidade_de_cobraca(){ + + Endereco endereco = EnderecoBuilder.defaultValue(); + + EntidadeDeCobranca entidade = new EntidadeDeCobranca(""); + entidade.addEndereco(endereco); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo(ENDERECO_ESPERADO_LINHA1)); + } + + @Test + public void deve_retornar_linha1_vazia_para_entidade_de_cobraca_null(){ + EntidadeDeCobranca entidade = null; + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(entidade), equalTo(EMPTY)); + } + + @Test + public void deve_retornar_linha1_vazia_para_entidade_de_cobraca_com_endereco_null(){ + EntidadeDeCobranca entidade = new EntidadeDeCobranca(""); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(entidade), equalTo(EMPTY)); + } + + @Test + public void deve_retornar_linha1_correta_para_endereco(){ + + Endereco endereco = EnderecoBuilder.defaultValue(); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo(ENDERECO_ESPERADO_LINHA1)); + } + + + @Test + public void deve_retornar_linha1_para_endereco_quando_bairro_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setBairro(null); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo("Natal / RN")); + } + + @Test + public void deve_retornar_linha1_para_endereco_quando_bairro_blank(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setBairro(EMPTY); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo("Natal / RN")); + } + + @Test + public void deve_retornar_linha1_para_endereco_quando_localidade_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setLocalidade(null); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo("Grande Centro / RN")); + } + + @Test + public void deve_retornar_linha1_para_endereco_quando_localidade_blank(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setLocalidade(null); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo("Grande Centro / RN")); + } + + @Test + public void deve_retornar_linha1_para_endereco_quando_uf_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setUF(null); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo("Grande Centro - Natal")); + } + + @Test + public void deve_retornar_linha1_vazia_para_endereco_null(){ + Endereco endereco = null; + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha1(endereco), equalTo(EMPTY)); + } + + //LINHA2 + + @Test + public void deve_retornar_linha2_correta_para_entidade_de_cobraca(){ + + Endereco endereco = EnderecoBuilder.defaultValue(); + + EntidadeDeCobranca entidade = new EntidadeDeCobranca(""); + entidade.addEndereco(endereco); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo(ENDERECO_ESPERADO_LINHA2)); + } + + @Test + public void deve_retornar_linha2_vazia_para_entidade_de_cobraca_null(){ + EntidadeDeCobranca entidade = null; + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(entidade), equalTo(EMPTY)); + } + + @Test + public void deve_retornar_linha2_vazia_para_entidade_de_cobraca_com_endereco_null(){ + EntidadeDeCobranca entidade = new EntidadeDeCobranca(""); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(entidade), equalTo(EMPTY)); + } + + @Test + public void deve_retornar_linha2_correta_para_endereco(){ + + Endereco endereco = EnderecoBuilder.defaultValue(); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo(ENDERECO_ESPERADO_LINHA2)); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_logradouro_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setLogradouro(null); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo(", n°: 1 / Apt 101 - CEP: 59064-120")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_logradouro_blank(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setLogradouro(""); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo(", n°: 1 / Apt 101 - CEP: 59064-120")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_numero_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setNumero(null); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo("Rua poeta dos programas / Apt 101 - CEP: 59064-120")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_numero_blank(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setNumero(""); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo("Rua poeta dos programas / Apt 101 - CEP: 59064-120")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_complemento_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setComplemento(null); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo("Rua poeta dos programas, n°: 1 - CEP: 59064-120")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_compplemento_blank(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + endereco.setComplemento(""); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo("Rua poeta dos programas, n°: 1 - CEP: 59064-120")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_objeto_cep_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + CEP cep = null; + endereco.setCep(cep); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo("Rua poeta dos programas, n°: 1 / Apt 101")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_codigo_cep_null(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + CEP cep = new CEP(); + endereco.setCep(cep); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo("Rua poeta dos programas, n°: 1 / Apt 101")); + } + + @Test + public void deve_retornar_linha2_para_endereco_quando_codigo_cep_blank(){ + Endereco endereco = EnderecoBuilder.defaultValue(); + + CEP cep = new CEP(""); + endereco.setCep(cep); + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo("Rua poeta dos programas, n°: 1 / Apt 101")); + } + + @Test + public void deve_retornar_linha2_vazia_para_endereco_null(){ + Endereco endereco = null; + + assertThat(BoletoInfoCampoEndereco.getTextoEnderecoLinha2(endereco), equalTo(EMPTY)); + } + +} \ No newline at end of file diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoLogoBanco.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoLogoBanco.java new file mode 100644 index 0000000..43266d4 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoLogoBanco.java @@ -0,0 +1,75 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/01/2014 - 21:35:25 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/01/2014 - 21:35:25 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; + +import java.awt.Image; + +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Banco; +import org.jrimum.domkee.financeiro.banco.febraban.CodigoDeCompensacaoBACEN; +import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoInfoCampoLogoBanco { + + @Test + public void deve_retornar_imagem_logo_quando_conta_contem_imagem(){ + Image imgLogo = mock(Image.class); + Banco banco = new Banco(); + banco.setImgLogo(imgLogo); + ContaBancaria conta = new ContaBancaria(); + conta.setBanco(banco); + ResourceBundle resourceBundle = null; + + Image logo = BoletoInfoCampoLogoBanco.getImagemBanco(resourceBundle, conta); + + assertThat(logo, equalTo(imgLogo)); + } + + @Test + public void deve_retornar_imagem_logo_do_resource_quando_conta_nao_contem_imagem(){ + ContaBancaria conta = new ContaBancaria(); + conta.setBanco(new Banco(new CodigoDeCompensacaoBACEN(1),"Banco do Brasil")); + ResourceBundle resourceBundle = new ResourceBundle(); + Image logoEsperada = resourceBundle.getLogotipoDoBanco("001"); + + Image logo = BoletoInfoCampoLogoBanco.getImagemBanco(resourceBundle, conta); + + assertThat(logo, equalTo(logoEsperada)); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoNossoNumero.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoNossoNumero.java new file mode 100644 index 0000000..4f63e64 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoNossoNumero.java @@ -0,0 +1,96 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 14:25:25 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 14:25:25 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.hamcrest.Matchers.equalTo; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoNossoNumero.getTextoNossoNumero; +import static org.junit.Assert.assertThat; + +import org.jrimum.bopepo.excludes.TituloBuilder; +import org.jrimum.domkee.financeiro.banco.febraban.Titulo; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoInfoCampoNossoNumero { + + @Test + public void deve_retornar_nosso_numero_sem_dv_quando_dv_null(){ + Titulo titulo = TituloBuilder.defaultValue(); + + titulo.setNossoNumero("123456"); + titulo.setDigitoDoNossoNumero(null); + + assertThat(getTextoNossoNumero(titulo), equalTo("123456")); + } + + @Test + public void deve_retornar_nosso_numero_sem_dv_quando_dv_vazio(){ + Titulo titulo = TituloBuilder.defaultValue(); + + titulo.setNossoNumero("123456"); + titulo.setDigitoDoNossoNumero(""); + + assertThat(getTextoNossoNumero(titulo), equalTo("123456")); + } + + @Test + public void deve_retornar_nosso_numero_com_dv_quando_dv_presente(){ + Titulo titulo = TituloBuilder.defaultValue(); + + titulo.setNossoNumero("123456"); + titulo.setDigitoDoNossoNumero("7"); + + assertThat(getTextoNossoNumero(titulo), equalTo("123456-7")); + } + + @Test + public void deve_retornar_string_vaiza_caso_nao_nosso_numero_null(){ + Titulo titulo = TituloBuilder.defaultValue(); + + titulo.setNossoNumero(null); + titulo.setDigitoDoNossoNumero("7"); + + assertThat(getTextoNossoNumero(titulo), equalTo("")); + } + + @Test + public void deve_retornar_string_vaiza_caso_nao_nosso_numero_vazio(){ + Titulo titulo = TituloBuilder.defaultValue(); + + titulo.setNossoNumero(""); + titulo.setDigitoDoNossoNumero("7"); + + assertThat(getTextoNossoNumero(titulo), equalTo("")); + } + +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoPessoa.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoPessoa.java new file mode 100644 index 0000000..df94681 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoPessoa.java @@ -0,0 +1,91 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 14/01/2014 - 13:47:35 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 14/01/2014 - 13:47:35 + * + */ + + +package org.jrimum.bopepo.view.info.campo; + +import static org.hamcrest.Matchers.equalTo; +import static org.jrimum.bopepo.view.info.campo.BoletoInfoCampoPessoa.getTextoNomeCprfDaPessoa; +import static org.junit.Assert.*; + +import org.jrimum.domkee.financeiro.banco.febraban.EntidadeDeCobranca; +import org.junit.Test; + + +/** + * @author Gilmar P.S.L. + */ +public class TestBoletoInfoCampoPessoa { + + private EntidadeDeCobranca pessoa; + + @Test + public void deve_retornar_texto_formatado_para_pessoa_fisica(){ + String nome = "Uma Pessoa Física Desconhecida"; + String cpf = "222.222.222-22"; + pessoa = new EntidadeDeCobranca(nome, cpf); + String textoExperado = String.format("%s, CPF: %s",nome,cpf); + + assertThat(getTextoNomeCprfDaPessoa(pessoa), equalTo(textoExperado)); + } + + @Test + public void deve_retornar_texto_formatado_para_pessoa_juridica(){ + String nome = "Uma Pessoa Jurídica Qualquer"; + String cpf = "00.000.000/0001-91"; + pessoa = new EntidadeDeCobranca(nome, cpf); + String textoExperado = String.format("%s, CNPJ: %s",nome,cpf); + + assertThat(getTextoNomeCprfDaPessoa(pessoa), equalTo(textoExperado)); + } + + @Test + public void deve_retornar_apenas_nome_quando_cprf_null(){ + String nome = "Nome da Pessoa"; + pessoa = new EntidadeDeCobranca(nome); + + assertThat(getTextoNomeCprfDaPessoa(pessoa), equalTo(nome)); + } + + @Test + public void deve_retornar_apenas_cprf_quando_nome_null(){ + String cprf = "222.222.222-22"; + pessoa = new EntidadeDeCobranca(null,"222.222.222-22"); + + assertThat(getTextoNomeCprfDaPessoa(pessoa), equalTo("CPF: "+cprf)); + } + + @Test + public void deve_retornar_string_vazia_quando_pessoa_null(){ + + assertThat(getTextoNomeCprfDaPessoa(null), equalTo("")); + } + +} \ No newline at end of file diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoViewFactory.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoViewFactory.java new file mode 100644 index 0000000..0f8e71b --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoCampoViewFactory.java @@ -0,0 +1,59 @@ +/* + * Copyright 2014 JRimum Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + * + * Created at: 19/01/2014 - 22:26:33 + * + * ================================================================================ + * + * Direitos autorais 2014 JRimum Project + * + * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode + * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma + * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que + * haja exigência legal ou acordo por escrito, a distribuição de software sob esta + * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam + * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões + * e limitações sob esta LICENÇA. + * + * Criado em: 19/01/2014 - 22:26:33 + * + */ + +package org.jrimum.bopepo.view.info.campo; + +import static org.hamcrest.Matchers.instanceOf; +import static org.junit.Assert.assertThat; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Banco; +import org.jrimum.domkee.financeiro.banco.febraban.CodigoDeCompensacaoBACEN; +import org.junit.Test; + +/** + * @author Gilmar P.S.L. + * + */ +public class TestBoletoInfoCampoViewFactory { + + @Test + public void deve_retornar_implementacao_padrao_para_bancos_nao_suportados(){ + ResourceBundle resourceBundle = new ResourceBundle(); + Boleto boleto = BoletoBuilder.defaultValue(); + boleto.getTitulo().getContaBancaria().setBanco(new Banco(new CodigoDeCompensacaoBACEN(999), "INEXISTENTE")); + + BoletoInfoCampoView infoCampo = BoletoInfoCampoViewFactory.create(resourceBundle, boleto); + + assertThat(infoCampo, instanceOf(BoletoInfoViewDefault.class)); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoViewBradesco.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoViewBradesco.java new file mode 100644 index 0000000..e0c465f --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoViewBradesco.java @@ -0,0 +1,53 @@ +package org.jrimum.bopepo.view.info.campo; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.Carteira; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewBradesco { + + private BoletoInfoViewBradesco view; + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + view = new BoletoInfoViewBradesco(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_local_de_pagamento_padrao() { + boleto.setLocalPagamento(null); + assertEquals("Pagável Preferencialmente na rede Bradesco ou no Bradesco expresso", view.getTextoFcLocalPagamento()); + } + + @Test + public void deve_retornar_agencia_e_conta_no_campo_agencia_codigo_cliente() { + boleto.getTitulo().getContaBancaria().setAgencia(new Agencia(1234,"5")); + boleto.getTitulo().getContaBancaria().setNumeroDaConta(new NumeroDaConta(1234567, "0")); + + assertEquals("1234-5 / 1234567-0", view.getTextoFcAgenciaCodigoCedente()); + assertEquals("1234-5 / 1234567-0", view.getTextoRsAgenciaCodigoCedente()); + } + + @Test + public void deve_retornar_carteira_e_nosso_numero_e_dv_com_traco() { + boleto.getTitulo().getContaBancaria().setCarteira(new Carteira(9)); + boleto.getTitulo().setNossoNumero("00000123456"); + boleto.getTitulo().setDigitoDoNossoNumero("2"); + + assertEquals("09/00000123456-2", view.getTextoFcNossoNumero()); + assertEquals("09/00000123456-2", view.getTextoRsNossoNumero()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoViewCecred.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoViewCecred.java new file mode 100644 index 0000000..cc39c8e --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/TestBoletoInfoViewCecred.java @@ -0,0 +1,42 @@ +package org.jrimum.bopepo.view.info.campo; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewCecred { + + private BoletoInfoViewCecred view; + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + view = new BoletoInfoViewCecred(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_local_de_pagamento_padrao() { + boleto.setLocalPagamento(null); + assertEquals("PAGAVEL PREFERENCIALMENTE NAS COOPERATIVAS DO SISTEMA CECRED.", view.getTextoFcLocalPagamento()); + } + + @Test + public void deve_retornar_agencia_e_conta_no_campo_agencia_codigo_cliente() { + boleto.getTitulo().getContaBancaria().setAgencia(new Agencia(1234,"5")); + boleto.getTitulo().getContaBancaria().setNumeroDaConta(new NumeroDaConta(1234567, "0")); + + assertEquals("1234-5 / 1234567-0", view.getTextoFcAgenciaCodigoCedente()); + assertEquals("1234-5 / 1234567-0", view.getTextoRsAgenciaCodigoCedente()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaFactory.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaFactory.java new file mode 100644 index 0000000..86d78d9 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaFactory.java @@ -0,0 +1,62 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.BoletoInfoCampoView; +import org.jrimum.bopepo.view.info.campo.caixa.BoletoInfoViewCaixaFactory; +import org.jrimum.bopepo.view.info.campo.caixa.BoletoInfoViewCaixaSIGCB; +import org.junit.Before; +import org.junit.Test; + +public class TestBoletoInfoViewCaixaFactory { + + private static final String NN10 = "0123456789"; + private static final String NN14 = "01234567890123"; + private static final String NN15 = "012345678901234"; + private static final String NN17 = "01234567890123456"; + + private Boleto boleto; + private ResourceBundle resourceBundle; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + resourceBundle = mock(ResourceBundle.class); + } + + @Test + public void deve_retornar_implementacao_para_convenio_sigcb() { + boleto.getTitulo().setNossoNumero(NN15); + BoletoInfoCampoView view = BoletoInfoViewCaixaFactory.create(resourceBundle, boleto); + + assertTrue(view instanceof BoletoInfoViewCaixaSIGCB); + } + + @Test + public void deve_retornar_implementacao_para_convenio_sinco() { + boleto.getTitulo().setNossoNumero(NN17); + BoletoInfoCampoView view = BoletoInfoViewCaixaFactory.create(resourceBundle, boleto); + + assertTrue(view instanceof BoletoInfoViewCaixaSINCO); + } + + @Test + public void deve_retornar_implementacao_para_convenio_sicob_nn_10_digitos() { + boleto.getTitulo().setNossoNumero(NN10); + BoletoInfoCampoView view = BoletoInfoViewCaixaFactory.create(resourceBundle, boleto); + + assertTrue(view instanceof BoletoInfoViewCaixaSICOB10); + } + + @Test + public void deve_retornar_implementacao_para_convenio_sicob_nn_14_digitos() { + boleto.getTitulo().setNossoNumero(NN14); + BoletoInfoCampoView view = BoletoInfoViewCaixaFactory.create(resourceBundle, boleto); + + assertTrue(view instanceof BoletoInfoViewCaixaSICOB14); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSICOB10.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSICOB10.java new file mode 100644 index 0000000..4c1c6ea --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSICOB10.java @@ -0,0 +1,53 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.parametro.ParametroCaixaEconomicaFederal; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewCaixaSICOB10 { + + private BoletoInfoViewCaixaSICOB10 view; + + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + view = new BoletoInfoViewCaixaSICOB10(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_carteira_rg_para_cobranca_rapida() { + boleto.getTitulo().getContaBancaria().getCarteira().setTipoCobranca(TipoDeCobranca.COM_REGISTRO); + assertEquals("CR", view.getTextoFcCarteira()); + } + + @Test + public void deve_retornar_carteira_sr_para_carteira_sem_registro() { + boleto.getTitulo().getContaBancaria().getCarteira().setTipoCobranca(TipoDeCobranca.SEM_REGISTRO); + assertEquals("SR", view.getTextoFcCarteira()); + } + + @Test + public void deve_retornar_agencia_codigo_cliente_no_formato_correto() { + boleto.getTitulo().getContaBancaria().setAgencia(new Agencia(34)); + boleto.getTitulo().getContaBancaria().getNumeroDaConta().setCodigoDaConta(12345); + boleto.getTitulo().getContaBancaria().getNumeroDaConta().setDigitoDaConta("0"); + boleto.getTitulo().setParametrosBancarios(new ParametrosBancariosMap(ParametroCaixaEconomicaFederal.CODIGO_OPERACAO, 870)); + + assertEquals("0034.870.00012345-0", view.getTextoFcAgenciaCodigoCedente()); + assertEquals("0034.870.00012345-0", view.getTextoRsAgenciaCodigoCedente()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSICOB14.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSICOB14.java new file mode 100644 index 0000000..c6ee60f --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSICOB14.java @@ -0,0 +1,61 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.parametro.ParametroCaixaEconomicaFederal; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewCaixaSICOB14 { + + private BoletoInfoViewCaixaSICOB14 view; + + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + view = new BoletoInfoViewCaixaSICOB14(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_carteira_sr() { + assertEquals("SR", view.getTextoFcCarteira()); + } + + @Test + public void deve_retornar_agencia_codigo_cliente_no_formato_correto() { + boleto.getTitulo().getContaBancaria().setAgencia(new Agencia(34)); + boleto.getTitulo().getContaBancaria().getNumeroDaConta().setCodigoDaConta(12345); + boleto.getTitulo().getContaBancaria().getNumeroDaConta().setDigitoDaConta("0"); + boleto.getTitulo().setParametrosBancarios(new ParametrosBancariosMap(ParametroCaixaEconomicaFederal.CODIGO_OPERACAO, 870)); + + assertEquals("0034.870.00012345-0", view.getTextoFcAgenciaCodigoCedente()); + assertEquals("0034.870.00012345-0", view.getTextoRsAgenciaCodigoCedente()); + } + + @Test + public void deve_retornar_agencia_codigo_cliente_no_formato_correto_quando_parametro_bancario_nao_informado() { + boleto.getTitulo().getContaBancaria().setAgencia(new Agencia(34)); + boleto.getTitulo().getContaBancaria().getNumeroDaConta().setCodigoDaConta(12345); + boleto.getTitulo().getContaBancaria().getNumeroDaConta().setDigitoDaConta("0"); + + assertEquals("0034.870.00012345-0", view.getTextoFcAgenciaCodigoCedente()); + assertEquals("0034.870.00012345-0", view.getTextoRsAgenciaCodigoCedente()); + } + + @Test + public void deve_retornar_local_de_pagamento_padrao_quando_nenhum_informado() { + boleto.setLocalPagamento(null); + assertEquals("PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE", view.getTextoFcLocalPagamento()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSIGCB.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSIGCB.java new file mode 100644 index 0000000..3895216 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSIGCB.java @@ -0,0 +1,70 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewCaixaSIGCB { + + private static final int CARTEIRA_REGISTRADA = 1; + private static final int CARTEIRA_SEM_REGISTRO = 2; + private static final String EMISSAO_BENEFICIARIO = "4"; + private static final String NOSSO_NUMERO = "000000000000019"; + private static final String DIGITO_NOSSO_NUMERO = "5"; + + private BoletoInfoViewCaixaSIGCB view; + + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + boleto.getTitulo().setNossoNumero(NOSSO_NUMERO); + boleto.getTitulo().setDigitoDoNossoNumero(DIGITO_NOSSO_NUMERO); + + view = new BoletoInfoViewCaixaSIGCB(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_nosso_numero_no_formato_correto_para_carteira_registrada() { + boleto.getTitulo().getContaBancaria().getCarteira().setCodigo(CARTEIRA_REGISTRADA); + + assertEquals(CARTEIRA_REGISTRADA + EMISSAO_BENEFICIARIO + NOSSO_NUMERO + "-" + DIGITO_NOSSO_NUMERO, view.getTextoFcNossoNumero()); + assertEquals(CARTEIRA_REGISTRADA + EMISSAO_BENEFICIARIO + NOSSO_NUMERO + "-" + DIGITO_NOSSO_NUMERO, view.getTextoRsNossoNumero()); + } + + @Test + public void deve_retornar_nosso_numero_no_formato_correto_para_carteira_sem_registro() { + boleto.getTitulo().getContaBancaria().getCarteira().setCodigo(CARTEIRA_SEM_REGISTRO); + + assertEquals(CARTEIRA_SEM_REGISTRO + EMISSAO_BENEFICIARIO + NOSSO_NUMERO + "-" + DIGITO_NOSSO_NUMERO, view.getTextoFcNossoNumero()); + assertEquals(CARTEIRA_SEM_REGISTRO + EMISSAO_BENEFICIARIO + NOSSO_NUMERO + "-" + DIGITO_NOSSO_NUMERO, view.getTextoRsNossoNumero()); + } + + @Test + public void deve_retornar_carteira_rg_para_registrada() { + boleto.getTitulo().getContaBancaria().getCarteira().setTipoCobranca(TipoDeCobranca.COM_REGISTRO); + assertEquals("RG", view.getTextoFcCarteira()); + } + + @Test + public void deve_retornar_carteira_sr_para_carteira_sem_registro() { + boleto.getTitulo().getContaBancaria().getCarteira().setTipoCobranca(TipoDeCobranca.SEM_REGISTRO); + assertEquals("SR", view.getTextoFcCarteira()); + } + + @Test + public void deve_retornar_local_de_pagamento_padrao_quando_nenhum_informado() { + boleto.setLocalPagamento(null); + assertEquals("PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE", view.getTextoFcLocalPagamento()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSINCO.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSINCO.java new file mode 100644 index 0000000..1fb660b --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/caixa/TestBoletoInfoViewCaixaSINCO.java @@ -0,0 +1,44 @@ +package org.jrimum.bopepo.view.info.campo.caixa; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewCaixaSINCO { + + private static final int CONSTANTE = 9; + private static final String NOSSO_NUMERO = "00000001000105270"; + private static final String DIGITO_NOSSO_NUMERO = "8"; + + private BoletoInfoViewCaixaSINCO view; + + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + view = new BoletoInfoViewCaixaSINCO(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_nosso_numero_no_formato_correto() { + boleto.getTitulo().setNossoNumero(NOSSO_NUMERO); + boleto.getTitulo().setDigitoDoNossoNumero(DIGITO_NOSSO_NUMERO); + + assertEquals(CONSTANTE + NOSSO_NUMERO + "-" + DIGITO_NOSSO_NUMERO, view.getTextoFcNossoNumero()); + assertEquals(CONSTANTE + NOSSO_NUMERO + "-" + DIGITO_NOSSO_NUMERO, view.getTextoRsNossoNumero()); + } + + @Test + public void deve_retornar_carteira_01() { + assertEquals("01", view.getTextoFcCarteira()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestAbstractBoletoInfoViewHSBC.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestAbstractBoletoInfoViewHSBC.java new file mode 100644 index 0000000..72ef0ff --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestAbstractBoletoInfoViewHSBC.java @@ -0,0 +1,41 @@ +package org.jrimum.bopepo.view.info.campo.hsbc; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.bopepo.view.info.campo.BoletoInfoCampoView; +import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestAbstractBoletoInfoViewHSBC { + + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + } + + @Test + public void deve_retornar_instancia_correta_para_cobranca_registrada() { + boleto.getTitulo().getContaBancaria().getCarteira().setTipoCobranca(TipoDeCobranca.COM_REGISTRO); + BoletoInfoCampoView view = AbstractBoletoInfoViewHSBC.create(mock(ResourceBundle.class), boleto); + + assertTrue(view instanceof BoletoInfoViewHSBCRegistrada); + } + + @Test + public void deve_retornar_instancia_correta_para_cobranca_nao_registrada() { + boleto.getTitulo().getContaBancaria().getCarteira().setTipoCobranca(TipoDeCobranca.SEM_REGISTRO); + BoletoInfoCampoView view = AbstractBoletoInfoViewHSBC.create(mock(ResourceBundle.class), boleto); + + assertTrue(view instanceof BoletoInfoViewHSBCNaoRegistrada); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestBoletoInfoViewHSBCNaoRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestBoletoInfoViewHSBCNaoRegistrada.java new file mode 100644 index 0000000..a9499c0 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestBoletoInfoViewHSBCNaoRegistrada.java @@ -0,0 +1,67 @@ +package org.jrimum.bopepo.view.info.campo.hsbc; + +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewHSBCNaoRegistrada { + + private BoletoInfoViewHSBCNaoRegistrada view; + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + view = new BoletoInfoViewHSBCNaoRegistrada(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_local_de_pagamento_padrao() { + boleto.setLocalPagamento(null); + assertEquals("PAGAR PREFERENCIALMENTE EM AGÊNCIA DO HSBC", view.getTextoFcLocalPagamento()); + } + + @Test + public void deve_retornar_apenas_codigo_do_cliente_no_campo_agencia_codigo_cliente() { + boleto.getTitulo().getContaBancaria().setAgencia(new Agencia(1234)); + boleto.getTitulo().getContaBancaria().setNumeroDaConta(new NumeroDaConta(1234567, "0")); + + assertEquals("1234567", view.getTextoFcAgenciaCodigoCedente()); + assertEquals("1234567", view.getTextoRsAgenciaCodigoCedente()); + } + + @Test + public void deve_retornar_especie_documento_em_branco() { + assertEquals(EMPTY, view.getTextoFcEspecieDocumento()); + } + + @Test + public void deve_retornar_aceite_em_branco() { + assertEquals(EMPTY, view.getTextoFcAceite()); + } + + @Test + public void deve_retornar_nosso_numero_e_dv_sem_tracos() { + boleto.getTitulo().setNossoNumero("0000000123456"); + boleto.getTitulo().setDigitoDoNossoNumero("941"); + + assertEquals("0000000123456941", view.getTextoFcNossoNumero()); + assertEquals("0000000123456941", view.getTextoRsNossoNumero()); + } + + @Test + public void deve_retornar_carteira_constante() { + assertEquals("CNR", view.getTextoFcCarteira()); + } +} diff --git a/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestBoletoInfoViewHSBCRegistrada.java b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestBoletoInfoViewHSBCRegistrada.java new file mode 100644 index 0000000..caf5a41 --- /dev/null +++ b/jrimum-bopepo/src/test/java/org/jrimum/bopepo/view/info/campo/hsbc/TestBoletoInfoViewHSBCRegistrada.java @@ -0,0 +1,66 @@ +package org.jrimum.bopepo.view.info.campo.hsbc; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.jrimum.bopepo.Boleto; +import org.jrimum.bopepo.excludes.BoletoBuilder; +import org.jrimum.bopepo.view.ResourceBundle; +import org.jrimum.domkee.financeiro.banco.febraban.Agencia; +import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta; +import org.junit.Before; +import org.junit.Test; + +/** + * @author Rômulo Augusto + */ +public class TestBoletoInfoViewHSBCRegistrada { + + private BoletoInfoViewHSBCRegistrada view; + private Boleto boleto; + + @Before + public void setUp() { + boleto = BoletoBuilder.defaultValue(); + view = new BoletoInfoViewHSBCRegistrada(mock(ResourceBundle.class), boleto); + } + + @Test + public void deve_retornar_local_de_pagamento_padrao() { + boleto.setLocalPagamento(null); + assertEquals("PAGAR PREFERENCIALMENTE EM AGÊNCIA DO HSBC", view.getTextoFcLocalPagamento()); + } + + @Test + public void deve_retornar_agencia_e_numero_da_conta_no_campo_agencia_codigo_cliente() { + boleto.getTitulo().getContaBancaria().setAgencia(new Agencia(1234)); + boleto.getTitulo().getContaBancaria().setNumeroDaConta(new NumeroDaConta(1234567, "0")); + + assertEquals("12341234567", view.getTextoFcAgenciaCodigoCedente()); + assertEquals("12341234567", view.getTextoRsAgenciaCodigoCedente()); + } + + @Test + public void deve_retornar_especie_documento_padrao() { + assertEquals("PD", view.getTextoFcEspecieDocumento()); + } + + @Test + public void deve_retornar_aceite_padrao() { + assertEquals("NÃO", view.getTextoFcAceite()); + } + + @Test + public void deve_retornar_nosso_numero_e_dv_sem_tracos() { + boleto.getTitulo().setNossoNumero("0000000123456"); + boleto.getTitulo().setDigitoDoNossoNumero("941"); + + assertEquals("0000000123456941", view.getTextoFcNossoNumero()); + assertEquals("0000000123456941", view.getTextoRsNossoNumero()); + } + + @Test + public void deve_retornar_carteira_constante() { + assertEquals("CSB", view.getTextoFcCarteira()); + } +} diff --git a/jrimum-bopepo/src/test/resources/ArquivoComCampos.odt b/jrimum-bopepo/src/test/resources/ArquivoComCampos.odt new file mode 100644 index 0000000..cdd4694 Binary files /dev/null and b/jrimum-bopepo/src/test/resources/ArquivoComCampos.odt differ diff --git a/jrimum-bopepo/src/test/resources/ArquivoComCampos.pdf b/jrimum-bopepo/src/test/resources/ArquivoComCampos.pdf new file mode 100644 index 0000000..37173f0 Binary files /dev/null and b/jrimum-bopepo/src/test/resources/ArquivoComCampos.pdf differ diff --git a/jrimum-bopepo/src/test/resources/ArquivoSemCampos.odt b/jrimum-bopepo/src/test/resources/ArquivoSemCampos.odt new file mode 100644 index 0000000..71e84f6 Binary files /dev/null and b/jrimum-bopepo/src/test/resources/ArquivoSemCampos.odt differ diff --git a/jrimum-bopepo/src/test/resources/ArquivoSemCampos.pdf b/jrimum-bopepo/src/test/resources/ArquivoSemCampos.pdf new file mode 100644 index 0000000..39f8640 Binary files /dev/null and b/jrimum-bopepo/src/test/resources/ArquivoSemCampos.pdf differ diff --git a/jrimum-bopepo/src/test/resources/ValoresEsperadosDosCamposParaBoletoBradescoPDF.properties b/jrimum-bopepo/src/test/resources/ValoresEsperadosDosCamposParaBoletoBradescoPDF.properties new file mode 100644 index 0000000..56e576e --- /dev/null +++ b/jrimum-bopepo/src/test/resources/ValoresEsperadosDosCamposParaBoletoBradescoPDF.properties @@ -0,0 +1,98 @@ +#/* +# * Copyright 2013 JRimum Project +# * +# * Licensed under the Apache License= Version 2.0 (the "License"); you may not +# * use this file except in compliance with the License. You may obtain a copy of +# * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by +# * applicable law or agreed to in writing= software distributed under the +# * License is distributed on an "AS IS" BASIS= WITHOUT WARRANTIES OR CONDITIONS +# * OF ANY KIND= either express or implied. See the License for the specific +# * language governing permissions and limitations under the License. +# * +# * Created at: 08/09/2013 - 19:02:44 +# * +# * ================================================================================ +# * +# * Direitos autorais 2013 JRimum Project +# * +# * Licenciado sob a Licena Apache= Verso 2.0 ("LICENA"); voc no pode usar +# * esse arquivo exceto em conformidade com a esta LICENA. Voc pode obter uma +# * cpia desta LICENA em http://www.apache.org/licenses/LICENSE-2.0 A menos que +# * haja exigncia legal ou acordo por escrito= a distribuio de software sob +# * esta LICENA se dar \u201CCOMO EST\u201D= SEM GARANTIAS OU CONDIES DE QUALQUER +# * TIPO= sejam expressas ou tcitas. Veja a LICENA para a redao especfica a +# * reger permisses e limitaes sob esta LICENA. +# * +# * Criado em: 08/09/2013 - 19:02:44 +# * +# */ + +############################ +# Dados para uso em testes # +############################ + +##Campos em ordem alfabetica + +#Ficha de Compensao +txtFcAceite=A +txtFcAgenciaCodigoCedente=1234-1 / 0123456-0 +txtFcCarteira=30 +txtFcCedente=Projeto JRimum +txtFcCodBanco=237-2 +##Imagem +txtFcCodigoBarra= +txtFcDataDocumento=01/01/2020 +txtFcDataProcessamento=14/01/2020 +txtFcDataVencimento=07/09/2020 +txtFcDescontoAbatimento=R$ 0,05 +txtFcEspecie=REAL +txtFcEspecieDocumento=DM +txtFcInstrucaoAoCaixa1=PARA PAGAMENTO 1 at Hoje no cobrar nada! +txtFcInstrucaoAoCaixa2=PARA PAGAMENTO 2 at Amanh No cobre! +txtFcInstrucaoAoCaixa3=PARA PAGAMENTO 3 at Depois de amanh, OK, no cobre. +txtFcInstrucaoAoCaixa4=PARA PAGAMENTO 4 at 04/xx/xxxx de 4 dias atrs COBRAR O VALOR DE: R$ 01,00 +txtFcInstrucaoAoCaixa5=PARA PAGAMENTO 5 at 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00 +txtFcInstrucaoAoCaixa6=PARA PAGAMENTO 6 at 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00 +txtFcInstrucaoAoCaixa7=PARA PAGAMENTO 7 at xx/xx/xxxx COBRAR O VALOR QUE VOC QUISER! +txtFcInstrucaoAoCaixa8=APS o Vencimento, Pagvel Somente na Rede X. +txtFcLinhaDigitavel=23791.23439 09934.567893 12012.345604 9 83710000000023 +txtFcLocalPagamento=Pagvel preferencialmente na Rede X ou em qualquer Banco at o Vencimento. +##Imagem +txtFcLogoBanco= +txtFcMoraMulta=R$ 0,00 +txtFcNossoNumero=30/99345678912-5 +txtFcNumeroDocumento=123456 +txtFcOutraDeducao=R$ 0,00 +txtFcOutroAcrescimo=R$ 0,00 +txtFcQuantidade= +txtFcSacadoL1=JRimum Developer Pronto Para Frias, CPF: 222.222.222-22 +txtFcSacadoL2=Grande Centro - Natal / RN +txtFcSacadoL3=Rua poeta dos programas, n: 1 / Apt 101 - CEP: 59064-120 +txtFcSacadorAvalistaL1=Mastermum, CNPJ: 00.000.000/0001-91 +txtFcSacadorAvalistaL2=Grande Centro - Braslia / DF +txtFcSacadorAvalistaL3=Rua Eternamente Principal, n: 001 / Apt 101 - CEP: 70150-903 +txtFcUsoBanco= +txtFcValor= +txtFcValorCobrado=R$ 0,00 +txtFcValorDocumento=R$ 0,23 +#Recibo do Sacado +txtRsAgenciaCodigoCedente=1234-1 / 0123456-0 +txtRsCedente=Projeto JRimum +txtRsCodBanco=237-2 +txtRsCpfCnpj=00.000.208/0001-00 +txtRsDataVencimento=07/09/2020 +txtRsDescontoAbatimento=R$ 0,05 +txtRsEspecie=REAL +txtRsInstrucaoAoSacado=Senhor sacado, sabemos sim que o valor cobrado no o esperado, aproveite o DESCONTO! +txtRsLinhaDigitavel=23791.23439 09934.567893 12012.345604 9 83710000000023 +##Imagem +txtRsLogoBanco= +txtRsMoraMulta=R$ 0,00 +txtRsNossoNumero=30/99345678912-5 +txtRsNumeroDocumento=123456 +txtRsOutraDeducao=R$ 0,00 +txtRsOutroAcrescimo=R$ 0,00 +txtRsQuantidade= +txtRsSacado=JRimum Developer Pronto Para Frias, CPF: 222.222.222-22 +txtRsValorCobrado=R$ 0,00 +txtRsValorDocumento=R$ 0,23 \ No newline at end of file diff --git a/jrimum-bopepo/src/test/resources/log4j.properties b/jrimum-bopepo/src/test/resources/log4j.properties new file mode 100644 index 0000000..6dd8fa6 --- /dev/null +++ b/jrimum-bopepo/src/test/resources/log4j.properties @@ -0,0 +1,50 @@ +#/* +# * Copyright 2013 JRimum Project +# * +# * Licensed under the Apache License, Version 2.0 (the "License"); you may not +# * use this file except in compliance with the License. You may obtain a copy of +# * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by +# * applicable law or agreed to in writing, software distributed under the +# * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +# * OF ANY KIND, either express or implied. See the License for the specific +# * language governing permissions and limitations under the License. +# * +# * Created at: 08/09/2013 - 11:59:36 +# * +# * ================================================================================ +# * +# * Direitos autorais 2013 JRimum Project +# * +# * Licenciado sob a Licena Apache, Verso 2.0 ("LICENA"); voc no pode usar +# * esse arquivo exceto em conformidade com a esta LICENA. Voc pode obter uma +# * cpia desta LICENA em http://www.apache.org/licenses/LICENSE-2.0 A menos que +# * haja exigncia legal ou acordo por escrito, a distribuio de software sob +# * esta LICENA se dar \u201CCOMO EST\u201D, SEM GARANTIAS OU CONDIES DE QUALQUER +# * TIPO, sejam expressas ou tcitas. Veja a LICENA para a redao especfica a +# * reger permisses e limitaes sob esta LICENA. +# * +# * Criado em: 08/09/2013 - 11:59:36 +# * +# */ + + +###DEFALUT CONFIGURATIONS +### direct log messages to stdout ### +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d %p %t %c{2}.%M (%F:%L)-%m%n %x + +### direct messages to file jrimum-bopepo.log +#log4j.appender.file=org.apache.log4j.FileAppender +#log4j.appender.file.File=jrimum-bopepo.log +#log4j.appender.file.layout=org.apache.log4j.PatternLayout +#log4j.appender.file.layout.ConversionPattern=%d %p %t %c.%M (%F:%L)-%m%n %x + +## log all as ERROS. +log4j.rootCategory=ERROR, stdout + +###Testes +## Log para todo o jrimum em nivel trace +log4j.logger.org.jrimum.bopepo=ERROR, stdout +log4j.additivity.org.jrimum.bopepo=false \ No newline at end of file