Cómo crear plugins Justinmind

Inicia la aplicación Eclipse dentro de tu carpeta JustinmindSDK. A continuación, selecciona una carpeta para guardar tu espacio de trabajo y haz clic en «Usar esta como predeterminada y no volver a preguntar».

Primera configuración

A continuación, selecciona «Crear un nuevo proyecto Java…».

welcome-justinmindsdk

Elige un nombre para tu plugin y asegúrate de que el entorno de ejecución JRE seleccionado es ‘JavaSE-11’. A continuación, haz clic en Siguiente.
newplugin-justinmindsdk

En Configuración de Java haz clic en la pestaña Bibliotecas. Selecciona «ModulePath» y añade todos los módulos JavaFX que encontrarás en la carpeta ‘javafx’ dentro de la carpeta ‘JustinmindPluginSDK’ utilizando la opción Añadir JARS externos. Para Windows : JustinmindPluginSDK/javafx/lib Para MacOS: Applications/JustinmindPluginSDK/javafx/lib

módulos-justinmindsdk

Selecciona «Classpath» y añade todos los jars contenidos en la carpeta ‘api_plugins’ que encontrarás en la carpeta JustinmindSDK. Para Windows : JustinmindPluginSDK/api_plugins/ Para MacOS: /Aplicaciones/JustinmindPluginSDK/api_plugins/

classpath-justinmindsdk

Pulsa Finalizar. Selecciona No crear module-info.java cuando te lo pida. Ahora hemos creado el proyecto Java principal que contendrá el código de nuestro plugin.

Escribe tu plugin

Estructura

La estructura de un plugin Justinmind es muy sencilla. Sólo necesitas un archivo de clase principal que contendrá el código de ejecución de la acción de tu plugin. Esta clase debe implementar la interfaz ‘IPlugin’ de la API de Justinmind. IPlugin define dos métodos: getName() – este método definirá el nombre que se mostrará en la UI de Justinmind una vez instalado tu plugin. run() – lo que hace tu plugin. Crea el archivo de clase. Haz clic con el botón derecho del ratón en la carpeta ‘src’ de tu plugin y selecciona Nueva clase>. Dale un nombre a tu clase principal y selecciona la interfaz IPlugin del paquete com.justinmind.prototyper.api.plugins. Haz clic en Finalizar.

crearplugin-justinmindsdk

Ahora puedes escribir tu código.

Ejemplo: exportar todos los textos a un archivo CSV

import java.awt.Desktop;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
import com.justinmind.pcontrols.ControlUtils;
import com.justinmind.prototyper.api.API;
import com.justinmind.prototyper.api.IPrototype;
import com.justinmind.prototyper.api.plugins.IPlugin;
import com.justinmind.prototyper.api.ui.canvas.ICanvas;
import com.justinmind.prototyper.api.ui.component.ICanvasComponent;
import com.justinmind.prototyper.api.ui.component.IImage;
import com.justinmind.prototyper.api.ui.component.IInput;
import com.justinmind.prototyper.api.ui.component.IValuedComponent;
import javafx.stage.FileChooser;

public class TestPlugin implements IPlugin { 

  @Override
  public void run() {
    try {
      IPrototype prototype = API.getPrototypeLoader().loadPrototype();
      List canvas = prototype.getApiCanvases();
      String content = "Word in prototype\n\n";
      for (ICanvas current : canvas) {
        content += "Screen: " + current.getApiName() + "\n";
        List components = current.getApiRoot().getApiChildren();
        for (ICanvasComponent iComponent : components) {
          content += addTextsToContent(iComponent);
        }
      }
 
      FileChooser dialog = new FileChooser();
      FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("CSV files (*.csv)", "*.csv");
      dialog.getExtensionFilters().add(extFilter);
      File file = dialog.showSaveDialog(ControlUtils.getMainWindow());
      if (file != null) {
        Writer output = null;
        FileWriter fw = null;
        try {
          fw = new FileWriter(file);
          output = new BufferedWriter(fw);
          output.write(content);
          output.close();
          Desktop.getDesktop().open(file);
        } catch (IOException e) {
          Alert a = new Alert(AlertType.ERROR);
          a.setContentText(e.getLocalizedMessage());
          a.show();
        }
      } else {
        // show error
      }
    } catch (Exception e) {
      Alert a = new Alert(AlertType.ERROR);
      a.setContentText(e.getLocalizedMessage());
      a.show();
    }
  } 

  private String addTextsToContent(ICanvasComponent iComponent) {
    String content = "";
    if (iComponent instanceof IValuedComponent && !(iComponent instanceof IImage) && !(iComponent instanceof IInput)) {
      content += ((IValuedComponent) iComponent).getApiValue() + "\n";
    }
    List components = iComponent.getApiChildren();
    for (ICanvasComponent current_child : components) {
      content += addTextsToContent(current_child);
    }
    return content;
  }

  @Override
  public String getName() {
    return "Test Plugin";
  }
}

Despliegue

Una vez terminado tu código, tienes que exportarlo como archivo JAR para crear un plugin instalable válido en Justinmind. Haz clic con el botón derecho en tu proyecto de plugin y selecciona Exportar. Selecciona Archivo JAR en Java y haz clic en Siguiente.

selectjar-justinmindsdk

Selecciona un destino de exportación dejando todas las demás opciones por defecto y pulsa Finalizar.

export-justinmindsdk

Instalar y ejecutar

Una vez que tengamos nuestro plugin empaquetado en un archivo JAR, tenemos que instalarlo en nuestra aplicación Justinmind para poder ejecutarlo. Abre Justinmind y abre el menú Plug-ins. Selecciona la opción Instalar un Plug-in… Selecciona el archivo JAR exportado que contiene tu plugin y haz clic en Abrir. Después de este punto tu plugin se instalará y aparecerá una nueva opción en el menú Plug-ins con el nombre que elegiste al implementar tu plugin. Para Ejecutarlo sólo tienes que hacer clic sobre él.