From 7789cbfa4f780c388779411f5e9a944984a36ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abra=C3=A3o=20Francisco=20da=20Silva?= Date: Tue, 6 Mar 2018 23:28:47 -0300 Subject: [PATCH 1/6] Update PDFConverter.java refector de da classe gera pdf --- PDFConverter.java | 51 ++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/PDFConverter.java b/PDFConverter.java index c7fb195..152fefe 100644 --- a/PDFConverter.java +++ b/PDFConverter.java @@ -1,10 +1,17 @@ -public class ConversorPDF { +package main.java; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.Objects; + +public class PDFConverter{ + - // A aplicação foi projetada para tratar arquivos WORD, temos que cuidar para que - // alterações não mudem o comportamento, para que não exista reflexo para clientes - // legados public String tipoDocumento = "WORD"; + + /** * Esse método recebe o como entrada o arquivo que vai ser convertido * para PDF @@ -13,22 +20,26 @@ public class ConversorPDF { * @return */ public byte[] converteParaPDF(byte[] bytesArquivo){ - if(tipoDocumento.equals("WORD")) { - InputStream entrada = new ByteArrayInputStream(bytesArquivo); - com.aspose.words.Document documentoWord = new com.aspose.words.Document(entrada); - ByteArrayOutputStream documentoPDF = new ByteArrayOutputStream(); - documentoWord.save(documentoPDF, SaveFormat.PDF); - - return documentoPDF.toByteArray(); - } else { - InputStream entrada = new ByteArrayInputStream(bytesArquivo); - Workbook workbook = new Workbook(entrada); - PdfSaveOptions opcaoSalvar = new PdfSaveOptions(); - opcaoSalvar.setCompliance(PdfCompliance.PDF_A_1_B); - ByteArrayOutputStream documentoPDF = new ByteArrayOutputStream(); - workbook.save(documentoPDF, opcaoSalvar); - - return documentoPDF.toByteArray(); + + if(Objects.isNull(bytesArquivo)){ + + throw new IllegalArgumentException("Arquivo para conversao null"); } + + InputStream entrada = new ByteArrayInputStream(bytesArquivo); + EnumTipoArquivo arquivo = EnumTipoArquivo.seachTipoArquivo(tipoDocumento); + + if(Objects.isNull(arquivo)){ + + throw new IllegalArgumentException("tipo de arquivo não encontrado"); + } + + + ByteArrayOutputStream byteArrayOutputStream = arquivo.convertParaPDf(entrada); + return byteArrayOutputStream.toByteArray(); } + + + + } From 3e2f3b10e5643359083ef62ca6fe23e3051500af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abra=C3=A3o=20Francisco=20da=20Silva?= Date: Tue, 6 Mar 2018 23:31:35 -0300 Subject: [PATCH 2/6] Add files via upload criando interface e enum. --- Convert.java | 9 +++++++++ EnumTipoArquivo.java | 46 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 Convert.java create mode 100644 EnumTipoArquivo.java diff --git a/Convert.java b/Convert.java new file mode 100644 index 0000000..e4ae8f6 --- /dev/null +++ b/Convert.java @@ -0,0 +1,9 @@ +package main.java; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +public interface Convert { + + ByteArrayOutputStream convertParaPDf (InputStream entrada ); +} diff --git a/EnumTipoArquivo.java b/EnumTipoArquivo.java new file mode 100644 index 0000000..18c9d2d --- /dev/null +++ b/EnumTipoArquivo.java @@ -0,0 +1,46 @@ +package main.java; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.stream.Stream; + +public enum EnumTipoArquivo implements Convert { + + + + WORD() { + + @Override + + public ByteArrayOutputStream convertParaPDf(InputStream entrada ) { + //com.aspose.words.Document documentoWord = new com.aspose.words.Document(entrada); + ByteArrayOutputStream documentoPDF = new ByteArrayOutputStream(); + // documentoWord.save(documentoPDF, SaveFormat.PDF); + return documentoPDF; + } + }, + + EXCEL() { + @Override + public ByteArrayOutputStream convertParaPDf(InputStream entrada ) { + + ByteArrayOutputStream documentoPDF = new ByteArrayOutputStream(); + /* Workbook workbook = new Workbook(entrada); + PdfSaveOptions opcaoSalvar = new PdfSaveOptions(); + opcaoSalvar.setCompliance(PdfCompliance.PDF_A_1_B); + ByteArrayOutputStream documentoPDF = new ByteArrayOutputStream(); + workbook.save(documentoPDF, opcaoSalvar);*/ + return documentoPDF; + } + }; + + + + public static EnumTipoArquivo seachTipoArquivo(String tipoArquivo){ + EnumTipoArquivo[] values = EnumTipoArquivo.values(); + return Stream.of(values).filter(v->v.name().equals(tipoArquivo)).findFirst().orElse(null); + } + + + +} \ No newline at end of file From 94ecee282818abe90d50d28da9e7a207c80d9712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abra=C3=A3o=20Francisco=20da=20Silva?= Date: Tue, 6 Mar 2018 23:36:23 -0300 Subject: [PATCH 3/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit descrição --- README.md | 50 ++++++-------------------------------------------- 1 file changed, 6 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index bbe1173..25af81d 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,13 @@ -# quia-java -Temos uma classe que converte documentos do Word para PDFs. A tarefa é simples, receber o arquivo Word e retornar ele em um formato PDF - Essa aplicação utiliza uma biblioteca que converte documentos do Word em PDFs. A biblioteca *Aspose.words*. -O cliente pede para que seja adicionado a opção para converter o documentos Excel para PDF, e para isso adicionamos um condicional para efetuar essa transformação. Com isso temos a seguinte classe: -```java -public class ConversorPDF { - -    // A aplicação foi projetada para tratar arquivos WORD, alter o código vai modificar -    // o comportamento para os clientes antigos, é necessário garantir a compatibilidade -    // com clientes antigos nas novas alterações -    public String tipoDocumento = "WORD"; - - /** - * Esse método recebe como entrada o arquivo que vai ser convertido - * para PDF - * - * @param bytesArquivo - * @return - */ - public byte[] converteParaPDF(byte[] bytesArquivo){ - if(tipoDocumento.equals("WORD")) { - InputStream entrada = new ByteArrayInputStream(bytesArquivo); - com.aspose.words.Document documentoWord = new com.aspose.words.Document(entrada); - ByteArrayOutputStream documentoPDF = new ByteArrayOutputStream(); - documentoWord.save(documentoPDF, SaveFormat.PDF); - - return documentoPDF.toByteArray(); - } else { - InputStream entrada = new ByteArrayInputStream(bytesArquivo); - Workbook workbook = new Workbook(entrada); - PdfSaveOptions opcaoSalvar = new PdfSaveOptions(); - opcaoSalvar.setCompliance(PdfCompliance.PDF_A_1_B); - ByteArrayOutputStream documentoPDF = new ByteArrayOutputStream(); - workbook.save(documentoPDF, opcaoSalvar); - - return documentoPDF.toByteArray(); - } - } -} -``` -[PDFConverter](https://github.com/certsys/quia-java/blob/master/PDFConverter.java) +- **Quais são os problemas que você consegue enxergar aqui?** +Tem atributo de classe publico. +O metodo de conversão vai crescer muito a cada novo tipo d arquivo. -Este código funcionará perfeitamente para o novo cliente (e ainda funcionará conforme o esperado para os clientes existentes), mas alguns problemas de design de software estão começando a aparecer no código. Isso significa que não estamos fazendo isso da maneira perfeita, e não seremos capazes de modificar nossa classe facilmente quando um novo tipo de documento for solicitado. -- **Quais são os problemas que você consegue enxergar aqui?** - **Qual refatoração você propõe?** -Por favor, envie um pull request com as alterações que você recomendaria aqui. Tente gastar 30 minutos no máximo para todo o trabalho. Se você precisar de mais tempo, está fazendo algo errado. +Criar um enum com tipo de arquivo. +Se possivel para receber o enum tipo de arquivo talvez no contrutor da classe PDFConverter. + -Além disso, se você acha que algo mais deve ser refatorado ainda mais, coloque suas idéias na descrição do pull request. From c8ff16361766c35dbc7af942008d35a0fb36a055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abra=C3=A3o=20Francisco=20da=20Silva?= Date: Tue, 6 Mar 2018 23:39:29 -0300 Subject: [PATCH 4/6] Update PDFConverter.java --- PDFConverter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PDFConverter.java b/PDFConverter.java index 152fefe..6069b0b 100644 --- a/PDFConverter.java +++ b/PDFConverter.java @@ -13,6 +13,8 @@ public class PDFConverter{ /** + * Levei em consideração não quebrar a chamada do metodo para os cliente antigo. + * Imagine que o parametro TipoDcumento e acessado pelo cliente para setar o tipo de arquivo que ele quer converter. * Esse método recebe o como entrada o arquivo que vai ser convertido * para PDF * From 5c452a3faee1a40af768d28eabaac0ef7cc7dda8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abra=C3=A3o=20Francisco=20da=20Silva?= Date: Tue, 6 Mar 2018 23:41:04 -0300 Subject: [PATCH 5/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit melhorando a descriaação --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 25af81d..31b6c2f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ - **Quais são os problemas que você consegue enxergar aqui?** Tem atributo de classe publico. O metodo de conversão vai crescer muito a cada novo tipo d arquivo. - +atributo sem validação. - **Qual refatoração você propõe?** @@ -11,3 +11,5 @@ Criar um enum com tipo de arquivo. Se possivel para receber o enum tipo de arquivo talvez no contrutor da classe PDFConverter. + +Levei em consideração não quebrar a chamada do metodo para os cliente antigo. Imagine que o parametro TipoDcumento e acessado pelo cliente para setar o tipo de arquivo que ele quer converter. From b83df3803c64fa7c91c0cfa2ca63a81f0d31f8c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abra=C3=A3o=20Francisco=20da=20Silva?= Date: Tue, 6 Mar 2018 23:47:51 -0300 Subject: [PATCH 6/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit adicionando informação na descrição --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 31b6c2f..6a7f2ae 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,6 @@ Se possivel para receber o enum tipo de arquivo talvez no contrutor da classe PD Levei em consideração não quebrar a chamada do metodo para os cliente antigo. Imagine que o parametro TipoDcumento e acessado pelo cliente para setar o tipo de arquivo que ele quer converter. + + +Obs. o codigo foi feito da ide eclipse.