/*
 * Creado el 20-dic-04
 *
 * Para cambiar la plantilla para este archivo generado vaya a
 * Ventana&gt;Preferencias&gt;Java&gt;Generación de código&gt;Código y comentarios
 */

/**
 * @author Jorge
 *
 * Para cambiar la plantilla para este comentario de tipo generado vaya a
 * Ventana&gt;Preferencias&gt;Java&gt;Generación de código&gt;Código y comentarios
 */

import java.sql.*;
import com.ibm.*;
import com.microsoft.jdbc.*;

public class AsToSQLServer {
	
	private Connection cxAS400 = null;
	private Connection cxSQLSrv = null;
	
	// Dirección IP del servidor SQLServer
	private String DirIpSQLServer;
	// Puerto, (SQLServer (por defecto 1433))
	private String PuertoSQLServer;
	// Usuario de Conexión a SQLServer
	private String UsuarioSQLServer;
	// Password en SQLServer
	private String PassWSQLServer;
	// Base de datos de SQL Server
	private String DBSQLServer;
	// Tabla en SQL Server
	private String TBLSQLServer;
	
	// Dirección IP del servidor iSeries
	private String DirIpiSeries;
	// Puerto, (iSeries)
	private String PuertoiSeries;
	// Usuario de Conexión a iSeries
	private String UsuarioiSeries;
	// Password en iSeries
	private String PassWiSeries;
	// Base de datos de iSeries
	private String DBiSeries;
	// Tabla en iSeries
	private String TBLiSeries;

	public AsToSQLServer(){

	}
	
	public boolean isConectSQLServer(){
		
		// System.out.println("Registrando driver jdbc:freetds:sqlserver");

		if (this.cxSQLSrv != null ) {
			
			return true;
			
		} else {
			
			try{
				// Registrando el driver de conexión
				Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
			
				// System.out.println("Conectando a SQL Server");
	
				String datosConexion =
					"jdbc:microsoft:sqlserver://" + 
					this.DirIpSQLServer.trim() + ":" + this.PuertoSQLServer.trim() + 
					";DataName=" + this.DBSQLServer.trim() + 
					";user=" + this.UsuarioSQLServer.trim() + 
					";password=" + this.PassWSQLServer.trim();

				this.cxSQLSrv = DriverManager.getConnection ( datosConexion );
   	
				// System.out.println("Conectado a SQL Server");
		
				return true;
			
			} catch(Exception e) {
	  			
				// System.out.println("Error al conectar al SQL Server: " + e);
				
				this.cxSQLSrv=null;
				try {
					System.in.read();
				} catch(Exception e2){
				}
				
				return false;
		 
	  		}
		}
	}
	
	
	public boolean isConectiSeries(){
		// System.out.println("Registrando driver jdbc:as400");

		if (this.cxAS400 != null ) {
			
			return true;
			
		} else {
			
			try{
				// Registrando el driver de conexión				
				DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
				
				// System.out.println("Conectando al AS400");
				
				String datosConexion =
					"jdbc:as400://" + 
					this.DirIpiSeries.trim() +  
					";user=" + this.UsuarioiSeries.trim() + 
					";password=" + this.PassWiSeries.trim();
					
				// System.out.println("Los datos para la conexión son " + datosConexion);
				
				for (int i=0; i>100000000; i++){
				}
				
				this.cxAS400= java.sql.DriverManager.getConnection(datosConexion);
				
				this.cxAS400.setAutoCommit(false);
				
				// System.out.println("Conectado al AS400");
						
				return true;
			
			} catch(Exception e) {
	  	
				// System.out.println("Error al conectar al iSeires: " + e);
		
				this.cxAS400 = null;
		
				return false;
		 
			}
		}
	}
	
	public boolean borrarTBLDest(){
		      
		// System.out.println("Intentamos borrar " + this.TBLSQLServer + " de SQL Server");
		
		String sentencia = "TRUNCATE TABLE " + this.TBLSQLServer;
		
		try{
				
			PreparedStatement delete = this.cxSQLSrv.prepareStatement(sentencia);
		
			delete.executeUpdate();
			
			// System.out.println("Tabla " + this.TBLSQLServer + " de SQL Server Borrada");
			
			return true;
			
		} catch(Exception e) {
			
			// System.out.println("Tabla SQL Server no borrada");
    
			return false;
		}
	}
	
	public boolean copiarTBLdeiSeries(){
		
		// System.out.println("Intentamos copiar la tabla " + this.TBLiSeries + " a la tabla " + this.TBLSQLServer +
		//	" de SQL Server");
			
		try{
			
			String sentenciaSelect = "select * from " + this.DBiSeries.trim() + "." + this.TBLiSeries;
			
			Statement stAS400 = this.cxAS400.createStatement();
			
			ResultSet rsAS400 = stAS400.executeQuery( sentenciaSelect );
			
			int numCampos = rsAS400.getMetaData().getColumnCount();

			//Valores a incorporar en el Insert en SQL Server
			String values="";
			
			for(int n=1;n <= numCampos;n++){
				
			  if (n < numCampos) values = values + "?,";
			  else values = values + "?";
			}
    
			//Sentencia para inserción en SQL Server
			String sentenciaInsert = "insert into " + this.TBLSQLServer + " values(" + values + ")";
			
			PreparedStatement insert = this.cxSQLSrv.prepareStatement( sentenciaInsert );

			// System.out.println("Iniciando exportación AS400 -> SQL Server");
			
			// System.out.println("Exportando de " + this.TBLiSeries + " a " + this.TBLSQLServer);
			
			//Leer tabla AS400 e insertar en SQL Server
			while (rsAS400.next()){

			  for(int f=1; f <= (numCampos); f++){
				insert.setString(f,rsAS400.getString(f));
			  }
			  
			  insert.executeUpdate();
			  
			}

			rsAS400.close();
			
			insert.close();
			
			// System.out.println("Se ha realizado la exportación de la tabla " + this.TBLiSeries + 
			//	" a la tabla " + this.TBLSQLServer + " del SQL Server.");
			
			return true;

		  }catch(Exception e){
		  	
			// System.out.println(e.getMessage());
			
			return false;
			
		}
	}
	
	/**
	 * @return
	 */
	public String getDBiSeries() {
		return DBiSeries;
	}

	/**
	 * @return
	 */
	public String getDBSQLServer() {
		return DBSQLServer;
	}

	/**
	 * @return
	 */
	public String getDirIpiSeries() {
		return DirIpiSeries;
	}

	/**
	 * @return
	 */
	public String getDirIpSQLServer() {
		return DirIpSQLServer;
	}

	/**
	 * @return
	 */
	public String getPassWiSeries() {
		return PassWiSeries;
	}

	/**
	 * @return
	 */
	public String getPassWSQLServer() {
		return PassWSQLServer;
	}

	/**
	 * @return
	 */
	public String getPuertoiSeries() {
		return PuertoiSeries;
	}

	/**
	 * @return
	 */
	public String getPuertoSQLServer() {
		return PuertoSQLServer;
	}

	/**
	 * @return
	 */
	public String getTBLiSeries() {
		return TBLiSeries;
	}

	/**
	 * @return
	 */
	public String getTBLSQLServer() {
		return TBLSQLServer;
	}

	/**
	 * @return
	 */
	public String getUsuarioiSeries() {
		return UsuarioiSeries;
	}

	/**
	 * @return
	 */
	public String getUsuarioSQLServer() {
		return UsuarioSQLServer;
	}

	/**
	 * @param string
	 */
	public void setDBiSeries(String string) {
		DBiSeries = string;
	}

	/**
	 * @param string
	 */
	public void setDBSQLServer(String string) {
		DBSQLServer = string;
	}

	/**
	 * @param string
	 */
	public void setDirIpiSeries(String string) {
		DirIpiSeries = string;
	}

	/**
	 * @param string
	 */
	public void setDirIpSQLServer(String string) {
		DirIpSQLServer = string;
		// System.out.println("Dirección SQL Server " + DirIpSQLServer);
	}

	/**
	 * @param string
	 */
	public void setPassWiSeries(String string) {
		PassWiSeries = string;
	}

	/**
	 * @param string
	 */
	public void setPassWSQLServer(String string) {
		PassWSQLServer = string;
		// System.out.println("Dirección SQL Server " + PassWSQLServer);
	}

	/**
	 * @param string
	 */
	public void setPuertoiSeries(String string) {
		PuertoiSeries = string;
	}

	/**
	 * @param string
	 */
	public void setPuertoSQLServer(String string) {
		PuertoSQLServer = string;
		// System.out.println("Dirección SQL Server " + PuertoSQLServer);
	}

	/**
	 * @param string
	 */
	public void setTBLiSeries(String string) {
		TBLiSeries = string;
	}

	/**
	 * @param string
	 */
	public void setTBLSQLServer(String string) {
		TBLSQLServer = string;
	}

	/**
	 * @param string
	 */
	public void setUsuarioiSeries(String string) {
		UsuarioiSeries = string;
	}

	/**
	 * @param string
	 */
	public void setUsuarioSQLServer(String string) {
		UsuarioSQLServer = string;
		// System.out.println("Dirección SQL Server " + UsuarioSQLServer);
	}

}
