cziegeler 2003/06/17 10:54:47
Modified:
src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl
XSLTAspect.java
Log:
Minor performance update, reducing todo
Revision Changes Path
1.6 +53 -22
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java
Index: XSLTAspect.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XSLTAspect.java 15 Jun 2003 16:56:09 -0000 1.5
+++ XSLTAspect.java 17 Jun 2003 17:54:47 -0000 1.6
@@ -51,12 +51,17 @@
package org.apache.cocoon.portal.layout.renderer.aspect.impl;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.sax.TransformerHandler;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
+import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.parameters.ParameterException;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.components.variables.VariableResolver;
@@ -64,6 +69,7 @@
import org.apache.cocoon.portal.PortalService;
import org.apache.cocoon.portal.layout.Layout;
import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspectContext;
+import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.xml.IncludeXMLConsumer;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceResolver;
@@ -82,9 +88,14 @@
* @version CVS $Id$
*/
public class XSLTAspect
- extends AbstractAspect {
+ extends AbstractAspect
+ implements Disposable {
- /* (non-Javadoc)
+ protected List variables = new ArrayList();
+
+ protected VariableResolverFactory variableFactory;
+
+ /* (non-Javadoc)
* @see
org.apache.cocoon.portal.layout.renderer.RendererAspect#toSAX(org.apache.cocoon.portal.layout.renderer.RendererAspectContext,
org.apache.cocoon.portal.layout.Layout, org.apache.cocoon.portal.PortalService,
org.xml.sax.ContentHandler)
*/
public void toSAX(RendererAspectContext context,
@@ -126,30 +137,19 @@
}
}
- protected String getStylesheetURI(PreparedConfiguration config, Layout layout) {
-
+ protected String getStylesheetURI(PreparedConfiguration config, Layout layout)
+ throws SAXException {
// FIXME Get the stylesheet either from a layout attribute or another aspect
- String stylesheet = config.stylesheet;
- // TODO make this faster
- VariableResolverFactory factory = null;
try {
- factory = (VariableResolverFactory)
this.manager.lookup(VariableResolverFactory.ROLE);
- VariableResolver resolver = null;
- try {
- resolver = factory.lookup( stylesheet );
- stylesheet = resolver.resolve();
- } finally {
- factory.release( resolver );
- }
- } catch (Exception ignore) {
- } finally {
- this.manager.release((Component)factory);
+ String stylesheet = config.stylesheet.resolve();
+ return stylesheet;
+ } catch (PatternException pe) {
+ throw new SAXException("Pattern exception during variable resolving.",
pe);
}
- return stylesheet;
}
protected class PreparedConfiguration {
- public String stylesheet;
+ public VariableResolver stylesheet;
public String xsltRole;
public void takeValues(PreparedConfiguration from) {
@@ -164,9 +164,40 @@
public Object prepareConfiguration(Parameters configuration)
throws ParameterException {
PreparedConfiguration pc = new PreparedConfiguration();
- pc.stylesheet = configuration.getParameter("style");
pc.xsltRole = configuration.getParameter("xslt-processor-role",
XSLTProcessorImpl.ROLE);
+ String stylesheet = configuration.getParameter("style");
+ try {
+ pc.stylesheet = this.variableFactory.lookup( stylesheet );
+ } catch (PatternException pe) {
+ throw new ParameterException("Unknown pattern for stylesheet " +
stylesheet, pe);
+ }
+ this.variables.add(pc.stylesheet);
return pc;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.avalon.framework.activity.Disposable#dispose()
+ */
+ public void dispose() {
+ if ( this.manager != null ) {
+ Iterator vars = this.variables.iterator();
+ while ( vars.hasNext() ) {
+ this.variableFactory.release( (VariableResolver) vars.next() );
+ }
+ this.variables.clear();
+ this.manager.release((Component) this.variableFactory);
+ this.manager = null;
+ this.variableFactory = null;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.avalon.framework.component.Composable#compose(org.apache.avalon.framework.component.ComponentManager)
+ */
+ public void compose(ComponentManager componentManager)
+ throws ComponentException {
+ super.compose(componentManager);
+ this.variableFactory = (VariableResolverFactory)
this.manager.lookup(VariableResolverFactory.ROLE);
}
}