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 2005/04/24 14:07:23 UTC
svn commit: r164469 - in /cocoon/whiteboard/block-deployer: ./
src/api/org/apache/cocoon/blockdeployer/block/
src/api/org/apache/cocoon/blockdeployer/block/descriptor/deployment/
src/impl/org/apache/cocoon/blockdeployer/block/
src/impl/org/apache/cocoon/blockdeployer/block/descriptor/
src/impl/org/apache/cocoon/blockdeployer/repository/
test/junit/org/apache/cocoon/blockdeployer/
test/junit/org/apache/cocoon/blockdeployer/repository/
test/sample-descriptors/
test/sample-repositories/application-server/WEB-INF/blocks/
Author: reinhard
Date: Sun Apr 24 05:07:22 2005
New Revision: 164469
URL: http://svn.apache.org/viewcvs?rev=164469&view=rev
Log:
work on actual block deployment: create wiring information; fix object/xml-mapping when namespaces are used; testcases
Added:
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/descriptor/deployment/
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/descriptor/deployment/DeploymentProperty.java
cocoon/whiteboard/block-deployer/test/sample-descriptors/block_001.xml
cocoon/whiteboard/block-deployer/test/sample-descriptors/deploy_001.xml
- copied unchanged from r159025, cocoon/whiteboard/block-deployer/test/sample-descriptors/sample-deploy.xml
cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_001.xml
cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_002.xml
Removed:
cocoon/whiteboard/block-deployer/test/sample-descriptors/sample-block.xml
cocoon/whiteboard/block-deployer/test/sample-descriptors/sample-deploy.xml
cocoon/whiteboard/block-deployer/test/sample-descriptors/sample-wiring.xml
Modified:
cocoon/whiteboard/block-deployer/.classpath
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/Block.java
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/BlockDeploymentData.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockFactory.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10-mapping.xml
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/descriptor/Cob10Descriptor.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/FilesystemLocator.java
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java
cocoon/whiteboard/block-deployer/test/sample-repositories/application-server/WEB-INF/blocks/wiring.xml
Modified: cocoon/whiteboard/block-deployer/.classpath
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/.classpath?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/.classpath (original)
+++ cocoon/whiteboard/block-deployer/.classpath Sun Apr 24 05:07:22 2005
@@ -68,10 +68,6 @@
<attributes>
</attributes>
</classpathentry>
- <classpathentry kind="lib" path="lib/castor-0.9.6-xml.jar">
- <attributes>
- </attributes>
- </classpathentry>
<classpathentry kind="lib" path="lib/commons-logging-1.0.4.jar">
<attributes>
</attributes>
@@ -85,6 +81,10 @@
</attributes>
</classpathentry>
<classpathentry kind="lib" path="build/CocoonBlockDeployer-generated-0.1dev.jar">
+ <attributes>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="lib" path="lib/castor-0.9.6-xml.jar">
<attributes>
</attributes>
</classpathentry>
Modified: cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/Block.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/Block.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/Block.java (original)
+++ cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/Block.java Sun Apr 24 05:07:22 2005
@@ -61,4 +61,9 @@
*/
public BlockDeploymentData getBlockDeploymentData();
+ /**
+ * @param set BlockDeploymentData
+ */
+ public void setBlockDeploymentData(BlockDeploymentData data);
+
}
Modified: cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/BlockDeploymentData.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/BlockDeploymentData.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/BlockDeploymentData.java (original)
+++ cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/BlockDeploymentData.java Sun Apr 24 05:07:22 2005
@@ -17,7 +17,7 @@
import java.util.Iterator;
-import org.apache.cocoon.blockdeployer.block.descriptor.BlockProperty;
+import org.apache.cocoon.blockdeployer.block.descriptor.deployment.DeploymentProperty;
public interface BlockDeploymentData {
@@ -44,6 +44,6 @@
* @param name of the property
* @return returns a BlockProperty object containing the property information
*/
- public BlockProperty getProperty(String name);
+ public DeploymentProperty getProperty(String name);
}
Added: cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/descriptor/deployment/DeploymentProperty.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/descriptor/deployment/DeploymentProperty.java?rev=164469&view=auto
==============================================================================
--- cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/descriptor/deployment/DeploymentProperty.java (added)
+++ cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/descriptor/deployment/DeploymentProperty.java Sun Apr 24 05:07:22 2005
@@ -0,0 +1,24 @@
+/*
+ * 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.blockdeployer.block.descriptor.deployment;
+
+public interface DeploymentProperty {
+
+ public String getName();
+
+ public String getValue();
+
+}
Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockFactory.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockFactory.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockFactory.java (original)
+++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockFactory.java Sun Apr 24 05:07:22 2005
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.blockdeployer.block;
-import java.io.IOException;
import java.io.InputStream;
import org.apache.cocoon.blockdeployer.block.descriptor.Cob10Descriptor;
@@ -25,9 +24,7 @@
import org.exolab.castor.xml.Unmarshaller;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
/**
* This factory class creates RemoteBlocks based on the descriptor
@@ -51,7 +48,7 @@
/*
* FIXME the descriptor should be analyzed whether it is correct - otherwise raise an exception
*/
- public static Block getRemoteBlock(InputStream descriptor, Locator locator) {
+ public static Block createBlock(InputStream descriptor, Locator locator) {
if(descriptor == null) {
throw new NullPointerException("The descriptor mustn't be null.");
}
@@ -66,18 +63,8 @@
} catch (Exception e) {
throw new RuntimeException("Block descriptor can't be read.");
}
- Document descriptorDocument = parser.getDocument();
- NodeList rootNodeList = descriptorDocument.getChildNodes();
- String namespace = null;
- for(int i = 0; i <= rootNodeList.getLength() && i <= 1; i++ ) {
- Node rootChildNode = rootNodeList.item(i);
- if(rootChildNode.getNodeType() == Node.ELEMENT_NODE) {
- namespace = rootChildNode.getNamespaceURI();
- System.out.println("namespace: " + namespace);
- }
- }
-
- if(Cob10.NAMESPACE.equals(namespace)) {
+ Document descriptorDocument = parser.getDocument();
+ if(Cob10.NAMESPACE.equals(descriptorDocument.getDocumentElement().getNamespaceURI())) {
// it's a Cob10 ...
Cob10 cob10 = new Cob10();
cob10.setBlockDescriptor(createCOB10Descriptor(descriptorDocument));
Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10-mapping.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10-mapping.xml?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10-mapping.xml (original)
+++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10-mapping.xml Sun Apr 24 05:07:22 2005
@@ -16,41 +16,28 @@
-->
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
"http://castor.exolab.org/mapping.dtd">
-<mapping>
+<mapping xmlns:b="http://apache.org/cocoon/blocks/cob/1.0">
<class name="org.apache.cocoon.blockdeployer.block.descriptor.Cob10Descriptor">
- <map-to xml="block" ns-uri="http://apache.org/cocoon/blocks/cob/1.0"/>
- <field name="name" type="string" >
- <bind-xml name="name" node="element" />
- </field>
- <field name="blockId" type="string">
+ <map-to xml="b:block"/>
+ <field name="blockId">
<bind-xml name="id" node="attribute"/>
- </field>
- <field name="properties" type="org.apache.cocoon.blockdeployer.block.descriptor.Cob10Property" collection="collection" >
- <bind-xml name="property" node="element" location="properties"/>
- </field>
- <field name="requirements" type="org.apache.cocoon.blockdeployer.block.descriptor.Cob10Requirement" collection="collection" >
- <bind-xml name="requires" node="element" location="requirements"/>
- </field>
+ </field>
+ <field name="name">
+ <bind-xml name="b:name" node="element" />
+ </field>
+ <field name="properties" type="org.apache.cocoon.blockdeployer.block.descriptor.Cob10Property" collection="collection">
+ <bind-xml name="b:property" node="element" location="properties"/>
+ </field>
</class>
<class name="org.apache.cocoon.blockdeployer.block.descriptor.Cob10Property">
- <map-to ns-uri="http://apache.org/cocoon/blocks/cob/1.0"/>
- <field name="name" type="string">
- <bind-xml name="name" node="attribute"/>
- </field>
- <field name="description" type="string" >
- <bind-xml name="description" node="element" />
- </field>
- <field name="defaultValue" type="string" >
- <bind-xml name="default" node="element" />
+ <field name="name">
+ <bind-xml name="b:name" node="attribute"/>
</field>
- </class>
- <class name="org.apache.cocoon.blockdeployer.block.descriptor.Cob10Requirement">
- <map-to ns-uri="http://apache.org/cocoon/blocks/cob/1.0"/>
- <field name="name" type="string">
- <bind-xml name="name" node="attribute"/>
- </field>
- <field name="blockId" type="string" >
- <bind-xml name="block" node="element" />
- </field>
- </class>
+ <field name="defaultValue">
+ <bind-xml name="b:default"/>
+ </field>
+ <field name="description">
+ <bind-xml name="b:description"/>
+ </field>
+ </class>
</mapping>
Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10.java (original)
+++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/Cob10.java Sun Apr 24 05:07:22 2005
@@ -30,9 +30,10 @@
public final static String NAMESPACE = "http://apache.org/cocoon/blocks/cob/1.0";
- private Locator locator;
- private BlockDescriptor blockDescriptor;
- private String blockId;
+ protected Locator locator;
+ protected BlockDescriptor blockDescriptor;
+ protected String blockId;
+ protected BlockDeploymentData blockDeploymentData;
public Locator getLocator() {
return this.locator;
@@ -75,7 +76,11 @@
}
public BlockDeploymentData getBlockDeploymentData() {
- return null;
+ return this.blockDeploymentData;
+ }
+
+ public void setBlockDeploymentData(BlockDeploymentData data) {
+ this.blockDeploymentData = data;
}
}
Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/descriptor/Cob10Descriptor.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/descriptor/Cob10Descriptor.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/descriptor/Cob10Descriptor.java (original)
+++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/descriptor/Cob10Descriptor.java Sun Apr 24 05:07:22 2005
@@ -42,7 +42,7 @@
private String sitemap;
private List dependencies;
private Collection properties = new ArrayList();
- private Map propertiesMap = new HashMap();
+ private Map propertiesMap = null;
private Collection requirements = new ArrayList();
// **************** base meta information ********************
@@ -132,19 +132,23 @@
// **************** properties ********************
public Iterator getPropertyNames() {
- Iterator propertiesIt = this.properties.iterator();
- while( propertiesIt.hasNext() ) {
- BlockProperty bp = (BlockProperty) propertiesIt.next();
- this.propertiesMap.put(bp.getName(), bp);
- }
+ if(this.propertiesMap == null) setupPropertyNames();
return this.propertiesMap.keySet().iterator();
}
-
+
public BlockProperty getProperty(String name) {
+ if(this.propertiesMap == null) setupPropertyNames();
return (BlockProperty) this.propertiesMap.get(name);
}
+ protected void setupPropertyNames() {
+ this.propertiesMap = new HashMap();
+ for(Iterator it = this.properties.iterator(); it.hasNext();) {
+ BlockProperty bp = (BlockProperty) it.next();
+ this.propertiesMap.put(bp.getName(), bp);
+ }
+ }
public Collection getProperties() {
return this.properties;
Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java (original)
+++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java Sun Apr 24 05:07:22 2005
@@ -20,15 +20,21 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
+import java.util.Iterator;
import java.util.zip.ZipInputStream;
import org.apache.cocoon.blockdeployer.block.Block;
+import org.apache.cocoon.blockdeployer.block.descriptor.BlockDescriptor;
+import org.apache.cocoon.blockdeployer.block.descriptor.BlockProperty;
+import org.apache.cocoon.blockdeployer.block.descriptor.deployment.DeploymentProperty;
import org.apache.cocoon.blockdeployer.locking.Lock;
import org.apache.cocoon.blockdeployer.locking.LockingException;
import org.apache.cocoon.blockdeployer.logging.LoggerFacade;
import org.apache.cocoon.blockdeployer.utils.CommonsTransactionLogger;
import org.apache.cocoon.blockdeployer.utils.LocatorUtils;
import org.apache.cocoon.blockdeployer.wiring.wiring10.Mount;
+import org.apache.cocoon.blockdeployer.wiring.wiring10.Properties;
+import org.apache.cocoon.blockdeployer.wiring.wiring10.Property;
import org.apache.cocoon.blockdeployer.wiring.wiring10.Wiring;
import org.apache.commons.transaction.file.FileResourceManager;
import org.apache.commons.transaction.file.ResourceManagerException;
@@ -72,8 +78,8 @@
try {
this.wiring10 = readWiring(new File(this.deploymentDir, WIRING_XML), this.logger);
} catch (Exception ex) {
- String msg = "The application server's wiring.xml can't be read.";
- logger.error(ApplicationServer22Locator.class, msg);
+ String msg = "The application server's wiring.xml can't be read. (probably a Castor mapping error --> see the logs)";
+ logger.error(ApplicationServer22Locator.class, msg, ex);
throw new NullPointerException(msg);
}
@@ -106,7 +112,7 @@
this.logger.debug(this.getClass(), "Block [" + block.getBlockId() + "] to be deployed in " + nextDir);
LocatorUtils.writeZip(new ZipInputStream(block.getStream()), this.frm, this.txId, nextDir);
}
- this.updateWiring(block);
+ updateWiring(block, wiring10);
} catch(Exception ex) {
throw new DeploymentException("Block " + block.getBlockId() + " couldn't be deployed.", ex);
}
@@ -219,7 +225,7 @@
// ------- wiring and block helper methods ---------------------------------------
- private static Wiring readWiring(File wiringDescriptor, LoggerFacade logger) throws Exception {
+ protected static Wiring readWiring(File wiringDescriptor, LoggerFacade logger) throws Exception {
// read the wiring information (currently we have to support only
// http://apache.org/cocoon/blocks/wiring/1.0)
Wiring wiring10 = null;
@@ -250,19 +256,39 @@
}
- protected void updateWiring(Block block) {
+ protected static void updateWiring(Block block, Wiring wiring10) {
org.apache.cocoon.blockdeployer.wiring.wiring10.Block wiredBlock =
new org.apache.cocoon.blockdeployer.wiring.wiring10.Block();
+ BlockDescriptor descriptor = block.getBlockDescriptor();
+
// id
wiredBlock.setId(block.getBlockId());
+
// mount path
Mount mount = new Mount();
mount.setPath(block.getBlockDeploymentData().getMountPath());
wiredBlock.setMount(mount);
+
+ //properties
+ Properties wiredProperties = new Properties();
+ for(Iterator it = descriptor.getPropertyNames(); it.hasNext();) {
+ BlockProperty descriptorProperty = descriptor.getProperty((String) it.next());
+ DeploymentProperty deploymentProperty = block.getBlockDeploymentData().getProperty(descriptorProperty.getName());
+ Property wiredProperty = new Property();
+ wiredProperty.setName(descriptorProperty.getName());
+ if(deploymentProperty != null) {
+ wiredProperty.setValue(deploymentProperty.getValue());
+ } else {
+ wiredProperty.setValue(descriptorProperty.getDefaultValue());
+ }
+ wiredProperties.addProperty(wiredProperty);
+ }
+ wiredBlock.setProperties(wiredProperties);
// add block to wiring
- this.wiring10.addBlock(wiredBlock);
+ wiring10.addBlock(wiredBlock);
+
}
protected boolean blockExists(Wiring wiring10, String blockId) {
Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/FilesystemLocator.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/FilesystemLocator.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/FilesystemLocator.java (original)
+++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/FilesystemLocator.java Sun Apr 24 05:07:22 2005
@@ -91,7 +91,7 @@
if(descriptorInputStream == null) {
throw new BlockNotFoundException("Block " + blockUri + " not found.");
}
- return BlockFactory.getRemoteBlock(descriptorInputStream, this);
+ return BlockFactory.createBlock(descriptorInputStream, this);
}
public Block[] browse() throws IOException {
Modified: cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java (original)
+++ cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java Sun Apr 24 05:07:22 2005
@@ -43,8 +43,13 @@
public static final String UNAVAILABLE_INVALID_BLOCKPATH = "/mycompany.com/invalid/1.0.0";
public static final String UNAVAILABLE_INVALID_BLOCKFILE = "invalid.cob";
- // sample wiring
- public static final String WIRING_FILE = "test/sample-repositories/application-server/WEB-INF/blocks/wiring.xml";
+ // sample wiring files
+ public static final String WIRING_001 = "test/sample-descriptors/wiring_001.xml";
+ public static final String WIRING_002 = "test/sample-descriptors/wiring_002.xml";
+
+ // sample block descriptors
+ public static final String BLOCK_001 = "test/sample-descriptors/block_001.xml";
+
}
Modified: cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java (original)
+++ cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java Sun Apr 24 05:07:22 2005
@@ -17,7 +17,9 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileReader;
import java.io.InputStream;
+import java.util.ArrayList;
import jodd.file.FileUtil;
@@ -25,24 +27,29 @@
import org.apache.cocoon.blockdeployer.LogEnabledTestCase;
import org.apache.cocoon.blockdeployer.block.Block;
import org.apache.cocoon.blockdeployer.block.BlockDeploymentData;
+import org.apache.cocoon.blockdeployer.block.BlockFactory;
import org.apache.cocoon.blockdeployer.block.descriptor.BlockDescriptor;
+import org.apache.cocoon.blockdeployer.block.descriptor.deployment.DeploymentProperty;
+import org.apache.cocoon.blockdeployer.wiring.wiring10.Property;
import org.apache.cocoon.blockdeployer.wiring.wiring10.Wiring;
import org.easymock.MockControl;
/**
* @since 0.1
+ *
+ * TODO continue with setting of "connections | connection" (needs revisiting Cob10.java as it doesn't reflect the
+ * latest changes (block.xml only contains "contracts" and default implementations. Concrete implementation
+ * set during deployment in deploy.xml --> object BlockDeploymentData!!!)
+ *
*/
public class ApplicationServer22LocatorTest extends LogEnabledTestCase {
private final static String ASL = Constants.TMP_VALID_ASL_1;
- private void setupExamples() {
- FileUtil.deleteDir(ASL);
- if((new File(ASL).exists())) fail("Error: Directory mustn't exist (test isolation not guaranteed!");
- FileUtil.mkdirs(ASL);
- FileUtil.copyDir(Constants.VALID_ASL_1, ASL);
- }
-
+ /**
+ * test transaction management - ApplicationServer22Locator should only work with started transaction
+ * @throws Exception
+ */
public void testTransactionManagement() throws Exception {
setupExamples();
ApplicationServer22Locator asl = new ApplicationServer22Locator(new File(ASL), this.logger);
@@ -79,71 +86,183 @@
assertNotNull(asl.wiring10);
}
- public void testDeploySingleBlock() throws Exception {
+ /**
+ * Test the extraction of the block into the target directory.
+ * @throws Exception
+ */
+ public void testBlockExtraction() throws Exception {
setupExamples();
- // create locator, use transaction mgmt, deploy block
ApplicationServer22Locator asl = new ApplicationServer22Locator(new File(ASL), this.logger);
asl.startTransaction();
- // create block metadata
- MockControl bddCtrl = MockControl.createControl(BlockDeploymentData.class);
- BlockDeploymentData bdd = (BlockDeploymentData) bddCtrl.getMock();
+ String blockId = "http://bla";
+ Block b = createBinaryBlockMockWithoutDeploymentData(blockId);
- String mountPath = "/mountPath";
+ MockControl bddCtrl = MockControl.createControl(BlockDeploymentData.class);
+ BlockDeploymentData bdd = (BlockDeploymentData) bddCtrl.getMock();
+ // mountPath
bdd.getMountPath();
- bddCtrl.setReturnValue(mountPath);
+ bddCtrl.setReturnValue(null);
+ // properties
+ bdd.getPropertyNames();
+ bddCtrl.setReturnValue((new ArrayList()).iterator());
- bddCtrl.replay();
+ bddCtrl.replay();
+ b.setBlockDeploymentData(bdd);
- String blockId = "http://bla";
- Block b = createBlockMock(blockId, bdd);
asl.deploy(b);
asl.commitTransaction();
- // test that the block is extracted correctly by checking whether the
- // COB_INF and the block.xml are available
+ // test that the block is extracted correctly
File descriptor = new File(ASL + "/WEB-INF/blocks/000001/block.xml");
+ File unavailableDescriptor = new File(ASL + "/WEB-INF/blocks/000002");
assertTrue(descriptor.exists());
-
- Wiring wiring = asl.wiring10;
-
- org.apache.cocoon.blockdeployer.wiring.wiring10.Block wiredBlock = null;
- for(int i = 0; i < wiring.getBlockCount(); i++) {
- org.apache.cocoon.blockdeployer.wiring.wiring10.Block locBlock = wiring.getBlock(i);
- if(blockId.equals(locBlock.getId())) {
- wiredBlock = locBlock;
- break;
- }
+ assertFalse(unavailableDescriptor.exists());
+ }
+
+ /**
+ * Test whether NullPointException is thrown correctly if DeploymentData are missing
+ * @throws Exception
+ */
+ public void testDeploymentDataMapping1() throws Exception {
+ Block block = createBlockWithDeploymentDataOnly(new File(Constants.BLOCK_001));
+ Wiring wiring = createWiring(new File(Constants.WIRING_001));
+ try {
+ ApplicationServer22Locator.updateWiring(block, wiring);
+ fail("There are no deployment metadata set. This should lead to a NullPointerException!");
+ } catch(NullPointerException npe) {
+ // correct behaviour
}
- assertNotNull("The installed block must be added to the wiring.", wiredBlock);
- assertEquals(mountPath, wiredBlock.getMount().getPath());
-
}
- /*
- public void testAddBlockToWiring() throws Exception {
- ApplicationServer22Locator asl = new ApplicationServer22Locator(
- new File(ASL), this.logger);
- String blockId = "http://bla";
- Block block = createBlockMock(blockId, null);
- Wiring wiring = new Wiring();
- asl.addBlockToWiring(wiring, block);
+ /**
+ * Test working scenario: use properties
+ */
+ public void testDeploymentDataMapping2() throws Exception {
+ Block block = createBlockWithDeploymentDataOnly(new File(Constants.BLOCK_001));
+ Wiring wiring = createWiring(new File(Constants.WIRING_002));
+
+ MockControl bddCtrl = MockControl.createControl(BlockDeploymentData.class);
+ BlockDeploymentData bdd = (BlockDeploymentData) bddCtrl.getMock();
- // check that only one block is set
- int blockCount = wiring.getBlockCount();
- // assertEquals(blockCount, 1);
+ // mountPath
+ String mountPath = "/mountPath";
+ bdd.getMountPath();
+ bddCtrl.setReturnValue(mountPath);
+ // properties
+ bdd.getProperty("prop1");
+ bddCtrl.setReturnValue(null);
+ bdd.getProperty("prop2");
+ bddCtrl.setReturnValue(null);
- // check that the right number of connections is set
- Connections connections = wiring.getBlock(0).getConnections();
- int connectionsCount = connections.getConnectionCount();
- // assertEquals(connectionsCount, 1);
+ bddCtrl.replay();
+ block.setBlockDeploymentData(bdd);
+
+ ApplicationServer22Locator.updateWiring(block, wiring);
+
+ // test object construction
+ org.apache.cocoon.blockdeployer.wiring.wiring10.Block wiredBlock =
+ wiring.getBlock(0);
+ assertNotNull(wiredBlock);
+ // test mountPath
+ assertEquals(mountPath, wiredBlock.getMount().getPath());
+ // test properties
+ Property wiredProperty1 = wiredBlock.getProperties().getProperty(0);
+ assertEquals(wiredProperty1.getName(), "prop1");
+ assertEquals(wiredProperty1.getValue(), "1");
+ Property wiredProperty2 = wiredBlock.getProperties().getProperty(1);
+ assertEquals(wiredProperty2.getName(), "prop2");
+ assertEquals(wiredProperty2.getValue(), null);
+ }
+
+ /**
+ * Test if the DeploymentData overrides the default values!
+ */
+ public void testDeploymentDataMapping3() throws Exception {
+ Block block = createBlockWithDeploymentDataOnly(new File(Constants.BLOCK_001));
+ Wiring wiring = createWiring(new File(Constants.WIRING_002));
+
+ MockControl bddCtrl = MockControl.createControl(BlockDeploymentData.class);
+ BlockDeploymentData bdd = (BlockDeploymentData) bddCtrl.getMock();
+
+ // mountPath
+ String mountPath = "/mountPath";
+ bdd.getMountPath();
+ bddCtrl.setReturnValue(mountPath);
+ // properties
+ // prop1
+ MockControl prop1Ctrl = MockControl.createControl(DeploymentProperty.class);
+ DeploymentProperty prop1 = (DeploymentProperty) prop1Ctrl.getMock();
+ prop1.getName();
+ prop1Ctrl.setReturnValue("prop1");
+ String prop1Value = "prop1_value";
+ prop1.getValue();
+ prop1Ctrl.setReturnValue(prop1Value);
+ prop1Ctrl.replay();
+ bdd.getProperty("prop1");
+ bddCtrl.setReturnValue(prop1);
+ // prop2
+ MockControl prop2Ctrl = MockControl.createControl(DeploymentProperty.class);
+ DeploymentProperty prop2 = (DeploymentProperty) prop2Ctrl.getMock();
+ prop2.getName();
+ prop2Ctrl.setReturnValue("prop2");
+ String prop2Value = "prop2_value";
+ prop2.getValue();
+ prop2Ctrl.setReturnValue(prop2Value);
+ prop2Ctrl.replay();
+ bdd.getProperty("prop2");
+ bddCtrl.setReturnValue(prop2);
- // check that the right connection is set
- Connection connection = connections.getConnection(0);
- // assertEquals(connection.getBlock(), blockId);
+ bddCtrl.replay();
+ block.setBlockDeploymentData(bdd);
+
+ ApplicationServer22Locator.updateWiring(block, wiring);
+
+ // test object construction
+ org.apache.cocoon.blockdeployer.wiring.wiring10.Block wiredBlock =
+ wiring.getBlock(0);
+
+ // test properties
+ Property wiredProperty1 = wiredBlock.getProperties().getProperty(0);
+ assertEquals(wiredProperty1.getName(), "prop1");
+ assertEquals(prop1Value, wiredProperty1.getValue());
+ Property wiredProperty2 = wiredBlock.getProperties().getProperty(1);
+ assertEquals(wiredProperty2.getName(), "prop2");
+ assertEquals(prop2Value, wiredProperty2.getValue());
+ }
+
+ // **************************************** helper methods *****************************************
+
+ /**
+ * Helper method to create a wiring out of an XML file
+ */
+ public static Wiring createWiring(File wiringFile) throws Exception {
+ return (Wiring) Wiring.unmarshal(new FileReader(wiringFile));
}
- */
+
+ /**
+ * Helper method to create a block out of an XML file
+ */
+ public static Block createBlockWithDeploymentDataOnly(File descriptor) throws Exception {
+ MockControl locatorCtrl = MockControl.createNiceControl(Locator.class);
+ Locator locator = (Locator) locatorCtrl.getMock();
+ locatorCtrl.replay();
+ return BlockFactory.createBlock(new FileInputStream(descriptor), locator);
+ }
+
+ /**
+ * Helper method to setup examples, also checks whether isolation is guaranteed
+ */
+ private void setupExamples() {
+ FileUtil.deleteDir(ASL);
+ if((new File(ASL).exists())) fail("Error: Directory mustn't exist (test isolation not guaranteed!");
+ FileUtil.mkdirs(ASL);
+ FileUtil.copyDir(Constants.VALID_ASL_1, ASL);
+ }
- private Block createBlockMock(String id, BlockDeploymentData deployData) throws Exception {
+ /**
+ * create a block that also returns a binary
+ */
+ private Block createBinaryBlockMockWithoutDeploymentData(String id) throws Exception {
// create the Block
MockControl blockControl = MockControl.createNiceControl(Block.class);
Block block = (Block) blockControl.getMock();
@@ -158,7 +277,10 @@
// create the deployment meta information
block.getBlockDeploymentData();
- blockControl.setReturnValue(deployData);
+ MockControl bddCtrl = MockControl.createNiceControl(BlockDeploymentData.class);
+ BlockDeploymentData bdd = (BlockDeploymentData) bddCtrl.getMock();
+ bddCtrl.replay();
+ blockControl.setReturnValue(bdd);
// create the Inputstream containing block as binary
block.getStream();
@@ -172,7 +294,9 @@
return block;
}
-
+ /**
+ * create the BlockDescriptorMock, only sets the block ID
+ */
private BlockDescriptor createBlockDescriptorMock(String id) {
MockControl descriptorControl = MockControl.createControl(BlockDescriptor.class);
BlockDescriptor descriptor = (BlockDescriptor) descriptorControl.getMock();
@@ -180,8 +304,105 @@
descriptor.getBlockId();
descriptorControl.setReturnValue(id);
+ descriptor.getPropertyNames();
+ descriptorControl.setReturnValue((new ArrayList()).iterator());
+
descriptorControl.replay();
return descriptor;
}
+
+ /*
+ public void testDeploySingleBlock() throws Exception {
+ setupExamples();
+ // create locator, use transaction mgmt, deploy block
+ // -------------------------------------------------------------------------
+ ApplicationServer22Locator asl = new ApplicationServer22Locator(new File(ASL), this.logger);
+ asl.startTransaction();
+
+ // create block metadata
+ // -------------------------------------------------------------------------
+ MockControl bddCtrl = MockControl.createControl(BlockDeploymentData.class);
+ BlockDeploymentData blockDeploymentData = (BlockDeploymentData) bddCtrl.getMock();
+ // mountPath
+ String mountPath = "/mountPath";
+ blockDeploymentData.getMountPath();
+ bddCtrl.setReturnValue(mountPath);
+ // properties
+ List properties = new ArrayList();
+ // property1
+ MockControl blockProperty1Ctrl = MockControl.createControl(BlockProperty.class);
+ BlockProperty blockProperty1 = (BlockProperty) blockProperty1Ctrl.getMock();
+ String property1_name = "prop1";
+ String property1_value = "value1";
+ blockProperty1.getName();
+ properties.add(property1_name);
+ blockDeploymentData.getProperty(property1_name);
+ bddCtrl.setReturnValue(blockProperty1);
+ blockProperty1Ctrl.setReturnValue(property1_name);
+
+
+
+ blockDeploymentData.getPropertyNames();
+ bddCtrl.setReturnValue(properties.iterator());
+
+
+ bddCtrl.replay();
+
+ String blockId = "http://bla";
+ Block b = createBlockMock(blockId, blockDeploymentData);
+
+ // test
+ // -------------------------------------------------------------------------
+ asl.deploy(b);
+ asl.commitTransaction();
+ // test that the block is extracted correctly by checking whether the
+ // COB_INF and the block.xml are available
+ File descriptor = new File(ASL + "/WEB-INF/blocks/000001/block.xml");
+ assertTrue(descriptor.exists());
+
+ Wiring wiring = asl.wiring10;
+
+ org.apache.cocoon.blockdeployer.wiring.wiring10.Block wiredBlock = null;
+ for(int i = 0; i < wiring.getBlockCount(); i++) {
+ org.apache.cocoon.blockdeployer.wiring.wiring10.Block locBlock = wiring.getBlock(i);
+ if(blockId.equals(locBlock.getId())) {
+ wiredBlock = locBlock;
+ break;
+ }
+ }
+ assertNotNull("The installed block must be added to the wiring.", wiredBlock);
+ assertEquals(mountPath, wiredBlock.getMount().getPath());
+
+ Properties wiredProperties = wiredBlock.getProperties();
+ // for(int i = 0; i < wiredProperties.getPropertyCount(); i++) {
+
+ // }
+ // assertTrue(properties.isEmpty());
+ }
+ */
+
+ /*
+ public void testAddBlockToWiring() throws Exception {
+ ApplicationServer22Locator asl = new ApplicationServer22Locator(
+ new File(ASL), this.logger);
+ String blockId = "http://bla";
+ Block block = createBlockMock(blockId, null);
+ Wiring wiring = new Wiring();
+ asl.addBlockToWiring(wiring, block);
+
+ // check that only one block is set
+ int blockCount = wiring.getBlockCount();
+ // assertEquals(blockCount, 1);
+
+ // check that the right number of connections is set
+ Connections connections = wiring.getBlock(0).getConnections();
+ int connectionsCount = connections.getConnectionCount();
+ // assertEquals(connectionsCount, 1);
+
+ // check that the right connection is set
+ Connection connection = connections.getConnection(0);
+ // assertEquals(connection.getBlock(), blockId);
+ }
+ */
}
Added: cocoon/whiteboard/block-deployer/test/sample-descriptors/block_001.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/sample-descriptors/block_001.xml?rev=164469&view=auto
==============================================================================
--- cocoon/whiteboard/block-deployer/test/sample-descriptors/block_001.xml (added)
+++ cocoon/whiteboard/block-deployer/test/sample-descriptors/block_001.xml Sun Apr 24 05:07:22 2005
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Copyright 1999-2004 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.
+-->
+<block xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://apache.org/cocoon/blocks/cob/1.0 ../../src/schema/cob-schema-1.0.xsd"
+ xmlns="http://apache.org/cocoon/blocks/cob/1.0" id="http://mycompany.com/webmail/1.3.43">
+
+ <name>block.xml for test cases [001]</name>
+ <description href="http://testcase">testcase</description>
+ <license href="http://www.mycompany.com/license/1.3">BSD-style License</license>
+ <author href="http://www.mycompany.com/">MyCompany Inc.</author>
+ <sitemap src="webmail.xmap"/>
+ <state href="" community="committed" interfaces="stable" implementation="stable"/>
+
+ <properties>
+ <property name="prop1">
+ <default>1</default>
+ <description>test property with default value</description>
+ </property>
+ <property name="prop2">
+ <description>test property without default value</description>
+ </property>
+ </properties>
+
+</block>
Added: cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_001.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_001.xml?rev=164469&view=auto
==============================================================================
--- cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_001.xml (added)
+++ cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_001.xml Sun Apr 24 05:07:22 2005
@@ -0,0 +1,38 @@
+<!--
+ Copyright 1999-2004 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.
+-->
+<wiring xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://apache.org/cocoon/blocks/wiring/1.0 ../../src/schema/wiring-schema-1.0.xsd"
+ xmlns="http://apache.org/cocoon/blocks/wiring/1.0">
+ <block id="http://mycompany.com/webmail/1.3.43" location="000001">
+ <mount path="/mail/"/>
+ <connections>
+ <connection name="external-skin" block="http://yetanothercompany.com/skins/fancy/1.2.2"/>
+ <connection name="internal-skin" block="http://mycompany.com/skins/corporate/34.3.345"/>
+ <connection name="repository" block="http://mycompany.com/repositories/email/exchange/3.2.1"/>
+ </connections>
+ <properties>
+ <property name="user" value="guest"/>
+ <property name="password" value="sj3u493"/>
+ </properties>
+ </block>
+ <block id="http://mycompany.com/repositories/email/exchange/3.2.1" location="000002">
+ <properties>
+ <property name="host" value="mail.blah.org"/>
+ </properties>
+ </block>
+ <block id="http://yetanothercompany.com/skins/fancy/1.2.2" location="000003"/>
+ <block id="http://mycompany.com/skins/corporate/34.3.345" location="000004"/>
+</wiring>
Added: cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_002.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_002.xml?rev=164469&view=auto
==============================================================================
--- cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_002.xml (added)
+++ cocoon/whiteboard/block-deployer/test/sample-descriptors/wiring_002.xml Sun Apr 24 05:07:22 2005
@@ -0,0 +1,20 @@
+<!--
+ Copyright 1999-2004 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.
+-->
+<wiring xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://apache.org/cocoon/blocks/wiring/1.0 ../../src/schema/wiring-schema-1.0.xsd"
+ xmlns="http://apache.org/cocoon/blocks/wiring/1.0">
+
+</wiring>
\ No newline at end of file
Modified: cocoon/whiteboard/block-deployer/test/sample-repositories/application-server/WEB-INF/blocks/wiring.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/sample-repositories/application-server/WEB-INF/blocks/wiring.xml?rev=164469&r1=164468&r2=164469&view=diff
==============================================================================
--- cocoon/whiteboard/block-deployer/test/sample-repositories/application-server/WEB-INF/blocks/wiring.xml (original)
+++ cocoon/whiteboard/block-deployer/test/sample-repositories/application-server/WEB-INF/blocks/wiring.xml Sun Apr 24 05:07:22 2005
@@ -18,34 +18,4 @@
xsi:schemaLocation="http://apache.org/cocoon/blocks/wiring/1.0 wiring-schema-1.0.xsd"
>
- <block id="http://mycompany.com/webmail/1.3.43"
- location="WEB-INF/blocks/384938958499">
- <mount path="/mail/"/>
- <connections>
- <connection name="external-skin"
- block="http://yetanothercompany.com/skins/fancy/1.2.2"/>
- <connection name="internal-skin"
- block="http://mycompany.com/skins/corporate/34.3.345"/>
- <connection name="repository"
- block="http://mycompany.com/repositories/email/exchange/3.2.1"/>
- </connections>
- <properties>
- <property name="user" value="guest"/>
- <property name="password" value="sj3u493"/>
- </properties>
- </block>
-
- <block id="http://mycompany.com/repositories/email/exchange/3.2.1"
- location="WEB-INF/blocks/394781274834">
- <properties>
- <property name="host" value="mail.blah.org"/>
- </properties>
- </block>
-
- <block id="http://yetanothercompany.com/skins/fancy/1.2.2"
- location="WEB-INF/blocks/947384127832"/>
-
- <block id="http://mycompany.com/skins/corporate/34.3.345"
- location="WEB-INF/blocks/746394782637"/>
-
</wiring>