Tutorial do Alfred Biblioteca Alfred Utilitários, Validadores e Formatadores para Java Versão 1.1 - Última atualização em 10 de Setembro de 2010 Biblioteca Alfred http://www.alfredlibrary.org/ Página 1 Tutorial do Alfred Sumário 1. Licença do Alfred................................................................................... 4 2. Licença deste Manual.............................................................................. 8 3. Sobre o Alfred....................................................................................... 9 4. Como Usar.......................................................................................... 10 5. Conversores........................................................................................ 11 5.1. Armazenamento..............................................................................11 5.2. Base Numérica............................................................................... 11 5.3. Comprimento.................................................................................11 5.4. Massa.......................................................................................... 12 5.5. Moeda......................................................................................... 13 5.6. Temperatura..................................................................................13 5.7. Tempo......................................................................................... 13 5.8. Volume........................................................................................ 14 6. Formatadores...................................................................................... 15 6.1. CEP.............................................................................................15 6.2. CNPJ........................................................................................... 15 6.3. CPF.............................................................................................15 6.4. Data............................................................................................16 6.5. Inscrição Estadual........................................................................... 16 6.6. Moeda......................................................................................... 16 6.7. PIS/PASEP..................................................................................... 17 6.8. Telefone.......................................................................................17 7. Inutilitários.........................................................................................18 8. Utilitários...........................................................................................19 8.1. Bancos......................................................................................... 19 8.2. Beans.......................................................................................... 20 8.3. Bulário.........................................................................................21 8.4. Clima.......................................................................................... 21 8.5. Coleções......................................................................................21 8.6. Correios....................................................................................... 22 Biblioteca Alfred http://www.alfredlibrary.org/ Página 2 Tutorial do Alfred 8.7. CPF e CNPJ................................................................................... 23 8.8. CID............................................................................................. 24 8.9. Data............................................................................................24 8.10. Dicionários..................................................................................25 8.11. Dígito Verificador...........................................................................26 8.12. Física......................................................................................... 26 8.13. Horóscopos.................................................................................. 27 8.14. Idiomas.......................................................................................27 8.15. Inscrição Estadual.......................................................................... 28 8.16. Loterias...................................................................................... 28 8.17. Matemática..................................................................................28 8.18. Mídia......................................................................................... 30 8.19. Música........................................................................................30 8.20. Net............................................................................................30 8.21. PIS/PASEP....................................................................................31 8.22. Texto......................................................................................... 31 8.23. HTML......................................................................................... 32 8.24. Trânsito...................................................................................... 33 9. Validadores......................................................................................... 34 9.1. CNPJ........................................................................................... 34 9.2. CPF.............................................................................................34 9.3. Diversos....................................................................................... 34 9.4. Inscrição Estadual........................................................................... 34 9.5. E-mail..........................................................................................35 9.6. Números.......................................................................................35 9.7. PIS/PASEP..................................................................................... 35 Biblioteca Alfred http://www.alfredlibrary.org/ Página 3 Tutorial do Alfred 1. Licença do Alfred O Alfred é disponibilizado sob a licença LGPL 3. Veja abaixo o texto da licença. De forma bastante simples, podemos dizer que você pode usar livremente. O Alfred é uma biblioteca opensource. GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License. “The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Biblioteca Alfred http://www.alfredlibrary.org/ Página 4 Tutorial do Alfred Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: • a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or • b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: • a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. • b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: • a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. Biblioteca Alfred http://www.alfredlibrary.org/ Página 5 Tutorial do Alfred • b) Accompany the Combined Work with a copy of the GNU GPL and this license document. • c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. • d) Do one of the following: • 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. • 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. • e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: • a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. • b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. Biblioteca Alfred http://www.alfredlibrary.org/ Página 6 Tutorial do Alfred 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. Biblioteca Alfred http://www.alfredlibrary.org/ Página 7 Tutorial do Alfred 2. Licença deste Manual Este manual está sob a licença Attribution Share Alike*, acessível em http://creativecommons.org/licenses/by-sa/3.0. This license lets others remix, tweak, and build upon your work even for commercial reasons, as long as they credit you and license their new creations under the identical terms. This license is often compared to open source software licenses. All new works based on yours will carry the same license, so any derivatives will also allow commercial use. Biblioteca Alfred http://www.alfredlibrary.org/ Página 8 Tutorial do Alfred 3. Sobre o Alfred O Alfred surgiu de minha necessidade em agrupar utilitários genéricos em um único lugar. Antes, era comum eu ter diversos aplicativos em que existiam códigos interessantes e que poderiam ser disponibilizados para a comunidade. Em alguns casos, isto não era possível, pois a funcionalidade estava enraizada no próprio aplicativo. Surgiu, então, a ideia: vou construir uma biblioteca opensource, colocar lá essas funcionalidades e passar a usá-la em meus projetos. Surgiu o Alfred. E o nome? Bom, admito que foi por pura falta de criatividade mesmo. Imaginei no mordomo do Batman, o tal Alfred. O cara está lá para ajudar um herói e quase ninguém lembra dele. A ideia da biblioteca é esta também. Está aí para ajudar os programadores e ninguém precisa lembrar que ela existe. :) Um pouco da filosofia do Alfred. O objetivo é ter um conjunto de funcionalidades que não dependem de bibliotecas externas. Portanto, você não verá dependências a log4j, hibernate e qualquer que sejam as bibliotecas. O objetivo é que o Alfred seja um núcleo independente. Preciso deixar meus agradecimentos a alguns colaboradores importantíssimos, como o Mário Jorge Pereira pelas constantes ideias. Carlos Daniel Mercer pela contribuição com código e a Rodrigo Moreira Fagundes, que contribui com tanto código que já faz parte ativamente do time. Biblioteca Alfred http://www.alfredlibrary.org/ Página 9 Tutorial do Alfred 4. Como Usar Você pode usar o Alfred obtendo o arquivo alfred.jar e colocando-o no classpath de sua aplicação ou usando o nosso repositório Maven. Neste segundo caso, adicione às dependências de seu projeto as seguintes linhas: 01. <repositories> 02. <repository> 03. <id>alfredlibrary-snapshot.googlecode.com </id> 04. <name>Alfred Library Snapshot </name> 05. <url>http://alfredlibrary.googlecode.com/svn/repository/snapshot </url> 06. </repository> 07. <repository> 08. <id>alfredlibrary-release.googlecode.com </id> 09. <name>Alfred Library Snapshot </name> 10. <url>http://alfredlibrary.googlecode.com/svn/repository/release </url> 11. </repository> 12. </repositories> Biblioteca Alfred http://www.alfredlibrary.org/ Página 10 Tutorial do Alfred 5. Conversores Os conversores no Alfred são uma forma fácil e bastante prática para você converter entre unidades de medida. Disponibilizamos diversos tipos de Conversores. Você encontra estes conversores no pacote org.alfredlibrary.conversores. Vamos ver abaixo cada conversor e rápidos exemplos como utilizá-los. 5.1. Armazenamento O conversor de armazenamento serve para você converter entre unidades do tipo bit, kilobit, megabit, gigabit, terabit, petabit, exabit, byte, kilobyte, megabyte, gigabyte, terabyte, petabyte e exabyte. Vamos aos exemplos de uso: 1. public void converter() { 2. Double arm = Armazenamento.converter(1d, Unidade.EXABYTE, Unidade.PETABYTE); 3. } Exemplo de conversão de Exabyte para Terabyte. No exemplo acima, você está convertendo um (1) exabyte em petabytes. O primeiro parâmetro é o valor que você quer converter. O segundo, a unidade de entrada. O terceito parâmetro é a unidade de saída. Da mesma forma, você poderia converter um gigabyte em megabytes. 1. public void converter() { 2. Double arm = Armazenamento.converter(1d, Unidade.GIGABYTE, Unidade.MEGABYTE); 3. } Exemplo de conversão de Gigabyte para Megabyte. 5.2. Base Numérica Esta é boa para quem acabou de entrar na faculdade de ciências da computação :). No início do curso você é bombardeado com provas que pedem para você converter de binário para decimal, de hexadecimal para binário e por aí vai. É muito chato! O Alfred dá uma força fazendo estas conversões para você. As bases numéricas suportadas são Binário, Octal, Decimal e Hexadecimal. 1. public void converter() { 2. String binario = BaseNumerica.converter("2", Base.DECIMAL, Base.BINARIO); 3. } Exemplo de conversão de um número na base decimal para a base binária. 5.3. Comprimento Precisa converter quilômetros para jardas? E o que você acha de converter metros para léguas Biblioteca Alfred http://www.alfredlibrary.org/ Página 11 Tutorial do Alfred marítimas? Então, use o conversor de comprimento. São várias as unidades suportadas: • Quilômetro • Hectômetro • Decâmetro • Metro • Decímetro • Centímetro • Milímetro • Micrometro • Nanômetro • Angstrom Sem contar nas unidades menos convencionais, como Jardas, Pés, Milhas e Léguas. Vamos a um exemplo de uso: 1. public void converter() { 2. Double comp = Comprimento.converter(1D, Unidade.NANOMETRO, Unidade.ANGSTROM); 3. } Exemplo de conversão de nanômetro para angstrom. 5.4. Massa Não, não estou falando de macarrão ou lasanha. Aqui você tem um conversor para as unidades Tonelada, Quilograma, Hectograma, Grama, Centigrama, Quilate, Miligrama, Micrograma e Nanograma. Mas também temos outras unidades pouco convencionais aqui no Brasil. São elas: Onça Troy Para metais preciosos, gemas ou medicamentos. Onça Avordupios Para objetos em geral. Libra Troy Para metais preciosos, gemas ou medicamentos. Libra Avordupios Para objetos em geral. Libra Imperial Definição obsoleta do ato de pesos e medidas de 1878 (UK). Biblioteca Alfred http://www.alfredlibrary.org/ Página 12 Tutorial do Alfred Arroba Para gado. Arroba Brasileira Para gado, no padrão brasileiro. Vamos a um exemplo de uso: 1. public void converter() { 2. Double massa = Massa.converter(1d, Unidade.TONELADA, Unidade.QUILOGRAMA); 3. } Exemplo de conversão de tonelada para quilograma. 5.5. Moeda Quer saber a cotação do real frente ao dólar? E porque não a cotação do dólar frente ao peso argentino? É fácil, basta usar o conversor de Moeda do Alfred. Este conversor necessita de uma conexão com a Internet, pois a conversão é realizada através do sítio do Banco Central do Brasil. Veja um exemplo: 1. public void converter() { 2. String moeda = Moeda.converter("1,00", Moeda.ESTADOSUNIDOS, Moeda.BRASIL); 3. } Exemplo de conversão de dólar para real. Neste exemplo, você está convertendo um dólar para real. As moedas são muitas, não ficaria legal listá-las aqui. Mas dá pra dizer que tem 32 tipos de moedas disponíveis. 5.6. Temperatura Agora vamos converter entre unidades de temperatura? O Alfred, através deste conversor, tem as unidades Celsius, Fahrenheit e Kelvin. Seu uso também é fácil, fácil. Veja logo abaixo. 1. public void converter() { 2. Float temperatura = Temperatura.converter(1, Unidade.CELSIUS, Unidade.FAHRENHEIT); 3. } Exemplo de conversão de Celsius para Fahrenheit. 5.7. Tempo Vamos converter horas em milésimos de segundo? Basta usar o conversor de Tempo do Alfred. As unidades você já deve conhecer, certo? • Hora • Minuto • Segundo Biblioteca Alfred http://www.alfredlibrary.org/ Página 13 Tutorial do Alfred • Décimo de Segundo • Centésimo de Segundo • Milésimo de Segundo Sem muita conversa, vamos logo ao exemplo. 1. public void converter() { 2. Double tempo = Tempo.converter(1, Tempo.Unidade.HORA, Tempo.Unidade.MINUTO); 3. } Exemplo de conversão de Horas para Minutos. 5.8. Volume Chegou a hora de converter entre unidades de Volume. E quais estão disponíveis? Várias, além das tradicionais, como quilolitro, hectolitro, decalitro, litro, decilitro, centilitro, mililitro, microlitro e nanolitro. Tem também algumas pouco convencionais aqui no Brasil: Onça, Galão e Barril. 1. public void converter() { 2. Double volume = Volume.converter(1, Volume.Unidade.QUILOLITRO, Volume.Unidade.HECTOLITRO); 3. } Exemplo de conversão de Quilolitro para Hectolitro. Biblioteca Alfred http://www.alfredlibrary.org/ Página 14 Tutorial do Alfred 6. Formatadores Vimos os conversores e agora partiremos para os formatadores. Formatar textos é uma coisa bastante comum em quase todas as aplicações. Quase sempre aparece um CPF para colocar ou tirar os pontos. Ou então, um telefone. Também um CEP. O Alfred já conta com algumas formatações mais comuns: CEP, CPF, CNPJ, Data, Moeda e Telefone. Vamos ver cada um destes nos próximos tópicos. O pacote onde se encontram os formatadores é o org.alfredlibrary.formatadores. 6.1. CEP Vamos formatar seu CEP? Digamos que o usuário digitou 40290280 mas você quer guardar no banco de dados no formato 40.290-280. Ou também 40290-280. O Alfred faz estas duas formatações para você. 1. public void formatar() { 2. // Seu CEP no formato 40290-280. 3. String cep = CEP.formatar("40290280", true); 4. } Exemplo de formatação de CEP simples. Observou o parâmetro true no exemplo acima? Ele apenas diz que é para usar a formatação simplificada, ou seja, aquela que não usa o ponto. 1. public void formatar() { 2. // Seu CEP no formato 40.290-280. 3. String cep = CEP.formatar("40290280", false); 4. } Exemplo de formatação de CEP normal. 6.2. CNPJ Agora você precisa formatar um CNPJ. Não se desespere com tantos substring, deixe o Alfred resolver este problema. Um CNPJ do tipo 151939223000184 será formatado para 15.139.223/0001-84. Veja como usar no exemplo abaixo. 1. public void formatar() { 2. // CNPJ formatado como 15.139.223/0001-84 3. String cnpj = CNPJ.formatar("15139223000184"); 4. } Exemplo de formatação de CNPJ. 6.3. CPF Opa. Na verdade, você quer é formatar um CPF! Neste caso, o Alfred também ajuda. Passe um CPF no formato 11111111111 que o Alfred transforma em 111.111.111-11. Exemplo logo abaixo. Biblioteca Alfred http://www.alfredlibrary.org/ Página 15 Tutorial do Alfred 1. public void formatar() { 2. // CPF formatado como 111.111.111-11 3. String cpf = CPF.formatar("11111111111"); 4. } Exemplo de formatação de CPF. 6.4. Data E formatação de data em Java? Um pouco chato, não acha? Mas o Alfred também dá uma forcinha aqui. Você pode até formatar por extenso! Uma data 12/05/2010 pode se transformar em “12 de maio de 2010”. 1. public void formatar() { 2. Calendar calendar = Calendar.getInstance(); 3. calendar.set(Calendar.DAY_OF_MONTH, 12); 4. calendar.set(Calendar.MONTH, 05); 5. calendar.set(Calendar.YEAR, 2010); 6. String data = Data.formatarPorExtenso(calendar.getTime()); 7. Assert.assertEquals("12 DE JUNHO DE 2010", data.toUpperCase()); 8. } Exemplo de formatação de Data por extenso. Vejamos, agora, uma formatação mais comum, na qual um padrão para formatação da data é passado como parâmetro. Observe que este padrão é o mesmo que você usaria no SimpleDateFormat. 1. public void formatar() { 2. String data = Data.formatar(new Date(), "dd/MM/yyyy"); 3. } Exemplo de formatação de Data. 6.5. Inscrição Estadual Inscrição Estadual é uma coisa chata. Cada estado tem seu formato, já percebeu? E você sabe todos os formatos? Não precisa! O Alfred já lhe dá isso de presente. 1. public void converter() { 2. InscricaoEstadual.formatar(PadraoInscricaoEstadual.ACRE, "014074230") 3. } Formatador de Inscrição Estadual. 6.6. Moeda Opa. Você já falou em moeda antes. Sim, falei. Mas era o conversor de moedas. Agora você tem um formatador! Podemos formatar moedas de duas formas com este utilitário. Primeiro podemos formatar o valor para extenso. Você passa o valor 10.00 e tem como retorno uma String “10 reais”. Entendeu? Veja o exemplo abaixo. 1. public void formatar() { Biblioteca Alfred http://www.alfredlibrary.org/ Página 16 Tutorial do Alfred 2. // O resultado será “vinte e um reais e dez centavos”. 3. String moeda = Moeda.formatar(21.10); 4. } Exemplo de formatação de moeda para extenso. A outra opção é formatar a moeda seguindo um determinado padrão. Então, se você passa 10.00, terá como retorno “R$ 10,00”, caso você tenha pedido a formatação da moeda brasileira. Veja um exemplo abaixo. 1. public void formatar() { 2. String moeda = Moeda.formatar(21.10, MoedaLocal.BRASIL); 3. } Exemplo de formatação de moeda. 6.7. PIS/PASEP Vamos agora formatar um PIS/PASEP? Não sabe o que é? Claro que sabe. Sempre que você arranja um emprego pela CLT, precisa informar isto e estes dados normalmente estão na sua carteira de trabalho. 1. public void formatar() { 2. String moeda = PISPASEP.formatar("11111111114"); 3. } Exemplo de formatação de PIS/PASEP. 6.8. Telefone Você também pode formatar telefones. E de três formas diferentes. No primeiro caso, você pode formatar o telefone 11112222 para 1111-2222. E se tiver o DDD? O telefone 7111112222 vira (71) 1111-2222. E se tiver o código do país? Fica ainda mais bonito, veja só: de 557111112222, você tem +55 (71) 1111-2222. 1. public void formatar() { 2. // O resultado será 3011-5761. 3. String telefone = Telefone.formatar("30115761"); 4. // O resultado será (71) 3011-5761. 5. telefone = Telefone.formatar("7130115761"); 6. // O resultado será +55 (71) 3011-5761. 7. telefone = Telefone.formatar("557130115761"); 8. } Exemplos de formatação de telefone. Biblioteca Alfred http://www.alfredlibrary.org/ Página 17 Tutorial do Alfred 7. Inutilitários O Alfred também é um pouco de “descultura”. Vamos perturbar um pouco? Então, use alguns dos inutilitários do Alfred. Servem para muito pouco, mas são engraçados e interessantes. Por enquanto, temos apenas o MiGuXeItOr, idealizado pelo Aurélio Verde. Você quer “traduzir” um texto em português para o idioma Miguxo? Ah, não sabe o que é isso? Sorte sua! Mas você provavelmente já conversou com um miguxo na internet, seja por MSN, Google Talk, Twitter ou Fóruns. Os miguxos estão por todas as partes. Vai me dizer que nunca viu um texto escrito assim: U ALFred Eh 1 BiblIotEcaH D+...... mTU Bom Msm...... Caso já tenha visto, então você sabe o que é um texto miguxo. Então, vamos lá. Que tal miguxar um texto, só de sacanagem? :) Use igual ao código abaixo. Você tem três níveis de miguxês: • Arcaico (da época do ICQ) – Nível 1; • Moderno (do MSN) – Nível 2; • Neo-Miguxês (Orkut e coisas afins) – Nível 3. 1. public void miguxar() { 2. String miguxada = Miguxeitor.miguxar("você é muito lindo, menino! Que fofura! Estou meio triste. Mas estou melhor!", 3); 3. } Miguxando um texto. E atenção, lembre-se: todos os créditos são para o Aurélio Verde. Acesse o sítio dele ou vá direto para o Miguxeitor versão original: http://www.aurelio.net/ http://www.coisinha.com.br/miguxeitor/ Biblioteca Alfred http://www.alfredlibrary.org/ Página 18 Tutorial do Alfred 8. Utilitários Chegamos a uma das melhores partes do Alfred, em minha humilde opinião. Até mesmo porque formatadores e conversores tem muitos por aí, mas os utilitários que o Alfred disponibiliza são poucos que conseguem ter! Vamos ver um a um. 8.1. Bancos Você conhece todos os bancos que atuam no Brasil? Não? Bom, eu também não sei. Eu prefiro buscar isto na internet, como no sítio da Febraban. E se sua aplicação precisasse obter esta lista de bancos para exibir em uma lista? Você pode usar o Alfred para isto. Disponibilizamos um utilitário que usa o sítio da Febraban para obter esta lista de bancos. A partir daí, você pode gravar em um banco de dados, por exemplo. Lembre-se, a lista é obtida do sítio da Febraban, por isto, você necessitará de uma conexão com a internet. 1. public void obterBancos() { 2. Collection<Banco> bancos = Febraban.obterListaBancos(Tipo.TODOS, Origem.TODOS, Naturalidade.TODOS); 3. } Obter lista de todos os bancos cadastrados na Febraban. Não quer todos os bancos? Então, você também pode filtrar. Este utilitário recebe três parâmetros: Tipo, Origem e Naturalidade. O Tipo pode ser Todos, Múltiplo, Comercial, Caixa, Investimento, Leasing e Financeira. A origem pode ser Todos, Privado e Público. Finalizando, a Naturalidade pode ser Todos, Nacional, Nacional com Participação Estrangeira, Nacional com Controle Estrangeiro, Estrangeiro, Estadual e Federal. Você terá sempre uma coleção de objetos do tipo Banco. E o que este objeto tem? Vejamos: 1. Código do Banco; 2. Nome do Banco; 3. Sítio na internet do Banco; 4. Quantidade de Agências. Biblioteca Alfred http://www.alfredlibrary.org/ Página 19 Tutorial do Alfred 8.2. Beans Com este utilitário você pode manipular objetos que adotam o padrão JavaBeans. Por exemplo, e se você quiser obter todos os atributos do objeto que estão expostos através de métodos get e colocar em um Map? Faça igual ao exemplo abaixo. 1. public void tratarBeans() { 2. Map<String,Object> retorno = Propriedades.transformarEmMap(umObjetoQualquer, ClasseTeste.class); 3. } Obter um Map com os valores dos atributos de um objeto. O que tem no objeto ClasseTeste? É simplesmente um JavaBean. 01. public class ClasseTeste { 02. private String campo1; 03. private String campo2; 04. 05. public ClasseTeste(String c1, String c2) { 06. this.campo1 = c1; 07. this.campo2 = c2; 08. } 09. 10. public String getCampo1() { 11. return campo1; 12. } 13. 14. public void setCampo1(String campo1) { 15. this.campo1 = campo1; 16. } 17. 18. public String getCampo2() { 19. return campo2; 20. } 21. 22. public void setCampo2(String campo2) { 23. this.campo2 = campo2; 24. } 25. 26. } Objeto ClasseTeste. Ah, você quer o contrário. Tem um Map e gostaria de copiar os valores dele para um objeto. Por exemplo, você tem um Map com uma chave chamada “nome” e seu objeto tem um método setNome(String nome). Usando o método conforme o exemplo abaixo, você copia o valor contido nesta chave, para o objeto. 1. public void tratarBeans() { 2. Map<String,Object> map = new HashMap<String, Object>(); 3. map.put("campo1","A1"); 4. map.put("campo2","A2"); 5. ClasseTeste c = new ClasseTeste("a","a"); 6. Propriedades.copiarPropriedades(map, c); 7. } Copiar os valores de um Map para um Objeto. Quer uma maneira fácil de obter uma propriedade de um objeto mas não sabe o tipo do objeto? Então, use o Alfred igual ao exemplo abaixo. Biblioteca Alfred http://www.alfredlibrary.org/ Página 20 Tutorial do Alfred 1. public void tratarBeans() { 2. String valor = Propriedades.obterValorPropriedade("campo1", umObjetoQualquer); 3. } Obter o valor de uma propriedade do objeto. 8.3. Bulário E aí? Você é hipocondríaco? Gosta de remédios? O Alfred vai ajudar você a piorar! Quer fazer uma aplicação que contém informações da bula de um remédio? Então, use o utilitário de Bulário. O Alfred disponibiliza um utilitário que obtém a bula de um remédio através do sítio http://www.bulario.net/. Você terá uma String com todo o texto da bula. Use conforme o exemplo abaixo. 1. public void obterBula() { 2. String dorflex = BularioOnline.obter("dorflex"); 3. } Obter a bula do remédio Dorflex. 8.4. Clima Está precisando exibir informações do clima de sua região em seu sistema? Você pode obter isto através de diversos sítios na internet. Tem o Weather e o Climatempo, por exemplo. O Alfred dá uma forcinha pra você. Disponibilizamos o utilitário que obtém os dados do sítio da Climatempo. Basta usar igual ao exemplo abaixo. 1. public void obterClima() { 2. Collection<Clima> climas = Climatempo.obterClima("800"); 3. } Obter o Clima de uma Cidade. Você terá uma coleção contendo o clima dos cinco próximos dias para a cidade de código 800. E que código é esse? A parte chata é que você terá que obter esta informação ainda no sítio da Climatempo. 8.5. Coleções Eis um utilitário para lhe ajudar com coleções. Como assim? Bom, vamos usar exemplos. Imagine que você queira remover um item de uma coleção. Você normalmente usaria uma estrutura for para percorrer toda a coleção e um if para identificar o item que deseja remover, chamando o método remove da coleção. Certo? Um pouco chato, não? Biblioteca Alfred http://www.alfredlibrary.org/ Página 21 Tutorial do Alfred 1. public void remover() { 2. ClasseBean a = new ClasseBean("A"); 3. ClasseBean b = new ClasseBean("B"); 4. ClasseBean c = new ClasseBean("C"); 5. Collection<ClasseBean> colecao = new ArrayList<ClasseBean>(); 6. colecao.add(a); colecao.add(b); colecao.add(c); 7. colecao = Colecoes.removerItem(colecao, "campo", "A"); 8. } Remover um Item de um coleção. O Alfred está aí para tentar dar uma aliviada em tanto código. Você pode passar para o utilitário de coleções, chamando o método removerItem, três parâmetros. O primeiro é a coleção que contém os itens. O segundo, uma String com o nome do atributo do objeto que você deseja comparar. O último parâmetro é o objeto em si. Veja o exemplo abaixo. Ele vai remover da coleção o item que tiver o método getNome retornando Marlon. Entendeu? Você também pode ordenar listas com o Alfred. 1. public void ordenar() { 2. ClasseBean a = new ClasseBean("A"); 3. ClasseBean b = new ClasseBean("B"); 4. ClasseBean c = new ClasseBean("C"); 5. List<ClasseBean> colecao = new ArrayList<ClasseBean>(); 6. colecao.add(c); colecao.add(a); colecao.add(b); 7. colecao = Colecoes.ordenar(colecao, "campo"); 8. } Ordenar Listas. 8.6. Correios O utilitário de Correios está aí para lhe ajudar com informações sobre Sedex, Sedex Hoje, Sedex 10, PAC, CEP e Rastreamento de Encomendas. Quer saber o prazo e o valor de entrega de uma encomenda de um CEP para outro através do Sedex? Então, veja o exemplo abaixo. 1. public void obterSedex() { 2. // Primeiro parâmetro é o CEP de Origem, o segundo o CEP de Destino. O terceiro é o peso da encomenda. 3. String[] r = Sedex.obterPrecoPrazoEntrega("40290280", "40290280", 1); 4. } Obter valor e prazo de entrega por Sedex. E se for Sedex 10 ou Sedex Hoje? Muda muito pouco, como você pode ver logo abaixo. 1. public void obterSedex10Hoje() { 2. // Primeiro parâmetro é o CEP de Origem, o segundo o CEP de Destino. O terceiro é o peso da encomenda. 3. String[] r = Sedex10.obterPrecoPrazoEntrega("40290280", "40290280", 1); 4. r = SedexHoje.obterPrecoPrazoEntrega("40290280", "40290280", 1); 5. } Obter valor e prazo de entrega por Sedex 10. E se for PAC? Bom, aí muda um pouco, pois PAC tem suas particularidades. Mas não é nada demais. O primeiro parâmetro é o CEP de origem. O segundo, o CEP de destino. O terceiro parâmetro diz respeito ao peso da encomenda. O quarto é a largura do pacote, o quinto a altura e o sexo parâmetro o comprimento do pacote/caixa. Biblioteca Alfred http://www.alfredlibrary.org/ Página 22 Tutorial do Alfred 1. public void obterPAC() { 2. String[] r = PAC. obterPrecoPrazoEntregaParaCaixaPacote("40290280", "40290280", 1, 12, 6, 16); 3. } Obter valor e prazo de entrega por PAC. Tem um CEP e quer saber o endereço? Isto é comum em muitas aplicações e o Alfred pode lhe ajudar. Temos duas formas de obter estes dados. Um pelo sítio do CEP Livre. Contudo, as informações deles não estão 100% atualizadas. Outra forma, é através do sítio dos próprios Correios. Neste, você tem a informação certa, atualizadíssima. O mais importante é que, mais uma vez, você tem que lembrar de executar o Alfred em uma máquina com acesso à internet. 1. public void obterEndereco() { 2. // Primeiro pelo CEP Livre. 3. String[] endereco = CEP.consultarEnderecoCEPLivre("40290280"); 4. } Obter um Endereço pelo CEP Livre. Pelo CEP Livre você terá um Array de Strings contendo seis posições. As informações de cada posição, em sequência, são: Tipo de Logradouro, Logradouro, Bairro, Cidade, Sigla do Estado, Estado. 1. public void obterEndereco() { 2. // Agora pelos Correios. 3. String[] endereco = CEP.consultarEnderecoCorreios("40290280"); 4. } Obter um Endereço pelos Correios. Pelos Correios você terá um Array de Strings com quatro posições. A primeira é o próprio CEP, a segunda é o tipo de logradouro concatenado ao logradouro, a terceira posição é o bairro e quarta a cidade concatenada ao estado. 1. public void obterRastreamento() { 2. Collection<RegistroRastreamento> colRegistoRastreamento = Rastreamento.rastrear("RJ377032643BR"); 3. } Obter os Dados de Rastreamento. No exemplo acima, você está fazendo o tracking, ou como chamamos aqui, o rastreamento de um objeto enviado pelos Correios. Você terá uma coleção de objetos RegistroRastreamento, que lhe fornece as informações Data e Hora da Situação, Local, Ação e Detalhe. 8.7. CPF e CNPJ CPF e CNPJ, além de terem formatadores e validadores, também tem utilitários no Alfred. E qual a diferença? Pouca, mas sutil. Em ambos os casos, você terá um gerador de CPF ou CNPJ e também um gerador de dígito verificador. Veja como usar. 1. public void testar() { 2. // Vamos gerar um CPF aleatório e válido? 3. String cpf = CPF.gerar(); 4. // Vamos obter um dígito verificador para um CPF? Para CNPJ é igual, basta usar o utilitário CNPJ no lugar! 5. String digito = CPF.gerarDigitoVerificador("111111111"); Biblioteca Alfred http://www.alfredlibrary.org/ Página 23 Tutorial do Alfred 6. } Dígito Verificador e Geração de CPF e CNPJ. 8.8. CID Você sabe o que é CID? Significa Classificação Internacional de Doenças. Muitas empresas pedem o número do CID anotado no atestado médico. E se você precisar saber qual a doença a partir de um código CID que lhe foi passado? O Alfred pode ajudar. Mas, tem um pequeeeeno detalhe. O arquivo que contém os códigos é simplesmente enorme e ficaria inviável de baixá-lo pela internet toda vez que você fizesse uma pesquisa. Então, você terá que obter o arquivo e passá-lo como parâmetro para que o Alfred o consulte! Veja um exemplo: 1. public void testar() { 5. Collection<Map<String,Object>> lista = CID10.obter(new File("cid.xml"), "C18"); 6. } Obter dados de uma doença pelo seu CID. Você terá como retorno uma coleção de Map<String,Object>. Cada Map terá uma String que representa o nome do campo e um Object que representa o valor. No exemplo acima, você terá um Map que contém “nome” = “Neoplasia maligna do cólon”. Quer saber todos os valores possíveis? Veja essa página: http://www.datasus.gov.br/cid10/v2008/cid10.htm 8.9. Data Usando apenas Java não é difícil fazer cálculos com data. Mas, ainda assim, você precisará de um pouco de código para atingir seu objetivo. O Alfred pode dar uma facilitada nisto, não acha? Através do utilitário de CalculoData você pode somar ou subtrair dias de uma data. Somar/subtrair meses ou anos também. E que tal calcular a diferença em dias entre duas datas? E isto tudo usando apenas uma linha de código. Bem mais fácil. 01. public void calcular() { 02. // Vamos somar alguns dias a uma data? 03. Date data = new Date(); 04. Date data2 = new Date(); 05. Date somado1 = CalculoData.somarDias(data, 10); 06. Date subtraido1 = CalculoData.subtrairDias(data, 10); 07. Date somado2 = CalculoData.somarAnos(data, 1); 08. Date subtraido2 = CalculoData.subtrairAnos(data, 1); 09. 10. // Vamos calcular a quantidade de dias que existe entre duas datas? 11. int valor = CalculoData.calcularDiferencaDias(data, data2); 12. } Cálculos com Data. Vamos a uns exemplos um pouquinho mais difíceis. Suponha que você tem dois períodos e gostaria de saber se um está compreendido em outro. Tipo assim, você vai viajar de 12 de agosto a 12 de setembro. Aí marcam duas reuniões no dia 9 de setembro e 10 de setembro. Você quer saber se Biblioteca Alfred http://www.alfredlibrary.org/ Página 24 Tutorial do Alfred poderá estar presente para as reuniões. Fácil, faz assim: 01. public void calcular() { 02. Date data1 = Data.formatar("12/08/2010", "dd/MM/yyyy"); 03. Date data2 = Data.formatar("12/09/2010", "dd/MM/yyyy"); 04. Date data3 = Data.formatar("09/09/2010", "dd/MM/yyyy"); 05. Date data4 = Data.formatar("10/09/2010", "dd/MM/yyyy"); 06. 07. Date[] periodo1 = {data1, data2}; 08. Date[] periodo2 = {data3, data4}; 09. 10. CalculoData.calcularCompreensao(periodo1, periodo2); 11. } Verificar se um período está compreendido em outro. Neste exemplo, se o retorno for -1, então periodo1 contém o período2. Caso seja 1, o período2 contém o período 1. Vamos a um exemplo mais difícil. Você agora quer saber a interseção entre dois períodos! Se você passa um período de 12 de agosto a 12 de setembro como primeiro parâmetro e como segundo parâmetro passa o período de 9 de setembro a 9 de outubro, você terá como retorno o período de 9 de setembro a 12 de setembro. Entendeu? Este é o período que faz parte dos dois passados como parâmetro! 01. public void calcular() { 02. Date data1 = Data.formatar("12/08/2010", "dd/MM/yyyy"); 03. Date data2 = Data.formatar("12/09/2010", "dd/MM/yyyy"); 04. Date data3 = Data.formatar("09/09/2010", "dd/MM/yyyy"); 05. Date data4 = Data.formatar("09/10/2010", "dd/MM/yyyy"); 06. 07. Date[] periodo1 = {data1, data2}; 08. Date[] periodo2 = {data3, data4}; 09. 10. CalculoData.calcularIntersecao(periodo1, periodo2); 11. } Verificar a interseção entre dois períodos. 8.10. Dicionários Quer ter o significado de palavras em seu sistema? Você pode usar o utilitário Michaelis para isto. Como o nome já diz, ele usará o sítio da Michaelis para obter este significado. Lembre-se! Internet é necessária mais uma vez. 1. public void obter() { 2. // O significado da palavra bonito! 3. String resultado = Michaelis.obterSignificado("bonito", false); 4. } Utilitário de Dicionários. O parâmetro false indica se você quer o resultado vindo com a formatação HTML do próprio sítio da Michaelis, ou se prefere que venha apenas o texto. Biblioteca Alfred http://www.alfredlibrary.org/ Página 25 Tutorial do Alfred 8.11. Dígito Verificador Dígitos verificadores são usados em muitos lugares. Sua conta corrente no banco tem um dígito verificador. Seu CPF também tem. Um CNPJ tem. E você sabia que existem regras de formação destes dígitos? Os mais comuns são o Módulo 10 e o Módulo 11. 1. public void obter() { 2. String resultado = Modulo10.obterDV("1111111"); 3. String resultado = Modulo11.obterDV("111111"); 4. } Obter o dígito verificador. Você tem o utilitário Modulo10 e Modulo11. Ambos podem se comportar de forma diferente a depender dos parâmetros. O exemplo acima é o modo mais fácil. Mas você pode querer complicar um pouco mais. Por exemplo, no Banco do Brasil, tem agências que são do tipo 4881-X. Veja, o dígito verificar virou um “X”. É porque quando o valor do dígito é “10”, então é transformado para X. Existem outras opções e para descobri-las, sugerimos ler nosso JavaDoc! 1. public void obter() { 2. String resultado = Modulo10.obterDV("1111111", true); 3. String resultado = Modulo11.obterDV("111111"); 4. } Obter o dígito verificador trocando 10 por “X”. 8.12. Física Gosta de Física? Sabe exatamente todas aquelas fórmulas de cinemática? Não?! Nem eu! :P Mas resolvemos criar um utilitário de Física no Alfred. E o que ele tem? No momento, apenas um utilitário com cálculos comuns em Cinemática. O nosso objetivo é termos muitos outros utilitários em Física, mas eles vão surgir aos poucos. Aliás, quer ajudar a criá-los? Aceitamos ajuda! Vamos a alguns exemplos de utilização, pois são muitos cálculos que disponibilizamos e ficaria muito extenso colocar aqui. Ao invés disto, sugerimos fortemente que você acesse nosso JavaDoc para saber exatamente quais e como usar cada cálculo de Cinemática. Por exemplo, temos cálculos de Movimento Circular Uniforme, Movimento Circular Uniforme e Variado, Movimento Parabólico, Movimento Retílino Uniforme e Movimento Retilínio Uniforme e Variado. Muitos, não? Cada um citado acima refrere-se a um pacote. Por exemplo, para os cálculos de Movimento Circular Uniforme, temos um pacote org.alfredlibrary.utilitarios.fisica.cinematica.movimentocircularuniforme. E lá você terá as classes responsáveis pelos cálculos, como: AceleracaoCentripeta, Frequencia, Periodo, Raio, Velocidade Angular e VelocidadeEscalar. Cada classe contém métodos responsáveis em fazer o cálculo. Vamos a alguns exemplos. Biblioteca Alfred http://www.alfredlibrary.org/ Página 26 Tutorial do Alfred 1. public void obter() { 2. Double resultado = AceleracaoCentripeta.calcular(2, 5); 3. Double resultado = Periodo.calcular(2,5); 4. } Cálculos de Cinemática. No primeiro, calculamos a aceleração centrípeda. Passamos como primeiro valor o raio e no segundo valor, a velocidade escalar. No segundo exemplo calculamos o período, passando como parâmetros a velocidade escalar e o raio, respectivamente. 8.13. Horóscopos Ah, você é um cara supersticioso e gosta de ver seu horóscopo todas as manhãs. Está interessado, inclusive, em fazer uma aplicação que obtém seu horóscopo e mostra em seu blog. Mas, como fazer isso? O Alfred pode dar uma forcinha também. Disponibilizamos dois utilitários para isto. Um usa o sítio Estrela Guia para catar estas informações. O outro usa o Portal Terra. Vejam os exemplos. 1. public void obter() { 2. // Você é de Aquário? Então, veja seu signo assim! 3. String resultado = PortalTerra.obter(Signo.AQUARIO); 4. // Vamos ver o que o sítio Estrela Guia diz sobre seu signo também. 5. resultado = EstrelaGuia.obter(Signo.AQUARIO); 6. } Obter signos. 8.14. Idiomas E o que você acha de um utilitário para obter a tradução de palavras de um idioma para outro? Caso tenha gostado da ideia, saiba que o Alfred faz isto usando renomados sítios na internet. O primeiro é o Babelfish. O segundo o famoso Google Translate. O uso é bastante simples, nos dois casos. 1. public void obter() { 2. // Primeiro pelo Google Translate. 3. String resultado = GoogleTranslate.traduzir("o melhor", Idioma.PORTUGUESE, Idioma.ENGLISH); 4. // Agora pelo Babelfish. 5. resultado = Babelfish.traduzir(Babelfish.INGLES_PARA_PORTUGUES, "love"); 6. } Tradução usando Google Translate e Babelfish. Mas você não quer realmente saber a tradução, mas queria ouvir a pronúncia da palavra em inglês? Bom, então você está com sorte. O Alfred também tem este utilitário e se chama Pronuncia que obtém um arquivo no formato wave (.wav) através do sítio da Merrian Webster e disponibiliza para você fazer o que quiser com ele: guardar em disco, ouvir, guardar em banco de dados, etc. 1. public void obter() { 2. // Primeiro, vamos ouvir direto! 3. Pronuncia.ouvirPronuncia(Pronuncia.INGLES, "love"); 4. // Agora vamos obtê-la! 5. InputStream is = Pronuncia.obterPronuncia(Pronuncia.INGLES, "love"); 6. } Biblioteca Alfred http://www.alfredlibrary.org/ Página 27 Tutorial do Alfred Obter e ouvir a pronúncia de uma palavra em Inglês. Por enquanto, temos apenas as pronúncias de palavras em inglês! 8.15. Inscrição Estadual Vamos supor que você tem um número de inscrição estadual e queira saber se o dígito verificador dele está correto. Ou até mesmo gerar uma inscrição estadual aleatória! 1. public void obter() { 2. InscricaoEstadual.gerarDigitoVerificador(PadraoInscricaoEstadual.ACRE, "01407423"); 3. InscricaoEstadual.gerar(PadraoInscricaoEstadual.ACRE); 4. } Gerar Dígito verificador. 8.16. Loterias Ah, entendi. Você é um cara que acredita muito na sorte. Sempre faz seus jogos nas loterias da Caixa Econômica Federal. Está pensando, inclusive, em fazer um acompanhamento dos sorteios, com estatísticas de números sorteados e coisas do tipo, não é? Mas, e como obter estes números? Você pode ir no sítio da Caixa Econômica Federal e obter cada concurso. Ou fazer um aplicativo que lê os dados e interpreta pra você. Ou deixar que o Alfred faça isso para você. 01. public void obterLoterias() { 02. // Resultado do concurso número 1 da megasena. 03. String[] resultado = Loterias.obterResultadoMegaSena("1"); 04. 05. // Resultado do concurso número 1 da lotofácil. 06. resultado = Loterias.obterResultadoLotofacil("1"); 07. 08. // Resultado do concurso número 1 da dupla sena. 09. resultado = Loterias.obterResultadoDuplaSena("1"); 10. 11. // Resultado do concurso número 1 da lotomania. 12. resultado = Loterias.obterResultadoLotomania("1"); 13. 14. // Resultado do concurso número 1 da quina. 15. resultado = Loterias.obterResultadoQuina("1"); 16. } Obter resultado de loterias. Você tem disponível no Alfred um utilitário que lhe dará os números sorteados para o concurso que você quiser da Megasena, Lotofácil, Lotomania, Quina e Dupla Sena. 8.17. Matemática Você cursou Ciências da Computação? Então, certamente, teve uma matéria chamada Álgebra de Lenhar, ops, digo: Álgebra Linear. Lembra daqueles cálculos triloucos com Matrizes? Transposta, Matriz Identidade, Multiplicação de Matrizes, Determinantes... Biblioteca Alfred http://www.alfredlibrary.org/ Página 28 Tutorial do Alfred 01. public void estudar() { 02. // Quer a transposta? 03. Double[][] matriz = new Double[][] { {1d,1d}, {2d,2d}, {3d,3d} }; 04. Double[][] transposta = Matriz.transpor(matriz); 05. 06. // E o determinante? 07. Double d = Matriz.determinante(new Double[][] {{1d,1d,1d}, {0d,4d,3d}, {2d,5d,1d}}); 08. 09. // E subtrair? 10. Double[][] sub = Matriz.subtrair(new Double[][] {{1d,1d}, {1d,1d}}, new Double[][] {{1d,1d},{1d,1d}}); 11. } Utilitário de Matriz. Bom, o Alfred tenta facilitar um pouco sua vida caso necessite trabalhar com Matrizes. No utilitário de Matrizes já damos para você as seguintes opções: • Calcular o Determinante de uma Matriz; • Transposta de uma Matriz; • Somar e subtrair duas matrizes; • Multiplicar duas matrizes ou uma matriz por um número real; • Obter a oposta de uma Matriz; • Verificar se uma matriz passada por parâmetro é: ◦ Diagonal; ◦ Identidade; ◦ Igual a outra matriz; ◦ Quadrada; ◦ Simétrica. Também podemos fazer cálculos com Equações de Segundo Grau no Alfred. Elas são fáceis, é verdade. Mas podem ser mais fáceis ainda com o Alfred. Veja aí embaixo um exemplo. Lembre-se que nestes cálculos, é preciso verificar se a equação é realmente de segundo grau ou se tem raízes irracionais. E este utilitário já checa isto tudo pra você. 01. public void estudar() { Biblioteca Alfred http://www.alfredlibrary.org/ Página 29 Tutorial do Alfred 02. EquacaoSegundoGrau.resolverRacional (3, 4, 5); 03. } Cálculo de Equações de Segundo Grau. 8.18. Mídia Sabe o utilitário de Pronúncia, no pacote de Idiomas? Você obtém a pronúncia em um arquivo no formate wave e gostaria de executá-lo, para ouvir no seu próprio computador. E qual o código para fazer isto mesmo? Bom, o Alfred ajuda com o utilitário de Áudio, que lhe dá um único método chamado executar. 1. public void escutar() { 2. // Vamos escutar uma música? 3. String userDir = System.getProperty("user.dir"); 4. InputStream is = new FileInputStream(userDir + "/src/test/java/org/alfredlibrary/test/utilitarios/midia/love.wav"); 5. AudioInputStream ais = AudioSystem.getAudioInputStream(is); 6. Audio.executar(ais); 7. } Utilitário de Mídia. 8.19. Música Quer ter letras de músicas em sua aplicação? Ou apenas obtê-las para guardar em banco de dados? Então, use o Alfred para obter as letras de suas músicas favoritas através do sítio Vagalume. A utilização é bem simples. 1. public void obter() { 2. // Vamos obter a letra de uma música de Raulzito! 3. String letra = Letras.obter("Raul Seixas", "Ouro de Tolo"); 4. } Utilitário de Letras de Músicas. 8.20. Net Aqui temos um único aplicativo. Mas bem útil. Aliás, este utilitário é usado por quase todo o Alfred internamente. Estou falando o utilitário WorldWideWeb que disponibiliza métodos para você obter o conteúdo de sítios na internet. 1. public void obter() { 2. String conteudo = WorldWideWeb.obterConteudoSite("http://alfredlibrary.googlecode.com/", "UTF-8"); 3. } Obter conteúdo de sites pelo utilitário WorldWideWeb. Observe o segundo parâmetro, ele diz qual a codificação usada para obter o conteúdo do sítio. Isto é Biblioteca Alfred http://www.alfredlibrary.org/ Página 30 Tutorial do Alfred importante, principalmente para sítios que contém palavras acentuadas diretamente no código fonte. 8.21. PIS/PASEP Já aprendemos a formatar, mas e se quisermos gerar PIS/PASEP aleatoriamente? Ou então gerar o dígito verificador? Podemos fazer isto usando o utilitário de PIS/PASEP. 1. public void gerar() { 2. String moeda1 = PISPASEP.gerarDigitoVerificador("1111111111"); 3. String moeda2 = PISPASEP.gerar(); 4. } Exemplo do utilitário de PIS/PASEP. 8.22. Texto Você está precisando ajustar algumas coisas em um texto? Por exemplo, precisa capitalizar as iniciais do texto? Ou gostaria de saber quantas palavras o texto possui? Então, use o utilitário de Texto do Alfred. 1. public void mudar() { 2. String conteudo = Texto.capitalizarIniciais("marlon silva carvalho"); 3. } Capitalizar Iniciais de um Texto. O resultado da expressão acima será Marlon Silva Carvalho. Agora você quer tirar os caracteres acentuados de seu texto. Digamos que você não gosta de acentos no português! :) 1. public void mudar() { 2. String conteudo = Texto.trocarCaracteresAcentuados("eu não curto acentuação."); 3. } Utilitário de Texto. Tirar acentos. Como você pode esperar, o resultado será “eu nao curto acentuacao”. Mas você gosta de acentuação e só queria era tirar todas as letras e manter apenas os números de um texto. 1. public void mudar() { 2. String conteudo = Texto.manterNumeros("m1a2r3l4o5n6"); 3. } Manter apenas números no texto. Temos como resultado, então: “123456”. Caso você precisa incluir uma determinada quantidade de um caracter no início ou no final de uma String, então use o “completar”. 1. public void mudar() { 2. String conteudo = Texto.completar("poxa", 'a', 8, true); 3. } Biblioteca Alfred http://www.alfredlibrary.org/ Página 31 Tutorial do Alfred Acrescentar um caracter ao final do texto. O resultado da expressão acima é “poxaaaaa”. Quando informamos o número 8, queremos dizer que a String “poxa”, deve ser acrescentada do caracter 'a' até alcançar o tamanho 8. Agora, vamos supor que você odeia frases pontuadas. Estranho, mas possível. Então, vamos remover todos os pontos de uma determinada frase assim: 1. public void mudar() { 2. String conteudo = Texto.removerPontuacao("Uma frase! E tem pontos. E como, não é? Veja só: eles vão sumir."); 3. } Remover todas as pontuações de um texto. Sua frase vai ficar linda: “Uma frase E tem pontos E como não é Veja só eles vão sumir”. Você quer comprar dois textos para verem se são iguais? Ah! Aí não, o .equals() já faz isso, não é? É, nós sabemos. Mas vamos supor que você queira comparar seguindo algumas regras, como: ignorar maiúsculas e minúsculas, ignorar os espaços em branco, ignorar a acentuação e ignorar pontuação! 1. public void mudar() { 2. String conteudo = Texto.comparar("Texto1.Igual? Será? Nâo sei!","Texto1.Igual? Será? Nâo sei!", true, true, true, true); 3. } Comparar duas Strings. Vamos lá. O terceiro parâmetro vai dizer se é case sensitive, o quarto quer dizer se deve ignorar espaços, o quinto se ignora acentuação e o último, se ignora pontuação. No nosso exemplo, está ignorando tudo. 8.23. HTML Você tem um texto que contém tags HTML? Então, este utilitário é para você. Com ele você pode fazer algumas brincadeiras legais. Por exemplo, quer encontrar todos os links? 1. public void encontrar() { 2. String conteudo = HTML.acharLinks("<a href='http://www.alfredlibrary.org/'>www.alfredlibrary.org</a>"); 3. } Utilitário de HTML. Encontrar Links. E o resultado será um Array de Strings com uma posição, contendo o link http://www.alfredlibrary.org/. Observe, o padrão para encontrar links espera que tenha o http:// na frente. Agora que você obteve os links, quer é remover todas as tags do texto, mantendo apenas o texto. 1. public void remover() { Biblioteca Alfred http://www.alfredlibrary.org/ Página 32 Tutorial do Alfred 2. String conteudo = HTML.removerTags("<a href='http://www.alfredlibrary.org/'>www.alfredlibrary.org</a>"); 3. } Utilitário de HTML. Remover links. Agora teremos apenas uma String contendo o texto www.alfredlibrary.org. Temos outros métodos neste utilitário, dá uma olhadinha em nosso JavaDoc! 8.24. Trânsito Você conhece todas as infrações de trânsito que existem no Brasil? Não? Nem eu :). Mas se você tem intenção de criar uma aplicação baseada nestas informações? Então, o Alfred pode lhe ajudar bastante. Através do utilitário Infrações, você pode obter uma coleção de objetos Infração, que contém as seguintes informações: • Código da Infração; • Descrição; • Amparo Legal; • Quem é o infrator (Condutor, Dono do Veículo, etc); • Pontos descontados na carteira; • Valor da infração; • Gravidade da Infração. 1. public void obterInfracoes() { 2. Collection<Infracao> infracoes = Infracoes.obterInfracoes(); 3. } Obter lista de infrações. Biblioteca Alfred http://www.alfredlibrary.org/ Página 33 Tutorial do Alfred 9. Validadores O Alfred disponibiliza validadores que lhe auxiliam na validação simples de dados de entrada de seus usuários. Os validadores disponíveis são: CEP, CNPJ, CPF, E-mail e Números. A validação, em todos os casos, é bastante simples. Você encontra os validadores no pacote org.alfredlibrary.validadores. 9.1. CNPJ Quer saber se um CNPJ está correto? Também existe um validador para isto. Mas, atenção, ele vai apenas dizer se o CNPJ é válido, mas não se realmente existe uma empresa com este CNPJ. 1. public void validar() { 2. CNPJ.isValido("00000000191"); 3. } Validação de CNPJ. 9.2. CPF Seguindo na mesma linha do validador de CNPJ, temos o validador de CPF. O uso é similar. Veja abaixo. 1. public void validar() { 2. CPF.isValido("11111111111"); 3. } Validação de CPF. 9.3. Diversos Tá bom. Você não gostou dos validadores que aí estão e gostaria de validar só usando sua expressão regular. Ainda assim podemos dar uma forcinha. Você pode passar sua String contendo sua expressão regular, ou usar algumas já fornecidas. 1. public void validar() { 2. Diversos.isValido("12/12/2010", Diversos.DATASIMPLES); 3. Diversos.isValido("2", Diversos.DECIMAL); 4. Diversos.isValido("imagem.jpg", Diversos.IMAGEM); 5. Diversos.isValido("10:12", Diversos.HORA); 6. Diversos.isValido("40.290-280", "\d{2}\.\d{3}-\d{3}"); 7. } Validação usando Expressões Regulares. 9.4. Inscrição Estadual Agora vamos validar uma inscrição estadual. Mas, lembre-se, cada estado tem seu formato específico Biblioteca Alfred http://www.alfredlibrary.org/ Página 34 Tutorial do Alfred de inscrição estadual. Mas o Alfred facilita pra você! 1. public void validar() { 2. InscricaoEstadual.isValido(PadraoInscricaoEstadual.ACRE, "01.40.7423-0") 3. } Validar inscrição estadual. 9.5. E-mail O usuário digitou um e-mail e você quer saber se pelo menos o e-mail está formatado corretamente? Não dá para dizer que o e-mail existe de fato, mas já dá uma força saber que é válido! 1. public void validar() { 2. Email.isValido("[email protected]"); 3. } Validação de E-mail. 9.6. Números Aqui temos várias validações de números. Podemos verificar se um número é, de fato, um Integer, Long, Double, Float ou Short. Vejamos um exemplo. 1. public void validar() { 2. Numero.isShort("2"); 3. Numero.isDouble("2"); 4. Numero.isFloat("2"); 5. Numero.isInteger("2"); 6. Numero.isLong("2"); 7. } Validação de Números. 9.7. PIS/PASEP Ok! Já formatamos e já geramos PIS/PASEP. Só faltou agora validar, certo? E, obviamente, o Alfred também ajuda aqui! 1. public void validar() { 2. PISPASEP.isValido("11111111114"); 3. } Validar PIS/PASEP. Biblioteca Alfred http://www.alfredlibrary.org/ Página 35