001package com.ganteater.ae.desktop.editor; 002 003import java.awt.BorderLayout; 004import java.awt.Dimension; 005import java.awt.event.ActionEvent; 006import java.awt.event.ActionListener; 007import java.util.Arrays; 008import java.util.HashMap; 009import java.util.Map; 010import java.util.Set; 011import java.util.Vector; 012 013import javax.swing.JButton; 014import javax.swing.JPanel; 015import javax.swing.JScrollPane; 016import javax.swing.JTable; 017import javax.swing.ListSelectionModel; 018import javax.swing.SwingUtilities; 019import javax.swing.table.DefaultTableModel; 020 021import org.apache.commons.lang.ObjectUtils; 022 023import com.ganteater.ae.desktop.ui.Button; 024import com.ganteater.ae.processor.Processor; 025import com.ganteater.ae.util.xml.easyparser.Node; 026 027public class VariableViewPanel extends JPanel implements Editor { 028 029 private static final long serialVersionUID = 2888716197417976230L; 030 031 private JTable fVariablesTable = new JTable(); 032 033 private TaskEditor editor; 034 035 private Vector<Vector<String>> fVariables = new Vector<>(); 036 037 @Override 038 public void init(TaskEditor editor) { 039 setLayout(new BorderLayout()); 040 this.editor = editor; 041 042 fVariablesTable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 043 fVariablesTable.setCellSelectionEnabled(true); 044 045 JPanel panel = new JPanel(new BorderLayout()); 046 JButton button = new Button("refresh.png"); 047 button.addActionListener(new ActionListener() { 048 049 public void actionPerformed(ActionEvent arg0) { 050 SwingUtilities.invokeLater(() -> refreshData()); 051 } 052 053 }); 054 055 panel.add(button, BorderLayout.EAST); 056 add(panel, BorderLayout.NORTH); 057 fVariablesTable.setSize(new Dimension(0, 0)); 058 add(new JScrollPane(fVariablesTable), BorderLayout.CENTER); 059 refreshData(); 060 } 061 062 public void refreshData() { 063 if (editor.getTaskProcessor() != null) { 064 synchronized (fVariables) { 065 fVariables.removeAllElements(); 066 Map<String, Object> variables = new HashMap<String, Object>(Processor.getGlobalVariables()); 067 variables.putAll((Map<String, Object>) editor.getTaskProcessor().getVariables()); 068 loadProperties(variables); 069 070 Vector<String> columnNames = new Vector<>(); 071 columnNames.add("Name"); 072 columnNames.add("Value"); 073 074 DefaultTableModel dataModel = new DefaultTableModel(fVariables, columnNames) { 075 @Override 076 public boolean isCellEditable(int row, int column) { 077 return false; 078 } 079 }; 080 fVariablesTable.setModel(dataModel); 081 } 082 083 fVariablesTable.repaint(); 084 } 085 } 086 087 private void loadProperties(Map<String, Object> variables) { 088 Set tehKeySet = variables.keySet(); 089 Object[] theKeys = tehKeySet.toArray(); 090 Arrays.sort(theKeys); 091 092 for (int theCurId = 0; theCurId < theKeys.length; theCurId++) { 093 094 Vector theCurrentRow = new Vector(); 095 096 String key = (String) theKeys[theCurId]; 097 Object theValue = variables.get(key); 098 099 theCurrentRow.add(key); 100 if (theValue instanceof String) { 101 theCurrentRow.add(theValue); 102 } else if (theValue instanceof String[]) { 103 StringBuffer theBuffer = new StringBuffer(); 104 String[] valueArray = (String[]) theValue; 105 theBuffer.append("{ARRAY}["); 106 for (int i = 0; i < valueArray.length; i++) { 107 theBuffer.append(valueArray[i]); 108 if (i < valueArray.length - 1) { 109 theBuffer.append("]["); 110 } 111 } 112 theBuffer.append(']'); 113 theCurrentRow.add(theBuffer.toString()); 114 } else if (theValue instanceof Map) { 115 StringBuffer theBuffer = new StringBuffer(); 116 Map valueArray = (Map) theValue; 117 theBuffer.append("{MAP}[" + ObjectUtils.toString(valueArray)); 118 theBuffer.append(']'); 119 theCurrentRow.add(theBuffer.toString()); 120 } else { 121 StringBuffer theBuffer = new StringBuffer(); 122 theBuffer.append(ObjectUtils.toString(theValue)); 123 theCurrentRow.add(theBuffer.toString()); 124 } 125 fVariables.add(theCurrentRow); 126 } 127 } 128 129 @Override 130 public void setEditorNode(Node editorNode) { 131 } 132}