CreateXMLRulePanel.java
001 package net.sourceforge.pmd.util.designer;
002 
003 import java.awt.GridBagConstraints;
004 import java.awt.GridBagLayout;
005 import java.awt.event.ActionEvent;
006 import java.awt.event.ActionListener;
007 
008 import javax.swing.JButton;
009 import javax.swing.JLabel;
010 import javax.swing.JPanel;
011 import javax.swing.JScrollPane;
012 import javax.swing.JTextArea;
013 import javax.swing.JTextField;
014 
015 import net.sourceforge.pmd.PMD;
016 
017 /**
018  * This class is responsible for creating the
019  * contentpanel for the Create Rule XML Frame.
020  */
021 public class CreateXMLRulePanel extends JPanel implements ActionListener{
022   
023   private JTextField rulenameField = new JTextField(30);
024   private JTextField rulemsgField = new JTextField(30);
025   private JTextArea ruledescField = new JTextArea(5,30);
026   private JTextArea ruleXMLArea = new JTextArea(3030);
027   private JTextArea xpathQueryArea = new JTextArea();
028   private CodeEditorTextPane codeEditorPane = new CodeEditorTextPane();
029   
030   public CreateXMLRulePanel(JTextArea xpathQueryArea, CodeEditorTextPane codeEditorPane){
031     super();
032     this.xpathQueryArea = xpathQueryArea;
033     this.codeEditorPane = codeEditorPane;
034     GridBagConstraints gbc = new GridBagConstraints();
035     // We use a gridbaglayout for a nice and sturdy look and feel
036     GridBagLayout gbl = new GridBagLayout()
037       setLayout(gbl);
038       
039       gbc.gridx = 0;
040       gbc.gridy = 0;
041       gbc.fill = GridBagConstraints.NONE;
042       gbc.anchor = GridBagConstraints.EAST;
043       gbc.weightx = 0.5;
044       JLabel rulenameLabel = new JLabel("Rule name : ");
045       gbl.setConstraints(rulenameLabel, gbc);
046       add(rulenameLabel);
047       gbc.weightx = 0.5;
048       gbc.anchor = GridBagConstraints.WEST;
049       gbc.gridx = 1;
050       gbl.setConstraints(rulenameField, gbc);
051       add(rulenameField);
052       
053       gbc.gridx = 0;
054       gbc.gridy = 1;
055       gbc.anchor = GridBagConstraints.EAST;
056       gbc.weightx = 0.5;
057       JLabel rulemsgLabel = new JLabel("Rule msg : ");
058       gbl.setConstraints(rulemsgLabel, gbc);
059       add(rulemsgLabel);
060       gbc.gridx = 1;
061       gbc.anchor = GridBagConstraints.WEST;
062       gbc.weightx = 0.5;
063       gbl.setConstraints(rulemsgField, gbc);
064       add(rulemsgField);
065       
066       gbc.gridx = 0;
067       gbc.gridy = 2;
068       gbc.anchor = GridBagConstraints.EAST;
069       gbc.weightx = 0.5;
070       JLabel ruledescLabel = new JLabel("Rule desc : ");
071       gbl.setConstraints(ruledescLabel,gbc);
072       add(ruledescLabel);
073       gbc.gridx = 1;
074       gbc.anchor = GridBagConstraints.WEST;
075       gbc.weightx = 0.5;
076       gbl.setConstraints(ruledescField,gbc);
077       add(ruledescField);
078       
079       gbc.gridx = 0;
080       gbc.gridy = 3;
081       gbc.gridwidth = 2;
082       gbc.anchor = GridBagConstraints.NORTH;
083       JButton createRuleBtn = new JButton("Create rule XML");
084       createRuleBtn.addActionListener(this);
085       gbl.setConstraints(createRuleBtn, gbc);
086       add(createRuleBtn);
087       
088       gbc.gridx = 0;
089       gbc.gridy = 4;
090       gbc.anchor = GridBagConstraints.NORTH;
091       gbc.fill = GridBagConstraints.BOTH;
092       gbc.weightx = 1.0;
093       gbc.weighty = 1.0;
094       JScrollPane ruleXMLPane = new JScrollPane(ruleXMLArea);
095       gbl.setConstraints(ruleXMLPane, gbc);
096       add(ruleXMLPane);
097       
098       repaint();
099   }
100 
101   private void appendLn(StringBuffer sb, String text) {
102     sb.append(text).append(PMD.EOL);
103   }
104 
105   /**
106    * We let our class implement the ActionListener interface
107    * and use it to generate the xml code when the user presses
108    * the "Create rule XML" button.
109    
110    */
111   public void actionPerformed(ActionEvent exception) {
112       StringBuffer buffer = new StringBuffer(200);
113       appendLn(buffer, "<rule  name=\"" + rulenameField.getText() '\"');
114       appendLn(buffer, "  message=\"" + rulemsgField.getText() '\"');
115       appendLn(buffer, "  class=\"" (xpathQueryArea.getText().length() == "" "net.sourceforge.pmd.lang.rule.XPathRule""\">");
116       appendLn(buffer, "  <description>");
117       appendLn(buffer, "  " + ruledescField.getText());
118       appendLn(buffer, "  </description>");
119       if (xpathQueryArea.getText().length() != 0) {
120         appendLn(buffer, "  <properties>");
121         appendLn(buffer, "    <property name=\"xpath\">");
122         appendLn(buffer, "    <value>");
123         appendLn(buffer, "<![CDATA[");
124         appendLn(buffer, xpathQueryArea.getText());
125         appendLn(buffer, "]]>");
126         appendLn(buffer, "    </value>");
127         appendLn(buffer, "    </property>");
128         appendLn(buffer, "  </properties>");
129       }
130       appendLn(buffer, "  <priority>3</priority>");
131       appendLn(buffer, "  <example>");
132       appendLn(buffer, "<![CDATA[");
133       appendLn(buffer, codeEditorPane.getText());
134       appendLn(buffer, "]]>");
135       appendLn(buffer, "  </example>");
136       appendLn(buffer, "</rule>");
137   
138       ruleXMLArea.setText(buffer.toString());
139       repaint();
140   }  
141   
142 }