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

bgu.dcr.az.dev.ui.TestView Maven / Gradle / Ivy

/* 
 * The MIT License
 *
 * Copyright 2016 Benny Lutati.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package bgu.dcr.az.dev.ui;



import bc.ui.swing.visuals.Visual;
import bc.ui.swing.visuals.Visual.VisualGen;
import bgu.dcr.az.api.exen.Test;
import bgu.dcr.az.api.exen.escan.VariableMetadata;
import bgu.dcr.az.api.exen.escan.AlgorithmMetadata;
import bgu.dcr.az.api.exen.ExecutionSelector;
import bgu.dcr.az.exen.AbstractTest;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author bennyl
 */
public class TestView extends javax.swing.JPanel {
    private VisualGen varsGen;
    private List debugListeners = new LinkedList(); 

    /** Creates new form TestView */
    public TestView() {
        initComponents();
        failurePan.setVisible(false);
        debugProblemButtonPan.setVisible(false);
        testVars.getList().setFixedCellHeight(16);
        pgenVars.getList().setFixedCellHeight(16);
        algos.getList().setFixedCellHeight(16);
        
        varsGen = new Visual.VisualGen() {

            @Override
            public Visual gen(Object it) {
                VariableMetadata var = (VariableMetadata) it;
                return new Visual(it, "+ " + var.getName() + "='" + var.getCurrentValue() + "' [ " + var.getDescription() + " ]","", null);
            }
        };
    }

    public void addDebugRequestListener(DebugRequestListener l){
        debugListeners.add(l);
    }
    
    public void setModel(Test r) {
         
        
        testVars.setItems(Visual.adapt(VariableMetadata.scan(r),varsGen));
        pgenVars.setItems(Visual.adapt(VariableMetadata.scan(r.getProblemGenerator()), varsGen));
        algos.setItems(Visual.adapt(((AbstractTest) r).getAlgorithms(), new VisualGen() {

            @Override
            public Visual gen(Object it) {
                AlgorithmMetadata alg = (AlgorithmMetadata) it;
                return new Visual(alg, "+ " + alg.getName() + " as " + alg.getInstanceName() + "", "", null);
            }
        }));
        
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // //GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jButton1 = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        spacer = new org.jdesktop.swingx.JXLabel();
        jXLabel2 = new org.jdesktop.swingx.JXLabel();
        jPanel2 = new javax.swing.JPanel();
        testVars = new bc.ui.swing.lists.TransparentList();
        jPanel4 = new javax.swing.JPanel();
        jPanel5 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        spacer1 = new org.jdesktop.swingx.JXLabel();
        jXLabel3 = new org.jdesktop.swingx.JXLabel();
        jPanel6 = new javax.swing.JPanel();
        pgenVars = new bc.ui.swing.lists.TransparentList();
        jPanel7 = new javax.swing.JPanel();
        jPanel8 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        spacer2 = new org.jdesktop.swingx.JXLabel();
        jXLabel4 = new org.jdesktop.swingx.JXLabel();
        jPanel9 = new javax.swing.JPanel();
        algos = new bc.ui.swing.lists.TransparentList();
        failurePan = new javax.swing.JPanel();
        jPanel11 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        spacer3 = new org.jdesktop.swingx.JXLabel();
        jXLabel5 = new org.jdesktop.swingx.JXLabel();
        jPanel12 = new javax.swing.JPanel();
        failureData = new bc.ui.swing.lists.TransparentList();
        spacerPan = new javax.swing.JPanel();
        debugProblemButtonPan = new javax.swing.JPanel();
        jXHyperlink1 = new org.jdesktop.swingx.JXHyperlink();

        jButton1.setBackground(new java.awt.Color(102, 102, 102));
        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/img/gnome-glchess_1.png"))); // NOI18N
        jButton1.setText("Debug This Problem");
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);

        setBackground(new java.awt.Color(102, 102, 102));
        setLayout(new java.awt.GridBagLayout());

        jPanel3.setMinimumSize(new java.awt.Dimension(155, 150));
        jPanel3.setOpaque(false);
        jPanel3.setPreferredSize(new java.awt.Dimension(549, 115));
        jPanel3.setLayout(new java.awt.GridBagLayout());

        jPanel1.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel1.setMinimumSize(new java.awt.Dimension(200, 16));
        jPanel1.setOpaque(false);
        jPanel1.setPreferredSize(new java.awt.Dimension(200, 100));
        jPanel1.setLayout(new java.awt.GridBagLayout());

        jLabel1.setFont(new java.awt.Font("Consolas", 1, 12)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        jLabel1.setText("Test Parameters");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        jPanel1.add(jLabel1, gridBagConstraints);

        spacer.setMinimumSize(new java.awt.Dimension(20, 0));
        spacer.setPreferredSize(new java.awt.Dimension(20, 0));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        jPanel1.add(spacer, gridBagConstraints);

        jXLabel2.setForeground(new java.awt.Color(210, 233, 255));
        jXLabel2.setText("the set of parameters controlling the execution of the test");
        jXLabel2.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        jXLabel2.setLineWrap(true);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel1.add(jXLabel2, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        jPanel3.add(jPanel1, gridBagConstraints);

        jPanel2.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel2.setOpaque(false);
        jPanel2.setPreferredSize(new java.awt.Dimension(349, 100));
        jPanel2.setLayout(new java.awt.BorderLayout());

        testVars.setForeColor(new java.awt.Color(255, 255, 255));
        jPanel2.add(testVars, java.awt.BorderLayout.CENTER);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel3.add(jPanel2, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        add(jPanel3, gridBagConstraints);

        jPanel4.setMinimumSize(new java.awt.Dimension(155, 150));
        jPanel4.setOpaque(false);
        jPanel4.setPreferredSize(new java.awt.Dimension(549, 115));
        jPanel4.setLayout(new java.awt.GridBagLayout());

        jPanel5.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel5.setMinimumSize(new java.awt.Dimension(200, 16));
        jPanel5.setOpaque(false);
        jPanel5.setPreferredSize(new java.awt.Dimension(200, 100));
        jPanel5.setLayout(new java.awt.GridBagLayout());

        jLabel2.setFont(new java.awt.Font("Consolas", 1, 12));
        jLabel2.setForeground(new java.awt.Color(255, 255, 255));
        jLabel2.setText("Problem Generator");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        jPanel5.add(jLabel2, gridBagConstraints);

        spacer1.setMinimumSize(new java.awt.Dimension(20, 0));
        spacer1.setPreferredSize(new java.awt.Dimension(20, 0));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        jPanel5.add(spacer1, gridBagConstraints);

        jXLabel3.setForeground(new java.awt.Color(210, 233, 255));
        jXLabel3.setText("the generator of the  problems in this test");
        jXLabel3.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        jXLabel3.setLineWrap(true);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel5.add(jXLabel3, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weighty = 1.0;
        jPanel4.add(jPanel5, gridBagConstraints);

        jPanel6.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel6.setOpaque(false);
        jPanel6.setPreferredSize(new java.awt.Dimension(349, 100));
        jPanel6.setLayout(new java.awt.BorderLayout());

        pgenVars.setForeColor(new java.awt.Color(255, 255, 255));
        jPanel6.add(pgenVars, java.awt.BorderLayout.CENTER);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        jPanel4.add(jPanel6, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
        add(jPanel4, gridBagConstraints);

        jPanel7.setMinimumSize(new java.awt.Dimension(155, 150));
        jPanel7.setOpaque(false);
        jPanel7.setPreferredSize(new java.awt.Dimension(549, 115));
        jPanel7.setLayout(new java.awt.GridBagLayout());

        jPanel8.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel8.setMinimumSize(new java.awt.Dimension(200, 16));
        jPanel8.setOpaque(false);
        jPanel8.setPreferredSize(new java.awt.Dimension(200, 100));
        jPanel8.setLayout(new java.awt.GridBagLayout());

        jLabel3.setFont(new java.awt.Font("Consolas", 1, 12));
        jLabel3.setForeground(new java.awt.Color(255, 255, 255));
        jLabel3.setText("Executed Algorithms");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        jPanel8.add(jLabel3, gridBagConstraints);

        spacer2.setMinimumSize(new java.awt.Dimension(20, 0));
        spacer2.setPreferredSize(new java.awt.Dimension(20, 0));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        jPanel8.add(spacer2, gridBagConstraints);

        jXLabel4.setForeground(new java.awt.Color(210, 233, 255));
        jXLabel4.setText("list of the algorithms that  participating in this test");
        jXLabel4.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        jXLabel4.setLineWrap(true);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel8.add(jXLabel4, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weighty = 1.0;
        jPanel7.add(jPanel8, gridBagConstraints);

        jPanel9.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel9.setOpaque(false);
        jPanel9.setPreferredSize(new java.awt.Dimension(349, 100));
        jPanel9.setLayout(new java.awt.BorderLayout());

        algos.setForeColor(new java.awt.Color(255, 255, 255));
        jPanel9.add(algos, java.awt.BorderLayout.CENTER);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel7.add(jPanel9, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
        add(jPanel7, gridBagConstraints);

        failurePan.setMinimumSize(new java.awt.Dimension(155, 150));
        failurePan.setOpaque(false);
        failurePan.setPreferredSize(new java.awt.Dimension(549, 115));
        failurePan.setLayout(new java.awt.GridBagLayout());

        jPanel11.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel11.setMinimumSize(new java.awt.Dimension(200, 16));
        jPanel11.setOpaque(false);
        jPanel11.setPreferredSize(new java.awt.Dimension(200, 100));
        jPanel11.setLayout(new java.awt.GridBagLayout());

        jLabel4.setFont(new java.awt.Font("Consolas", 1, 12));
        jLabel4.setForeground(new java.awt.Color(255, 255, 255));
        jLabel4.setText("Failure Description");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        jPanel11.add(jLabel4, gridBagConstraints);

        spacer3.setMinimumSize(new java.awt.Dimension(20, 0));
        spacer3.setPreferredSize(new java.awt.Dimension(20, 0));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        jPanel11.add(spacer3, gridBagConstraints);

        jXLabel5.setForeground(new java.awt.Color(210, 233, 255));
        jXLabel5.setText("the data about the failure\nthis is whats controlling the debugging ");
        jXLabel5.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        jXLabel5.setLineWrap(true);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        jPanel11.add(jXLabel5, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weighty = 1.0;
        failurePan.add(jPanel11, gridBagConstraints);

        jPanel12.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(204, 204, 204)));
        jPanel12.setOpaque(false);
        jPanel12.setPreferredSize(new java.awt.Dimension(349, 100));
        jPanel12.setLayout(new java.awt.BorderLayout());

        failureData.setForeColor(new java.awt.Color(255, 255, 255));
        jPanel12.add(failureData, java.awt.BorderLayout.CENTER);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        failurePan.add(jPanel12, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
        add(failurePan, gridBagConstraints);

        spacerPan.setMinimumSize(new java.awt.Dimension(155, 150));
        spacerPan.setOpaque(false);
        spacerPan.setLayout(new java.awt.GridBagLayout());

        debugProblemButtonPan.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204)));
        debugProblemButtonPan.setOpaque(false);
        debugProblemButtonPan.setLayout(new java.awt.GridBagLayout());

        jXHyperlink1.setForeground(new java.awt.Color(255, 255, 255));
        jXHyperlink1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/img/gnome-glchess_1.png"))); // NOI18N
        jXHyperlink1.setText("Debug This Problem");
        jXHyperlink1.setClickedColor(new java.awt.Color(255, 255, 255));
        jXHyperlink1.setFont(new java.awt.Font("Consolas", 0, 14));
        jXHyperlink1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jXHyperlink1.setUnclickedColor(new java.awt.Color(255, 255, 255));
        jXHyperlink1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jXHyperlink1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jXHyperlink1ActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        debugProblemButtonPan.add(jXHyperlink1, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        spacerPan.add(debugProblemButtonPan, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
        add(spacerPan, gridBagConstraints);
    }// //GEN-END:initComponents

    private void jXHyperlink1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jXHyperlink1ActionPerformed
        for (DebugRequestListener l : debugListeners){
            l.onDebugRequested();
        }
    }//GEN-LAST:event_jXHyperlink1ActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private bc.ui.swing.lists.TransparentList algos;
    private javax.swing.JPanel debugProblemButtonPan;
    private bc.ui.swing.lists.TransparentList failureData;
    private javax.swing.JPanel failurePan;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel11;
    private javax.swing.JPanel jPanel12;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JPanel jPanel9;
    private org.jdesktop.swingx.JXHyperlink jXHyperlink1;
    private org.jdesktop.swingx.JXLabel jXLabel2;
    private org.jdesktop.swingx.JXLabel jXLabel3;
    private org.jdesktop.swingx.JXLabel jXLabel4;
    private org.jdesktop.swingx.JXLabel jXLabel5;
    private bc.ui.swing.lists.TransparentList pgenVars;
    private org.jdesktop.swingx.JXLabel spacer;
    private org.jdesktop.swingx.JXLabel spacer1;
    private org.jdesktop.swingx.JXLabel spacer2;
    private org.jdesktop.swingx.JXLabel spacer3;
    private javax.swing.JPanel spacerPan;
    private bc.ui.swing.lists.TransparentList testVars;
    // End of variables declaration//GEN-END:variables



    public void addFailureData(ExecutionSelector di) {
        this.failurePan.setVisible(true);
        this.debugProblemButtonPan.setVisible(true);
        
        failureData.setItems(Visual.adapt(VariableMetadata.scan(di), varsGen));
    }
    
    public static interface DebugRequestListener{
        void onDebugRequested();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy