ovidiu      02/01/09 21:19:30

  Modified:    src/scratchpad/schecoon/src/org/apache/cocoon/scheme/sitemap
                        SchemeSitemap.java
  Log:
  Added support for sitemap:transform and sitemap:serialize.
  
  Revision  Changes    Path
  1.2       +183 -50   
xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/scheme/sitemap/SchemeSitemap.java
  
  Index: SchemeSitemap.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/scheme/sitemap/SchemeSitemap.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SchemeSitemap.java        8 Jan 2002 23:15:07 -0000       1.1
  +++ SchemeSitemap.java        10 Jan 2002 05:19:30 -0000      1.2
  @@ -20,11 +20,11 @@
    * <ul>
    *
    *  <li><b>sitemap:generate</b> - create a new {@link
  - *  org.apache.cocoon.components.pipeline.EventPipeline}, and adds the
  + *  org.apache.cocoon.components.pipeline.StreamPipeline}, and adds the
    *  generator specified by the function arguments to it. The prototype
    *  of Scheme function is:
    *  <pre>
  - *   sitemap:generate: SitemapComponents Environment params -> EventPipeline
  + *   sitemap:generate: SitemapComponents Environment params -> StreamPipeline
    *  </pre>
    *
    *
  @@ -42,8 +42,8 @@
    *  argument, and returns the pipeline. The prototype of the Scheme
    *  function is:
    *  <pre>
  - *   sitemap:transform: SitemapComponents Environment params EventPipeline
  - *                      -> EventPipeline
  + *   sitemap:transform: SitemapComponents Environment params StreamPipeline
  + *                      -> StreamPipeline
    *  </pre>
    *
    *  <li><b>sitemap:serialize</b> - creates a serializer object of the
  @@ -51,15 +51,15 @@
    *  argument, and returns the pipeline. The prototype of the Scheme
    *  function is:
    *  <pre>
  - *   sitemap:serialize: SitemapComponents Environment params EventPipeline
  - *                      -> EventPipeline
  + *   sitemap:serialize: SitemapComponents Environment params StreamPipeline
  + *                      -> StreamPipeline
    *  </pre>
    *
    *  <li><b>sitemap:process</b> - processes the given pipeline passed
    *  as argument. This has the side effect of processing the pipeline,
    *  as it was specified in the sitemap.
    *  <pre>
  - *   sitemap:process: SitemapComponents Environment params EventPipeline
  + *   sitemap:process: SitemapComponents Environment params StreamPipeline
    *                    -> void
    *  </pre>
    *
  @@ -183,16 +183,34 @@
      * Type cast function from a Scheme wrapper of an Environment
      * instance.
      *
  -   * @param senv a Scheme wrapper of an Environment instance.
  +   * @param scm a Scheme wrapper of an Environment instance.
      * @return an <code>Environment</code> value
      */
  -  static public Environment environment(Value senv)
  +  static public Environment environment(Value scm)
     {
       try {
  -      return (Environment)(((J2S.JavaObject)senv).o);
  +      return (Environment)(((J2S.JavaObject)scm).o);
       }
       catch (ClassCastException ex) {
  -      typeError("Environment", senv);
  +      typeError("Environment", scm);
  +    }
  +    return null;
  +  }
  +
  +  /**
  +   * Type cast function from a Scheme wrapper of an StreamPipeline
  +   * instance.
  +   *
  +   * @param scm a Scheme wrapper of an StreamPipeline instance.
  +   * @return an <code>Environment</code> value
  +   */
  +  static public StreamPipeline streamPipeline(Value scm)
  +  {
  +    try {
  +      return (StreamPipeline)(((J2S.JavaObject)scm).o);
  +    }
  +    catch (ClassCastException ex) {
  +      typeError("StreamPipeline", scm);
       }
       return null;
     }
  @@ -248,8 +266,8 @@
     }
   
     /**
  -   * <p>Creates a new <tt>EventPipeline</tt> instance, and a new
  -   * Generator instance. Adds the Generator to the pipeline.
  +   * <p>Creates a new pipeline instance, and a new Generator
  +   * instance. Adds the Generator to the pipeline.
      *
      * <p>The type of the generator is specified in the <tt>sargs</tt>
      * list, which is a Scheme association list. The parameters to be
  @@ -288,7 +306,7 @@
      * @param scm the Scheme wrapper for the SitemapComponents instance
      * @param senv the Scheme wrapper for the Environment instance
      * @param sargs the Scheme arguments, as list
  -   * @return a Scheme wrapper for the <tt>EventPipeline</tt> instance
  +   * @return a Scheme wrapper for the <tt>StreamPipeline</tt> instance
      * @exception Exception if an error occurs
      *
      * @see SitemapComponents
  @@ -297,7 +315,8 @@
       throws Exception
     {
       SitemapComponents sitemapComponents = sitemapComponents(scm);
  -    EventPipeline eventPipeline = sitemapComponents.getEventPipeline();
  +    StreamPipeline pipeline = sitemapComponents.getStreamPipeline();
  +    EventPipeline eventPipeline = pipeline.getEventPipeline();
   
       // Obtain the 'src' attribute
       Value ssrc = assq(sargs, Symbol.get("src"));
  @@ -309,7 +328,7 @@
       Value stype = assq(sargs, Symbol.get("type"));
       String type;
       if (!stype.eq(FALSE))
  -      type = string(pair(ssrc).cdr);
  +      type = string(pair(stype).cdr);
       else
         type = sitemapComponents.getDefaultGeneratorType();
   
  @@ -317,15 +336,17 @@
       Value sparams = assq(sargs, Symbol.get("params"));
       Parameters params = getParameters(sparams);
   
  +//     System.out.println("generate type " + type + ", src " + src
  +//                        + " params " + params);
  +    
       eventPipeline.setGenerator(type, src, params);
   
  -    return new J2S.JavaObject(eventPipeline);
  +    return new J2S.JavaObject(pipeline);
     }
   
     /**
  -   * <p>Creates a new <tt>Reader</tt> and a new
  -   * <tt>StreamPipeline</tt>. Adds the reader to the pipeline and
  -   * returns the pipeline newly created.
  +   * <p>Creates a new <tt>Reader</tt> and a new pipeline. Adds the
  +   * reader to the pipeline and returns the pipeline newly created.
      *
      * <p>The parameters that describe the reader are specified in the
      * <tt>sargs</tt> list, which is a Scheme association list.
  @@ -338,10 +359,10 @@
      *  <li><b>mime-type</b> - (optional) the MIME type associated with
      *  the source. If no MIME type is specified, text/html is assumed.
      *
  -   *  <li><b>type</b> - (optional) if no type is specified, the
  -   *  default reader type is used. The default reader type is
  -   *  specified using the <tt>default</tt> attribute of the
  -   *  <tt>readers</tt> XML element.
  +   *  <li><b>type</b> - (optional) The type of the reader to be
  +   *  used. If no type is specified, the default reader type is
  +   *  used. The default reader type is specified using the
  +   *  <tt>default</tt> attribute of the <tt>readers</tt> XML element.
      *
      *  <li><b>params</b> - (optional) additional parameters to be
      *  specified when configuring the reader. The value of this entry
  @@ -362,10 +383,8 @@
       throws Exception
     {
       SitemapComponents sitemapComponents = sitemapComponents(scm);
  -    StreamPipeline streamPipeline = sitemapComponents.getStreamPipeline();
  -    EventPipeline eventPipeline = sitemapComponents.getEventPipeline();
  -
  -    streamPipeline.setEventPipeline(eventPipeline);
  +    StreamPipeline pipeline = sitemapComponents.getStreamPipeline();
  +    EventPipeline eventPipeline = pipeline.getEventPipeline();
   
       // Obtain the 'src' attribute
       Value ssrc = assq(sargs, Symbol.get("src"));
  @@ -375,17 +394,15 @@
   
       // Obtain the 'mime-type' attribute
       Value smimeType = assq(sargs, Symbol.get("mime-type"));
  -    String mimeType;
  -    if (smimeType.eq(FALSE))
  -      mimeType = "text/html";
  -    else
  +    String mimeType = null;
  +    if (!smimeType.eq(FALSE))
         mimeType = string(pair(smimeType).cdr);
   
       // Obtain the 'type' attribute
       Value stype = assq(sargs, Symbol.get("type"));
       String type;
       if (!stype.eq(FALSE))
  -      type = string(pair(ssrc).cdr);
  +      type = string(pair(stype).cdr);
       else
         type = sitemapComponents.getDefaultReaderType();
   
  @@ -393,26 +410,149 @@
       Value sparams = assq(sargs, Symbol.get("params"));
       Parameters params = getParameters(sparams);
   
  -    streamPipeline.setReader(type, src, params, mimeType);
  +    pipeline.setReader(type, src, params, mimeType);
   
  -    return new J2S.JavaObject(streamPipeline);
  +    return new J2S.JavaObject(pipeline);
     }
   
  +  /**
  +   * Creates a new <tt>transformer</tt> and adds it to the pipeline
  +   * passed as argument. Returns the pipeline object passed as
  +   * argument.
  +   *
  +   * <p>The recognized parameters for a transformer are:
  +   *
  +   * <ul> <li><b>src</b> - (required) the location of the XSLT
  +   * stylesheet to be applied.
  +   *
  +   *  <li><b>type</b> - (optional) The type of the transformer to be
  +   *  used, as defined in the <file>components.xconf</file>. If no
  +   *  type is specified, the default transformer is used. The default
  +   *  transformer type is specified using the <tt>default</tt>
  +   *  attribute of the <tt>transformers</tt> XML element.
  +   *
  +   *  <li><b>params</b> - (optional) additional parameters to be
  +   *  specified when configuring the transformer. The value of this
  +   *  entry should be a Scheme association list, which contains the
  +   *  additional parameters.
  +   *
  +   * </ul>
  +   *
  +   * @param scm the Scheme wrapper for the SitemapComponents instance
  +   * @param senv the Scheme wrapper for the Environment instance
  +   * @param sargs the Scheme arguments, as list
  +   * @return a Scheme wrapper for the <tt>StreamPipeline</tt> instance
  +   * @exception Exception if an error occurs
  +   *
  +   * @see SitemapComponents
  +   */
     public Value transform(Value scm, Value senv, Value sargs, Value spipeline)
  +    throws Exception
     {
  -    return null;
  +    SitemapComponents sitemapComponents = sitemapComponents(scm);
  +    StreamPipeline pipeline = streamPipeline(spipeline);
  +    EventPipeline eventPipeline = pipeline.getEventPipeline();
  +
  +    // Obtain the 'src' attribute
  +    Value ssrc = assq(sargs, Symbol.get("src"));
  +    if (ssrc.eq(FALSE))
  +      throw new RuntimeException("No 'src' attribute specified for 'transform'!");
  +    String src = string(pair(ssrc).cdr);
  +
  +    // Obtain the 'type' attribute
  +    Value stype = assq(sargs, Symbol.get("type"));
  +    String type;
  +    if (!stype.eq(FALSE))
  +      type = string(pair(stype).cdr);
  +    else
  +      type = sitemapComponents.getDefaultTransformerType();
  +
  +    // Obtain the parameters
  +    Value sparams = assq(sargs, Symbol.get("params"));
  +    Parameters params = getParameters(sparams);
  +
  +//     System.out.println("transform type " + type + ", src " + src
  +//                        + " params " + params);
  +    
  +    eventPipeline.addTransformer(type, src, params);
  +
  +    return spipeline;
     }
   
  +  /**
  +   * Creates a new <tt>serializer</tt> and adds it to the pipeline
  +   * passed as argument. Returns the pipeline object passed as
  +   * argument.
  +   *
  +   * <p>The recognized parameters for a transformer are:
  +   *
  +   *  <li><b>type</b> - (optional) The type of the serializer to be
  +   *  used, as defined in the <file>components.xconf</file>. If no
  +   *  type is specified, the default serializer is used. The default
  +   *  serializer type is specified using the <tt>default</tt>
  +   *  attribute of the <tt>serializers</tt> XML element.
  +   *
  +   *  <li><b>mime-type</b> - (optional) the MIME type associated with
  +   *  the generated result. If no MIME type is specified, the default
  +   *  used by the particular serializer is used.
  +   *
  +   *  <li><b>params</b> - (optional) additional parameters to be
  +   *  specified when configuring the serializer. The value of this
  +   *  entry should be a Scheme association list, which contains the
  +   *  additional parameters.
  +   *
  +   * </ul>
  +   *
  +   * @param scm the Scheme wrapper for the SitemapComponents instance
  +   * @param senv the Scheme wrapper for the Environment instance
  +   * @param sargs the Scheme arguments, as list
  +   * @return a Scheme wrapper for the <tt>StreamPipeline</tt> instance
  +   * @exception Exception if an error occurs
  +   *
  +   * @see SitemapComponents
  +   */
     public Value serialize(Value scm, Value senv, Value sargs, Value spipeline)
  +    throws Exception
     {
  -    return null;
  +    SitemapComponents sitemapComponents = sitemapComponents(scm);
  +    StreamPipeline pipeline = streamPipeline(spipeline);
  +
  +    // Obtain the 'type' attribute
  +    Value stype = assq(sargs, Symbol.get("type"));
  +    String type;
  +    if (!stype.eq(FALSE))
  +      type = string(pair(stype).cdr);
  +    else
  +      type = sitemapComponents.getDefaultSerializerType();
  +
  +    // Obtain the 'mime-type' attribute
  +    Value smimeType = assq(sargs, Symbol.get("mime-type"));
  +    String mimeType = null;
  +    if (!smimeType.eq(FALSE))
  +      mimeType = string(pair(smimeType).cdr);
  +
  +    // Obtain the parameters
  +    Value sparams = assq(sargs, Symbol.get("params"));
  +    Parameters params = getParameters(sparams);
  +
  +//     System.out.println("serialize type " + type
  +//                        + " params " + params + " mime-type " + mimeType);
  +    
  +    pipeline.setSerializer(type, null, params, mimeType);
  +
  +    return spipeline;
     }
   
     /**
      * Invokes the <tt>process</tt> method of the pipeline instance
  -   * passed as argument. The pipeline could be either an {@link
  -   * org.apache.cocoon.components.pipeline.EventPipeline} or a {@link
  -   * org.apache.cocoon.components.pipeline.StreamPipeline}.
  +   * passed as argument. The pipeline instance passed between all the
  +   * sitemap Scheme functions is always an instance of {@link
  +   * org.apache.cocoon.components.pipeline.StreamPipeline}. If you
  +   * need to obtain the {@link
  +   * org.apache.cocoon.components.pipeline.EventPipeline} use the
  +   * appropriate method from the {@link
  +   * org.apache.cocoon.components.pipeline.StreamPipeline#getEventPipeline()}
  +   * method to obtain it.
      *
      * <p>This function releases the pipeline, so it must be the last
      * function you call on the pipeline.
  @@ -429,18 +569,11 @@
     {
       SitemapComponents sitemapComponents = sitemapComponents(scm);
       Environment env = environment(senv);
  -    Object pipeline = ((J2S.JavaObject)spipeline).o;
  +    StreamPipeline pipeline = streamPipeline(spipeline);
   
  -    if (pipeline instanceof EventPipeline)
  -      ((EventPipeline)pipeline).process(env);
  -    else {
  -      ((StreamPipeline)pipeline).process(env);
  -      EventPipeline eventPipeline
  -        = ((StreamPipeline)pipeline).getEventPipeline();
  -      sitemapComponents.releasePipeline((Component)eventPipeline);
  -    }
  +    pipeline.process(env);
   
  -    sitemapComponents.releasePipeline((Component)pipeline);
  +    sitemapComponents.releasePipeline(pipeline);
   
       return null;
     }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to