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}