cziegeler 02/04/29 05:53:17 Modified: src/java/org/apache/cocoon/components/language/markup AbstractMarkupLanguage.java CocoonMarkupLanguage.java Logicsheet.java MarkupLanguage.java NamedLogicsheet.java src/java/org/apache/cocoon/components/language/markup/sitemap SitemapMarkupLanguage.java Log: Some upgrades to the new source resolving Revision Changes Path 1.16 +34 -34 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/AbstractMarkupLanguage.java Index: AbstractMarkupLanguage.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/AbstractMarkupLanguage.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- AbstractMarkupLanguage.java 22 Feb 2002 07:00:07 -0000 1.15 +++ AbstractMarkupLanguage.java 29 Apr 2002 12:53:16 -0000 1.16 @@ -63,14 +63,13 @@ import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.excalibur.pool.Recyclable; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceException; +import org.apache.excalibur.source.SourceResolver; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.components.language.programming.ProgrammingLanguage; import org.apache.cocoon.components.store.Store; -import org.apache.cocoon.components.url.URLFactory; -import org.apache.cocoon.environment.Source; -import org.apache.cocoon.environment.SourceResolver; -import org.apache.cocoon.environment.URLFactorySourceResolver; import org.apache.cocoon.util.HashMap; import org.xml.sax.Attributes; @@ -97,7 +96,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> * @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a> * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> - * @version CVS $Id: AbstractMarkupLanguage.java,v 1.15 2002/02/22 07:00:07 cziegeler Exp $ + * @version CVS $Id: AbstractMarkupLanguage.java,v 1.16 2002/04/29 12:53:16 cziegeler Exp $ */ public abstract class AbstractMarkupLanguage extends AbstractLoggable @@ -128,11 +127,8 @@ /** The component manager */ protected ComponentManager manager; - /** The URL factory to create source resolver */ - private URLFactory urlFactory; - /** The URL factory source resolver used to resolve URIs */ - private URLFactorySourceResolver urlResolver; + private SourceResolver resolver; /** @@ -206,14 +202,14 @@ String prefix = params.getParameter("prefix", null); NamedLogicsheet namedLogicsheet = - new NamedLogicsheet(location, manager, urlResolver); + new NamedLogicsheet(location, manager, resolver); namedLogicsheet.setLogger(getLogger()); namedLogicsheet.setURI(uri); namedLogicsheet.setPrefix(prefix); logicsheet = namedLogicsheet; } else { String location = params.getParameter("core-logicsheet", null); - logicsheet = new Logicsheet(location, manager, urlResolver); + logicsheet = new Logicsheet(location, manager, resolver); logicsheet.setLogger(getLogger()); } @@ -233,16 +229,14 @@ // Initialize logicsheet cache this.logicsheetCache = (Store) manager.lookup(Store.TRANSIENT_CACHE); - // Initialize the URL factory source resolver - this.urlFactory = (URLFactory)this.manager.lookup(URLFactory.ROLE); - this.urlResolver = new URLFactorySourceResolver(this.urlFactory, manager); + // Initialize the source resolver + this.resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE); } /** * Recycle this component: clear logic sheet list and dependencies. */ - public void recycle() - { + public void recycle() { this.logicSheetList.clear(); } @@ -250,14 +244,11 @@ * Release all resources. */ public void dispose() { - if (this.logicsheetCache != null) - this.manager.release(this.logicsheetCache); + this.manager.release(this.logicsheetCache); this.logicsheetCache = null; - if (this.urlFactory != null) - this.manager.release(this.urlFactory); - this.urlFactory = null; - this.urlResolver = null; + this.manager.release(this.resolver); + this.resolver = null; this.manager = null; this.languages.clear(); } @@ -364,7 +355,9 @@ * @return The generated source code * @exception Exception If an error occurs during code generation */ - public String generateCode(InputSource input, String filename, ProgrammingLanguage programmingLanguage, + public String generateCode(InputSource input, + String filename, + ProgrammingLanguage programmingLanguage, SourceResolver resolver) throws Exception { String languageName = programmingLanguage.getLanguageName(); @@ -433,17 +426,24 @@ { Logicsheet logicsheet = (Logicsheet)logicsheetCache.get(CACHE_PREFIX + logicsheetLocation); if (logicsheet == null) { - // Logicsheet is reusable (across multiple XSPs) object, - // and it is resolved via urlResolver, and not via per-request - // temporary resolver. - Source inputSource = this.urlResolver.resolve(logicsheetLocation); - - // Resolver (local) could not be used as it is temporary - // (per-request) object, yet Logicsheet is being cached and reused - // across multiple requests. "Global" url-factory-based resolver - // passed to the Logicsheet. - logicsheet = new Logicsheet(inputSource, manager, this.urlResolver); - logicsheetCache.store(CACHE_PREFIX + logicsheet.getSystemId(), logicsheet); + Source inputSource = null; + try { + // Logicsheet is reusable (across multiple XSPs) object, + // and it is resolved via urlResolver, and not via per-request + // temporary resolver. + inputSource = this.resolver.resolveURI(logicsheetLocation); + + // Resolver (local) could not be used as it is temporary + // (per-request) object, yet Logicsheet is being cached and reused + // across multiple requests. "Global" url-factory-based resolver + // passed to the Logicsheet. + logicsheet = new Logicsheet(inputSource, manager, this.resolver); + logicsheetCache.store(CACHE_PREFIX + logicsheet.getSystemId(), logicsheet); + } catch (SourceException se) { + throw new ProcessingException(se); + } finally { + this.resolver.release( inputSource ); + } } String logicsheetName = logicsheet.getSystemId(); 1.6 +2 -2 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/CocoonMarkupLanguage.java Index: CocoonMarkupLanguage.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/CocoonMarkupLanguage.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- CocoonMarkupLanguage.java 20 Apr 2002 03:38:34 -0000 1.5 +++ CocoonMarkupLanguage.java 29 Apr 2002 12:53:16 -0000 1.6 @@ -54,7 +54,7 @@ import org.apache.cocoon.ProcessingException; import org.apache.cocoon.components.language.programming.ProgrammingLanguage; -import org.apache.cocoon.environment.SourceResolver; +import org.apache.excalibur.source.SourceResolver; import org.apache.log.Logger; import org.xml.sax.Attributes; @@ -81,7 +81,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a> * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a> - * @version CVS $Id: CocoonMarkupLanguage.java,v 1.5 2002/04/20 03:38:34 vgritsenko Exp $ + * @version CVS $Id: CocoonMarkupLanguage.java,v 1.6 2002/04/29 12:53:16 cziegeler Exp $ */ public abstract class CocoonMarkupLanguage extends AbstractMarkupLanguage { 1.11 +47 -22 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/Logicsheet.java Index: Logicsheet.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/Logicsheet.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- Logicsheet.java 29 Apr 2002 10:52:52 -0000 1.10 +++ Logicsheet.java 29 Apr 2002 12:53:17 -0000 1.11 @@ -55,8 +55,9 @@ import org.apache.avalon.framework.logger.AbstractLoggable; import org.apache.cocoon.components.xslt.XSLTProcessor; -import org.apache.cocoon.environment.Source; -import org.apache.cocoon.environment.SourceResolver; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceException; +import org.apache.excalibur.source.SourceResolver; import org.apache.cocoon.ProcessingException; import org.xml.sax.Attributes; @@ -83,52 +84,55 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> * @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a> * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> - * @version CVS $Id: Logicsheet.java,v 1.10 2002/04/29 10:52:52 cziegeler Exp $ + * @version CVS $Id: Logicsheet.java,v 1.11 2002/04/29 12:53:17 cziegeler Exp $ */ public class Logicsheet extends AbstractLoggable { /** - * The Source object for this logicsheet. + * The Source Resolver object for this logicsheet. */ - private Source source; + private SourceResolver resolver; /** - * the template namespace's list + * The system id to resolve */ - protected Map namespaceURIs = new HashMap(); + private String systemId; /** - * The {@link org.apache.cocoon.components.xslt.XSLTProcessor} component. + * the template namespace's list */ - private XSLTProcessor xsltProcessor; + protected Map namespaceURIs = new HashMap(); /** * The ComponentManager of this instance. */ private ComponentManager manager; - public Logicsheet(Source source, ComponentManager manager, SourceResolver resolver) - throws ProcessingException + throws SAXException, IOException, ProcessingException { - this.source = source; + this.resolver = resolver; + this.systemId = source.getSystemId(); this.manager = manager; - try { - this.xsltProcessor = (XSLTProcessor)this.manager.lookup(XSLTProcessor.ROLE); - } catch (ComponentException e) { - throw new ProcessingException("Could not obtain XSLT processor", e); - } } public Logicsheet(String systemId, ComponentManager manager, SourceResolver resolver) - throws SAXException, IOException, ProcessingException + throws SAXException, IOException, SourceException, ProcessingException { - this(resolver.resolve(systemId), manager, resolver); + this.resolver = resolver; + this.manager = manager; + Source source = null; + try { + source = this.resolver.resolveURI( systemId ); + this.systemId = source.getSystemId(); + } finally { + this.resolver.release( source ); + } } public String getSystemId() { - return source.getSystemId(); + return this.systemId; } /** @@ -150,16 +154,37 @@ */ public TransformerHandler getTransformerHandler() throws ProcessingException { + XSLTProcessor xsltProcessor = null; + Source source = null; try { + xsltProcessor = (XSLTProcessor)this.manager.lookup(XSLTProcessor.ROLE); + source = this.resolver.resolveURI( this.systemId ); + // If the Source object is not changed, the // getTransformerHandler() of XSLTProcessor will simply return // the old template object. If the Source is unchanged, the // namespaces are not modified either. XMLFilter saveNSFilter = new SaveNamespaceFilter(namespaceURIs); - return xsltProcessor.getTransformerHandler(source, saveNSFilter); + // FIXME: The wrapping will disappear as soon as we use excaliburs xslt processor + Object[] env = org.apache.cocoon.components.CocoonComponentManager.getCurrentEnvironment(); + return xsltProcessor.getTransformerHandler( + new org.apache.cocoon.components.source.impl.AvalonToCocoonSource(source, + this.resolver, + (org.apache.cocoon.environment.Environment)env[0]), + saveNSFilter); + + } catch (ComponentException e) { + throw new ProcessingException("Could not obtain XSLT processor", e); + } catch (MalformedURLException e) { + throw new ProcessingException("Could not resolve " + this.systemId, e); + } catch (IOException e) { + throw new ProcessingException("Could not resolve " + this.systemId, e); + } catch (SourceException e) { + throw new ProcessingException("Could not resolve " + this.systemId, e); } finally { + this.manager.release(xsltProcessor); // Release used resources - source.recycle(); + this.resolver.release( source ); } } 1.6 +2 -2 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/MarkupLanguage.java Index: MarkupLanguage.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/MarkupLanguage.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- MarkupLanguage.java 22 Feb 2002 07:00:08 -0000 1.5 +++ MarkupLanguage.java 29 Apr 2002 12:53:17 -0000 1.6 @@ -52,7 +52,7 @@ import org.apache.avalon.framework.component.Component; import org.apache.cocoon.components.language.programming.ProgrammingLanguage; -import org.apache.cocoon.environment.SourceResolver; +import org.apache.excalibur.source.SourceResolver; import org.xml.sax.InputSource; /** @@ -61,7 +61,7 @@ * document augmenting it with dynamic content * * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> - * @version CVS $Id: MarkupLanguage.java,v 1.5 2002/02/22 07:00:08 cziegeler Exp $ + * @version CVS $Id: MarkupLanguage.java,v 1.6 2002/04/29 12:53:17 cziegeler Exp $ */ public interface MarkupLanguage extends Component { 1.10 +4 -3 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/NamedLogicsheet.java Index: NamedLogicsheet.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/NamedLogicsheet.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- NamedLogicsheet.java 26 Apr 2002 10:42:16 -0000 1.9 +++ NamedLogicsheet.java 29 Apr 2002 12:53:17 -0000 1.10 @@ -52,7 +52,8 @@ import org.apache.avalon.framework.component.ComponentManager; import org.apache.cocoon.ProcessingException; -import org.apache.cocoon.environment.SourceResolver; +import org.apache.excalibur.source.SourceResolver; +import org.apache.excalibur.source.SourceException; import org.xml.sax.SAXException; @@ -67,7 +68,7 @@ * * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> - * @version CVS $Id: NamedLogicsheet.java,v 1.9 2002/04/26 10:42:16 cziegeler Exp $ + * @version CVS $Id: NamedLogicsheet.java,v 1.10 2002/04/29 12:53:17 cziegeler Exp $ */ public class NamedLogicsheet extends Logicsheet { /** @@ -81,7 +82,7 @@ private String prefix; public NamedLogicsheet(String systemId, ComponentManager manager, SourceResolver resolver) - throws IOException, ProcessingException, SAXException + throws IOException, ProcessingException, SourceException, SAXException { super(systemId, manager, resolver); } 1.10 +2 -2 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/sitemap/SitemapMarkupLanguage.java Index: SitemapMarkupLanguage.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/sitemap/SitemapMarkupLanguage.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- SitemapMarkupLanguage.java 22 Feb 2002 07:00:08 -0000 1.9 +++ SitemapMarkupLanguage.java 29 Apr 2002 12:53:17 -0000 1.10 @@ -57,7 +57,7 @@ import org.apache.cocoon.components.language.markup.LogicsheetCodeGenerator; import org.apache.cocoon.components.language.markup.CocoonMarkupLanguage; import org.apache.cocoon.components.language.programming.ProgrammingLanguage; -import org.apache.cocoon.environment.SourceResolver; +import org.apache.excalibur.source.SourceResolver; import org.apache.log.Logger; import org.xml.sax.Attributes; import org.xml.sax.SAXException; @@ -75,7 +75,7 @@ * <a href="http://xml.apache.org/cocoon2/userdocs/concepts/sitemap.html">Sitemap</a>. * * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a> - * @version CVS $Id: SitemapMarkupLanguage.java,v 1.9 2002/02/22 07:00:08 cziegeler Exp $ + * @version CVS $Id: SitemapMarkupLanguage.java,v 1.10 2002/04/29 12:53:17 cziegeler Exp $ */ public class SitemapMarkupLanguage extends CocoonMarkupLanguage {
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]