View Javadoc

1   /*   Copyright (C) 2005 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  
23  import java.util.*;
24  import java.awt.event.ActionListener;
25  import java.awt.event.ActionEvent;
26  import javax.swing.*;
27  import javax.swing.table.DefaultTableModel;
28  import javax.swing.tree.*;
29  import javax.xml.parsers.*;
30  
31  import org.w3c.dom.*;
32  import org.apache.commons.logging.Log;
33  import org.apache.commons.logging.LogFactory;
34  
35  
36  /***
37   * Helper class for representing business methods.
38   *
39   * @author Rudie Ekkelenkamp - Finalist IT Group
40   * @version $Revision: 1.5 $, $Date: 2005/03/05 10:52:12 $
41   */
42  public class BusinessMethod extends DefaultMutableTreeNode implements JagBean {
43     
44     static Log log = LogFactory.getLog(BusinessMethod.class);
45      
46     private Session parentEntity;
47  
48     /*** Creates new form BeanForm */
49     public BusinessMethod(Session parent) {
50          initComponents();
51        parentEntity = parent;
52     }
53     
54     public BusinessMethod() {
55          initComponents();
56     }
57     
58     /*** Use for building up the entity field gui component */
59     public BusinessMethod(Session parent,Element node) {
60          initComponents();
61        parentEntity = parent;
62        try {
63              NodeList rt = node.getElementsByTagName("return-type");
64              if (rt.getLength() == 1) {
65                 String returnType = "";
66                 if (rt.item(0).getFirstChild() != null) {
67                    returnType = rt.item(0).getFirstChild().getNodeValue();
68                 }
69                 log.debug("The return type is: " + returnType);
70                 setReturnType(returnType);
71              }
72              NodeList mn = node.getElementsByTagName("method-name");
73              if (mn.getLength() == 1) {
74                 String methodName = "";
75                 if (mn.item(0).getFirstChild() != null) {
76                    methodName = mn.item(0).getFirstChild().getNodeValue();
77                 }
78                 log.debug("The method name is: " + methodName);
79                 setMethodName(methodName);
80              }
81              NodeList md = node.getElementsByTagName("description");
82              if (md.getLength() == 1) {
83  
84                 String methodDescription = "";
85                 if (md.item(0).getFirstChild() != null) {
86                    methodDescription = md.item(0).getFirstChild().getNodeValue();
87                 }
88                 log.debug("The method description is: " + methodDescription);
89                 setDescription(methodDescription);
90              }
91              ArrayList businessArguments = new ArrayList();
92              NodeList params = node.getElementsByTagName("parameter");
93              for (int k = 0; k < params.getLength(); k++) {
94                 BusinessArgument businessArgument = new BusinessArgument();
95                 Element param = (Element) params.item(k);
96                 NodeList type = param.getElementsByTagName("type");
97                 if (type.getLength() == 1) {
98                    String baType = "";
99                    if (type.item(0).getFirstChild() != null) {
100                      baType = type.item(0).getFirstChild().getNodeValue();
101                   }
102                   log.debug("The param type is: " + baType);
103                   businessArgument.setType(baType);
104                }
105                NodeList name = param.getElementsByTagName("name");
106                if (name.getLength() == 1) {
107                   String baName = "";
108                   if (name.item(0).getFirstChild() != null) {
109                      baName = name.item(0).getFirstChild().getNodeValue();
110                   }
111                   log.debug("The param name is: " + baName);
112                   businessArgument.setName(baName);
113                }
114                businessArguments.add(businessArgument);
115             }
116             setArgumentList(businessArguments);
117             log.debug("Added a businessmethod to the list");
118       } catch (Exception e) {
119          e.printStackTrace();
120       }
121    }
122     
123     
124    public javax.swing.JPanel getPanel() {
125        return panel;
126    }
127 
128    
129    public String getRefName() {
130        return getSignature();
131    }
132 
133    
134    public String getSignature() {
135        StringBuffer signature = new StringBuffer();
136        signature.append(getReturnType());
137        signature.append(" ");
138        signature.append(getMethodName());
139        signature.append("(");
140        for(Iterator i = getArgumentList().iterator(); i.hasNext(); ) {
141            BusinessArgument next = (BusinessArgument) i.next();
142            signature.append(next.getType());
143            signature.append(" ");
144            signature.append(next.getName());
145            if(i.hasNext()) {
146                signature.append(",");
147            }
148        }
149        signature.append(")");
150        return signature.toString();
151    }
152 
153    public void getXML(Element el) throws ParserConfigurationException {
154       Document doc = el.getOwnerDocument();
155         Element businessMethod = doc.createElement("business-method");
156 
157         Element returnType = doc.createElement("return-type");
158         if (getReturnType() == null) {
159            returnType.appendChild(doc.createTextNode("void"));
160         }  else {
161            returnType.appendChild(doc.createTextNode(getReturnType()));
162         }
163         businessMethod.appendChild(returnType);
164 
165         Element methodName = doc.createElement("method-name");
166         String methodString = getMethodName();
167         if (methodString == null) {
168            methodString = "";
169         }
170         methodName.appendChild(doc.createTextNode(methodString));
171         businessMethod.appendChild(methodName);
172 
173         Element desc = doc.createElement("description");
174         String descString = getDescription();
175         if (descString == null) {
176            descString = "";
177         }
178         desc.appendChild(doc.createTextNode(descString));
179         businessMethod.appendChild(desc);
180 
181         for (int j = 0; j < getArgumentList().size(); j++) {
182            Element parameter = doc.createElement("parameter");
183            BusinessArgument arg = (BusinessArgument) getArgumentList().get(j);
184 
185            Element type = doc.createElement("type");
186            String typeString = arg.getType();
187            if (typeString == null) {
188               typeString = "";
189            }
190            log.info("Type: " + typeString);
191 
192            type.appendChild(doc.createTextNode(typeString));
193            parameter.appendChild(type);
194 
195            Element pname = doc.createElement("name");
196            String nameString = arg.getName();
197            if (nameString == null) {
198               nameString = "";
199            }
200            log.debug("Name " + nameString);
201            pname.appendChild(doc.createTextNode(nameString));
202            parameter.appendChild(pname);
203 
204            businessMethod.appendChild(parameter);
205         }
206         el.appendChild(businessMethod);
207    }
208     
209    
210     
211     /***
212      * the return type of the method.
213      * @return
214      */
215     public String getReturnType() {
216         return returnTypeInput.getText();
217     }
218     
219     /***
220      * Set the return type of the business method.
221      *
222      * @param returnType
223      */
224     public void setReturnType(String returnType) {
225         returnTypeInput.setText(returnType);
226     }
227     
228     /***
229      * Get the business method name.
230      *
231      * @return the name.
232      */
233     public String getMethodName() {
234         return methodNameInput.getText();
235     }
236     
237     /***
238      * Get the business method name in uppercase notation.
239      *
240      * @return the name.
241      */
242     public String getMethodNameUpper() {
243         String methodName = getMethodName();
244         if (methodName == null) {
245             return methodName;
246         }
247         if (methodName.length() > 1) {
248             return new String(methodName.substring(0, 1).toUpperCase() + methodName.substring(1));
249         }
250         return methodName.toUpperCase();
251         
252     }
253     
254     /***
255      * Set the method name.
256      *
257      * @param methodName the name.
258      */
259     public void setMethodName(String methodName) {
260         methodNameInput.setText(methodName);
261     }
262     
263     /***
264      * Get the method description.
265      * @return description.
266      */
267     public String getDescription() {
268         return descriptionInput.getText();
269     }
270     
271     /***
272      * Set the method description.
273      *
274      * @param description
275      */
276     public void setDescription(String description) {
277         descriptionInput.setText(description);
278     }
279     
280     /***
281      * get a list of all arguments of the BusinessArgument class.
282      *
283      * @return Collection of BusinessArgument classes.
284      */
285     public ArrayList getArgumentList() {
286         DefaultTableModel model = (DefaultTableModel)parametersTable.getModel();
287         
288         ArrayList argumentList = new ArrayList();
289         
290         for(int count = 0; count < model.getRowCount(); count++) {
291            BusinessArgument argument = new BusinessArgument();
292            if (model.getValueAt(count, 0) != null) {
293             argument.setName(model.getValueAt(count, 0).toString());
294            }
295            if (model.getValueAt(count, 1) != null) {
296             argument.setType(model.getValueAt(count, 1).toString());
297            }
298            argumentList.add(argument);
299         }
300         
301         return argumentList;
302     }
303     
304     /***
305      * Set the argument list.
306      * @param argumentList
307      */
308     public void setArgumentList(ArrayList argumentList) {
309         Object data[][] = new Object[argumentList.size()][2];
310         
311         for(int count = 0; count < argumentList.size(); count++) {
312             BusinessArgument arg = (BusinessArgument) argumentList.get(count);
313             data[count][0] = arg.getName();
314             data[count][1] = arg.getType();
315         }
316         
317         parametersTable.setModel(new javax.swing.table.DefaultTableModel(
318             data,
319             new String [] {
320                 "Parameter", "Type"
321             }
322         ));
323     }
324     
325     public String toString() {
326         return getRefName();
327     }
328 
329 
330    /*** This method is called from within the constructor to
331     * initialize the form.
332     * WARNING: Do NOT modify this code. The content of this method is
333     * always regenerated by the Form Editor.
334     */
335     private void initComponents() {//GEN-BEGIN:initComponents
336         panel = new javax.swing.JPanel();
337         returnTypeLabel = new javax.swing.JLabel();
338         methodNameLabel = new javax.swing.JLabel();
339         descriptionLabel = new javax.swing.JLabel();
340         parametersLabel = new javax.swing.JLabel();
341         returnTypeInput = new javax.swing.JTextArea();
342         methodNameScrollPane = new javax.swing.JScrollPane();
343         methodNameInput = new javax.swing.JTextArea();
344         descriptionScrollPane = new javax.swing.JScrollPane();
345         descriptionInput = new javax.swing.JTextArea();
346         parametersScrollPane = new javax.swing.JScrollPane();
347         parametersTable = new javax.swing.JTable();
348         addParameterButton = new javax.swing.JButton();
349         deleteParameterButton = new javax.swing.JButton();
350 
351         panel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
352 
353         returnTypeLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
354         returnTypeLabel.setText("Return type:");
355         panel.add(returnTypeLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 10, 90, -1));
356 
357         methodNameLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
358         methodNameLabel.setText("Method name:");
359         panel.add(methodNameLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 40, 90, -1));
360 
361         descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
362         descriptionLabel.setText("Description:");
363         panel.add(descriptionLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 100, 90, -1));
364 
365         parametersLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
366         parametersLabel.setText("Parameters:");
367         panel.add(parametersLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 190, 90, -1));
368 
369         returnTypeInput.setFont(new java.awt.Font("Microsoft Sans Serif", 0, 11));
370         returnTypeInput.setAutoscrolls(false);
371         returnTypeInput.setBorder(new javax.swing.border.EtchedBorder());
372         returnTypeInput.addKeyListener(new java.awt.event.KeyAdapter() {
373             public void keyReleased(java.awt.event.KeyEvent evt) {
374                 inputKeyReleased(evt);
375             }
376         });
377 
378         panel.add(returnTypeInput, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 10, 260, -1));
379 
380         methodNameScrollPane.setBorder(null);
381         methodNameInput.setFont(new java.awt.Font("Microsoft Sans Serif", 0, 11));
382         methodNameInput.setLineWrap(true);
383         methodNameInput.setWrapStyleWord(true);
384         methodNameInput.setBorder(new javax.swing.border.EtchedBorder());
385         methodNameScrollPane.setViewportView(methodNameInput);
386 
387         panel.add(methodNameScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 40, 260, 40));
388 
389         descriptionScrollPane.setBorder(null);
390         descriptionScrollPane.setFocusable(false);
391         descriptionScrollPane.setHorizontalScrollBar(descriptionScrollPane.getHorizontalScrollBar());
392         descriptionInput.setFont(new java.awt.Font("Microsoft Sans Serif", 0, 11));
393         descriptionInput.setLineWrap(true);
394         descriptionInput.setWrapStyleWord(true);
395         descriptionInput.setBorder(new javax.swing.border.EtchedBorder());
396         descriptionScrollPane.setViewportView(descriptionInput);
397 
398         panel.add(descriptionScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 100, 260, 80));
399 
400         parametersTable.setModel(new javax.swing.table.DefaultTableModel(
401             new Object [][] {
402 
403             },
404             new String [] {
405                 "Parameter", "Type"
406             }
407         ));
408         parametersScrollPane.setViewportView(parametersTable);
409 
410         panel.add(parametersScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 190, 260, 110));
411 
412         addParameterButton.setText("Add");
413         addParameterButton.addActionListener(new java.awt.event.ActionListener() {
414             public void actionPerformed(java.awt.event.ActionEvent evt) {
415                 addParameterButtonActionPerformed(evt);
416             }
417         });
418 
419         panel.add(addParameterButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 310, -1, -1));
420 
421         deleteParameterButton.setText("Delete");
422         deleteParameterButton.addActionListener(new java.awt.event.ActionListener() {
423             public void actionPerformed(java.awt.event.ActionEvent evt) {
424                 deleteParameterButtonActionPerformed(evt);
425             }
426         });
427 
428         panel.add(deleteParameterButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(180, 310, -1, -1));
429 
430     }//GEN-END:initComponents
431 
432     private void inputKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_inputKeyReleased
433       JagGenerator.stateChanged(false);
434     }//GEN-LAST:event_inputKeyReleased
435 
436     private void deleteParameterButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteParameterButtonActionPerformed
437         int selectedRows[] = parametersTable.getSelectedRows();
438         
439         ArrayList argumentList = getArgumentList();
440         for(int count = selectedRows.length -1; count >= 0; count--) {
441             int deleteCol = selectedRows[count];
442             System.out.println("deleting: "+deleteCol);
443             
444             argumentList.remove(deleteCol);
445         }
446         setArgumentList(argumentList);
447       JagGenerator.stateChanged(false);
448         
449     }//GEN-LAST:event_deleteParameterButtonActionPerformed
450 
451     private void addParameterButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addParameterButtonActionPerformed
452         BusinessArgument ba = new BusinessArgument();
453         ArrayList argumentList = getArgumentList();
454         argumentList.add(ba);
455         setArgumentList(argumentList);
456       JagGenerator.stateChanged(false);
457         
458     }//GEN-LAST:event_addParameterButtonActionPerformed
459 
460    private void refNameTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_refNameTextFocusLost
461       JagGenerator.stateChanged(false);
462    }//GEN-LAST:event_refNameTextFocusLost
463 
464    private void rootPackageTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_rootPackageTextFocusLost
465       JagGenerator.stateChanged(false);
466    }//GEN-LAST:event_rootPackageTextFocusLost
467 
468    private void descriptionTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_descriptionTextFocusLost
469       JagGenerator.stateChanged(false);
470    }//GEN-LAST:event_descriptionTextFocusLost
471 
472    private void nameTextFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_nameTextFocusLost
473       JagGenerator.stateChanged(false);
474 
475    }//GEN-LAST:event_nameTextFocusLost
476 
477 
478    private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
479    }//GEN-LAST:event_addButtonActionPerformed
480 
481    
482 
483    private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
484    }//GEN-LAST:event_removeButtonActionPerformed
485 
486     // Variables declaration - do not modify//GEN-BEGIN:variables
487     private javax.swing.JButton addParameterButton;
488     private javax.swing.JButton deleteParameterButton;
489     private javax.swing.JTextArea descriptionInput;
490     private javax.swing.JLabel descriptionLabel;
491     private javax.swing.JScrollPane descriptionScrollPane;
492     private javax.swing.JTextArea methodNameInput;
493     private javax.swing.JLabel methodNameLabel;
494     private javax.swing.JScrollPane methodNameScrollPane;
495     private javax.swing.JPanel panel;
496     private javax.swing.JLabel parametersLabel;
497     private javax.swing.JScrollPane parametersScrollPane;
498     private javax.swing.JTable parametersTable;
499     private javax.swing.JTextArea returnTypeInput;
500     private javax.swing.JLabel returnTypeLabel;
501     // End of variables declaration//GEN-END:variables
502 }