You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2006/02/10 09:38:26 UTC

svn commit: r376592 - in /cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src: main/java/org/apache/cocoon/deployer/ main/java/org/apache/cocoon/deployer/applicationserver/ main/java/org/apache/cocoon/deployer/block/ main/java/org/apache/cocoon...

Author: reinhard
Date: Fri Feb 10 00:38:19 2006
New Revision: 376592

URL: http://svn.apache.org/viewcvs?rev=376592&view=rev
Log:
COCOON-1759

The deployer now supports relative locations and translates
them at deployment into paths that are relative to the Cocoon
install directory

 - added a second block type: LocalBlock
   This type only has a location and at deployment the 
   deployer does not installit
 - relative path calculation is covered by unit tests

Note: The block-fw needs some changes as it currently resolves all
block locations relative to the servlet context and if a
block is outside this results in an exception as 
servletContext.resolve("../foo") returns null

Added:
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/LocalBlock.java
      - copied, changed from r375302, cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/DevelopmentBlock.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/impl/LocalBlock10.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-06/
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-06/deploy.xml
Removed:
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/DevelopmentBlock.java
Modified:
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/applicationserver/CocoonServer22.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BinaryBlock.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/Block.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BlockFactory.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/util/ZipUtils.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/BlockDeployerTest.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/block/BlockFactoryTest.java
    cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-04/deploy.xml

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java Fri Feb 10 00:38:19 2006
@@ -82,9 +82,12 @@
 			String blockUrn = installBlock.getUrn();
 			File blockArchive = null;
 			if(installBlock.getLocation() == null) {
-				blockArchive = this.artifactProvider.getArtifact(blockUrn);				
+				blockArchive = this.artifactProvider.getArtifact(blockUrn);			
+				blockList.add(BlockFactory.createBinaryBlock(blockArchive, installBlock));				
+			} else {
+				blockList.add(BlockFactory.createLocalBlock(installBlock, 
+				    deploymentDescriptor.getCocoon().getTargetUrl()));
 			}
-			blockList.add(BlockFactory.createBinaryBlock(blockArchive, installBlock));
 		}
 		
 		// auto-wiring: if a connection is not specified, use the default implementation and

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/applicationserver/CocoonServer22.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/applicationserver/CocoonServer22.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/applicationserver/CocoonServer22.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/applicationserver/CocoonServer22.java Fri Feb 10 00:38:19 2006
@@ -19,7 +19,6 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
@@ -36,6 +35,7 @@
 import org.apache.cocoon.deployer.DeploymentException;
 import org.apache.cocoon.deployer.block.BinaryBlock;
 import org.apache.cocoon.deployer.block.Block;
+import org.apache.cocoon.deployer.block.LocalBlock;
 import org.apache.cocoon.deployer.generated.block.x10.Property;
 import org.apache.cocoon.deployer.generated.wiring.x10.Mount;
 import org.apache.cocoon.deployer.generated.wiring.x10.Wiring;
@@ -141,6 +141,10 @@
 					} else {
 						wiringBlock.setLocation((String) installedBlocks.get(block.getId()));
 					}
+				} 
+				else if(block instanceof LocalBlock) {
+					LocalBlock localBlock = (LocalBlock) block;
+					wiringBlock.setLocation(localBlock.getBaseDirectory());
 				}
 				wiring.addBlock(wiringBlock);
 			}
@@ -152,9 +156,8 @@
 				
 				// check if a library is a block, if yes, don't add it to WEB_INF_LIBS_DIR
 				boolean isBlock = true;
-				InputStream blockIs = null;
 				try {
-					blockIs = ZipUtils.getBlockDescriptorIs(lib);
+					ZipUtils.getBlockDescriptorIs(lib);
 				} catch(FileNotFoundException fnfe) {
 					isBlock = false;
 				}

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BinaryBlock.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BinaryBlock.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BinaryBlock.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BinaryBlock.java Fri Feb 10 00:38:19 2006
@@ -24,8 +24,6 @@
  */
 public interface BinaryBlock extends Block {
 	
-	String BLOCK_DESCRIPTOR_LOCATION = "META-INF/block.xml";
-
 	/**
 	 * @return the InputStream to get access to the blocks binaries
 	 */

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/Block.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/Block.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/Block.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/Block.java Fri Feb 10 00:38:19 2006
@@ -22,6 +22,7 @@
 public interface Block {
 
 	public static final String BLOCK_NS_10 = "http://apache.org/cocoon/blocks/cob/1.0";
+	String BLOCK_DESCRIPTOR_LOCATION = "META-INF/block.xml";
 	
 	/**
 	 * @return the block namespace

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BlockFactory.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BlockFactory.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BlockFactory.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/BlockFactory.java Fri Feb 10 00:38:19 2006
@@ -18,11 +18,14 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.util.StringTokenizer;
 
 import org.apache.cocoon.deployer.DeploymentException;
 import org.apache.cocoon.deployer.block.impl.Block10;
+import org.apache.cocoon.deployer.block.impl.LocalBlock10;
 import org.apache.cocoon.deployer.generated.block.x10.Block;
 import org.apache.cocoon.deployer.util.XMLUtils;
 import org.apache.cocoon.deployer.util.ZipUtils;
@@ -50,10 +53,12 @@
 			Unmarshaller unmarshaller = new Unmarshaller(Block.class);
 			// unmarshaller.setDebug(true);
 			blockDescriptor = (Block) unmarshaller.unmarshal(new InputStreamReader(ZipUtils.getBlockDescriptorIs(blockArchive)));
+			
 			block.setBlockDescriptor(blockDescriptor);
 			block.setInputStream(new FileInputStream(blockArchive));
 			block.setNameSpace(XMLUtils.getDocumentNamespace(ZipUtils.getBlockDescriptorIs(blockArchive)));
 			block.setId(blockDescriptor.getId());
+		
 		} catch (FileNotFoundException e) {
 			throw new DeploymentException("The block archive file can't be found.");
 		} catch (IOException e) {
@@ -79,6 +84,103 @@
 		deployBlock.setUrn(block.getBlockDescriptor().getId());
 		
 		return block;
+	}
+
+	public static LocalBlock createLocalBlock(org.apache.cocoon.deployer.generated.deploy.x10.Block installBlock, 
+			String cocoonTargetUrl) {
+		
+		Validate.notNull(installBlock, "You have to pass a block deployment configuration.");	
+		
+		LocalBlock10 localBlock = new LocalBlock10();
+		localBlock.setDeployDescriptor(installBlock);
+		
+		// get and set the descriptor
+		Block blockDescriptor = null;
+		
+		try {
+			String location = installBlock.getLocation();
+			Validate.notNull(location, "The location (attribute 'location' of the element 'block') of the block mustn't be null");
+			
+			File blockDescriptorFile = new File(location + File.separator + 
+			    org.apache.cocoon.deployer.block.Block.BLOCK_DESCRIPTOR_LOCATION);
+			
+			System.out.println("blockDescriptorFile: " + blockDescriptorFile.getAbsolutePath());
+			
+			if(!blockDescriptorFile.exists()) {
+			    throw new DeploymentException("The block descriptor file can't be found: " + 
+			        blockDescriptorFile.getAbsolutePath());
+			}
+			
+			Unmarshaller unmarshaller = new Unmarshaller(Block.class);
+			// unmarshaller.setDebug(true);			
+			blockDescriptor = (Block) unmarshaller.unmarshal(new FileReader(blockDescriptorFile));
+			
+			localBlock.setBlockDescriptor(blockDescriptor);
+			localBlock.setId(blockDescriptor.getId());
+			localBlock.setNameSpace(XMLUtils.getDocumentNamespace(new FileInputStream(blockDescriptorFile)));
+			
+			// calculate the location relative to the server root directory in the case that the
+			// location is relative itself
+			String blockPath = new File(location).getCanonicalPath();
+			String cocoonPath = new File(cocoonTargetUrl).getCanonicalPath();
+			localBlock.setBaseDirectory(createRelativeLocation(cocoonPath, blockPath));
+
+		} catch (MarshalException e) {
+			throw new DeploymentException("The block descriptor can't be read correctly.");
+		} catch (ValidationException e) {
+			throw new DeploymentException("The block descriptor can't be read correctly because of validation problems (XML schema).");
+		} catch (FileNotFoundException e) {
+			throw new DeploymentException("The block descriptor file can't be found.");
+		} catch (SAXException e) {
+			throw new DeploymentException("The block descriptor can't be read correctly.");
+		} catch (IOException e) {
+			throw new DeploymentException("The block descriptor can't be read correctly.");
+		}		
+
+		return localBlock;
+	}
+	
+	protected static String createRelativeLocation(final String cocoonLocation, final String blockLocation) {
+
+		String cleanedCocoonLocation = cocoonLocation.replaceAll("\\\\", "/");
+		String cleanedBlockLocation = blockLocation.replaceAll("\\\\", "/");		
+		String commonBaseDir = "";
+		
+		for(int i = 0; i < cleanedBlockLocation.length(); i++) {
+			String reducedBlockLocation = cleanedBlockLocation.substring(0, cleanedBlockLocation.length() - i);
+			if(cleanedCocoonLocation.indexOf(reducedBlockLocation) > -1) {
+				commonBaseDir = reducedBlockLocation.substring(0, reducedBlockLocation.lastIndexOf("/") + 1);
+				break;
+			}
+		}
+		
+		String relativeCocoonLocation = cleanedCocoonLocation.substring(commonBaseDir.length());
+		relativeCocoonLocation = relativeCocoonLocation.endsWith("/") ? relativeCocoonLocation : relativeCocoonLocation + "/";
+		
+		String relativeBlockLocation = cleanedBlockLocation.substring(commonBaseDir.length());
+		relativeBlockLocation = relativeBlockLocation.endsWith("/") ? relativeBlockLocation : relativeBlockLocation + "/";
+		
+		// if there is no common basedir, the relativeBlockLocation has to be absolute
+		if(commonBaseDir.equals("")) {
+			return relativeBlockLocation;
+		}
+		return relativizePath(relativeCocoonLocation) + relativeBlockLocation;
+	}
+	
+	/**
+	 * Use it to get ../../ out of e.g. x/y/
+	 * 
+	 * @param path The path to be relativized
+	 * @return the relativzed path
+	 */
+	protected static String relativizePath(final String path) {
+		StringTokenizer tokenizer = new StringTokenizer(path, "/");
+		StringBuffer relativizedPathSb = new StringBuffer();
+		while(tokenizer.hasMoreElements()) {
+			tokenizer.nextElement();
+			relativizedPathSb.append("../");
+		}
+		return relativizedPathSb.toString();
 	}
 	
 }

Copied: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/LocalBlock.java (from r375302, cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/DevelopmentBlock.java)
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/LocalBlock.java?p2=cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/LocalBlock.java&p1=cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/DevelopmentBlock.java&r1=375302&r2=376592&rev=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/DevelopmentBlock.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/LocalBlock.java Fri Feb 10 00:38:19 2006
@@ -15,28 +15,15 @@
  */
 package org.apache.cocoon.deployer.block;
 
-import java.io.File;
-
-
 /**
  * A block that is under development and available from within the filesystem
  * of the server it is deployed to.
  */
-public interface DevelopmentBlock extends Block {
+public interface LocalBlock extends Block {
 
 	/**
 	 * @return the root directory of the block
 	 */
-	public File getRootDirectory();
-	
-	/**
-	 * @return the root sitemap of the block
-	 */
-	public File getSitemap();
-	
-	/**
-	 * @return the directory where all Java classes are compiled to
-	 */
-	public File getClassesDirectory();
+	public String getBaseDirectory();
 	
 }

Added: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/impl/LocalBlock10.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/impl/LocalBlock10.java?rev=376592&view=auto
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/impl/LocalBlock10.java (added)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/block/impl/LocalBlock10.java Fri Feb 10 00:38:19 2006
@@ -0,0 +1,72 @@
+/*
+ * 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.deployer.block.impl;
+
+import org.apache.cocoon.deployer.block.LocalBlock;
+import org.apache.cocoon.deployer.generated.block.x10.Block;
+
+public class LocalBlock10 implements LocalBlock {
+
+	private String id;
+	private String namespace;
+	private String baseDirectory;
+	private Block blockDescriptor;
+	private org.apache.cocoon.deployer.generated.deploy.x10.Block deployDescriptor;
+	
+	public void setNameSpace(String namespace) {
+		this.namespace = namespace;
+	}
+	
+	public String getNamespace() {
+		return this.namespace;
+	}
+
+	public void setBlockDescriptor(Block blockDescriptor) {
+		this.blockDescriptor = blockDescriptor;
+	}
+	
+	public Block getBlockDescriptor() {
+		return this.blockDescriptor;
+	}
+
+	public void setDeployDescriptor(org.apache.cocoon.deployer.generated.deploy.x10.Block deployDescriptor) {
+		this.deployDescriptor = deployDescriptor;
+	}
+	
+	public org.apache.cocoon.deployer.generated.deploy.x10.Block getDeployDescriptor() {
+		return this.deployDescriptor;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getId() {
+		return this.id;
+	}
+
+	public void setBaseDirectory(String baseDirectory) {
+		this.baseDirectory = baseDirectory;
+	}
+	
+	public String getBaseDirectory() {
+		return baseDirectory;
+	}
+
+}

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/util/ZipUtils.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/util/ZipUtils.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/util/ZipUtils.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/main/java/org/apache/cocoon/deployer/util/ZipUtils.java Fri Feb 10 00:38:19 2006
@@ -26,7 +26,7 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
-import org.apache.cocoon.deployer.block.BinaryBlock;
+import org.apache.cocoon.deployer.block.Block;
 import org.apache.commons.transaction.file.FileResourceManager;
 import org.apache.commons.transaction.file.ResourceManagerException;
 
@@ -51,7 +51,7 @@
 	    do {
 	        document = blockStream.getNextEntry();
 	        if (document != null) {
-	            if (document.getName().equals(BinaryBlock.BLOCK_DESCRIPTOR_LOCATION)) {
+	            if (document.getName().equals(Block.BLOCK_DESCRIPTOR_LOCATION)) {
 	                found = true;
 	            } else {
 	                // go to next entry
@@ -61,7 +61,7 @@
 	    } while (document != null && found == false);        
 	    
 	    if(found == false) {
-	        String debugMsg = "The ZIP file doesn't contain " + BinaryBlock.BLOCK_DESCRIPTOR_LOCATION;
+	        String debugMsg = "The ZIP file doesn't contain " + Block.BLOCK_DESCRIPTOR_LOCATION;
 	        throw new FileNotFoundException(debugMsg);
 	    }
 	    

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/BlockDeployerTest.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/BlockDeployerTest.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/BlockDeployerTest.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/BlockDeployerTest.java Fri Feb 10 00:38:19 2006
@@ -60,6 +60,15 @@
 		aProviderCtrl.setReturnValue(this.getMockArtefact("validBlock-06/valid-block-1.0.jar"));		
 		
 		aProvider.getArtifact("anyblock:anyblock-07:1.0");
+		aProviderCtrl.setReturnValue(this.getMockArtefact("validBlock-07/valid-block-1.0.jar"));		
+		
+		aProvider.getArtifact("anyblock:anyblock-05:1.0");
+		aProviderCtrl.setReturnValue(this.getMockArtefact("validBlock-05/valid-block-1.0.jar"));
+		
+		aProvider.getArtifact("anyblock:anyblock-06:1.0");
+		aProviderCtrl.setReturnValue(this.getMockArtefact("validBlock-06/valid-block-1.0.jar"));		
+		
+		aProvider.getArtifact("anyblock:anyblock-07:1.0");
 		aProviderCtrl.setReturnValue(this.getMockArtefact("validBlock-07/valid-block-1.0.jar"));			
 		
 		aProvider.getArtifact((String[]) null);

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/block/BlockFactoryTest.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/block/BlockFactoryTest.java?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/block/BlockFactoryTest.java (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/java/org/apache/cocoon/deployer/block/BlockFactoryTest.java Fri Feb 10 00:38:19 2006
@@ -23,6 +23,7 @@
 	
 	private static final String VALID_BLOCK_01_JAR = "validBlock-01/valid-block-1.0.jar";
 	private static final String VALID_DEPLOY_01 = "validDeploy-01/deploy.xml";
+	private static final String VALID_DEPLOY_06 = "validDeploy-06/deploy.xml";;
 
 	/**
 	 * Test if the passed block is a file and not a directory
@@ -67,7 +68,7 @@
 		
 	}
 	
-	public void testBlockCreation() throws Exception {
+	public void testBinaryBlockCreation() throws Exception {
 		File blockAsFile = this.getMockArtefact(VALID_BLOCK_01_JAR);
 		BinaryBlock block = BlockFactory.createBinaryBlock(blockAsFile, this.getDeploy(VALID_DEPLOY_01).getBlock(0));
 		assertNotNull(block);
@@ -81,4 +82,49 @@
 		assertEquals("http://cocoon.apache.org/blocks/anyblock/1.0", block.getId());
 	}
 
+	public void testLocalBlockCreation() throws Exception {
+		LocalBlock block = BlockFactory.createLocalBlock(this.getDeploy(VALID_DEPLOY_06).getBlock(0), ".");
+		assertNotNull(block);
+		assertNotNull(block.getBlockDescriptor());
+		assertEquals( Block.BLOCK_NS_10, block.getNamespace());
+		assertEquals("anyblock:anyblock-06:1.0", block.getId());	
+		assertTrue(new File(block.getBaseDirectory()).exists());
+	}
+	
+	
+	// -------------- test the algorithm that gets calculates the local path
+	
+	public void testRelativeDirectoryCreationAlgForSameDriverWin() {
+		String relDir = BlockFactory.createRelativeLocation("C:\\test\\ax\\server", "C:\\test\\ay\\blockRoot");
+		assertEquals("../../ay/blockRoot/", relDir);
+	}	
+	
+	public void testRelativeDirectoryCreationAlgForSameDriverWin1() {
+		String relDir = BlockFactory.createRelativeLocation("C:\\test\\ax\\server\\", "C:\\test\\ay\\blockRoot\\");
+		assertEquals("../../ay/blockRoot/", relDir);
+	}
+	
+	public void testRelativeDirectoryCreationAlgForSameDriveNix() {
+		String relDir = BlockFactory.createRelativeLocation("/home/test/ax/server", "/home/test/ay/blockRoot");
+		assertEquals("../../ay/blockRoot/", relDir);
+	}	
+	
+	public void testRelativeDirectoryCreationAlgForSameDriveNix1() {
+		String relDir = BlockFactory.createRelativeLocation("/home/test/ax/server/", "/home/test/ay/blockRoot/");
+		assertEquals("../../ay/blockRoot/", relDir);
+	}		
+	
+	public void testRelativeDirectoryCreationAlgForDifferent() {
+		String relDir = BlockFactory.createRelativeLocation("D:\\server\\", "C:\\test\\ay\\blockRoot\\");
+		assertEquals("C:/test/ay/blockRoot/", relDir);
+	}	
+	
+	// ---------------- test relatizing of a path
+	 
+	public void testPathRelativizing() {
+		String relPath = BlockFactory.relativizePath("blah/foo/bar/");
+		assertEquals("../../../", relPath);
+	}
+	
+	
 }

Modified: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-04/deploy.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-04/deploy.xml?rev=376592&r1=376591&r2=376592&view=diff
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-04/deploy.xml (original)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-04/deploy.xml Fri Feb 10 00:38:19 2006
@@ -30,4 +30,7 @@
   
   <block id="db" urn="validBlock-04:validBlock-04:1.0"/>  
   
+  <block id="db1" urn="validBlock-04:validBlock-04:1.0" 
+    location="src/test/mocks/validBlock-04/blockRoot"/>    
+  
 </deploy>

Added: cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-06/deploy.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-06/deploy.xml?rev=376592&view=auto
==============================================================================
--- cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-06/deploy.xml (added)
+++ cocoon/trunk/cocoon-block-deployer/cocoon-deployer-core/src/test/mocks/validDeploy-06/deploy.xml Fri Feb 10 00:38:19 2006
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2006 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. 
+-->
+<deploy xmlns="http://apache.org/cocoon/blocks/deploy/1.0">
+  
+  <cocoon target-url=".target/test/validDeploy-02/myServer" 
+    urn="org.apache.cocoon:cocoon-minimal-webapp:1.0-SNAPSHOT:war" exclusive="true"/>    
+  
+  <block id="db" urn="validBlock-04:validBlock-04:1.0" location="src/test/mocks/validBlock-06/blockRoot"/>  
+  
+</deploy>
\ No newline at end of file