Código "Capcioso" (e longo...) [resolvido]

6 respostas
Z

Olá a todos! :slight_smile:

Sei que é difícil resolver problemas de códigos complicados, mas resolvi apelar à sua ajuda pra resolver um pepino, que pode ser apenas uma bobagem.
O código abaixo é de um Servlet de comando que “herdei” em um framework que já estava pronto quando vim trabalhar no meu departamento atual (faz três semanas…).
Estou desenferrujando em Java, Jsp, Tags, Servlets, Beans, etc, e me deparei com o seguinte erro no ambiente do Eclipse 2.1:
“Invalid Expression as Statement”

O Erro é apontado começando onde coloquei <inicio> e terminando onde coloquei <fim>
Ao comentar o primeiro if, onde ocorre o erro, o Eclipse passa a apontar o mesmo erro no segundo if.

Já suspeitei que o Eclipse possa estar mostrando alguma incompatibilidade em relação ao jdk instalado, que no nosso caso aqui é o J2EE 1.4

Alguém teria uma luz? :slight_smile:

abraços,

Zevang

CÓDIGO:

package br.com.bb.apoioadministrativo.processo.comando;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
import java.util.Collection;
import br.com.easydev.persistence.pool.ConnectionManager;
import br.com.bb.apoiodesenvolvimentoproducao.udi.controle.IntranetComando;
import br.com.bb.apoiodesenvolvimentoproducao.udi.excecao.IntranetComandoException;
import br.com.easydev.util.ObjectConverter;
import br.com.bb.seguranca.itr.Autorizacao;
import br.com.bb.apoioadministrativo.processo.negocio.AtvdBean;
import br.com.bb.apoioadministrativo.processo.negocio.AtvdCmtBean;
import br.com.bb.apoioadministrativo.processo.negocio.AtvdCriterio;
import br.com.bb.apoioadministrativo.processo.persistencia.AtvdDB;
import br.com.bb.apoioadministrativo.processo.persistencia.AnotEtpDB;
import br.com.bb.apoioadministrativo.processo.controle.PerfilBean;

public class AtvdObterCmt implements IntranetComando {

	private AtvdCmtBean atvdCmtBean;
	private AtvdDB atvdDB;
	private AnotEtpDB anotEtpDB;

	private String next;
	private Autorizacao autorizacao;
	private ConnectionManager pool;
	//private String parametroAdicional;

	//parâmetros adicionais do construtor comando devem ser do tipo String e seu valor indicado no XML
	public AtvdObterCmt(ConnectionManager pool,Autorizacao autorizacao,String next) {
		this.next = next;
		this.autorizacao = autorizacao;
		this.pool = pool;
		//this.parametroAdicional = parametroAdicional;
	}
	public String execute(HttpServletRequest req, HttpServletResponse res) throws IntranetComandoException {
		PerfilBean perfilBean = (PerfilBean)req.getSession().getAttribute("_perfilProcesso_");
		Collection lista;
		if(req.getParameter("cdAtvd")==null) throw new IntranetComandoException("O atributo da requisição 'cdAtvd' é obrigatório para este comando");
		try {

			atvdDB = new AtvdDB(pool);
			anotEtpDB = new AnotEtpDB(pool);

			int cdAtvd = Integer.parseInt(req.getParameter("cdAtvd"));

			//OBTER A ATIVIDADE COM TODOS OS DADOS DE CADASTRO	
			atvdCmtBean = atvdDB.obterAtvdCmtBean(cdAtvd);
			atvdDB.verificarNovasAtualizacoes(atvdCmtBean, 2);
			
			//OBTER RELACIONAMENTOS PAIS
			try {
				atvdDB.obterPaisAtvd(atvdCmtBean);
			} catch (Exception e) {
				System.err.println("Ocorreu alguma exceção na obtenção dos pais da atividade cod " + atvdCmtBean.getCdAtvd() + ": "  + e.getMessage());
			}
			
			req.setAttribute("atvdCmtBean",atvdCmtBean);

			//obter informações adicionais de acordo com a escolha do usuário
			//PACTO
			if(req.getParameter("pacto")!=null) if(req.getParameter("pacto").equals("1")) {
			<***inicio***>	(new AcrdAtvdObterLista(pool,autorizacao,next).execute(req,res)); <***fim***>
			}
			
			//ATRIBUIÇÃO
			if(req.getParameter("etapa")!=null) if(req.getParameter("etapa").equals("1")) {
				(new EtpAtvdObterLista(pool,autorizacao,next).execute(req,res));
			}
			
			//ANOTAÇÕES
			if(req.getParameter("anotacao")!=null) if(req.getParameter("anotacao").equals("1")) {
				(new AnotEtpObterLista(pool,autorizacao,next).execute(req,res));
			}
			
			//RELACIONAMENTOS FILHOS
			if(req.getParameter("relacionamento")!=null) if(req.getParameter("relacionamento").equals("1")) {
				AtvdCriterio atvdCriterio = new AtvdCriterio();
				atvdCriterio.setCdAtvdAgpr(cdAtvd);
				atvdCriterio.setAgrupador("2");
				atvdCriterio.setVigente("2");
				lista = atvdDB.obterListaAvancado(atvdCriterio,perfilBean,"DT_ETGA_PRVT_ACRD");
				req.setAttribute("atvd",lista);
			}
			
			//PARTICIPAÇÕES
			if(req.getParameter("participacao")!=null) if(req.getParameter("participacao").equals("1")) {
				(new PrtcAtvdObterLista(pool,autorizacao,next).execute(req,res));
			}
			
			//ANEXOS
			if(req.getParameter("anexo")!=null) if(req.getParameter("anexo").equals("1")) {
				(new ArqAnxAtvdObterLista(pool,autorizacao,next).execute(req,res));
			}
			
		} catch (Exception e) {
			throw new IntranetComandoException(e.getMessage());
		} finally {
		}

		return next;
	}
}

6 Respostas

T

Não está faltando importar esta classe - AcrdAtvdObterLista (é que como você não postou a classe eu não sei se ela faz parte do mesmo pacote ou não)

De qualquer maneira (isto já é preciosismo) esse tipo de código:

if (a) if (b) {
}

pode dar confusão. Esse código é exatamente equivalente a:

if (a && b) {
}

mas usar “&&” dá menos problemas com código que está ou não fora do “if” (e que você não sabe se está certo, só de olhar, porque está economizando “{” “}”)

T

E de qualquer maneira sempre acho que é melhor escrever:

[size=18][color=darkred]([/color][/size]new A(b,c)[size=18][color=darkred])[/color][/size].execute(d,e);

(veja a posição correta dos parênteses).

cv1

Solucionando isso rapidinho:

  • Escreva um TestCase, caso possivel

  • Isole todos os blocos de codigo que fizerem sentido com Extract Method

  • Renomeie os metodos ate a coisa fazer mais sentido

  • Reescreva os metodos que nao fizerem sentido

  • De um Inline Method nos metodos que ficarem muito pequenos ou com nomes confusos demais

Repita o processo quantas vezes vc achar necessario, e so pare quando o TestCase tambem fizer sentido (e, claro, todos os testes passarem). :wink:

Z

Como eu poderia dizer… matou a pau! :slight_smile:
Era realmente e simplesmente a posição dos parênteses.
Agora vou ter que descobrir QUEM foi que escreveu do jeito errado pra dar o puxão de orelha…
valeu!
abração

thingol:
[size=18][color=darkred]([/color][/size]new A(b,c)[size=18][color=darkred])[/color][/size].execute(d,e);

cv1

E culpar o cara vai resolver o que? O codigo continua ruim :wink:

Z

Era só força de expressão… :slight_smile:
Mas o importante é que matei mais um leão graças à sua ajuda.

grato
[]s

Zevang

Criado 9 de junho de 2005
Ultima resposta 10 de jun. de 2005
Respostas 6
Participantes 3