1 /*
2 * Created on 06/06/2005
3 *
4 * Classe que implementa a interface PopUpPesquisa que é utilizada pelo template jsp
5 * popup_pesquisa.jsp
6 *
7 * O template instancia essa classe utilizando os métodos definidos na interface.
8 * Assim o template pode ser usado para pesquisar e navegar em várias classes sem
9 * precisar escrever um jsp específico para cada um.
10 * Basta criar uma classe que implementa a interface PopUpPesquisa e passá-la como
11 * parâmatro no momento de chamar a tela de pesquisa
12 *
13 * A tela de pesquisa sempre retorna um código e uma descrição do que foi selecionado.
14 *
15 * Esta classe tem mais implementações que outras classes PopUp.
16 * Esta classe foi desenvolvida para contemplar o novo Caso de Uso de Editores/Leitores
17 * onde pode ser incluído um Grupo (SisAtributoSatb) ou Usuario e dar as devidas
18 * permissões.
19 * Por este detalhe de pode incluir ou um ou outro, a classe sofreu implementações
20 * diferentes das demais.
21 */
22 package ecar.popup;
23
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.Comparator;
27 import java.util.List;
28
29 import javax.servlet.http.HttpServletRequest;
30
31 import comum.database.Dao;
32 import comum.util.Pagina;
33
34 import ecar.dao.ConfiguracaoDao;
35 import ecar.dao.UsuarioDao;
36 import ecar.exception.ECARException;
37 import ecar.pojo.ConfiguracaoCfg;
38 import ecar.pojo.SisAtributoSatb;
39 import ecar.pojo.UsuarioUsu;
40 import ecar.util.Dominios;
41
42 /**
43 * @author garten
44 *
45 */
46 public class PopUpUsuarioEGrupo implements PopUpPesquisa {
47
48
49 // array de nomes de campos em que pode pesquisar
50 private String[] pesquisarEm;
51
52 // declaramos Object e Dao para declaração genérica
53 private Object pojo;
54 private Dao dao;
55 private UsuarioUsu usuario;
56 private SisAtributoSatb grupo;
57 private UsuarioDao usuarioDao = new UsuarioDao(null);
58
59 public PopUpUsuarioEGrupo(){
60 pojo = new Object();
61 dao = new Dao();
62 this.setPesquisarEm(new String[] {"Nome","E-mail"});
63 }
64
65 /**
66 * Devolve para o template jsp o Dao.<br>
67 *
68 * @author N/C
69 * @since N/C
70 * @version N/C
71 * @return Dao
72 * @see ecar.popup.PopUpPesquisa#getDao()
73 */
74 public Dao getDao() {
75 return dao;
76 }
77
78 /**
79 * Retorna "Usuários e Grupos de Acesso".<br>
80 *
81 * @author N/C
82 * @since N/C
83 * @version N/C
84 * @return String
85 */
86 public String getTitulo(){
87 return "Usuários e Grupos de Acesso";
88 }
89
90 /**
91 * Recebe o argumento de pesquisa do template jsp e seta nos respectivos campos.<br>
92 * String arg - a string do argumento d pesquisa.<br>
93 * String[] pesquisarEm - um array de string com os nomes dos campos que devem ser pesquisados.<br>
94 *
95 * @author N/C
96 * @since N/C
97 * @version N/C
98 * @param HttpServletRequest request
99 * @throws ECARException
100 */
101 public void setArgPesquisa(HttpServletRequest request) throws ECARException{
102 usuario = new UsuarioUsu();
103 grupo = new SisAtributoSatb();
104
105 String arg = Pagina.getParam(request, "hidArg");
106 String[] pesquisarEm = request.getParameterValues("hidPesquisarEm");
107
108 usuario.setIndAtivoUsu(Dominios.SIM);
109
110 if (pesquisarEm != null)
111 for (int i = 0; i < pesquisarEm.length; i++) {
112 if("0".equals(pesquisarEm[i])){
113 usuario.setNomeUsu(arg);
114 grupo.setDescricaoSatb(arg);
115 }
116 // o grupo nao possui e-mail, por isso só pesquisa em descrição
117 if("1".equals(pesquisarEm[i]))
118 usuario.setEmail1Usu(arg);
119 }
120 }
121
122 /**
123 * Executamos duas pesquisas e adicionamos os resultados em uma lista
124 * que é ordenada de acordo com usuário ou grupo.<br>
125 *
126 * @author N/C
127 * @since N/C
128 * @version N/C
129 * @return List
130 * @throws ECARException
131 */
132 public List pesquisar() throws ECARException {
133 ConfiguracaoCfg configuracao = new ConfiguracaoCfg();
134 ConfiguracaoDao configuracaoDao = new ConfiguracaoDao(null);
135
136 List lista = new ArrayList();
137 List listaGrupos = new ArrayList();
138 List listaUsuarios = new ArrayList();
139
140 String nomeUsu = usuario.getNomeUsuSent();
141 String emailUsu = usuario.getEmail1UsuSent();
142
143 // retirar o nome e email do usuario do bean para não pesquisa-lo no banco de dados ECAR
144 usuario.setNomeUsu(null);
145 usuario.setEmail1Usu(null);
146
147 listaUsuarios.addAll( usuarioDao.pesquisar(usuario, nomeUsu, "", "", emailUsu));
148
149 /* Filtrar somente Classe de Acesso - Grupo de Acesso (Cadastro em ConfiguracaoCgf) */
150 if(configuracaoDao.getConfiguracao() != null){
151 configuracao = configuracaoDao.getConfiguracao();
152
153 if( configuracao.getSisGrupoAtributoSgaByCodSgaGrAtrClAcesso() != null ) {
154 grupo.setSisGrupoAtributoSga(configuracao.getSisGrupoAtributoSgaByCodSgaGrAtrClAcesso());
155 listaGrupos.addAll( dao.pesquisar(grupo, new String[] {"descricaoSatb", "asc"}) );
156 }
157 }
158
159 Collections.sort(listaGrupos,
160 new Comparator() {
161 public int compare(Object o1, Object o2) {
162 return ( (SisAtributoSatb)o1 ).getDescricaoSatb().compareToIgnoreCase( ( (SisAtributoSatb)o2 ).getDescricaoSatb() );
163 }
164 } );
165
166 Collections.sort(listaUsuarios,
167 new Comparator() {
168 public int compare(Object o1, Object o2) {
169 return ( (UsuarioUsu)o1 ).getNomeUsuSent().compareToIgnoreCase( ( (UsuarioUsu)o2 ).getNomeUsuSent() );
170 }
171 } );
172
173 lista.addAll(listaGrupos);
174 lista.addAll(listaUsuarios);
175
176 return lista;
177 }
178
179 /**
180 * Para diferenciar o grupo do usuário antes do valor do cógigo é passado a letra
181 * "U" para Usuário e "G" para grupo.<br>
182 * Esse código é tratado no método setItemUsuarioGrupo do ItemEstrutUsuarioDao,
183 * que é executado somente quando o objeto é salvo.<br>
184 *
185 * @author N/C
186 * @since N/C
187 * @version N/C
188 * @return String
189 */
190 public String getCodigo() {
191 if( pojo.getClass() == UsuarioUsu.class )
192 return "U"+((UsuarioUsu) pojo).getCodUsu().toString();
193 else
194 return "G"+((SisAtributoSatb) pojo).getCodSatb().toString();
195 }
196
197 /**
198 * Devolve para o template a descricao de acordo com o objeto.<br>
199 *
200 * @author N/C
201 * @since N/C
202 * @version N/C
203 * @return String
204 */
205 public String getDescricao() {
206 if( pojo.getClass() == UsuarioUsu.class )
207 return ((UsuarioUsu) pojo).getNomeUsuSent().toString();
208 else
209 return ((SisAtributoSatb) pojo).getDescricaoSatb().toString();
210 }
211
212 /**
213 * Recebe um objeto do template.<br>
214 *
215 * @author N/C
216 * @since N/C
217 * @version N/C
218 * @param Object o
219 */
220 public void setPojo(Object o) {
221 if( o.getClass() == UsuarioUsu.class)
222 pojo = (UsuarioUsu) o;
223 else
224 pojo = (SisAtributoSatb) o;
225 }
226
227 /**
228 * Retorna para o template um array com os nomes para montar os checkbox.<br>
229 *
230 * @author N/C
231 * @since N/C
232 * @version N/C
233 * @return String[] - (Returns the pesquisarEm)
234 */
235 public String[] getPesquisarEm() {
236 return pesquisarEm;
237 }
238
239 /**
240 * Atribui internamente um array com os campos possiveis para a pesquisa.<br>
241 *
242 * @author N/C
243 * @since N/C
244 * @version N/C
245 * @param String[] pesquisarEm - The pesquisarEm to set.
246 */
247 private void setPesquisarEm(String[] pesquisarEm) {
248 this.pesquisarEm = pesquisarEm;
249 }
250 }