View Javadoc

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      //Create layout
39      GridBagLayout gridBagLayout = new GridBagLayout();
40      setLayout(gridBagLayout);
41      setBackground(java.awt.Color.lightGray);
42  
43      //Create border
44      makeBorder(label);
45  
46      //Create task table
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      //Create fact table
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      //Create attribute table
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      //Add elements to panel
73      makeScrollPane(taskTable, gridBagLayout);
74      makeScrollPane(factTable, gridBagLayout);
75      makeScrollPane(attTable, gridBagLayout);
76  
77      //Setup listeners
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 }