martes, 23 de junio de 2009

Copiar archivos de maquina a otra con scp (sh)

Hace un par de días me tope con el problema de enviar archivos de una maquina a otra y ocupe el siguiente comando:

isaac@mew:~/Escritorio$ scp -r /home/isaac/xml_redes/redcolego_q/ usuario@dominio_o_ip:/usr/local/apache-tomcat-5.5.17/webapps/redes/xml/

y el comando funciona a la perfección solo con un detalle que copio la todos los archivos incluyendo a la carpeta redcolego_q/ dentro de xml/, y yo solo necesitaba copiar el contenido.

Con este comando solo copias el contenido.

scp /home/isaac/xml_redes/redcolego_q/* usuario@dominio_o_ip:/usr/local/apache-tomcat-5.5.17/webapps/redes/xml/

También lo podemos hacer con un .sh le mostrare como, aunque es mas sencillo con con el ejemplo de arriba, con el .sh podemos incluir mas funcionalidades.

Primero necesitamos un keygen y manera de optenerlo es:
Esto es para la maquina donde copiaremos los archivos, de esta manera cuando ejecutemos el comando no pediran el password con cada archivo.
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@dominio_o_ip

acontinuación les pedira el password

martes, 16 de junio de 2009

Itex en una aplicación web (Generar pdf)

Por fin encontré como enviar un documento pdf generado de manera dinámica desde el servidor al cliente, pues resulta que encontré un código en la web que según lo hacia pero tenia un linea mal y quizás la mas importante por lo general cuando llamamos a un servlet lo hace por metodo

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{....}

el cual realiza una acción según sea el caso puede responder con texto plano, html, xml, json ect, pero también puede ocupar el método

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

También puede responder de la misma manera que goGet, si nosotros queremos responder con html,json, xml, texto plano, o con un pdf que es al final de cuentas es resp.setContentType("application/pdf") que es un objeto de tipo HttpServletResponse resp que es lo que el servlet de responderá al cliente, como nosotros no sabemos como un cliente puede solicitar nuestro pdf nosotros tendremos que generar un método para ambos

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

Que en el caso de netbeans lo hace al crear un servlet, bueno si lo hacen con netbeans borren lo que tenga dentro de ese metodo.

El código es el siguiente:


package pdf.servlet;



import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Paragraph;


/**
*
* @author isaac
*/

public class CrearPdf extends HttpServlet {

/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.

* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

try {

response.setContentType("application/pdf"); // Code 1
Document document = new Document();
PdfWriter.getInstance(document,response.getOutputStream()); // Code 2
document.open();
float[] widths = {25f, 25f, 20f,15f,15f};
PdfPTable table = new PdfPTable(5); //Code 3
table.setHorizontalAlignment(Element.ALIGN_LEFT);
table.setWidthPercentage(100);
PdfPCell cell =new PdfPCell(new Paragraph("Prueba"));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setColspan(5);
table.addCell(cell);
table.addCell("Scanned Fax FileName");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Name");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Account");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Credit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Debit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);



document.add(table);
document.close();

}catch(DocumentException e){
e.printStackTrace();
}catch (Exception e) {

// TODO: handle exception

}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}



/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}


/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/

@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>

}

El web.xml es el siguiente en el caso de Netbeans no es necesario puesto que lo mapea cuando creas el servlet.

<servlet>
<servlet-name>CrearPdf</servlet-name>
<servlet-class>pdf.servlet.CrearPdf</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>CrearPdf</servlet-name>
<url-pattern>/creaPdf</url-pattern>
</servlet-mapping>

y final mente run...

jueves, 11 de junio de 2009

JPanel transparente (Parte 4)

Lo primero que quiero decir es que ya limpie mi escritorio, bueno primero quiero reconocer que algunas ideas que tome para el panel transparente por no decir todo el código lo tome de este blog http://edisoncor.wordpress.com/2007/10/06/jpanel-con-imagen/, un punto mas corregí el código de la parte tres para que quede mejor el borde, después agregare los códigos, bueno antes quiero que observen como van mejorando la interfaz.



Este es el cogido del borde mejorado:

package vista;

/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color3 = new Color(1,1,1);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor3(),
getWidth(), getHeight(),getColor3()));
g2.drawRoundRect(0, 0, getWidth()-1 , getHeight()-1, getArcw()-2,getArch()-6);
g2.setPaint(Color.black);
}

public Color getColor3() {
return color3;
}

public void setColor3(Color color3) {
this.color3 = color3;
}



public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}

Este el código para que el panel sea transparente:


package vista;

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;


/**
*
* @author Edisoncor
*/
public class IPanelTrans extends IPanel{

private float tran= 0.8f;



@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
AlphaComposite old = (AlphaComposite) g2.getComposite();
g2.setComposite(AlphaComposite.SrcOver.derive(getTran()));
super.paintComponent(g);
g2.setComposite(old);
}

public float getTran() {
return tran;
}

public void setTran(float tran) {
this.tran = tran;
}

}

Como agragarlo por si tienen duda en su palette hay una opción beans dan click en choose bean, aparecera una pantalla como la siguiente y escriben lo siguiente vista.IPanelTrans despues la arrastran hasta su FormPanel y listo


En la propiedades aparecera un atributo llamado tran por defecto tiene .5 pero pueden cambiarlo...




Bueno en la parte uno explico como agregarlo a un FormPanel y despues a un Frame, como pueden notar no parece transparente, bueno en blog donde tome este codigo esta un JPanel con imagen de fondo tome el código y lo mejore un poco para que puedan agregar una imagen desde las propiedades (ruta), pero eso lo explicare en la parte 5...

miércoles, 10 de junio de 2009

JPanel con Gradiente redondeado (Parte 3)

Bueno la parte dos de este pequeño tutorial tiene solo la elección de dos colores este nuevo tiene la elección de tres colores, también pueden elegir el color del borde, este es el código:

package vista;

/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color3 = new Color(1,1,1);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor3(),
getWidth(), getHeight(),getColor3()));
g2.drawRoundRect(0, 0, getWidth()-1 , getHeight(), getArcw(),getArch());
g2.setPaint(Color.black);
}

public Color getColor3() {
return color3;
}

public void setColor3(Color color3) {
this.color3 = color3;
}



public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}




Espero hacer el panel transparente, pero que no tenga problemas al agregar widgets

lunes, 8 de junio de 2009

JPanel con Gradiente redondeado con widgets de swing para Netbeans (Parte 2)

En la primera parte vimos como hacer un gradiente con un JLayeredPane, ahora el siguiente paso es hacer los bordes redondeados. el código es el siguiente.

package vista;
/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor2(),
getWidth(), getHeight(),getColor1()));
g2.drawRoundRect(0, 0, getWidth() , getHeight(), getArcw()+2,getArch()+2);
g2.setPaint(Color.black);
}

public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}


Y para agregarlo a su JFrame esta en la parte 1 de este pequeñito tutorial, mas o memos le debería quedar algo como esto.