You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2002/03/09 07:27:16 UTC

cvs commit: xml-cocoon2/tools/src XConfToolTask.java

vgritsenko    02/03/08 22:27:16

  Modified:    .        build.xml
               src/java/org/apache/cocoon/components/deli deli.xconf
               src/java/org/apache/cocoon/components/hsqldb hsqldb.xconf
               src/java/org/apache/cocoon/components/resolver
                        resolver.xconf
               src/java/org/apache/cocoon/components/search lucene.xconf
               src/java/org/apache/cocoon/components/store jisp.xconf
               src/java/org/apache/cocoon/generation xmldb.xconf
               src/webapp cocoon.xconf sitemap.xmap
               tools/src XConfToolTask.java
  Added:       src/java/org/apache/cocoon/components/search lucene.xpipe
               src/java/org/apache/cocoon/components/source xmldb.xpipe
               src/java/org/apache/cocoon/generation bsf.xmap php.xmap
                        servlet.xmap tidy.xmap velocity.xmap xindice.xmap
                        xmldb-generators.xpipe
               src/java/org/apache/cocoon/reading servlet.xmap
               src/java/org/apache/cocoon/samples/parentcm naming.xmap
                        naming.xpipe
               src/java/org/apache/cocoon/transformation naming.xmap
                        xt.xmap
  Removed:     src/java/org/apache/cocoon/generation bsf.sitemap
                        php.sitemap servlet.sitemap tidy.sitemap
                        velocity.sitemap xindice.pipeline xindice.sitemap
                        xmldb.pipeline
               src/java/org/apache/cocoon/reading servlet.sitemap
               src/java/org/apache/cocoon/samples/parentcm naming.pipeline
                        naming.sitemap
               src/java/org/apache/cocoon/serialization
                        HSSFSerializer.xconf fop.sitemap jfor.sitemap
                        svg.sitemap
               src/java/org/apache/cocoon/transformation naming.sitemap
                        xt.sitemap
  Log:
  rewrite xconf tool
  
  Revision  Changes    Path
  1.180     +71 -85    xml-cocoon2/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/build.xml,v
  retrieving revision 1.179
  retrieving revision 1.180
  diff -u -r1.179 -r1.180
  --- build.xml	7 Mar 2002 15:49:55 -0000	1.179
  +++ build.xml	9 Mar 2002 06:27:15 -0000	1.180
  @@ -385,10 +385,6 @@
                       property="servlet.present" 
                       classname="javax.servlet.http.HttpServlet"/>
   
  -    <class-available classpathref="classpath" 
  -                    property="servlet23.present" 
  -                    classname="javax.servlet.http.HttpServletRequestWrapper"/>
  -
       <class-available classpathref="classpath"
                       property="bsf.present" 
                       classname="com.ibm.bsf.BSFException"/>
  @@ -742,43 +738,43 @@
         
           <exclude name="**/poi/**"                  unless="poi.present"/>
           <exclude name="**/HSSFSerializer.java"     unless="poi.present"/>
  -        <exclude name="**/HSSFSerializer.xconf"    unless="poi.present"/>
  +        <exclude name="**/poi.x*"                  unless="poi.present"/>
           <exclude name="**/POIFSSerializer.java"    unless="poi.present"/>
                 
           <exclude name="**/Pizza.java"              unless="pizza.present"/>
   
           <exclude name="**/JSP*.java"               unless="servlet.present"/>
           <exclude name="**/Jsp*.java"               unless="servlet.present"/>
  -        <exclude name="**/servlet.sitemap"         unless="servlet.present"/>
  -        <exclude name="**/components/deli/DeliImpl.java" unless="servlet.present"/>
  +        <exclude name="**/servlet.x*"              unless="servlet.present"/>
  +        <exclude name="**/deli/DeliImpl.java"      unless="servlet.present"/>
           <exclude name="**/servlet/*.java"          unless="servlet.present"/>
           <exclude name="**/environment/http/*.java" unless="servlet.present"/>
           <exclude name="**/generation/StreamGenerator.java" unless="servlet.present"/>
   
  -        <exclude name="**/ScriptAction.java"      unless="bsf.present"/>
  -        <exclude name="**/ScriptGenerator.java"   unless="bsf.present"/>
  -        <exclude name="**/bsf.sitemap"            unless="bsf.present"/>
  +        <exclude name="**/ScriptAction.java"       unless="bsf.present"/>
  +        <exclude name="**/ScriptGenerator.java"    unless="bsf.present"/>
  +        <exclude name="**/bsf.x*"                  unless="bsf.present"/>
   
  -        <exclude name="**/components/deli/DeliImpl.java" unless="deli.present"/>
  -        <exclude name="**/deli.xconf"                    unless="deli.present"/>
  +        <exclude name="**/deli/DeliImpl.java"      unless="deli.present"/>
  +        <exclude name="**/deli.x*"                 unless="deli.present"/>
   
  -        <exclude name="**/HTMLGenerator.java"  unless="tidy.present"/>
  -        <exclude name="**/tidy.sitemap"        unless="tidy.present"/>
  +        <exclude name="**/HTMLGenerator.java"      unless="tidy.present"/>
  +        <exclude name="**/tidy.x*"                 unless="tidy.present"/>
   
           <exclude name="**/VelocityGenerator.java"  unless="velocity.present"/>
  -        <exclude name="**/velocity.sitemap"        unless="velocity.present"/>
  +        <exclude name="**/velocity.x*"             unless="velocity.present"/>
   
           <exclude name="**/SVG*.java"                                   unless="svg.present"/>
  -        <exclude name="**/svg.sitemap"                                 unless="svg.present"/>
  +        <exclude name="**/svg.x*"                                      unless="svg.present"/>
           <exclude name="**/components/transcoder/**.java"               unless="svg.present"/>
           <exclude name="**/components/url/Parsed**ProtocolHandler.java" unless="svg.present"/>
   
  -        <exclude name="**/FOP*"                unless="fop.present"/>
  -        <exclude name="**/renderer/*"          unless="fop.present"/>
  -        <exclude name="**/fop.sitemap"         unless="fop.present"/>
  +        <exclude name="**/FOP*"                    unless="fop.present"/>
  +        <exclude name="**/renderer/*"              unless="fop.present"/>
  +        <exclude name="**/fop.x*"                  unless="fop.present"/>
   
  -        <exclude name="**/XT*.java"            unless="xt.present"/>
  -        <exclude name="**/xt.sitemap"          unless="xt.present"/>
  +        <exclude name="**/XT*.java"                unless="xt.present"/>
  +        <exclude name="**/xt.x*"                   unless="xt.present"/>
   
           <exclude name="**/CompiledJavascript*" unless="rhino.compiler.present"/>
   
  @@ -786,12 +782,12 @@
           <exclude name="**/xsp/javascript/**"    unless="rhino.interpreter.present"/>
   
           <exclude name="**/components/resolver/ResolverImpl.java" unless="resolver.present"/>
  -        <exclude name="**/resolver.xconf"                        unless="resolver.present"/>
  +        <exclude name="**/resolver.x*"                           unless="resolver.present"/>
   
           <exclude name="**/Jstyle*"             unless="jstyle.present"/>
           
           <exclude name="**/Php*"                unless="php.present"/>
  -        <exclude name="**/php.sitemap"         unless="php.present"/>
  +        <exclude name="**/php.x*"              unless="php.present"/>
   
           <exclude name="**/Ora*.java"           unless="ora.driver.present"/>
   
  @@ -799,38 +795,33 @@
   
           <exclude name="**/Sendmail*.java"      unless="mail.present"/>
   
  -        <exclude name="**/LDAPTransformer*.java"   unless="naming.present"/>
  -        <exclude name="**/samples/parentcm/*"      unless="naming.present"/>
  -        <exclude name="**/naming.sitemap"          unless="naming.present"/>
  -        <exclude name="**/naming.pipeline"         unless="naming.present"/>
  -
  -        <exclude name="**/JSPEngineImplWLS.java"    unless="weblogic.present"/>
  -
  -        <exclude name="**/XMLDB*.java"         unless="xmldb.present"/>
  -        <exclude name="**/xmldb.sitemap"       unless="xmldb.present"/>
  -        <exclude name="**/xmldb.pipeline"      unless="xmldb.present"/>
  -        <exclude name="**/xmldb.xconf"         unless="xmldb.present"/>
  -        
  -        <exclude name="**/xindice.*"           unless="xindice.present"/>
  +        <exclude name="**/LDAPTransformer*"    unless="naming.present"/>
  +        <exclude name="**/samples/parentcm/*"  unless="naming.present"/>
  +        <exclude name="**/naming.x*"           unless="naming.present"/>
  +
  +        <exclude name="**/JSPEngineImplWLS.java"   unless="weblogic.present"/>
  +
  +        <exclude name="**/XMLDB*.java"        unless="xmldb.present"/>
  +        <exclude name="**/xmldb.x*"           unless="xmldb.present"/>
  +        <exclude name="**/xindice.x*"         unless="xindice.present"/>
   
  -        <exclude name="**/RTFSerializer.java"  unless="jfor.present"/>
  -        <exclude name="**/jfor.sitemap"        unless="jfor.present"/>
  +        <exclude name="**/RTFSerializer.java" unless="jfor.present"/>
  +        <exclude name="**/jfor.x*"            unless="jfor.present"/>
   
           <exclude name="**/xpath/XPathProcessorImpl*" unless="xpath.present"/>
  -
  -        <exclude name="**/Jaxen*"                    unless="jaxen.present"/>
  +        <exclude name="**/xpath/JaxenProcessorImpl*" unless="jaxen.present"/>
   
           <exclude name="**/components/hsqldb/ServerImpl.java" unless="hsqldb.present"/>
  -        <exclude name="**/hsqldb.xconf"                      unless="hsqldb.present"/>
  +        <exclude name="**/hsqldb.x*"                         unless="hsqldb.present"/>
   
           <exclude name="**/components/search/*"             unless="lucene.present"/>
           <exclude name="**/generation/SearchGenerator.java" unless="lucene.present"/>
  -        <exclude name="**/lucene.xconf"                    unless="lucene.present"/>
  +        <exclude name="**/lucene.x*"                       unless="lucene.present"/>
   
           <exclude name="**/components/store/Jisp*.java" unless="jisp.present"/>
  -        <exclude name="**/jisp.xconf"                  unless="jisp.present"/>
  -        <exclude name="**/MaybeUpload*.java"           unless="maybeupload.present"/>
  +        <exclude name="**/jisp.x*"                     unless="jisp.present"/>
   
  +        <exclude name="**/MaybeUpload*.java"           unless="maybeupload.present"/>
           <exclude name="**/http/RequestWrapper*.java"/>
           <exclude name="**/browser/*.x*"/>
         </fileset>
  @@ -881,7 +872,6 @@
           <include name="**/Manifest.mf"/>
           <include name="**/*.xsl"/>
           <include name="**/*.roles"/>
  -        <include name="**/*.xconf"/>
           <include name="**/*.xml"/>
           <include name="META-INF/**"/>
         </fileset>
  @@ -904,7 +894,6 @@
           <include name="**/Manifest.mf"/>
           <include name="**/*.xsl"/>
           <include name="**/*.roles"/>
  -        <include name="**/*.xconf"/>
           <include name="META-INF/**"/>
         </fileset>
       </copy>
  @@ -945,7 +934,6 @@
     <!-- Prepares the docs                                                   -->
     <!-- =================================================================== -->
     <target name="prepare-docs" depends="init">
  -
       <mkdir dir="${build.context}"/>
       <mkdir dir="${build.context}/images"/>
       <mkdir dir="${build.docs}"/>
  @@ -971,15 +959,17 @@
   
       <!-- Copy entity catalog and entities -->
       <copy todir="${build.context}/resources/entities" filtering="on">
  -      <fileset dir="${webapp.dir}/resources/entities"/>
  +      <fileset dir="${webapp.dir}/resources/entities">
  +        <include name="**"/>
  +        <exclude name="CatalogManager.properties"/>
  +      </fileset>
       </copy>
       <mkdir dir="${build.context}/WEB-INF/classes"/>
  -    <move todir="${build.context}/WEB-INF/classes">
  -      <fileset dir="${build.context}/resources/entities">
  +    <copy todir="${build.context}/WEB-INF/classes" filtering="on">
  +      <fileset dir="${webapp.dir}/resources/entities">
           <include name="CatalogManager.properties"/>
         </fileset>
  -    </move>
  -
  +    </copy>
     </target>
   
   
  @@ -1028,7 +1018,6 @@
           <pathelement location="${build.context}/WEB-INF/classes"/>
         </classpath>
       </java>
  -
     </target>
   
     <!-- =================================================================== -->
  @@ -1043,6 +1032,12 @@
         <fileset dir="${build.src}" includes="org/apache/cocoon/samples/**"/>
       </copy>
   
  +    <copy todir="${build.war}/WEB-INF/classes" filtering="on">
  +      <fileset dir="${webapp.dir}/resources/entities">
  +        <include name="CatalogManager.properties"/>
  +      </fileset>
  +    </copy>
  +
       <copy todir="${build.war}" filtering="on">
         <fileset dir="${webapp.dir}">
           <exclude name="**/*.gif"/>
  @@ -1050,6 +1045,7 @@
           <exclude name="**/*.png"/>
           <exclude name="**/i18n/**"/>
           <exclude name="**/db/*"/>
  +        <exclude name="**/CatalogManager.properties"/>
         </fileset>
       </copy>
   
  @@ -1071,52 +1067,46 @@
   
       <!-- correct the image references -->
       <replace dir="${build.war}/documentation/svg" token="context://images" value="context://documentation/images"/>
  -
     </target>
   
     <!-- =================================================================== -->
     <!-- Prepares the webapp directories                                     -->
     <!-- =================================================================== -->
     <target name="prepare-webapp" depends="copy-webapp">
  -      <!-- A task to change the sitemap. It is used to add optional components -->
  -      <taskdef name="sitemap-tool" classname="SitemapToolTask" 
  -          classpath="${tools.dir}/anttasks"/>
         <!-- A task to change the xconf. It is used to add optional components -->
         <taskdef name="xconf-tool" classname="XConfToolTask" 
             classpath="${tools.dir}/anttasks"/>
   
  -      <taskdef name="manifest-tool" classname="ManifestToolTask" 
  -          classpath="${tools.dir}/anttasks"/>
  -
  -      <!-- Invoke the SitemapToolTask to add optional entries -->
  -      <sitemap-tool directory="${build.src}"
  -                   extension="sitemap"
  -                   pipelineExtension="pipeline"
  -                   sitemap="${build.war}/sitemap.xmap"/>
  -
         <!-- Invoke the XConfTool to add optional entries -->
         <xconf-tool directory="${build.src}"
  -                 extension="xconf"
  -                 configuration="${build.war}/cocoon.xconf"/>
  +                  extension="xmap"
  +                  configuration="${build.war}/sitemap.xmap"/>
  +
  +      <xconf-tool directory="${build.src}"
  +                  extension="xpipe"
  +                  configuration="${build.war}/sitemap.xmap"/>
   
  +      <xconf-tool directory="${build.src}"
  +                  extension="xconf"
  +                  configuration="${build.war}/cocoon.xconf"/>
     </target>
   
     <!-- =================================================================== -->
     <!-- Prepares the webapp directories for scratchpad                      -->
     <!-- =================================================================== -->
     <target name="prepare-webapp-scratchpad" depends="copy-webapp" if="include.scratchpad.libs">
  -
  -      <!-- Invoke the SitemapToolTask to add optional entries -->
  -      <sitemap-tool directory="${build.scratchpad.src}"
  -                   extension="sitemap"
  -                   pipelineExtension="pipeline"
  -                   sitemap="${build.war}/sitemap.xmap"/>
  -
         <!-- Invoke the XConfTool to add optional entries -->
         <xconf-tool directory="${build.scratchpad.src}"
  -                 extension="xconf"
  -                 configuration="${build.war}/cocoon.xconf"/>
  +                  extension="xmap"
  +                  configuration="${build.war}/sitemap.xmap"/>
   
  +      <xconf-tool directory="${build.scratchpad.src}"
  +                  extension="xpipe"
  +                  configuration="${build.war}/sitemap.xmap"/>
  +
  +      <xconf-tool directory="${build.scratchpad.src}"
  +                  extension="xconf"
  +                  configuration="${build.war}/cocoon.xconf"/>
     </target>
   
     <!-- =================================================================== -->
  @@ -1156,14 +1146,6 @@
         </fileset>
       </copy>
   
  -    <mkdir dir="${build.war}/WEB-INF/classes"/>
  -
  -    <move todir="${build.war}/WEB-INF/classes">
  -      <fileset dir="${build.war}/resources/entities">
  -        <include name="CatalogManager.properties"/>
  -      </fileset>
  -    </move>
  -
       <copy file="${build.dir}/${name}.jar" tofile="${build.war}/WEB-INF/lib/${name}-${version}.jar"/>
     </target>
   
  @@ -1193,6 +1175,10 @@
     <!-- Creates the war file                                                -->
     <!-- =================================================================== -->
     <target name="webapp" depends="prepare-webapp, prepare-webapp-scratchpad, prepare-webapp-libs, prepare-scratchpad-libs, prepare-xsp" description="* Generates the war package">
  +    <!-- A task to create manifest for webapp. -->
  +    <taskdef name="manifest-tool" classname="ManifestToolTask" 
  +        classpath="${tools.dir}/anttasks"/>
  +
       <manifest-tool directory="${build.war}/WEB-INF/lib" manifest="${build.war}/WEB-INF/Manifest.mf"/>
       <jar jarfile="${build.dir}/${name}.war" basedir="${build.war}" includes="**" manifest="${build.war}/WEB-INF/Manifest.mf"/>
     </target>
  
  
  
  1.8       +6 -0      xml-cocoon2/src/java/org/apache/cocoon/components/deli/deli.xconf
  
  Index: deli.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/deli/deli.xconf,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- deli.xconf	7 Mar 2002 14:05:30 -0000	1.7
  +++ deli.xconf	9 Mar 2002 06:27:15 -0000	1.8
  @@ -1,6 +1,12 @@
  +<?xml version="1.0"?>
  +
  +<xconf xpath="/cocoon"
  +       unless="comment()[contains(., ' Deli support ')]">
  +
     <!-- Deli support -->
     <!-- Uncomment this section to enable DELI
     <deli class="org.apache.cocoon.components.deli.DeliImpl">
       <parameter name="deli-config-file" value="resources/deli/config/deliConfig.xml"/>
     </deli>
     -->
  +</xconf>
  
  
  
  1.2       +6 -1      xml-cocoon2/src/java/org/apache/cocoon/components/hsqldb/hsqldb.xconf
  
  Index: hsqldb.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/hsqldb/hsqldb.xconf,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- hsqldb.xconf	16 Jan 2002 10:39:22 -0000	1.1
  +++ hsqldb.xconf	9 Mar 2002 06:27:15 -0000	1.2
  @@ -1,4 +1,8 @@
  -<!-- HSQLDB Server for samples:
  +<?xml version="1.0"?>
  +
  +<xconf xpath="/cocoon" unless="hsqldb-server">
  +
  +  <!-- HSQLDB Server for samples:
       Comment this section out if you don't care about the samples.
           port   : number      port where the server is listening
           silent : true/false  display all queries
  @@ -11,3 +15,4 @@
        <parameter name="silent" value="true"/>
        <parameter name="trace" value="false"/>
     </hsqldb-server>
  +</xconf>
  
  
  
  1.4       +5 -0      xml-cocoon2/src/java/org/apache/cocoon/components/resolver/resolver.xconf
  
  Index: resolver.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/resolver/resolver.xconf,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- resolver.xconf	14 Feb 2002 15:47:54 -0000	1.3
  +++ resolver.xconf	9 Mar 2002 06:27:15 -0000	1.4
  @@ -1,3 +1,7 @@
  +<?xml version="1.0"?>
  +
  +<xconf xpath="/cocoon" unless="entity-resolver">
  +
     <!-- Entity resolution catalogs: *********************************************
       catalog:
       The default catalog is distributed at /resources/entities/catalog
  @@ -34,3 +38,4 @@
      <parameter name="catalog" value="/resources/entities/catalog"/>
      <parameter name="verbosity" value="1"/>
     </entity-resolver>
  +</xconf>
  
  
  
  1.2       +5 -0      xml-cocoon2/src/java/org/apache/cocoon/components/search/lucene.xconf
  
  Index: lucene.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/search/lucene.xconf,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- lucene.xconf	16 Jan 2002 11:12:54 -0000	1.1
  +++ lucene.xconf	9 Mar 2002 06:27:15 -0000	1.2
  @@ -1,3 +1,7 @@
  +<?xml version="1.0"?>
  +
  +<xconf xpath="/cocoon" unless="cocoon-indexer">
  +
     <!-- Search:
       These are the components that handle the search. 
       
  @@ -10,3 +14,4 @@
     <cocoon-searcher    logger="core.search.searcher"/>  
     <cocoon-crawler     logger="core.search.crawler"/>
     <lucene-xml-indexer logger="core.search.lucene"/>
  +</xconf>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/components/search/lucene.xpipe
  
  Index: lucene.xpipe
  ===================================================================
  <?xml version="1.0"?>
  
  <xpipe xpath="/sitemap/pipelines/pipeline[@id='optional']"
         unless="match[@pattern='search/**']">
  
      <!-- Mount search pages sitemap, for using indexing & searching -->
      <map:match pattern="search/**">
        <map:mount check-reload="yes" src="search/" uri-prefix="search"/>
      </map:match>
  </xpipe>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/components/source/xmldb.xpipe
  
  Index: xmldb.xpipe
  ===================================================================
  <?xml version="1.0"?>
  
  <xpipe xpath="/sitemap/pipelines/pipeline[@id='optional']"
         unless="match[@pattern='xmldb/**']">
  
      <!-- ======================= XML:DB ============================== -->
      <map:match pattern="xmldb/**">
        <map:match type="request-parameter" pattern="xpath">
          <map:generate src="xmldb:xindice://localhost:4080/db/{../1}#{1}"/>
          <map:serialize type="xml"/>
        </map:match>
  
        <map:generate src="xmldb:xindice://localhost:4080/db/{1}"/>
        <map:serialize type="xml"/>
      </map:match>
  </xpipe>
  
  
  1.2       +6 -0      xml-cocoon2/src/java/org/apache/cocoon/components/store/jisp.xconf
  
  Index: jisp.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/store/jisp.xconf,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jisp.xconf	7 Feb 2002 04:17:46 -0000	1.1
  +++ jisp.xconf	9 Mar 2002 06:27:15 -0000	1.2
  @@ -1,3 +1,8 @@
  +<?xml version="1.0"?>
  +
  +<xconf xpath="/cocoon"
  +       unless="comment()[contains(., 'org.apache.cocoon.components.store.JispFilesystemStore')]">
  +
     <!-- Persistent store for the cache. Two store implementations to choose
          from:
            * FilesystemStore: Simple. Dependable. Thorougly tested.
  @@ -19,3 +24,4 @@
       <parameter name="order" value="1701"/>
     </cache-persistent>
     -->
  +</xconf>
  
  
  
  1.4       +4 -9      xml-cocoon2/src/java/org/apache/cocoon/generation/xmldb.xconf
  
  Index: xmldb.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/generation/xmldb.xconf,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- xmldb.xconf	23 Feb 2002 16:47:39 -0000	1.3
  +++ xmldb.xconf	9 Mar 2002 06:27:15 -0000	1.4
  @@ -1,11 +1,6 @@
  -  <!-- Source Handler:
  -    The source handler adds special url protocols to the system, they are
  -    then available inside Cocoon, e.g. as a source argument for one of the
  -    sitemap components.
  -  -->
  -  <source-handler logger="core.source-handler">
  -    <!-- file protocol : this is a WriteableSource -->
  -    <protocol name="file" class="org.apache.cocoon.components.source.FileSourceFactory"/>
  +<?xml version="1.0"?>
  +
  +<xconf xpath="/cocoon/source-handler" unless="protocol[@name='xmldb']">
   
       <!-- xmldb pseudo protocol -->
       <protocol name="xmldb" class="org.apache.cocoon.components.source.XMLDBSourceFactory">
  @@ -13,4 +8,4 @@
         <driver type="xindice" class="org.apache.xindice.client.xmldb.DatabaseImpl"/>
         <!-- Add here other XML:DB compliant databases drivers -->
       </protocol>
  -  </source-handler>
  +</xconf>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/bsf.xmap
  
  Index: bsf.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/generators"
        unless="generator[@name='script']">
      <map:generator name="script" src="org.apache.cocoon.generation.ScriptGenerator" label="content,data"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/php.xmap
  
  Index: php.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/generators"
        unless="generator[@name='php']">
      <map:generator name="php" src="org.apache.cocoon.generation.PhpGenerator" label="content,data"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/servlet.xmap
  
  Index: servlet.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/generators"
        unless="generator[@name='jsp']">
      <map:generator name="jsp"
                     src="org.apache.cocoon.generation.JspGenerator"
                     label="content,data"/>
      <map:generator name="stream"
                     src="org.apache.cocoon.generation.StreamGenerator"
                     label="content,data"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/tidy.xmap
  
  Index: tidy.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/generators"
        unless="generator[@name='html']">
      <map:generator name="html"
                     src="org.apache.cocoon.generation.HTMLGenerator"
                     label="content,data"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/velocity.xmap
  
  Index: velocity.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/generators"
        unless="generator[@name='velocity']">
      <map:generator name="velocity"
                     src="org.apache.cocoon.generation.VelocityGenerator"
                     label="content,data"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/xindice.xmap
  
  Index: xindice.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/generators"
        unless="generator[@name='xmldb']">
      <map:generator name="xmldb" src="org.apache.cocoon.generation.XMLDBGenerator" label="content,data">
        <driver>org.apache.xindice.client.xmldb.DatabaseImpl</driver>
        <base>xmldb:xindice:///db/</base>
      </map:generator>
      <map:generator name="xmldbcollection" src="org.apache.cocoon.generation.XMLDBCollectionGenerator" label="content,data">
        <driver>org.apache.xindice.client.xmldb.DatabaseImpl</driver>
        <base>xmldb:xindice:///db/</base>
      </map:generator>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/generation/xmldb-generators.xpipe
  
  Index: xmldb-generators.xpipe
  ===================================================================
  <?xml version="1.0"?>
  
  <xpipe xpath="/sitemap/pipelines/pipeline[@id='optional']"
         unless="match[@pattern='xmldb-generator/db/**/']">
  
      <!-- =================== XML:DB Generators ========================= -->
      <!-- BEWARE: the following examples use the unmaintained XML:DB      -->
      <!-- generators, going to be deprecated soon.                        -->
      <!-- You might want  to use the XML:DB pseudo protocol instead.      -->
      <map:match pattern="xmldb-generator/db/**/">
        <map:generate type="xmldbcollection" src="/{1}"/>
        <map:serialize type="xml"/>
      </map:match>
  
      <map:match pattern="xmldb-generator/db/**">
        <map:generate type="xmldb" src="/{1}"/>
        <map:serialize type="xml"/>
      </map:match>
  </xpipe>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/reading/servlet.xmap
  
  Index: servlet.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/readers"
        unless="reader[@name='jsp']">
      <map:reader name="jsp" src="org.apache.cocoon.reading.JSPReader"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/samples/parentcm/naming.xmap
  
  Index: naming.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/generators"
        unless="generator[@name='parentcm']">
      <map:generator name="parentcm" src="org.apache.cocoon.samples.parentcm.Generator"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/samples/parentcm/naming.xpipe
  
  Index: naming.xpipe
  ===================================================================
  <?xml version="1.0"?>
  
  <xpipe xpath="/sitemap/pipelines/pipeline[@id='optional']"
         unless="match[@pattern='parentcm']">
  
      <!-- =============== Parent Component Manager ====================== -->
      <map:match pattern="parentcm">
        <map:generate type="parentcm" src="{1}"/>
        <map:transform src="stylesheets/parentcm/time.xsl"/>
        <map:serialize/>
      </map:match>
  </xpipe>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/transformation/naming.xmap
  
  Index: naming.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/transformers"
        unless="transformer[@name='ldap']">
      <map:transformer name="ldap" src="org.apache.cocoon.transformation.LDAPTransformer"/>
  </xmap>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/transformation/xt.xmap
  
  Index: xt.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <xmap xpath="/sitemap/components/transformers"
        unless="transformer[@name='xt']">
      <map:transformer name="xt" src="org.apache.cocoon.transformation.XTTransformer"/>
  </xmap>
  
  
  
  1.36      +11 -1     xml-cocoon2/src/webapp/cocoon.xconf
  
  Index: cocoon.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/cocoon.xconf,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- cocoon.xconf	5 Mar 2002 13:11:54 -0000	1.35
  +++ cocoon.xconf	9 Mar 2002 06:27:16 -0000	1.36
  @@ -160,6 +160,17 @@
       <!-- Add here protocol factories for your own protocols -->
     </url-factory>
   
  +  <!-- Source Handler:
  +    The source handler adds special url protocols to the system, they are
  +    then available inside Cocoon, e.g. as a source argument for one of the
  +    sitemap components.
  +  -->
  +  <source-handler logger="core.source-handler">
  +    <!-- file protocol : this is a WriteableSource -->
  +    <protocol name="file" class="org.apache.cocoon.components.source.FileSourceFactory"/>
  +
  +  </source-handler>
  +
     <!-- Program Generator:
       The ProgamGenerator builds programs from a XML document written in a
       MarkupLanguage.
  @@ -337,7 +348,6 @@
             <parameter name="uri" value="http://apache.org/xsp/soap/3.0"/>
             <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/soap.xsl"/>
           </builtin-logicsheet>
  -
         </target-language>
   
         <target-language name="js">
  
  
  
  1.38      +102 -107  xml-cocoon2/src/webapp/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/sitemap.xmap,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- sitemap.xmap	7 Mar 2002 21:02:34 -0000	1.37
  +++ sitemap.xmap	9 Mar 2002 06:27:16 -0000	1.38
  @@ -103,8 +103,6 @@
     reader. They are useful for delivering binary content like images.
   -->
     <map:readers default="resource">
  -   <map:reader name="jsp"      logger="sitemap.reader.jsp"
  -               src="org.apache.cocoon.reading.JSPReader"/>
     </map:readers>
   
   <!--
  @@ -415,122 +413,91 @@
   
    <map:pipelines>
   
  -  <!-- Utility for viewing source xml or html -->
  -  <map:pipeline>
  -   <!-- sample use of regexp equivalent to "**.source" using wildcard
  -        this also shows the '\{' notation to escape sitemap values substitution -->
  -   <map:match pattern="(.*)\.s\{1}ource" type="regexp">
  -    <map:generate src="cocoon:/{1}" />
  -    <map:transform src="stylesheets/simple-xml2html.xsl"/>
  -    <map:serialize/>
  -   </map:match>
  -  </map:pipeline>
  -
     <!-- sub-sitemap example pipeline -->
     <map:pipeline>
  -   <map:match pattern="sub/**">
  -
  -     <!-- matches all URIs starting with "sub". Have a look at
  -     the docs for this matcher component. 
  -
  -     "*" means, anything that does not contain a path separator,
  -     i.e. slash "/", "**" means anything including path
  -     separators. What is matched by the wildcard is put into sitemap
  -     variables.
  -
  -     Sitemap variables are organized like a stack, a new set is placed
  -     on top of the already present ones. Any existing variable can be
  -     accessed through a simplified path expression. These simplified
  -     path expression may only use any number of "../" to refer to the
  -     previous levels.
  -
  -     If a component completes successfully, it sets some sitemap
  -     variables. Their scope is only within the element of that
  -     component. Thus they can only be accessed by nested components.
  -     -->
  -    <map:mount uri-prefix="sub" src="sub/sitemap.xmap" check-reload="yes"/>
  -    <!--
  -    Sitemaps may be organized hierarchically. Here such a subsitemap
  -    is "mounted" (think: unix filesystems) to be responsible for all
  -    URIs starting with "sub/". The file itself is by
  -    coincidence located in a subdirectory named "sub/" as
  -    well. There's no need to do that but it is good practice. The
  -    check-reload attributes specifies, if changed to the subsitemap
  -    should result in cocoon rereading the subsitemap or if they are to
  -    be ignored. See docs for suggestions on this.
  -
  -    Note here, that all component declarations are inherited to a
  -    subsitemap.
  -    -->
  -   </map:match>
  -
  -   <map:handle-errors>
  -    <!-- 
  -      This pipeline specifies a different error handler.
  -    -->
  -    <map:transform src="stylesheets/system/error2html.xsl"/>
  -    <map:serialize status-code="500"/>
  -   </map:handle-errors>
  -  </map:pipeline>
  -
  -  <!-- protected webapp example pipeline -->
  -  <map:pipeline>
  -   <map:match pattern="protected/**">
  -    <map:mount uri-prefix="protected" src="protected/" check-reload="yes"/>
  -   </map:match>
  -  </map:pipeline>
  +    <!-- Matcher: -->
  +    <map:match pattern="sub/**">
  +      <!--
  +        matches all URIs starting with "sub". Have a look at
  +        the docs for this matcher component. 
  +        
  +        "*" means, anything that does not contain a path separator,
  +        i.e. slash "/", "**" means anything including path
  +        separators. What is matched by the wildcard is put into sitemap
  +        variables.
  +        
  +        Sitemap variables are organized like a stack, a new set is placed
  +        on top of the already present ones. Any existing variable can be
  +        accessed through a simplified path expression. These simplified
  +        path expression may only use any number of "../" to refer to the
  +        previous levels.
  +        
  +        If a component completes successfully, it sets some sitemap
  +        variables. Their scope is only within the element of that
  +        component. Thus they can only be accessed by nested components.
  +      -->
  +        
  +      <!-- Mount: -->
  +      <map:mount uri-prefix="sub" src="sub/sitemap.xmap" check-reload="yes"/>
  +      <!--
  +        Sitemaps may be organized hierarchically. Here such a subsitemap
  +        is "mounted" (think: unix filesystems) to be responsible for all
  +        URIs starting with "sub/". The file itself is by
  +        coincidence located in a subdirectory named "sub/" as
  +        well. There's no need to do that but it is good practice. The
  +        check-reload attributes specifies, if changed to the subsitemap
  +        should result in cocoon rereading the subsitemap or if they are to
  +        be ignored. See docs for suggestions on this.
  +      
  +        Note here, that all component declarations are inherited to a
  +        subsitemap.
  +      -->
  +    </map:match>
   
  -  <!-- i18n examples pipeline -->
  -  <map:pipeline>
  -   <map:match pattern="i18n/**">
  -    <map:mount uri-prefix="i18n" src="i18n/" check-reload="yes"/>
  -   </map:match>
  +    <map:handle-errors>
  +      <!-- 
  +        This pipeline specifies a different error handler.
  +      -->
  +      <map:transform src="stylesheets/system/error2html.xsl"/>
  +      <map:serialize status-code="500"/>
  +    </map:handle-errors>
     </map:pipeline>
   
     <!-- Cocoon documentation pipeline -->
     <map:pipeline>
  -   <map:match pattern="documents/index">
  -     <map:redirect-to uri="index.html"/>
  -     <!--
  -       You may direct a client to a more appropriate URI by the above
  -       command. The above results in a redirect response to the
  -       client. By redirecting to a ressource it would be handled by
  -       cocoon internally.
  -
  -       Since pipelines work on a first match basis, the above wins the
  -       request although the match below would match as well.
  -     -->
  -   </map:match>
  -   <map:match pattern="documents/**">
  -     <map:mount uri-prefix="documents" src="documentation/" check-reload="yes"/>
  -   </map:match>
  -   <map:match pattern="tutorial/**">
  -     <map:mount uri-prefix="tutorial/" src="tutorial/" check-reload="yes"/>
  -   </map:match>
  -  </map:pipeline>
  +    <map:match pattern="documents/index">
  +      <map:redirect-to uri="index.html"/>
  +      <!--
  +        You may direct a client to a more appropriate URI by the above
  +        command. The above results in a redirect response to the
  +        client. By redirecting to a ressource it would be handled by
  +        cocoon internally.
   
  -
  -  <!-- mount search pages, for using indexing&searching
  -  -->
  -  <map:pipeline>
  -    <map:match pattern="search/**">
  -      <map:mount uri-prefix="search" src="search/" check-reload="yes"/>
  +        Since pipelines work on a first match basis, the above wins the
  +        request although the match below would match as well.
  +      -->
  +    </map:match>
  +    <map:match pattern="documents/**">
  +      <map:mount uri-prefix="documents" src="documentation/" check-reload="yes"/>
  +    </map:match>
  +    <map:match pattern="tutorial/**">
  +      <map:mount uri-prefix="tutorial/" src="tutorial/" check-reload="yes"/>
       </map:match>
     </map:pipeline>
   
  -  <!-- mount other sample pages
  -  -->
  -  <map:pipeline>
  -    <map:match pattern="samples/*/**">
  -      <map:mount uri-prefix="samples/{1}" src="samples/{1}/" check-reload="yes"/>
  -    </map:match>   
  +  <map:pipeline id="optional">
  +    <!-- Below goes entries added by Cocoon build system -->
  +  </map:pipeline>
  +
  +  <map:pipeline internal-only="true" id="optional-internal">
  +    <!-- Below goes entries added by Cocoon build system -->
     </map:pipeline>
     
     <!-- "automount" setup
  -  This causes directories added under "mount"
  -  (even with Cocoon already running) to be activated automagically
  -  if they contain a sitemap.xmap, without having to modify the main
  -  sitemap.xmap
  +    This causes directories added under "mount"
  +    (even with Cocoon already running) to be activated automagically
  +    if they contain a sitemap.xmap, without having to modify the main
  +    sitemap.xmap
     -->
     <map:pipeline>
       <map:match pattern="mount/*/**">
  @@ -542,10 +509,38 @@
       </map:match>
     </map:pipeline>
   
  +  <!-- pipeline mounting samples sitemaps -->
  +  <map:pipeline>
  +    <!-- Utility for viewing source xml or html -->
  +    <!-- sample use of regexp equivalent to "**.source" using wildcard
  +         this also shows the '\{' notation to escape sitemap values substitution -->
  +    <map:match pattern="(.*)\.s\{1}ource" type="regexp">
  +      <map:generate src="cocoon:/{1}" />
  +      <map:transform src="stylesheets/simple-xml2html.xsl"/>
  +      <map:serialize/>
  +    </map:match>
  +
  +    <!-- protected webapp example pipeline -->
  +    <map:match pattern="protected/**">
  +      <map:mount uri-prefix="protected" src="protected/" check-reload="yes"/>
  +    </map:match>
  +
  +    <!-- i18n examples sitemap -->
  +    <map:match pattern="i18n/**">
  +      <map:mount uri-prefix="i18n" src="i18n/" check-reload="yes"/>
  +    </map:match>
  +
  +    <!-- mount other sample pages -->
  +    <map:match pattern="samples/*/**">
  +      <map:mount uri-prefix="samples/{1}" src="samples/{1}/" check-reload="yes"/>
  +    </map:match>   
  +  </map:pipeline>
  +
  +  <!-- main samples pipeline -->
     <map:pipeline>   
  -   <map:match pattern="">
  -    <map:redirect-to uri="welcome"/>
  -   </map:match>
  +    <map:match pattern="">
  +      <map:redirect-to uri="welcome"/>
  +    </map:match>
   
      <map:match pattern="welcome">
       <map:generate src="docs/samples/samples.xml"/>
  
  
  
  1.2       +94 -91    xml-cocoon2/tools/src/XConfToolTask.java
  
  Index: XConfToolTask.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/tools/src/XConfToolTask.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XConfToolTask.java	25 Jan 2002 02:31:53 -0000	1.1
  +++ XConfToolTask.java	9 Mar 2002 06:27:16 -0000	1.2
  @@ -6,18 +6,38 @@
    * the LICENSE file.                                                         *
    *****************************************************************************/
   
  -import java.io.*;
  -import java.util.*;
  -import org.apache.tools.ant.*;
  -import org.apache.tools.ant.taskdefs.*;
  -import org.apache.tools.ant.types.*;
  +import org.apache.tools.ant.BuildException;
  +import org.apache.tools.ant.Task;
  +import org.apache.xpath.XPathAPI;
  +import org.w3c.dom.Document;
  +import org.w3c.dom.Element;
  +import org.w3c.dom.NodeList;
  +import org.w3c.dom.Node;
  +import org.xml.sax.SAXException;
  +
  +import javax.xml.parsers.DocumentBuilderFactory;
  +import javax.xml.parsers.DocumentBuilder;
  +import javax.xml.parsers.ParserConfigurationException;
  +import javax.xml.transform.sax.SAXTransformerFactory;
  +import javax.xml.transform.TransformerFactory;
  +import javax.xml.transform.Transformer;
  +import javax.xml.transform.Source;
  +import javax.xml.transform.Result;
  +import javax.xml.transform.TransformerException;
  +import javax.xml.transform.dom.DOMSource;
  +import javax.xml.transform.stream.StreamResult;
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.FileWriter;
  +import java.io.IOException;
   
   /**
  - * Add components to the cocoon.xconf
  - * This is only a ugly first shot
  + * Add components to the cocoon.xconf.
  + * This is an ugly second shot.
    *
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
  - * @version CVS $Revision: 1.1 $ $Date: 2002/01/25 02:31:53 $
  + * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
  + * @version CVS $Revision: 1.2 $ $Date: 2002/03/09 06:27:16 $
    */
   
   public final class XConfToolTask extends Task {
  @@ -39,10 +59,10 @@
       }
   
       public void execute() throws BuildException {
  +
           if (this.configuration == null) {
               throw new BuildException("configuration attribute is required", location);
           }
  -
           if (this.extension == null) {
               throw new BuildException("extension attribute is required", location);
           }
  @@ -51,8 +71,28 @@
           }
   
           try {
  +            final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
  +            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
  +            final String file = new File(this.configuration).getCanonicalPath();
  +
  +            // load xml
  +            System.out.println("Reading: " + file);
  +            final Document configuration = builder.parse(file);
  +
               // process recursive
  -            this.process(new File(this.directory), this.extension, this.configuration);
  +            if (process(builder, configuration, new File(this.directory), this.extension)) {
  +                // save xml
  +                System.out.println("Writing: " + file);
  +                transformer.transform(new DOMSource(configuration), new StreamResult(file));
  +            } else {
  +                System.out.println("No Changes: " + file);
  +            }
  +        } catch (TransformerException e) {
  +            throw new BuildException("TransformerException: " + e);
  +        } catch (SAXException e) {
  +            throw new BuildException("SAXException: " + e);
  +        } catch (ParserConfigurationException e) {
  +            throw new BuildException("ParserConfigurationException: " + e);
           } catch (IOException ioe) {
               throw new BuildException("IOException: " + ioe);
           }
  @@ -61,98 +101,61 @@
       /**
        * Scan recursive
        */
  -    private void process(final File   directoryFile,
  -                         final String ext,
  -                         final String configurationLocation)
  -    throws IOException, BuildException {
  +    private boolean process(final DocumentBuilder builder,
  +                         final Document configuration,
  +                         final File   directoryFile,
  +                         final String ext)
  +    throws IOException, BuildException, ParserConfigurationException, TransformerException, SAXException {
   
  +        boolean hasChanged = false;
           final File[] files = directoryFile.listFiles();
  -
           for(int i = 0; i < files.length; i++) {
  -
  -            if (files[i].isDirectory() == true) {
  -                this.process(files[i], ext, configurationLocation);
  -            } else {
  -
  -                if (files[i].getName().endsWith("."+ext) == true) {
  -                    System.out.println("Reading: " + files[i].getAbsolutePath());
  -                    final String newComponent = this.load(files[i].getAbsolutePath());
  -
  -                    this.add(configurationLocation,
  -                             newComponent);
  -                }
  -            }
  -        }
  -    }
  -
  -    /**
  -     * Add entry to sitemap
  -     */
  -    private void add(final String configurationLocation,
  -                     final String newComponent)
  -    throws IOException {
  -        final String data = load( configurationLocation );
  -
  -        // first search if component already present:
  -        if ( data.indexOf( newComponent ) == -1 ) {
  -            int pos = data.indexOf( "<cocoon" );
  -            if (pos != -1) {
  -                pos = data.indexOf( ">", pos);
  -
  -                if (pos != -1) {
  -                    StringBuffer buffer = new StringBuffer( data.substring( 0, pos+1 ) )
  -                                .append( "\n\n" )
  -                                .append( newComponent )
  -                                .append( data.substring( pos+1 ) );
  -                    this.save( configurationLocation, buffer.toString() );
  +            if (files[i].isDirectory()) {
  +                hasChanged |= process(builder, configuration, files[i], ext);
  +            } else if (files[i].getName().endsWith("." + ext)) {
  +                String file = files[i].getCanonicalPath();
  +                try {
  +                    hasChanged |= add(configuration, builder.parse(file), file);
  +                } catch (SAXException e) {
  +                    System.out.println("Ignoring: " + file + "\n(not a valid XML)");
                   }
               }
           }
   
  +        return hasChanged;
       }
   
       /**
  -     * Load a file and return the content as a string.
  +     * Add entry to cocoon.xconf
        */
  -    public String load( String filename )
  -    throws IOException {
  -        FileInputStream fis;
  -
  -        fis = new FileInputStream( filename );
  -        int available;
  -        byte[] data = null;
  -        byte[] tempData;
  -        byte[] copyData;
  -        do
  -        {
  -            available = 1024;
  -            tempData = new byte[available];
  -            available = fis.read( tempData, 0, available );
  -            if ( available > 0 )
  -            {
  -                copyData = new byte[( data == null ? 0 : data.length ) + available];
  -                if ( data != null )
  -                {
  -                    System.arraycopy( data, 0, copyData, 0, data.length );
  -                }
  -                System.arraycopy( tempData, 0, copyData, ( data == null ? 0 : data.length ), available );
  -                data = copyData;
  -            }
  -        } while ( available > 0 );
  -        fis.close();
  -
  -        return ( data != null ? new String( data ) : "" );
  -    }
  -
  -    /**
  -     * Save the string to a file
  -     */
  -    public void save( String filename, String data )
  -    throws IOException
  +    private boolean add(final Document configuration,
  +                     final Document component,
  +                     String file)
  +            throws TransformerException, IOException
       {
  -        FileWriter fw = new FileWriter( filename );
  -        fw.write( data );
  -        fw.close();
  +        // Get Node
  +        String xpath = component.getDocumentElement().getAttribute("xpath");
  +        NodeList configurationNodes = XPathAPI.selectNodeList(configuration, xpath);
  +        if (configurationNodes.getLength() != 1) {
  +            throw new IOException("XPath (" + xpath + ") returned not one node, but "
  +                    + configurationNodes.getLength() + " nodes");
  +        }
  +        Node configurationNode = configurationNodes.item(0);
  +
  +        // Test
  +        String test = component.getDocumentElement().getAttribute("unless");
  +        if (test != null && test.length() > 0 &&
  +                XPathAPI.selectNodeList(configurationNode, test).getLength() != 0) {
  +            System.out.println("Skipping: " + file);
  +            return false;
  +        } else {
  +            // Apply
  +            System.out.println("Processing: " + file);
  +            NodeList componentNodes = component.getDocumentElement().getChildNodes();
  +            for (int i = 0; i < componentNodes.getLength(); i++ ){
  +                configurationNode.appendChild(configuration.importNode(componentNodes.item(i), true));
  +            }
  +            return true;
  +        }
       }
  -
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org