Package edu.brown.oltpgenerator.gui

Source Code of edu.brown.oltpgenerator.gui.ProcGui

package edu.brown.oltpgenerator.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.voltdb.catalog.ProcParameter;
import org.voltdb.catalog.Procedure;

import edu.brown.oltpgenerator.env.ProcEnv;
import edu.brown.oltpgenerator.env.BenchmarkEnv;
import edu.brown.oltpgenerator.env.TableEnv;
import edu.brown.oltpgenerator.env.RandomDistribution.RandomDistributionEnv;
import edu.brown.oltpgenerator.exception.CycleInDagException;
import edu.brown.oltpgenerator.exception.TotalProbabilityExceeds100Exception;
import edu.brown.oltpgenerator.exception.UserInputException;
import edu.brown.oltpgenerator.gui.common.GuiConstants;
import edu.brown.oltpgenerator.gui.common.LHSListPane;
import edu.brown.oltpgenerator.gui.common.Notifier;
import edu.brown.oltpgenerator.gui.common.UpperPane;
import edu.brown.oltpgenerator.gui.common.ZListSelectionListener;
import edu.brown.oltpgenerator.gui.common.RandomDistribution.RandomDistributionEditorManager;
import edu.brown.oltpgenerator.velocity.CodeGenerator;

public class ProcGui extends JPanel
{

    private static final long serialVersionUID       = 1L;

    private JButton           m_btLoadTrace          = new JButton();
    private JButton           m_btGenBenchmark       = new JButton();

    private UpperPane         m_paneButtons;

    private JList             m_lstProcNames         = new JList();
    private LHSListPane       m_scrollProcNames;

    private JTabbedPane       m_paneParent;
    private Notifier          m_notifier;

    private JSlider           m_slideProbability     = new JSlider(0, 100, 0);
    private JTextField        m_txtProbability       = new JTextField();

    private UpperPane         m_paneProbability;

    private JList             m_lstProcParaNames     = new JList();
    private JPanel            m_paneParaDistribution = new JPanel();

    private static JPanel     s_paneDummy            = new JPanel();

    public ProcGui(JTabbedPane paneTab, Notifier notifier)
    {
        m_paneParent = paneTab;
        m_notifier = notifier;
        establishGuiTree();
        addListeners();
    }

    private void establishGuiTree()
    {
        this.setLayout(null);
        addButtonPane();
        addProcedureViewEditPane();
    }

    private void addButtonPane()
    {
        m_paneButtons = new UpperPane(m_paneParent);

        m_btLoadTrace.setText("Load workload trace file");
        m_paneButtons.add(m_btLoadTrace);

        m_btGenBenchmark.setText("Generate Benchmark");
        m_paneButtons.add(m_btGenBenchmark);

        add(m_paneButtons);
    }

    private void addProcedureViewEditPane()
    {
        JPanel paneSp = new JPanel();
        paneSp.setLayout(null);
        int nWidth = m_paneParent.getWidth();
        int nHeight = m_paneParent.getHeight() - m_paneButtons.getHeight() - 3 * GuiConstants.GAP_COMPONENT;
        paneSp.setBounds(0, m_paneButtons.getHeight(), nWidth, nHeight);

        m_scrollProcNames = new LHSListPane(paneSp, m_lstProcNames);
        paneSp.add(m_scrollProcNames);

        paneSp.add(createProcEditPane());

        add(paneSp);
    }

    private JPanel createProcEditPane()
    {
        JPanel paneSpEdit = new JPanel();
        paneSpEdit.setLayout(null);
        int nXStart = m_scrollProcNames.getWidth() + GuiConstants.GAP_COMPONENT;
        int nWidth = m_paneParent.getWidth() - m_scrollProcNames.getWidth() - GuiConstants.GAP_COMPONENT;
        paneSpEdit.setBounds(nXStart, 0, nWidth, m_scrollProcNames.getHeight());

        paneSpEdit.add(createProcProbabilityPane(paneSpEdit));
        paneSpEdit.add(createProcParasPane(paneSpEdit));

        return paneSpEdit;
    }

    private JPanel createProcProbabilityPane(JPanel parent)
    {
        m_paneProbability = new UpperPane(parent);
        m_paneProbability.setBorder(BorderFactory.createEtchedBorder());
        m_paneProbability.setLayout(null);

        String sToolTips = "Probability this procedure is executed";

        m_txtProbability.setText(Integer.toString(0));
        int nWidthTxt = (int) ((double) m_paneProbability.getWidth() * 0.07);
        m_txtProbability.setSize(nWidthTxt, m_paneProbability.getHeight());
        m_txtProbability.setEditable(false);
        m_txtProbability.setToolTipText(sToolTips);
        m_paneProbability.add(m_txtProbability);

        JLabel lblPercent = new JLabel("%");
        int nWidthLbl = (int) ((double) nWidthTxt * 0.3);
        lblPercent.setBounds(nWidthTxt, 0, nWidthLbl, m_paneProbability.getHeight());
        m_paneProbability.add(lblPercent);

        m_slideProbability.setMajorTickSpacing(10);
        m_slideProbability.setMinorTickSpacing(1);
        m_slideProbability.setPaintLabels(true);
        m_slideProbability.setPaintTicks(true);
        m_slideProbability.setSnapToTicks(true);
        int nXStart = nWidthTxt + nWidthLbl + GuiConstants.GAP_COMPONENT;
        m_slideProbability.setBounds(nXStart, 0, m_paneProbability.getWidth() - nXStart, m_paneProbability.getHeight());
        m_slideProbability.setToolTipText(sToolTips);
        m_paneProbability.add(m_slideProbability);

        disableProcOptions();

        return m_paneProbability;
    }

    private JPanel createProcParasPane(JPanel parent)
    {
        JPanel paneProcParas = new JPanel();
        paneProcParas.setLayout(null);
        paneProcParas.setBorder(BorderFactory.createEtchedBorder());
        int nYStartPaneProcParas = m_paneProbability.getHeight() + GuiConstants.GAP_COMPONENT;
        paneProcParas.setBounds(0, nYStartPaneProcParas, parent.getWidth(), parent.getHeight() - nYStartPaneProcParas);

        LHSListPane scrollParaNames = new LHSListPane(paneProcParas, m_lstProcParaNames);
        paneProcParas.add(scrollParaNames);

        paneProcParas.add(m_paneParaDistribution);
        int nXStartParaDistribution = scrollParaNames.getWidth() + GuiConstants.GAP_COMPONENT;
        int nWidthParaDistribution = paneProcParas.getWidth() - nXStartParaDistribution - GuiConstants.GAP_COMPONENT;
        int nHeightParaDistribution = scrollParaNames.getHeight() - 2 * GuiConstants.GAP_COMPONENT;
        m_paneParaDistribution.setBounds(nXStartParaDistribution, GuiConstants.GAP_COMPONENT, nWidthParaDistribution,
                                         nHeightParaDistribution);

        m_paneParaDistribution.add(s_paneDummy);

        return paneProcParas;
    }

    private void addListeners()
    {
        addLoadTraceFileListener();
        addSliderListener();
        addProcListListener();
        addProcParaListListener();
        addGenClientListener();
    }

    private void addProcParaListListener()
    {
        m_lstProcParaNames.addListSelectionListener(new ZListSelectionListener()
        {

            @Override
            public void whenSelecting(String selectedItemName)
            {
                Procedure curProc = ProcEnv.getProcedure(m_lstProcNames.getSelectedValue().toString());
                ProcParameter para = curProc.getParameters().get(getSelectedIndex());
                RandomDistributionEditorManager.display(m_paneParaDistribution, para);
            }
        });
    }

    private void addProcListListener()
    {
        m_lstProcNames.addListSelectionListener(new ZListSelectionListener()
        {

            @Override
            public void whenSelecting(String selectedItemName)
            {
                showProcProbability(selectedItemName);
                showProcParaList(selectedItemName);
                clearParaEditPane();
            }

            private void showProcParaList(String sProcName)
            {
                Procedure proc = ProcEnv.getProcedure(sProcName);
                String[] paraTypeNames = ProcEnv.getParaVoltTypeNames(proc);
                m_lstProcParaNames.setListData(paraTypeNames);
            }

            private void showProcProbability(String sProcName)
            {
                Integer nProb = ProcEnv.getProbability(sProcName);
                m_slideProbability.setEnabled(true);
                if (null == nProb)
                {
                    m_txtProbability.setText("0");
                    m_slideProbability.setValue(0);
                }
                else
                {
                    m_txtProbability.setText(nProb.toString());
                    m_slideProbability.setValue(nProb);
                }
            }
        });
    }

    protected void clearParaEditPane()
    {
        RandomDistributionEditorManager.clear(m_paneParaDistribution);
        m_paneParaDistribution.add(s_paneDummy);
    }

    private void addSliderListener()
    {
        m_slideProbability.addChangeListener(new ChangeListener()
        {

            @Override
            public void stateChanged(ChangeEvent e)
            {
                int value = ((JSlider) e.getSource()).getValue();

                String curProc = m_lstProcNames.getSelectedValue().toString();
                try
                {
                    ProcEnv.setProbability(curProc, value);
                    m_txtProbability.setText(Integer.toString(value));
                }
                catch (TotalProbabilityExceeds100Exception e1)
                {
                    Integer nOldVal = ProcEnv.getProbability(curProc);
                    m_slideProbability.setValue((nOldVal == null) ? 0 : nOldVal);
                    m_notifier.showMsg(e1.getMessage(), false);
                }
            }
        });
    }

    private void addLoadTraceFileListener()
    {
        m_btLoadTrace.addActionListener(new ActionListener()
        {
            private Object[] m_emptyArray = new Object[0];

            @Override
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    ProcEnv.clear();
                    RandomDistributionEnv.clearProcParaEdits();

                    ProcEnv.loadTraceFile();
                    ProcEnv.loadDefaultParaProperty();
                    Procedure[] procs = ProcEnv.getAllProcedures();
                    String[] procNames = ProcEnv.getProcNames(procs);
                    m_lstProcNames.setListData(procNames);

                    disableProcOptions();
                    m_lstProcParaNames.setListData(m_emptyArray);
                    clearParaEditPane();
                }
                catch (Exception e1)
                {
                    e1.printStackTrace();
                }
            }
        });
    }

    private void disableProcOptions()
    {
        m_txtProbability.setText(null);
        m_slideProbability.setValue(0);
        m_slideProbability.setEnabled(false);
    }

    private void addGenClientListener()
    {
        m_btGenBenchmark.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    checkUserInputs();
                    CodeGenerator.bigBang();
                }
                catch (CycleInDagException e1)
                {
                    m_notifier.showMsg(e1.getMessage(), false);
                    return;
                }
                catch (UserInputException e2)
                {
                    m_notifier.showMsg(e2.getMessage(), false);
                }
                m_notifier.showMsg("Benchmark generated in " + BenchmarkEnv.getProjectPath(), true);
            }
        });
    }

    protected void checkUserInputs() throws UserInputException
    {
        checkNotNull(BenchmarkEnv.getSourceFolderPath(), "Source folder path not specified");
        checkNotNull(BenchmarkEnv.getPackageName(), "Benchmark package name not specified");
        checkNotNull(BenchmarkEnv.getBenchmarkName(), "Benchmark name not specified");
        checkNotNull(TableEnv.getCatalog(), "Schema file not loaded");
        checkNotNull(ProcEnv.getAllProcedures(), "Transaction trace file not loaded");
    }

    private void checkNotNull(Object obj, String errMsg) throws UserInputException
    {
        if (null == obj)
        {
            throw new UserInputException(errMsg);
        }
    }
}
TOP

Related Classes of edu.brown.oltpgenerator.gui.ProcGui

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.