Nombre de Proyecto y Plug-in ID

La comunidad de Eclipse utiliza una convención para los identificadores de los plug-in's, así como para los espacios de nombres de los proyectos. Esto se debe a que muchos plug-ins terminan siendo las fuentes de otros plug-ins, y es necesario que estos sean identificados únivocamente mediante un identificador único global dentro de la comunidad.

Como cada plug-in se desarrolla como un proyecto, esta convención se adopta tanto para identificar el plug-in como para el nombre del proyecto, es decir, utilizaremos el mismo nombre como identificador y nombre de proyecto.

Otra utilidad que presenta este convenio, es que podemos saber el dominio al que pertenece el plug-in, es decir, si tenemos un plug-in que se llama "com.coolimagingproject.coolimaging", sabremos que el propietario de este plug-in es www.coolimagingproject.com. Por lo que debería asegurarse que tiene los derechos del dominio al que hace referencia.

Ambas prácticas son convenciones y no reglas. Por ello, podríamos tener un proyecto llamado colorOperations y establecer el identificador del plug-in como "com.coolimagingproject.colorOperations", pero se hace más difícil recordar que proyecto se empareja con que plug-in.

Buenas prácticas de programación

Como buena práctica de programación se recomienda a los desarrolladores realizar clases bien definidas. Por eso para los plug-ins de operaciones de la aplicación se recomienda realizar una clase Operador, la cuál podría utilizarse en otras aplicaciones al no ser dependiente de la aplicación. Y un OperadorAplicacion, que haga uso del Operador y que si será dependiente de la aplicación. Los ejemplos mostrados a lo largo de este manual hacen uso de esta filosofía de programación.

Identificadores de Parámetros

Algunas operaciones requieren de una serie de parámetros para poder ser ejecutadas, este es el caso del operador rotación, que necesita conocer el ángulo de rotación; el centro de rotación; el método de interpolación usado para corregir los errores que surgen a consecuencia de realizar la rotación; el método de extensión del borde para tratar los píxeles que caen fuera de la imagen, y un campo que indica si se quiere que la imagen sea centrada tras la rotación.

Estos parámetros se pueden tratar como int (y no utilizar ningún nombre simbólico), o como CONSTANTES como en el OperadorRotacion.java.

Recomendación: haga uso de constantes para facilitar la comprensión del código.

OperadorRotacion.java

...

/**
  * Identificador del parámetro que representa el ángulo de rotación, medido
  * en radianes y en sentido antihorario. El objeto asociado es de tipo
  * float.
  */
  public static final int PARAMETRO_ANGULO_ROTACION = 10;
/**
  * Identificador del parámetro que representa la coordenada X del centro de
  * rotación. El objeto asociado es de tipo float.
  */
  public static final int PARAMETRO_CENTRO_ROTACION_X = 11;
/**
  * Identificador del parámetro que representa la coordenada Y del centro de
  * rotación. El objeto asociado es de tipo float.
  */
  public static final int PARAMETRO_CENTRO_ROTACION_Y = 12;
/**
  * Identificador del parámetro que representa el método de interpolación
  * usado para tratar la imagen tras la rotación. El objeto asociado es de
  * tipo Interpolation.
  */
  public static final int PARAMETRO_METODO_INTERPOLACION = 13;
/**
  * Identificador del parámetro que representa el método usado para el
  * tratamiento del borde de la imagen en la rotación. El objeto asociado es
  * de tipo BorderExtender.
  */
  public static final int PARAMETRO_METODO_BORDE = 14;
/**
  * Identificador del parámetro que indica si la imagen, tras ser rotada,
  * debería ser trasladada para quedar centrada (su origen de coordenadas
  * sería (0,0), y no aquél impuesto por la rotación). El objeto asociado es
  * de tipo boolean.
  */
  public static final int PARAMETRO_ROTAR_Y_CENTRAR = 15;

...

Los valores de estas constantes, son las que se extraen del PanelInfoOperador a través del método void getParametros(ConjuntoParametroOperador parametros), que posteriormente el operador usará para operar.

PanelInfoOperadorRotacion.java
public void getParametros(ConjuntoParametroOperador parametros){

  parametros.insertarParametro(new ParametroOperador(
    OperadorRotacion.PARAMETRO_ANGULO_ROTACION, new Float(
     this.textoAnguloRotacion.getText())
     * new Float(Math.PI) / 180.0f));

  parametros.insertarParametro(new ParametroOperador(
     OperadorRotacion.PARAMETRO_CENTRO_ROTACION_X, new Float(
     this.textoCentroRotacionX.getText())));

  parametros.insertarParametro(new ParametroOperador(
     OperadorRotacion.PARAMETRO_CENTRO_ROTACION_Y, new Float(
     this.textoCentroRotacionY.getText())));

  parametros.insertarParametro(new ParametroOperador(
     OperadorRotacion.PARAMETRO_METODO_INTERPOLACION,
     this.listaMetodosInterpolacion.getInterpolacion()));

  parametros.insertarParametro(new ParametroOperador(
     OperadorRotacion.PARAMETRO_METODO_BORDE, this.listaMetodosBorde
     .getTratadorBorde()));

  parametros.insertarParametro(new ParametroOperador(
     OperadorRotacion.PARAMETRO_ROTAR_Y_CENTRAR,
     this.botonCentrarImagen.getSelection()));
}

En el objeto parametros se insertan todos los parámetros que se pueden extraer del panel de rotación. Como puede apreciarse, cada parámetro insertado (mediante la función insertarParametro()) es un objeto de tipo ParametroOperador. Cada parámetro tiene asociado dos elementos: un identificador del parámetro (valor int) y un Object que representa el valor del parámetro. Por ejemplo, el primer parámetro que se inserta se corresponde con el ángulo de rotación de la imagen. El valor numérico del ángulo de rotación es extraído del campo textual del panel que permite al usuario introducir el ángulo de rotación. Dicho valor numérico se corresponde con el valor del parámetro.

El parámetro, aparte de un valor, tiene asociado un identificador en forma de entero. Así por ejemplo, el primer parámetro insertado en el ejemplo de arriba tiene un identificador cuyo valor es la constante OperadorRotacion.PARAMETRO_ANGULO_ROTACION. El identificador del parámetro no es más que un valor entero que el usuario, de forma arbitraria, asigna a cada uno de los parámetros que requiere su operación para ejecutarse. Por ejemplo, el usuario podría asignar el identificador 100 al ángulo de rotación o el identificador 101 al centro de rotación. Es importante que, sin embargo, no haya parámetros con identificadores REPETIDOS. Así pues, el usuario no podría asignar tanto al ángulo de rotación como al centro de rotación identificadores ambos de 100. Es también importante notar que EL USUARIO NO PUEDE HACER USO DE LOS IDENTIFICADORES QUE VAN DEL 0 AL 99. Dichos identificadores están reservados por la aplicación, y si el usuario hace uso de ellos el resultado de la operación puede ser inesperado.