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