1 package net.sourceforge.pmd.util.designer;
2
3 import net.sourceforge.pmd.util.HasLines;
4
5 import javax.swing.*;
6 import java.awt.Dimension;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.io.BufferedReader;
10 import java.io.File;
11 import java.io.FileReader;
12 import java.io.FileWriter;
13 import java.io.IOException;
14 import java.util.StringTokenizer;
15
16 public class CodeEditorTextPane extends JTextPane implements HasLines, ActionListener {
17
18 private static final String SETTINGS_FILE_NAME = System.getProperty("user.home") + System.getProperty("file.separator") + ".pmd_designer";
19
20 public CodeEditorTextPane() {
21 setPreferredSize(new Dimension(400, 200));
22 setText(loadCode());
23 }
24
25 public String getLine(int number) {
26 int count = 1;
27 for (StringTokenizer st = new StringTokenizer(getText(), "\n"); st.hasMoreTokens();) {
28 String tok = st.nextToken();
29 if (count == number) {
30 return tok;
31 }
32 count++;
33 }
34 throw new RuntimeException("Line number " + number + " not found");
35 }
36
37 public void actionPerformed(ActionEvent ae) {
38 FileWriter fw = null;
39 try {
40 fw = new FileWriter(new File(SETTINGS_FILE_NAME));
41 fw.write(getText());
42 } catch (IOException ioe) {
43 } finally {
44 try {
45 if (fw != null)
46 fw.close();
47 } catch (IOException ioe) {
48 ioe.printStackTrace();
49 }
50 }
51 }
52
53 private String loadCode() {
54 BufferedReader br = null;
55 try {
56 br = new BufferedReader(new FileReader(new File(SETTINGS_FILE_NAME)));
57 StringBuffer text = new StringBuffer();
58 String hold;
59 while ((hold = br.readLine()) != null) {
60 text.append(hold);
61 text.append(System.getProperty("line.separator"));
62 }
63 return text.toString();
64 } catch (IOException e) {
65 e.printStackTrace();
66 return "";
67 } finally {
68 try {
69 if (br != null)
70 br.close();
71 } catch (IOException e) {
72 e.printStackTrace();
73 }
74 }
75 }
76 }
77