All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.fraunhofer.iosb.ilt.configurableexample.ExampleGui Maven / Gradle / Ivy

package de.fraunhofer.iosb.ilt.configurableexample;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import de.fraunhofer.iosb.ilt.configurable.ConfigEditor;
import de.fraunhofer.iosb.ilt.configurable.ConfigurationException;
import de.fraunhofer.iosb.ilt.configurable.Reflection;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author scf
 */
public class ExampleGui extends javax.swing.JFrame {

    private static final Logger LOGGER = LoggerFactory.getLogger(ExampleGui.class);
    private JTextArea jsonTextArea;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButtonToJson;
    private javax.swing.JButton jButtonFromJson;
    private javax.swing.JPanel panelEditor;
    private ConfigEditor editor;

    /**
     * Creates new form ExampleGui
     */
    public ExampleGui() {
        createGui();
    }

    private void createGui() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.BorderLayout());

        GridBagConstraints gridBagConstraints;

        JSplitPane splitPane1 = new javax.swing.JSplitPane();
        JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
        jsonTextArea = new javax.swing.JTextArea();

        splitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
        splitPane1.setResizeWeight(0.5);
        jScrollPane1.setViewportView(jsonTextArea);
        splitPane1.setBottomComponent(jScrollPane1);

        JPanel panelTop = new JPanel();
        panelTop.setLayout(new java.awt.GridBagLayout());

        jButton1 = new javax.swing.JButton();
        jButtonToJson = new javax.swing.JButton();
        jButtonFromJson = new javax.swing.JButton();
        panelEditor = new javax.swing.JPanel();

        jButton1.setText("Wave");
        jButton1.addActionListener((ActionEvent e) -> {
            useConfig();
        });
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = GridBagConstraints.EAST;
        gridBagConstraints.weightx = 0.01;
        panelTop.add(jButton1, gridBagConstraints);

        jButtonToJson.setText("To JSON");
        jButtonToJson.addActionListener((ActionEvent e) -> {
            printConfig();
        });
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = GridBagConstraints.CENTER;
        gridBagConstraints.weightx = 0.01;
        panelTop.add(jButtonToJson, gridBagConstraints);

        jButtonFromJson.setText("Load JSON");
        jButtonFromJson.addActionListener((ActionEvent e) -> {
            loadConfig();
        });
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = GridBagConstraints.WEST;
        gridBagConstraints.weightx = 0.01;
        panelTop.add(jButtonFromJson, gridBagConstraints);

        panelEditor.setLayout(new java.awt.BorderLayout());
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 3;
        gridBagConstraints.weightx = 0.01;
        gridBagConstraints.weighty = 0.01;
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
        panelTop.add(panelEditor, gridBagConstraints);

        addEditorToGui(panelEditor);

        splitPane1.setTopComponent(panelTop);
        getContentPane().add(splitPane1, java.awt.BorderLayout.CENTER);
        pack();
    }

    private void addEditorToGui(JPanel parentPanel) {
        FlagShapeList flag = new FlagShapeList();
        editor = flag.getConfigEditor(null, null);
        panelEditor.add(editor.getGuiFactorySwing().getComponent());
    }

    private void useConfig() {
        try {
            JsonElement config = editor.getConfig();
            FlagShapeList flag = new FlagShapeList();
            flag.configure(config, null, null, null);
            flag.wave();
        } catch (ConfigurationException ex) {
            LOGGER.error("Could not configure the flag!", ex);
        }
    }

    private void printConfig() {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        JsonElement config = editor.getConfig();
        String jsonString = gson.toJson(config);
        jsonTextArea.setText(jsonString);
        LOGGER.info("Our configuration is:\n{}", jsonString);
    }

    public void loadConfig() {
        loadConfig(jsonTextArea.getText());
    }

    public void loadConfig(String jsonString) {
        JsonElement config = new JsonParser().parse(jsonString);
        editor.setConfig(config);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(() -> {
            ExampleGui exampleGui = new ExampleGui();
            exampleGui.setVisible(true);
            exampleGui.setSize(400, 300);
        });
        // Do classpath scanning in the background.
        new Thread(() -> {
            Reflection.getReflections();
        }).start();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy