Author: reinhard
Date: Fri Nov 12 01:30:47 2004
New Revision: 57510
Added:
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/RecursiveBlockHierarchyException.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockResolver.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/SimpleBlock.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/DeploymentConfiguration.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/DeploymentConfigurationException.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer21Locator.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/SingleBlockLocator.java
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer21LocatorTest.java
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/SingeBlockLocatorTest.java
cocoon/whiteboard/block-deployer/test/sample-repositories/application-server-21/
Modified:
cocoon/whiteboard/block-deployer/.classpath
cocoon/whiteboard/block-deployer/mapping/sample-deploy.xml
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/logging/LoggerFacade.java
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RealRemoteBlock.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RemoteBlockFactory.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocator.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/FilesystemLocator.java
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/utils/LocatorUtils.java
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocatorTest.java
Log:
refactoring to support reference deployments (for developers) and provide
support for clients via a service
Modified: cocoon/whiteboard/block-deployer/.classpath
==============================================================================
--- cocoon/whiteboard/block-deployer/.classpath (original)
+++ cocoon/whiteboard/block-deployer/.classpath Fri Nov 12 01:30:47 2004
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/api"/>
+ <classpathentry kind="src" path="src/client"/>
<classpathentry kind="src" path="test/junit"/>
<classpathentry kind="src" path="src/impl"/>
<classpathentry kind="lib" path="lib/castor-0.9.5.3-xml.jar"/>
@@ -17,5 +18,6 @@
<classpathentry kind="lib"
path="lib/commons-transaction-0.1pre-20041008.jar"/>
<classpathentry kind="lib" path="lib/geronimo-spec-j2ee-1.0-M1.jar"/>
<classpathentry kind="lib" path="tools/lib/jodd-fileutils-0.29.jar"/>
+ <classpathentry kind="lib" path="lib/commons-cli-1.0.jar"/>
<classpathentry kind="output" path="build/eclipse"/>
</classpath>
Modified: cocoon/whiteboard/block-deployer/mapping/sample-deploy.xml
==============================================================================
--- cocoon/whiteboard/block-deployer/mapping/sample-deploy.xml (original)
+++ cocoon/whiteboard/block-deployer/mapping/sample-deploy.xml Fri Nov 12
01:30:47 2004
@@ -19,7 +19,9 @@
<locator>C:\myDirectory</locator>
<locator>F:\anotherDirectory</locator>
</locators>
- <cocoon-root version="2.2">E:\blblb</cocoon-root>
+ <servers>
+ <server version="2.2">E:\blblb</server>
+ </servers>
<install>
<block id="http://mycompany.com/webmail/1.3.43" auto-resolve="true"/>
<block id="http://mycompany.com/myblock/1.3.43" auto-resolve="false"/>
Added:
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/RecursiveBlockHierarchyException.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/block/RecursiveBlockHierarchyException.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,34 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.block;
+
+
+/**
+ * @since 0.1
+ */
+public class RecursiveBlockHierarchyException extends Exception {
+
+ public RecursiveBlockHierarchyException(RemoteBlock errorBlock) {
+ this.errorBlock = errorBlock;
+ }
+
+ private RemoteBlock errorBlock;
+
+ public RemoteBlock getErrorRoot() {
+ return this.errorBlock;
+ }
+
+}
Modified:
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/logging/LoggerFacade.java
==============================================================================
---
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/logging/LoggerFacade.java
(original)
+++
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/logging/LoggerFacade.java
Fri Nov 12 01:30:47 2004
@@ -34,6 +34,7 @@
public boolean isWarnEnabled();
public void error(String error);
public void error(Class clazz, String msg);
+ public void error(Class clazz, String msg, Exception ex);
public boolean isErrorEnabled();
}
Modified:
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java
==============================================================================
---
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java
(original)
+++
cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java
Fri Nov 12 01:30:47 2004
@@ -36,6 +36,9 @@
* @throws @link UnsupportedBlockException if the block version is not
supported
* @throws @link IOException if the block can't be deployed in the target
filesystem
*/
+ /*
+ * FIXME remove return value - throw Exceptions instead
+ */
public boolean deploy(RemoteBlock[] blocks)
throws UnsupportedBlockException, IOException;
Added:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,44 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer;
+
+import org.apache.cocoon.blockdeployer.configuration.DeploymentConfiguration;
+import
org.apache.cocoon.blockdeployer.configuration.DeploymentConfigurationException;
+import org.apache.cocoon.blockdeployer.logging.LoggerFacade;
+
+/**
+ * @since 0.1
+ */
+public class DeploymentService {
+
+ /**
+ * Deploy blocks using the information in the [EMAIL PROTECTED]
DeploymentConfiguration}.
+ * @param conf
+ * @param logger
+ */
+ public static void deploy(DeploymentConfiguration conf, LoggerFacade
logger) throws DeploymentConfigurationException {
+ if(logger == null) {
+ throw new NullPointerException("The logger mustn't be null.");
+ }
+ checkDeploymentConfiguration(conf, logger);
+ }
+
+ protected static void checkDeploymentConfiguration(DeploymentConfiguration
conf, LoggerFacade logger)
+ throws DeploymentConfigurationException {
+
+ }
+
+}
Added:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockResolver.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/BlockResolver.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,48 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.block;
+
+import org.apache.cocoon.blockdeployer.block.RemoteBlock;
+
+/**
+ * These services help to find required blocks and to resolve dependencies.
+ *
+ * @since 0.1
+ */
+public class BlockResolver {
+
+ /**
+ * Find all blocks, the passed blocks depend on. It checks
+ * for version incompatiblities and recursive dependencies.
+ *
+ * @param blocks - the know blocks to be deployed
+ * @return all blocks that are necessary to make the passed blocks run
+ */
+ public static RemoteBlock[] resolve(RemoteBlock[] blocks, RemoteBlock[]
installedBlocks) {
+ return new RemoteBlock[0];
+ }
+
+ /**
+ * Get all blocks this block requires.
+ *
+ * @param block
+ * @return
+ */
+ public static RemoteBlock[] getRequiredBlocks(RemoteBlock block) throws
RecursiveBlockHierarchyException {
+ return new RemoteBlock[0];
+ }
+
+}
Modified:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RealRemoteBlock.java
==============================================================================
---
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RealRemoteBlock.java
(original)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RealRemoteBlock.java
Fri Nov 12 01:30:47 2004
@@ -26,6 +26,8 @@
* @since 0.1
*/
public class RealRemoteBlock implements RemoteBlock {
+
+ public final static String NAMESPACE =
"http://apache.org/cocoon/blocks/cob/1.0";
private Locator locator;
private BlockDescriptor blockDescriptor;
Modified:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RemoteBlockFactory.java
==============================================================================
---
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RemoteBlockFactory.java
(original)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/RemoteBlockFactory.java
Fri Nov 12 01:30:47 2004
@@ -15,13 +15,19 @@
*/
package org.apache.cocoon.blockdeployer.block;
+import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
import org.apache.cocoon.blockdeployer.block.descriptor.RealBlockDescriptor;
import org.apache.cocoon.blockdeployer.repository.Locator;
+import org.apache.xerces.parsers.DOMParser;
import org.exolab.castor.mapping.Mapping;
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,21 +57,46 @@
if(descriptor == null) {
throw new NullPointerException("The descriptor mustn't be null.");
}
- if(locator == null) {
- throw new NullPointerException("The locator mustn't be null.");
- }
+
+ RemoteBlock block = null;
+
// analyse the descriptor and decide which RemoteBlock implementation
should be used
+ // by finding out the namespace of the root element
+ DOMParser parser = new DOMParser();
+ try {
+ parser.parse(new InputSource(descriptor));
+ } catch (SAXException e) {
+
+ } catch (IOException e) {
+
+ }
+ 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);
+ }
+ }
- // it's a RealRemoteBlock ...
- RealRemoteBlock realRemoteBlock = new RealRemoteBlock();
- realRemoteBlock.setBlockDescriptor(createCOB10Descriptor(descriptor));
-
realRemoteBlock.setBlockId(realRemoteBlock.getBlockDescriptor().getBlockId());
- realRemoteBlock.setLocator(locator);
+ if(RealRemoteBlock.NAMESPACE.equals(namespace)) {
+ // it's a RealRemoteBlock ...
+ RealRemoteBlock realRemoteBlock = new RealRemoteBlock();
+
realRemoteBlock.setBlockDescriptor(createCOB10Descriptor(descriptorDocument));
+
realRemoteBlock.setBlockId(realRemoteBlock.getBlockDescriptor().getBlockId());
+ if(locator == null) {
+ throw new NullPointerException("The locator mustn't be null.");
+ }
+ realRemoteBlock.setLocator(locator);
+ block = realRemoteBlock;
+ }
- return realRemoteBlock;
+ return block;
}
- private static RealBlockDescriptor createCOB10Descriptor(InputStream
descriptor) {
+ private static RealBlockDescriptor createCOB10Descriptor(Node descriptor) {
RealBlockDescriptor realBlockDescriptor = null;
try {
Mapping mapping = new Mapping();
@@ -76,7 +107,7 @@
unmarshaller.setIgnoreExtraAttributes(true);
unmarshaller.setIgnoreExtraElements(true);
// unmarshaller.setDebug(true);
- realBlockDescriptor = (RealBlockDescriptor)unmarshaller.unmarshal(new
InputStreamReader(descriptor));
+ realBlockDescriptor =
(RealBlockDescriptor)unmarshaller.unmarshal(descriptor);
} catch(Exception e) {
throw new RuntimeException(e);
}
Added:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/SimpleBlock.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/block/SimpleBlock.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,47 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.block;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.cocoon.blockdeployer.block.descriptor.BlockDescriptor;
+import org.apache.cocoon.blockdeployer.repository.Locator;
+
+/**
+ * This block implementation represents Blocks prior Real Cocoon Blocks.
+ *
+ * @since 0.1
+ */
+public class SimpleBlock implements RemoteBlock {
+
+ public String getBlockId() {
+ return null;
+ }
+
+ public Locator getLocator() {
+ return null;
+ }
+
+ public InputStream getStream() throws IOException {
+ return null;
+ }
+
+ public BlockDescriptor getBlockDescriptor() {
+ return null;
+ }
+
+}
Added:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/DeploymentConfiguration.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/DeploymentConfiguration.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,101 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * This configuration contains all information that are collected by the client
+ * to deploy one ore more blocks, into one or more Cocoon servers by using
+ * one or more locators.
+ * </p>
+ * <p>
+ * It doesn't perform any validity checks on the data. This is done by the
service this
+ * object is passed to.
+ * </p>
+ * @since 0.1
+ */
+public class DeploymentConfiguration {
+
+ protected List servers = new ArrayList();
+ protected List blocks = new ArrayList();
+ protected List locators = new ArrayList();
+
+ public void addBlock(Block block) {
+ this.blocks.add(block);
+ }
+
+ public void addServer(Server server) {
+ this.servers.add(server);
+ }
+
+ public void addLocator(Locator locator) {
+ this.locators.add(locator);
+ }
+
+ public List getLocators() {
+ return this.locators;
+ }
+
+ public List getServers() {
+ return this.servers;
+ }
+
+ public List getBlocks() {
+ return this.blocks;
+ }
+
+ static class Block {
+ String uri;
+ boolean autoResolve = true;
+ public boolean isAutoResolve() {
+ return autoResolve;
+ }
+ public void setAutoResolve(boolean autoResolve) {
+ this.autoResolve = autoResolve;
+ }
+ public String getUri() {
+ return uri;
+ }
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+ }
+
+ static class Server {
+ String uri;
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+ public String getUri() {
+ return this.uri;
+ }
+ }
+
+ static class Locator {
+ String uri;
+ boolean local = false;
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+ public String getUri() {
+ return this.uri;
+ }
+ }
+
+}
Added:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/DeploymentConfigurationException.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/DeploymentConfigurationException.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,25 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.configuration;
+
+/**
+ * A checked exception indicating that a [EMAIL PROTECTED]
DeploymentConfiguration} is not valid.
+ *
+ * @since 0.1
+ */
+public class DeploymentConfigurationException extends Exception {
+
+}
Added:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer21Locator.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer21Locator.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,63 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.repository;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.cocoon.blockdeployer.block.RemoteBlock;
+import org.apache.cocoon.blockdeployer.logging.LoggerFacade;
+import org.apache.cocoon.blockdeployer.utils.LocatorUtils;
+
+/**
+ * @since 0.1
+ */
+public class ApplicationServer21Locator implements Deployable {
+
+ private LoggerFacade logger;
+ private File basedir;
+
+ public ApplicationServer21Locator(File basedir, LoggerFacade logger) {
+ if( logger == null) {
+ throw new NullPointerException("You have to set a logger.");
+ }
+ this.logger = logger;
+ LocatorUtils.checkBasedir(basedir, logger,
ApplicationServer21Locator.class);
+ this.basedir = basedir;
+ try {
+ this.logger.info(ApplicationServer21Locator.class, "Set
basedir to " +
+ this.basedir.getCanonicalPath());
+ } catch (IOException e) {
+ this.logger.error(ApplicationServer21Locator.class, "Error
resolving basedir");
+ }
+ }
+
+ /**
+ * Deploy a block only by adding references (mount-table, cocoon.xconf,
logkit.xconf,
+ * ParanoidCocoonServlet configuration) to the Cocoon server.
+ */
+ // protected void devDeploy(File[] blockBasedirs) throws
UnsupportedBlockException, IOException {
+
+ // }
+
+ public boolean deploy(RemoteBlock[] blocks) throws
UnsupportedBlockException, IOException {
+ if(blocks.length == 0) {
+ throw new IllegalArgumentException("Passing an empty array is now
allowed.");
+ }
+ return false;
+ }
+
+}
Modified:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocator.java
==============================================================================
---
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocator.java
(original)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocator.java
Fri Nov 12 01:30:47 2004
@@ -60,27 +60,15 @@
* is a <code>File</code> object pointing to the directory
* where blocks can be deployed
* @param wiring
- * is the
- * @link Wiring (representing wiring.xml) of a Cocoon server
+ * is the [EMAIL PROTECTED] Wiring} (representing wiring.xml)
of a Cocoon server
*/
public ApplicationServerLocator(File basedir, Wiring wiring, LoggerFacade
logger ) {
- if( logger == null) {
+ if(logger == null) {
throw new NullPointerException("You have to set a logger!");
}
- if (!basedir.exists()) {
- throw new IllegalArgumentException(
- "The specified directory is not available!");
- }
- if (!basedir.isDirectory()) {
- throw new IllegalArgumentException(
- "The specified base dir (usually [appserv]/WEB-INF/blocks)
"
- + "for this locator is not a directory!");
- }
- if (!basedir.canWrite()) {
- throw new IllegalArgumentException(
- "The specified base dir is not writeable!");
- }
- if (wiring == null) {
+ LocatorUtils.checkBasedir(basedir, logger,
ApplicationServerLocator.class);
+ // FIXME shouldn't be the wiring encapsulated by this locator?
currently its a mix ... :-/
+ if(wiring == null) {
throw new NullPointerException("The wiring mustn't be null!");
}
this.basedir = basedir;
@@ -207,14 +195,12 @@
}
}
return true;
- }
-
+ }
+
public String getIdentifier() {
try {
return this.basedir.toURL().toString();
} catch (MalformedURLException e) {
- // if a MalformedURLException occurs this indicates a problem
(maybe in the
- // BlockFactory
throw new IllegalStateException(this.getClass().getName() + ": The
block doesn't have a valid ID.");
}
}
@@ -223,7 +209,6 @@
* Create a wiring descriptor out of the block descriptor
*
* @param Block
- * object
* @return returns a WiredRealBlockDescriptor object containing
*/
protected static WiredRealBlockDescriptor createBlockWiringDescriptor(
Modified:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/FilesystemLocator.java
==============================================================================
---
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
Fri Nov 12 01:30:47 2004
@@ -37,17 +37,13 @@
private LoggerFacade logger;
public FilesystemLocator(File basedir, LoggerFacade logger) {
- if(!basedir.exists()) {
- throw new IllegalArgumentException("The specified directory is not
available!");
- }
- if(!basedir.isDirectory()) {
- throw new IllegalArgumentException("The specified base for this
locator is not a directory!");
- }
if(logger == null) {
- throw new NullPointerException("Please set a Logger
implementing the interface " + LoggerFacade.class.getClass().getName() + ".");
- }
- this.basedir = basedir;
+ throw new NullPointerException("Please set a Logger implementing
the interface " + LoggerFacade.class.getClass().getName() + ".");
+ }
this.logger = logger;
+
+ LocatorUtils.checkBasedir(basedir, logger, FilesystemLocator.class);
+ this.basedir = basedir;
this.logger.debug(this.getClass(), "Created FileSystemLocator,
basedir: " + this.basedir.getAbsolutePath());
}
@@ -55,6 +51,7 @@
try {
return this.basedir.toURL().toString();
} catch (MalformedURLException e) {
+ this.logger.error(FilesystemLocator.class, "The locator's basedir
can't be resolved", e);
}
return null;
}
Added:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/SingleBlockLocator.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/SingleBlockLocator.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,70 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.repository;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.cocoon.blockdeployer.block.RemoteBlock;
+import org.apache.cocoon.blockdeployer.logging.LoggerFacade;
+import org.apache.cocoon.blockdeployer.utils.LocatorUtils;
+
+/**
+ * This locator provides access to a single block. The basedir of this
+ * locator is identical to the block's basedir.
+ *
+ * @since 0.1
+ */
+public class SingleBlockLocator implements Locator {
+
+ private LoggerFacade logger;
+ private File basedir;
+
+ public SingleBlockLocator(File basedir, LoggerFacade logger) {
+ if(logger == null) {
+ throw new NullPointerException("The logger mustn't be null.");
+ }
+ this.logger = logger;
+ LocatorUtils.checkBasedir(basedir, logger, SingleBlockLocator.class);
+ this.basedir = basedir;
+ }
+
+ public RemoteBlock getRemoteBlock(String blockId) throws
BlockNotFoundException, IOException {
+ // read the block descriptor file of the only available block
+
+ // compare whethr this available block and the blockId are the same
+
+ // if yes, return the block
+
+ // if no, throw Exception
+
+ return null;
+ }
+
+ public String getIdentifier() {
+ return null;
+ }
+
+ public InputStream getBlockAsStream(String blockId) throws IOException,
BlockNotFoundException {
+ return null;
+ }
+
+ public RemoteBlock[] browse() {
+ return null;
+ }
+
+}
Modified:
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/utils/LocatorUtils.java
==============================================================================
---
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/utils/LocatorUtils.java
(original)
+++
cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/utils/LocatorUtils.java
Fri Nov 12 01:30:47 2004
@@ -175,4 +175,26 @@
}
return nextDirSB.append(nextDir).toString();
}
+
+ public static void checkBasedir(File basedir, LoggerFacade logger, Class
clazz) {
+ if(basedir == null) {
+ String errorMsg = "The basedir mustn't be null.";
+ logger.error(errorMsg);
+ throw new NullPointerException(errorMsg);
+ }
+ if(!basedir.exists()) {
+ String errorMsg = "The specified basedir [" +
basedir.getAbsolutePath() + "] is not available.";
+ logger.error(errorMsg);
+ throw new IllegalArgumentException(errorMsg);
+ }
+ if(!basedir.canRead()) {
+ String errorMsg = "The basedir [" + basedir.getAbsolutePath() +
"] must be readable.";
+ throw new IllegalArgumentException(errorMsg);
+ }
+ if(!basedir.isDirectory()) {
+ String errorMsg = "The specified basedir [" +
basedir.getAbsolutePath() + "] for this locator is not a directory!";
+ logger.error(errorMsg);
+ throw new IllegalArgumentException(errorMsg);
+ }
+ }
}
Modified:
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java
==============================================================================
---
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
Fri Nov 12 01:30:47 2004
@@ -26,6 +26,7 @@
// basedirs for locators
public static final String VALID_LOCATION_1 =
"test/sample-repositories/rep1";
public static final String VALID_ASL_1 =
"test/sample-repositories/application-server/WEB-INF/blocks";
+ public static final String VALID_ASL21_1 =
"test/sample-repositories/application-server-21";
public static final String TMP_VALID_ASL_1 = TMP_JUNIT + "/asf1";
public static final String INVALID_LOCATION = "bla";
Modified:
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java
==============================================================================
---
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java
(original)
+++
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java
Fri Nov 12 01:30:47 2004
@@ -21,7 +21,7 @@
public class ConsoleLogger implements LoggerFacade {
public void debug(String msg) {
- System.out.println(" DEBUG: " + msg);
+ System.out.println(" DEBUG: " + msg);
}
public void debug(Class clazz, String msg) {
@@ -57,11 +57,20 @@
}
public void error(String msg) {
- System.out.println(" ERROR: " + msg);
+ System.out.println(" ERROR: " + msg);
}
public void error(Class clazz, String msg) {
this.error(clazz.getName() + ": " + msg);
+ }
+ // FIXME code never tested!
+ public void error(Class clazz, String msg, Exception e) {
+ StringBuffer stacktrace = new StringBuffer(msg + "\n");
+ StackTraceElement[] ste = e.getStackTrace();
+ for(int i = 0; i < ste.length; i++) {
+ stacktrace.append(ste[i]).append('\n');
+ }
+ this.error(clazz, stacktrace.toString());
}
public boolean isErrorEnabled() {
Added:
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer21LocatorTest.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer21LocatorTest.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,56 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.repository;
+
+import java.io.File;
+
+import org.apache.cocoon.blockdeployer.Constants;
+import org.apache.cocoon.blockdeployer.LogEnabledTestCase;
+
+
+/**
+ * @since 0.1
+ */
+public class ApplicationServer21LocatorTest extends LogEnabledTestCase {
+
+
+ public void testDeployInitialization() {
+ ApplicationServer21Locator asl = new ApplicationServer21Locator(new
File(Constants.VALID_ASL21_1), this.logger);
+
+ }
+
+ public void testCreation() {
+ try {
+ ApplicationServer21Locator asl = new
ApplicationServer21Locator(new File(Constants.VALID_ASL21_1), null);
+ fail("The logger is null and no exception has been thrown.");
+ } catch(NullPointerException npe) {
+ // should throw Exception -> expected behaviour
+ }
+ try {
+ ApplicationServer21Locator asl = new
ApplicationServer21Locator(null, this.logger);
+ fail("The basedir is null and no exception has been thrown.");
+ } catch(NullPointerException npe) {
+ // should throw Exception -> expected behaviour
+ }
+ try {
+ ApplicationServer21Locator asl = new
ApplicationServer21Locator(new File(Constants.VALID_ASL21_1 + "/blblblb.txt"),
this.logger);
+ fail("The basedir is not a directory and no exception has been
thrown.");
+ } catch(IllegalArgumentException iae) {
+ // should throw Exception -> expected behaviour
+ }
+ }
+
+}
Modified:
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocatorTest.java
==============================================================================
---
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocatorTest.java
(original)
+++
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServerLocatorTest.java
Fri Nov 12 01:30:47 2004
@@ -33,7 +33,7 @@
public class ApplicationServerLocatorTest extends LogEnabledTestCase {
private void setupExamples() {
- new File(Constants.TMP_VALID_ASL_1).mkdirs();
+ FileUtil.mkdir(Constants.TMP_VALID_ASL_1);
FileUtil.copyDir(Constants.VALID_ASL_1, Constants.TMP_VALID_ASL_1);
}
Added:
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/SingeBlockLocatorTest.java
==============================================================================
--- (empty file)
+++
cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/SingeBlockLocatorTest.java
Fri Nov 12 01:30:47 2004
@@ -0,0 +1,32 @@
+/*
+ * Copyright 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.
+ */
+package org.apache.cocoon.blockdeployer.repository;
+
+import org.apache.cocoon.blockdeployer.LogEnabledTestCase;
+
+/**
+ * @since 0.1
+ */
+public class SingeBlockLocatorTest extends LogEnabledTestCase {
+
+ public void testGetRemoteBlock() {
+
+ }
+
+ public void testGetIdentifier() {
+ }
+
+}