You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2010/10/05 09:20:53 UTC

svn commit: r1004546 - in /sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter: ProcessingComponentConfiguration.java impl/PipelineImpl.java impl/RewriterResponse.java

Author: cziegeler
Date: Tue Oct  5 07:20:52 2010
New Revision: 1004546

URL: http://svn.apache.org/viewvc?rev=1004546&view=rev
Log:
Support optional pipeline components

Modified:
    sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessingComponentConfiguration.java
    sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/PipelineImpl.java
    sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java

Modified: sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessingComponentConfiguration.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessingComponentConfiguration.java?rev=1004546&r1=1004545&r2=1004546&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessingComponentConfiguration.java (original)
+++ sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessingComponentConfiguration.java Tue Oct  5 07:20:52 2010
@@ -24,6 +24,9 @@ import org.apache.sling.api.resource.Val
  */
 public interface ProcessingComponentConfiguration {
 
+    /** Configuration for an optional component, only transformers support this option. */
+    String CONFIGURATION_COMPONENT_OPTIONAL = "component-optional";
+
     /**
      * The name/type of the component.
      * @return A unique name for this component.

Modified: sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/PipelineImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/PipelineImpl.java?rev=1004546&r1=1004545&r2=1004546&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/PipelineImpl.java (original)
+++ sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/PipelineImpl.java Tue Oct  5 07:20:52 2010
@@ -82,15 +82,15 @@ public class PipelineImpl implements Pro
         final Transformer[][] rewriters = this.factoryCache.getGlobalTransformers(processingContext);
 
         final ProcessingComponentConfiguration generatorConfig = config.getGeneratorConfiguration();
-        this.generator = this.getPipelineComponent(Generator.class, generatorConfig.getType());
+        this.generator = this.getPipelineComponent(Generator.class, generatorConfig.getType(), false);
         LOGGER.debug("Using generator type {}: {}.", generatorConfig.getType(), generator);
         generator.init(processingContext, generatorConfig);
 
         final int transformerCount = (transformerConfigs == null ? 0 : transformerConfigs.length) + rewriters[0].length + rewriters[1].length;
+        int index = 0;
         if ( transformerCount > 0 ) {
             // add all pre rewriter transformers
             transformers = new Transformer[transformerCount];
-            int index = 0;
             for(int i=0; i< rewriters[0].length; i++) {
                 transformers[index] = rewriters[0][i];
                 LOGGER.debug("Using pre transformer: {}.", transformers[index]);
@@ -99,10 +99,15 @@ public class PipelineImpl implements Pro
             }
             if ( transformerConfigs != null ) {
                 for(int i=0; i< transformerConfigs.length;i++) {
-                    transformers[index] = this.getPipelineComponent(Transformer.class, transformerConfigs[i].getType());
-                    LOGGER.debug("Using transformer type {}: {}.", transformerConfigs[i].getType(), transformers[index]);
-                    transformers[index].init(processingContext, transformerConfigs[i]);
-                    index++;
+                    transformers[index] = this.getPipelineComponent(Transformer.class, transformerConfigs[i].getType(),
+                            transformerConfigs[i].getConfiguration().get(ProcessingComponentConfiguration.CONFIGURATION_COMPONENT_OPTIONAL, false));
+                    if ( transformers[index] != null ) {
+                        LOGGER.debug("Using transformer type {}: {}.", transformerConfigs[i].getType(), transformers[index]);
+                        transformers[index].init(processingContext, transformerConfigs[i]);
+                        index++;
+                    } else {
+                        LOGGER.debug("Skipping missing optional transformer of type {}", transformerConfigs[i].getType());
+                    }
                 }
             }
             for(int i=0; i< rewriters[1].length; i++) {
@@ -116,13 +121,13 @@ public class PipelineImpl implements Pro
         }
 
         final ProcessingComponentConfiguration serializerConfig = config.getSerializerConfiguration();
-        this.serializer = this.getPipelineComponent(Serializer.class, serializerConfig.getType());
+        this.serializer = this.getPipelineComponent(Serializer.class, serializerConfig.getType(), false);
         LOGGER.debug("Using serializer type {}: {}.", serializerConfig.getType(), serializer);
         serializer.init(processingContext, serializerConfig);
 
         ContentHandler pipelineComponent = serializer;
         // now chain pipeline
-        for(int i=transformers.length; i>0; i--) {
+        for(int i=index; i>0; i--) {
             transformers[i-1].setContentHandler(pipelineComponent);
             pipelineComponent = transformers[i-1];
         }
@@ -136,8 +141,9 @@ public class PipelineImpl implements Pro
      * Lookup a pipeline component.
      */
     @SuppressWarnings("unchecked")
-    private <ComponentType> ComponentType getPipelineComponent(Class<ComponentType> typeClass,
-                                                               String type)
+    private <ComponentType> ComponentType getPipelineComponent(final Class<ComponentType> typeClass,
+                                                               final String type,
+                                                               final boolean optional)
     throws IOException {
         final ComponentType component;
         if ( typeClass == Generator.class ) {
@@ -150,7 +156,7 @@ public class PipelineImpl implements Pro
             component = null;
         }
 
-        if ( component == null ) {
+        if ( component == null && !optional ) {
             throw new IOException("Unable to get component of class '" + typeClass + "' with type '" + type + "'.");
         }
 
@@ -195,7 +201,9 @@ public class PipelineImpl implements Pro
         }
         if ( this.transformers != null ) {
             for(final Transformer transformer : this.transformers ) {
-                transformer.dispose();
+                if ( transformer != null ) {
+                    transformer.dispose();
+                }
             }
         }
         if ( this.serializer != null ) {

Modified: sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java?rev=1004546&r1=1004545&r2=1004546&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java (original)
+++ sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java Tue Oct  5 07:20:52 2010
@@ -159,13 +159,16 @@ class RewriterResponse
      * Search the first matching processor
      */
     private Processor getProcessor() throws IOException {
+        this.request.getRequestProgressTracker().log("Searching processor");
         final ProcessingContext processorContext = new ServletProcessingContext(this.request, this, this.getSlingResponse(), this.contentType);
         Processor found = null;
         final List<ProcessorConfiguration> processorConfigs = this.processorManager.getProcessorConfigurations();
         final Iterator<ProcessorConfiguration> i = processorConfigs.iterator();
         while ( found == null && i.hasNext() ) {
             final ProcessorConfiguration config = i.next();
+            this.request.getRequestProgressTracker().log("Checking processor {0}", config);
             if ( config.match(processorContext) ) {
+                this.request.getRequestProgressTracker().log("Settimg up processor {0}", config);
                 found = this.processorManager.getProcessor(config, processorContext);
                 this.request.getRequestProgressTracker().log("Found processor for post processing {0}", config);
             }