You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2002/06/12 12:14:54 UTC
cvs commit: xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source SlideSource.java repository.xconf
cziegeler 2002/06/12 03:14:53
Modified: lib jars.xml
src/java/org/apache/cocoon/components/source/impl
AvalonToCocoonSource.java CocoonToAvalonSource.java
SitemapSource.java
src/scratchpad/src/org/apache/cocoon/components/repository/impl
SlideSource.java
src/scratchpad/src/org/apache/cocoon/components/source
SlideSource.java repository.xconf
Added: lib/core avalon-excalibur-20020612.jar
Removed: lib/core avalon-excalibur-20020603.jar
Log:
Switched to latest excalibur and fixed error in slide source configuration
Revision Changes Path
1.12 +1 -1 xml-cocoon2/lib/jars.xml
Index: jars.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/lib/jars.xml,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- jars.xml 5 Jun 2002 00:54:20 -0000 1.11
+++ jars.xml 12 Jun 2002 10:14:51 -0000 1.12
@@ -15,7 +15,7 @@
<description>Part of jakarta-avalon, it is a set of classes and patterns that
support high level server development.</description>
<used-by>Cocoon</used-by>
- <lib>core/avalon-excalibur-20020603.jar</lib>
+ <lib>core/avalon-excalibur-20020612.jar</lib>
<homepage>http://jakarta.apache.org/avalon/excalibur/</homepage>
</file>
<file>
1.2 +1215 -0 xml-cocoon2/lib/core/avalon-excalibur-20020612.jar
<<Binary file>>
1.6 +3 -11 xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/AvalonToCocoonSource.java
Index: AvalonToCocoonSource.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/AvalonToCocoonSource.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AvalonToCocoonSource.java 4 Jun 2002 07:31:52 -0000 1.5
+++ AvalonToCocoonSource.java 12 Jun 2002 10:14:53 -0000 1.6
@@ -101,14 +101,7 @@
* is not possible to determine the date.
*/
public long getLastModified() {
- final SourceValidity validity = this.source.getValidity();
- if (validity instanceof TimeStampValidity) {
- return ((TimeStampValidity)validity).getTimeStamp();
- }
- if (validity instanceof FileTimeStampValidity) {
- return ((FileTimeStampValidity)validity).getTimeStamp();
- }
- return 0;
+ return this.source.getLastModified();
}
/**
@@ -116,8 +109,7 @@
* is not possible to determine the length.
*/
public long getContentLength() {
- // We have no possibility to get this!
- return -1;
+ return this.source.getContentLength();
}
/**
1.4 +52 -1 xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/CocoonToAvalonSource.java
Index: CocoonToAvalonSource.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/CocoonToAvalonSource.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- CocoonToAvalonSource.java 4 Jun 2002 07:31:52 -0000 1.3
+++ CocoonToAvalonSource.java 12 Jun 2002 10:14:53 -0000 1.4
@@ -52,6 +52,7 @@
import java.io.IOException;
import java.io.InputStream;
+import java.util.Iterator;
import org.apache.avalon.excalibur.pool.Recyclable;
import org.apache.avalon.excalibur.xml.XMLizable;
import org.apache.excalibur.source.*;
@@ -157,4 +158,54 @@
public void recycle() {
this.source.recycle();
}
+
+ /**
+ * Return the content length of the content or -1 if the length is
+ * unknown
+ */
+ public long getContentLength()
+ {
+ return this.source.getContentLength();
+ }
+
+ /**
+ * Get the last modification date of the source or 0 if it
+ * is not possible to determine the date.
+ */
+ public long getLastModified()
+ {
+ return this.source.getLastModified();
+ }
+
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public String getParameter(String name) {
+ return null;
+ }
+
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public long getParameterAsLong(String name) {
+ return 0;
+ }
+
+ /**
+ * Get parameter names
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public Iterator getParameterNames() {
+ return java.util.Collections.EMPTY_LIST.iterator();
+ }
+
+
}
+
+
+
1.13 +41 -1 xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
Index: SitemapSource.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- SitemapSource.java 4 Jun 2002 07:31:52 -0000 1.12
+++ SitemapSource.java 12 Jun 2002 10:14:53 -0000 1.13
@@ -88,6 +88,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
+import java.util.Iterator;
import java.util.Map;
/**
@@ -213,6 +214,15 @@
}
/**
+ * Get the last modification date.
+ * @return The last modification in milliseconds since January 1, 1970 GMT
+ * or 0 if it is unknown
+ */
+ public long getLastModified() {
+ return 0;
+ }
+
+ /**
* Return an <code>InputStream</code> object to read from the source.
*/
public InputStream getInputStream()
@@ -386,4 +396,34 @@
public void recycle() {
reset();
}
+
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public String getParameter(String name) {
+ return null;
+ }
+
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public long getParameterAsLong(String name) {
+ return 0;
+ }
+
+ /**
+ * Get parameter names
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public Iterator getParameterNames() {
+ return java.util.Collections.EMPTY_LIST.iterator();
+ }
+
+
}
+
1.2 +247 -192 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlideSource.java
Index: SlideSource.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlideSource.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SlideSource.java 11 Jun 2002 18:09:12 -0000 1.1
+++ SlideSource.java 12 Jun 2002 10:14:53 -0000 1.2
@@ -109,10 +109,11 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
+import java.util.Iterator;
import java.util.Map;
/**
- * A sources from jakarta slide repositories.
+ * A sources from jakarta slide repositories.
*
* @author <a href="mailto:stephan@vern.chem.tu-berlin.de">Stephan Michels</a>
* @version $Id$
@@ -131,45 +132,45 @@
/** Namespace access token. */
private NamespaceAccessToken nat;
-
+
/** Structure helper. */
private Structure structure;
-
+
/** Content helper. */
private Content content;
-
+
/** Security helper. */
private Security security;
- /** Lock helper. */
- private Lock lock;
+ /** Lock helper. */
+ private Lock lock;
- /** Macro helper. */
- private Macro macro;
+ /** Macro helper. */
+ private Macro macro;
private CredentialsToken credToken;
- /** Slide token. */
- private SlideToken slideToken;
+ /** Slide token. */
+ private SlideToken slideToken;
- /** The URI of the source*/
- private String uri;
+ /** The URI of the source*/
+ private String uri;
- /** Revision number */
- private NodeRevisionNumber revisionNumber;
+ /** Revision number */
+ private NodeRevisionNumber revisionNumber;
private NodeRevisionDescriptors revisionDescriptors = null;
private NodeRevisionDescriptor revisionDescriptor = null;
//private String branch;
- private SourceValidity validity;
+ private SourceValidity validity;
- private SlideSourceOutputStream outputstream;
+ private SlideSourceOutputStream outputstream;
private boolean initialized = false;
- protected SlideSource(CredentialsToken credToken, NamespaceAccessToken nat, String uri)
+ protected SlideSource(CredentialsToken credToken, NamespaceAccessToken nat, String uri)
throws SourceException {
this.credToken = credToken;
@@ -181,7 +182,7 @@
this.security = nat.getSecurityHelper();
this.lock = nat.getLockHelper();
this.macro = nat.getMacroHelper();
-
+
this.slideToken = new SlideTokenImpl(credToken);
try {
@@ -189,13 +190,13 @@
// Retrieve latest revision descriptor
this.revisionDescriptor = content.retrieve(slideToken, revisionDescriptors);
-
+
} catch (SlideException se) {
throw new SourceException("Could determine the if the source is a collection", se);
- }
+ }
}
- protected SlideSource(CredentialsToken credToken, NamespaceAccessToken nat,
+ protected SlideSource(CredentialsToken credToken, NamespaceAccessToken nat,
String uri, String revision) throws SourceException {
this.credToken = credToken;
this.nat = nat;
@@ -234,179 +235,233 @@
this.manager = manager;
}
- /**
- * Return an <code>InputStream</code> object to read from the source.
- * This is the data at the point of invocation of this method,
- * so if this is Modifiable, you might get different content
- * from two different invocations.
- */
- public InputStream getInputStream()
- throws IOException, SourceException {
- try
- {
- ObjectNode object = structure.retrieve(this.slideToken, this.uri);
+ /**
+ * Return an <code>InputStream</code> object to read from the source.
+ * This is the data at the point of invocation of this method,
+ * so if this is Modifiable, you might get different content
+ * from two different invocations.
+ */
+ public InputStream getInputStream()
+ throws IOException, SourceException {
+ try
+ {
+ ObjectNode object = structure.retrieve(this.slideToken, this.uri);
- return content.retrieve(slideToken, revisionDescriptors,
+ return content.retrieve(slideToken, revisionDescriptors,
revisionDescriptor).streamContent();
- } catch (SlideException se) {
- throw new SourceException("Could not get source", se);
- }
+ } catch (SlideException se) {
+ throw new SourceException("Could not get source", se);
+ }
+ }
+
+ /**
+ * Return the unique identifer for this source
+ */
+ public String getSystemId() {
+ return this.systemid;
+ }
+
+ /**
+ * Get the Validity object. This can either wrap the last modification
+ * date or the expires information or...
+ * If it is currently not possible to calculate such an information
+ * <code>null</code> is returned.
+ */
+ public SourceValidity getValidity() {
+
+ try {
+ if (validity!=null) {
+ this.validity = new TimeStampValidity(
+ revisionDescriptor.getLastModifiedAsDate().getTime());
+ }
+ } catch (Exception e) {
+ return null;
+ }
+
+ return this.validity;
+ }
+
+ /**
+ * Refresh the content of this object after the underlying data
+ * content has changed.
+ */
+ public void discardValidity() {
+ this.validity = null;
+ }
+
+ /**
+ * The mime-type of the content described by this object.
+ * If the source is not able to determine the mime-type by itself
+ * this can be null.
+ */
+ public String getMimeType() {
+
+ return revisionDescriptor.getContentType();
+ }
+
+ /**
+ * Does this source actually exist ?
+ *
+ * @return true if the resource exists.
+ */
+ public boolean exists() {
+
+ try {
+ structure.retrieve(this.slideToken, this.uri);
+ } catch (SlideException e) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 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.
+ *
+ * @return a stream to write to
+ */
+ public OutputStream getOutputStream() throws IOException, SourceException {
+
+ if (outputstream==null)
+ outputstream = new SlideSourceOutputStream();
+ return outputstream;
+ }
+
+ /**
+ * 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) {
+
+ return outputstream.canCancel();
+ }
+
+ /**
+ * 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 (outputstream==stream) {
+ try {
+ outputstream.cancel();
+ } catch (Exception e) {
+ throw new SourceException("Could not cancel output stream", e);
+ }
+ }
+ }
+
+ /**
+ * A file outputStream that will rename the temp file to the destination file upon close()
+ * and discard the temp file upon cancel().
+ */
+ public class SlideSourceOutputStream extends ByteArrayOutputStream {
+
+ private boolean isClosed = false;
+
+ public void close() throws IOException {
+ super.close();
+
+ try {
+ NodeRevisionContent revisionContent =
+ new NodeRevisionContent();
+
+ byte[] bytes = toByteArray();
+ revisionContent.setContent(bytes);
+
+ revisionDescriptor.setContentLength(bytes.length);
+
+ // Last modification date
+ revisionDescriptor.setLastModified(new Date());
+
+ //nat.begin();
+
+ if (revisionNumber==null)
+ content.create(slideToken, uri, revisionDescriptor, null);
+ content.store(slideToken, uri, revisionDescriptor,
+ revisionContent);
+
+ //nat.commit();
+
+ } catch (Exception e) {
+ // FIXME: What should I do?
+ e.printStackTrace();
+ } finally {
+ this.isClosed = true;
+ }
+ }
+
+ public boolean canCancel() {
+ return !this.isClosed;
+ }
+
+ public void cancel() throws Exception {
+ if (this.isClosed) {
+ throw new IllegalStateException("Cannot cancel : outputstrem is already closed");
+ }
+
+ this.isClosed = true;
+ super.close();
+ }
+ }
+ /**
+ * Return the content length of the content or -1 if the length is
+ * unknown
+ */
+ public long getContentLength()
+ {
+ return -1;
+ }
+
+ /**
+ * Get the last modification date of the source or 0 if it
+ * is not possible to determine the date.
+ */
+ public long getLastModified()
+ {
+ return 0;
+ }
+
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public String getParameter(String name) {
+ return null;
}
- /**
- * Return the unique identifer for this source
- */
- public String getSystemId() {
- return this.systemid;
- }
-
- /**
- * Get the Validity object. This can either wrap the last modification
- * date or the expires information or...
- * If it is currently not possible to calculate such an information
- * <code>null</code> is returned.
- */
- public SourceValidity getValidity() {
-
- try {
- if (validity!=null) {
- this.validity = new TimeStampValidity(
- revisionDescriptor.getLastModifiedAsDate().getTime());
- }
- } catch (Exception e) {
- return null;
- }
-
- return this.validity;
- }
-
- /**
- * Refresh the content of this object after the underlying data
- * content has changed.
- */
- public void discardValidity() {
- this.validity = null;
- }
-
- /**
- * The mime-type of the content described by this object.
- * If the source is not able to determine the mime-type by itself
- * this can be null.
- */
- public String getMimeType() {
-
- return revisionDescriptor.getContentType();
- }
-
- /**
- * Does this source actually exist ?
- *
- * @return true if the resource exists.
- */
- public boolean exists() {
-
- try {
- structure.retrieve(this.slideToken, this.uri);
- } catch (SlideException e) {
- return false;
- }
- return true;
- }
-
- /**
- * 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.
- *
- * @return a stream to write to
- */
- public OutputStream getOutputStream() throws IOException, SourceException {
-
- if (outputstream==null)
- outputstream = new SlideSourceOutputStream();
- return outputstream;
- }
-
- /**
- * 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) {
-
- return outputstream.canCancel();
- }
-
- /**
- * 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 (outputstream==stream) {
- try {
- outputstream.cancel();
- } catch (Exception e) {
- throw new SourceException("Could not cancel output stream", e);
- }
- }
- }
-
- /**
- * A file outputStream that will rename the temp file to the destination file upon close()
- * and discard the temp file upon cancel().
- */
- public class SlideSourceOutputStream extends ByteArrayOutputStream {
-
- private boolean isClosed = false;
-
- public void close() throws IOException {
- super.close();
-
- try {
- NodeRevisionContent revisionContent =
- new NodeRevisionContent();
-
- byte[] bytes = toByteArray();
- revisionContent.setContent(bytes);
-
- revisionDescriptor.setContentLength(bytes.length);
-
- // Last modification date
- revisionDescriptor.setLastModified(new Date());
-
- //nat.begin();
-
- if (revisionNumber==null)
- content.create(slideToken, uri, revisionDescriptor, null);
- content.store(slideToken, uri, revisionDescriptor,
- revisionContent);
-
- //nat.commit();
-
- } catch (Exception e) {
- // FIXME: What should I do?
- e.printStackTrace();
- } finally {
- this.isClosed = true;
- }
- }
-
- public boolean canCancel() {
- return !this.isClosed;
- }
-
- public void cancel() throws Exception {
- if (this.isClosed) {
- throw new IllegalStateException("Cannot cancel : outputstrem is already closed");
- }
-
- this.isClosed = true;
- super.close();
- }
- }
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public long getParameterAsLong(String name) {
+ return 0;
+ }
+
+ /**
+ * Get parameter names
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public Iterator getParameterNames() {
+ return emptyIterator;
+ }
+
+ protected static EmptyIterator emptyIterator = new EmptyIterator();
+
}
+
+class EmptyIterator implements Iterator {
+ public boolean hasNext() { return false; }
+ public Object next() { return null; }
+ public void remove() {}
+}
+
1.2 +382 -329 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/SlideSource.java
Index: SlideSource.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/SlideSource.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SlideSource.java 22 May 2002 15:28:38 -0000 1.1
+++ SlideSource.java 12 Jun 2002 10:14:53 -0000 1.2
@@ -105,12 +105,13 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
+import java.util.Iterator;
import java.util.Map;
/**
* A sources from jakarta slide domains. The sources wrappers
- * to the stores of slide. It uses slide:// as pseudo-protocoll. It is also
- * possible to get access to the store
+ * to the stores of slide. It uses slide:// as pseudo-protocoll. It is also
+ * possible to get access to the store
* via webdav.
*
* Possible parameter are username and revision
@@ -125,352 +126,404 @@
/** Namespace access token. */
private NamespaceAccessToken token;
-
+
/** Structure helper. */
private Structure structure;
-
+
/** Content helper. */
private Content content;
-
+
/** Security helper. */
private Security security;
- /** Lock helper. */
- private Lock lock;
+ /** Lock helper. */
+ private Lock lock;
- /** Macro helper. */
- private Macro macro;
+ /** Macro helper. */
+ private Macro macro;
- /** Slide token. */
- private SlideToken slideToken;
+ /** Slide token. */
+ private SlideToken slideToken;
- /** Request URI */
- private String requestUri;
+ /** Request URI */
+ private String requestUri;
- /** Revision number */
- private NodeRevisionNumber revisionNumber;
+ /** Revision number */
+ private NodeRevisionNumber revisionNumber;
- private SourceValidity validity;
+ private SourceValidity validity;
- private SlideSourceOutputStream outputstream;
+ private SlideSourceOutputStream outputstream;
- protected SlideSource(String location, Map parameters) {
- this.systemid = location;
+ protected SlideSource(String location, Map parameters) {
+ this.systemid = location;
- if (location.indexOf("://") >= 0)
- location = location.substring(location.indexOf("://")+3);
+ if (location.indexOf("://") >= 0)
+ location = location.substring(location.indexOf("://")+3);
- String namespace = location.substring(0, location.indexOf("/"));
- //System.out.println("namespace = '"+namespace+"'");
- location = location.substring(location.indexOf("/"));
- //System.out.println("location = '"+location+"'");
+ String namespace = location.substring(0, location.indexOf("/"));
+ //System.out.println("namespace = '"+namespace+"'");
+ location = location.substring(location.indexOf("/"));
+ //System.out.println("location = '"+location+"'");
- if ((parameters!=null) && (parameters.containsKey("revision"))) {
- this.revisionNumber = new NodeRevisionNumber(parameters.get("revision").toString());
- //System.out.println("revision = '"+this.revisionNumber+"'");
- } else {
+ if ((parameters!=null) && (parameters.containsKey("revision"))) {
+ this.revisionNumber = new NodeRevisionNumber(parameters.get("revision").toString());
+ //System.out.println("revision = '"+this.revisionNumber+"'");
+ } else {
this.revisionNumber = null;
}
- this.token = Domain.accessNamespace(new SecurityToken(new String()),
- namespace);
+ this.token = Domain.accessNamespace(new SecurityToken(new String()),
+ namespace);
+
+ this.structure = token.getStructureHelper();
+ this.content = token.getContentHelper();
+ this.security = token.getSecurityHelper();
+ this.lock = token.getLockHelper();
+ this.macro = token.getMacroHelper();
+
+ CredentialsToken credToken;
+ if ((parameters!=null) && (parameters.containsKey("username")))
+ credToken = new CredentialsToken(parameters.get("username").toString());
+ else
+ credToken = new CredentialsToken(new String("guest"));
+
+ this.slideToken = new SlideTokenImpl(credToken);
+
+ this.requestUri = location;
+ }
+
+ /**
+ * Return an <code>InputStream</code> object to read from the source.
+ * This is the data at the point of invocation of this method,
+ * so if this is Modifiable, you might get different content
+ * from two different invocations.
+ */
+ public InputStream getInputStream()
+ throws IOException, SourceException {
+ try {
+ ObjectNode object = structure.retrieve(this.slideToken, this.requestUri);
+ NodeRevisionDescriptors revisionDescriptors =
+ content.retrieve(slideToken, this.requestUri);
+
+ if (revisionDescriptors.hasRevisions()) {
+
+ NodeRevisionDescriptor revisionDescriptor;
+ if (this.revisionNumber!=null)
+ revisionDescriptor =
+ content.retrieve(this.slideToken, revisionDescriptors, this.revisionNumber);
+ else
+ // Retrieve latest revision descriptor
+ revisionDescriptor =
+ content.retrieve(this.slideToken, revisionDescriptors);
+
+ if (revisionDescriptor != null)
+ return content.retrieve(slideToken, revisionDescriptors,
+ revisionDescriptor).streamContent();
+ }
+ } catch (ServiceAccessException sae) {
+ throw new SourceException("Could not get source", sae);
+ } catch (AccessDeniedException ade) {
+ throw new SourceException("Could not get source", ade);
+ } catch (LinkedObjectNotFoundException lonfe) {
+ throw new SourceException("Could not get source", lonfe);
+ } catch (ObjectNotFoundException onfe) {
+ throw new SourceException("Could not get source", onfe);
+ } catch (RevisionDescriptorNotFoundException rdnfe) {
+ throw new SourceException("Could not get source", rdnfe);
+ } catch (RevisionContentNotFoundException rcnfe) {
+ throw new SourceException("Could not get source", rcnfe);
+ } catch (RevisionNotFoundException rnfe) {
+ throw new SourceException("Could not get source", rnfe);
+ } catch (ObjectLockedException ole) {
+ throw new SourceException("Could not get source", ole);
+ }
+
+ return null;
+ }
+
+ /**
+ * Return the unique identifer for this source
+ */
+ public String getSystemId() {
+ return this.systemid;
+ }
+
+ /**
+ * Get the Validity object. This can either wrap the last modification
+ * date or the expires information or...
+ * If it is currently not possible to calculate such an information
+ * <code>null</code> is returned.
+ */
+ public SourceValidity getValidity() {
+ try {
+ if (validity!=null) {
+ ObjectNode object = structure.retrieve(this.slideToken, this.requestUri);
+ NodeRevisionDescriptors revisionDescriptors =
+ content.retrieve(slideToken, this.requestUri);
+
+ if (revisionDescriptors.hasRevisions()) {
+
+ NodeRevisionDescriptor revisionDescriptor;
+ if (this.revisionNumber!=null)
+ revisionDescriptor =
+ content.retrieve(this.slideToken, revisionDescriptors, this.revisionNumber);
+ else
+ // Retrieve latest revision descriptor
+ revisionDescriptor =
+ content.retrieve(this.slideToken, revisionDescriptors);
+
+ if (revisionDescriptor != null)
+ this.validity = new TimeStampValidity(
+ revisionDescriptor.getLastModifiedAsDate().getTime());
+ }
+ }
+ } catch (Exception e) {
+ return null;
+ }
+
+ return this.validity;
+ }
+
+ /**
+ * Refresh the content of this object after the underlying data
+ * content has changed.
+ */
+ public void discardValidity() {
+ this.validity = null;
+ }
+
+ /**
+ * The mime-type of the content described by this object.
+ * If the source is not able to determine the mime-type by itself
+ * this can be null.
+ */
+ public String getMimeType()
+ {
+ try
+ {
+ ObjectNode object = structure.retrieve(this.slideToken, this.requestUri);
+ NodeRevisionDescriptors revisionDescriptors =
+ content.retrieve(slideToken, this.requestUri);
+
+ if (revisionDescriptors.hasRevisions()) {
+
+ NodeRevisionDescriptor revisionDescriptor;
+ if (this.revisionNumber!=null)
+ revisionDescriptor =
+ content.retrieve(this.slideToken, revisionDescriptors, this.revisionNumber);
+ else
+ // Retrieve latest revision descriptor
+ revisionDescriptor =
+ content.retrieve(this.slideToken, revisionDescriptors);
+
+ if (revisionDescriptor != null)
+ revisionDescriptor.getContentType();
+ }
+ } catch (Exception e) {
+ return null;
+ }
+
+ return null;
+ }
+
+ /**
+ * Does this source actually exist ?
+ *
+ * @return true if the resource exists.
+ */
+ public boolean exists()
+ {
+ try {
+ structure.retrieve(this.slideToken, this.requestUri);
+ } catch (Exception e) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 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.
+ *
+ * @return a stream to write to
+ */
+ public OutputStream getOutputStream() throws IOException, SourceException {
+ if (outputstream==null)
+ outputstream = new SlideSourceOutputStream();
+ return outputstream;
+ }
+
+ /**
+ * 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) {
+ return outputstream.canCancel();
+ }
+
+ /**
+ * 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 (outputstream==stream) {
+ try {
+ outputstream.cancel();
+ } catch (Exception e) {
+ throw new SourceException("Could not cancel output stream", e);
+ }
+ }
+ }
+
+ /**
+ * Tests whether a resource is a collection resource.
+ *
+ * @param revisionDescriptor revision descriptor of the resource
+ *
+ * @return true if the descriptor represents a collection, false otherwise
+ */
+ public boolean isCollection(NodeRevisionDescriptor revisionDescriptor) {
+
+ boolean result = false;
+
+ if (revisionDescriptor == null)
+ return true;
+
+ NodeProperty property = revisionDescriptor.getProperty("resourcetype");
+
+ if ((property != null)
+ && (property.getValue().equals("<collection/>"))) {
+ result = true;
+ }
+
+ return result;
+ }
+
+ /**
+ * A file outputStream that will rename the temp file to the destination file upon close()
+ * and discard the temp file upon cancel().
+ */
+ public class SlideSourceOutputStream extends ByteArrayOutputStream {
+
+ private boolean isClosed = false;
+
+ public void close() throws IOException {
+ super.close();
+
+ try {
+ NodeRevisionDescriptors revisionDescriptors =
+ content.retrieve(slideToken, requestUri);
+
+ NodeRevisionDescriptor revisionDescriptor;
+ if (revisionNumber!=null)
+ revisionDescriptor =
+ content.retrieve(slideToken, revisionDescriptors, revisionNumber);
+ else
+ // Retrieve latest revision descriptor
+ revisionDescriptor =
+ content.retrieve(slideToken, revisionDescriptors);
+
+ NodeRevisionContent revisionContent =
+ new NodeRevisionContent();
+
+ byte[] bytes = toByteArray();
+ revisionContent.setContent(bytes);
+
+ revisionDescriptor.setContentLength(bytes.length);
+
+ // Last modification date
+ revisionDescriptor.setLastModified(new Date());
+
+ //token.begin();
+
+ if (revisionNumber==null)
+ content.create(slideToken, requestUri, revisionDescriptor, null);
+ content.store(slideToken, requestUri, revisionDescriptor,
+ revisionContent);
+
+ //token.commit();
+
+ } catch (Exception e) {
+ // FIXME: What should I do?
+ e.printStackTrace();
+ } finally {
+ this.isClosed = true;
+ }
+ }
+
+ public boolean canCancel() {
+ return !this.isClosed;
+ }
+
+ public void cancel() throws Exception {
+ if (this.isClosed) {
+ throw new IllegalStateException("Cannot cancel : outputstrem is already closed");
+ }
+
+ this.isClosed = true;
+ super.close();
+ }
+ }
+
+ /**
+ * Return the content length of the content or -1 if the length is
+ * unknown
+ */
+ public long getContentLength()
+ {
+ return -1;
+ }
+
+ /**
+ * Get the last modification date of the source or 0 if it
+ * is not possible to determine the date.
+ */
+ public long getLastModified()
+ {
+ return 0;
+ }
+
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public String getParameter(String name) {
+ return null;
+ }
+
+ /**
+ * Get the value of a parameter.
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public long getParameterAsLong(String name) {
+ return 0;
+ }
+
+ /**
+ * Get parameter names
+ * Using this it is possible to get custom information provided by the
+ * source implementation, like an expires date, HTTP headers etc.
+ */
+ public Iterator getParameterNames() {
+ return emptyIterator;
+ }
+
+ protected static EmptyIterator emptyIterator = new EmptyIterator();
- this.structure = token.getStructureHelper();
- this.content = token.getContentHelper();
- this.security = token.getSecurityHelper();
- this.lock = token.getLockHelper();
- this.macro = token.getMacroHelper();
-
- CredentialsToken credToken;
- if ((parameters!=null) && (parameters.containsKey("username")))
- credToken = new CredentialsToken(parameters.get("username").toString());
- else
- credToken = new CredentialsToken(new String("guest"));
-
- this.slideToken = new SlideTokenImpl(credToken);
-
- this.requestUri = location;
- }
-
- /**
- * Return an <code>InputStream</code> object to read from the source.
- * This is the data at the point of invocation of this method,
- * so if this is Modifiable, you might get different content
- * from two different invocations.
- */
- public InputStream getInputStream()
- throws IOException, SourceException
- {
- try
- {
- ObjectNode object = structure.retrieve(this.slideToken, this.requestUri);
- NodeRevisionDescriptors revisionDescriptors =
- content.retrieve(slideToken, this.requestUri);
-
- if (revisionDescriptors.hasRevisions()) {
-
- NodeRevisionDescriptor revisionDescriptor;
- if (this.revisionNumber!=null)
- revisionDescriptor =
- content.retrieve(this.slideToken, revisionDescriptors, this.revisionNumber);
- else
- // Retrieve latest revision descriptor
- revisionDescriptor =
- content.retrieve(this.slideToken, revisionDescriptors);
-
- if (revisionDescriptor != null)
- return content.retrieve(slideToken, revisionDescriptors,
- revisionDescriptor).streamContent();
- }
- } catch (ServiceAccessException sae) {
- throw new SourceException("Could not get source", sae);
- } catch (AccessDeniedException ade) {
- throw new SourceException("Could not get source", ade);
- } catch (LinkedObjectNotFoundException lonfe) {
- throw new SourceException("Could not get source", lonfe);
- } catch (ObjectNotFoundException onfe) {
- throw new SourceException("Could not get source", onfe);
- } catch (RevisionDescriptorNotFoundException rdnfe) {
- throw new SourceException("Could not get source", rdnfe);
- } catch (RevisionContentNotFoundException rcnfe) {
- throw new SourceException("Could not get source", rcnfe);
- } catch (RevisionNotFoundException rnfe) {
- throw new SourceException("Could not get source", rnfe);
- } catch (ObjectLockedException ole) {
- throw new SourceException("Could not get source", ole);
- }
-
- return null;
- }
-
- /**
- * Return the unique identifer for this source
- */
- public String getSystemId() {
- return this.systemid;
- }
-
- /**
- * Get the Validity object. This can either wrap the last modification
- * date or the expires information or...
- * If it is currently not possible to calculate such an information
- * <code>null</code> is returned.
- */
- public SourceValidity getValidity() {
- try {
- if (validity!=null) {
- ObjectNode object = structure.retrieve(this.slideToken, this.requestUri);
- NodeRevisionDescriptors revisionDescriptors =
- content.retrieve(slideToken, this.requestUri);
-
- if (revisionDescriptors.hasRevisions()) {
-
- NodeRevisionDescriptor revisionDescriptor;
- if (this.revisionNumber!=null)
- revisionDescriptor =
- content.retrieve(this.slideToken, revisionDescriptors, this.revisionNumber);
- else
- // Retrieve latest revision descriptor
- revisionDescriptor =
- content.retrieve(this.slideToken, revisionDescriptors);
-
- if (revisionDescriptor != null)
- this.validity = new TimeStampValidity(
- revisionDescriptor.getLastModifiedAsDate().getTime());
- }
- }
- } catch (Exception e) {
- return null;
- }
-
- return this.validity;
- }
-
- /**
- * Refresh the content of this object after the underlying data
- * content has changed.
- */
- public void discardValidity() {
- this.validity = null;
- }
-
- /**
- * The mime-type of the content described by this object.
- * If the source is not able to determine the mime-type by itself
- * this can be null.
- */
- public String getMimeType()
- {
- try
- {
- ObjectNode object = structure.retrieve(this.slideToken, this.requestUri);
- NodeRevisionDescriptors revisionDescriptors =
- content.retrieve(slideToken, this.requestUri);
-
- if (revisionDescriptors.hasRevisions()) {
-
- NodeRevisionDescriptor revisionDescriptor;
- if (this.revisionNumber!=null)
- revisionDescriptor =
- content.retrieve(this.slideToken, revisionDescriptors, this.revisionNumber);
- else
- // Retrieve latest revision descriptor
- revisionDescriptor =
- content.retrieve(this.slideToken, revisionDescriptors);
-
- if (revisionDescriptor != null)
- revisionDescriptor.getContentType();
- }
- } catch (Exception e) {
- return null;
- }
-
- return null;
- }
-
- /**
- * Does this source actually exist ?
- *
- * @return true if the resource exists.
- */
- public boolean exists()
- {
- try {
- structure.retrieve(this.slideToken, this.requestUri);
- } catch (Exception e) {
- return false;
- }
- return true;
- }
-
- /**
- * 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.
- *
- * @return a stream to write to
- */
- public OutputStream getOutputStream() throws IOException, SourceException {
- if (outputstream==null)
- outputstream = new SlideSourceOutputStream();
- return outputstream;
- }
-
- /**
- * 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) {
- return outputstream.canCancel();
- }
-
- /**
- * 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 (outputstream==stream) {
- try {
- outputstream.cancel();
- } catch (Exception e) {
- throw new SourceException("Could not cancel output stream", e);
- }
- }
- }
-
- /**
- * Tests whether a resource is a collection resource.
- *
- * @param revisionDescriptor revision descriptor of the resource
- *
- * @return true if the descriptor represents a collection, false otherwise
- */
- public boolean isCollection
- (NodeRevisionDescriptor revisionDescriptor) {
-
- boolean result = false;
-
- if (revisionDescriptor == null)
- return true;
-
- NodeProperty property = revisionDescriptor.getProperty("resourcetype");
-
- if ((property != null)
- && (property.getValue().equals("<collection/>"))) {
- result = true;
- }
-
- return result;
- }
-
- /**
- * A file outputStream that will rename the temp file to the destination file upon close()
- * and discard the temp file upon cancel().
- */
- public class SlideSourceOutputStream extends ByteArrayOutputStream {
-
- private boolean isClosed = false;
-
- public void close() throws IOException {
- super.close();
-
- try {
- NodeRevisionDescriptors revisionDescriptors =
- content.retrieve(slideToken, requestUri);
-
- NodeRevisionDescriptor revisionDescriptor;
- if (revisionNumber!=null)
- revisionDescriptor =
- content.retrieve(slideToken, revisionDescriptors, revisionNumber);
- else
- // Retrieve latest revision descriptor
- revisionDescriptor =
- content.retrieve(slideToken, revisionDescriptors);
-
- NodeRevisionContent revisionContent =
- new NodeRevisionContent();
-
- byte[] bytes = toByteArray();
- revisionContent.setContent(bytes);
-
- revisionDescriptor.setContentLength(bytes.length);
-
- // Last modification date
- revisionDescriptor.setLastModified(new Date());
-
- //token.begin();
-
- if (revisionNumber==null)
- content.create(slideToken, requestUri, revisionDescriptor, null);
- content.store(slideToken, requestUri, revisionDescriptor,
- revisionContent);
-
- //token.commit();
-
- } catch (Exception e) {
- // FIXME: What should I do?
- e.printStackTrace();
- } finally {
- this.isClosed = true;
- }
- }
-
- public boolean canCancel() {
- return !this.isClosed;
- }
-
- public void cancel() throws Exception {
- if (this.isClosed) {
- throw new IllegalStateException("Cannot cancel : outputstrem is already closed");
- }
-
- this.isClosed = true;
- super.close();
- }
- }
}
+
+class EmptyIterator implements Iterator {
+ public boolean hasNext() { return false; }
+ public Object next() { return null; }
+ public void remove() {}
+}
+
1.2 +1 -1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/repository.xconf
Index: repository.xconf
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/repository.xconf,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- repository.xconf 11 Jun 2002 18:09:12 -0000 1.1
+++ repository.xconf 12 Jun 2002 10:14:53 -0000 1.2
@@ -3,6 +3,6 @@
<xconf xpath="/cocoon/source-factories" unless="component-instance[@name='repository']">
<!-- repository pseudo protocol -->
- <component-instance name="repository" class="org.apache.cocoon.components.eource.RepositorySourceFactory"/>
+ <component-instance name="repository" class="org.apache.cocoon.components.source.RepositorySourceFactory"/>
</xconf>
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org