TracNav
Información general
- Características
- Instalación y descarga
- Manual de usuario
- Demostración
- Soporte
- Capturas de pantalla
- Créditos
- Licencia
- Sponsors
Para desarrolladores
Plugin API
Opina está diseñada para permitir un conjunto de puntos de extensión, los cuales estarán formados por un conjunto de interfaces que modelarán diferentes funcionalidades de opina. Estas interfaces definen un contrato que necesita ser implementado. Para el desarrollo de un plugin sólo tendremos que implementar una de las diferentes interfaces asociadas a los puntos de extensión de Opina.
Configuración del entorno
Para desarrollar un plugin lo primero que se necesita es una versión de Maven 2.0.9 o posterior y una versión de JDK6 o posterior. Asegúrese de que Maven tiene acceso a internet, para poder descargar las dependencias necesarias.
Necesita añadir el repositorio de opina a la lista de repositorios de Maven, para ello añada las siguientes líneas en su fichero de configuración de Maven, ~/.m2/settings.xml (Para los usuarios de Windows se encuentra en %USERPROFILE%\.m2\settings.xml) :
</profiles>
....
<profile>
<id>klicap</id>
<repositories>
<repository>
<id>klicap.es</id>
<name>klicap - ingeniería del puzle maven repository</name>
<url>http://clinker.klicap.es/public/repos/maven2</url>
<layout>default</layout>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
...
<activeProfile>klicap</activeProfile>
</activeProfiles>
Desarrollo de plugins
A la hora de desarrollar un plugin, el punto principal es aquella clase que implementa la interfaz OpinaPlugin. Una vez que opina detecta la clase asociada a tu plugin, ésta creará una instancia e invocará los métodos de la misma.
Para facilitar el desarrollo de los plugins se han creado un conjunto de interfaces que extienden de OpinaPlugin. De tal forma que nuestro plugin a ha implementar una de esta interfaces que extienden a OpinaPlugin, además de anotar la clase con la anotación @PluginImplementation, necesaria para que los plugins sean detectados por opina.
A continuación realizamos una descripción de las diferentes interfaces (puntos de extensión) que existen en opina.
ThemePlugin
Este punto de extensión permite personalizar por completo la UI del asistente de encuestas. Para desarrollar un tema es necesario implementar la interfaz ThemePlugin. Existe un tema por defecto que puede usarse como punto de partida (branches/2.x/plugins/opina-default-theme-plugin).
Un plugin Theme debe proporcionar un conjunto de plantillas (DUST), un fichero CSS y un fichero Javascript. El fichero CSS será cargado como parte del HTML del asistente y el fichero Javascript será enlazado en la carga de la página a través de su método render, el cual recibirá como parámetro el kit de renderizado de Opina.
En kit de renderizado proporciona un conjunto de utilidades para acceder a los datos de la encuesta, así como a las plantillas definidas en el plugin. El kit de renderizado está documentado en el propio código fuente. También ofrece una interfaz para enviar las respuestas mediante una petición a la API REST.
AuthenticationFormPlugin
Modela la autenticación de los usuarios en opina. Esta autenticación se producirá a partir del login y password introducidos por el usuario.
AuthorizationFormPlugin
Modela la autorización de los usuarios en opina. Esta autorización se producirá a partir de login que el usuario estableció en el formulario de autenticación. Su objetivo es obtener los permisos asociados al usuario que realiza la petición. Este proceso se produce posteriormente a que el usuario se haya autenticado, por tanto se puede suponer que el usuario que ha realizado la petición es válido.
ControllerPlugin
Permite definir controladores que podrán atender peticiones REST en un path definido y relativo al path /plugin/controller. De esta forma si la petición coincide con el path definido y el método (POST, GET, ...) es permitido por el plugin, se delegara en el plugin la solicitud recibida y éste generará la respuesta correspondiente.
ExportImportContactPlugin
Modela la exportación e importación de los contactos de Opina. Mediante la implementación de esta interfaz se podrán exportar los contactos de la BD en un fichero con el formato deseado. De la misma forma podremos importar lo contactos que tengamos en un fichero y posteriormente almacenarlos en la base de datos de contactos de opina.
A continuación se muestra una implementación de este punto de extensión, que permite exportar e importar usuarios en formato JSON:
@PluginImplementation
public final class ContactJsonPlugin implements ExportImportContactPlugin {
@Override
public void exportElements(final List<ContactResource> contacts, final Map<String, String> args,
final OutputStream output) {
JsonUtil.getBasicSerializer("contacts").deepSerialize(contacts, new OutputStreamWriter(output));
}
@Override
public String getFormat() {
return "JSON";
}
@Override
public String getMimeType() {
return MediaType.APPLICATION_JSON;
}
@Override
public List<ContactResource> importElements(final InputStream file, final Map<String, String> args) {
byte[] array = null;
try {
array = new byte[file.available()];
file.read(array);
file.close();
} catch (IOException e) {
e.printStackTrace();
}
return JsonUtil.deserializeListWithPrefix(new String(array), ContactResource.class);
}
}
PreAuthenticationPlugin
Modela la autenticación de los usuarios en opina. Esta autenticación se producirá previamente a que el usuario introduzca su login y password. Está orientado a la integración con un SSO, autenticación JAAS o a la autenticación mediante certificados digitales.
PreAuthorizationPlugin
Modela la autorización de los usuarios en opina. Esta autorización se producirá previamente a que el usuario introduzca su login y password. Está orientado a la integración con un SSO y la autorización JAAS. Su objetivo es obtener los permisos asociados al usuario que realiza la petición. Este proceso se produce posteriormente a que el usuario se haya autenticado, por lo que podemos estar seguro de que el usuario que ha realizado la petición es válido.