package br.com.citframework.util;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Types;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import br.com.citframework.excecao.LogicException;
/**
* Classe de utilitarios Geral
* Caso procure algo especifico, procure as demais classes de utilitarios.
* @author ney
*/
public class Util {
/**
* Retorna uma lista de program��es semanais
* @param hrIncial String
* @param hrFinal String
* @param intervalo BigDecimal
* @return ArrayList
* @throws LogicException
* @throws ParseException
*/
public static ArrayList getHorasProgramacaoSemanal(String hrIncial,
String hrFinal,BigDecimal intervalo) throws LogicException{
Date horaInicial = UtilFormatacao.formataHoraBigDecimalToDate(hrIncial);
Date horaFinal = UtilFormatacao.formataHoraBigDecimalToDate(hrFinal);
GregorianCalendar calendarHoraInicial = new GregorianCalendar();
calendarHoraInicial.setTime(horaInicial);
GregorianCalendar calendarHoraFinal = new GregorianCalendar();
ArrayList horas = new ArrayList();
String minuto = String.valueOf(intervalo);
calendarHoraFinal.setTime(horaFinal);
while (true) {
horas.add(horaInicial);
calendarHoraInicial.add(Calendar.MINUTE, Integer.valueOf(minuto)
.intValue());
horaInicial = calendarHoraInicial.getTime();
if (horaInicial.getTime() >= horaFinal.getTime()) {
horas.add(horaInicial);
break;
}
}
return horas;
}
public static Object getValorAtributo(Object obj, String atrib) {
Object result = null;
try {
result = Reflexao.getPropertyValue(obj, atrib);
}catch(Exception e){
return result;
}
return result;
}
public static final Boolean isVersionFree(HttpServletRequest request)throws Exception{
/* O arquivo free.txt e' criado ao gerar o build_free.xml e existe apenas na versao gratuita. */
File arquivo = new File(System.getProperty("user.dir") + "/pages/citsmartFree/free.txt");
try (InputStream is = new FileInputStream(arquivo)) {
is.read();
return true;
} catch (FileNotFoundException e) {
return false;
}
}
public static final void setValorAtributo(String atributo, Object obj, Object valor) throws Exception {
StringTokenizer str = new StringTokenizer(atributo, ".");
int elementos = str.countTokens();
String elemento = "";
if (valor instanceof BigDecimal)
valor = UtilNumbersAndDecimals.changeBigDecimalToDouble((BigDecimal) valor);
try {
while (str.hasMoreElements()) {
elemento = elemento + str.nextElement().toString();
if (elementos > 1) {
// Verificar se ja foi instanciado
Object objAux = Reflexao.getPropertyValue(obj, elemento);
if (objAux == null) {
Reflexao.setPropertyValue(obj, elemento, Reflexao.getReturnType(obj, elemento).newInstance());
}
elementos = elementos - 1;
elemento = elemento + ".";
} else
Reflexao.setPropertyValue(obj, elemento, valor);
}
} catch (IllegalArgumentException iaex) {
throw new Exception("O tipo de dado do atributo " + elemento + " da classe " + obj.getClass().getName() + " é diferente do tipo usado no banco de dados " + valor.getClass().getName());
}
}
public static final Object getObjectValue(Collection lista, String atributo, Object valor) {
Iterator it = lista.iterator();
while (it.hasNext()) {
Object obj = it.next();
Object val = getValorAtributo(obj, atributo);
if (val.equals(valor)) {
return obj;
}
}
return null;
}
public static final void geraXml(String arquivo, List lista) throws FileNotFoundException {
XMLEncoder e = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(arquivo)));
e.writeObject(lista);
e.close();
}
public static final List recuperaXML(String arquivo) throws FileNotFoundException {
XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream(arquivo)));
Object result = d.readObject();
d.close();
return (List) result;
}
public static List converteExcessao(Throwable e) {
List result = new ArrayList();
StackTraceElement[] ste = e.getStackTrace();
SimpleDateFormat spd = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
result.add(e.getClass() + ": " + e.getMessage() + ": " + spd.format(new Date()));
for (int i = 0; i < ste.length; i++) {
result.add(" at " + ste[i].getClassName() + "." + ste[i].getMethodName() + "(" + ste[i].getFileName() + ":" + ste[i].getLineNumber() + ')');
}
return result;
}
public static Collection getResultadoImplosao(String conta, String mascara) {
String contaMask = setMascaraContabil(conta, mascara);
List lista = new ArrayList();
StringTokenizer tok = new StringTokenizer(contaMask, ".");
String contaImplosao = "";
while (tok.hasMoreTokens()) {
contaImplosao = contaImplosao + tok.nextToken();
lista.add(ajustaContaContabil(contaImplosao, mascara));
}
return lista;
}
public static String setMascaraContabil(String conta, String mascara) {
String result = "";
StringTokenizer tok = new StringTokenizer(mascara, ".");
conta = ajustaContaContabil(conta, mascara);
int anterior = 0;
while (tok.hasMoreTokens()) {
String elemento = tok.nextToken();
if (anterior != 0) {
result = result + "." + conta.substring(anterior, anterior + elemento.length());
} else
result = result + conta.substring(anterior, anterior + elemento.length());
anterior = anterior + elemento.length();
}
return result;
}
public static String ajustaContaContabil(String conta, String mascara) {
StringTokenizer tok = new StringTokenizer(mascara, ".");
String tmp = "";
String result = conta;
while (tok.hasMoreTokens()) {
String elemento = tok.nextToken();
tmp = tmp + elemento;
}
int iTamanhoConta = conta.length();
int iTamanhoMascara = tmp.length();
if (iTamanhoConta < iTamanhoMascara) {
int resto = iTamanhoMascara - iTamanhoConta;
for (int i = 0; i < resto; i++) {
result = result + "0";
}
}
return result;
}
public static String getJavaType(int type) {
String result = null;
switch (type) {
case Types.BIGINT:
result = "Integer";
break;
case Types.DATE:
result = "java.sql.Date";
break;
case Types.BLOB:
result = "java.sql.Blob";
break;
case Types.BOOLEAN:
result = "Boolean";
break;
case Types.CHAR:
result = "String";
break;
case Types.DOUBLE:
result = "Double";
break;
case Types.FLOAT:
result = "Float";
break;
case Types.INTEGER:
result = "Integer";
break;
case Types.JAVA_OBJECT:
result = "Object";
break;
case Types.LONGVARCHAR:
result = "String";
break;
case Types.NUMERIC:
result = "Double";
break;
case Types.REAL:
result = "Double";
break;
case Types.SMALLINT:
result = "Integer";
break;
case Types.TIME:
result = "java.sql.Timestamp";
break;
case Types.TIMESTAMP:
result = "java.sql.Timestamp";
break;
case Types.TINYINT:
result = "Integer";
break;
case Types.VARCHAR:
result = "String";
break;
default:
result = null;
break;
}
return result;
}
public static Integer[] convertStrToArrayInteger(String strParaConvert, String token) {
if (strParaConvert == null)
return null;
if (strParaConvert.equalsIgnoreCase(""))
return null;
String strAux[] = strParaConvert.split(token);
if (strAux == null)
return null;
Integer[] intRetorno = new Integer[strAux.length];
for (int i = 0; i < strAux.length; i++) {
try {
if ("".equalsIgnoreCase(strAux[i].trim())){
intRetorno[i] = new Integer(0);
}else{
intRetorno[i] = new Integer(Integer.parseInt(strAux[i]));
}
} catch (Exception e) {
intRetorno[i] = null;
}
}
return intRetorno;
}
public static BigDecimal[] convertStrToArrayBigDecimal(String strParaConvert, String token) {
if (strParaConvert == null)
return null;
if (strParaConvert.equalsIgnoreCase(""))
return null;
String strAux[] = strParaConvert.split(token);
if (strAux == null)
return null;
BigDecimal[] intRetorno = new BigDecimal[strAux.length];
for (int i = 0; i < strAux.length; i++) {
try {
if ("".equalsIgnoreCase(strAux[i].trim())){
double x = 0;
intRetorno[i] = new BigDecimal(x);
}else{
intRetorno[i] = new BigDecimal(strAux[i]);
}
} catch (Exception e) {
intRetorno[i] = null;
}
}
return intRetorno;
}
public static String getTituloHistoricoExtintor(Integer id) {
return getMapHistoricoExtintor().get(id.toString()).toString();
}
private static Map getMapHistoricoExtintor() {
Map mapHistoricoExtintor = new HashMap();
mapHistoricoExtintor.put("2", "Inspecionado");
mapHistoricoExtintor.put("3", "Reparado");
mapHistoricoExtintor.put("4", "Instrucao");
mapHistoricoExtintor.put("5", "Incendio");
mapHistoricoExtintor.put("2", "Inspecionado");
return mapHistoricoExtintor;
}
/**
* Retorna lista de uma String separada por um token qualquer
*
* @param acessos
* @return
* @author wagner.filho
*/
public static List getListaDeToken(String riscos, String token) {
List listaRetorno = new ArrayList();
StringTokenizer st = new StringTokenizer(riscos, token);
while (st.hasMoreTokens()) {
listaRetorno.add(st.nextToken());
}
return listaRetorno;
}
public static String comparacaoSQLString (String campo, String comparacao, String parametro,List listaParametros){
String funcaoUpper = Constantes.getValue("FUNC_UPPER");
if(funcaoUpper!=null && funcaoUpper.trim().length()>0){
funcaoUpper= funcaoUpper.replaceAll("<FIELD>", campo);
listaParametros.add(parametro.toUpperCase());
return " "+funcaoUpper+" "+comparacao+" ?";
}else{
listaParametros.add(parametro);
return " "+campo+" "+comparacao+" ?";
}
}
public static String getNomeClasseSemPacote(Class classe){
String str = classe.getName();
StringTokenizer st =new StringTokenizer(str,".");
String result = "";
while(st.hasMoreTokens()){
result = st.nextToken();
}
return result;
}
public static String geraSenhaAleatoria(int numCaracteres){
String result="";
for(int i=1;i<=numCaracteres;i++){
result+=getCaracterAleatorio();
}
return result;
}
public static char getCaracterAleatorio(){
char[] str = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','v','x','y','z','1','2','3','4','5','6','7','8','9','0'};
return str[new Double(62*Math.random()).intValue()];
}
public static int geraNumeroAleatorio(int limite){
return new Double(limite*Math.random()).intValue();
}
}