View Javadoc

1   /*
2    * Created on 17/06/2005
3    *
4    */
5   package comum.util;
6   
7   import java.util.Calendar;
8   import java.util.Iterator;
9   
10  import org.apache.log4j.Logger;
11  import org.hibernate.HibernateException;
12  import org.hibernate.cfg.Configuration;
13  import org.hibernate.cfg.Mappings;
14  import org.hibernate.mapping.Column;
15  import org.hibernate.mapping.PrimaryKey;
16  import org.hibernate.mapping.Property;
17  import org.hibernate.mapping.Table;
18  import org.hibernate.type.Type;
19  
20  import comum.database.HibernateUtil;
21  
22  import ecar.pojo.UsuarioUsu;
23  
24  /**
25   * @author cristiano
26   * @since 17/06/2005
27   * @version N/C
28   */
29  public class LogBean {
30  	public static final String SEPARADOR_CAMPOS_LOG = "#";
31  	public static final String SEPARADOR_CAMPOS_DADOS = ",";
32  	
33  	private Logger logger = null;
34  
35  	private Object obj = null; // objeto que foi inserido, atualizado ou deletado
36  	private UsuarioUsu usuario = null; // usuario logado
37  	private String iPUsuario = null; // IP do usuário logado
38  	private String operacao = null; // Operação: Incluir, Excluir ou Alterar
39  	private String codigoTransacao = null;
40  	private String codigoSessao = null;
41  	
42  	/**
43  	 * Retorna String IPUsuario.<br>
44  	 * 
45  	 * @author N/C
46       * @since N/C
47       * @version N/C
48  	 * @return String		- IPUsuario
49  	 */
50  	public String getIPUsuario() {
51  		return iPUsuario;
52  	}
53  
54  	/**
55  	 * Atribui valor especificado para String IPUsuario.<br>
56  	 * 
57  	 * @author N/C
58       * @since N/C
59       * @version N/C
60  	 * @param String usuario
61  	 */
62  	public void setIPUsuario(String usuario) {
63  		iPUsuario = usuario;
64  	}
65  
66  	/**
67  	 * Retorna Object obj.<br>
68  	 * 
69  	 * @author N/C
70       * @since N/C
71       * @version N/C
72  	 * @return Object		- obj
73  	 */
74  	public Object getObj() {
75  		return obj;
76  	}
77  
78  	/**
79  	 * Atribui valor especificado para Object obj.<br>
80  	 * 
81  	 * @author N/C
82       * @since N/C
83       * @version N/C
84  	 * @param Object obj
85  	 */
86  	public void setObj(Object obj) {
87  		this.obj = obj;
88  	}
89  	
90  	/**
91  	 * Retorna UsuarioUsu usuario.<br>
92  	 * 
93  	 * @author N/C
94       * @since N/C
95       * @version N/C
96  	 * @return UsuarioUsu
97  	 */
98  	public UsuarioUsu getUsuario() {
99  		return usuario;
100 	}
101 	
102 	/**
103 	 * Atribui valor especificado para UsuarioUsu usuario.<br>
104 	 * 
105 	 * @author N/C
106      * @since N/C
107      * @version N/C
108 	 * @param UsuarioUsu usuario
109 	 */
110 	public void setUsuario(UsuarioUsu usuario) {
111 		this.usuario = usuario;
112 	}
113 
114 	/**
115 	 * Construtor.<br>
116 	 * 
117 	 * @author N/C
118      * @since N/C
119 	 * @version N/C
120 	 */
121 	public LogBean() {
122 		logger = Logger.getLogger(this.getClass());
123 	}
124 
125 	/**
126 	 * Retorna String operacao.<br>
127 	 * 
128 	 * @author N/C
129      * @since N/C
130      * @version N/C
131 	 * @return String
132 	 */
133 	public String getOperacao() {
134 		return operacao;
135 	}
136 
137 	/**
138 	 * Atribui valor especificado para String opreracao.<br>
139 	 * 
140 	 * @author N/C
141      * @since N/C
142      * @version N/C
143 	 * @param String operacao
144 	 */
145 	public void setOperacao(String operacao) {
146 		this.operacao = operacao;
147 	}
148 	
149 	/**
150 	 * Retorna String codigoSessao.<br>
151 	 * 
152 	 * @author N/C
153      * @since N/C
154      * @version N/C
155 	 * @return String
156 	 */
157 	public String getCodigoSessao() {
158 		return codigoSessao;
159 	}
160 
161 	/**
162 	 * Atribui valor especificado para String codigoSessao.<br>
163 	 * 
164 	 * @author N/C
165      * @since N/C
166      * @version N/C
167 	 * @param String codigoSessao
168 	 */
169 	public void setCodigoSessao(String codigoSessao) {
170 		this.codigoSessao = codigoSessao;
171 	}
172 
173 	/**
174 	 * Retorna String codigoTransacao.<br>
175 	 * 
176 	 * @author N/C
177      * @since N/C
178      * @version N/C
179 	 * @return String
180 	 */
181 	public String getCodigoTransacao() {
182 		return codigoTransacao;
183 	}
184 
185 	/**
186 	 * Atribui valor especificado para String codigoTransacao
187 	 * 
188 	 * @author N/C
189      * @since N/C
190      * @version N/C
191 	 * @param String codigoTransacao
192 	 */
193 	public void setCodigoTransacao(String codigoTransacao) {
194 		this.codigoTransacao = codigoTransacao;
195 	}
196 
197 	/**
198 	 * Retorna String no formato:<br>
199 	 * CodUsu#IPUsuario#CodigoTransacao#CodigoSessao#Operacao#TableName#Dados#DataAtual.<br>
200 	 * 
201 	 * @author N/C
202      * @since N/C
203      * @version N/C
204      * @return String
205 	 */
206 	public String toString() {
207 		
208 		StringBuffer retorno = new StringBuffer(); 
209 		retorno.append(getUsuario().getCodUsu());
210 		retorno.append(SEPARADOR_CAMPOS_LOG);
211 		retorno.append(getIPUsuario());
212 		retorno.append(SEPARADOR_CAMPOS_LOG);
213 		retorno.append(getCodigoTransacao());
214 		retorno.append(SEPARADOR_CAMPOS_LOG);
215 		retorno.append(getCodigoSessao());
216 		retorno.append(SEPARADOR_CAMPOS_LOG);
217 		retorno.append(getOperacao());
218 		retorno.append(SEPARADOR_CAMPOS_LOG);
219 		retorno.append(getTableName(getObj()));
220 		retorno.append(SEPARADOR_CAMPOS_LOG);
221 		retorno.append(getDados());
222 		retorno.append(SEPARADOR_CAMPOS_LOG);
223 		retorno.append(Data.parseDate(Data.getDataAtual()));
224 				
225 		return retorno.toString();
226 	}
227 	
228 	/**
229 	 * Retorna String Colunas.<br>
230 	 * 
231 	 * @author N/C
232      * @since N/C
233      * @version N/C
234 	 * @return String
235 	 */
236 	private String getDados() {
237 		return getColunas(getObj());
238 	}
239 	
240 	/**
241 	 * Se comSeparador verdadeiro retorna a Hora atual com separador ':', do contrario retorna sem.<br>
242 	 * 
243 	 * @author N/C
244      * @since N/C
245      * @version N/C
246 	 * @param boolean comSeparador
247 	 * @return String
248 	 */
249 	public static String getHoraAtual(boolean comSeparador)	{
250 			Calendar cal = Calendar.getInstance();
251 
252 			StringBuffer  hh = new StringBuffer(); 
253 			StringBuffer  mm = new StringBuffer(); 
254 			StringBuffer  ss = new StringBuffer(); 
255 			hh.append(cal.get(Calendar.HOUR_OF_DAY));
256 			mm.append(cal.get(Calendar.MINUTE));
257 			ss.append(cal.get(Calendar.SECOND));
258 
259 			if(mm.length() < 2)
260 				mm.insert(0, "0");
261 			if(hh.length() < 2)
262 				hh.insert(0, "0");
263 			if(ss.length() < 2)
264 				ss.insert(0, "0");
265 								
266 			if(comSeparador) {
267 				return (hh.append(":").append(mm).append(":").append(ss)).toString();
268 			}
269 			else {
270 				return (hh.append(mm).append(ss)).toString();
271 			}
272 	}
273 		
274 	
275 
276 	
277 	/**
278 	 * Retorna o nome/valor dos campos da tabela que não sejam PK.<br>
279 	 * 
280 	 * @author N/C
281      * @since N/C
282      * @version N/C
283 	 * @param Object o		- Objeto a ser recuperados os valores
284 	 * @return String		- Nome/Valor dos campos
285 	 */
286 	private String getColunas(Object o) {
287 		StringBuffer r = new StringBuffer();
288 		
289 		r.append(getPkName(o)).append(SEPARADOR_CAMPOS_DADOS);
290 		
291 		
292 		Configuration conf = HibernateUtil.getConfiguration();
293 		Mappings map = conf.createMappings();
294 		//TODO: verificar se funcionará apos mudança...
295 		Iterator<?> itr = map.getClass(o.getClass().getName()).getPropertyIterator();
296 		while (itr.hasNext()) {
297 			Property prop = (Property) itr.next();
298 			
299 			String colname = prop.getName();
300 			//Value value = prop.getValue();
301 			String colvalue = null;
302 			Type t = prop.getType();
303 			
304 			if("java.util.Set".equals(t.getReturnedClass().getName())) {
305 				continue;
306 			}
307 
308 			try{
309 				Object v = Util.invocaGet(o, colname);
310 				boolean mostrarIgual = true; 
311 
312 				if(v != null) {
313 					// se for data, formata-la
314 					if(v instanceof java.util.Date) {
315 						colvalue = Data.parseDate((java.util.Date)v);
316 					}
317 					// se for do pacote ecar.pojo, recuperar o valor da chave
318 					else if(t.getReturnedClass().getName().indexOf("ecar.pojo.") > -1) {
319 						colvalue = getPkName(v);
320 						mostrarIgual = false; 
321 					}
322 					else {
323 						colvalue = v.toString();
324 					}
325 				}
326 				
327 				if(mostrarIgual) {
328 					r.append(colname.toUpperCase()).append("=").append(colvalue);
329 				}
330 				else {
331 					r.append(colvalue);
332 				}
333 				r.append(SEPARADOR_CAMPOS_DADOS);
334 
335 			}catch(Exception e){
336 				logger.error(e);
337 			}
338 		}
339 		r.delete(r.length() - SEPARADOR_CAMPOS_DADOS.length(), r.length());
340 
341 		return r.toString();
342 	}
343 	
344 	/**
345 	 * Retorna o nome e o valor da(s) chave(s) primária(s).<br>
346 	 * 
347 	 * @author N/C
348      * @since N/C
349      * @version N/C
350 	 * @param Object o		- Objeto a ser descoberto a(s) chave(s)
351 	 * @return String		- Nome/valor da(s) chave(s)
352 	 */
353 	private String getPkName(Object o) {
354 		StringBuffer r = new StringBuffer();
355 		Configuration conf = HibernateUtil.getConfiguration();
356 		Mappings map = conf.createMappings();
357 		Table tab = map.getClass(o.getClass().getName()).getTable();
358 		PrimaryKey pk = tab.getPrimaryKey();
359 		Iterator<?> itr = pk.getColumnIterator();
360 		while (itr.hasNext()) {
361 			Column col = (Column) itr.next();
362 			String colname = col.getName();
363 			String value = "";
364 			try {
365 				value = conf.getClassMapping(o.getClass().getName())
366 						.getIdentifierProperty().getGetter(o.getClass()).get(o)
367 						.toString();
368 			} catch (HibernateException e) {
369 				logger.error(e);
370 			}
371 			r.append(colname.toUpperCase()).append("=").append(value);
372 			r.append(SEPARADOR_CAMPOS_DADOS);
373 		}
374 		r.delete(r.length() - SEPARADOR_CAMPOS_DADOS.length(), r.length());
375 
376 		return r.toString();
377 	}
378 
379 	/**
380 	 * Recupera o nome da tabela de um determinado objeto.<br>
381 	 * 
382 	 * @author N/C
383      * @since N/C
384      * @version N/C
385 	 * @param Object o		- Objeto a ser descoberta a tabela
386 	 * @return String		- Nome da tabela
387 	 */
388 	private String getTableName(Object o) {
389 		Configuration conf = HibernateUtil.getConfiguration();
390 		Mappings map = conf.createMappings();
391 		Table tab = map.getClass(o.getClass().getName()).getTable();
392 		String tabela2 = tab.getName();
393 
394 		return tabela2;
395 	}
396 }