Nombre de Proyecto y Plug-in ID

Los nombres de proyecto, como "com.coolimagingproject.colorOperations", parecen extraños a primera vista. Estos se asemejan a los nombres de un paquete Java. Y así es, la comunidad de Eclipse usa dos convenciones para utilizar plug-ins y los espacios de nombres de los proyectos. Se usa una convención de nombres inversa para identificar el plug-in. Puesto que muchos plug-ins terminan siendo un conjunto de otras fuentes de otros plug-ins, por eso, necesitan tener un identificador único global que los identifique unívocamente.

Ya que cada plug-in es desarrollado en un proyecto, ésta es una convención que debe adoptarse para identificar el nombre del proyecto con los identificadores que el plug-in contiene. En nuestro ejemplo, el proyecto y el identificador se llamarán "com.coolimagingproject.colorOperations". Por tanto, debería asegurarse que tiene los derechos del dominio al que hace referencia, por ejemplo, coolimagingproject.com en nuestro caso.

Ambas prácticas son convenciones y no reglas. 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, ya que ésta no es 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 éste manual hacen uso de ésta 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, por ejemplo, del operador de 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: 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 la 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.