1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package com.finalist.jaggenerator.modules;
19
20 import com.finalist.jaggenerator.*;
21 import com.finalist.jag.util.TemplateString;
22 import java.awt.event.ActionListener;
23
24 import java.util.*;
25 import javax.swing.*;
26 import javax.swing.tree.*;
27 import javax.xml.parsers.*;
28
29 import org.w3c.dom.*;
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32
33 /***
34 *
35 * @author hillie
36 */
37 public class Session extends DefaultMutableTreeNode implements JagBean {
38
39 private DefaultListModel listModel = new DefaultListModel();
40 private ArrayList relationRefs = new ArrayList();
41
42 static Log log = LogFactory.getLog(JagGenerator.class);
43
44
45 /*** Creates new form BeanForm */
46 public Session(String rootPackage) {
47 initComponents();
48 refList.setModel(listModel);
49 rootPackageText.setText(rootPackage + ".session");
50 }
51
52 public Session(Element el) {
53 initComponents();
54 refList.setModel(listModel);
55 NodeList nl = el.getElementsByTagName("module-data");
56 for (int i = 0; i < nl.getLength(); i++) {
57 Element child = (Element) nl.item(i);
58 String attName = child.getAttribute("name");
59 try {
60 String value = child.getFirstChild().getNodeValue();
61 if (value != null) {
62 if (attName.equalsIgnoreCase("name")) {
63 nameText.setText(value);
64 } else if (attName.equalsIgnoreCase("root-package")) {
65 rootPackageText.setText(value);
66 } else if (attName.equalsIgnoreCase("description")) {
67 descriptionText.setText(value);
68 } else if (attName.equalsIgnoreCase("relation-ref")) {
69 NodeList subList = child.getElementsByTagName("module-data");
70 for (int j = 0; j < subList.getLength(); j++) {
71 String entityName = (subList.item(j)).getFirstChild().getNodeValue();
72 relationRefs.add(entityName);
73 }
74 }
75 }
76 } catch (NullPointerException e) {
77 }
78 }
79 nl = el.getElementsByTagName("ref-name");
80 if (nl.getLength() > 0) {
81 Node node = nl.item(0).getFirstChild();
82 if (node != null) refNameText.setText(node.getNodeValue());
83 }
84 nl = el.getElementsByTagName("ref");
85 for (int i = 0; i < nl.getLength(); i++) {
86 Node node = nl.item(i).getFirstChild();
87 addRef(node.getNodeValue());
88 }
89
90 nl = el.getElementsByTagName("business-methods");
91
92 for (int i = 0; i < nl.getLength(); i++) {
93 Element child = (Element) nl.item(i);
94 NodeList bm = child.getElementsByTagName("business-method");
95
96 log.debug("Number of business methods: "+ bm.getLength());
97 for (int j=0; j < bm.getLength(); j++) {
98 Element bmNode = (Element) bm.item(j);
99 BusinessMethod newBusinessMethod = new BusinessMethod(this, bmNode);
100 add(newBusinessMethod);
101 }
102 }
103 }
104
105 public ArrayList getBusinessMethods() {
106 ArrayList refs = new ArrayList();
107 for (int i = 0; i < getChildCount(); i++) {
108 JagBean child = (JagBean) getChildAt(i);
109 if (child instanceof BusinessMethod) {
110 refs.add(child);
111 }
112 }
113 return refs;
114 }
115
116 /*** set Business methods. */
117 public void setBusinessMethods(ArrayList businessMethods) {
118 for (int i = 0; i < businessMethods.size(); i++) {
119 BusinessMethod child = (BusinessMethod) businessMethods.get(i);
120 add(child);
121 }
122 }
123
124 /***
125 * check if there are any business methods defines in this Session.
126 * @return true if this session has any business methods.
127 */
128 public Boolean hasBusinessMethods() {
129 if (getBusinessMethods().size() > 0) {
130 return new Boolean(true);
131 } else {
132 return new Boolean(false);
133 }
134 }
135
136 /***
137 * Gets all entities 'covered' by this session bean.
138 * @return a list of the entity beans' reference names (String).
139 */
140 public ArrayList getEntityRefs() {
141 ArrayList entityRefs = new ArrayList();
142 if (listModel != null) {
143 for (int i = 0; i < listModel.size(); i++) {
144 entityRefs.add(listModel.get(i));
145 }
146 }
147 return entityRefs;
148 }
149
150
151 /***
152 * Sets all entities 'covered' by this session bean.
153 */
154 public void setEntityRefs(ArrayList refs) {
155 if (refs != null) {
156 for (int i = 0; i < refs.size(); i++) {
157 addRef((String) refs.get(i));
158 }
159 }
160 }
161
162 /***
163 * Gets all entities 'covered' by this session bean, excluding those that
164 * were only added to support a container-managed relation.
165 * @return a list of the entity beans' reference names (String).
166 */
167 public ArrayList getNonRelationEntityRefs() {
168 ArrayList entityRefs = new ArrayList();
169 if (listModel != null) {
170 for (int i = 0; i < listModel.size(); i++) {
171 String entity = (String) listModel.get(i);
172 if (!relationRefs.contains(entity)) {
173 entityRefs.add(entity);
174 }
175 }
176 }
177 return entityRefs;
178 }
179 public String toString() {
180 return "Service - " + getRefName();
181 }
182
183 public JPanel getPanel() {
184 return panel;
185 }
186
187 public void getXML(Element el) throws ParserConfigurationException {
188 Document doc = el.getOwnerDocument();
189 Element module = doc.createElement("module");
190 module.setAttribute("name", "session");
191
192 Element name = doc.createElement("module-data");
193 name.setAttribute("name", "name");
194 if (nameText.getText() != null) {
195 name.appendChild(doc.createTextNode(nameText.getText()));
196 }
197 module.appendChild(name);
198
199 Element description = doc.createElement("module-data");
200 description.setAttribute("name", "description");
201 if (descriptionText.getText() != null) {
202 description.appendChild(doc.createTextNode(descriptionText.getText()));
203 }
204 module.appendChild(description);
205
206 Element rootPackage = doc.createElement("module-data");
207 rootPackage.setAttribute("name", "root-package");
208 if (rootPackageText.getText() != null) {
209 rootPackage.appendChild(doc.createTextNode(rootPackageText.getText()));
210 }
211 module.appendChild(rootPackage);
212
213 Element refName = doc.createElement("ref-name");
214 if (refNameText.getText() != null) {
215 refName.appendChild(doc.createTextNode(refNameText.getText()));
216 module.appendChild(refName);
217
218 } else {
219
220 }
221
222 Enumeration refs = listModel.elements();
223 if (refs != null) {
224 while (refs.hasMoreElements()) {
225 Element refNode = doc.createElement("ref");
226 String ref = (String) refs.nextElement();
227 if (ref != null) {
228 refNode.appendChild(doc.createTextNode(ref));
229 }
230 module.appendChild(refNode);
231 }
232 }
233
234
235 if (getChildCount() > 0) {
236 Element businessMethods = doc.createElement("business-methods");
237 for (int i= 0; i< getChildCount(); i++) {
238 System.out.println(i);
239 BusinessMethod bm = (BusinessMethod) getChildAt(i);
240 bm.getXML(businessMethods);
241 }
242 module.appendChild(businessMethods);
243 }
244
245 if (!relationRefs.isEmpty()) {
246 Iterator relRefs = relationRefs.iterator();
247 while (relRefs.hasNext()) {
248 Element refNode = doc.createElement("module-data");
249 refNode.setAttribute("name", "relation-ref");
250 Element child = doc.createElement("module-data");
251 child.setAttribute("name", "entity-name");
252 child.appendChild(doc.createTextNode((String) relRefs.next()));
253 refNode.appendChild(child);
254 module.appendChild(refNode);
255 }
256 }
257
258 el.appendChild(module);
259 }
260
261 public String getRootPath() {
262 return getRootPackage().toString().replace('.', '/');
263 }
264
265 public TemplateString getName() {
266 return new TemplateString(nameText.getText());
267 }
268
269 public TemplateString getUpperCaseName() {
270 return new TemplateString(nameText.getText().toUpperCase());
271 }
272
273 public void setName(String text) {
274 nameText.setText(text);
275 }
276
277 public TemplateString getDescription() {
278 return new TemplateString(descriptionText.getText());
279 }
280
281 public void setDescription(String text) {
282 descriptionText.setText(text);
283 }
284
285
286 public TemplateString getRootPackage() {
287 return new TemplateString(rootPackageText.getText());
288 }
289
290 public void setRootPackage(String text) {
291 rootPackageText.setText(text);
292 }
293
294
295 /***
296 * Returns a List of all Entities in this Session, but not those that are only
297 * a 'relation reference'.
298 * @return
299 */
300 public List getEntities() {
301 List entities = getEntitiesAndReferences();
302 entities.removeAll(getReferencedEntities());
303 return entities;
304 }
305
306 public List getReferencedEntities() {
307 ArrayList entities = new ArrayList();
308 Iterator relRefs = relationRefs.iterator();
309 while (relRefs.hasNext()) {
310 String ref = (String) relRefs.next();
311 Entity entity = JagGenerator.getEntityByRefName(ref);
312 entities.add(entity);
313 }
314 return entities;
315 }
316
317 public List getEntitiesAndReferences() {
318 ArrayList entities = new ArrayList();
319 Enumeration refs = listModel.elements();
320 while (refs.hasMoreElements()) {
321 String ref = (String) refs.nextElement();
322 Entity entity = JagGenerator.getEntityByRefName(ref);
323 entities.add(entity);
324 }
325 return entities;
326 }
327 /***
328 *
329 * @return
330 */
331 public String getRefName() {
332 return refNameText.getText();
333 }
334
335 /***
336 *
337 * @param text
338 */
339 public void setRefName(String text) {
340 refNameText.setText(text);
341 }
342
343 /***
344 *
345 * @param ref
346 */
347 public void addRef(String ref) {
348 listModel.addElement(ref);
349 }
350
351 public void addRelationRef(String entity) {
352 addRef(entity);
353 relationRefs.add(entity);
354 }
355
356
357 /*** This method is called from within the constructor to
358 * initialize the form.
359 * WARNING: Do NOT modify this code. The content of this method is
360 * always regenerated by the Form Editor.
361 */
362 private void initComponents() {
363 panel = new javax.swing.JPanel();
364 nameLabel = new javax.swing.JLabel();
365 desciptionLabel = new javax.swing.JLabel();
366 rootPackageLabel = new javax.swing.JLabel();
367 refNameLabel = new javax.swing.JLabel();
368 nameText = new javax.swing.JTextField();
369 descriptionText = new javax.swing.JTextField();
370 rootPackageText = new javax.swing.JTextField();
371 refNameText = new javax.swing.JTextField();
372 refsLabel = new javax.swing.JLabel();
373 jScrollPane1 = new javax.swing.JScrollPane();
374 refList = new javax.swing.JList();
375 buttonPanel = new javax.swing.JPanel();
376 removeButton = new javax.swing.JButton();
377 addButton = new javax.swing.JButton();
378
379 panel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
380
381 nameLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
382 nameLabel.setText("Name: ");
383 panel.add(nameLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 10, 90, -1));
384
385 desciptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
386 desciptionLabel.setText("Description: ");
387 panel.add(desciptionLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 40, 90, -1));
388
389 rootPackageLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
390 rootPackageLabel.setText("Root-package: ");
391 panel.add(rootPackageLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 70, 90, -1));
392
393 refNameLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
394 refNameLabel.setText("Ref-name: ");
395 panel.add(refNameLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 100, 90, -1));
396
397 nameText.setAutoscrolls(false);
398 nameText.addFocusListener(new java.awt.event.FocusAdapter() {
399 public void focusLost(java.awt.event.FocusEvent evt) {
400 nameTextFocusLost(evt);
401 }
402 });
403
404 panel.add(nameText, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 10, 260, -1));
405
406 descriptionText.addFocusListener(new java.awt.event.FocusAdapter() {
407 public void focusLost(java.awt.event.FocusEvent evt) {
408 descriptionTextFocusLost(evt);
409 }
410 });
411
412 panel.add(descriptionText, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 40, 260, -1));
413
414 rootPackageText.addFocusListener(new java.awt.event.FocusAdapter() {
415 public void focusLost(java.awt.event.FocusEvent evt) {
416 rootPackageTextFocusLost(evt);
417 }
418 });
419
420 panel.add(rootPackageText, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 70, 260, -1));
421
422 refNameText.addFocusListener(new java.awt.event.FocusAdapter() {
423 public void focusLost(java.awt.event.FocusEvent evt) {
424 refNameTextFocusLost(evt);
425 }
426 });
427
428 panel.add(refNameText, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 100, 260, -1));
429
430 refsLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
431 refsLabel.setText("Refs: ");
432 panel.add(refsLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 130, 90, -1));
433
434 refList.setBorder(new javax.swing.border.EtchedBorder());
435 jScrollPane1.setViewportView(refList);
436
437 panel.add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 130, 180, 170));
438
439 buttonPanel.setLayout(new java.awt.BorderLayout());
440
441 removeButton.setText("Remove");
442 removeButton.setMaximumSize(new java.awt.Dimension(56, 26));
443 removeButton.setMinimumSize(new java.awt.Dimension(56, 26));
444 removeButton.addActionListener(new java.awt.event.ActionListener() {
445 public void actionPerformed(java.awt.event.ActionEvent evt) {
446 removeButtonActionPerformed(evt);
447 }
448 });
449
450 buttonPanel.add(removeButton, java.awt.BorderLayout.SOUTH);
451
452 addButton.setText("Add");
453 addButton.addActionListener(new java.awt.event.ActionListener() {
454 public void actionPerformed(java.awt.event.ActionEvent evt) {
455 addButtonActionPerformed(evt);
456 }
457 });
458
459 buttonPanel.add(addButton, java.awt.BorderLayout.CENTER);
460
461 panel.add(buttonPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 160, -1, -1));
462
463 }
464
465 private void refNameTextFocusLost(java.awt.event.FocusEvent evt) {
466 JagGenerator.stateChanged(false);
467 }
468
469 private void rootPackageTextFocusLost(java.awt.event.FocusEvent evt) {
470 JagGenerator.stateChanged(false);
471 }
472
473 private void descriptionTextFocusLost(java.awt.event.FocusEvent evt) {
474 JagGenerator.stateChanged(false);
475 }
476
477 private void nameTextFocusLost(java.awt.event.FocusEvent evt) {
478
479 if ((nameText.getText() != null) && (nameText.getText().length() > 0)) {
480 nameText.setText(Utils.initCap(nameText.getText()));
481 this.descriptionText.setText(Utils.initCap(nameText.getText()));
482 this.refNameText.setText(Utils.initCap(nameText.getText()));
483 }
484 JagGenerator.stateChanged(true);
485 }
486
487
488 private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
489 if (((Root) getRoot()).getRefs().isEmpty()) {
490 JOptionPane.showMessageDialog(getPanel(),
491 "There are no entity beans specified in the current application, \n" +
492 "so it is not possible to add anything to this service bean yet.", "No entity beans!", javax.swing.JOptionPane.ERROR_MESSAGE);
493 return;
494 }
495 ArrayList refs = new ArrayList();
496 JFrame tmpFrame = new JFrame();
497 new SelectRefs(tmpFrame, this, refs).show();
498 if (refs == null)
499 return;
500
501 for (int i = 0; i < refs.size(); i++) {
502 listModel.addElement(refs.get(i));
503 }
504
505 refList.setModel(listModel);
506 JagGenerator.stateChanged(false);
507 }
508
509
510 private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {
511 int[] selection = refList.getSelectedIndices();
512 if (selection != null) {
513 for (int i = selection.length - 1; i >= 0; i--) {
514 relationRefs.remove(listModel.elementAt(selection[i]));
515 listModel.removeElementAt(selection[i]);
516 }
517 refList.setModel(listModel);
518 JagGenerator.stateChanged(false);
519 }
520 }
521
522
523 private javax.swing.JButton addButton;
524 private javax.swing.JPanel buttonPanel;
525 private javax.swing.JLabel desciptionLabel;
526 public javax.swing.JTextField descriptionText;
527 private javax.swing.JScrollPane jScrollPane1;
528 private javax.swing.JLabel nameLabel;
529 public javax.swing.JTextField nameText;
530 private javax.swing.JPanel panel;
531 private javax.swing.JList refList;
532 private javax.swing.JLabel refNameLabel;
533 public javax.swing.JTextField refNameText;
534 private javax.swing.JLabel refsLabel;
535 private javax.swing.JButton removeButton;
536 private javax.swing.JLabel rootPackageLabel;
537 private javax.swing.JTextField rootPackageText;
538
539 }
540