/
codebase/
codebase/area/
codebase/doc/
codebase/etc/
codebase/src/net/sourceforge/pain/data/trigger/
codebase/src/net/sourceforge/pain/logic/
codebase/src/net/sourceforge/pain/logic/affect/
codebase/src/net/sourceforge/pain/logic/event/
codebase/src/net/sourceforge/pain/logic/event/deploy/
codebase/src/net/sourceforge/pain/logic/event/guitool/
codebase/src/net/sourceforge/pain/logic/event/guitool/event/
codebase/src/net/sourceforge/pain/logic/fn/util/
codebase/src/net/sourceforge/pain/logic/trigger/
codebase/src/net/sourceforge/pain/logic/trigger/impl/
codebase/src/net/sourceforge/pain/network/console/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/plugin/command/
codebase/src/net/sourceforge/pain/plugin/reset/
codebase/src/net/sourceforge/pain/plugin/shutdown/
codebase/src/net/sourceforge/pain/plugin/social/
codebase/src/net/sourceforge/pain/util/
db/doc/javadoc/resources/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.tools.guitool.dbbrowse;

import net.sourceforge.pain.network.guitool.*;
import net.sourceforge.pain.tools.guitool.*;
import net.sourceforge.pain.tools.guitool.dialog.*;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class GTRawDbBrowser {
    private JButton findButton;
    private JTextField oidEdit;
    private JLabel oidLabel;
    private JButton refreshButton;
    private JButton nextButton;
    private JButton prevButton;
    private JPanel mainPanel;
    private JTable contentTable;
    private JLabel classNameLabel;

    private TableModel tableModel;
    private static GTRawDbBrowser single;
    Vector fields = new Vector();
    String activeOid;

    Vector history = new Vector();
    int histPos = 0;

    public GTRawDbBrowser() {
        init();
    }

    private void init() {
        tableModel = new GTDbBrowserTableModel();
        contentTable.setModel(tableModel);
        contentTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        final TableColumn valueColumn = contentTable.getColumn("Field Value");
        GTRawDbBrowserValueCellHandler re = new GTRawDbBrowserValueCellHandler(this);
        valueColumn.setCellEditor(re);
        valueColumn.setCellRenderer(re);
        findButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                changeActiveObject();
            }
        });
        refreshButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                refreshActiveObject();
            }
        });
        refreshButton.setEnabled(false);
        prevButton.setEnabled(false);
        nextButton.setEnabled(false);

        oidEdit.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    e.consume();
                    changeActiveObject();
                }
            }
        });

        mainPanel.addFocusListener(new FocusAdapter() {
            public void focusGained(FocusEvent e) {
                oidEdit.selectAll();
                oidEdit.requestFocus();
            }
        });

        prevButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                goPrev();
            }
        });

        nextButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                goNext();
            }
        });
    }


    public synchronized static Component instance() {
        if (single == null) {
            single = new GTRawDbBrowser();
        }
        return single.mainPanel;
    }


    private class GTDbBrowserTableModel extends AbstractTableModel {
        public int getColumnCount() {
            return 3;
        }

        public int getRowCount() {
            return fields.size();
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
            FieldInfo info = (FieldInfo) fields.get(rowIndex);
            if (columnIndex == 0) {
                return info.name;
            } else if (columnIndex == 1) {
                return info.getTypeName();
            } else {
                return info;
            }
        }

        public String getColumnName(int column) {
            return column == 0 ? "Field Name" : (column == 1) ? "Field Type" : "Field Value";
        }

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return columnIndex == 2;
        }

    }

    void gotoReference(String oid) {
        GuiTool.log("Changing active object..");
        _updateActiveObject(oid);
        GuiTool.log("Done.");
        if (activeOid != null && (history.isEmpty() || !history.get(histPos).equals(activeOid))) {
            for (int i = history.size(); --i > histPos;) {
                history.remove(i);
            }
            history.addElement(activeOid);
            histPos = history.size() - 1;

        }
        updateButtons();
    }

    void changeActiveObject() {
        String oid = oidEdit.getText();
        if (oid == null || oid.length() == 0) {
            return;
        }
        gotoReference(oid);

    }

    private void refreshActiveObject() {
        GuiTool.log("Refreshing obj info..");
        _updateActiveObject(activeOid);
        GuiTool.log("Refresh done.");
    }

    private void updateButtons() {
        refreshButton.setEnabled(activeOid != null);
        nextButton.setEnabled(histPos < history.size() - 1);
        prevButton.setEnabled(histPos > 0);

    }

    private void _updateActiveObject(String oid) {
        try {
            GTNetPacket p = GlobalPerformer.getConnection().sendBlocking(new GTNetPacket("DbBrowseEvent", new String[]{"retrieve", oid}));
            final Object values[] = (Object[]) p.data;
            if (values.length == 1) {
                JOptionPane.showMessageDialog(mainPanel, values[0], "Error", JOptionPane.ERROR_MESSAGE);
            } else {
                oidLabel.setText((String) values[0]);
                classNameLabel.setText((String) values[1]);
                fields.clear();
//                System.out.println("len:" + values.length);
                for (int i = 2; i < values.length; i += 3) {
                    fields.add(new FieldInfo((String) values[i], ((Integer)values[i + 1]).intValue(), values[i + 2]));
                }
                activeOid = (String) values[0];

                contentTable.setVisible(false);
                TableCellEditor cellEditor = contentTable.getCellEditor();
                if (cellEditor!=null) {
                    cellEditor.cancelCellEditing();
                }
                oidEdit.requestFocus();
                contentTable.setVisible(true);
            }
        } catch (Exception e) {
            GuiTool.showFailInfo(e);
            GuiTool.log("Error." + e.getMessage());
        }
    }

    private void goNext() {
        if (histPos < history.size() - 1) {
            histPos++;
            String oid = (String) history.get(histPos);
            _updateActiveObject(oid);
            updateButtons();
        }
    }

    private void goPrev() {
        if (histPos > 0) {
            histPos--;
            String oid = (String) history.get(histPos);
            _updateActiveObject(oid);
            updateButtons();
        }
    }

    {
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
// DO NOT EDIT OR ADD ANY CODE HERE!
        $$$setupUI$$$();
    }

    /**
     * Method generated by IntelliJ IDEA GUI Designer
     * >>> IMPORTANT!! <<<
     * DO NOT edit this method OR call it in your code!
     */
    private void $$$setupUI$$$() {
        final JPanel _1;
        _1 = new JPanel();
        mainPanel = _1;
        _1.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1));
        final JPanel _2;
        _2 = new JPanel();
        _2.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
        _1.add(_2, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, 0, 3, 3, 3, null, null, null));
        _2.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), null));
        final JPanel _3;
        _3 = new JPanel();
        _3.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(1, 7, new Insets(0, 0, 0, 0), -1, -1));
        _2.add(_3, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, 0, 3, 3, 3, null, null, null));
        final JButton _4;
        _4 = new JButton();
        prevButton = _4;
        _4.setToolTipText("Goto prev object");
        _4.setText("Prev");
        _3.add(_4, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, 0, 2, 3, 0, null, null, null));
        final JButton _5;
        _5 = new JButton();
        nextButton = _5;
        _5.setToolTipText("Goto next object");
        _5.setText("Next");
        _3.add(_5, new com.intellij.uiDesigner.core.GridConstraints(0, 1, 1, 1, 0, 1, 3, 0, null, null, null));
        final JButton _6;
        _6 = new JButton();
        refreshButton = _6;
        _6.setToolTipText("Refresh fields values");
        _6.setText("Refresh");
        _3.add(_6, new com.intellij.uiDesigner.core.GridConstraints(0, 2, 1, 1, 0, 1, 3, 0, null, null, null));
        final com.intellij.uiDesigner.core.Spacer _7;
        _7 = new com.intellij.uiDesigner.core.Spacer();
        _3.add(_7, new com.intellij.uiDesigner.core.GridConstraints(0, 3, 1, 1, 0, 1, 6, 1, null, null, null));
        final JLabel _8;
        _8 = new JLabel();
        _8.setText("OID:");
        _3.add(_8, new com.intellij.uiDesigner.core.GridConstraints(0, 4, 1, 1, 8, 0, 0, 0, null, null, null));
        final JTextField _9;
        _9 = new JTextField();
        oidEdit = _9;
        _9.setToolTipText("Enter object oid or 'root' ");
        _9.setText("root");
        _9.setFocusCycleRoot(false);
        _3.add(_9, new com.intellij.uiDesigner.core.GridConstraints(0, 5, 1, 1, 8, 1, 6, 0, null, new Dimension(150, -1), null));
        final JButton _10;
        _10 = new JButton();
        findButton = _10;
        _10.setToolTipText("Find object with specified oid");
        _10.setText("Find");
        _3.add(_10, new com.intellij.uiDesigner.core.GridConstraints(0, 6, 1, 1, 0, 1, 3, 0, null, null, null));
        final JPanel _11;
        _11 = new JPanel();
        _11.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(1, 7, new Insets(0, 0, 0, 0), -1, -1));
        _1.add(_11, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, 0, 3, 3, 3, null, null, null));
        _11.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), null));
        final com.intellij.uiDesigner.core.Spacer _12;
        _12 = new com.intellij.uiDesigner.core.Spacer();
        _11.add(_12, new com.intellij.uiDesigner.core.GridConstraints(0, 6, 1, 1, 0, 1, 6, 1, null, null, null));
        final JLabel _13;
        _13 = new JLabel();
        classNameLabel = _13;
        _13.setText("None");
        _11.add(_13, new com.intellij.uiDesigner.core.GridConstraints(0, 5, 1, 1, 8, 0, 0, 0, null, null, null));
        final JLabel _14;
        _14 = new JLabel();
        _14.setText("Class:");
        _11.add(_14, new com.intellij.uiDesigner.core.GridConstraints(0, 4, 1, 1, 8, 0, 0, 0, null, null, null));
        final com.intellij.uiDesigner.core.Spacer _15;
        _15 = new com.intellij.uiDesigner.core.Spacer();
        _11.add(_15, new com.intellij.uiDesigner.core.GridConstraints(0, 3, 1, 1, 0, 1, 0, 1, null, null, null));
        final JLabel _16;
        _16 = new JLabel();
        oidLabel = _16;
        _16.setText("None");
        _11.add(_16, new com.intellij.uiDesigner.core.GridConstraints(0, 2, 1, 1, 8, 0, 0, 0, null, null, null));
        final com.intellij.uiDesigner.core.Spacer _17;
        _17 = new com.intellij.uiDesigner.core.Spacer();
        _11.add(_17, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, 0, 1, 0, 1, null, null, null));
        final JLabel _18;
        _18 = new JLabel();
        _18.setText("OID:");
        _11.add(_18, new com.intellij.uiDesigner.core.GridConstraints(0, 1, 1, 1, 8, 0, 0, 0, null, null, null));
        final JPanel _19;
        _19 = new JPanel();
        _19.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
        _1.add(_19, new com.intellij.uiDesigner.core.GridConstraints(2, 0, 1, 1, 0, 3, 3, 7, null, null, null));
        final JScrollPane _20;
        _20 = new JScrollPane();
        _19.add(_20, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, 0, 3, 7, 7, null, null, null));
        final JTable _21;
        _21 = new JTable();
        contentTable = _21;
        _20.setViewportView(_21);
    }

}