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(30, 30);
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() == 0 ? "" : "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 }
|