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/12/03 11:20:02 UTC
cvs commit: xml-cocoon2/src/java/org/apache/cocoon/serialization ZipArchiveSerializer.java
cziegeler 2002/12/03 02:20:02
Modified: src/java/org/apache/cocoon/serialization
ZipArchiveSerializer.java
Log:
Avoid private internal calls and use the allowed api instead
Revision Changes Path
1.3 +64 -44 xml-cocoon2/src/java/org/apache/cocoon/serialization/ZipArchiveSerializer.java
Index: ZipArchiveSerializer.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/serialization/ZipArchiveSerializer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ZipArchiveSerializer.java 31 Oct 2002 16:48:55 -0000 1.2
+++ ZipArchiveSerializer.java 3 Dec 2002 10:20:01 -0000 1.3
@@ -51,12 +51,11 @@
package org.apache.cocoon.serialization;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.components.CocoonComponentManager;
-import org.apache.cocoon.environment.Source;
-import org.apache.cocoon.environment.SourceResolver;
-
+import org.apache.avalon.framework.component.ComponentException;
+import org.apache.avalon.framework.component.ComponentManager;
+import org.apache.avalon.framework.component.Composable;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceResolver;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -96,63 +95,70 @@
// <svg>...</svg>
// </entry>
-public class ZipArchiveSerializer extends AbstractSerializer
-{
+public class ZipArchiveSerializer
+ extends AbstractSerializer
+ implements Composable {
/**
* The namespace for elements handled by this serializer,
* "http://apache.org/cocoon/zip-archive/1.0".
*/
- public static final String ZIP_NAMESPACE = "http://apache.org/cocoon/zip-archive/1.0";
-
+ public static final String ZIP_NAMESPACE =
+ "http://apache.org/cocoon/zip-archive/1.0";
+
/** The Zip stream where entries will be written */
protected ZipOutputStream zipOutput;
-
+
/** Have we encountered the toplevel "zip" element ? */
protected boolean inZip = false;
-
- /** The resolver to get sources */
- protected SourceResolver resolver;
-
+
/** Temporary byte buffer to read source data */
protected byte[] buffer = new byte[1024];
-
+
+ protected ComponentManager manager;
+
/**
* Always return "application/x-zip" which is the default for Zip archives.
*/
- public String getMimeType()
- {
+ public String getMimeType() {
return "application/x-zip";
}
/**
* @see org.xml.sax.ContentHandler#startDocument()
*/
- public void startDocument() throws SAXException
- {
+ public void startDocument() throws SAXException {
this.zipOutput = new ZipOutputStream(this.output);
this.inZip = false;
- this.resolver = CocoonComponentManager.getCurrentEnvironment();
}
/**
* @see org.xml.sax.ContentHandler#startElement(String, String, String, Attributes)
*/
- public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException
- {
+ public void startElement(String namespaceURI,
+ String localName,
+ String qName,
+ Attributes atts)
+ throws SAXException {
if (!inZip) {
// expecting "zip" as the first element
- if (namespaceURI.equals(ZIP_NAMESPACE) && localName.equals("archive")) {
+ if (namespaceURI.equals(ZIP_NAMESPACE)
+ && localName.equals("archive")) {
this.inZip = true;
} else {
- throw new SAXException("Expecting 'archive' root element (got '" + localName + "')");
+ throw new SAXException(
+ "Expecting 'archive' root element (got '"
+ + localName
+ + "')");
}
} else {
// expecting "entry" element
- if (namespaceURI.equals(ZIP_NAMESPACE) && localName.equals("entry")) {
+ if (namespaceURI.equals(ZIP_NAMESPACE)
+ && localName.equals("entry")) {
// Get the source
addEntry(atts);
} else {
- throw new SAXException("Expecting 'entry' element (got '" + localName + "')");
+ throw new SAXException(
+ "Expecting 'entry' element (got '" + localName + "')");
}
}
}
@@ -161,56 +167,70 @@
* Add an entry in the archive.
* @param atts the attributes that describe the entry
*/
- protected void addEntry(Attributes atts) throws SAXException
- {
+ protected void addEntry(Attributes atts) throws SAXException {
String name = atts.getValue("name");
if (name == null) {
throw new SAXException("No name given to the Zip entry");
}
-
+
String src = atts.getValue("src");
if (src == null) {
throw new SAXException("No source given for the Zip entry");
}
-
+
+ SourceResolver resolver = null;
+ Source source = null;
try {
+ resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE);
+
// Create a new Zip entry
ZipEntry entry = new ZipEntry(name);
this.zipOutput.putNextEntry(entry);
-
+
// Get the source and its data
- Source source = resolver.resolve(src);
+ source = resolver.resolveURI(src);
InputStream sourceInput = source.getInputStream();
-
+
// Copy the source to the zip
int len;
while ((len = sourceInput.read(this.buffer)) > 0) {
this.zipOutput.write(this.buffer, 0, len);
}
-
+
// and close the entry
this.zipOutput.closeEntry();
-
- } catch(RuntimeException re) {
+
+ } catch (RuntimeException re) {
throw re;
- } catch(SAXException se) {
- throw se;
- } catch(Exception e) {
+ } catch (Exception e) {
throw new SAXException(e);
+ } finally {
+ if (resolver != null) {
+ resolver.release(source);
+ }
+ this.manager.release(resolver);
}
}
/**
* @see org.xml.sax.ContentHandler#endDocument()
*/
- public void endDocument() throws SAXException
- {
+ public void endDocument() throws SAXException {
try {
// Close the zip archive
this.zipOutput.finish();
-
- } catch(IOException ioe) {
+
+ } catch (IOException ioe) {
throw new SAXException(ioe);
}
}
+
+ /**
+ * @see org.apache.avalon.framework.component.Composable#compose(ComponentManager)
+ */
+ public void compose(ComponentManager componentManager)
+ throws ComponentException {
+ this.manager = componentManager;
+ }
+
}
----------------------------------------------------------------------
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