public ActionForward salvar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// obter o funcionário logado
FuncionarioCtrl defaultCtrl = new FuncionarioCtrl(getDaoFactory());
Long funcionarioId = (Long) request.getSession().getAttribute(
Constants.PA_FUNCIONARIO);
Funcionario gestor = (Funcionario) defaultCtrl.get(funcionarioId);
CadastrarFuncionarioForm funcionarioForm = (CadastrarFuncionarioForm) form;
ActionMessages msgs = funcionarioForm.validate(mapping, request);
if (!msgs.isEmpty()) {
saveErrors(request, msgs);
return mapping.findForward("error");
}
boolean erroLogica = false;
/*
* Valida para garantir que Ouvidores (Geral ou Assistente) não estejam
* marcados como Consultores
*/
if (CONSULTOR_ON.equals(funcionarioForm.getConsultor())
&& (Perfil.OUVIDOR_ASSISTENTE.getId().equals(
funcionarioForm.getPerfil()) || Perfil.OUVIDOR_GERAL
.getId().equals(funcionarioForm.getPerfil()))) {
funcionarioForm.setConsultor(null);
}
if (funcionarioForm.getId() == null
|| funcionarioForm.getId().intValue() == 0) {
// INSERT de novo funcionário
try {
defaultCtrl.insert(getOrgao(request),
funcionarioForm.getNome(), funcionarioForm.getLogin(),
funcionarioForm.getSenha(),
funcionarioForm.getSituacao(),
funcionarioForm.getMotivo(),
funcionarioForm.getPerfil(),
funcionarioForm.getFuncionalidades(),
funcionarioForm.getTipoAssunto(),
funcionarioForm.getTipoMensagem(),
funcionarioForm.getSubOrgao(),
funcionarioForm.getLocalidades(),
funcionarioForm.getNivel(),
funcionarioForm.getConsultor(),
funcionarioForm.getEmail());
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"message.administrarUsuario.incluir"));
} catch (DaoException e) {
if (Constants.DEBUG) {
e.printStackTrace(System.out);
}
String errorMessage = e.getMessage();
if (errorMessage != null
&& errorMessage.toLowerCase().indexOf("duplicate key") >= 0) {
erroLogica = true;
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.administrarUsuario.chaveDuplicada"));
}
}
} else {
try {
// UPDATE de funcionário existente
defaultCtrl.update(getOrgao(request), gestor,
funcionarioForm.getId(), funcionarioForm.getNome(),
funcionarioForm.getLogin(), funcionarioForm.getSenha(),
funcionarioForm.getSituacao(),
funcionarioForm.getMotivo(),
funcionarioForm.getPerfil(),
funcionarioForm.getFuncionalidades(),
funcionarioForm.getTipoAssunto(),
funcionarioForm.getTipoMensagem(),
funcionarioForm.getSubOrgao(),
funcionarioForm.getLocalidades(),
funcionarioForm.getNivel(),
funcionarioForm.getConsultor(),
funcionarioForm.getEmail());
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"message.administrarUsuario.alterar"));
} catch (DaoException e) {
if (Constants.DEBUG) {
e.printStackTrace(System.out);
}
String errorMessage = e.getMessage();
if (errorMessage != null
&& errorMessage.toLowerCase().indexOf("duplicate key") >= 0) {
erroLogica = true;
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.administrarUsuario.chaveDuplicada"));
}
} catch (Exception e) {
if (Constants.DEBUG) {
e.printStackTrace(System.out);
}
erroLogica = true;
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.administrarUsuario.redirecionar"));
}
}
if (erroLogica) {
PerfilCtrl perfilCtrl = new PerfilCtrl(getDaoFactory());
Funcionario object = new Funcionario();
object.setNome(funcionarioForm.getNome());
object.setLogin(funcionarioForm.getLogin());
object.setSenha("default");
object.setSituacao(funcionarioForm.getSituacao());
object.setListaFuncionalidade(defaultCtrl.listas(
funcionarioForm.getFuncionalidades(), Funcionalidade.class));
object.setListaAssunto(defaultCtrl.listas(
funcionarioForm.getTipoAssunto(), Assunto.class));
object.setListaTipoMensagem(defaultCtrl.listas(
funcionarioForm.getTipoMensagem(), TipoMensagem.class));
object.setSituacao(funcionarioForm.getSituacao());
object.setPerfil(perfilCtrl.get(funcionarioForm.getPerfil()));
object.setInstituicao(getOrgao(request));
object.setListaInstituicao(defaultCtrl.listas(
funcionarioForm.getSubOrgao(), SubOrgao.class));
object.setListaLocalidadeOcorrencia(defaultCtrl.listas(
funcionarioForm.getLocalidades(),
LocalidadeOcorrencia.class));
Comparator ordem = new Comparator() {
public int compare(Object obj1, Object obj2) {