You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by rg...@apache.org on 2006/11/18 02:59:27 UTC

svn commit: r476411 - /forrest/trunk/whiteboard/forrest2/core/org/apache/forrest/reader/ChainedReader.java

Author: rgardler
Date: Fri Nov 17 17:59:26 2006
New Revision: 476411

URL: http://svn.apache.org/viewvc?view=rev&rev=476411
Log:
 * A chained reader implements a psuedo protocol.
 * It is commonly used when you need to retrieve a
 * document that whose type cannot be identified
 * from the raw source alone.
 * 
 * It is defined in forrestContext.xml as follows:
 * 
 * <bean id="fooProtocol"
 *   class="org.apache.forrest.reader.ChainedReader" >
 *   <property name="docType"
 *             value="org.foo.Bar" />
 * </bean>
 * 
 * We can then define a chain of readers like this:
 *
 * <location pattern="classpath/foo.*">
 *   <source href="fooProtocol:classpath:/xdocs/exampleFeed.xml"/>
 * </location>
 *
 * <location pattern="file/foo.*">
 *    <source href="fooProtocol:file:/xdocs/exampleFeed.xml"/>
 * </location>
 * 
 * <location pattern="http/foo.*">
 *   <source href="fooProtocol:http:/xdocs/exampleFeed.xml"/>
 * </location>
 * 
 * etc.

[FOR-943]

Added:
    forrest/trunk/whiteboard/forrest2/core/org/apache/forrest/reader/ChainedReader.java   (with props)

Added: forrest/trunk/whiteboard/forrest2/core/org/apache/forrest/reader/ChainedReader.java
URL: http://svn.apache.org/viewvc/forrest/trunk/whiteboard/forrest2/core/org/apache/forrest/reader/ChainedReader.java?view=auto&rev=476411
==============================================================================
--- forrest/trunk/whiteboard/forrest2/core/org/apache/forrest/reader/ChainedReader.java (added)
+++ forrest/trunk/whiteboard/forrest2/core/org/apache/forrest/reader/ChainedReader.java Fri Nov 17 17:59:26 2006
@@ -0,0 +1,98 @@
+/*
+ * 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.forrest.reader;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.forrest.core.document.AbstractSourceDocument;
+import org.apache.forrest.core.document.DefaultSourceDocument;
+import org.apache.forrest.core.locationMap.Location;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+
+/**
+ * A chained reader implements a psuedo protocol.
+ * It is commonly used when you need to retrieve a
+ * document that whose type cannot be identified
+ * from the raw source alone.
+ * 
+ * It is defined in forrestContext.xml as follows:
+ * 
+ * <bean id="fooProtocol"
+ *   class="org.apache.forrest.reader.ChainedReader" >
+ *   <property name="docType"
+ *             value="org.foo.Bar" />
+ * </bean>
+ * 
+ * We can then define a chain of readers like this:
+ *
+ * <location pattern="classpath/foo.*">
+ *   <source href="fooProtocol:classpath:/xdocs/exampleFeed.xml"/>
+ * </location>
+ *
+ * <location pattern="file/foo.*">
+ *    <source href="fooProtocol:file:/xdocs/exampleFeed.xml"/>
+ * </location>
+ * 
+ * <location pattern="http/foo.*">
+ *   <source href="fooProtocol:http:/xdocs/exampleFeed.xml"/>
+ * </location>
+ * 
+ * etc.
+ * 
+ */
+public class ChainedReader extends AbstractReader {
+
+	private String docType;
+	
+	public AbstractSourceDocument read(AbstractXmlApplicationContext context,
+			final Location location) {
+		DefaultSourceDocument doc = null;
+		final URI psudeoURI = location.getSourceURI();
+		final String ssp = psudeoURI.getSchemeSpecificPart();
+		URI uri;
+		try {
+			uri = new URI(ssp);
+			location.setSourceURI(uri);
+			IReader reader;
+			reader = (IReader) context.getBean(uri.getScheme());
+			doc = (DefaultSourceDocument) reader.read(context, location);
+			if (doc != null) {
+				doc
+						.setType(getDocType());
+			}
+		} catch (final URISyntaxException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (MalformedURLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return doc;
+	}
+
+	public String getDocType() {
+		return docType;
+	}
+
+	public void setDocType(String docType) {
+		this.docType = docType;
+	}
+	
+	
+}

Propchange: forrest/trunk/whiteboard/forrest2/core/org/apache/forrest/reader/ChainedReader.java
------------------------------------------------------------------------------
    svn:eol-style = native