You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by da...@apache.org on 2005/12/03 18:19:05 UTC

svn commit: r351990 - in /cocoon/trunk/src/java/org/apache/cocoon/blocks: BlockDispatcherProcessor.java BlockManager.java Blocks.java BlocksManager.java InterBlockServiceManager.java

Author: danielf
Date: Sat Dec  3 09:18:50 2005
New Revision: 351990

URL: http://svn.apache.org/viewcvs?rev=351990&view=rev
Log:
Interface for requesting blocks.

Added:
    cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java   (with props)
Modified:
    cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java
    cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java
    cocoon/trunk/src/java/org/apache/cocoon/blocks/BlocksManager.java
    cocoon/trunk/src/java/org/apache/cocoon/blocks/InterBlockServiceManager.java   (contents, props changed)

Modified: cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java?rev=351990&r1=351989&r2=351990&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockDispatcherProcessor.java Sat Dec  3 09:18:50 2005
@@ -31,16 +31,16 @@
  */
 public class BlockDispatcherProcessor extends AbstractLogEnabled implements Processor {
 
-    private BlocksManager blocksManager;
+    private Blocks blocks;
 
     /** Processor attributes */
     private Map processorAttributes = new HashMap();
    
     /**
-     * @param blocksManager
+     * @param blocks
      */
-    public BlockDispatcherProcessor(BlocksManager blocksManager) {
-        this.blocksManager = blocksManager;
+    public BlockDispatcherProcessor(Blocks blocks) {
+        this.blocks = blocks;
     }
 
     /* (non-Javadoc)
@@ -55,7 +55,7 @@
         if (uri.length() == 0 || uri.charAt(0) != '/') {
             uri = "/" + uri;
         }
-        Block block = this.blocksManager.getMountedBlock(uri);
+        Block block = this.blocks.getMountedBlock(uri);
         if (block == null) {
             return false;
         } else {

Modified: cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java?rev=351990&r1=351989&r2=351990&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/BlockManager.java Sat Dec  3 09:18:50 2005
@@ -60,7 +60,7 @@
     private Processor blockProcessor;
     private BlockWiring blockWiring;
     private BlockContext blockContext;
-    private BlocksManager blocksManager;
+    private Blocks blocks;
 
     // Life cycle
 
@@ -96,7 +96,7 @@
             this.serviceManager = this.parentServiceManager;
        } else {
             // Create a service manager for getting components from other blocks
-            ServiceManager topServiceManager = new InterBlockServiceManager(this.blockWiring, this.blocksManager);
+            ServiceManager topServiceManager = new InterBlockServiceManager(this.blockWiring, this.blocks);
             ((InterBlockServiceManager)topServiceManager).enableLogging(this.getLogger());
 
             this.serviceManager =
@@ -187,8 +187,8 @@
     // didn't want to make it part of the parent manager. But this is
     // a little bit clumsy. Question is what components, if any, the
     // blocks should have in common.
-    public void setBlocksManager(BlocksManager blocksManager) {
-    	this.blocksManager = blocksManager;
+    public void setBlocks(Blocks blocks) {
+    	this.blocks = blocks;
     }
 
     /**
@@ -207,7 +207,7 @@
 		    // Ask the super block for the property
 		    String superId = this.blockWiring.getBlockId(Block.SUPER);
 		    this.getLogger().debug("Try super property=" + name + " block=" + superId);
-		    Block block = this.blocksManager.getBlock(superId);
+		    Block block = this.blocks.getBlock(superId);
 		    if (block != null) {
 		        value =  block.getProperty(name);
 		    }
@@ -246,7 +246,7 @@
         } else {
             // another block
         	String blockId = this.blockWiring.getBlockId(blockName);
-            block = this.blocksManager.getBlock(blockId);
+            block = this.blocks.getBlock(blockId);
         }
         if (block == null)
             throw new URISyntaxException(uriToResolve.toString(), "Unknown block name");
@@ -311,7 +311,7 @@
             	}
         		superCall = true;
             }
-            Block block = this.blocksManager.getBlock(blockId);
+            Block block = this.blocks.getBlock(blockId);
     		if (block == null) {
     			return false;
     		}

Added: cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java?rev=351990&view=auto
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java (added)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java Sat Dec  3 09:18:50 2005
@@ -0,0 +1,43 @@
+/*
+ * 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.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.cocoon.Processor;
+
+/**
+ * @version SVN $Id$
+ */
+public interface Blocks { 
+
+    /**
+     * Returns the block with the specified identity
+     * @param blockId
+     * @return
+     */
+    Block getBlock(String blockId);
+    
+    /**
+     * The block with the largest mount point that is a prefix of the URI is
+     * chosen.
+     * @param uri
+     * @return
+     */
+    Block getMountedBlock(String uri);
+}

Propchange: cocoon/trunk/src/java/org/apache/cocoon/blocks/Blocks.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: cocoon/trunk/src/java/org/apache/cocoon/blocks/BlocksManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/BlocksManager.java?rev=351990&r1=351989&r2=351990&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/BlocksManager.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/BlocksManager.java Sat Dec  3 09:18:50 2005
@@ -54,7 +54,9 @@
  */
 public class BlocksManager
     extends AbstractLogEnabled
-    implements Configurable,
+    implements
+	Blocks,
+	Configurable,
         Contextualizable,
         Disposable,
         Initializable,
@@ -119,7 +121,7 @@
                               " id=" + blockConf.getAttribute("id") +
                               " location=" + blockConf.getAttribute("location"));
             BlockManager blockManager = new BlockManager();
-            blockManager.setBlocksManager(this);
+            blockManager.setBlocks(this);
             LifecycleHelper.setupComponent(blockManager,
                                            this.getLogger(),
                                            this.context,

Modified: cocoon/trunk/src/java/org/apache/cocoon/blocks/InterBlockServiceManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/blocks/InterBlockServiceManager.java?rev=351990&r1=351989&r2=351990&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/blocks/InterBlockServiceManager.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/blocks/InterBlockServiceManager.java Sat Dec  3 09:18:50 2005
@@ -1,136 +1,136 @@
-/*
- * Copyright 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.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
-
-/**
- * Look for a component in blocks that are connected to the current block.
- * 
- * @version SVN $Id$
- */
-public class InterBlockServiceManager extends AbstractLogEnabled implements ServiceManager {
-    
-    private BlockWiring blockWiring;
-    private BlocksManager blocksManager;
-    private Map managers = new HashMap();
-    private boolean called;
-
-    /**
-     * @param blockWiring
-     * @param blocksManager
-     */
-    public InterBlockServiceManager(BlockWiring blockWiring, BlocksManager blocksManager) {
-        this.blockWiring = blockWiring;
-        this.blocksManager = blocksManager;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.avalon.framework.service.ServiceManager#lookup(java.lang.String)
-     */
-    public Object lookup(String role) throws ServiceException {
-        ServiceManager manager = this.findServiceManager(role);
-        if (manager == null) {
-            throw new ServiceException(role, "Could not find any manager in connected blocks that contains the role");
-        }
-        Object component = manager.lookup(role);
-        // Keep track on what manager that was used so that we can return the component
-        this.managers.put(component, manager);
-        return component;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.avalon.framework.service.ServiceManager#hasService(java.lang.String)
-     */
-    public boolean hasService(String role) {
-        ServiceManager manager = this.findServiceManager(role);
-        return manager != null;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.avalon.framework.service.ServiceManager#release(java.lang.Object)
-     */
-    public void release(Object component) {
-        if (component == null)
-            return;
-        ServiceManager manager = (ServiceManager)this.managers.get(component);
-        if (manager != null) {
-            manager.release(component);
-        }
-    }
-
-    
-    /**
-     * Find a service manager that contains a given role from one of the connected blocks. The component
-     * managers of the connected blocks are searched in the order they are declared in the block configuration.
-     * The super block, if there is one, is tried after the connected blocks. This is to make certain that
-     * a blocks connections is searched before its super blocks connections. 
-     * 
-     * @param role the role to find a service manager for
-     * @return the found service manager or null if not found
-     */
-    private ServiceManager findServiceManager(String role) {
-        this.getLogger().debug("findServiceManager: blockId=" + this.blockWiring.getId() + " role=" + role);
-        // FIXME: Called is used for protection about infinite loops for blocks with circular dependencies.
-        // It must be made thread safe.
-        if (called) {
-            return null;
-        } else {
-            this.called = true;
-        }
-        ServiceManager manager = null;
-        try {
-            Enumeration connectionNames = this.blockWiring.getConnectionNames();
-            while (connectionNames.hasMoreElements()) {
-                String blockName = (String)connectionNames.nextElement();
-                String blockId = this.blockWiring.getBlockId(blockName);
-                Block block = this.blocksManager.getBlock(blockId);
-                // Don't access blocks that isn't setup yet
-                if (block != null) {
-                    manager = block.getServiceManager();
-                    if (manager != null && manager.hasService(role)) {
-                        return manager;
-                    }
-                } else {
-                    this.getLogger().debug("Serching for role=" + role + " in blockId=" + blockId + " that isn't setup.");
-                }
-            }
-            String superId = this.blockWiring.getBlockId(Block.SUPER);
-            if (superId != null) {
-                Block superBlock = this.blocksManager.getBlock(superId);
-                // Don't access blocks that isn't setup yet
-                if (superBlock != null) {
-                    manager = superBlock.getServiceManager();
-                    if (manager.hasService(role)) {
-                        return manager;
-                    }
-                } else {
-                    this.getLogger().debug("Serching for role=" + role + " in blockId=" + superId + " that isn't setup.");
-                }
-            }
-        } finally {
-            this.called = false;
-        }
-        return null;
-    }
-}
+/*
+ * Copyright 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.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+
+/**
+ * Look for a component in blocks that are connected to the current block.
+ * 
+ * @version SVN $Id$
+ */
+public class InterBlockServiceManager extends AbstractLogEnabled implements ServiceManager {
+    
+    private BlockWiring blockWiring;
+    private Blocks blocks;
+    private Map managers = new HashMap();
+    private boolean called;
+
+    /**
+     * @param blockWiring
+     * @param blocks
+     */
+    public InterBlockServiceManager(BlockWiring blockWiring, Blocks blocks) {
+        this.blockWiring = blockWiring;
+        this.blocks = blocks;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.avalon.framework.service.ServiceManager#lookup(java.lang.String)
+     */
+    public Object lookup(String role) throws ServiceException {
+        ServiceManager manager = this.findServiceManager(role);
+        if (manager == null) {
+            throw new ServiceException(role, "Could not find any manager in connected blocks that contains the role");
+        }
+        Object component = manager.lookup(role);
+        // Keep track on what manager that was used so that we can return the component
+        this.managers.put(component, manager);
+        return component;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.avalon.framework.service.ServiceManager#hasService(java.lang.String)
+     */
+    public boolean hasService(String role) {
+        ServiceManager manager = this.findServiceManager(role);
+        return manager != null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.avalon.framework.service.ServiceManager#release(java.lang.Object)
+     */
+    public void release(Object component) {
+        if (component == null)
+            return;
+        ServiceManager manager = (ServiceManager)this.managers.get(component);
+        if (manager != null) {
+            manager.release(component);
+        }
+    }
+
+    
+    /**
+     * Find a service manager that contains a given role from one of the connected blocks. The component
+     * managers of the connected blocks are searched in the order they are declared in the block configuration.
+     * The super block, if there is one, is tried after the connected blocks. This is to make certain that
+     * a blocks connections is searched before its super blocks connections. 
+     * 
+     * @param role the role to find a service manager for
+     * @return the found service manager or null if not found
+     */
+    private ServiceManager findServiceManager(String role) {
+        this.getLogger().debug("findServiceManager: blockId=" + this.blockWiring.getId() + " role=" + role);
+        // FIXME: Called is used for protection about infinite loops for blocks with circular dependencies.
+        // It must be made thread safe.
+        if (called) {
+            return null;
+        } else {
+            this.called = true;
+        }
+        ServiceManager manager = null;
+        try {
+            Enumeration connectionNames = this.blockWiring.getConnectionNames();
+            while (connectionNames.hasMoreElements()) {
+                String blockName = (String)connectionNames.nextElement();
+                String blockId = this.blockWiring.getBlockId(blockName);
+                Block block = this.blocks.getBlock(blockId);
+                // Don't access blocks that isn't setup yet
+                if (block != null) {
+                    manager = block.getServiceManager();
+                    if (manager != null && manager.hasService(role)) {
+                        return manager;
+                    }
+                } else {
+                    this.getLogger().debug("Serching for role=" + role + " in blockId=" + blockId + " that isn't setup.");
+                }
+            }
+            String superId = this.blockWiring.getBlockId(Block.SUPER);
+            if (superId != null) {
+                Block superBlock = this.blocks.getBlock(superId);
+                // Don't access blocks that isn't setup yet
+                if (superBlock != null) {
+                    manager = superBlock.getServiceManager();
+                    if (manager.hasService(role)) {
+                        return manager;
+                    }
+                } else {
+                    this.getLogger().debug("Serching for role=" + role + " in blockId=" + superId + " that isn't setup.");
+                }
+            }
+        } finally {
+            this.called = false;
+        }
+        return null;
+    }
+}

Propchange: cocoon/trunk/src/java/org/apache/cocoon/blocks/InterBlockServiceManager.java
------------------------------------------------------------------------------
    svn:eol-style = native