001 package de.java2html.gui;
002
003 import java.awt.Font;
004 import java.awt.GridBagConstraints;
005 import java.awt.GridBagLayout;
006 import java.awt.Insets;
007 import java.io.IOException;
008 import java.io.StringWriter;
009
010 import javax.swing.JComponent;
011 import javax.swing.JLabel;
012 import javax.swing.JPanel;
013 import javax.swing.JScrollPane;
014 import javax.swing.JTextArea;
015 import javax.swing.JTextField;
016 import javax.swing.border.EmptyBorder;
017 import javax.swing.event.ChangeEvent;
018 import javax.swing.event.ChangeListener;
019 import javax.swing.event.DocumentEvent;
020 import javax.swing.event.DocumentListener;
021
022 import de.java2html.JavaSourceConversionSettings;
023 import de.java2html.converter.IJavaSourceConverter;
024 import de.java2html.javasource.TypedSource;
025 import de.java2html.javasource.JavaSourceParser;
026 import de.java2html.util.Ensure;
027
028 public class DirectTextConversionPanel {
029
030 private final JComponent content;
031 private final static Font FONT = new Font("Monospaced", Font.PLAIN, 11);
032 private final JTextArea taInput;
033 private final JTextArea taOutput;
034 private final JTextField tfTitle;
035 private final Java2HtmlOptionsPanel optionsPanel;
036 private final IStatisticsView statisticsView;
037
038 public DirectTextConversionPanel(Java2HtmlOptionsPanel optionsPanel, IStatisticsView statisticsView) {
039 Ensure.ensureArgumentNotNull(optionsPanel);
040 Ensure.ensureArgumentNotNull(statisticsView);
041 this.statisticsView = statisticsView;
042 this.optionsPanel = optionsPanel;
043 //Create UI:
044 final JLabel l1 = new JLabel("Title (optional):");
045 tfTitle = new JTextField(30);
046 final DocumentListener documentListener = new DocumentListener() {
047 public void changedUpdate(DocumentEvent e) {
048 convert();
049 }
050
051 public void removeUpdate(DocumentEvent e) {
052 convert();
053 }
054
055 public void insertUpdate(DocumentEvent e) {
056 convert();
057 }
058 };
059 tfTitle.getDocument().addDocumentListener(documentListener);
060
061 taInput = new JTextArea(10, 80);
062 taInput.getDocument().addDocumentListener(documentListener);
063 taInput.setFont(FONT);
064 taOutput = new JTextArea(10, 80);
065 taOutput.setEditable(false);
066 taOutput.setFont(FONT);
067
068 final JPanel panel = new JPanel(new GridBagLayout());
069 panel.setBorder(new EmptyBorder(5, 6, 5, 6));
070
071 final GridBagConstraints twoColumnLineConstraints = new GridBagConstraints();
072 twoColumnLineConstraints.anchor = GridBagConstraints.WEST;
073 twoColumnLineConstraints.gridx = 0;
074 twoColumnLineConstraints.gridwidth = 2;
075 twoColumnLineConstraints.fill = GridBagConstraints.HORIZONTAL;
076 twoColumnLineConstraints.weightx = 1.0;
077 twoColumnLineConstraints.insets = new Insets(6, 2, 2, 2);
078
079 final GridBagConstraints twoColumnBlockConstraints = new GridBagConstraints();
080 twoColumnBlockConstraints.anchor = GridBagConstraints.WEST;
081 twoColumnBlockConstraints.gridx = 0;
082 twoColumnBlockConstraints.gridwidth = 2;
083 twoColumnBlockConstraints.fill = GridBagConstraints.BOTH;
084 twoColumnBlockConstraints.weightx = 1.0;
085 twoColumnBlockConstraints.weighty = 1.0;
086 twoColumnBlockConstraints.insets = new Insets(2, 2, 2, 2);
087
088 final GridBagConstraints leftColumnConstraints = new GridBagConstraints();
089 leftColumnConstraints.insets = new Insets(2, 2, 2, 2);
090 leftColumnConstraints.gridx = 0;
091 leftColumnConstraints.anchor = GridBagConstraints.EAST;
092
093 final GridBagConstraints rightColumnConstraints = new GridBagConstraints();
094 rightColumnConstraints.insets = new Insets(2, 2, 2, 2);
095 rightColumnConstraints.gridx = 1;
096 rightColumnConstraints.fill = GridBagConstraints.HORIZONTAL;
097 rightColumnConstraints.anchor = GridBagConstraints.WEST;
098
099 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 final String input = taInput.getText();
128 if (input.trim().equals("")) {
129 taOutput.setText("");
130 statisticsView.setStatistics(null);
131 return;
132 }
133 final JavaSourceConversionSettings settings = optionsPanel.getConversionSettings();
134 settings.getConversionOptions().setShowJava2HtmlLink(true);
135 final JavaSourceParser parser = new JavaSourceParser(settings.getConversionOptions());
136 final TypedSource source = parser.parse(input);
137 source.setFileName(title);
138
139 //Create the converter
140 final IJavaSourceConverter converter = settings.createConverter();
141
142 final 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 (final IOException e) {
149 throw new RuntimeException(e); //should never happen
150 }
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 }
|