View Javadoc

1   /*   Copyright (C) 2003 Finalist IT Group
2    *
3    *   This file is part of JAG - the Java J2EE Application Generator
4    *
5    *   JAG is free software; you can redistribute it and/or modify
6    *   it under the terms of the GNU General Public License as published by
7    *   the Free Software Foundation; either version 2 of the License, or
8    *   (at your option) any later version.
9    *   JAG is distributed in the hope that it will be useful,
10   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   *   GNU General Public License for more details.
13   *   You should have received a copy of the GNU General Public License
14   *   along with JAG; if not, write to the Free Software
15   *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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  //   private ArrayList businessMethods = new ArrayList();
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           // Now, we got the list with business methods..
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          // Only add in case of references..
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       // Create the business methods.
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() {//GEN-BEGIN: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     }//GEN-END:initComponents
464 
465    private void refNameTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_refNameTextFocusLost
466       JagGenerator.stateChanged(false);
467    }//GEN-LAST:event_refNameTextFocusLost
468 
469    private void rootPackageTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_rootPackageTextFocusLost
470       JagGenerator.stateChanged(false);
471    }//GEN-LAST:event_rootPackageTextFocusLost
472 
473    private void descriptionTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_descriptionTextFocusLost
474       JagGenerator.stateChanged(false);
475    }//GEN-LAST:event_descriptionTextFocusLost
476 
477    private void nameTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_nameTextFocusLost
478       // Add your handling code here:
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    }//GEN-LAST:event_nameTextFocusLost
486 
487 
488    private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
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    }//GEN-LAST:event_addButtonActionPerformed
508 
509    
510    private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
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    }//GEN-LAST:event_removeButtonActionPerformed
521 
522     // Variables declaration - do not modify//GEN-BEGIN:variables
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     // End of variables declaration//GEN-END:variables
539 }
540