giacomo 00/10/12 21:14:46
Modified: src/org/apache/cocoon/components/language/markup/sitemap/java
Tag: xml-cocoon2 sitemap.xsl
src/org/apache/cocoon/sitemap Tag: xml-cocoon2
AbstractSitemap.java ComponentHolder.java
ComponentHolderFactory.java
DefaultComponentHolder.java Handler.java
Manager.java PoolableComponentHolder.java
ResourcePipeline.java Sitemap.java
ThreadSafeComponentHolder.java
webapp Tag: xml-cocoon2 cocoon.xconf
Log:
Sitemap component inheritence implemented.
Sub sitemaps can now use sitemap components declared in the parent sitemap.
CodeFactories are not inheritable.
Revision Changes Path
No revision
No revision
1.1.2.48 +165 -264
xml-cocoon/src/org/apache/cocoon/components/language/markup/sitemap/java/Attic/sitemap.xsl
Index: sitemap.xsl
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/sitemap/java/Attic/sitemap.xsl,v
retrieving revision 1.1.2.47
retrieving revision 1.1.2.48
diff -u -r1.1.2.47 -r1.1.2.48
--- sitemap.xsl 2000/10/12 16:43:45 1.1.2.47
+++ sitemap.xsl 2000/10/13 04:14:33 1.1.2.48
@@ -70,7 +70,7 @@
* This is the automatically generated class from the sitemap definitions
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo
Pati</a>
- * @version CVS $Revision: 1.1.2.47 $ $Date: 2000/10/12 16:43:45 $
+ * @version CVS $Revision: 1.1.2.48 $ $Date: 2000/10/13 04:14:33 $
*/
public class <xsl:value-of select="@file-name"/> extends AbstractSitemap
{
static {
@@ -79,115 +79,68 @@
/** An empty <code>Parameter</code> used to pass to the
sitemap components */
private Parameters emptyParam = new Parameters();
- /** The <code>Generator</code> used to generate a SAX
event stream out of an <code>Exception</code> */
- private ComponentHolder generator_error_handler = null;
- /** The <code>Configuration</code> for the error generator
above */
- private Configuration generator_config_error_handler = null;
- /** The <code>Transformer</code> used when link
transformation is requested */
- private ComponentHolder transformer_link_translator = null;
- /** The <code>Configuration</code> for the link
transformer above */
- private Configuration transformer_config_link_translator = null;
-
- <!-- generate variables for all components -->
- /** The generators */
- <xsl:for-each
select="/map:sitemap/map:components/map:generators/map:generator">
- private ComponentHolder generator_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- private Configuration generator_config_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- </xsl:for-each>
-
- /** The transformers */
- <xsl:for-each
select="/map:sitemap/map:components/map:transformers/map:transformer">
- private ComponentHolder transformer_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- private Configuration transformer_config_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- </xsl:for-each>
-
- /** The readers */
- <xsl:for-each
select="/map:sitemap/map:components/map:readers/map:reader">
- private ComponentHolder reader_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- private Configuration reader_config_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- </xsl:for-each>
-
- /** The serializers */
- <xsl:for-each
select="/map:sitemap/map:components/map:serializers/map:serializer">
- private ComponentHolder serializer_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- private Configuration serializer_config_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- </xsl:for-each>
/** The matchers */
<xsl:for-each
select="/map:sitemap/map:components/map:matchers/map:[EMAIL PROTECTED]">
- <xsl:variable name="src" select="@src"/>
- <xsl:variable name="is-factory"
select="java:isFactory($factory-loader, string(@src))"/>
- <xsl:choose>
- <xsl:when test="$is-factory">
- <xsl:variable name="type" select="@name"/>
- <xsl:variable name="default"><xsl:if test="$type =
../@default">true</xsl:if></xsl:variable>
- <xsl:variable name="config"><xsl:copy-of
select="."/></xsl:variable>
- <!-- process all map:match elements with a type attribute
refering to the current matcher factory iteration -->
- <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:[EMAIL
PROTECTED] or (not(@type) and $default!='')]">
- <xsl:variable name="matcher-name">
- <xsl:call-template name="generate-name">
- <xsl:with-param name="prefix">matcher_</xsl:with-param>
- <xsl:with-param name="value" select="@pattern"/>
- </xsl:call-template>
- </xsl:variable>
- /** The generated matcher for a pattern of "<xsl:value-of
select="@pattern"/>" */
- <xsl:value-of
select="java:getClassSource($factory-loader,string($src),string($matcher-name),string(@pattern),$config)"/>
- private List <xsl:value-of select="$matcher-name"/> (String
pattern, Map objectModel) {
- <xsl:value-of
select="java:getMethodSource($factory-loader,string($src),string($matcher-name),string(@pattern),$config)"/>
- }
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- private ComponentHolder matcher_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- </xsl:otherwise>
- </xsl:choose>
- private Configuration matcher_config_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
+ <xsl:if test="java:isFactory($factory-loader, string(@src))">
+ <xsl:variable name="src" select="@src"/>
+ <xsl:variable name="type" select="@name"/>
+ <xsl:variable name="default" select="$type = ../@default"/>
+ <xsl:variable name="config"><xsl:copy-of
select="."/></xsl:variable>
+ <!-- process all map:match elements with a type attribute refering
to the current matcher factory iteration -->
+ <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:[EMAIL
PROTECTED] or (not(@type) and $default)]">
+ <xsl:variable name="matcher-name">
+ <xsl:call-template name="generate-name">
+ <xsl:with-param name="prefix">matcher_</xsl:with-param>
+ <xsl:with-param name="value" select="@pattern"/>
+ </xsl:call-template>
+ </xsl:variable>
+ /** The generated matcher for a pattern of "<xsl:value-of
select="@pattern"/>" */
+ <xsl:value-of
select="java:getClassSource($factory-loader,string($src),string($matcher-name),string(@pattern),$config)"/>
+ private List <xsl:value-of select="$matcher-name"/> (String
pattern, Map objectModel) {
+ <xsl:value-of
select="java:getMethodSource($factory-loader,string($src),string($matcher-name),string(@pattern),$config)"/>
+ }
+ </xsl:for-each>
+ </xsl:if>
</xsl:for-each>
/** The selectors */
<xsl:for-each
select="/map:sitemap/map:components/map:selectors/map:[EMAIL PROTECTED]">
- <xsl:variable name="src" select="@src"/>
- <xsl:variable name="is-factory"
select="java:isFactory($factory-loader, string(@src))"/>
- <xsl:choose>
- <xsl:when test="$is-factory">
- <xsl:variable name="type" select="@name"/>
- <xsl:variable name="default"><xsl:if test="$type =
../@default">true</xsl:if></xsl:variable>
- <xsl:variable name="config"><xsl:copy-of
select="."/></xsl:variable>
- <!-- process all map:when elements with are in a map:chooser
element having a type attribute
- refering to the current selector factory iteration -->
- <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:when[../map:select/@type=$type
or (not(../map:select/@type) and $default!='')]">
- <xsl:variable name="selector-name">
- <xsl:call-template name="generate-name">
- <xsl:with-param name="prefix">selector_</xsl:with-param>
- <xsl:with-param name="value" select="@test"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="this-test">
- <xsl:value-of select="@test"/>
- </xsl:variable>
- <xsl:if test="not(preceding::map:[EMAIL PROTECTED] =
$this-test])">
- /** The generated selector for a test of "<xsl:value-of
select="@test"/>" */
- <xsl:value-of
select="java:getClassSource($factory-loader,string($src),string(@test),string($selector-name),$config)"/>
- private boolean <xsl:value-of select="$selector-name"/>
(String pattern, Map objectModel) {
- <xsl:value-of
select="java:getMethodSource($factory-loader,string($src),string(@test),string($selector-name),$config)"/>
- }
- </xsl:if>
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- private ComponentHolder selector_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- </xsl:otherwise>
- </xsl:choose>
- private Configuration selector_config_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
+ <xsl:if test="java:isFactory($factory-loader, string(@src))">
+ <xsl:variable name="src" select="@src"/>
+ <xsl:variable name="type" select="@name"/>
+ <xsl:variable name="default" select="$type = ../@default"/>
+ <xsl:variable name="config"><xsl:copy-of
select="."/></xsl:variable>
+ <!-- process all map:when elements with are in a map:chooser
element having a type attribute
+ refering to the current selector factory iteration -->
+ <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:when[../map:select/@type=$type
or (not(../map:select/@type) and $default)]">
+ <xsl:variable name="selector-name">
+ <xsl:call-template name="generate-name">
+ <xsl:with-param name="prefix">selector_</xsl:with-param>
+ <xsl:with-param name="value" select="@test"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="this-test">
+ <xsl:value-of select="@test"/>
+ </xsl:variable>
+ <xsl:if test="not(preceding::map:[EMAIL PROTECTED] =
$this-test])">
+ /** The generated selector for a test of "<xsl:value-of
select="@test"/>" */
+ <xsl:value-of
select="java:getClassSource($factory-loader,string($src),string(@test),string($selector-name),$config)"/>
+ private boolean <xsl:value-of select="$selector-name"/>
(String pattern, Map objectModel) {
+ <xsl:value-of
select="java:getMethodSource($factory-loader,string($src),string(@test),string($selector-name),$config)"/>
+ }
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
</xsl:for-each>
/** The generated matchers (for backward compatability. Should be
removed in the future) */
<xsl:for-each
select="/map:sitemap/map:components/map:matchers/map:[EMAIL PROTECTED]">
<xsl:variable name="factory" select="@factory"/>
<xsl:variable name="type" select="@name"/>
- <xsl:variable name="default"><xsl:if test="$type =
../@default">true</xsl:if></xsl:variable>
+ <xsl:variable name="default" select="$type = ../@default"/>
<xsl:variable name="config"><xsl:copy-of select="."/></xsl:variable>
- <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:[EMAIL
PROTECTED] or (not(@type) and $default!='')]">
+ <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:[EMAIL
PROTECTED] or (not(@type) and $default)]">
<xsl:variable name="matcher-name">
<xsl:call-template name="generate-name">
<xsl:with-param name="prefix">matcher_</xsl:with-param>
@@ -205,9 +158,9 @@
<xsl:for-each
select="/map:sitemap/map:components/map:selectors/map:[EMAIL PROTECTED]">
<xsl:variable name="factory" select="@factory"/>
<xsl:variable name="type" select="@name"/>
- <xsl:variable name="default"><xsl:if test="$type =
../@default">true</xsl:if></xsl:variable>
+ <xsl:variable name="default" select="$type = ../@default"/>
<xsl:variable name="config"><xsl:copy-of select="."/></xsl:variable>
- <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:when[../map:select/@type=$type
or (not(../map:select/@type) and $default!='')]">
+ <xsl:for-each
select="/map:sitemap/map:pipelines/map:pipeline/descendant-or-self::map:when[../map:select/@type=$type
or (not(../map:select/@type) and $default)]">
<xsl:variable name="selector-name">
<xsl:call-template name="generate-name">
<xsl:with-param name="prefix">selector_</xsl:with-param>
@@ -226,82 +179,70 @@
</xsl:for-each>
</xsl:for-each>
- /** The actions */
- <xsl:for-each
select="/map:sitemap/map:components/map:actions/map:action">
- private ComponentHolder action_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- private Configuration action_config_<xsl:value-of
select="translate(./@name, '- ', '__')"/> = null;
- </xsl:for-each>
-
/**
* Pass a <code>Configuration</code> instance to this
* <code>Configurable</code> class.
*/
- public void setConfiguration(Configuration conf)
- throws ConfigurationException /*, SAXException, ClassNotFoundException,
- InstantiationException, IllegalAccessException */ {
+ public void setConfiguration(Configuration conf) throws
ConfigurationException {
SAXConfigurationBuilder confBuilder = new SAXConfigurationBuilder ();
Configuration cconf = null;
AttributesImpl attr = new AttributesImpl();
- this.sitemapManager = new Manager();
+ this.sitemapManager = new Manager(super.sitemapComponentManager);
this.sitemapManager.setComponentManager(this.manager);
this.sitemapManager.setConfiguration(conf);
try {
<!-- configure all components -->
- /* Configure special ErrorNotifier */
+ /* Configure special ErrorNotifier and LinkTransformer */
confBuilder.startDocument ();
confBuilder.endDocument ();
Configuration cconf2 = confBuilder.getConfiguration();
- generator_config_error_handler = cconf2;
- generator_error_handler =
- (ComponentHolder) load_component
("org.apache.cocoon.sitemap.ErrorNotifier", cconf2);
- transformer_config_link_translator = cconf2;
- transformer_link_translator =
- (ComponentHolder) load_component
("org.apache.cocoon.sitemap.LinkTranslator", cconf2);
+ load_component ("!generator:error-notifier!",
"org.apache.cocoon.sitemap.ErrorNotifier", cconf2, null);
+ load_component ("!transformer:link-translator!",
"org.apache.cocoon.sitemap.LinkTranslator", cconf2, null);
- /* Configure generators */
+ <!-- Configure generators -->
<xsl:call-template name="config-components">
<xsl:with-param name="name">generator</xsl:with-param>
<xsl:with-param name="components"
select="/map:sitemap/map:components/map:generators/map:generator"/>
</xsl:call-template>
- /* Configure transformers */
+ <!-- Configure transformers -->
<xsl:call-template name="config-components">
<xsl:with-param name="name">transformer</xsl:with-param>
<xsl:with-param name="components"
select="/map:sitemap/map:components/map:transformers/map:transformer"/>
</xsl:call-template>
- /* Configure readers */
+ <!-- Configure readers -->
<xsl:call-template name="config-components">
<xsl:with-param name="name">reader</xsl:with-param>
<xsl:with-param name="components"
select="/map:sitemap/map:components/map:readers/map:reader"/>
</xsl:call-template>
- /* Configure serializers */
+ <!-- Configure serializers -->
<xsl:call-template name="config-components">
<xsl:with-param name="name">serializer</xsl:with-param>
<xsl:with-param name="components"
select="/map:sitemap/map:components/map:serializers/map:serializer"/>
</xsl:call-template>
- /* Configure matchers */
+ <!-- Configure matchers -->
<xsl:call-template name="config-components">
<xsl:with-param name="name">matcher</xsl:with-param>
<xsl:with-param name="components"
select="/map:sitemap/map:components/map:matchers/map:matcher"/>
</xsl:call-template>
- /* Configure selectors */
+ <!-- Configure selectors -->
<xsl:call-template name="config-components">
<xsl:with-param name="name">selector</xsl:with-param>
<xsl:with-param name="components"
select="/map:sitemap/map:components/map:selectors/map:selector"/>
</xsl:call-template>
- /* Configure actions */
+ <!-- Configure actions -->
<xsl:call-template name="config-components">
<xsl:with-param name="name">action</xsl:with-param>
<xsl:with-param name="components"
@@ -335,7 +276,7 @@
}
</xsl:for-each>
- <!-- generate methods for every map:resource element -->
+ <!-- generate methods for every map:view element -->
<xsl:for-each select="/map:sitemap/map:views/map:view">
/**
* This is the method to produce the "<xsl:value-of
select="@name"/>" view of the requested resource
@@ -362,13 +303,12 @@
throws Exception {
/* the <code>ResourcePipeline</code> used to collect the
sitemap
components to produce the requested resource */
- ResourcePipeline pipeline = new ResourcePipeline ();
- pipeline.setComponentManager (this.manager);
+ ResourcePipeline pipeline = new ResourcePipeline
(super.sitemapComponentManager);
/* the <code>List</code> objects to hold the replacement
values
delivered from matchers and selectors to replace occurences of
XPath kind expressions in values of src attribute used with
generate and transform elements */
- List listOfLists = (List)(new ArrayList());
+ List listOfLists = (List) new ArrayList();
List list;
Parameters param;
Map objectModel = environment.getObjectModel();
@@ -406,14 +346,11 @@
<xsl:if test="(./map:handle-errors)">
private boolean error_process_<xsl:value-of
select="$pipeline-position"/> (Environment environment, Map objectModel,
Exception e)
throws Exception {
- ResourcePipeline pipeline = new ResourcePipeline ();
- pipeline.setComponentManager (this.manager);
+ ResourcePipeline pipeline = new ResourcePipeline
(super.sitemapComponentManager);
List listOfLists = (List)(new ArrayList());
List list;
Parameters param;
- pipeline.setGenerator (generator_error_handler, e.getMessage(),
emptyParam);
- ErrorNotifier eg = (ErrorNotifier)pipeline.getGenerator().get();
- eg.setException (e);
+ pipeline.setGenerator ("!generator:error-notifier!",
e.getMessage(), emptyParam, e);
<xsl:apply-templates select="./map:handle-errors/*"/>
return false;
}
@@ -450,24 +387,41 @@
</xsl:call-template>
</xsl:variable>
+ <!-- get the name of this matcher in case it is defined in this sitemap
? -->
+ <xsl:variable name="local-matcher">
+ <xsl:value-of
select="/map:sitemap/map:components/map:matchers/map:[EMAIL PROTECTED]"/>
+ </xsl:variable>
+
+ <!-- check if this matcher is a factory ? -->
+ <xsl:variable name="is-factory">
+ <xsl:choose>
+ <xsl:when test="not($local-matcher)">
+ <xsl:value-of select="false()"/>
+ </xsl:when>
+ <xsl:when test="$local-matcher/@factory">
+ <xsl:value-of select="true()"/>
+ </xsl:when>
+ <xsl:when test="$local-matcher/@src">
+ <xsl:value-of select="java:isFactory($factory-loader,
string($local-matcher/@src))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="false()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+
<!-- gets the string how the matcher is to be invoced in java code -->
<xsl:variable name="matcher-name">
- <xsl:for-each
select="/map:sitemap/map:components/map:matchers/map:[EMAIL PROTECTED]">
- <xsl:variable name="is-factory"
select="java:isFactory($factory-loader, string(@src))"/>
- <xsl:choose>
- <xsl:when test="(./@src) and not($is-factory)">
- matcher_<xsl:value-of select="translate($matcher-type, '- ',
'__')"/>.match
- </xsl:when>
- <xsl:when test="(./@factory) or $is-factory">
- matcher_<xsl:value-of select="$matcher-name2"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="error">
- <xsl:with-param name="message">cannot choose a matcher name
<xsl:value-of select="$matcher-type"/></xsl:with-param>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
+ <!-- check if we have a matcher definition in this sitemap otherwise
get it from the parent -->
+ <xsl:choose>
+ <xsl:when test="$is-factory">
+ matcher_<xsl:value-of select="$matcher-name2"/>
+ </xsl:when>
+ <xsl:otherwise>
+
((Matcher)((ComponentHolder)super.sitemapComponentManager.getComponent("matcher:<xsl:value-of
select="$matcher-type"/>")).get()).match
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:variable>
<!-- this is the actual code produced -->
@@ -509,24 +463,41 @@
</xsl:call-template>
</xsl:variable>
+
+ <!-- get the name of this selector in case it is defined in this
sitemap ? -->
+ <xsl:variable name="local-selector">
+ <xsl:value-of
select="/map:sitemap/map:components/map:selectors/map:[EMAIL PROTECTED]"/>
+ </xsl:variable>
+
+ <!-- check if this selector is a factory ? -->
+ <xsl:variable name="is-factory">
+ <xsl:choose>
+ <xsl:when test="not($local-selector)">
+ <xsl:value-of select="false()"/>
+ </xsl:when>
+ <xsl:when test="$local-selector/@factory">
+ <xsl:value-of select="true()"/>
+ </xsl:when>
+ <xsl:when test="$local-selector/@src">
+ <xsl:value-of select="java:isFactory($factory-loader,
string($local-selector/@src))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="false()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
<!-- gets the string how the selector is to be invoced in java code -->
<xsl:variable name="selector-name">
- <xsl:for-each
select="/map:sitemap/map:components/map:selectors/map:[EMAIL PROTECTED]">
- <xsl:variable name="is-factory"
select="java:isFactory($factory-loader, string(@src))"/>
- <xsl:choose>
- <xsl:when test="(./@src) and not($is-factory)">
- selector_<xsl:value-of select="translate($selector-type, '- ',
'__')"/>.select
- </xsl:when>
- <xsl:when test="(./@factory) or $is-factory">
- selector_<xsl:value-of select="$selector-name2"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="error">
- <xsl:with-param name="message">cannot choose a selector name
<xsl:value-of select="$selector-type"/></xsl:with-param>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
+ <!-- check if we have a selector definition in this sitemap
otherwise get it from the parent -->
+ <xsl:choose>
+ <xsl:when test="$is-factory">
+ selector_<xsl:value-of select="$selector-name2"/>
+ </xsl:when>
+ <xsl:otherwise>
+
((Selector)((ComponentHolder)super.sitemapComponentManager.getComponent("selector:<xsl:value-of
select="$selector-type"/>")).get()).select
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:variable>
<!-- this is the actual code produced on the when elements -->
@@ -559,18 +530,7 @@
<!-- gets the string how the action is to be invoced in java code -->
<xsl:variable name="action-name">
- <xsl:for-each
select="/map:sitemap/map:components/map:actions/map:[EMAIL PROTECTED]">
- <xsl:choose>
- <xsl:when test="(./@src)">
- action_<xsl:value-of select="translate($action-type, '- ',
'__')"/>.act
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="error">
- <xsl:with-param name="message">cannot choose an action name
<xsl:value-of select="$action-type"/></xsl:with-param>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
+
((Action)((ComponentHolder)super.sitemapComponentManager.getComponent("action:<xsl:value-of
select="$selector-type"/>")).get()).act
</xsl:variable>
<!-- test if we have to define parameters for this action -->
@@ -596,14 +556,14 @@
<!-- generate the invocation of the act method of the action component
-->
<xsl:choose>
<xsl:when test="./*">
- if ((list = <xsl:value-of select="$action-name"/> (environment,
objectModel, <xsl:value-of select="$src-param"/>, <xsl:value-of
select="$component-param"/>)) != null) {
+ if ((list = <xsl:value-of select="$action-name"/> (environment,
objectModel, <xsl:value-of select="$component-param"/>)) != null) {
listOfLists.add (list);
<xsl:apply-templates/>
listOfList.remove(list);
}
</xsl:when>
<xsl:otherwise>
- list = <xsl:value-of select="$action-name"/> (environment,
objectModel, <xsl:value-of select="$src-param"/>, <xsl:value-of
select="$component-param"/>);
+ list = <xsl:value-of select="$action-name"/> (environment,
objectModel, <xsl:value-of select="$component-param"/>);
</xsl:otherwise>
</xsl:choose>
</xsl:template> <!-- match="map:act" -->
@@ -626,44 +586,13 @@
</xsl:call-template>
</xsl:template> <!-- match="map:transformer" -->
- <!-- generate the code to invoke a transformer -->
+ <!-- generate the code to invoke a serializer -->
<xsl:template match="map:serialize">
-
- <!-- get the type of serializer used -->
- <xsl:variable name="default-serializer-type">
- <xsl:value-of
select="/map:sitemap/map:components/map:serializers/@default"/>
- </xsl:variable>
- <xsl:variable name="this-type">
- <xsl:choose>
- <xsl:when test="@type">
- <xsl:value-of select="@type"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$default-serializer-type"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <!-- get the mime-type to be used for this serializer -->
- <xsl:variable name="default-mime-type">
- <xsl:value-of
select="/map:sitemap/map:components/map:serializers/map:[EMAIL
PROTECTED]/@mime-type"/>
- </xsl:variable>
-
- <!-- generate the code to invoke a serializer -->
<xsl:call-template name="setup-component">
- <xsl:with-param name="default-component"
select="$default-serializer-type"/>
+ <xsl:with-param name="default-component"
select="/map:sitemap/map:components/map:serializers/@default"/>
<xsl:with-param name="method">setSerializer</xsl:with-param>
<xsl:with-param name="prefix">serializer</xsl:with-param>
- <xsl:with-param name="mime-type">
- <xsl:choose>
- <xsl:when test="@mime-type">
- <xsl:value-of select="@mime-type"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$default-mime-type"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
+ <xsl:with-param name="mime-type" select="@mime-type"/>
</xsl:call-template>
<!-- if there is a status-code attribute tell it to the environment -->
@@ -675,44 +604,13 @@
if(true)return pipeline.process (environment);
</xsl:template> <!-- match="map:serialize" -->
- <!-- generate the code to invoke a transformer -->
+ <!-- generate the code to invoke a reader -->
<xsl:template match="map:read">
-
- <!-- get the type of reader used -->
- <xsl:variable name="default-reader-type">
- <xsl:value-of
select="/map:sitemap/map:components/map:readers/@default"/>
- </xsl:variable>
- <xsl:variable name="this-type">
- <xsl:choose>
- <xsl:when test="@type">
- <xsl:value-of select="@type"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$default-reader-type"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <!-- get the mime-type to be used for this reader -->
- <xsl:variable name="default-mime-type">
- <xsl:value-of
select="/map:sitemap/map:components/map:readers/map:[EMAIL
PROTECTED]/@mime-type"/>
- </xsl:variable>
-
- <!-- generate the code to invoke a reader -->
<xsl:call-template name="setup-component">
<xsl:with-param name="default-component"
select="/map:sitemap/map:components/map:readers/@default"/>
<xsl:with-param name="method">setReader</xsl:with-param>
<xsl:with-param name="prefix">reader</xsl:with-param>
- <xsl:with-param name="mime-type">
- <xsl:choose>
- <xsl:when test="@mime-type">
- <xsl:value-of select="@mime-type"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$default-mime-type"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
+ <xsl:with-param name="mime-type" select="@mime-type"/>
</xsl:call-template>
<!-- the "if(true)" is needed to prevent "statement not reachable" error
messages during compile -->
@@ -749,7 +647,7 @@
<xsl:when test="substring(@uri-prefix,string-length(@uri-prefix))='}'">
String uri_prefix<xsl:value-of
select="count(.)"/>=substitute(listOfLists,"<xsl:value-of
select="@uri-prefix"/>");
if (uri_prefix<xsl:value-of
select="count(.)"/>.charAt(uri_prefix<xsl:value-of
select="count(.)"/>.length()-1)=='/'){
- return sitemapManager.invoke (environment, uri_prefix<xsl:value-of
select="count(.)"/>, substitute(listOfLists,"<xsl:value-of select="@src"/>"),
<xsl:value-of select="$check-reload"/>);
+ if(true)return sitemapManager.invoke (environment,
uri_prefix<xsl:value-of select="count(.)"/>,
substitute(listOfLists,"<xsl:value-of select="@src"/>"), <xsl:value-of
select="$check-reload"/>);
} else {
return sitemapManager.invoke (environment, uri_prefix<xsl:value-of
select="count(.)"/>+"/", substitute(listOfLists,"<xsl:value-of
select="@src"/>"), <xsl:value-of select="$check-reload"/>);
}
@@ -806,7 +704,6 @@
<!-- this template generates the code to configure a specific sitemap
component -->
<xsl:template name="config-components">
<xsl:param name="name"/>
- <xsl:param name="interface"/>
<xsl:param name="components"/>
<xsl:variable name="qname">
@@ -815,10 +712,9 @@
<xsl:variable name="ns" select="namespace-uri(.)"/>
<xsl:for-each select="$components">
- <xsl:variable name="factory-component">
- <xsl:if test="$name = 'matcher' or $name = 'selector'"><xsl:value-of
select="java:isFactory($factory-loader, string(@src))"/></xsl:if>
- </xsl:variable>
- <xsl:if test="not($factory-component)">
+ <xsl:variable name="is-factory-component"
+ select="(@factory and ($name = 'matcher' or $name = 'selector')) or
(@src and ($name = 'matcher' or $name = 'selector') and
java:isFactory($factory-loader, string(@src)))"/>
+ <xsl:if test="$is-factory-component=false()">
confBuilder.startDocument ();
<xsl:if test="$ns">
confBuilder.startPrefixMapping("","<xsl:value-of
select="namespace-uri(.)"/>");
@@ -838,7 +734,6 @@
<xsl:call-template name="nested-config-components">
<xsl:with-param name="name" select="$name"/>
<xsl:with-param name="config-name"><xsl:value-of
select="concat(local-name(.),'/',@name)"/></xsl:with-param>
- <xsl:with-param name="interface" select="$interface"/>
<xsl:with-param name="components" select="*"/>
<xsl:with-param name="type" select="@name"/>
<xsl:with-param name="ns" select="$ns"/>
@@ -848,13 +743,18 @@
confBuilder.endElement ("", "<xsl:value-of select="translate(@name,
'- ', '__')"/>",
"<xsl:value-of select="translate(@name,
'- ', '__')"/>");
<xsl:if test="$ns">
- confBuilder.endPrefixMapping("");
+ confBuilder.endPrefixMapping("");
</xsl:if>
confBuilder.endDocument ();
cconf = confBuilder.getConfiguration();
- <xsl:value-of select="$name"/>_config_<xsl:value-of
select="translate(@name, '- ', '__')"/> = cconf;
- <xsl:value-of select="$name"/>_<xsl:value-of
select="translate(@name, '- ', '__')"/> =
- (ComponentHolder)load_component ("<xsl:value-of select="@src"/>",
cconf);
+ <xsl:choose>
+ <xsl:when test="@mime-type">
+ load_component ("<xsl:value-of select="$name"/>:<xsl:value-of
select="@name"/>", "<xsl:value-of select="@src"/>", cconf, "<xsl:value-of
select="@mime-type"/>");
+ </xsl:when>
+ <xsl:otherwise>
+ load_component ("<xsl:value-of select="$name"/>:<xsl:value-of
select="@name"/>", "<xsl:value-of select="@src"/>", cconf, null);
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:template>
@@ -863,7 +763,6 @@
<xsl:template name="nested-config-components">
<xsl:param name="name"/>
<xsl:param name="config-name"/>
- <xsl:param name="interface"/>
<xsl:param name="components"/>
<xsl:param name="type"/>
<xsl:param name="ns"/>
@@ -898,7 +797,6 @@
<xsl:call-template name="nested-config-components">
<xsl:with-param name="name"><xsl:value-of
select="$name"/></xsl:with-param>
<xsl:with-param name="config-name"><xsl:value-of
select="local-name(.)"/></xsl:with-param>
- <xsl:with-param name="interface"><xsl:value-of
select="$interface"/></xsl:with-param>
<xsl:with-param name="components" select="./*"/>
<xsl:with-param name="type"><xsl:value-of
select="$type"/></xsl:with-param>
<xsl:with-param name="ns"><xsl:value-of
select="namespace-uri(.)"/></xsl:with-param>
@@ -917,6 +815,7 @@
<xsl:param name="method"/>
<xsl:param name="prefix"/>
<xsl:param name="mime-type"/>
+
<!-- view/label 'last' check -->
<xsl:if test="not(ancestor::map:views) and
not(ancestor::map:handle-errors)">
<xsl:if test="$prefix='serializer'">
@@ -927,7 +826,7 @@
</xsl:for-each>
// performing link translation
if (environment.getObjectModel().containsKey(Cocoon.LINK_OBJECT)) {
- pipeline.addTransformer (transformer_link_translator, null,
emptyParam);
+ pipeline.addTransformer ("!transformer:link-translator!", null,
emptyParam);
}
</xsl:if>
</xsl:if>
@@ -948,7 +847,7 @@
</xsl:call-template>
</xsl:variable>
- <!-- test if we have to define parameters for this action -->
+ <!-- test if we have to define parameters for this component -->
<xsl:if test="count(parameter)>0">
param = new Parameters ();
</xsl:if>
@@ -973,24 +872,26 @@
<xsl:when test="$component-source='null'">
<xsl:choose>
<xsl:when test="$mime-type!=''">
- pipeline.<xsl:value-of select="$method"/> (<xsl:value-of
select="$prefix"/>_<xsl:value-of select="$component-type"/>,
- null, <xsl:value-of
select="$component-param"/>,"<xsl:value-of select="$mime-type"/>");
+ pipeline.<xsl:value-of select="$method"/> ("<xsl:value-of
select="$prefix"/>:<xsl:value-of select="$component-type"/>",
+ null, <xsl:value-of select="$component-param"/>,"<xsl:value-of
select="$mime-type"/>"
+ );
</xsl:when>
<xsl:otherwise>
- pipeline.<xsl:value-of select="$method"/> (<xsl:value-of
select="$prefix"/>_<xsl:value-of select="$component-type"/>,
- null, <xsl:value-of select="$component-param"/>);
+ pipeline.<xsl:value-of select="$method"/> ("<xsl:value-of
select="$prefix"/>:<xsl:value-of select="$component-type"/>",
+ null, <xsl:value-of select="$component-param"/>
+ );
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$mime-type!=''">
- pipeline.<xsl:value-of select="$method"/> (<xsl:value-of
select="$prefix"/>_<xsl:value-of select="$component-type"/>,
+ pipeline.<xsl:value-of select="$method"/> ("<xsl:value-of
select="$prefix"/>:<xsl:value-of select="$component-type"/>",
substitute(listOfLists,"<xsl:value-of
select="$component-source"/>"),
<xsl:value-of select="$component-param"/>,"<xsl:value-of
select="$mime-type"/>");
</xsl:when>
<xsl:otherwise>
- pipeline.<xsl:value-of select="$method"/> (<xsl:value-of
select="$prefix"/>_<xsl:value-of select="$component-type"/>,
+ pipeline.<xsl:value-of select="$method"/> ("<xsl:value-of
select="$prefix"/>:<xsl:value-of select="$component-type"/>",
substitute(listOfLists,"<xsl:value-of
select="$component-source"/>"),
<xsl:value-of select="$component-param"/>);
</xsl:otherwise>
No revision
No revision
1.1.2.11 +23 -8
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/AbstractSitemap.java
Index: AbstractSitemap.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/AbstractSitemap.java,v
retrieving revision 1.1.2.10
retrieving revision 1.1.2.11
diff -u -r1.1.2.10 -r1.1.2.11
--- AbstractSitemap.java 2000/10/08 21:09:26 1.1.2.10
+++ AbstractSitemap.java 2000/10/13 04:14:41 1.1.2.11
@@ -17,6 +17,7 @@
import org.apache.avalon.Composer;
import org.apache.avalon.Configurable;
import org.apache.avalon.Configuration;
+import org.apache.avalon.DefaultComponentManager;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.Processor;
@@ -30,15 +31,18 @@
* Base class for generated <code>Sitemap</code> classes
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.10 $ $Date: 2000/10/08 21:09:26 $
+ * @version CVS $Revision: 1.1.2.11 $ $Date: 2000/10/13 04:14:41 $
*/
public abstract class AbstractSitemap implements Sitemap {
-
+
/** The component manager instance */
- protected ComponentManager manager = null;
+ protected ComponentManager manager;
+
+ /** The sitemap component manager instance */
+ protected DefaultComponentManager sitemapComponentManager;
/** The sitemap manager instance */
- protected Manager sitemapManager = null;
+ protected Manager sitemapManager;
/** The creation date */
protected static long dateCreated = -1L;
@@ -47,6 +51,14 @@
* Set the current <code>ComponentManager</code> instance used by this
* <code>Composer</code>.
*/
+ public void setParentSitemapComponentManager(ComponentManager
parentSitemapComponentManager) {
+ this.sitemapComponentManager = new DefaultComponentManager
(parentSitemapComponentManager);
+ }
+
+ /**
+ * Set the current <code>ComponentManager</code> instance used by this
+ * <code>Composer</code>.
+ */
public void setComponentManager(ComponentManager manager) {
this.manager = manager;
}
@@ -78,13 +90,16 @@
* Loads a class specified in a sitemap component definition and
* initialize it
*/
- protected ComponentHolder load_component(String classURL, Configuration
configuration) throws Exception {
+ protected void load_component(String type, String classURL,
Configuration configuration, String mime_type)
+ throws Exception {
if (!(ClassUtils.implementsInterface (classURL,
Component.class.getName()))) {
throw new IllegalAccessException ("Object " + classURL + " is
not a Component");
}
- ComponentHolder componentHolder;
- componentHolder = ComponentHolderFactory.getComponentHolder
(classURL, configuration, this.manager);
- return (componentHolder);
+ this.sitemapComponentManager.put(
+ type, ComponentHolderFactory.getComponentHolder(
+ classURL, configuration, this.manager, mime_type
+ )
+ );
}
/**
1.1.2.2 +2 -1
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ComponentHolder.java
Index: ComponentHolder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ComponentHolder.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- ComponentHolder.java 2000/10/08 20:58:58 1.1.2.1
+++ ComponentHolder.java 2000/10/13 04:14:42 1.1.2.2
@@ -14,10 +14,11 @@
* This interface is used by the sitemap engine to access the sitemap
components
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.1 $ $Date: 2000/10/08 20:58:58 $
+ * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/10/13 04:14:42 $
*/
public interface ComponentHolder extends Component {
Component get() throws Exception;
void put (Component component);
+ String getMimeType ();
String getName ();
}
1.1.2.4 +14 -9
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ComponentHolderFactory.java
Index: ComponentHolderFactory.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ComponentHolderFactory.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- ComponentHolderFactory.java 2000/10/12 16:44:05 1.1.2.3
+++ ComponentHolderFactory.java 2000/10/13 04:14:42 1.1.2.4
@@ -21,20 +21,25 @@
* interfaces the passed component implements.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.3 $ $Date: 2000/10/12 16:44:05 $
+ * @version CVS $Revision: 1.1.2.4 $ $Date: 2000/10/13 04:14:42 $
*/
public class ComponentHolderFactory {
public static ComponentHolder getComponentHolder (String componentName,
Configuration configuration, ComponentManager manager)
throws Exception {
- /* if (ClassUtils.implementsInterface (componentName,
Poolable.class.getName())) {
- return new PoolableComponentHolder (componentName,
configuration, manager);
- } else if (ClassUtils.implementsInterface (componentName,
SingleThreaded.class.getName())) {
- return new DefaultComponentHolder (componentName,
configuration, manager);
- } else */ if (ClassUtils.implementsInterface (componentName,
ThreadSafe.class.getName())) {
- return new ThreadSafeComponentHolder (componentName,
configuration, manager);
- } else {
- return new DefaultComponentHolder (componentName, configuration,
manager);
- }
+ return (getComponentHolder(componentName, configuration, manager,
null));
+ }
+
+ public static ComponentHolder getComponentHolder (String componentName,
Configuration configuration, ComponentManager manager, String mime_type)
+ throws Exception {
+ if (ClassUtils.implementsInterface (componentName,
Poolable.class.getName())) {
+ return new PoolableComponentHolder (componentName,
configuration, manager, mime_type);
+ } else if (ClassUtils.implementsInterface (componentName,
SingleThreaded.class.getName())) {
+ return new DefaultComponentHolder (componentName, configuration,
manager, mime_type);
+ } else if (ClassUtils.implementsInterface (componentName,
ThreadSafe.class.getName())) {
+ return new ThreadSafeComponentHolder (componentName,
configuration, manager, mime_type);
+ } else {
+ return new DefaultComponentHolder (componentName, configuration,
manager, mime_type);
+ }
}
}
1.1.2.2 +15 -6
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/DefaultComponentHolder.java
Index: DefaultComponentHolder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/DefaultComponentHolder.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- DefaultComponentHolder.java 2000/10/08 20:58:58 1.1.2.1
+++ DefaultComponentHolder.java 2000/10/13 04:14:42 1.1.2.2
@@ -21,23 +21,25 @@
* a spezial behaviour or treatment.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.1 $ $Date: 2000/10/08 20:58:58 $
+ * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/10/13 04:14:42 $
*/
public class DefaultComponentHolder implements ComponentHolder {
- private String className;
- private Configuration configuration;
- private ComponentManager manager;
-
+ protected String className;
+ protected Configuration configuration;
+ protected ComponentManager manager;
+ protected String mime_type;
+
/** Creates a DefaultComponentHolder
* @param className The component class name
* @param configuration The </CODE>Configuration</CODE> for the component
* @param manager A <CODE>ComponentManager</CODE> for the component
*/
- public DefaultComponentHolder(String className, Configuration
configuration, ComponentManager manager) {
+ public DefaultComponentHolder(String className, Configuration
configuration, ComponentManager manager, String mime_type) {
this.className = className;
this.configuration = configuration;
this.manager = manager;
+ this.mime_type = mime_type;
}
/** Creates a new instance of the <CODE>Component</CODE>
@@ -68,5 +70,12 @@
*/
public String getName() {
return className;
+ }
+
+ /**
+ * This method returns the mime-type of the component or null
+ */
+ public String getMimeType() {
+ return mime_type;
}
}
1.1.2.3 +7 -2
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Handler.java
Index: Handler.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Handler.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- Handler.java 2000/10/04 20:54:38 1.1.2.2
+++ Handler.java 2000/10/13 04:14:42 1.1.2.3
@@ -31,7 +31,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/10/04 20:54:38 $
+ * @version CVS $Revision: 1.1.2.3 $ $Date: 2000/10/13 04:14:42 $
*/
public class Handler implements Runnable, Configurable, Composer, Processor {
@@ -41,6 +41,9 @@
/** the component manager */
private ComponentManager manager;
+ /** the parent sitemap component manager */
+ private ComponentManager parentSitemapComponentManager;
+
/** the source of this sitemap */
private File sourceFile;
@@ -67,8 +70,9 @@
this.conf = conf;
}
- protected Handler (String source, boolean check_reload)
+ protected Handler (ComponentManager sitemapComponentManager, String
source, boolean check_reload)
throws FileNotFoundException {
+ this.parentSitemapComponentManager = sitemapComponentManager;
this.check_reload = check_reload;
String s = null;
if (source.charAt(source.length() - 1) == File.separatorChar) {
@@ -145,6 +149,7 @@
try {
ProgramGenerator programGenerator = (ProgramGenerator)
this.manager.getComponent("program-generator");
smap = (Sitemap) programGenerator.load(file, markupLanguage,
programmingLanguage, environment);
+ smap.setParentSitemapComponentManager
(this.parentSitemapComponentManager);
if (smap instanceof Composer)
smap.setComponentManager(this.manager);
if (smap instanceof Configurable)
smap.setConfiguration(this.conf);
this.sitemap = smap;
1.1.2.2 +11 -4
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Manager.java
Index: Manager.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Manager.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- Manager.java 2000/09/28 19:14:04 1.1.2.1
+++ Manager.java 2000/10/13 04:14:43 1.1.2.2
@@ -32,7 +32,7 @@
* checking regeneration of the sub <code>Sitemap</code>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.1 $ $Date: 2000/09/28 19:14:04 $
+ * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/10/13 04:14:43 $
*/
public class Manager implements Configurable, Composer {
@@ -40,11 +40,18 @@
private HashMap sitemaps = new HashMap();
/** The configuration */
- private Configuration conf = null;
+ private Configuration conf;
/** The component manager */
- private ComponentManager manager = null;
+ private ComponentManager manager;
+ /** The parent sitemap component manager */
+ private ComponentManager parentSitemapComponentManager;
+
+ public Manager (ComponentManager sitemapComponentManager) {
+ this.parentSitemapComponentManager = sitemapComponentManager;
+ }
+
public void setConfiguration (Configuration conf) {
this.conf = conf;
}
@@ -69,7 +76,7 @@
sitemapHandler.regenerate(environment);
}
} else {
- sitemapHandler = new Handler(source, check_reload);
+ sitemapHandler = new Handler(parentSitemapComponentManager,
source, check_reload);
if (sitemapHandler instanceof Composer)
sitemapHandler.setComponentManager(this.manager);
if (sitemapHandler instanceof Configurable)
sitemapHandler.setConfiguration(this.conf);
sitemaps.put(source, sitemapHandler);
1.1.2.2 +10 -31
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/PoolableComponentHolder.java
Index: PoolableComponentHolder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/PoolableComponentHolder.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- PoolableComponentHolder.java 2000/10/08 20:58:58 1.1.2.1
+++ PoolableComponentHolder.java 2000/10/13 04:14:43 1.1.2.2
@@ -19,58 +19,44 @@
import org.apache.avalon.util.pool.PoolController;
import org.apache.cocoon.util.ClassUtils;
+import org.apache.cocoon.util.ComponentPool;
/**
* This class holds a sitemap component which is not specially marked as
having
* a spezial behaviour or treatment.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.1 $ $Date: 2000/10/08 20:58:58 $
+ * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/10/13 04:14:43 $
*/
-public class PoolableComponentHolder implements ComponentHolder,
ObjectFactory {
+public class PoolableComponentHolder extends DefaultComponentHolder
implements ObjectFactory {
- /** The name of the class */
- private String className;
-
/** The class of this component */
private Class clazz = null;
- /** The <code>Configuration</code> of this component */
- private Configuration configuration;
-
- /** The <code>ComponentManagercode> of this component */
- private ComponentManager manager;
-
/** Initial increase/decrease amount */
public final static int DEFAULT_AMOUNT = 16;
/** Current increase/decrease amount */
- protected int amount = DEFAULT_AMOUNT;
-
- /** The last direction to increase/decrease >0 means increase, <0
decrease */
- protected int sizing_direction = 0;
+ protected int amount = DEFAULT_AMOUNT / 2;
/** The <code>Pool</code> for this components */
protected Pool pool;
-
/** Creates a DefaultComponentHolder
* @param className The component class name
* @param configuration The </CODE>Configuration</CODE> for the component
* @param manager A <CODE>ComponentManager</CODE> for the component
*/
- public PoolableComponentHolder(String className, Configuration
configuration, ComponentManager manager)
+ public PoolableComponentHolder(String className, Configuration
configuration, ComponentManager manager, String mime_type)
throws Exception {
- this.className = className;
+ super(className, configuration, manager, mime_type);
try {
- this.clazz = ClassUtils.loadClass (className);
+ this.clazz = ClassUtils.loadClass (super.className);
} catch (Exception e) {
this.clazz = null;
}
- this.configuration = configuration;
- this.manager = manager;
- PoolController pc = (PoolController)this.manager.getComponent
("sitemap-component-pool-controller");
- this.pool = new ComponentPool (this, pc, amount, amount);
+ PoolController pc = (PoolController)super.manager.getComponent
("sitemap-component-pool-controller");
+ this.pool = new ComponentPool (this, pc, amount, DEFAULT_AMOUNT);
}
/** Creates a new instance of the <CODE>Component</CODE>
@@ -102,14 +88,7 @@
* @return A Poolable component
*/
public Poolable newInstance() throws Exception {
- Poolable comp = (Poolable) ClassUtils.newInstance (this.className);
- if (comp instanceof Composer) {
- ((Composer) comp).setComponentManager (this.manager);
- }
- if (comp instanceof Configurable) {
- ((Configurable) comp).setConfiguration (this.configuration);
- }
- return comp;
+ return (Poolable) super.get();
}
/**
1.1.2.17 +99 -66
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ResourcePipeline.java
Index: ResourcePipeline.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ResourcePipeline.java,v
retrieving revision 1.1.2.16
retrieving revision 1.1.2.17
diff -u -r1.1.2.16 -r1.1.2.17
--- ResourcePipeline.java 2000/10/08 21:09:26 1.1.2.16
+++ ResourcePipeline.java 2000/10/13 04:14:43 1.1.2.17
@@ -26,88 +26,97 @@
import org.apache.cocoon.serialization.Serializer;
import org.apache.cocoon.xml.XMLProducer;
+import org.apache.cocoon.sitemap.ErrorNotifier;
+
import org.xml.sax.SAXException;
import org.xml.sax.EntityResolver;
/**
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.16 $ $Date: 2000/10/08 21:09:26 $
+ * @version CVS $Revision: 1.1.2.17 $ $Date: 2000/10/13 04:14:43 $
*/
public class ResourcePipeline implements Composer {
- private ComponentHolder generator = null;
- private Parameters generatorParam = null;
- private String generatorSource = null;
- private ComponentHolder reader = null;
- private Parameters readerParam = null;
- private String readerSource = null;
- private String readerMimeType = null;
+ private ComponentHolder generator;
+ private Parameters generatorParam;
+ private String generatorSource;
+ private Exception generatorException;
+ private ComponentHolder reader;
+ private Parameters readerParam;
+ private String readerSource;
+ private String readerMimeType;
private Vector transformers = new Vector();
private Vector transformerParams = new Vector();
private Vector transformerSources = new Vector();
- private ComponentHolder serializer = null;
- private Parameters serializerParam = null;
- private String serializerSource = null;
- private String serializerMimeType = null;
+ private ComponentHolder serializer;
+ private Parameters serializerParam;
+ private String serializerSource;
+ private String serializerMimeType;
/** the component manager */
- private ComponentManager manager = null;
+ private ComponentManager manager;
+
+ /** the sitemap component manager */
+ private ComponentManager sitemapComponentManager;
- public ResourcePipeline () {
+ public ResourcePipeline (ComponentManager sitemapComponentManager) {
+ this.sitemapComponentManager = sitemapComponentManager;
}
public void setComponentManager (ComponentManager manager) {
this.manager = manager;
}
+
+ public void setGenerator (String role, String source, Parameters param,
Exception e)
+ throws Exception {
+ this.generatorException = e;
+ this.setGenerator (role, source, param);
+ }
- public void setGenerator (ComponentHolder holder, String source,
Parameters param)
+ public void setGenerator (String role, String source, Parameters param)
throws Exception {
if (this.generator != null) {
- throw new ProcessingException ("Generator " + holder.getName() +
" already set. You can only select one Generator");
+ throw new ProcessingException ("Generator already set. You can
only select one Generator (" + role + ")");
}
- this.generator = holder;
+ this.generator =
(ComponentHolder)sitemapComponentManager.getComponent(role);
this.generatorSource = source;
this.generatorParam = param;
}
- public ComponentHolder getGenerator () {
- return this.generator;
- }
-
- public void setReader (ComponentHolder holder, String source, Parameters
param)
+ public void setReader (String role, String source, Parameters param)
throws Exception {
- this.setReader (holder, source, param, null);
+ this.setReader (role, source, param, null);
}
- public void setReader (ComponentHolder holder, String source, Parameters
param, String mimeType)
+ public void setReader (String role, String source, Parameters param,
String mimeType)
throws Exception {
if (this.reader != null) {
- throw new ProcessingException ("Reader " + holder.getName() + "
already set. You can only select one Reader");
+ throw new ProcessingException ("Reader already set. You can only
select one Reader (" + role + ")");
}
- this.reader = holder;
+ this.reader =
(ComponentHolder)sitemapComponentManager.getComponent(role);
this.readerSource = source;
this.readerParam = param;
this.readerMimeType = mimeType;
}
- public void setSerializer (ComponentHolder holder, String source,
Parameters param)
+ public void setSerializer (String role, String source, Parameters param)
throws Exception {
- this.setSerializer (holder, source, param, null);
+ this.setSerializer (role, source, param, null);
}
- public void setSerializer (ComponentHolder holder, String source,
Parameters param, String mimeType)
+ public void setSerializer (String role, String source, Parameters param,
String mimeType)
throws Exception {
if (this.serializer != null) {
- throw new ProcessingException ("Serializer " + holder.getName()
+ " already set. You can only select one Serializer");
+ throw new ProcessingException ("Serializer already set. You can
only select one Serializer (" + role + ")");
}
- this.serializer = holder;
+ this.serializer =
(ComponentHolder)sitemapComponentManager.getComponent(role);
this.serializerSource = source;
this.serializerParam = param;
this.serializerMimeType = mimeType;
}
- public void addTransformer (ComponentHolder holder, String source,
Parameters param)
+ public void addTransformer (String role, String source, Parameters param)
throws Exception {
- this.transformers.add (holder);
+ this.transformers.add
((ComponentHolder)sitemapComponentManager.getComponent(role));
this.transformerSources.add (source);
this.transformerParams.add (param);
}
@@ -118,23 +127,28 @@
if (generator == null) {
if (reader != null) {
- Reader myReader = (Reader) reader.get();
+ Reader myReader = null;
try {
+ myReader = (Reader) reader.get();
myReader.setup ((EntityResolver) environment,
environment.getObjectModel(), readerSource, readerParam);
mime_type = myReader.getMimeType();
if (mime_type != null) {
+ // we have a mimeType freom the component itself
environment.setContentType (mime_type);
} else if (readerMimeType != null) {
+ // there was a mimeType specified in the sitemap
pipeline
environment.setContentType (readerMimeType);
} else {
- /* (GP)FIXME: Reaching here we havn't set a
mime-type. This
- * case should be prevented by the sitemap
generating stylesheet */
+ // use the mimeType specified in the sitemap
component declaration
+ environment.setContentType (reader.getMimeType());
}
myReader.setOutputStream (environment.getOutputStream());
myReader.generate();
} finally {
- reader.put(myReader);
+ if (myReader != null)
+ reader.put(myReader);
}
+
} else {
throw new ProcessingException ("Generator or Reader not
specified");
}
@@ -144,39 +158,58 @@
}
Generator myGenerator = (Generator) generator.get();
- int i = transformers.size();
- Transformer myTransformer[] = new Transformer[i];
- for (int j=0; j < i; j++) {
- myTransformer[j] = (Transformer)((ComponentHolder)
transformers.elementAt (j)).get();
- }
- Serializer mySerializer = (Serializer) serializer.get();
-
try {
- myGenerator.setup ((EntityResolver) environment,
environment.getObjectModel(), generatorSource, generatorParam);
- Transformer transformer = null;
- XMLProducer producer = myGenerator;
- for (int j=0; j < i; j++) {
- myTransformer[j].setup ((EntityResolver) environment,
environment.getObjectModel(),
- (String)transformerSources.elementAt (j),
- (Parameters)transformerParams.elementAt
(j));
- producer.setConsumer (myTransformer[j]);
- producer = myTransformer[j];
+ if (generatorException != null) {
+ ((ErrorNotifier)myGenerator).setException
(generatorException);
}
+ int i = transformers.size();
+ Transformer myTransformer[] = new Transformer[i];
+ int num_transformers = 0;
- mime_type = mySerializer.getMimeType();
- if (mime_type != null)
- environment.setContentType (mime_type);
- else if (serializerMimeType != null)
- environment.setContentType (serializerMimeType);
- mySerializer.setOutputStream (environment.getOutputStream());
- producer.setConsumer (mySerializer);
- myGenerator.generate();
- } finally {
- serializer.put(mySerializer);
- for (int j=0; j < i; j++) {
- ((ComponentHolder) transformers.elementAt
(j)).put(myTransformer[j]);
+ try {
+ for (num_transformers=0; num_transformers < i;
num_transformers++) {
+ myTransformer[num_transformers] =
(Transformer)((ComponentHolder) transformers.elementAt
(num_transformers)).get();
+ }
+
+ Serializer mySerializer = (Serializer) serializer.get();
+ try {
+
+ myGenerator.setup ((EntityResolver) environment,
environment.getObjectModel(), generatorSource, generatorParam);
+ Transformer transformer = null;
+ XMLProducer producer = myGenerator;
+ for (int j=0; j < i; j++) {
+ myTransformer[j].setup ((EntityResolver)
environment, environment.getObjectModel(),
+ (String)transformerSources.elementAt (j),
+ (Parameters)transformerParams.elementAt
(j));
+ producer.setConsumer (myTransformer[j]);
+ producer = myTransformer[j];
+ }
+
+ mime_type = mySerializer.getMimeType();
+ if (mime_type != null) {
+ // we have a mimeType freom the component itself
+ environment.setContentType (mime_type);
+ } else if (serializerMimeType != null) {
+ // there was a mimeType specified in the sitemap
pipeline
+ environment.setContentType (serializerMimeType);
+ } else {
+ // use the mimeType specified in the sitemap
component declaration
+ environment.setContentType
(serializer.getMimeType());
+ }
+ mySerializer.setOutputStream
(environment.getOutputStream());
+ producer.setConsumer (mySerializer);
+ myGenerator.generate();
+ } finally {
+ serializer.put(mySerializer);
+ }
+ } finally {
+ for (int j=0; j < num_transformers; j++) {
+ ((ComponentHolder) transformers.elementAt
(j)).put(myTransformer[j]);
+ }
}
- generator.put(myGenerator);
+ } finally {
+ if (myGenerator != null)
+ generator.put(myGenerator);
}
}
return true;
1.1.4.10 +6 -4
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Sitemap.java
Index: Sitemap.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Sitemap.java,v
retrieving revision 1.1.4.9
retrieving revision 1.1.4.10
diff -u -r1.1.4.9 -r1.1.4.10
--- Sitemap.java 2000/07/27 21:49:05 1.1.4.9
+++ Sitemap.java 2000/10/13 04:14:43 1.1.4.10
@@ -10,15 +10,17 @@
import org.apache.avalon.Composer;
import org.apache.avalon.Modifiable;
import org.apache.avalon.Configurable;
-import org.apache.avalon.Configuration;
+import org.apache.avalon.Configuration;
+import org.apache.avalon.ComponentManager;
+
import org.apache.cocoon.Processor;
/**
* Base interface for generated <code>Sitemap</code> classes
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.4.9 $ $Date: 2000/07/27 21:49:05 $
+ * @version CVS $Revision: 1.1.4.10 $ $Date: 2000/10/13 04:14:43 $
*/
-public interface Sitemap
- extends Composer, Configurable, Processor, Modifiable {
+public interface Sitemap extends Composer, Configurable, Processor,
Modifiable {
+ public void setParentSitemapComponentManager (ComponentManager
sitemapComponentManager);
}
1.1.2.2 +5 -16
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ThreadSafeComponentHolder.java
Index: ThreadSafeComponentHolder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ThreadSafeComponentHolder.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- ThreadSafeComponentHolder.java 2000/10/09 09:30:12 1.1.2.1
+++ ThreadSafeComponentHolder.java 2000/10/13 04:14:43 1.1.2.2
@@ -20,13 +20,10 @@
* This class holds a sitemap component which is specially marked as beeing
thread safe
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.1 $ $Date: 2000/10/09 09:30:12 $
+ * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/10/13 04:14:43 $
*/
-public class ThreadSafeComponentHolder implements ComponentHolder {
+public class ThreadSafeComponentHolder extends DefaultComponentHolder {
- private String className;
- private Configuration configuration;
- private ComponentManager manager;
private Component comp;
/** Creates a ThreadSafeComponentHolder
@@ -34,18 +31,10 @@
* @param configuration The </CODE>Configuration</CODE> for the component
* @param manager A <CODE>ComponentManager</CODE> for the component
*/
- public ThreadSafeComponentHolder(String className, Configuration
configuration, ComponentManager manager)
+ public ThreadSafeComponentHolder(String className, Configuration
configuration, ComponentManager manager, String mime_type)
throws Exception {
- this.className = className;
- this.configuration = configuration;
- this.manager = manager;
- this.comp = (Component) ClassUtils.newInstance (this.className);
- if (this.comp instanceof Composer) {
- ((Composer) this.comp).setComponentManager (this.manager);
- }
- if (this.comp instanceof Configurable) {
- ((Configurable) this.comp).setConfiguration (this.configuration);
- }
+ super(className, configuration, manager, mime_type);
+ this.comp = super.get();
}
/** Returns the instance of the <CODE>Component</CODE>
No revision
No revision
1.1.2.6 +1 -1 xml-cocoon/webapp/Attic/cocoon.xconf
Index: cocoon.xconf
===================================================================
RCS file: /home/cvs/xml-cocoon/webapp/Attic/cocoon.xconf,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -r1.1.2.5 -r1.1.2.6
--- cocoon.xconf 2000/10/08 21:11:34 1.1.2.5
+++ cocoon.xconf 2000/10/13 04:14:45 1.1.2.6
@@ -56,7 +56,7 @@
<component role="jpegencoder"
class="org.apache.cocoon.components.image.JPEGEncoder"/>
<!-- these components is used as a PoolController for the sitemap
component pools -->
- <component role="sitemap-component-pool-controller"
class="org.apache.cocoon.sitemap.ComponentPoolController"/>
+ <component role="sitemap-component-pool-controller"
class="org.apache.cocoon.util.ComponentPoolController"/>
<sitemap file="sitemap.xmap"/>
</cocoon>