Olá a todos!
Primeiramente gostaria de parabenizar aqueles que participaram no CJ. infelizmente não pude ir, mas ano que vem já to lá! 
Hoje, vindo para o serviço, fiquei pensando numa arquitetura para lidar de forma diferente com actions no webwork, de forma similiar ao que ao Ruby on Rails.
Hoje tenho minhas actions mais ou menos assim…
public class IncluiRamoAtividadeAction extends
ActionSupport {
private String nome;
private String descricao;
private RamoAtividade ramoAtividade;
private RamoAtividadeDAO ramoAtividadeDAO;
public String execute() throws DAOException {
if ((nome == null) || (nome.trim().equals(""))) {
addFieldError("nome", "Por favor, entre com um nome válido!");
return ERROR;
}
if (verificaSeRamoExiste(nome)) {
addFieldError("nome", "O ramo de atividade fornecido já existe.");
return ERROR;
}
ramoAtividade = new RamoAtividade();
ramoAtividade.setNome(nome);
ramoAtividade.setDescricao(descricao);
ramoAtividadeDAO.create(ramoAtividade);
return SUCCESS;
}
private boolean verificaSeRamoExiste(String nome) throws DAOException {
RamoAtividade ramo = ramoAtividadeDAO.findByName(nome);
if (ramo != null)
return true;
else
return false;
}
RamoAtividade getRamoAtividade() {
return ramoAtividade;
}
void setDescricao(String descricao) {
this.descricao = descricao;
}
void setNome(String nome) {
this.nome = nome;
}
void setRamoAtividadeDAO(RamoAtividadeDAO ramoAtividadeDAO) {
this.ramoAtividadeDAO = ramoAtividadeDAO;
}
}
Em breve farei uns refactoring nas actions referente ao Ramo de Atividade, e ai, o código vai ficar muito simples, mais ou menos assim:
public class IncluiRamoAtividadeAction extends
ActionSupport extends AbstractRamoAtividadeAction {
public String execute() throws DAOException {
if (verificaSeRamoExiste(ramo.getNome())) {
addFieldError("nome", "O ramo de atividade fornecido já existe.");
return ERROR;
}
ramoAtividadeDAO.create(ramoAtividade);
return SUCCESS;
}
private boolean verificaSeRamoExiste(String nome) throws DAOException {
RamoAtividade ramo = ramoAtividadeDAO.findByName(nome);
if (ramo != null)
return true;
else
return false;
}
}
Mas estive pensando… Minhas actions ficam muito pequenas. É um desperdício de classe na minha opinião. Eu precisarei de no mínimo 5 actions, e mais 1 AbstractAction para conseguir um refactoring que nem esse. Eu vou poluir meu projeto de actions…
O que estou querendo é colocar tudo isso em uma action só. Isso não parece ser problema, pois posso facilmente configurar o xwrok.xml ou simplemente chamar a action utilizando por exemplo a url http://localhost:8080/minhaApp/RamoAtividadeAction!create.do… usando esta chamada o webwork executaria para mim o método create da minha action, e não o execute, que é o default…
Meu código entaum ficaria assim:
public class RamoAtividadeAction extends AbstractRamoAtividadeAction {
public String inclui() throws DAOException {
if (verificaSeRamoExiste(ramoAtividade.getNome())) {
addFieldError("nome", "O ramo de atividade fornecido já existe.");
return ERROR;
}
ramoAtividadeDAO.create(ramoAtividade);
return SUCCESS;
}
public String altera() throws DAOException {
// algum código aqui
}
public String exclui() throws DAOException {
// algum código aqui
}
public String exibe() throws DAOException {
// algum código aqui
}
public String listaTodos() throws DAOException {
// algum código aqui
}
private boolean verificaSeRamoExiste(String nome) throws DAOException {
RamoAtividade ramo = ramoAtividadeDAO.findByName(nome);
if (ramo != null)
return true;
else
return false;
}
}
Entaum… a minha dúvida cruel sobre essa arquitetura é quanto a validação. Eu precisava que dependendo do método que fosse executado, fosse usado uma configuração diferente de validação.
Até onde estudei, o webwork tem 3 tipos de validações, e a que mais parece se enquadrar para minha situação é um que vc cria um arquivo com mais ou menos este nome…
NomeDaClasseDaAction-NomeDaAction-validate.xml
Por acaso é esse o tipo de validaçção específica para cada ação da minha action, ou seja, eu teria que criar os seguintes arquivos de validação:
RamoAtividadeAction-inclui-validate.xml
RamoAtividadeAction-altera-validate.xml
RamoAtividadeAction-exclui-validate.xml
(e outros…)
Será que alguém poderia me dar uma luz? Estou querendo fazer isso, mas tenho dúvidas se realmente vale a pena colocar tudo isso na prática!
Abraços!
Thiago Senna


