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