1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 /******************************************************************************
25 * CodeGenerator.java
26 *
27 * Sub-window that facilitates the code generation process
28 *****************************************************************************/
29
30 package zeus.generator.code;
31
32 import java.util.*;
33 import java.awt.*;
34 import java.awt.event.*;
35 import java.io.*;
36 import javax.swing.*;
37 import javax.swing.border.*;
38
39 import zeus.gui.help.*;
40 import zeus.generator.*;
41 import zeus.util.*;
42 import zeus.concepts.*;
43
44 public class CodeGenerator extends JFrame
45 {
46 static final String CODE_GENERATOR = "Code Generator";
47
48 protected JTabbedPane tabbedPane;
49 protected GenerationPanel generationPanel;
50 protected UtilityPanel utilityPanel;
51 protected AgentPanel agentPanel;
52 protected TaskPanel taskPanel;
53 protected GeneratorModel genmodel;
54 protected GenerationPlan genplan;
55 protected boolean isSubFrame = false;
56 protected AgentWriter agentWriter = null;
57 protected TaskWriter taskWriter = null;
58 protected ScriptWriter scriptWriter = null;
59
60 public CodeGenerator(GeneratorModel genmodel, GenerationPlan genplan,
61 boolean isSubFrame) {
62 this(genmodel,genplan);
63 this.isSubFrame = isSubFrame;
64 }
65
66 public CodeGenerator(GeneratorModel genmodel, GenerationPlan genplan)
67 {
68 this.genmodel = genmodel;
69 this.genplan = genplan;
70
71 setTitle(CODE_GENERATOR);
72 JPanel panel = (JPanel)getContentPane();
73 panel.setBackground(Color.gray);
74
75 String path = SystemProps.getProperty("gif.dir") + "generator" +
76 System.getProperty("file.separator");
77 ImageIcon icon = new ImageIcon(path + "stripe.gif");
78 setIconImage(icon.getImage());
79
80 panel.setLayout(new BorderLayout());
81 tabbedPane = new JTabbedPane();
82
83 generationPanel = new GenerationPanel(genplan);
84 utilityPanel = new UtilityPanel(genplan);
85 agentPanel = new AgentPanel(genplan);
86 taskPanel = new TaskPanel(genplan);
87
88 tabbedPane.addTab("Generation Plan", generationPanel);
89 tabbedPane.addTab("Utility Agents", utilityPanel);
90 tabbedPane.addTab("Task Agents", agentPanel);
91 tabbedPane.addTab("Tasks", taskPanel);
92 tabbedPane.setSelectedIndex(0);
93
94 tabbedPane.setTabPlacement(JTabbedPane.BOTTOM);
95 panel.add(tabbedPane,BorderLayout.CENTER);
96 panel.add(new ControlPanel(),BorderLayout.NORTH);
97 panel.setPreferredSize(new Dimension(800,640));
98 this.addWindowListener(
99 new WindowAdapter() {
100 public void windowClosing(WindowEvent e) {
101 cancel();
102 }
103 }
104 );
105
106 pack();
107 }
108
109 protected class ControlPanel extends JToolBar implements ActionListener {
110 protected JButton generateBtn;
111 protected JButton clearBtn;
112 protected JButton cancelBtn;
113 protected JToggleButton helpBtn;
114 protected HelpWindow helpWin;
115
116 public ControlPanel() {
117 setBackground(Color.lightGray);
118 setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
119 setVisible(true);
120
121 String sep = System.getProperty("file.separator");
122 String path = SystemProps.getProperty("gif.dir") + "generator" + sep;
123
124 generateBtn = new JButton(new ImageIcon(path + "generate.gif"));
125 generateBtn.addActionListener(this);
126 generateBtn.setMargin(new Insets(0,0,0,0));
127 generateBtn.setToolTipText("Generate source code");
128 add(generateBtn);
129
130 addSeparator();
131
132 clearBtn = new JButton(new ImageIcon(path + "clear-big.gif"));
133 clearBtn.addActionListener(this);
134 clearBtn.setMargin(new Insets(0,0,0,0));
135 clearBtn.setToolTipText("Clear code generation plan");
136 add(clearBtn);
137
138 addSeparator();
139
140 cancelBtn = new JButton(new ImageIcon(path + "cancel.gif"));
141 cancelBtn.addActionListener(this);
142 cancelBtn.setMargin(new Insets(0,0,0,0));
143 cancelBtn.setToolTipText("Dismiss window");
144 add(cancelBtn);
145
146 addSeparator();
147
148 helpBtn = new JToggleButton(new ImageIcon(path + "info.gif"));
149 helpBtn.addActionListener(this);
150 helpBtn.setMargin(new Insets(0,0,0,0));
151 helpBtn.setToolTipText("Help about code generator");
152 add(helpBtn);
153
154 validate();
155 }
156
157 public void actionPerformed(ActionEvent e) {
158 Object src = e.getSource();
159
160 if ( src == generateBtn )
161 generateCode();
162 else if ( src == clearBtn )
163 genplan.reset();
164 else if ( src == cancelBtn )
165 cancel();
166 else if ( src == helpBtn ) {
167 if ( helpBtn.isSelected() ) {
168 helpWin = new HelpWindow(SwingUtilities.getRoot(this),
169 getLocation(), "generator", "Code Generator");
170 helpWin.setSource(helpBtn);
171 }
172 else
173 helpWin.dispose();
174 }
175 }
176 }
177
178 protected void cancel() {
179 this.setVisible(false);
180 if ( !isSubFrame ) {
181 System.exit(0);
182 }
183 }
184
185 protected String createTargetDirectory() {
186 String directory = genplan.getDirectory();
187 if ( directory != null )
188 directory = directory.trim();
189 if ( directory == null || directory.equals("") )
190 directory = System.getProperty("user.dir");
191
192 File f = new File(directory);
193 if ( f.exists() ) {
194 if (f.isFile())
195 directory = f.getPath();
196 else
197 directory = f.getAbsolutePath();
198 }
199 else if (!f.mkdirs()) {
200 JOptionPane.showMessageDialog(this,"Cannot create directory\nCheck path name",
201 "Error", JOptionPane.ERROR_MESSAGE);
202 return null;
203 }
204 directory += File.separator;
205 return directory;
206 }
207
208 protected void generateCode()
209 {
210 JTextArea textArea = generationPanel.getTextArea();
211 textArea.setText("");
212
213
214
215 String file = genmodel.ontology.getFilename();
216 if (file == null) {
217 textArea.append("You can not generate code until you have saved your ontology");
218 return;
219 }
220
221 String directory = createTargetDirectory();
222 if (directory == null || directory.equals("")) {
223 textArea.append("You can not generate code until you have specified a target directory");
224 return;
225 }
226
227 textArea.append("###### Code Generation Started ######\n\n");
228 if ( agentWriter == null )
229 {
230 agentWriter = new AgentWriter(genplan,genmodel,directory,textArea);
231 taskWriter = new TaskWriter(genplan,genmodel,directory,textArea);
232 scriptWriter = new ScriptWriter(genplan,genmodel,directory,textArea);
233 }
234 scriptWriter.write();
235 agentWriter.write();
236 taskWriter.write();
237 textArea.append("\n###### Code Generation Completed ######\n");
238 }
239
240 protected static void usage() {
241 System.err.println("Usage: java CodeGenerator -f <file> [-h] [-v]");
242 System.exit(0);
243 }
244
245 protected static void version() {
246 System.err.println("Zeus Code Generator version: " +
247 SystemProps.getProperty("version.id"));
248 System.exit(0);
249 }
250
251 public static void main(String[] arg) {
252 String filename = null;
253
254 for( int i = 0; i < arg.length; i++ ) {
255 if ( arg[i].equals("-f") && ++i < arg.length )
256 filename = arg[i];
257 else if ( arg[i].equals("-h") )
258 usage();
259 else if ( arg[i].equals("-v") )
260 version();
261 else
262 usage();
263 }
264
265 if ( filename == null ) {
266 System.err.println("Error: No filename specified");
267 usage();
268 }
269
270 GenSym genSym = new GenSym("AgentGenerator");
271 OntologyDb ontology = new OntologyDb(genSym);
272 GeneratorModel genmodel = new GeneratorModel(ontology);
273 GenerationPlan genplan = new GenerationPlan(genmodel,ontology);
274 FileHandler filer = new FileHandler(ontology,genmodel,genplan);
275
276 CodeGenerator generator = new CodeGenerator(genmodel,genplan);
277 generator.setVisible(true);
278
279 String dir = System.getProperty("user.dir") +
280 System.getProperty("file.separator");
281 File f = new File(dir + filename);
282
283 Frame frame = (Frame)SwingUtilities.getRoot(generator);
284 Cursor lastCursor = frame.getCursor();
285 frame.setCursor(new Cursor(Cursor.WAIT_CURSOR));
286 int status = filer.openFile(f);
287 frame.setCursor(lastCursor);
288 if ( (status & FileHandler.ERROR_MASK) != 0 ) {
289 JOptionPane.showMessageDialog(generator,filer.getError(),
290 "Error",JOptionPane.ERROR_MESSAGE);
291 System.exit(0);
292 }
293 else if ( (status & FileHandler.WARNING_MASK) != 0 ) {
294 JOptionPane.showMessageDialog(generator,filer.getWarning(),
295 "Warning",JOptionPane.WARNING_MESSAGE);
296 }
297 }
298 }