1 package net.sourceforge.pmd.util.designer;
2
3 import java.awt.GridBagConstraints;
4 import java.awt.GridBagLayout;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7
8 import javax.swing.JButton;
9 import javax.swing.JLabel;
10 import javax.swing.JPanel;
11 import javax.swing.JScrollPane;
12 import javax.swing.JTextArea;
13 import javax.swing.JTextField;
14
15 import net.sourceforge.pmd.PMD;
16 import net.sourceforge.pmd.util.StringUtil;
17
18
19
20
21
22 public class CreateXMLRulePanel extends JPanel implements ActionListener{
23
24 private JTextField rulenameField = new JTextField(30);
25 private JTextField rulemsgField = new JTextField(30);
26 private JTextArea ruledescField = new JTextArea(5,30);
27 private JTextArea ruleXMLArea = new JTextArea(30, 30);
28 private JTextArea xpathQueryArea = new JTextArea();
29 private CodeEditorTextPane codeEditorPane = new CodeEditorTextPane();
30
31 private static void appendLn(StringBuilder sb, String text) {
32 sb.append(text).append(PMD.EOL);
33 }
34
35 public CreateXMLRulePanel(JTextArea xpathQueryArea, CodeEditorTextPane codeEditorPane){
36 super();
37 this.xpathQueryArea = xpathQueryArea;
38 this.codeEditorPane = codeEditorPane;
39 GridBagConstraints gbc = new GridBagConstraints();
40
41 GridBagLayout gbl = new GridBagLayout();
42 setLayout(gbl);
43
44 gbc.gridx = 0;
45 gbc.gridy = 0;
46 gbc.fill = GridBagConstraints.NONE;
47 gbc.anchor = GridBagConstraints.EAST;
48 gbc.weightx = 0.5;
49 JLabel rulenameLabel = new JLabel("Rule name : ");
50 gbl.setConstraints(rulenameLabel, gbc);
51 add(rulenameLabel);
52 gbc.weightx = 0.5;
53 gbc.anchor = GridBagConstraints.WEST;
54 gbc.gridx = 1;
55 gbl.setConstraints(rulenameField, gbc);
56 add(rulenameField);
57
58 gbc.gridx = 0;
59 gbc.gridy = 1;
60 gbc.anchor = GridBagConstraints.EAST;
61 gbc.weightx = 0.5;
62 JLabel rulemsgLabel = new JLabel("Rule msg : ");
63 gbl.setConstraints(rulemsgLabel, gbc);
64 add(rulemsgLabel);
65 gbc.gridx = 1;
66 gbc.anchor = GridBagConstraints.WEST;
67 gbc.weightx = 0.5;
68 gbl.setConstraints(rulemsgField, gbc);
69 add(rulemsgField);
70
71 gbc.gridx = 0;
72 gbc.gridy = 2;
73 gbc.anchor = GridBagConstraints.EAST;
74 gbc.weightx = 0.5;
75 JLabel ruledescLabel = new JLabel("Rule desc : ");
76 gbl.setConstraints(ruledescLabel,gbc);
77 add(ruledescLabel);
78 gbc.gridx = 1;
79 gbc.anchor = GridBagConstraints.WEST;
80 gbc.weightx = 0.5;
81 ruledescField.setLineWrap(true);
82 gbl.setConstraints(ruledescField,gbc);
83 add(ruledescField);
84
85 gbc.gridx = 0;
86 gbc.gridy = 3;
87 gbc.gridwidth = 2;
88 gbc.anchor = GridBagConstraints.NORTH;
89 JButton createRuleBtn = new JButton("Create rule XML");
90 createRuleBtn.addActionListener(this);
91 gbl.setConstraints(createRuleBtn, gbc);
92 add(createRuleBtn);
93
94 gbc.gridx = 0;
95 gbc.gridy = 4;
96 gbc.anchor = GridBagConstraints.NORTH;
97 gbc.fill = GridBagConstraints.BOTH;
98 gbc.weightx = 1.0;
99 gbc.weighty = 1.0;
100 JScrollPane ruleXMLPane = new JScrollPane(ruleXMLArea);
101 gbl.setConstraints(ruleXMLPane, gbc);
102 add(ruleXMLPane);
103
104 repaint();
105 }
106
107
108
109
110
111
112
113 public void actionPerformed(ActionEvent exception) {
114
115 boolean hasXPathQuery = StringUtil.isNotEmpty(xpathQueryArea.getText());
116
117 StringBuilder buffer = new StringBuilder(200);
118 appendLn(buffer, "<rule name=\"" + rulenameField.getText() + '\"');
119 appendLn(buffer, " message=\"" + rulemsgField.getText() + '\"');
120 appendLn(buffer, " class=\"" + (hasXPathQuery ? "net.sourceforge.pmd.lang.rule.XPathRule" : "") + "\">");
121 appendLn(buffer, " <description>");
122 appendLn(buffer, " " + ruledescField.getText());
123 appendLn(buffer, " </description>");
124 if (hasXPathQuery) {
125 appendLn(buffer, " <properties>");
126 appendLn(buffer, " <property name=\"xpath\">");
127 appendLn(buffer, " <value>");
128 appendLn(buffer, "<![CDATA[");
129 appendLn(buffer, xpathQueryArea.getText());
130 appendLn(buffer, "]]>");
131 appendLn(buffer, " </value>");
132 appendLn(buffer, " </property>");
133 appendLn(buffer, " </properties>");
134 }
135 appendLn(buffer, " <priority>3</priority>");
136 appendLn(buffer, " <example>");
137 appendLn(buffer, "<![CDATA[");
138 appendLn(buffer, codeEditorPane.getText());
139 appendLn(buffer, "]]>");
140 appendLn(buffer, " </example>");
141 appendLn(buffer, "</rule>");
142
143 ruleXMLArea.setText(buffer.toString());
144 repaint();
145 }
146
147 }