You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2003/05/22 15:02:47 UTC
cvs commit: cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp XSPMarkupLanguage.java
vgritsenko 2003/05/22 06:02:47
Modified: src/java/org/apache/cocoon/components/language/generator
ProgramGeneratorImpl.java
src/java/org/apache/cocoon/components/language/markup
AbstractMarkupLanguage.java
CocoonMarkupLanguage.java Logicsheet.java
LogicsheetCodeGenerator.java
MarkupCodeGenerator.java MarkupLanguage.java
NamedLogicsheet.java
src/java/org/apache/cocoon/components/language/markup/xsp
XSPMarkupLanguage.java
Log:
Some refactoring of XSP machinery:
* Use excalibur Source instead of InputSource (MarkupCodeGenerator, MarkupLanguage)
* SourceResolver removed where it was not needed (MarkupLanguage, AbstractMarkupLanguage)
(one, global instance of resolver is used anyway)
* Removed usage of XMLReader, SourceUtil.toSAX used instead
* Removed usage of XMLFilter, AbstractXMLPipe used instead
Reviewed by: Torsten Curdt <tc...@dff.st>
Revision Changes Path
1.2 +57 -56 cocoon-2.1/src/java/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java
Index: ProgramGeneratorImpl.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ProgramGeneratorImpl.java 9 Mar 2003 00:08:52 -0000 1.1
+++ ProgramGeneratorImpl.java 22 May 2003 13:02:46 -0000 1.2
@@ -72,11 +72,9 @@
import org.apache.cocoon.components.language.programming.CodeFormatter;
import org.apache.cocoon.components.language.programming.Program;
import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
-import org.apache.cocoon.components.source.SourceUtil;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.util.IOUtils;
import org.apache.excalibur.source.Source;
-import org.xml.sax.InputSource;
import java.io.File;
import java.net.MalformedURLException;
@@ -129,6 +127,7 @@
/** Servlet Context Directory */
protected String contextDir;
+
/** Contextualize this class */
public void contextualize(Context context) throws ContextException {
if (this.workDir == null) {
@@ -167,7 +166,7 @@
* @param manager The global component manager
*/
public void compose(ComponentManager manager) throws ComponentException {
- if ((this.manager == null) && (manager != null)) {
+ if (this.manager == null && manager != null) {
this.manager = manager;
this.cache = (GeneratorSelector) this.manager.lookup(GeneratorSelector.ROLE + "Selector");
this.markupSelector = (ComponentSelector)this.manager.lookup(MarkupLanguage.ROLE + "Selector");
@@ -196,10 +195,10 @@
StringBuffer contextFilename = new StringBuffer(this.rootPackage.replace('.', File.separatorChar));
contextFilename.append(File.separator);
if(systemId.startsWith(this.contextDir)) {
- // VG: File is located under contextDir, using relative file name
+ // VG: File is located under contextDir; using relative file name ...
contextFilename.append(systemId.substring(this.contextDir.length()));
} else {
- // VG: File is located outside of contextDir, using systemId
+ // VG: File is located outside of contextDir; using systemId ...
contextFilename.append(systemId);
}
return IOUtils.normalizedFilename(contextFilename.toString());
@@ -283,8 +282,7 @@
if (getLogger().isDebugEnabled()) {
getLogger().debug("Successfully preloaded serverpage [" + id + "]");
}
- }
- catch (Exception e) {
+ } catch (Exception e) {
if (getLogger().isErrorEnabled()) {
getLogger().error("The serverpage [" + id + "] could not be preloaded");
}
@@ -297,16 +295,21 @@
getLogger().debug("Creating new serverpage for [" + id + "]");
}
synchronized (this) {
- generateSourcecode(source, normalizedName, markupLanguage, programmingLanguage, resolver);
-
- programInstance = loadProgram(newManager, source, normalizedName, markupLanguage, programmingLanguage, resolver);
+ generateSourcecode(source,
+ normalizedName,
+ markupLanguage,
+ programmingLanguage);
+
+ programInstance = loadProgram(newManager,
+ normalizedName,
+ markupLanguage,
+ programmingLanguage);
}
- }
- else {
+ } else {
// found an instance
if (this.autoReload) {
long sourceLastModified = source.getLastModified();
- // has XSP changed?
+ // Has XSP changed?
// Note : lastModified can be 0 if source is dynamically generated.
// In that case, let the program instance decide if it is modified or not.
if (programInstance.modifiedSince(sourceLastModified)) {
@@ -323,22 +326,30 @@
programInstance = null;
program = null;
- generateSourcecode(source, normalizedName, markupLanguage, programmingLanguage, resolver);
-
- programInstance = loadProgram(newManager, source, normalizedName, markupLanguage, programmingLanguage, resolver);
+ generateSourcecode(source,
+ normalizedName,
+ markupLanguage,
+ programmingLanguage);
+
+ programInstance = loadProgram(newManager,
+ normalizedName,
+ markupLanguage,
+ programmingLanguage);
}
- }
- else {
+ } else {
// check the repository for changes at all?
if (this.watchSource) {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Checking sourcecode of [" + id + "] for a change");
}
- File sourcecodeFile = new File(this.workDir, normalizedName + "." + programmingLanguage.getSourceExtension());
+ File sourcecodeFile = new File(this.workDir,
+ normalizedName + "." + programmingLanguage.getSourceExtension());
// has sourcecode in repository changed ?
if (sourcecodeFile != null && sourcecodeFile.exists()) {
long sourcecodeLastModified = sourcecodeFile.lastModified();
- if (sourcecodeLastModified > sourceLastModified || sourceLastModified == 0 || sourcecodeLastModified == 0) {
+ if (sourcecodeLastModified > sourceLastModified
+ || sourceLastModified == 0
+ || sourcecodeLastModified == 0) {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Create new serverpage program for [" + id + "] - repository has changed");
}
@@ -352,63 +363,59 @@
programInstance = null;
program = null;
- programInstance = loadProgram(newManager, source, normalizedName, markupLanguage, programmingLanguage, resolver);
+ programInstance = loadProgram(newManager,
+ normalizedName,
+ markupLanguage,
+ programmingLanguage);
}
- }
- else {
+ } else {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Sourcecode of [" + id + "] has not changed - returning program from cache");
}
}
- }
- else {
+ } else {
if (getLogger().isErrorEnabled()) {
getLogger().error("Could not find sourcecode for [" + id + "]");
}
}
}
}
- }
- else {
+ } else {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Not checking for modifications [autoReload=false] - using current version");
}
}
-
}
- // Recompose with the new manager if needed
+ // Recompose with the new manager if program needs it.
+ // This is required to provide XSP with manager from the correct
+ // sitemap so it will be able to find all components declared in
+ // the sitemap.
if (programInstance instanceof Recomposable) {
((Recomposable) programInstance).recompose(newManager);
}
return (programInstance);
- }
- finally {
+ } finally {
resolver.release(source);
this.markupSelector.release(markupLanguage);
this.languageSelector.release(programmingLanguage);
}
}
- private CompiledComponent loadProgram(
- ComponentManager newManager,
- Source source,
- String normalizedName,
- MarkupLanguage markupLanguage,
- ProgrammingLanguage programmingLanguage,
- SourceResolver resolver)
+ private CompiledComponent loadProgram(ComponentManager newManager,
+ String normalizedName,
+ MarkupLanguage markupLanguage,
+ ProgrammingLanguage programmingLanguage)
throws Exception {
CompiledComponent programInstance = null;
try {
return (CompiledComponent) this.cache.select(normalizedName);
- }
- catch (Exception cme) {
+ } catch (Exception e) {
}
try {
-
if (getLogger().isDebugEnabled()) {
getLogger().debug("Loading program [" + normalizedName + "]");
}
@@ -418,20 +425,18 @@
if (getLogger().isDebugEnabled()) {
getLogger().debug("Successfully loaded program [" + normalizedName + "]");
}
- }
- catch (LanguageException le) {
- if (getLogger().isErrorEnabled()) {
- getLogger().error("Language Exception", le);
+ } catch (LanguageException le) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Got Language Exception", le);
}
throw new ProcessingException("Language Exception", le);
}
try {
programInstance = (CompiledComponent) this.cache.select(normalizedName);
- }
- catch (Exception cme) {
- if (getLogger().isErrorEnabled()) {
- getLogger().error("Can't load ServerPage", cme);
+ } catch (Exception cme) {
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Can't load ServerPage: got exception", cme);
}
throw new ProcessingException("Can't load ServerPage", cme);
}
@@ -443,19 +448,15 @@
private void generateSourcecode(Source source,
String normalizedName,
MarkupLanguage markupLanguage,
- ProgrammingLanguage programmingLanguage,
- SourceResolver resolver)
+ ProgrammingLanguage programmingLanguage)
throws Exception {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Creating sourcecode for [" + source.getURI() + "]");
}
- // Input Source
- // FIXME(VG): Use Source.toSAX()
- InputSource is = SourceUtil.getInputSource(source);
// Generate code
- String code = markupLanguage.generateCode(is, normalizedName, programmingLanguage, resolver);
+ String code = markupLanguage.generateCode(source, normalizedName, programmingLanguage);
if (code == null || code.length() == 0) {
// FIXME(VG): Xalan with incremental-processing=true does not propagate exceptions
// from working thread to main thread. See
1.2 +27 -40 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/AbstractMarkupLanguage.java
Index: AbstractMarkupLanguage.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/AbstractMarkupLanguage.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractMarkupLanguage.java 9 Mar 2003 00:08:53 -0000 1.1
+++ AbstractMarkupLanguage.java 22 May 2003 13:02:47 -0000 1.2
@@ -68,18 +68,14 @@
import org.apache.excalibur.source.SourceResolver;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.xml.AbstractXMLPipe;
import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
import org.apache.cocoon.components.source.SourceUtil;
import org.apache.excalibur.store.Store;
import org.apache.cocoon.util.HashMap;
import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import org.xml.sax.XMLFilter;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLFilterImpl;
-import org.xml.sax.helpers.XMLReaderFactory;
import java.io.IOException;
import java.net.MalformedURLException;
@@ -298,15 +294,12 @@
* specif action and to build a more specific transformer chain.
*
* @param logicsheetMarkupGenerator the logicsheet markup generator
- * @param resolver the entity resolver
* @return XMLFilter the filter that build on the fly the transformer chain
*/
protected TransformerChainBuilderFilter getTransformerChainBuilder(
- LogicsheetCodeGenerator logicsheetMarkupGenerator,
- SourceResolver resolver)
+ LogicsheetCodeGenerator logicsheetMarkupGenerator)
{
- return new TransformerChainBuilderFilter(logicsheetMarkupGenerator,
- resolver);
+ return new TransformerChainBuilderFilter(logicsheetMarkupGenerator);
}
/**
@@ -322,10 +315,12 @@
* @param language The target programming language
* @return The preprocess filter
*/
- protected XMLFilter getPreprocessFilter(String filename,
- ProgrammingLanguage language)
+ protected AbstractXMLPipe getPreprocessFilter(String filename,
+ AbstractXMLPipe filter,
+ ProgrammingLanguage language)
{
- return new XMLFilterImpl();
+ // No-op
+ return filter;
}
/**
@@ -350,16 +345,16 @@
* <li>Language-specific logicsheet</li>
* </ul>
*
- * @param input The input source
+ * @param source The input source
* @param filename The input document's original filename
* @param programmingLanguage The target programming language
* @return The generated source code
* @exception Exception If an error occurs during code generation
*/
- public String generateCode(InputSource input,
+ public String generateCode(Source source,
String filename,
- ProgrammingLanguage programmingLanguage,
- SourceResolver resolver) throws Exception {
+ ProgrammingLanguage programmingLanguage)
+ throws Exception {
String languageName = programmingLanguage.getLanguageName();
LanguageDescriptor language = (LanguageDescriptor)this.languages.get(languageName);
@@ -367,21 +362,18 @@
throw new IllegalArgumentException("Unsupported programming language: " + languageName);
}
- // Create a XMLReader
- XMLReader reader = XMLReaderFactory.createXMLReader();
- // Get the needed preprocess filter
- XMLFilter preprocessFilter = this.getPreprocessFilter(filename, programmingLanguage);
- preprocessFilter.setParent(reader);
// Create code generator
LogicsheetCodeGenerator codeGenerator = new LogicsheetCodeGenerator();
codeGenerator.enableLogging(getLogger());
codeGenerator.initialize();
- // set the transformer chain builder filter
+ // Set the transformer chain builder filter
TransformerChainBuilderFilter tranBuilder =
- getTransformerChainBuilder(codeGenerator, resolver);
+ getTransformerChainBuilder(codeGenerator);
tranBuilder.setLanguageDescriptor(language);
- tranBuilder.setParent(preprocessFilter);
- return codeGenerator.generateCode(tranBuilder, input, filename);
+
+ // Get the needed preprocess filter
+ AbstractXMLPipe preprocessor = getPreprocessFilter(filename, tranBuilder, programmingLanguage);
+ return codeGenerator.generateCode(source, preprocessor);
}
/**
@@ -414,15 +406,14 @@
/**
* Add a logicsheet to the code generator.
+ * @param language Target programming language of the logicsheet
* @param logicsheetLocation Location of the logicsheet to be added
- * @param document The input document
* @exception MalformedURLException If location is invalid
* @exception IOException IO Error
* @exception SAXException Logicsheet parse error
*/
protected void addLogicsheetToList(LanguageDescriptor language,
- String logicsheetLocation,
- SourceResolver resolver)
+ String logicsheetLocation)
throws IOException, SAXException, ProcessingException
{
Logicsheet logicsheet = (Logicsheet)logicsheetCache.get(CACHE_PREFIX + logicsheetLocation);
@@ -476,7 +467,7 @@
getLogger().debug("Adding embedded logic sheet for "
+ namespace + ": " + namedLogicsheetName);
// Add embedded logic sheets too.
- addLogicsheetToList(language, namedLogicsheetName, resolver);
+ addLogicsheetToList(language, namedLogicsheetName);
}
}
}
@@ -560,26 +551,22 @@
* Each time a stylesheet is found, a call to the code generator is done
* to add the new transformer at the end of the current transformer chain.
*/
- public class TransformerChainBuilderFilter extends XMLFilterImpl {
+ public class TransformerChainBuilderFilter extends AbstractXMLPipe {
/** The markup generator */
protected LogicsheetCodeGenerator logicsheetMarkupGenerator;
/** the language description */
protected LanguageDescriptor language;
- /** the entity resolver */
- protected SourceResolver resolver;
private boolean isRootElem;
private List startPrefixes;
/**
- * the constructor depends on the code generator, and the entity resolver
+ * the constructor depends on the code generator
* @param logicsheetMarkupGenerator The code generator
- * @param resolver
*/
- protected TransformerChainBuilderFilter(LogicsheetCodeGenerator logicsheetMarkupGenerator, SourceResolver resolver) {
+ protected TransformerChainBuilderFilter(LogicsheetCodeGenerator logicsheetMarkupGenerator) {
this.logicsheetMarkupGenerator = logicsheetMarkupGenerator;
- this.resolver = resolver;
}
/**
@@ -621,12 +608,12 @@
String[] prefixNamingArray = (String[]) this.startPrefixes.get(i);
String namedLogicsheetName = this.language.getNamedLogicsheetByURI(prefixNamingArray[1]);
if (namedLogicsheetName != null) {
- AbstractMarkupLanguage.this.addLogicsheetToList(language, namedLogicsheetName, resolver);
+ AbstractMarkupLanguage.this.addLogicsheetToList(language, namedLogicsheetName);
}
}
// Add the language stylesheet (Always the last one)
- AbstractMarkupLanguage.this.addLogicsheetToList(language, this.language.getLogicsheet(), resolver);
+ AbstractMarkupLanguage.this.addLogicsheetToList(language, this.language.getLogicsheet());
AbstractMarkupLanguage.this.addLogicsheetsToGenerator(this.logicsheetMarkupGenerator);
} catch (ProcessingException pe) {
throw new SAXException (pe);
1.2 +39 -27 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/CocoonMarkupLanguage.java
Index: CocoonMarkupLanguage.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/CocoonMarkupLanguage.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CocoonMarkupLanguage.java 9 Mar 2003 00:08:53 -0000 1.1
+++ CocoonMarkupLanguage.java 22 May 2003 13:02:47 -0000 1.2
@@ -54,14 +54,15 @@
import org.apache.avalon.framework.logger.Logger;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.xml.AbstractXMLPipe;
+import org.apache.cocoon.xml.XMLConsumer;
import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
-import org.apache.excalibur.source.SourceResolver;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
-import org.xml.sax.XMLFilter;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.AttributesImpl;
-import org.xml.sax.helpers.XMLFilterImpl;
import java.io.File;
import java.io.IOException;
@@ -97,8 +98,7 @@
/**
* Recycle this component: clear logic sheet list and dependencies.
*/
- public void recycle()
- {
+ public void recycle() {
super.recycle();
this.dependencies.clear();
}
@@ -119,10 +119,12 @@
*
* @see PreProcessFilter
*/
- protected XMLFilter getPreprocessFilter(String filename, ProgrammingLanguage language) {
- PreProcessFilter filter = new PreProcessFilter(filename, language);
- filter.enableLogging(getLogger());
- return filter;
+ protected AbstractXMLPipe getPreprocessFilter(String filename,
+ AbstractXMLPipe filter,
+ ProgrammingLanguage language) {
+ PreProcessFilter prefilter = new PreProcessFilter(filter, filename, language);
+ prefilter.enableLogging(getLogger());
+ return prefilter;
}
/**
@@ -133,16 +135,14 @@
* the input document.
*
* @param logicsheetMarkupGenerator the logicsheet markup generator
- * @param resolver the entity resolver
* @return XMLFilter the filter that build on the fly the transformer chain
*/
protected TransformerChainBuilderFilter getTransformerChainBuilder(
- LogicsheetCodeGenerator logicsheetMarkupGenerator,
- SourceResolver resolver)
+ LogicsheetCodeGenerator logicsheetMarkupGenerator)
{
CocoonTransformerChainBuilderFilter filter =
new CocoonTransformerChainBuilderFilter(
- logicsheetMarkupGenerator, resolver);
+ logicsheetMarkupGenerator);
filter.enableLogging(getLogger());
return filter;
}
@@ -150,11 +150,10 @@
// This is required here to avoid IllegalAccessError when
// CocoonTransformerChainBuilderFilter invokes the method.
protected void addLogicsheetToList(LanguageDescriptor language,
- String logicsheetLocation,
- SourceResolver resolver)
+ String logicsheetLocation)
throws IOException, SAXException, ProcessingException
{
- super.addLogicsheetToList(language, logicsheetLocation, resolver);
+ super.addLogicsheetToList(language, logicsheetLocation);
}
/**
@@ -199,9 +198,11 @@
*
* @see org.xml.sax.ContentHandler
*/
- public class PreProcessFilter extends XMLFilterImpl implements LogEnabled {
+ public class PreProcessFilter extends AbstractXMLPipe implements LogEnabled {
protected Logger log;
+ protected AbstractXMLPipe filter;
+
protected String filename;
protected boolean isRootElem;
@@ -214,10 +215,25 @@
* @param filename the filename
* @param language the programming language
*/
- public PreProcessFilter (String filename, ProgrammingLanguage language) {
+ public PreProcessFilter (AbstractXMLPipe filter, String filename, ProgrammingLanguage language) {
super ();
this.filename = filename;
this.language = language;
+ // Put meself in front of filter
+ super.setConsumer(this.filter = filter);
+ }
+
+ public void setConsumer(XMLConsumer consumer) {
+ // Add consumer after filter
+ this.filter.setConsumer(consumer);
+ }
+
+ public void setContentHandler(ContentHandler handler) {
+ this.filter.setContentHandler(handler);
+ }
+
+ public void setLexicalHandler(LexicalHandler handler) {
+ this.filter.setLexicalHandler(handler);
}
public void enableLogging(Logger logger) {
@@ -317,13 +333,11 @@
/**
* @param logicsheetMarkupGenerator the code generator
- * @param resolver the entity resolver
*/
public CocoonTransformerChainBuilderFilter(
- LogicsheetCodeGenerator logicsheetMarkupGenerator,
- SourceResolver resolver)
+ LogicsheetCodeGenerator logicsheetMarkupGenerator)
{
- super(logicsheetMarkupGenerator, resolver);
+ super(logicsheetMarkupGenerator);
}
/**
@@ -350,8 +364,7 @@
String href = data.substring(start, end);
try {
- CocoonMarkupLanguage.this.addLogicsheetToList(
- language, href, this.resolver);
+ CocoonMarkupLanguage.this.addLogicsheetToList(language, href);
} catch (ProcessingException pe) {
log.warn("ProcessingException in SitemapMarkupLanguage", pe);
throw new SAXException (pe);
@@ -404,8 +417,7 @@
&& "logicsheet".equals(localName)) {
String href = atts.getValue("location");
try {
- CocoonMarkupLanguage.this.addLogicsheetToList(
- language, href, this.resolver);
+ CocoonMarkupLanguage.this.addLogicsheetToList(language, href);
} catch (ProcessingException pe) {
log.warn("CocoonMarkupLanguage.startElement", pe);
throw new SAXException (pe);
1.2 +1 -2 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/Logicsheet.java
Index: Logicsheet.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/Logicsheet.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Logicsheet.java 9 Mar 2003 00:08:53 -0000 1.1
+++ Logicsheet.java 22 May 2003 13:02:47 -0000 1.2
@@ -81,7 +81,6 @@
* language will be transformed into an equivalent XSLT stylesheet
* anyway... This class should probably be based on an interface...
*
- * @deprecated Use the avalon excalibur xslt processor instead.
* @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
* @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
* @author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
1.2 +22 -21 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/LogicsheetCodeGenerator.java
Index: LogicsheetCodeGenerator.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/LogicsheetCodeGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LogicsheetCodeGenerator.java 9 Mar 2003 00:08:53 -0000 1.1
+++ LogicsheetCodeGenerator.java 22 May 2003 13:02:47 -0000 1.2
@@ -53,12 +53,13 @@
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.source.SourceUtil;
+import org.apache.cocoon.xml.AbstractXMLPipe;
import org.apache.cocoon.util.TraxErrorHandler;
+import org.apache.excalibur.source.Source;
import org.xml.sax.ContentHandler;
-import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.TransformerConfigurationException;
@@ -75,13 +76,14 @@
*
* @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
* @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
+ * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
* @version CVS $Id$
*/
public class LogicsheetCodeGenerator extends AbstractLogEnabled implements MarkupCodeGenerator {
private ContentHandler serializerContentHandler;
- private XMLReader rootReader;
+ private AbstractXMLPipe end;
private TransformerHandler currentParent;
@@ -128,17 +130,17 @@
}
/**
- * Add a logicsheet to the logicsheet list
- *
- * @param logicsheet The logicsheet to be added
- */
+ * Add a logicsheet to the logicsheet list
+ *
+ * @param logicsheet The logicsheet to be added
+ */
public void addLogicsheet(Logicsheet logicsheet) throws ProcessingException {
if (this.currentParent == null) {
// Setup the first transformer of the chain.
this.currentParent = logicsheet.getTransformerHandler();
// the parent is the rootReader
- this.rootReader.setContentHandler(this.currentParent);
+ this.end.setContentHandler(this.currentParent);
// Set content handler for the end of the chain : serializer
this.currentParent.setResult(new SAXResult(this.serializerContentHandler));
@@ -156,21 +158,20 @@
}
/**
- * Generate source code from the input document. Filename information is
- * ignored in the logicsheet-based code generation approach.
- *
- * @param reader The reader
- * @param input The input source
- * @param filename The input source original filename
- * @return The generated source code
- * @exception Exception If an error occurs during code generation
- */
- public String generateCode(XMLReader reader, InputSource input, String filename) throws Exception {
+ * Generate source code from the given source. Filename information is
+ * ignored in the logicsheet-based code generation approach.
+ *
+ * @param source The source of the markup
+ * @return The generated source code
+ * @exception Exception If an error occurs during code generation
+ */
+ public String generateCode(Source source, AbstractXMLPipe filter)
+ throws Exception {
try {
// set the root XMLReader of the transformer chain
- this.rootReader = reader;
+ this.end = filter;
// start the parsing
- this.rootReader.parse(input);
+ SourceUtil.toSAX(source, filter);
return this.writer.toString();
} catch (SAXException e) {
if(e.getException() != null) {
1.2 +14 -13 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupCodeGenerator.java
Index: MarkupCodeGenerator.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupCodeGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MarkupCodeGenerator.java 9 Mar 2003 00:08:53 -0000 1.1
+++ MarkupCodeGenerator.java 22 May 2003 13:02:47 -0000 1.2
@@ -50,26 +50,27 @@
*/
package org.apache.cocoon.components.language.markup;
-import org.xml.sax.InputSource;
-import org.xml.sax.XMLReader;
+import org.apache.excalibur.source.Source;
+import org.apache.cocoon.xml.AbstractXMLPipe;
/**
* This interfaces defines the functionality of a source code generator
*
* @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
+ * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
* @version CVS $Id$
*/
public interface MarkupCodeGenerator {
+
/**
- * Generate source code from the input reader. Filename information may be
- * needed by certain code-generation approaches and programming languages
- *
- * @param reader The input reader
- * @param input The input source
- * @param filename The input source original filename
- * @return The generated source code
- * @exception Exception If an error occurs during code generation
- */
- String generateCode(XMLReader reader, InputSource input, String filename)
+ * Generate source code from the given markup source.
+ * Start and end specify SAX pre processing pipeline.
+ *
+ * @param source The source of the markup program
+ * @param filter Pre-processing SAX filter
+ * @return The generated source code
+ * @exception Exception If an error occurs during code generation
+ */
+ String generateCode(Source source, AbstractXMLPipe filter)
throws Exception;
}
1.2 +23 -23 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupLanguage.java
Index: MarkupLanguage.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupLanguage.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MarkupLanguage.java 9 Mar 2003 00:08:53 -0000 1.1
+++ MarkupLanguage.java 22 May 2003 13:02:47 -0000 1.2
@@ -52,8 +52,7 @@
import org.apache.avalon.framework.component.Component;
import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
-import org.apache.excalibur.source.SourceResolver;
-import org.xml.sax.InputSource;
+import org.apache.excalibur.source.Source;
/**
* This interface defines a markup language whose SAX producer's instance are to
@@ -61,33 +60,34 @@
* document augmenting it with dynamic content
*
* @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
+ * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
* @version CVS $Id$
*/
public interface MarkupLanguage extends Component {
String ROLE = MarkupLanguage.class.getName();
+
/**
- * Return the input document's encoding or <code>null</code> if it is the
- * platform's default encoding.
- * This method should be called after <code>generateCode<code> method.
- *
- * @return The input document's encoding
- */
+ * Return the input document's encoding or <code>null</code> if it is the
+ * platform's default encoding.
+ * This method should be called after <code>generateCode<code> method.
+ *
+ * @return The input document's encoding
+ */
String getEncoding();
/**
- * Generate source code from the input source for the target
- * <code>ProgrammingLanguage</code>.
- *
- * @param input The input source document
- * @param filename The input document's original filename
- * @param programmingLanguage The target programming language
- * @return The generated source code
- * @exception Exception If an error occurs during code generation
- */
- String generateCode(
- InputSource input, String filename,
- ProgrammingLanguage programmingLanguage,
- SourceResolver resolver
- ) throws Exception;
+ * Generate source code from the input source for the target
+ * <code>ProgrammingLanguage</code>.
+ *
+ * @param source The source document
+ * @param filename The input document's original filename
+ * @param programmingLanguage The target programming language
+ * @return The generated source code
+ * @exception Exception If an error occurs during code generation
+ */
+ String generateCode(Source source,
+ String filename,
+ ProgrammingLanguage programmingLanguage)
+ throws Exception;
}
1.2 +22 -21 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/NamedLogicsheet.java
Index: NamedLogicsheet.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/NamedLogicsheet.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NamedLogicsheet.java 9 Mar 2003 00:08:53 -0000 1.1
+++ NamedLogicsheet.java 22 May 2003 13:02:47 -0000 1.2
@@ -69,14 +69,15 @@
* @version CVS $Id$
*/
public class NamedLogicsheet extends Logicsheet {
+
/**
- * The namespace uri
- */
+ * The namespace uri
+ */
protected String uri;
/**
- * The namespace prefix
- */
+ * The namespace prefix
+ */
private String prefix;
public NamedLogicsheet(String systemId, ComponentManager manager, SourceResolver resolver)
@@ -86,37 +87,37 @@
}
/**
- * Set the logichseet's namespace prefix
- *
- * @param prefix The namespace prefix
- */
+ * Set the logichseet's namespace prefix
+ *
+ * @param prefix The namespace prefix
+ */
public void setPrefix(String prefix) {
this.prefix = prefix;
}
/**
- * Return the logicsheet's namespace prefix
- *
- * @return The logicsheet's namespace prefix
- */
+ * Return the logicsheet's namespace prefix
+ *
+ * @return The logicsheet's namespace prefix
+ */
public String getPrefix() {
return this.prefix;
}
/**
- * Set the logichseet's namespace prefix
- *
- * @param prefix The namespace prefix
- */
+ * Set the logichseet's uri
+ *
+ * @param uri The logicsheet's uri
+ */
public void setURI(String uri) {
this.uri = uri;
}
/**
- * Return the logicsheet's namespace prefix
- *
- * @return The logicsheet's namespace prefix
- */
+ * Return the logicsheet's namespace prefix
+ *
+ * @return The logicsheet's namespace prefix
+ */
public String getURI() {
return this.uri;
}
1.2 +10 -8 cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSPMarkupLanguage.java
Index: XSPMarkupLanguage.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSPMarkupLanguage.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XSPMarkupLanguage.java 9 Mar 2003 00:08:55 -0000 1.1
+++ XSPMarkupLanguage.java 22 May 2003 13:02:47 -0000 1.2
@@ -52,10 +52,10 @@
import org.apache.cocoon.components.language.markup.CocoonMarkupLanguage;
import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
+import org.apache.cocoon.xml.AbstractXMLPipe;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
-import org.xml.sax.XMLFilter;
import org.xml.sax.helpers.AttributesImpl;
import java.util.Stack;
@@ -92,11 +92,13 @@
*
* @see XSPMarkupLanguage.PreProcessFilter
*/
- protected XMLFilter getPreprocessFilter( String filename, ProgrammingLanguage language )
+ protected AbstractXMLPipe getPreprocessFilter(String filename,
+ AbstractXMLPipe filter,
+ ProgrammingLanguage language)
{
- PreProcessFilter filter = new PreProcessFilter(filename, language);
- filter.enableLogging(getLogger());
- return filter;
+ PreProcessFilter prefilter = new PreProcessFilter(filter, filename, language);
+ prefilter.enableLogging(getLogger());
+ return prefilter;
}
//
@@ -111,8 +113,8 @@
private Stack stack;
- public PreProcessFilter (String filename, ProgrammingLanguage language) {
- super(filename, language);
+ public PreProcessFilter (AbstractXMLPipe filter, String filename, ProgrammingLanguage language) {
+ super(filter, filename, language);
}
public void startDocument() throws SAXException {