001package com.ganteater.ae.desktop.ui;
002
003import java.util.ArrayList;
004import java.util.Arrays;
005import java.util.Map;
006import java.util.Set;
007
008import javax.swing.DefaultCellEditor;
009import javax.swing.JTable;
010import javax.swing.JTextField;
011import javax.swing.table.AbstractTableModel;
012
013import com.ganteater.ae.AEWorkspace;
014
015public class EnvPropertiesTable extends JTable {
016
017        public class VarTableModel extends AbstractTableModel {
018
019                private static final long serialVersionUID = 1L;
020                private Object[][] fRows = new Object[0][0];
021
022                public void refresh() {
023                        Set<String> tehKeySet = getWorkspace().getSystemVariables().keySet();
024                        fRows = new Object[tehKeySet.size()][2];
025                        int i = 0;
026
027                        String[] theKeys = tehKeySet.toArray(new String[tehKeySet.size()]);
028                        Arrays.sort(theKeys);
029
030                        for (String theName : theKeys) {
031                                Object theValue = getWorkspace().getSystemVariables().get(theName);
032                                fRows[i][0] = theName;
033                                fRows[i][1] = theValue;
034                                i++;
035                        }
036                }
037
038                public int getColumnCount() {
039                        return 2;
040                }
041
042                public int getRowCount() {
043                        return fRows.length;
044                }
045
046                public Object getValueAt(int row, int col) {
047                        Object string = null;
048                        try {
049                                string = fRows[row][col];
050                        } catch (RuntimeException e) {
051                                //
052                        }
053                        return string;
054                }
055
056                @Override
057                public boolean isCellEditable(int rowIndex, int columnIndex) {
058                        return columnIndex > 0;
059                }
060
061                @Override
062                public Class<?> getColumnClass(int columnIndex) {
063                        int selectedRow = getSelectedRow();
064                        Object object = fRows[selectedRow < 0 ? 0 : selectedRow][columnIndex];
065                        Class<? extends Object> clazz = object.getClass();
066                        return clazz;
067                }
068
069                @Override
070                public void setValueAt(Object value, int rowIndex, int columnIndex) {
071                        if (columnIndex == 1) {
072                                String object = (String) fRows[rowIndex][0];
073                                String name = object.toUpperCase();
074
075                                getWorkspace().getSystemVariables().put(name, value);
076                                fRows[rowIndex][1] = value;
077                        }
078                }
079
080                @Override
081                public String getColumnName(int column) {
082                        if (column == 0) {
083                                return "Name";
084                        } else {
085                                return "Value";
086                        }
087                }
088        }
089
090        private static final long serialVersionUID = 1L;
091        private AEFrame frame;
092        private VarTableModel dataModel;
093
094        public EnvPropertiesTable(AEFrame aeFrame) {
095                this.frame = aeFrame;
096                setDefaultEditor(String.class, new DefaultCellEditor(new JTextField()));
097                setDefaultEditor(Map.class, new ArrayCellEditor(frame));
098                setDefaultEditor(ArrayList.class, new ArrayCellEditor(frame));
099                setDefaultEditor(String[].class, new ArrayCellEditor(frame));
100                getTableHeader().setReorderingAllowed(false);
101                dataModel = new VarTableModel();
102                setModel(dataModel);
103        }
104
105        public AEWorkspace getWorkspace() {
106                return frame.getWorkspace();
107        }
108
109        public void refresh() {
110                dataModel.refresh();
111                invalidate();
112        }
113}