01: /*
02: * Author: Chris Seguin
03: *
04: * This software has been developed under the copyleft
05: * rules of the GNU General Public License. Please
06: * consult the GNU General Public License for more
07: * details about use and distribution of this software.
08: */
09: package org.acm.seguin.pretty;
10:
11: import java.io.File;
12: import javax.swing.JOptionPane;
13: import org.acm.seguin.awt.ExceptionPrinter;
14: import org.acm.seguin.tools.RefactoryInstaller;
15:
16: /**
17: * Pretty print the source code based on the IDE
18: *
19: *@author Chris Seguin
20: */
21: public abstract class PrettyPrintFromIDE extends PrettyPrintString {
22: private PrintData data;
23:
24: /**
25: * Reformat the source code in the current window
26: */
27: public void prettyPrintCurrentWindow() {
28: // Make sure everything is installed properly
29: (new RefactoryInstaller(false)).run();
30:
31: try {
32: setInputString(getStringFromIDE());
33: apply(null);
34:
35: // Store the string back
36: String contents = getOutputBuffer();
37: if (contents.length() > 0) {
38: setStringInIDE(contents);
39: setLineNumber(data.getFinalLine());
40: } else {
41: displayErrorMessage();
42: }
43:
44: // Done with the output buffer so reset it
45: resetOutputBuffer();
46: } catch (Exception exc) {
47: displayErrorMessage();
48: ExceptionPrinter.print(exc, false);
49: }
50: }
51:
52: /**
53: * Sets the string in the IDE
54: *
55: *@param value The new file contained in a string
56: */
57: protected abstract void setStringInIDE(String value);
58:
59: /**
60: * Sets the line number
61: *
62: *@param value The new LineNumber value
63: */
64: protected abstract void setLineNumber(int value);
65:
66: /**
67: * Gets the initial string from the IDE
68: *
69: *@return The file in string format
70: */
71: protected abstract String getStringFromIDE();
72:
73: /**
74: * Return the appropriate print data
75: *
76: *@param input Description of Parameter
77: *@return the print data
78: */
79: protected PrintData getPrintData(File input) {
80: data = super .getPrintData(input);
81: data.setOriginalLine(getLineNumber());
82: return data;
83: }
84:
85: /**
86: * Returns the initial line number
87: *
88: *@return The LineNumber value
89: */
90: protected abstract int getLineNumber();
91:
92: /**
93: * Displays the error message
94: */
95: private void displayErrorMessage() {
96: JOptionPane.showMessageDialog(null, "Unable to parse the file",
97: "Parse Error", JOptionPane.ERROR_MESSAGE);
98: }
99: }
|