1 package zeus.generator.agent;
2
3 import java.util.*;
4 import java.awt.*;
5 import javax.swing.*;
6 import javax.swing.event.*;
7 import javax.swing.border.*;
8 import javax.swing.table.*;
9 import java.awt.event.*;
10
11 import zeus.util.*;
12 import zeus.concepts.*;
13 import zeus.gui.help.*;
14 import zeus.gui.fields.*;
15 import zeus.generator.*;
16 import zeus.generator.util.*;
17 import zeus.gui.editors.*;
18
19 public class TaskAttributePanel extends JPanel {
20
21 private java.util.List restrictions;
22
23 public TaskAttributePanel(AgentGenerator generator,
24 GeneratorModel genmodel,
25 AgentEditor editor,
26 AgentDescription agent, boolean isVar,
27 OntologyDb ontologyDb, String label) {
28 super();
29 init(generator, genmodel, editor, agent, isVar, ontologyDb, label);
30 }
31
32 private void init(AgentGenerator generator,
33 GeneratorModel genmodel,
34 AgentEditor editor,
35 AgentDescription agent, boolean isVar,
36 OntologyDb ontologyDb, String label) {
37
38
39 GridBagLayout gridBagLayout = new GridBagLayout();
40 setLayout(gridBagLayout);
41 setBackground(java.awt.Color.lightGray);
42
43
44 makeBorder(label);
45
46
47 String[] tasks = agent.getTasks();
48 TaskModel taskModel = new TaskModel(tasks, genmodel);
49 taskModel.addChangeListener(editor);
50 taskModel.setReadOnly(TaskModel.TASK);
51 JTable taskTable = makeTaskTable(taskModel);
52 configureTable(taskTable);
53
54
55 FactModel factModel = new FactModel(ontologyDb, new AttributeModel(),
56 isVar, 0, new Fact[0]);
57 factModel.setEditable(false);
58 TableCellEditor instanceEditor =
59 new FactPanel(ontologyDb, editor, new Fact[0],
60 isVar, label).newInstanceEditor();
61 JTable factTable = makeFactTable(factModel, instanceEditor);
62 configureTable(factTable);
63
64
65 AttributeModel attModel = factModel.getAttributeModel();
66 attModel.enableRestrictions();
67 attModel.setWriteable(AttributeModel.RESTRICTION);
68 attModel.setReadOnly(AttributeModel.VALUE);
69 JTable attTable = makeAttributeTable(attModel);
70 configureTable(attTable);
71
72
73 makeScrollPane(taskTable, gridBagLayout);
74 makeScrollPane(factTable, gridBagLayout);
75 makeScrollPane(attTable, gridBagLayout);
76
77
78 setupListeners(taskTable, taskModel, factTable, factModel,
79 attTable, attModel, genmodel, agent);
80
81 attModel.addChangeListener(editor);
82 }
83
84 private void makeScrollPane(JTable table, GridBagLayout layout) {
85
86 JScrollPane scrollPane = new JScrollPane(table);
87 scrollPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
88 scrollPane.setMinimumSize(new Dimension(160, 80));
89 scrollPane.setPreferredSize(new Dimension(200, 80));
90
91 GridBagConstraints gbc = new GridBagConstraints();
92 gbc.gridwidth = GridBagConstraints.REMAINDER;
93 gbc.fill = GridBagConstraints.BOTH;
94 gbc.weightx = gbc.weighty = 1;
95 gbc.insets = new Insets(8,8,8,8);
96
97 layout.setConstraints(scrollPane, gbc);
98 add(scrollPane);
99 }
100
101 private void setupListeners(JTable taskTable, TaskModel taskModel,
102 JTable factTable, FactModel factModel,
103 JTable attTable, AttributeModel attModel,
104 GeneratorModel genModel, AgentDescription agent){
105
106 ListSelectionListener listener =
107 new TaskAttributeListener(taskTable, taskModel, factTable, factModel,
108 attTable, attModel, genModel, agent);
109 taskTable.getSelectionModel().addListSelectionListener(listener);
110 factTable.getSelectionModel().addListSelectionListener(listener);
111 attTable.getSelectionModel().addListSelectionListener(listener);
112
113 restrictions = ((TaskAttributeListener)listener).getRestrictions();
114 }
115
116 private void configureTable(JTable table) {
117 table.getTableHeader().setReorderingAllowed(false);
118 table.setColumnSelectionAllowed(false);
119 table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
120 }
121
122 private void makeBorder(String label) {
123 TitledBorder border = (BorderFactory.createTitledBorder(label));
124 border.setTitlePosition(TitledBorder.TOP);
125 border.setTitleJustification(TitledBorder.RIGHT);
126 border.setTitleFont(new Font("Helvetica", Font.BOLD, 14));
127 border.setTitleColor(java.awt.Color.blue);
128 setBorder(border);
129 }
130
131 private JTable makeTaskTable(TaskModel model) {
132
133 TableColumnModel tm = new DefaultTableColumnModel();
134 TableColumn column;
135
136 column = new TableColumn(TaskModel.TASK,12);
137 column.setHeaderValue(model.getColumnName(TaskModel.TASK));
138 tm.addColumn(column);
139
140 column = new TableColumn(TaskModel.TYPE,24);
141 column.setHeaderValue(model.getColumnName(TaskModel.TYPE));
142 tm.addColumn(column);
143
144 JTable taskTable = new JTable(model, tm);
145 return taskTable;
146 }
147
148 private JTable makeFactTable(FactModel factModel, TableCellEditor editor) {
149
150 TableColumnModel factTm = new DefaultTableColumnModel();
151
152 TableColumn column = new TableColumn(FactModel.TYPE,12);
153 column.setHeaderValue(factModel.getColumnName(FactModel.TYPE));
154 factTm.addColumn(column);
155
156 column = new TableColumn(FactModel.INSTANCE,24);
157 column.setHeaderValue(factModel.getColumnName(FactModel.INSTANCE));
158 factTm.addColumn(column);
159
160 JTable factTable = new JTable(factModel, factTm);
161 return factTable;
162 }
163
164 private JTable makeAttributeTable(AttributeModel model) {
165
166 TableColumnModel attTm = new DefaultTableColumnModel();
167
168 TableColumn column = new TableColumn(AttributeModel.ATTRIBUTE,12);
169 column.setHeaderValue(model.getColumnName(AttributeModel.ATTRIBUTE));
170 attTm.addColumn(column);
171
172 column = new TableColumn(AttributeModel.VALUE, 24);
173 column.setHeaderValue(model.getColumnName(AttributeModel.VALUE));
174 attTm.addColumn(column);
175
176 column = new TableColumn(AttributeModel.RESTRICTION, 12);
177 column.setHeaderValue(model.getColumnName(AttributeModel.RESTRICTION));
178 attTm.addColumn(column);
179
180 JTable attTable = new JTable(model, attTm);
181 return attTable;
182 }
183
184 public java.util.List getRestrictions() {
185 return restrictions;
186 }
187 }