2
\$\begingroup\$

I have a list of files, the files have the same names and are in various different formats like swf, jpg, gif and fla.
Each swf may contain ONLY a gif image, it's possible a JPG image that does not have SWF, which should be listed.

For example:

file1.fla
file1.gif
file1.jpg

file2.jpg

The output should be:
BasicDBObject 1 shall contain: file1.fla AND file1.gif
BasicDBObject 2 shall contain: file2.jpg

I developed my code, but it seems to me full of For's and If's, probably the sonarQube generates an issue. Is there a better logic to apply and refactor it to have fewer lines of code?

private BasicDBList generateBDObject(String validacaoId) {
        List<Criativo> arquivos = criativoDAO.getAll(validacaoId);
        BasicDBList allFiles = new BasicDBList();
        List<String> auxiliar = new ArrayList<>();
        if (arquivos != null && !arquivos.isEmpty()) {
            for (Criativo criativo : arquivos) {
                for (int i = 0; i < criativo.getArquivos().size(); i++) {
                    if (criativo.getArquivos().get(i).getExtensao().contentEquals("swf")) {
                        for (int j = 0; j < criativo.getArquivos().size(); j++) {
                            String myFile = criativo.getArquivos().get(j).getExtensao();
                            if (myFile.contentEquals("gif")) {
                                BasicDBObject swfObject = new BasicDBObject();
                                swfObject.append("id", Util.getMd5Time(criativo.getArquivos().get(0).getNome()));
                                swfObject.append("path", null);
                                swfObject.append("nome", criativo.getArquivos().get(i).getNomeOriginal());
                                swfObject.append("pathOriginal", criativo.getArquivos().get(i).getPathOriginal());
                                swfObject.append("imagem", null);
                                allFiles.add(swfObject);
                                auxiliar.add(criativo.getNome());
                            }
                        }
                    }
                }
                while (!auxiliar.contains(criativo.getNome())) {
                    BasicDBObject dbObject = new BasicDBObject();
                    dbObject.append("id", Util.getMd5Time(criativo.getArquivos().get(0).getNome()));
                    dbObject.append("path", null);
                    dbObject.append("nome", criativo.getArquivos().get(0).getNomeOriginal());
                    dbObject.append("pathOriginal", criativo.getArquivos().get(0).getPathOriginal());
                    dbObject.append("imagem", null);
                    auxiliar.add(criativo.getNome());
                    allFiles.add(dbObject);
                }
            }
        }
        return allFiles;
    }

Criativo.java

public class Criativo {

    @Id
    String id;
    String tipo = "criativo";
    String validacaoId;
    String nome;
    String linhaCriativa;
    String veiculo;
    String formato;
    String canal;
    List<Arquivo> arquivos = new ArrayList<>();


    public String getTipo() {
        return this.tipo;
    }




    public String getLinhaCriativa() {
        return this.linhaCriativa;
    }

    public Criativo setLinhaCriativa(String linhaCriativa) {
        this.linhaCriativa = linhaCriativa;
        return this;
    }

    public String getVeiculo() {
        return this.veiculo;
    }

    public Criativo setVeiculo(String veiculo) {
        this.veiculo = veiculo;
        return this;
    }

    public String getFormato() {
        return this.formato;
    }

    public Criativo setFormato(String formato) {
        this.formato = formato;
        return this;
    }

    public String getCanal() {
        return this.canal;
    }

    public Criativo setCanal(String canal) {
        this.canal = canal;
        return this;
    }

    public List<Arquivo> getArquivos() {
        return this.arquivos;
    }

    public Criativo setArquivos(List<Arquivo> arquivos) {
        this.arquivos = arquivos;
        return this;
    }


    public String getNome() {
        return this.nome;
    }

    public Criativo setNome(String nome) {
        this.nome = nome;
        return this;
    }

    public Criativo addArquivo(Arquivo arq) {
        this.arquivos.add(arq);
        return this;
    }

    public String getId() {
        return this.id;
    }

    public Criativo setId(String id) {
        this.id = id;
        return this;
    }

    public String getValidacaoId() {
        return this.validacaoId;
    }

    public Criativo setValidacaoId(String validacaoId) {
        this.validacaoId = validacaoId;
        return this;
    }
}

Arquivo.java

public class Arquivo {
    @Id
    String id;
    String validacaoId;
    String nome;
    String tipo;
    String path;
    String extensao;
    String nomeOriginal;
    String pathOriginal;
    String dataCriacao;
    long tamanho;
    BasicDBObject atributos;


    public String getId() {
        return this.id;
    }

    public Arquivo setId(String id) {
        this.id = id;
        return this;
    }

    public String getNome() {
        return this.nome;
    }

    public Arquivo setNome(String nome) {
        this.nome = nome;
        return this;
    }

    public String getTipo() {
        return this.tipo;
    }

    public Arquivo setTipo(String tipo) {
        this.tipo = tipo;
        return this;
    }

    public String getPath() {
        return this.path;
    }

    public Arquivo setPath(String path) {
        this.path = path;
        return this;
    }

    public String getExtensao() {
        return this.extensao;
    }

    public Arquivo setExtensao(String extensao) {
        this.extensao = extensao;
        return this;
    }

    public String getNomeOriginal() {
        return this.nomeOriginal;
    }

    public Arquivo setNomeOriginal(String nomeOriginal) {
        this.nomeOriginal = nomeOriginal;
        return this;
    }

    public String getDataCriacao() {
        return this.dataCriacao;
    }

    public Arquivo setDataCriacao(String dataCriacao) {
        this.dataCriacao = dataCriacao;
        return this;
    }

    public long getTamanho() {
        return this.tamanho;
    }

    public Arquivo setTamanho(long tamanho) {
        this.tamanho = tamanho;
        return this;
    }

    public String getValidacaoId() {
        return this.validacaoId;
    }

    public Arquivo setValidacaoId(String validacaoId) {
        this.validacaoId = validacaoId;
        return this;
    }

    public BasicDBObject getAtributos() {
        return this.atributos;
    }

    public Arquivo setAtributos(BasicDBObject atributos) {
        this.atributos = atributos;
        return this;
    }

    public String getPathOriginal() {
        return this.pathOriginal;
    }

    public Arquivo setPathOriginal(String pathOriginal) {
        this.pathOriginal = pathOriginal;
        return this;
    }
}

Note: imagem and path is null because it is in development. But imagem is equal to JPG image.

\$\endgroup\$
2
\$\begingroup\$

Could move some of the procedural logic into the objects. BasicDBObject could be returned by Criativo, such as a toDBObject() method instead of being converted outside by generateBDObject.

Collection inside Criativo or a predicate method could provide which have the "gif" and other desired requirements rather than evaluating in a loop: if (myFile.contentEquals("gif")) {

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.