package br.com.centralit.citcorpore.ajaxForms;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.centralit.citajax.html.AjaxFormAction;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citcorpore.bean.ToolDataBaseDTO;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
import br.com.citframework.integracao.ConnectionProvider;
import br.com.citframework.integracao.JdbcEngine;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilI18N;
/**
*
* @author fl�vio.santana
*
*/
public class ToolDataBase extends AjaxFormAction {
protected JdbcEngine engine = new JdbcEngine(Constantes.getValue("DATABASE_ALIAS"), null);
/**
* Inicializa os dados ao carregar a tela.
*
* @param document
* @param request
* @param response
* @throws Exception
*/
public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
ToolDataBaseDTO toolDataBase = (ToolDataBaseDTO) document.getBean();
Connection conn = ConnectionProvider.getConnection(Constantes.getValue("DATABASE_ALIAS"));
if (conn != null) {
try {
request.getSession().setAttribute("dadosSGBD", null);
Map<Integer, String> dadosSGBD = new HashMap<Integer, String>();
conn.getCatalog();
conn.getTypeMap();
dadosSGBD.put(1, CITCorporeUtil.SGBD_PRINCIPAL);
if(CITCorporeUtil.SGBD_PRINCIPAL.equalsIgnoreCase("oracle")){
dadosSGBD.put(2, conn.getMetaData().getUserName());
}else{
dadosSGBD.put(2, conn.getCatalog());
}
dadosSGBD.put(3, conn.getMetaData().getURL());
request.getSession().setAttribute("dadosSGBD", dadosSGBD);
} catch (Exception e) {
} finally {
try {
if(conn!=null && !conn.isClosed()){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
String sql = "";
if(CITCorporeUtil.SGBD_PRINCIPAL.equalsIgnoreCase("oracle")){
sql = "SELECT TABLE_NAME FROM USER_TABLES ORDER BY TABLE_NAME ";
}else{
sql = "SELECT table_name FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema') order by table_name";
}
StringBuilder dadosResutado = new StringBuilder();
List<Object[]> tabelas = execSQL(sql, toolDataBase.getQuantRows());
dadosResutado.append("<label class='tabTab'><b>"+UtilI18N.internacionaliza(request, "tooldatabase.tabela")+"</b></label>");
dadosResutado.append("<label class='tabAtu' onclick='createTable()'><b>"+UtilI18N.internacionaliza(request, "tooldatabase.criaTabela")+"</b></label><br /><br />");
if (tabelas != null) {
for (Object[] dados : tabelas) {
dadosResutado.append("<b><a href='#' onclick=\"acao('" + dados[0] + "')\">" + dados[0] + "</a></b><br />");
}
}
document.getElementById("estTabelas").setInnerHTML(dadosResutado.toString());
}
public List<Object[]> execSQL(String sql, String quantRows)throws Exception{
if(quantRows == null){
quantRows = "1000";
}
List<Object[]> tabelas = engine.execSQL(sql, null, new Integer(quantRows));
return tabelas;
}
public void executaSQL(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
ToolDataBaseDTO toolDataBase = (ToolDataBaseDTO) document.getBean();
StringBuilder sql = new StringBuilder();
sql.append("<label><b>"+UtilI18N.internacionaliza(request, "tooldatabase.resultadoScriptSQL")+"</b></label><label><b>"+UtilI18N.internacionaliza(request, "tooldatabase.quantRows") +": "
+ "<input type=\"text\" id=\"quantRows\" name=\"quantRows\" value=\"1000\" /> </b></label><br /><br />");
if (toolDataBase.getTipoAcao() == null) {
toolDataBase.setTipoAcao("");
}
Integer resultado = 0;
if (toolDataBase.getStrExec() != null || !toolDataBase.getStrExec().equalsIgnoreCase("")) {
if (toolDataBase.getStrExec().toLowerCase().contains("select")) {
List<Object[]> lista = null;
try {
lista = execSQL(toolDataBase.getStrExec(), toolDataBase.getQuantRows());
sql.append("<label class='infoResultado'>"+UtilI18N.internacionaliza(request, "tooldatabase.resultadoConsulta")+"</label><br /><table>");
if (lista != null) {
for (Object[] dados : lista) {
sql.append("<tr>");
for (Object dados2 : dados) {
sql.append("<td>" + dados2 + "</td>");
}
sql.append("</tr>");
}
}
} catch (Exception e) {
sql.append(e.getMessage());
}
} else {
try {
resultado = engine.execUpdate(toolDataBase.getStrExec(), null);
if (resultado != null)
sql.append(UtilI18N.internacionaliza(request, "tooldatabase.executadoSucesso"));
} catch (Exception e) {
sql.append(e.getMessage());
}
}
sql.append("</table>");
}
document.getElementById("outputSQL").setInnerHTML(sql.toString());
load(document, request, response);
}
public void executaMontaSQL(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
ToolDataBaseDTO toolDataBase = (ToolDataBaseDTO) document.getBean();
StringBuilder sql = new StringBuilder();
StringBuilder saidaResultado = new StringBuilder();
if(toolDataBase.getTipoAcao() == null){
toolDataBase.setTipoAcao("");
}
if(!toolDataBase.getTipoAcao().equalsIgnoreCase("")){
String sqlCamposTabela = "select attname from pg_attribute where attstattarget = -1 and attrelid = ( select pg_class.oid as table_id from pg_class left join pg_namespace on pg_class.relnamespace = pg_namespace.oid "
+ "where pg_class.relname = '"+toolDataBase.getTabela().trim()+"' and pg_namespace.nspname = 'public');";
if(toolDataBase.getTipoAcao().equalsIgnoreCase("list")){
sql.append("SELECT ");
List<Object[]> lista = execSQL(sqlCamposTabela, toolDataBase.getQuantRows());
if(lista != null){
int cont = 1;
for(Object[] dados : lista){
if(cont != lista.size()){
sql.append( dados[0] + " ,");
}else{
sql.append( dados[0] + " ");
}
cont++;
}
sql.append(" FROM "+ toolDataBase.getTabela().trim() +" ");
sql.append(";");
document.getElementById("strExec").setValue(sql.toString());
toolDataBase.setTipoAcao("");
toolDataBase.setStrExec(sql.toString());
document.setBean(toolDataBase);
executaSQL(document, request, response);
}
}else if(toolDataBase.getTipoAcao().equalsIgnoreCase("insert")){
sql.append("INSERT INTO "+ toolDataBase.getTabela().trim() +" ( ");
List<Object[]> lista = execSQL(sqlCamposTabela, toolDataBase.getQuantRows());
if(lista != null){
int cont = 1;
for(Object[] dados : lista){
if(cont != lista.size()){
sql.append( dados[0] + " ,");
}else{
sql.append( dados[0] + " ");
}
cont++;
}
sql.append(" ) VALUES ( ");
cont = 1;
for(Object[] dados : lista){
if(cont != lista.size()){
sql.append( "? ,");
}else{
sql.append( "? ");
}
cont++;
}
sql.append(" ) ;");
document.getElementById("strExec").setValue(sql.toString());
}
}else if(toolDataBase.getTipoAcao().equalsIgnoreCase("update")){
sql.append("UPDATE "+ toolDataBase.getTabela().trim() +" SET ");
List<Object[]> lista = execSQL(sqlCamposTabela, toolDataBase.getQuantRows());
if(lista != null){
int cont = 1;
for(Object[] dados : lista){
if(cont != lista.size()){
sql.append( dados[0] + " = ? ,");
}else{
sql.append( dados[0] + " = ? ");
}
cont++;
}
sql.append(" WHERE ");
for(Object[] dados : lista){
sql.append( dados[0] + " = ? ");
break;
}
sql.append(";");
document.getElementById("strExec").setValue(sql.toString());
}
}else if(toolDataBase.getTipoAcao().equalsIgnoreCase("createTable")){
sql.append("CREATE TABLE nomeTabela ( ");
sql.append(");");
document.getElementById("strExec").setValue(sql.toString());
}else if(toolDataBase.getTipoAcao().equalsIgnoreCase("del")){
sql.append("DELETE FROM "+ toolDataBase.getTabela().trim() +" WHERE ");
List<Object[]> lista = execSQL(sqlCamposTabela, toolDataBase.getQuantRows());
if(lista != null){
for(Object[] dados : lista){
sql.append( dados[0] + " = ? ");
break;
}
sql.append(";");
document.getElementById("strExec").setValue(sql.toString());
}
}else if(toolDataBase.getTipoAcao().equalsIgnoreCase("drop")){
Integer resultado = null;
saidaResultado.append("<label><b>"+UtilI18N.internacionaliza(request, "tooldatabase.resultadoConsulta")+"</b></label><label><b>"+UtilI18N.internacionaliza(request, "tooldatabase.quantRows")+": "
+ "<input type=\"text\" id=\"quantRows\" name=\"quantRows\" value=\"1000\" /> </b></label><br /><br />");
sql.append("DROP TABLE "+ toolDataBase.getTabela().trim() +"");
sql.append(";");
document.getElementById("strExec").setValue(sql.toString());
toolDataBase.setStrExec(sql.toString());
try {
resultado = engine.execUpdate(toolDataBase.getStrExec(), null);
if (resultado != null)
saidaResultado.append(UtilI18N.internacionaliza(request, "tooldatabase.executadoSucesso"));
} catch (Exception e) {
saidaResultado.append(e.getMessage());
}
document.getElementById("outputSQL").setInnerHTML(saidaResultado.toString());
load(document, request, response);
}else if(toolDataBase.getTipoAcao().equalsIgnoreCase("addColumn")){
sql.append("ALTER TABLE "+ toolDataBase.getTabela().trim() +" ADD COLUMN nomeColuna tipoColuna");
sql.append(";");
document.getElementById("strExec").setValue(sql.toString());
}
}
document.executeScript("$(\"#POPUP_ACAO\").dialog(\"close\");");
}
/**
* Restaura os dados ao clicar em um registro.
*
* @param document
* @param request
* @param response
* @throws Exception
*/
public void commit(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
ToolDataBaseDTO toolDataBase = (ToolDataBaseDTO) document.getBean();
}
/**
* recupera os dados ao carregar p�gina
*
* @param document
* @param request
* @param response
* @throws Exception
*/
public Class<ToolDataBaseDTO> getBeanClass() {
return ToolDataBaseDTO.class;
}
}