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