cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dani...@apache.org
Subject svn commit: r374865 - in /cocoon/trunk/cocoon-blocks-fw: cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/container/ cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/te...
Date Sat, 04 Feb 2006 13:26:24 GMT
Author: danielf
Date: Sat Feb  4 05:26:06 2006
New Revision: 374865

URL: http://svn.apache.org/viewcvs?rev=374865&view=rev
Log:
Changed from dependency based component lookup to global component registry (https://issues.apache.org/jira/browse/COCOON-1764).
Updated tests and samples to reflect that there is no need to declare component dependencies
in block.xml.

Added:
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistry.java
  (with props)
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistryImpl.java
  (with props)
Removed:
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/InterBlockServiceManager.java
Modified:
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockManager.java
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksManager.java
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/container/ECMBlockServiceManager.java
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test1/META-INF/block.xml
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test2/META-INF/block.xml
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test3/META-INF/block.xml
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test1/META-INF/block.xml
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test2/META-INF/block.xml
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test3/META-INF/block.xml

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockManager.java?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockManager.java
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockManager.java
Sat Feb  4 05:26:06 2006
@@ -52,7 +52,7 @@
     private Servlet blockServlet;
     private BlockWiring blockWiring;
     private BlockContext blockContext;
-    private Blocks blocks;
+    private ServiceManagerRegistry serviceManagerRegistry;
 
     public void enableLogging(Logger logger) {
         this.logger = logger;
@@ -67,11 +67,8 @@
         return this.logger;
     }
 
-    // FIXME The InterBlockServiceManager need access to the BlocksManager,
-    // it should preferably just need to access something more component
-    // handling specific.
-    public void setBlocks(Blocks blocks) {
-        this.blocks = blocks;
+    public void setServiceManagerRegistry(ServiceManagerRegistry serviceManagerRegistry)
{
+        this.serviceManagerRegistry = serviceManagerRegistry;
     }
 
     public void init(ServletConfig servletConfig) throws ServletException {
@@ -95,10 +92,6 @@
         ServletConfig blockServletConfig =
             new ServletConfigurationWrapper(this.getServletConfig(), this.blockContext);
 
-        // Create a service manager for getting components from other blocks
-        ServiceManager topServiceManager = new InterBlockServiceManager(this.blockWiring,
this.blocks);
-        ((InterBlockServiceManager)topServiceManager).enableLogging(this.getLogger());
-
         // Set up the component manager of the block
         try {
             // FIXME make the component manager class configurable
@@ -114,7 +107,7 @@
             LifecycleHelper.setupComponent(this.serviceManager,
                     this.getLogger(),
                     null,
-                    topServiceManager,
+                    this.serviceManagerRegistry,
                     this.blockWiring.getComponentConfiguration());
         } catch (Exception e) {
             e.printStackTrace();

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksManager.java?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksManager.java
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksManager.java
Sat Feb  4 05:26:06 2006
@@ -65,6 +65,7 @@
     private HashMap mountedBlocks = new HashMap();
     private Logger logger;
     private ClassLoader classLoader;
+    private ServiceManagerRegistry serviceManagerRegistry = new ServiceManagerRegistryImpl();
 
     public void init(ServletConfig servletConfig) throws ServletException {
         super.init(servletConfig);
@@ -151,7 +152,7 @@
                     " id=" + id +
                     " location=" + location);
             BlockManager blockManager = new BlockManager();
-            blockManager.setBlocks(this);
+            blockManager.setServiceManagerRegistry(this.serviceManagerRegistry);
             try {
                 LifecycleHelper.setupComponent(blockManager,
                         this.getLogger(),

Added: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistry.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistry.java?rev=374865&view=auto
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistry.java
(added)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistry.java
Sat Feb  4 05:26:06 2006
@@ -0,0 +1,40 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.blocks;
+
+import org.apache.avalon.framework.service.ServiceManager;
+
+/**
+ * Interface for ditributed service management.
+ * 
+ * WARNING: It is rather specific for the ECM way of managing component and will probably
+ * be replaced with a more OSGi friendly strategy.
+ * 
+ * In ECM the service manager contains component handlers while the OSGi service registry
+ * contains objects or factories. I didn't find any nice way to combine these strategies
in
+ * one interface.
+ * 
+ * @version $Id$
+ */
+public interface ServiceManagerRegistry extends ServiceManager {
+    
+    /**
+     * Register what service manager that contains the component bound to a certain role
+     * @param role the component role
+     * @param manager the service manager containing the component
+     */
+    public void registerServiceManager(String role, ServiceManager manager);
+}

Propchange: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistryImpl.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistryImpl.java?rev=374865&view=auto
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistryImpl.java
(added)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistryImpl.java
Sat Feb  4 05:26:06 2006
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.blocks;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+
+/**
+ * @version $Id$
+ */
+public class ServiceManagerRegistryImpl implements ServiceManagerRegistry {
+
+    private Map serviceManagerMapping = Collections.synchronizedMap(new HashMap());
+    
+    /* (non-Javadoc)
+     * @see org.apache.cocoon.blocks.ServiceManagerRegistry#registerServiceManager(java.lang.String,
org.apache.avalon.framework.service.ServiceManager)
+     */
+    public void registerServiceManager(String role, ServiceManager manager) {
+        this.serviceManagerMapping.put(role, manager);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.avalon.framework.service.ServiceManager#lookup(java.lang.String)
+     */
+    public Object lookup(String role) throws ServiceException {
+        ServiceManager manager = (ServiceManager) this.serviceManagerMapping.get(role);
+        if (manager == null) {
+            throw new ServiceException(role, "Could not find any manager in connected blocks
that contains the role");
+        }
+        return manager.lookup(role);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.avalon.framework.service.ServiceManager#hasService(java.lang.String)
+     */
+    public boolean hasService(String role) {
+        ServiceManager manager = (ServiceManager) this.serviceManagerMapping.get(role);
+        return manager != null && manager.hasService(role);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.avalon.framework.service.ServiceManager#release(java.lang.Object)
+     */
+    public void release(Object role) {
+        ServiceManager manager = (ServiceManager) this.serviceManagerMapping.get(role);
+        if (manager != null)
+            manager.release(role);
+    }
+
+}

Propchange: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ServiceManagerRegistryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/container/ECMBlockServiceManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/container/ECMBlockServiceManager.java?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/container/ECMBlockServiceManager.java
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/container/ECMBlockServiceManager.java
Sat Feb  4 05:26:06 2006
@@ -30,7 +30,9 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.cocoon.blocks.BlockConstants;
+import org.apache.cocoon.blocks.ServiceManagerRegistry;
 import org.apache.cocoon.blocks.util.CoreUtil;
+import org.apache.cocoon.components.ComponentInfo;
 import org.apache.cocoon.components.LifecycleHelper;
 import org.apache.cocoon.components.container.CocoonServiceManager;
 import org.apache.cocoon.components.source.impl.ContextSourceFactory;
@@ -56,6 +58,7 @@
     Configuration configuration;
     ServiceManager parentServiceManager;
     ServiceManager serviceManager;
+    ServiceManagerRegistry serviceManagerRegistry;
     
     // Wiring
 
@@ -75,6 +78,7 @@
 
     public void service(ServiceManager parentServiceManager) throws ServiceException {
         this.parentServiceManager = parentServiceManager;
+        this.serviceManagerRegistry = (ServiceManagerRegistry) parentServiceManager;
     }
 
     public void initialize() throws Exception {
@@ -140,8 +144,8 @@
         // The source resolver must be defined in this service
         // manager, otherwise the root path will be the one from the
         // parent manager, we add a resolver to get it right. If the
-        // components section contain includes the CoreComponentManager
-        // use the location of the configuration an the parent SourceResolver
+        // components section contain the CoreComponentManager, use the
+        // location of the configuration and the parent SourceResolver
         // for resolving the include.
         DefaultConfiguration sourceManagerConf =
             new DefaultConfiguration("components", confLocation);
@@ -166,12 +170,35 @@
         this.serviceManager =
             sourceResolverSM;
         
-        // Create a service manager with the exposed components of the block
+        // Create a service manager with the exposed components of the block and register
+        // the roles in the global registry
         if (this.configuration != null) {
             DefaultConfiguration componentConf =
                 new DefaultConfiguration("components", confLocation);
             componentConf.addAll(this.configuration);
-            this.serviceManager = new CocoonServiceManager(this.serviceManager);
+            this.serviceManager =
+                new CocoonServiceManager(this.serviceManager) {
+
+                    /* (non-Javadoc)
+                     * @see org.apache.cocoon.components.container.CocoonServiceManager#addComponent(java.lang.String,
java.lang.String, org.apache.avalon.framework.configuration.Configuration, org.apache.cocoon.components.ComponentInfo)
+                     */
+                    public void addComponent(String role, String className, Configuration
config, ComponentInfo info) throws ConfigurationException {
+                        super.addComponent(role, className, config, info);
+
+                        if (configuration.getAttributeAsBoolean("exported", true)) {
+                            ECMBlockServiceManager.this.serviceManagerRegistry.registerServiceManager(role,
this);
+                        }
+                    }
+
+                    /* (non-Javadoc)
+                     * @see org.apache.cocoon.core.container.CoreServiceManager#addInstance(java.lang.String,
java.lang.Object)
+                     */
+                    public void addInstance(String role, Object instance) throws ServiceException
{
+                        super.addInstance(role, instance);
+                        ECMBlockServiceManager.this.serviceManagerRegistry.registerServiceManager(role,
this);
+                    }
+                
+            };
             LifecycleHelper.setupComponent(this.serviceManager,
                     this.getLogger(),
                     newContext,

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test1/META-INF/block.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test1/META-INF/block.xml?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test1/META-INF/block.xml
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test1/META-INF/block.xml
Sat Feb  4 05:26:06 2006
@@ -41,9 +41,6 @@
     </property>
   </properties>
   <requirements>
-    <requires interface="http://cocoon.apache.org/blocks/core/1.0"
-              name="core"
-              default="http://cocoon.apache.org/blocks/core/1.0"/>
     <requires interface="http://cocoon.apache.org/blocks/another-interface/1.0"
               name="test2"
               default="http://cocoon.apache.org/blocks/another-block/1.0"/>

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test2/META-INF/block.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test2/META-INF/block.xml?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test2/META-INF/block.xml
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test2/META-INF/block.xml
Sat Feb  4 05:26:06 2006
@@ -31,9 +31,4 @@
   <servlet class="org.apache.cocoon.sitemap.SitemapServlet">
     <sitemap file="COB-INF/block-sitemap.xmap"/>
   </servlet>
-  <requirements>
-    <requires interface="http://cocoon.apache.org/blocks/core/1.0"
-              name="core"
-              default="http://cocoon.apache.org/blocks/core/1.0"/>
-  </requirements>
 </block>

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test3/META-INF/block.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test3/META-INF/block.xml?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test3/META-INF/block.xml
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/test/resources/org/apache/cocoon/blocks/test3/META-INF/block.xml
Sat Feb  4 05:26:06 2006
@@ -40,10 +40,5 @@
       <description>Still another test property</description>
     </property>
   </properties>
-  <requirements>
-    <requires interface="http://cocoon.apache.org/blocks/core/1.0"
-              name="core"
-              default="http://cocoon.apache.org/blocks/core/1.0"/>
-  </requirements>
   <extends block="http://cocoon.apache.org/blocks/anyblock/1.0"/>
 </block>

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test1/META-INF/block.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test1/META-INF/block.xml?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test1/META-INF/block.xml
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test1/META-INF/block.xml
Sat Feb  4 05:26:06 2006
@@ -41,9 +41,6 @@
     </property>
   </properties>
   <requirements>
-    <requires interface="http://cocoon.apache.org/blocks/core/1.0"
-              name="core"
-              default="http://cocoon.apache.org/blocks/core/1.0"/>
     <requires interface="http://cocoon.apache.org/blocks/another-interface/1.0"
               name="test2"
               default="http://cocoon.apache.org/blocks/another-block/1.0"/>

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test2/META-INF/block.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test2/META-INF/block.xml?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test2/META-INF/block.xml
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test2/META-INF/block.xml
Sat Feb  4 05:26:06 2006
@@ -31,9 +31,4 @@
   <servlet class="org.apache.cocoon.sitemap.SitemapServlet">
     <sitemap file="COB-INF/block-sitemap.xmap"/>
   </servlet>
-  <requirements>
-    <requires interface="http://cocoon.apache.org/blocks/core/1.0"
-              name="core"
-              default="http://cocoon.apache.org/blocks/core/1.0"/>
-  </requirements>
 </block>

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test3/META-INF/block.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test3/META-INF/block.xml?rev=374865&r1=374864&r2=374865&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test3/META-INF/block.xml
(original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-sample/src/main/webapp/test3/META-INF/block.xml
Sat Feb  4 05:26:06 2006
@@ -40,10 +40,5 @@
       <description>Still another test property</description>
     </property>
   </properties>
-  <requirements>
-    <requires interface="http://cocoon.apache.org/blocks/core/1.0"
-              name="core"
-              default="http://cocoon.apache.org/blocks/core/1.0"/>
-  </requirements>
   <extends block="http://cocoon.apache.org/blocks/anyblock/1.0"/>
 </block>



Mime
View raw message