001: package de.java2html.converter;
002:
003: import java.io.BufferedWriter;
004: import java.io.IOException;
005: import java.io.Writer;
006:
007: import de.java2html.javasource.JavaSource;
008: import de.java2html.options.JavaSourceConversionOptions;
009: import de.java2html.util.Ensure;
010:
011: /**
012: * Abstract superclass for all converters for converting a {@link de.java2html.javasource.JavaSource}
013: * object to anything else.
014: *
015: * For questions, suggestions, bug-reports, enhancement-requests etc.
016: * I may be contacted at:
017: * <a href="mailto:markus@jave.de">markus@jave.de</a>
018: *
019: * The Java2html home page is located at:
020: * <a href="http://www.java2html.de">http://www.java2html.de</a>
021: *
022: * @author <a href="mailto:markus@jave.de">Markus Gebhard</a>
023: * @version 2.0, 05/07/02
024: *
025: * Copyright (C) Markus Gebhard 2000-2002
026: *
027: * This program is free software; you can redistribute it and/or
028: * modify it under the terms of the GNU General Public License
029: * as published by the Free Software Foundation; either version 2
030: * of the License, or (at your option) any later version.
031: *
032: * This program is distributed in the hope that it will be useful,
033: * but WITHOUT ANY WARRANTY; without even the implied warranty of
034: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
035: * GNU General Public License for more details.
036: *
037: * You should have received a copy of the GNU General Public License
038: * along with this program; if not, write to the Free Software
039: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
040: */
041: public abstract class AbstractJavaSourceConverter implements
042: IJavaSourceConverter {
043:
044: private final ConverterMetaData metaData;
045:
046: public AbstractJavaSourceConverter(ConverterMetaData metaData) {
047: Ensure.ensureArgumentNotNull(metaData);
048: this .metaData = metaData;
049: }
050:
051: /**
052: * Is called to convert the object 'source' to the destination
053: * format. The result is stored in 'result' and can be retrieved
054: * by calling getResult().
055: */
056: public final void convert(JavaSource source,
057: JavaSourceConversionOptions options, Writer writer)
058: throws IOException {
059: BufferedWriter bw = null;
060: try {
061: bw = new BufferedWriter(writer);
062: convert(source, options, bw);
063: bw.flush();
064: } catch (IOException e) {
065: throw e;
066: }
067: }
068:
069: public abstract void convert(JavaSource source,
070: JavaSourceConversionOptions options, BufferedWriter writer)
071: throws IOException;
072:
073: /**
074: * Returns a header for the result document.
075: * This one will be placed before the first block of converted
076: * code.
077: * Subclasses can return an empty String ("") if there is none neccessary.
078: * @param title
079: */
080: public abstract String getDocumentHeader(
081: JavaSourceConversionOptions options, String title);
082:
083: /**
084: * Returns a footer for the result document.
085: * This one will be placed behind the last block of converted
086: * code.
087: * Subclasses can return an empty String ("") if there is none neccessary.
088: */
089: public abstract String getDocumentFooter(
090: JavaSourceConversionOptions options);
091:
092: /**
093: * Returns the code that has to be placed between two blocks
094: * of converted code.
095: * Subclasses can return an empty String ("") if there is none neccessary.
096: */
097: public abstract String getBlockSeparator(
098: JavaSourceConversionOptions options);
099:
100: public void writeDocumentHeader(Writer writer,
101: JavaSourceConversionOptions options, String title)
102: throws IOException {
103: writer.write(getDocumentHeader(options, title));
104: }
105:
106: public void writeDocumentFooter(Writer writer,
107: JavaSourceConversionOptions options) throws IOException {
108: writer.write(getDocumentFooter(options));
109: }
110:
111: public void writeBlockSeparator(Writer writer,
112: JavaSourceConversionOptions options) throws IOException {
113: writer.write(getBlockSeparator(options));
114: }
115:
116: public final String getDefaultFileExtension() {
117: return metaData.getDefaultFileExtension();
118: }
119:
120: public final ConverterMetaData getMetaData() {
121: return metaData;
122: }
123: }
|