Mostrando entradas con la etiqueta java. Mostrar todas las entradas
Mostrando entradas con la etiqueta java. Mostrar todas las entradas

jueves, abril 19, 2012

Instalar y usar Subversion (SVN) en modo local en Windows e integración en Eclipse

Trabajando en casa en mis últimos proyectos de programación, echaba en falta un sistema de control de versiones para mi código fuente y usarlo de forma local en mi ordenador, es decir, sin disponer de un servidor externo que haga las veces de repositorio.

Como sabéis hay varios sistemas: CVS, Subversion, etc...

Me he decidido por Subversion (SVN). Como lo quiero instalar en una máquina Windows, he usado la versión binaria publicada aquí, desde donde se puede descargar.

Una vez descargada, la ejecutamos e instalamos. Ahora hay que crear los repositorios, para ello:

  • Abrimos una consola (Menú inicio -> Ejecutar -> CMD).
  • Creamos una carpeta de repositorio, yo por ejemplo la he creado en la raíz de la unidad C:
    • cd \
    • mkdir svnrepo
    • cd svnrepo
  • Ahora crearemos una carpeta en el repositorio para los proyectos. En mi caso como voy a guardar proyectos java, creo una con ese nombre:
    • svnadmin create java
Ya hemos acabado la primera fase. Ahora procedemos a realizar la integración con Eclipse. Yo utilizo la versión en desarrollo (4.2 M6), aunque esto también funciona para la última rama estable actual (3.7.x).

Necesitamos instalar el plugin Subclipse. Desde la web, en la sección Download and Install obtenemos las url necesarias para su instalación en Eclipse, vienen denominadas como "Eclipse update site URL". Pues bien, en mi caso, voy a instalar la última disponible, que corresponde a la versión 1.8.x, y su url es: http://subclipse.tigris.org/update_1.8.x

Con esa url, abro eclipse y hago lo siguiente:
  • Pincho en Help -> Install New Software.
  • Presiono el botón ADD
  • Pongo lo siguiente en los campos:
    • Name: Subclipse
    • Location: http://subclipse.tigris.org/update_1.8.x
  • Presiono OK
  • Marco los paquetes que se recuperan del servidor y procedemos a su instalación.
  • Eclipse se reiniciará.
Ahora ya podemos poner los proyectos que queramos en el repositorio. Para ello, pinchamos con el botón derecho en el título del proyecto que queramos dentro del navegador de paquetes de eclipse (en mi caso columna de la izquierda - Package Explorer) y seleccionamos: Team -> Share Project

Saldrá una ventana que nos ofrece la posibilidad entre usar CVS y SVN. Seleccionamos SVN y le damos a continuar (Next).

Ahora la aplicación nos ofrece la posibilidad entre usar un repositorio existente (si es que tenemos) o crear uno nuevo. En nuestro caso dado que estamos creando uno nuevo, optaremos por la crear uno nuevo (Create a new repository location). Le damos a Next.

Ahora nos pide la URL del repositorio. Como estamos usando un repositorio local, utilizaremos el protocolo file:// e introduciremos el path completo hasta el repositorio. En mi caso tengo que introducir: file:///C:/svnrepo/java

El proyecto se creará en el repositorio, puede que eclipse quiera cambiar el modo de vista a colaborativo; yo prefiero no cambiarlo.

Ahora hay que decidir qué carpetas introducimos. Por ejemplo la de las fuentes de las aplicaciones, en mi caso src. Para ello pincho con el botón derecho en la carpeta y le damos a Team -> Commit.

Ponemos un comentario y aceptamos el commit. Ya disponemos de esas carpetas en el repositorio y podemos agregar versiones nuevas, comparar con antiguas y todas las ventajas que ofrece un sistema de control de versiones como SVN. A partir de aquí recomiendo leer un poco la documentación de SVN para los que no hayáis trabajado con él previamente.



martes, agosto 29, 2006

Java: personalizando JFileChooser

Recientemente, programando en java, he necesitado modificar un JFileChooser para poder introducir un componente adicional en la misma línea de los botones de control (abrir y cancelar).

El JFileChooser es una clase un poco especial, ya que usa bastantes componentes nativas en el UI. Buscando por internet he encontrado algunas ideas que me han sido útiles, pero nada concreto que me resolviese el problema del todo.

Quería agregar un JCheckBox con una opción, para que el fichero abriese una sesión en la misma ventana de una aplicación o en una nueva, y pensé que el JFileChooser era un lugar apropiado para ofrecer la opción.

El truco está en sustituir la parte baja del panel con uno nuevo, que incluya dos botones que emulen a los anteriores, y que contenga además el resto de componentes que necesitemos. Otro truco está en hacer que con un PropertyListener se agregue el nuevo panel en el momento adecuado, ya que si no se hace así no funciona.

El resultado sería algo así:


Y el código fuente sería:

------------------------------------------------

import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JPanel;

/**
* Ejemplo de personalización de JFileChooser
* @author airon
* Publicado en http://webpacifica.blogspot.com/
*/
public class CustomJFileChooser extends JFileChooser
{
public CustomJFileChooser (JComponent component)
{
super();
this.setControlButtonsAreShown(false);

JButton acceptB = new JButton("Open");
JButton cancelB = new JButton("Cancel");

final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel,BoxLayout.X_AXIS));
panel.add(component);
panel.add(Box.createHorizontalGlue());
panel.add(acceptB);
panel.add(Box.createHorizontalStrut(4));
panel.add(cancelB);

Insets insets = this.getInsets();

panel.setBorder(BorderFactory.createEmptyBorder(
insets.top,
((insets.left>=2)?insets.left-2:insets.left),
insets.bottom,insets.right));

acceptB.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent arg0) {
approveSelection();
}

});

cancelB.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent arg0) {
cancelSelection();
}

});

// Tricky way to add an extra component to the dialog
addPropertyChangeListener("ancestor",
new PropertyChangeListener(){
public void propertyChange(PropertyChangeEvent arg0)
{
getParent().add(panel,BorderLayout.SOUTH);
}
});
}


public static void main (String args[])
{
JCheckBox cb = new JCheckBox("Hello!",false);
JFileChooser jfc = new CustomJFileChooser(cb);
int returnVal = jfc.showOpenDialog(null);
System.out.println("Checkbox selected: "+cb.isSelected());

System.exit(0);
}
}