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 2008/03/21 14:55:20 UTC

svn commit: r639645 [6/7] - in /cocoon/whiteboard/corona/trunk: ./ corona-core/ corona-core/src/ corona-core/src/main/ corona-core/src/main/java/ corona-core/src/main/java/org/ corona-core/src/main/java/org/apache/ corona-core/src/main/java/org/apache/...

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceFactoriesManager.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceFactoriesManager.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceFactoriesManager.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceFactoriesManager.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.jnet.source;
+
+import java.util.Collections;
+import java.util.Map;
+
+public abstract class SourceFactoriesManager {
+
+    protected static final ThreadLocal<CompositeMap> FACTORIES = new InheritableThreadLocal<CompositeMap>();
+
+    protected static Map GLOBAL_FACTORIES;
+
+    public static synchronized void setGlobalFactories(Map factories) {
+        GLOBAL_FACTORIES = factories;
+    }
+
+    public static void pushFactories(Map factories) {
+        // no need to synchronize as we use a thread local
+        CompositeMap factoryMap = FACTORIES.get();
+        if (factoryMap == null) {
+            factoryMap = new CompositeMap();
+            FACTORIES.set(factoryMap);
+        }
+        factoryMap.pushMap(factories);
+    }
+
+    public static void popFactories() {
+        // no need to synchronize as we use a thread local
+        CompositeMap factoryMap = FACTORIES.get();
+        if (factoryMap != null) {
+            factoryMap.popMap();
+            if (factoryMap.getMapCount() == 0) {
+                FACTORIES.set(null);
+            }
+        } else {
+            throw new IllegalStateException("The factories stack is already empty.");
+        }
+    }
+
+    public static synchronized Map getCurrentFactories() {
+        Map factories = FACTORIES.get();
+        if (factories == null) {
+            factories = GLOBAL_FACTORIES;
+            if (factories == null) {
+                factories = Collections.EMPTY_MAP;
+            }
+        } else if (GLOBAL_FACTORIES != null) {
+            CompositeMap cm = new CompositeMap();
+            cm.pushMap(GLOBAL_FACTORIES);
+            cm.pushMap(factories);
+            factories = cm;
+        }
+        return factories;
+    }
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceFactoriesManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceFactoriesManager.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceFactoriesManager.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceIOInputStream.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceIOInputStream.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceIOInputStream.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceIOInputStream.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.jnet.source;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceFactory;
+
+public class SourceIOInputStream extends InputStream {
+
+    protected final InputStream delegate;
+
+    protected final Source source;
+
+    protected boolean closed;
+
+    protected final SourceFactory factory;
+
+    public SourceIOInputStream(SourceFactory factory, Source source) throws IOException {
+        this.source = source;
+        this.delegate = source.getInputStream();
+        this.factory = factory;
+        this.closed = false;
+    }
+
+    /**
+     * @see java.io.InputStream#available()
+     */
+    public int available() throws IOException {
+        this.check();
+        return this.delegate.available();
+    }
+
+    /**
+     * @see java.io.InputStream#close()
+     */
+    public void close() throws IOException {
+        if ( !this.closed ) {
+            this.closed = true;
+            IOException e = null;
+            try {
+                this.delegate.close();
+            } catch (IOException i) {
+                e = i;
+            } finally {
+                this.factory.release(this.source);
+            }
+            if ( e != null ) {
+                throw e;
+            }
+        }
+    }
+
+    /**
+     * @see java.io.InputStream#mark(int)
+     */
+    public void mark(int arg0) {
+        this.delegate.mark(arg0);
+    }
+
+    /**
+     * @see java.io.InputStream#markSupported()
+     */
+    public boolean markSupported() {
+        return this.delegate.markSupported();
+    }
+
+    /**
+     * @see java.io.InputStream#read()
+     */
+    public int read() throws IOException {
+        this.check();
+        return this.delegate.read();
+    }
+
+    /**
+     * @see java.io.InputStream#read(byte[], int, int)
+     */
+    public int read(byte[] arg0, int arg1, int arg2) throws IOException {
+        this.check();
+        return this.delegate.read(arg0, arg1, arg2);
+    }
+
+    /**
+     * @see java.io.InputStream#read(byte[])
+     */
+    public int read(byte[] arg0) throws IOException {
+        this.check();
+        return this.delegate.read(arg0);
+    }
+
+    /**
+     * @see java.io.InputStream#reset()
+     */
+    public void reset() throws IOException {
+        this.check();
+        this.delegate.reset();
+    }
+
+    /**
+     * @see java.io.InputStream#skip(long)
+     */
+    public long skip(long arg0) throws IOException {
+        this.check();
+        return this.delegate.skip(arg0);
+    }
+
+    protected void check() throws IOException {
+        if ( this.closed ) {
+            throw new IOException("Input stream has already been closed.");
+        }
+    }
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceIOInputStream.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceIOInputStream.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceIOInputStream.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceSAXResult.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceSAXResult.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceSAXResult.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceSAXResult.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.jnet.source;
+
+import javax.xml.transform.sax.SAXResult;
+
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceFactory;
+import org.apache.excalibur.xml.sax.XMLizable;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+public class SourceSAXResult extends SAXResult {
+
+    protected final Source source;
+
+    protected final SourceFactory factory;
+
+    protected final XMLizable xmlizable;
+
+    protected boolean closed = false;
+
+    public SourceSAXResult(final SourceFactory f, final Source s, final XMLizable x) {
+        this.factory = f;
+        this.source = s;
+        this.xmlizable = x;
+    }
+
+    @Override
+    public void setHandler(ContentHandler handler) {
+        if (!this.closed) {
+            try {
+                this.xmlizable.toSAX(handler);
+            } catch (SAXException se) {
+                throw new RuntimeException(se);
+            } finally {
+                this.closed = true;
+                this.factory.release(this.source);
+            }
+        } else {
+            throw new RuntimeException("Source already closed.");
+        }
+    }
+
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceSAXResult.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceSAXResult.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceSAXResult.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLConnection.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLConnection.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLConnection.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLConnection.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.jnet.source;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.transform.sax.SAXResult;
+
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceFactory;
+import org.apache.excalibur.xml.sax.XMLizable;
+
+public class SourceURLConnection extends URLConnection {
+
+    protected final SourceFactory factory;
+
+    protected final String url;
+
+    protected Source source;
+
+    protected Map requestProperties;
+
+    protected String contentType = "text/plain";
+
+    public SourceURLConnection(SourceFactory factory, URL url) {
+        super(url);
+        this.factory = factory;
+        this.url = url.toExternalForm();
+    }
+
+    /**
+     * @see java.net.URLConnection#connect()
+     */
+    @Override
+    public void connect() throws IOException {
+        if (this.source != null) {
+            this.factory.release(this.source);
+            this.source = null;
+            throw new IllegalStateException("Connection to " + this.url + " already established.");
+        }
+        this.source = this.factory.getSource(this.url, this.getRequestProperties());
+        this.connected = true;
+        final String contentType = this.source.getMimeType();
+        if (contentType == null) {
+            this.contentType = contentType;
+        }
+    }
+
+    /**
+     * @see java.net.URLConnection#getInputStream()
+     */
+    @Override
+    public InputStream getInputStream() throws IOException {
+        if (!this.connected) {
+            this.connect();
+        }
+        final InputStream is;
+        is = new SourceIOInputStream(this.factory, this.source);
+        return is;
+    }
+
+    /**
+     * @see java.net.URLConnection#addRequestProperty(java.lang.String,
+     *      java.lang.String)
+     */
+    @Override
+    public void addRequestProperty(String arg0, String arg1) {
+        this.setRequestProperty(arg0, arg1);
+    }
+
+    /**
+     * @see java.net.URLConnection#getRequestProperties()
+     */
+    @Override
+    public Map getRequestProperties() {
+        if (this.connected) {
+            throw new IllegalStateException("Already connected");
+        }
+        if (this.requestProperties == null) {
+            return Collections.EMPTY_MAP;
+        }
+        return this.requestProperties;
+    }
+
+    /**
+     * @see java.net.URLConnection#getRequestProperty(java.lang.String)
+     */
+    @Override
+    public String getRequestProperty(String key) {
+        if (this.connected) {
+            throw new IllegalStateException("Already connected");
+        }
+        if (key == null) {
+            throw new NullPointerException("key is null");
+        }
+        if (this.requestProperties == null) {
+            return null;
+        }
+        return (String) this.requestProperties.get(key);
+    }
+
+    /**
+     * @see java.net.URLConnection#setRequestProperty(java.lang.String,
+     *      java.lang.String)
+     */
+    @Override
+    public void setRequestProperty(String key, String value) {
+        if (this.connected) {
+            throw new IllegalStateException("Already connected");
+        }
+        if (key == null) {
+            throw new NullPointerException("key is null");
+        }
+        if (this.requestProperties == null) {
+            this.requestProperties = new HashMap();
+        }
+        if (value == null) {
+            this.requestProperties.remove(key);
+        } else {
+            this.requestProperties.put(key, value);
+        }
+    }
+
+    /**
+     * @see java.net.URLConnection#getContentType()
+     */
+    @Override
+    public String getContentType() {
+        return this.contentType;
+    }
+
+    @Override
+    public Object getContent(Class[] classes) throws IOException {
+        if (!this.connected) {
+            this.connect();
+        }
+        if (this.source instanceof XMLizable && classes != null) {
+            boolean found = false;
+            int index = 0;
+            while (!found && index < classes.length) {
+                if (classes[index].getName().equals(SAXResult.class.getName())) {
+                    found = true;
+                } else {
+                    index++;
+                }
+            }
+            if (found) {
+                return new SourceSAXResult(this.factory, this.source, (XMLizable) this.source);
+            }
+        }
+        return super.getContent(classes);
+    }
+
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLConnection.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLConnection.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandler.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandler.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandler.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandler.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.jnet.source;
+
+import java.io.IOException;
+import java.net.Proxy;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+import org.apache.excalibur.source.SourceFactory;
+
+public class SourceURLStreamHandler extends URLStreamHandler {
+
+    protected final SourceFactory sourceFactory;
+
+    public SourceURLStreamHandler(SourceFactory factory) {
+        this.sourceFactory = factory;
+    }
+
+    protected URLConnection openConnection(URL url) throws IOException {
+        return new SourceURLConnection(this.sourceFactory, url);
+    }
+
+    /**
+     * @see java.net.URLStreamHandler#openConnection(java.net.URL, java.net.Proxy)
+     */
+    protected URLConnection openConnection(URL url, Proxy proxy) throws IOException {
+        return this.openConnection(url);
+    }
+
+
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandler.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandlerFactory.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandlerFactory.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandlerFactory.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandlerFactory.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.jnet.source;
+
+import java.net.URLStreamHandler;
+import java.util.Map;
+
+import org.apache.excalibur.source.SourceFactory;
+import org.apache.excalibur.sourceresolve.jnet.ParentAwareURLStreamHandlerFactory;
+
+public class SourceURLStreamHandlerFactory extends ParentAwareURLStreamHandlerFactory {
+
+    /**
+     * @see org.apache.excalibur.sourceresolve.jnet.ParentAwareURLStreamHandlerFactory#create(java.lang.String)
+     */
+    @Override
+    protected URLStreamHandler create(String protocol) {
+        final Map factories = SourceFactoriesManager.getCurrentFactories();
+        final SourceFactory factory = (SourceFactory) factories.get(protocol);
+        if (factory != null) {
+            return new SourceURLStreamHandler(factory);
+        }
+        return null;
+    }
+
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandlerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandlerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/jnet/source/SourceURLStreamHandlerFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSource.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSource.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSource.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSource.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,488 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URLConnection;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+
+import org.apache.excalibur.source.ModifiableSource;
+import org.apache.excalibur.source.ModifiableTraversableSource;
+import org.apache.excalibur.source.MoveableSource;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.SourceNotFoundException;
+import org.apache.excalibur.source.SourceUtil;
+import org.apache.excalibur.source.SourceValidity;
+
+/**
+ * A {@link ModifiableTraversableSource} for filesystem objects.
+ * 
+ * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
+ * @version $Id$
+ */
+
+public class FileSource implements ModifiableTraversableSource, MoveableSource {
+
+    /** The file */
+    private File m_file;
+
+    /** The scheme */
+    private String m_scheme;
+
+    /** The URI of this source */
+    private String m_uri;
+
+    /**
+     * Builds a FileSource given an URI, which doesn't necessarily have to start
+     * with "file:"
+     * 
+     * @param uri
+     * @throws SourceException
+     * @throws MalformedURLException
+     */
+    public FileSource(String uri) throws SourceException, MalformedURLException {
+        int pos = SourceUtil.indexOfSchemeColon(uri);
+        if (pos == -1) {
+            throw new MalformedURLException("Invalid URI : " + uri);
+        }
+
+        String scheme = uri.substring(0, pos);
+        String fileName = uri.substring(pos + 1);
+        fileName = SourceUtil.decodePath(fileName);
+        this.init(scheme, new File(fileName));
+    }
+
+    /**
+     * Builds a FileSource, given an URI scheme and a File.
+     * 
+     * @param scheme
+     * @param file
+     * @throws SourceException
+     */
+    public FileSource(String scheme, File file) throws SourceException {
+        this.init(scheme, file);
+    }
+
+    private void init(String scheme, File file) throws SourceException {
+        this.m_scheme = scheme;
+
+        String uri;
+        try {
+            uri = file.toURL().toExternalForm();
+            // toExternalForm() is buggy, see e.g.
+            // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4924415
+            // therefore we check if file: is followed by just one slash
+            // TODO when we move to JDK 1.4+, we should use
+            // file.toURI().toASCIIString() instead.
+            if (uri.length() > 6 && uri.startsWith("file:/") && uri.charAt(6) != '/') {
+                uri = "file:///" + uri.substring(6);
+            }
+        } catch (MalformedURLException mue) {
+            // Can this really happen ?
+            throw new SourceException("Failed to get URL for file " + file, mue);
+        }
+
+        if (!uri.startsWith(scheme)) {
+            // Scheme is not "file:"
+            uri = scheme + ':' + uri.substring(uri.indexOf(':') + 1);
+        }
+
+        this.m_uri = uri;
+
+        this.m_file = file;
+    }
+
+    /**
+     * Get the associated file
+     */
+    public File getFile() {
+        return this.m_file;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Source interface methods
+    // ----------------------------------------------------------------------------------
+
+    /**
+     * @see org.apache.excalibur.source.Source#getContentLength()
+     */
+    public long getContentLength() {
+        return this.m_file.length();
+    }
+
+    /**
+     * @see org.apache.excalibur.source.Source#getInputStream()
+     */
+    public InputStream getInputStream() throws IOException, SourceNotFoundException {
+        try {
+            return new FileInputStream(this.m_file);
+        } catch (FileNotFoundException fnfe) {
+            throw new SourceNotFoundException(this.m_uri + " doesn't exist.", fnfe);
+        }
+    }
+
+    /**
+     * @see org.apache.excalibur.source.Source#getLastModified()
+     */
+    public long getLastModified() {
+        return this.m_file.lastModified();
+    }
+
+    /**
+     * @see org.apache.excalibur.source.Source#getMimeType()
+     */
+    public String getMimeType() {
+        return URLConnection.getFileNameMap().getContentTypeFor(this.m_file.getName());
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.excalibur.source.Source#getScheme()
+     */
+    public String getScheme() {
+        return this.m_scheme;
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.excalibur.source.Source#getURI()
+     */
+    public String getURI() {
+        return this.m_uri;
+    }
+
+    /*
+     * FIXME don't use specific SourceValidity stuff here!
+     */
+    /**
+     * Return a validity object based on the file's modification date.
+     * 
+     * @see org.apache.excalibur.source.Source#getValidity()
+     */
+    public SourceValidity getValidity() {
+        return null;
+    }
+
+    /**
+     * @see org.apache.excalibur.source.Source#refresh()
+     */
+    public void refresh() {
+        // Nothing to do...
+    }
+
+    /**
+     * Does this source actually exist ?
+     * 
+     * @return true if the resource exists.
+     */
+    public boolean exists() {
+        return this.getFile().exists();
+    }
+
+    // ----------------------------------------------------------------------------------
+    // TraversableSource interface methods
+    // ----------------------------------------------------------------------------------
+
+    /**
+     * @see org.apache.excalibur.source.TraversableSource#getChild(java.lang.String)
+     */
+    public Source getChild(String name) throws SourceException {
+        if (!this.m_file.isDirectory()) {
+            throw new SourceException(this.getURI() + " is not a directory");
+        }
+
+        return new FileSource(this.getScheme(), new File(this.m_file, name));
+
+    }
+
+    /**
+     * @see org.apache.excalibur.source.TraversableSource#getChildren()
+     */
+    public Collection getChildren() throws SourceException {
+
+        if (!this.m_file.isDirectory()) {
+            throw new SourceException(this.getURI() + " is not a directory");
+        }
+
+        // Build a FileSource object for each of the children
+        File[] files = this.m_file.listFiles();
+
+        FileSource[] children = new FileSource[files.length];
+        for (int i = 0; i < files.length; i++) {
+            children[i] = new FileSource(this.getScheme(), files[i]);
+        }
+
+        // Return it as a list
+        return Arrays.asList(children);
+    }
+
+    /**
+     * @see org.apache.excalibur.source.TraversableSource#getName()
+     */
+    public String getName() {
+        return this.m_file.getName();
+    }
+
+    /**
+     * @see org.apache.excalibur.source.TraversableSource#getParent()
+     */
+    public Source getParent() throws SourceException {
+        return new FileSource(this.getScheme(), this.m_file.getParentFile());
+    }
+
+    /**
+     * @see org.apache.excalibur.source.TraversableSource#isCollection()
+     */
+    public boolean isCollection() {
+        return this.m_file.isDirectory();
+    }
+
+    // ----------------------------------------------------------------------------------
+    // ModifiableSource interface methods
+    // ----------------------------------------------------------------------------------
+
+    /**
+     * Get an <code>InputStream</code> where raw bytes can be written to. The
+     * signification of these bytes is implementation-dependent and is not
+     * restricted to a serialized XML document.
+     * 
+     * The output stream returned actually writes to a temp file that replaces
+     * the real one on close. This temp file is used as lock to forbid multiple
+     * simultaneous writes. The real file is updated atomically when the output
+     * stream is closed.
+     * 
+     * The returned stream must be closed or cancelled by the calling code.
+     * 
+     * @return a stream to write to
+     * @throws ConcurrentModificationException
+     *             if another thread is currently writing to this file.
+     */
+    public OutputStream getOutputStream() throws IOException {
+        // Create a temp file. It will replace the right one when writing
+        // terminates,
+        // and serve as a lock to prevent concurrent writes.
+        File tmpFile = new File(this.getFile().getPath() + ".tmp");
+
+        // Ensure the directory exists
+        tmpFile.getParentFile().mkdirs();
+
+        // Can we write the file ?
+        if (this.getFile().exists() && !this.getFile().canWrite()) {
+            throw new IOException("Cannot write to file " + this.getFile().getPath());
+        }
+
+        // Check if it temp file already exists, meaning someone else currently
+        // writing
+        if (!tmpFile.createNewFile()) {
+            throw new ConcurrentModificationException("File " + this.getFile().getPath()
+                    + " is already being written by another thread");
+        }
+
+        // Return a stream that will rename the temp file on close.
+        return new FileSourceOutputStream(tmpFile, this);
+    }
+
+    /**
+     * Can the data sent to an <code>OutputStream</code> returned by
+     * {@link #getOutputStream()} be cancelled ?
+     * 
+     * @return true if the stream can be cancelled
+     */
+    public boolean canCancel(OutputStream stream) {
+        if (stream instanceof FileSourceOutputStream) {
+            FileSourceOutputStream fsos = (FileSourceOutputStream) stream;
+            if (fsos.getSource() == this) {
+                return fsos.canCancel();
+            }
+        }
+
+        // Not a valid stream for this source
+        throw new IllegalArgumentException("The stream is not associated to this source");
+    }
+
+    /**
+     * Cancel the data sent to an <code>OutputStream</code> returned by
+     * {@link #getOutputStream()}.
+     * <p>
+     * After cancel, the stream should no more be used.
+     */
+    public void cancel(OutputStream stream) throws SourceException {
+        if (stream instanceof FileSourceOutputStream) {
+            FileSourceOutputStream fsos = (FileSourceOutputStream) stream;
+            if (fsos.getSource() == this) {
+                try {
+                    fsos.cancel();
+                } catch (Exception e) {
+                    throw new SourceException("Exception during cancel.", e);
+                }
+                return;
+            }
+        }
+
+        // Not a valid stream for this source
+        throw new IllegalArgumentException("The stream is not associated to this source");
+    }
+
+    /**
+     * Delete the source.
+     */
+    public void delete() throws SourceException {
+        if (!this.m_file.exists()) {
+            throw new SourceNotFoundException("Cannot delete non-existing file " + this.m_file.toString());
+        }
+
+        if (!this.m_file.delete()) {
+            throw new SourceException("Could not delete " + this.m_file.toString() + " (unknown reason)");
+        }
+    }
+
+    // ----------------------------------------------------------------------------------
+    // ModifiableTraversableSource interface methods
+    // ----------------------------------------------------------------------------------
+
+    /**
+     * @see org.apache.excalibur.source.ModifiableTraversableSource#makeCollection()
+     */
+    public void makeCollection() throws SourceException {
+        this.m_file.mkdirs();
+    }
+
+    // ----------------------------------------------------------------------------------
+    // MoveableSource interface methods
+    // ----------------------------------------------------------------------------------
+
+    /**
+     * @see org.apache.excalibur.source.MoveableSource#copyTo(org.apache.excalibur.source.Source)
+     */
+    public void copyTo(Source destination) throws SourceException {
+        try {
+            SourceUtil.copy(this.getInputStream(), ((ModifiableSource) destination).getOutputStream());
+        } catch (IOException ioe) {
+            throw new SourceException("Couldn't copy " + this.getURI() + " to " + destination.getURI(), ioe);
+        }
+    }
+
+    /**
+     * @see org.apache.excalibur.source.MoveableSource#moveTo(org.apache.excalibur.source.Source)
+     */
+    public void moveTo(Source destination) throws SourceException {
+        if (destination instanceof FileSource) {
+            final File dest = ((FileSource) destination).getFile();
+            final File parent = dest.getParentFile();
+
+            if (parent != null) {
+                parent.mkdirs(); // ensure parent directories exist
+            }
+
+            if (!this.m_file.renameTo(dest)) {
+                throw new SourceException("Couldn't move " + this.getURI() + " to " + destination.getURI());
+            }
+        } else {
+            SourceUtil.move(this, destination);
+        }
+
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Private helper class for ModifiableSource implementation
+    // ----------------------------------------------------------------------------------
+
+    /**
+     * A file outputStream that will rename the temp file to the destination
+     * file upon close() and discard the temp file upon cancel().
+     */
+    private static class FileSourceOutputStream extends FileOutputStream {
+
+        private File m_tmpFile;
+
+        private boolean m_isClosed = false;
+
+        private FileSource m_source;
+
+        public FileSourceOutputStream(File tmpFile, FileSource source) throws IOException {
+            super(tmpFile);
+            this.m_tmpFile = tmpFile;
+            this.m_source = source;
+        }
+
+        @Override
+        public void close() throws IOException {
+            if (!this.m_isClosed) {
+                super.close();
+                try {
+                    // Delete destination file
+                    if (this.m_source.getFile().exists()) {
+                        this.m_source.getFile().delete();
+                    }
+                    // Rename temp file to destination file
+                    if (!this.m_tmpFile.renameTo(this.m_source.getFile())) {
+                        throw new IOException("Could not rename " + this.m_tmpFile.getAbsolutePath() + " to "
+                                + this.m_source.getFile().getAbsolutePath());
+                    }
+
+                } finally {
+                    // Ensure temp file is deleted, ie lock is released.
+                    // If there was a failure above, written data is lost.
+                    if (this.m_tmpFile.exists()) {
+                        this.m_tmpFile.delete();
+                    }
+                    this.m_isClosed = true;
+                }
+            }
+
+        }
+
+        public boolean canCancel() {
+            return !this.m_isClosed;
+        }
+
+        public void cancel() throws Exception {
+            if (this.m_isClosed) {
+                throw new IllegalStateException("Cannot cancel : outputstrem is already closed");
+            }
+
+            this.m_isClosed = true;
+            super.close();
+            this.m_tmpFile.delete();
+        }
+
+        @Override
+        public void finalize() {
+            if (!this.m_isClosed && this.m_tmpFile.exists()) {
+                // Something wrong happened while writing : delete temp file
+                this.m_tmpFile.delete();
+            }
+        }
+
+        public FileSource getSource() {
+            return this.m_source;
+        }
+    }
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSource.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSource.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSourceFactory.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSourceFactory.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSourceFactory.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSourceFactory.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.test;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.Map;
+
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceFactory;
+import org.apache.excalibur.source.SourceUtil;
+import org.apache.excalibur.source.URIAbsolutizer;
+
+/**
+ * A factory for filesystem-based sources (see {@link FileSource}).
+ * 
+ * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
+ * @version $Id$
+ */
+public class FileSourceFactory implements SourceFactory, URIAbsolutizer {
+
+    /**
+     * @see org.apache.excalibur.source.SourceFactory#getSource(java.lang.String,
+     *      java.util.Map)
+     */
+    public Source getSource(String location, Map parameters) throws IOException, MalformedURLException {
+        return new FileSource(location);
+    }
+
+    /**
+     * Does nothing, since {@link FileSource}s don't need to be released.
+     * 
+     * @see org.apache.excalibur.source.SourceFactory#release(org.apache.excalibur.source.Source)
+     */
+    public void release(Source source) {
+        // Nothing to do here
+    }
+
+    public String absolutize(String baseURI, String location) {
+        // Call the absolutize utility method with false for the normalizePath
+        // argument.
+        // This avoids the removal of "../" from the path.
+        // This way, the "../" will be resolved by the operating system, which
+        // might
+        // do things differently e.g. in case of symbolic links.
+        return SourceUtil.absolutize(baseURI, location, false, false);
+    }
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSourceFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSourceFactory.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/FileSourceFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/Test.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/Test.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/Test.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/Test.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.excalibur.sourceresolve.test;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.excalibur.source.SourceFactory;
+import org.apache.excalibur.sourceresolve.jnet.Installer;
+import org.apache.excalibur.sourceresolve.jnet.source.SourceFactoriesManager;
+import org.apache.excalibur.sourceresolve.jnet.source.SourceURLStreamHandlerFactory;
+
+public class Test {
+
+    public static void main(String[] args) {
+        try {
+            Installer.setURLStreamHandlerFactory(new SourceURLStreamHandlerFactory());
+            Installer.setURLStreamHandlerFactory(new SourceURLStreamHandlerFactory());
+            final Map<String, SourceFactory> factories = new HashMap<String, SourceFactory>();
+            factories.put("carsten", new FileSourceFactory());
+            SourceFactoriesManager.setGlobalFactories(factories);
+            final URL url = new URL("carsten:///F:/os/cocoon/trunk/pom.xml");
+            final InputStream is = (InputStream) url.getContent();
+            final byte[] b = new byte[100];
+            int l = is.read(b);
+            System.out.println(new String(b, 0, l));
+            is.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/Test.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/sourceresolve/test/Test.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/xml/sax/XMLizable.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/xml/sax/XMLizable.java?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/xml/sax/XMLizable.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/xml/sax/XMLizable.java Fri Mar 21 06:54:32 2008
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.excalibur.xml.sax;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+public interface XMLizable {
+
+    void toSAX(ContentHandler handler) throws SAXException;
+
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/xml/sax/XMLizable.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/xml/sax/XMLizable.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/excalibur/xml/sax/XMLizable.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/COB-INF/sitemap.xmap
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/COB-INF/sitemap.xmap?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/COB-INF/sitemap.xmap (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/COB-INF/sitemap.xmap Fri Mar 21 06:54:32 2008
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<map:sitemap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://apache.org/cocoon/sitemap/1.0 http://cocoon.apache.org/schema/sitemap/cocoon-sitemap-1.0.xsd"
+  xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+
+  <map:flow language="it-controller" />
+
+  <map:pipelines>
+    <!-- ~~~~~~~~~~~~~~~~ map:read ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="read">
+      <map:match pattern="">
+        <map:read src="overview.html" />
+      </map:match>
+      <map:match pattern="read/javascript-resource-explicit">
+        <map:read src="read/javascript-resource" mime-type="text/javascript" />
+      </map:match>
+      <map:match pattern="read/javascript-resource-implicit">
+        <map:read src="read/javascript-resource.js" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ sax pipelines ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="sax-pipelines">
+      <map:match pattern="sax-pipeline/simple">
+        <map:generate src="sax-pipeline/simple.xml" />
+        <map:transform src="sax-pipeline/simple.xslt">
+          <map:parameter name="myParam" value="1" />
+        </map:transform>
+        <map:serialize />
+      </map:match>
+      <map:match pattern="sax-pipeline/simple-xhtml">
+        <map:generate src="sax-pipeline/simple.xml" />
+        <map:transform src="sax-pipeline/simple.xslt">
+          <map:parameter name="myParam" value="2" />
+        </map:transform>
+        <map:serialize type="xhtml" />
+      </map:match>
+      <map:match pattern="sax-pipeline/simple-xml">
+        <map:generate src="sax-pipeline/simple.xml" />
+        <map:transform src="sax-pipeline/simple.xslt">
+          <map:parameter name="myParam" value="3" />
+        </map:transform>
+        <map:serialize type="xml" />
+      </map:match>
+      <map:match pattern="sax-pipeline/unauthorized">
+        <map:generate src="sax-pipeline/unauthorized.xml" />
+        <map:serialize type="xhtml" status-code="401" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ caching of pipelines ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="caching-pipeline-on">
+      <map:match pattern="caching-pipeline/on">
+        <map:generate type="date" />
+        <map:serialize type="xml" />
+      </map:match>
+    </map:pipeline>
+
+    <map:pipeline id="caching-pipeline-off" type="noncaching">
+      <map:match pattern="caching-pipeline/off">
+        <map:generate type="date" />
+        <map:serialize type="xml" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ servlet service framework ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="ssf">
+      <map:match pattern="ssf/local">
+        <map:generate src="servlet:/sax-pipeline/simple-xml" />
+        <map:serialize type="xml" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ expression language ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="expression-language">
+      <map:match pattern="expression-language/jexl">
+        <map:generate src="sax-pipeline/{jexl:cocoon.request.fileName}.xml" />
+        <map:serialize type="xml" />
+      </map:match>
+      <map:match pattern="expression-language/jxpath">
+        <map:generate src="sax-pipeline/{$cocoon/request/parameters/fileName}.xml" />
+        <map:serialize type="xml" />
+      </map:match>
+      <map:match pattern="expression-language/map/*">
+        <map:generate src="sax-pipeline/{map:1}.xml" />
+        <map:serialize type="xml" />
+      </map:match>
+      <map:match pattern="**">
+        <map:match pattern="expression-language/*/*">
+          <map:match pattern="expression-language/nested/*">
+            <map:generate src="sax-pipeline/{map:../2}.xml" />
+            <map:serialize type="xml" />
+          </map:match>
+          <map:match pattern="expression-language/nested2/*">
+            <map:generate src="sax-pipeline/{map:1}.xml" />
+            <map:serialize type="xml" />
+          </map:match>
+        </map:match>
+      </map:match>
+      <map:match pattern="expression-language/**">
+        <map:match pattern="expression-language/nested3/*">
+          <map:generate src="sax-pipeline/{map:1}.xml" />
+          <map:serialize type="xml" />
+        </map:match>
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ aggregation ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="aggregation">
+      <map:match pattern="aggregation/include-transformer">
+        <map:generate src="aggregation/include.xml" />
+        <map:transform type="include" />
+        <map:serialize type="xml" />
+      </map:match>
+      <map:match pattern="aggregation/sub-request">
+        <map:generate src="aggregation/sub.xml" />
+        <map:serialize type="xml" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ xslt ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="xslt">
+      <map:match pattern="xslt/main">
+        <map:generate src="sax-pipeline/simple.xml" />
+        <map:transform src="xslt/main.xslt" />
+        <map:serialize type="xml" />
+      </map:match>
+      <map:match pattern="xslt/sub-servlet.xslt">
+        <map:generate src="xslt/sub-servlet.xslt" />
+        <map:serialize type="xml" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ matcher: parameter passing ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="parameter-passing">
+      <map:match pattern="parameter-passing/failing">
+        <map:match type="parameter-passing" pattern="empty">
+          <map:generate src="sax-pipeline/simple.xml" />
+          <map:serialize />
+        </map:match>
+      </map:match>
+      <map:match pattern="parameter-passing/working">
+        <map:match type="parameter-passing">
+          <map:generate src="sax-pipeline/simple.xml" />
+          <map:serialize type="xml" />
+        </map:match>
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ object model ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="object-model">
+      <map:match pattern="object-model/request-parameters">
+        <map:generate type="request-parameters" />
+        <map:serialize type="xml" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ controller ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="controller">
+      <map:match pattern="controller/invoke">
+        <map:call function="any-function" />
+      </map:match>
+      <map:match pattern="controller/continue">
+        <map:call continuation="any-continuation" />
+      </map:match>
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ redirect ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="redirect">
+      <map:match pattern="redirect/www.orf.at">
+        <map:redirect-to uri="http://www.orf.at" />
+      </map:match>
+      <!-- Redirecting to a servlet service doesn't work -->
+      <!--map:match pattern="redirect/sax-pipeline/simple-xml">
+        <map:redirect-to uri="servlet:/sax-pipeline/simple-xml"/>
+        </map:match-->
+    </map:pipeline>
+
+    <!-- ~~~~~~~~~~~~~~~~ error handling ~~~~~~~~~~~~~~~ -->
+    <map:pipeline id="error-handling-1">
+      <map:match pattern="error-handling/custom-error">
+        <map:act type="error-throwing" />
+        <map:generate src="sax-pipeline/simple.xml" />
+        <map:serialize type="xml" />
+      </map:match>
+    </map:pipeline>
+    <!-- doesn't work: when this per pipeline error handler is active, it catches ALL error and
+      the per-sitemap error handler will never be reached. -->
+    <map:pipeline id="error-handling-2">
+      <map:match pattern="error-handling/custom-error-per-pipeline-error-handling">
+        <map:act type="error-throwing" />
+        <map:generate src="sax-pipeline/simple.xml" />
+        <map:serialize type="xml" />
+      </map:match>
+      <map:handle-errors>
+        <map:generate src="error-handling/501.xml" />
+        <map:serialize type="xhtml" status-code="501" />
+      </map:handle-errors>
+    </map:pipeline>
+    <map:handle-errors>
+      <map:select type="custom-exception">
+        <map:when test="not-found">
+          <map:generate src="error-handling/404.xml" />
+          <map:serialize type="xhtml" status-code="404" />
+        </map:when>
+        <map:when test="custom-exception">
+          <map:generate src="error-handling/500.xml" />
+          <map:serialize type="xhtml" status-code="500" />
+        </map:when>
+        <map:otherwise>
+          <map:generate type="exception" src="error-handling/503.xml" />
+          <map:serialize type="xhtml" status-code="503" />
+        </map:otherwise>
+      </map:select>
+    </map:handle-errors>
+  </map:pipelines>
+
+</map:sitemap>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/COB-INF/sitemap.xmap
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/COB-INF/sitemap.xmap
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/COB-INF/sitemap.xmap
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/META-INF/cocoon/spring/servlet-service.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/META-INF/cocoon/spring/servlet-service.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/META-INF/cocoon/spring/servlet-service.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/META-INF/cocoon/spring/servlet-service.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you 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
+  und
+-->
+<!-- $Id$ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:servlet="http://cocoon.apache.org/schema/servlet"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+  http://cocoon.apache.org/schema/servlet http://cocoon.apache.org/schema/servlet/cocoon-servlet-1.0.xsd">
+
+  <bean id="org.apache.cocoon.corona.demo.servlet" class="org.apache.cocoon.corona.servlet.SitemapServlet">
+    <servlet:context mount-path="" context-path="blockcontext:/corona-servlet/"/>
+  </bean>
+
+</beans>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/META-INF/cocoon/spring/servlet-service.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/META-INF/cocoon/spring/servlet-service.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/META-INF/cocoon/spring/servlet-service.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/include.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/include.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/include.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/include.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<sample>
+  <i:include xmlns:i="http://apache.org/cocoon/include/1.0"
+    src="servlet:/aggregation/sub-request"/>
+</sample>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/include.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/include.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/include.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/sub.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/sub.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/sub.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/sub.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<sub>sub</sub>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/sub.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/sub.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/aggregation/sub.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/404.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/404.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/404.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/404.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<html>
+  <head>
+    <title>404 Resource Not Available (Cocoon Integration Tests)</title>
+  </head>
+  <body>404 Resource Not Available (Cocoon Integration Tests)</body>
+</html>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/404.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/404.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/404.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/500.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/500.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/500.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/500.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<html>
+  <head>
+    <title>Error 500 (Cocoon Integration Tests)</title>
+  </head>
+  <body>Error 500 (Cocoon Integration Tests)</body>
+</html>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/500.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/500.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/500.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/501.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/501.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/501.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/501.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<html>
+  <head>
+    <title>Error 501 (Cocoon Integration Tests)</title>
+  </head>
+  <body>Error 501 (Cocoon Integration Tests)</body>
+</html>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/501.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/501.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/501.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/503.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/503.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/503.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/503.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<html>
+  <head>
+    <title>Error 503 (Cocoon Integration Tests)</title>
+  </head>
+  <body>Error 503 (Cocoon Integration Tests)</body>
+</html>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/503.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/503.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/error-handling/503.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/overview.html
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/overview.html?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/overview.html (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/overview.html Fri Mar 21 06:54:32 2008
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<html>
+  <head>
+    <title>Micro Cocoon Integration Tests: Overview</title>
+  <base target="_blank"/>
+  </head>
+  <body>
+    <h1>Micro Cocoon Integration Tests</h1>
+  <h2>map:read</h2>
+  <ul>
+    <li><a href="read/javascript-resource-explicit">Javascript Resource</a>: Test explicit setting of mime-type.</li>
+    <li><a href="read/javascript-resource-implicit">Javascript Resource</a>: Test automatic setting of mime-type.</li>
+  </ul>
+  <h2>SAX Pipelines</h2>
+  <ul>
+    <li><a href="sax-pipeline/simple">SAX Pipeline</a>: Simplest possible pipeline that has a generator, transformer and serializer.</li>
+    <li><a href="sax-pipeline/simple-xhtml">SAX Pipeline</a>: Same as before but creates XHTML as output format.</li>
+    <li><a href="sax-pipeline/simple-xml">SAX Pipeline</a>: Same as before but creates XML as output format.</li>
+    <li><a href="sax-pipeline/unauthorized">Status code</a>: Set status code '401' at pipeline.</li>
+  </ul>
+  <h2>Error handling</h2>
+  <ul>
+    <li><a href="123456789123456789">ResourceNotFound</a>: The error handler catches all exceptions, in this case no matcher matches.</li>
+    <li><a href="error-handling/custom-error">Custom error - Sitemap</a>: Catch a custom error in the sitemap.</li>
+    <li><a href="error-handling/custom-error-per-pipeline-error-handling">
+      Custom error - Pipeline</a>: Catch a custom error using a per-pipeline error handler. <b>*** doesn't work ***</b></li>
+  </ul>
+  <h2>Servlet-Service-Components and servlet: protocol</h2>
+  <ul>
+    <li><a href="ssf/local">servlet:/</a>: Using a local servlet service.</li>
+  </ul>
+  <h2>Expression language</h2>
+  <ul>
+    <li><a href="expression-language/jexl?fileName=simple">request attribute (jexl)</a>: Accessing a request attribute using Jexl.</li>
+    <li><a href="expression-language/jxpath?fileName=simple">request attribute (jxpath)</a>: Accessing a request attribute using JXPath.</li>
+    <li><a href="expression-language/map/simple">sitemap parameter</a>: Accessing a sitemap parameter.</li>
+    <li><a href="expression-language/nested/simple">nested matchers</a>: Accessing a parameter from one level above.</li>
+  </ul>
+  <h2>Redirects</h2>
+  <ul>
+    <li><a href="redirect/www.orf.at">Temporary (302)</a>: Temporary redirect to orf.at.</li>
+  </ul>
+  <h2>Object Model</h2>
+  <ul>
+    <li><a href="object-model/request-parameters?a=1&b=2&c=3">All request parameters</a>: Print all request parameters.</li>
+  </ul>
+  <h2>Aggregation</h2>
+  <ul>
+    <li><a href="aggregation/include-transformer">Include-Transformer</a>: Aggregate XML using the IncludeTransformer.</li>
+  </ul>
+  <h2>XSLT</h2>
+  <ul>
+    <li><a href="xslt/main">XSLT Transformation</a>: An XSLT transformation that includes stylesheets via file and servlet protocol.</li>
+  </ul>
+  <h2>Parameter passing</h2>
+  <ul>
+    <li><a href="parameter-passing/working">Matching Matcher</a>: Passing a named parameter from a matcher to the sitemap.</li>
+    <li><a href="parameter-passing/failing">Not-Matching Matcher</a>: Passing null from a matcher to the sitemap.</li>
+  </ul>
+  <h2>Controller</h2>
+  <ul>
+    <li><a href="controller/invoke">Invoke a controller</a>: Invoke a controller (the first time). (returns 201)</li>
+    <li><a href="controller/continue">Continue</a>: Continue a controller. (returns 202)</li>
+  </ul>
+  </body>
+</html>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/overview.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/overview.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource Fri Mar 21 06:54:32 2008
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+function x() {
+  alert('x');
+}
\ No newline at end of file

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource.js
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource.js?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource.js (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource.js Fri Mar 21 06:54:32 2008
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+function x() {
+  alert('x');
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/read/javascript-resource.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/sax-pipeline/simple.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/sax-pipeline/simple.xml?rev=639645&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/sax-pipeline/simple.xml (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/sax-pipeline/simple.xml Fri Mar 21 06:54:32 2008
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<simple>simple-text</simple>

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/sax-pipeline/simple.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/sax-pipeline/simple.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/resources/sax-pipeline/simple.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml