Return-Path: Delivered-To: apmail-xml-cocoon-cvs-archive@xml.apache.org Received: (qmail 47908 invoked by uid 500); 22 Feb 2002 23:26:32 -0000 Mailing-List: contact cocoon-cvs-help@xml.apache.org; run by ezmlm Precedence: bulk Reply-To: cocoon-dev@xml.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cocoon-cvs@xml.apache.org Received: (qmail 47894 invoked by uid 500); 22 Feb 2002 23:26:32 -0000 Delivered-To: apmail-xml-cocoon2-cvs@apache.org Date: 22 Feb 2002 23:26:31 -0000 Message-ID: <20020222232631.7483.qmail@icarus.apache.org> From: sylvain@apache.org To: xml-cocoon2-cvs@apache.org Subject: cvs commit: xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor MapStackResolver.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N sylvain 02/02/22 15:26:31 Modified: src/scratchpad/src/org/apache/cocoon/transformation FileWritingTransformer.java src/scratchpad/src/org/apache/cocoon/treeprocessor MapStackResolver.java Log: Update FileWritingTransformer to use WriteableSource Revision Changes Path 1.7 +101 -73 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/FileWritingTransformer.java Index: FileWritingTransformer.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/FileWritingTransformer.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- FileWritingTransformer.java 22 Feb 2002 21:49:54 -0000 1.6 +++ FileWritingTransformer.java 22 Feb 2002 23:26:31 -0000 1.7 @@ -64,6 +64,7 @@ import org.apache.cocoon.caching.Cacheable; import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.SourceResolver; +import org.apache.cocoon.environment.WriteableSource; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.ResourceNotFoundException; import org.xml.sax.Attributes; @@ -71,8 +72,7 @@ import org.xml.sax.helpers.AttributesImpl; import java.lang.SecurityException; import java.io.IOException; -import java.io.File; -import java.io.FileOutputStream; +import java.io.OutputStream; import java.util.Map; import java.util.Properties; @@ -160,7 +160,7 @@ private String target = null; /** Current FileOutputStream. */ - private FileOutputStream fos = null; + private OutputStream fos = null; /** Current status of outputting the file. */ private boolean failed = true; @@ -172,10 +172,10 @@ private String action = null; /** Target file's final destination. */ - private File target_file = null; +// private File target_file = null; /** Temporary target file. */ - private File temp_target_file = null; +// private File temp_target_file = null; /** True when inside <write> element. */ @@ -526,32 +526,40 @@ * cloase the file output stream */ private void closeFos() { - try { - this.fos.close(); - this.fos = null; - if (!this.failed) { - if (target_file.exists()) { - target_file.delete(); - this.action = FRT_ACTION_OVERWRITE; - } else { - this.action = FRT_ACTION_NEW; - } - temp_target_file.renameTo(target_file); - } else { - if (temp_target_file.exists()) { - temp_target_file.delete(); - } - } - } catch (Exception e) { - getLogger().error("FileWritingTransformer failed, could not close the file", e); - this.failed = true; - this.message = "could not close the file"; - try { - temp_target_file.delete(); - } catch (SecurityException se) { - getLogger().error("FileWritingTransformer failed, could not delete the temp file: " + temp_target_file.toString(), e); - } - } + try { + this.fos.close(); + this.fos = null; + } catch(Exception e) { + getLogger().warn("Failed to close source", e); + this.message = "Failed to close source"; + this.failed = true; + } +// try { +// this.fos.close(); +// this.fos = null; +// if (!this.failed) { +// if (target_file.exists()) { +// target_file.delete(); +// this.action = FRT_ACTION_OVERWRITE; +// } else { +// this.action = FRT_ACTION_NEW; +// } +// temp_target_file.renameTo(target_file); +// } else { +// if (temp_target_file.exists()) { +// temp_target_file.delete(); +// } +// } +// } catch (Exception e) { +// getLogger().error("FileWritingTransformer failed, could not close the file", e); +// this.failed = true; +// this.message = "could not close the file"; +// try { +// temp_target_file.delete(); +// } catch (SecurityException se) { +// getLogger().error("FileWritingTransformer failed, could not delete the temp file: " + temp_target_file.toString(), e); +// } +// } } /** @@ -564,49 +572,69 @@ * by not overwriting the temporary file. */ private void openFos() { + + Source source = null; + try { + this.message = "The src attribute could not be resolved"; + source = this.sourceResolver.resolve(this.target); + + this.message = "The src attribute doesn't resolve to a writeable source"; + WriteableSource wsource = (WriteableSource)source; + + this.message = "Could not open the source for writing"; + this.fos = wsource.getOutputStream(); + + } catch(Exception e) { + getLogger().warn(this.message, e); + this.failed = true; + } finally { + if (source != null) { + source.recycle(); + } + } - // open the file - if (!this.target.startsWith(FRT_PROTOCOL)) { - getLogger().error("FileWritingTransformer failed, the src parameter did not resolve to a file:"); - this.failed = true; - this.message = "the src parameter did not resolve to a file"; - } else { - try { - target_file = new File (this.target.substring(5)); - temp_target_file = new File (this.target.substring(5) + ".tmp"); - if (!target_file.exists()) { - File dir = target_file.getParentFile(); - if (!dir.exists() && dir.mkdirs() == true) { - getLogger().warn("FileWritingTransformer: made new directories: " + dir.toString()); - } - } else if (target_file.isDirectory()) { - getLogger().error("FileWritingTransformer failed, the src parameter cannot point to a directory"); - this.failed = true; - this.message = "the src parameter pointed to a directory"; - } - if (!this.failed) { - if (temp_target_file.createNewFile() == true) { - this.fos = new java.io.FileOutputStream(temp_target_file); - } else { - getLogger().error("FileWritingTransformer failed, the file was busy"); - this.failed = true; - this.message = "the file was busy"; - } - } - } catch (SecurityException se) { - getLogger().error("FileWritingTransformer failed, did not have the required file permissions for writing", se); - this.failed = true; - this.message = "could not open the file for writing"; - } catch (IOException ioe) { - getLogger().error("FileWritingTransformer failed, could not open the file for writing", ioe); - this.failed = true; - this.message = "could not open the file for writing"; - } catch (NullPointerException npe) { - getLogger().error("FileWritingTransformer failed, could not resolve the target", npe); - this.failed = true; - this.message = "could not resolve the target"; - } - } +// // open the file +// if (!this.target.startsWith(FRT_PROTOCOL)) { +// getLogger().error("FileWritingTransformer failed, the src parameter did not resolve to a file:"); +// this.failed = true; +// this.message = "the src parameter did not resolve to a file"; +// } else { +// try { +// target_file = new File (this.target.substring(5)); +// temp_target_file = new File (this.target.substring(5) + ".tmp"); +// if (!target_file.exists()) { +// File dir = target_file.getParentFile(); +// if (!dir.exists() && dir.mkdirs() == true) { +// getLogger().warn("FileWritingTransformer: made new directories: " + dir.toString()); +// } +// } else if (target_file.isDirectory()) { +// getLogger().error("FileWritingTransformer failed, the src parameter cannot point to a directory"); +// this.failed = true; +// this.message = "the src parameter pointed to a directory"; +// } +// if (!this.failed) { +// if (temp_target_file.createNewFile() == true) { +// this.fos = new java.io.FileOutputStream(temp_target_file); +// } else { +// getLogger().error("FileWritingTransformer failed, the file was busy"); +// this.failed = true; +// this.message = "the file was busy"; +// } +// } +// } catch (SecurityException se) { +// getLogger().error("FileWritingTransformer failed, did not have the required file permissions for writing", se); +// this.failed = true; +// this.message = "could not open the file for writing"; +// } catch (IOException ioe) { +// getLogger().error("FileWritingTransformer failed, could not open the file for writing", ioe); +// this.failed = true; +// this.message = "could not open the file for writing"; +// } catch (NullPointerException npe) { +// getLogger().error("FileWritingTransformer failed, could not resolve the target", npe); +// this.failed = true; +// this.message = "could not resolve the target"; +// } +// } } } 1.11 +3 -3 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/MapStackResolver.java Index: MapStackResolver.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/MapStackResolver.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- MapStackResolver.java 22 Feb 2002 06:58:03 -0000 1.10 +++ MapStackResolver.java 22 Feb 2002 23:26:31 -0000 1.11 @@ -60,7 +60,7 @@ * Utility class for handling {...} pattern substitutions from a List of Maps. * * @author Sylvain Wallez - * @version CVS $Id: MapStackResolver.java,v 1.10 2002/02/22 06:58:03 cziegeler Exp $ + * @version CVS $Id: MapStackResolver.java,v 1.11 2002/02/22 23:26:31 sylvain Exp $ */ public abstract class MapStackResolver { @@ -251,7 +251,7 @@ if (pos >= length || pos == -1) { // no more braces - if (prev < length - 1) { + if (prev < length) { stringList.add(this.unescape(expr.substring(prev))); levelList.add(new Integer(-1)); } @@ -331,7 +331,7 @@ // public static void main(String [] args) throws Exception { // // new CompiledResolver("&{../../blah}").dump(); -// new CompiledResolver("{t1}tt{t2}").dump(); +// new CompiledResolver("{t1}tt{t2}x").dump(); // new CompiledResolver("\\{t1}tt{t2}xx").dump(); // new CompiledResolver("{t1}tt\\{t2}xx").dump(); // new CompiledResolver("{t1}tt{t2}xx").dump(); ---------------------------------------------------------------------- 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