1 package de.java2html.gui; 2 3 import java.awt.Font ; 4 import java.awt.GridBagConstraints ; 5 import java.awt.GridBagLayout ; 6 import java.awt.Insets ; 7 import java.io.IOException ; 8 import java.io.StringWriter ; 9 10 import javax.swing.JComponent ; 11 import javax.swing.JLabel ; 12 import javax.swing.JPanel ; 13 import javax.swing.JScrollPane ; 14 import javax.swing.JTextArea ; 15 import javax.swing.JTextField ; 16 import javax.swing.border.EmptyBorder ; 17 import javax.swing.event.ChangeEvent ; 18 import javax.swing.event.ChangeListener ; 19 import javax.swing.event.DocumentEvent ; 20 import javax.swing.event.DocumentListener ; 21 22 import de.java2html.JavaSourceConversionSettings; 23 import de.java2html.converter.IJavaSourceConverter; 24 import de.java2html.javasource.JavaSource; 25 import de.java2html.javasource.JavaSourceParser; 26 import de.java2html.util.Ensure; 27 28 public class DirectTextConversionPanel { 29 30 private final JComponent content; 31 private final static Font FONT = new Font ("Monospaced", Font.PLAIN, 11); 32 private final JTextArea taInput; 33 private final JTextArea taOutput; 34 private final JTextField tfTitle; 35 private final Java2HtmlOptionsPanel optionsPanel; 36 private final IStatisticsView statisticsView; 37 38 public DirectTextConversionPanel(Java2HtmlOptionsPanel optionsPanel, IStatisticsView statisticsView) { 39 Ensure.ensureArgumentNotNull(optionsPanel); 40 Ensure.ensureArgumentNotNull(statisticsView); 41 this.statisticsView = statisticsView; 42 this.optionsPanel = optionsPanel; 43 JLabel l1 = new JLabel ("Title (optional):"); 45 tfTitle = new JTextField (30); 46 final DocumentListener documentListener = new DocumentListener () { 47 public void changedUpdate(DocumentEvent e) { 48 convert(); 49 } 50 51 public void removeUpdate(DocumentEvent e) { 52 convert(); 53 } 54 55 public void insertUpdate(DocumentEvent e) { 56 convert(); 57 } 58 }; 59 tfTitle.getDocument().addDocumentListener(documentListener); 60 61 taInput = new JTextArea (10, 80); 62 taInput.getDocument().addDocumentListener(documentListener); 63 taInput.setFont(FONT); 64 taOutput = new JTextArea (10, 80); 65 taOutput.setEditable(false); 66 taOutput.setFont(FONT); 67 68 final JPanel panel = new JPanel (new GridBagLayout ()); 69 panel.setBorder(new EmptyBorder (5, 6, 5, 6)); 70 71 final GridBagConstraints twoColumnLineConstraints = new GridBagConstraints (); 72 twoColumnLineConstraints.anchor = GridBagConstraints.WEST; 73 twoColumnLineConstraints.gridx = 0; 74 twoColumnLineConstraints.gridwidth = 2; 75 twoColumnLineConstraints.fill = GridBagConstraints.HORIZONTAL; 76 twoColumnLineConstraints.weightx = 1.0; 77 twoColumnLineConstraints.insets = new Insets (6, 2, 2, 2); 78 79 final GridBagConstraints twoColumnBlockConstraints = new GridBagConstraints (); 80 twoColumnBlockConstraints.anchor = GridBagConstraints.WEST; 81 twoColumnBlockConstraints.gridx = 0; 82 twoColumnBlockConstraints.gridwidth = 2; 83 twoColumnBlockConstraints.fill = GridBagConstraints.BOTH; 84 twoColumnBlockConstraints.weightx = 1.0; 85 twoColumnBlockConstraints.weighty = 1.0; 86 twoColumnBlockConstraints.insets = new Insets (2, 2, 2, 2); 87 88 final GridBagConstraints leftColumnConstraints = new GridBagConstraints (); 89 leftColumnConstraints.insets = new Insets (2, 2, 2, 2); 90 leftColumnConstraints.gridx = 0; 91 leftColumnConstraints.anchor = GridBagConstraints.EAST; 92 93 final GridBagConstraints rightColumnConstraints = new GridBagConstraints (); 94 rightColumnConstraints.insets = new Insets (2, 2, 2, 2); 95 rightColumnConstraints.gridx = 1; 96 rightColumnConstraints.fill = GridBagConstraints.HORIZONTAL; 97 rightColumnConstraints.anchor = GridBagConstraints.WEST; 98 99 panel.add(l1, leftColumnConstraints); 100 panel.add(tfTitle, rightColumnConstraints); 101 panel.add(new JLabel ("Java source (paste your source code here):"), twoColumnLineConstraints); 102 panel.add(new JScrollPane (taInput), twoColumnBlockConstraints); 103 panel.add( 104 new JLabel ("Converted source (copy and paste this to where you want it):"), 105 twoColumnLineConstraints); 106 panel.add(new JScrollPane (taOutput), twoColumnBlockConstraints); 107 108 optionsPanel.addChangeListener(new ChangeListener () { 109 public void stateChanged(ChangeEvent e) { 110 convert(); 111 } 112 }); 113 114 this.content = panel; 115 } 116 117 public JComponent getContent() { 118 return content; 119 } 120 121 private void convert() { 122 String title = tfTitle.getText(); 123 if (title.equals("")) { 124 title = null; 125 } 126 127 String input = taInput.getText(); 128 if (input.trim().equals("")) { 129 taOutput.setText(""); 130 statisticsView.setStatistics(null); 131 return; 132 } 133 JavaSourceConversionSettings settings = optionsPanel.getConversionSettings(); 134 settings.getConversionOptions().setShowJava2HtmlLink(true); 135 JavaSourceParser parser = new JavaSourceParser(settings.getConversionOptions()); 136 JavaSource source = parser.parse(input); 137 source.setFileName(title); 138 139 IJavaSourceConverter converter = settings.createConverter(); 141 142 StringWriter writer = new StringWriter (); 143 try { 144 converter.writeDocumentHeader(writer, settings.getConversionOptions(), title); 145 converter.convert(source, settings.getConversionOptions(), writer); 146 converter.writeDocumentFooter(writer, settings.getConversionOptions()); 147 } 148 catch (IOException e) { 149 throw new RuntimeException (e); } 151 152 taOutput.setText(writer.toString()); 153 statisticsView.setStatistics(source.getStatistic()); 154 taOutput.selectAll(); 155 } 156 157 public void requestFocus() { 158 taInput.requestFocus(); 159 } 160 } | Popular Tags |