You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2003/12/20 15:29:19 UTC

cvs commit: cocoon-2.1/src/java/org/apache/cocoon/acting CopySourceAction.java

sylvain     2003/12/20 06:29:19

  Modified:    src/java/org/apache/cocoon/acting CopySourceAction.java
  Log:
  Handle directories as the destination
  
  Revision  Changes    Path
  1.2       +17 -1     cocoon-2.1/src/java/org/apache/cocoon/acting/CopySourceAction.java
  
  Index: CopySourceAction.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/acting/CopySourceAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CopySourceAction.java	5 Nov 2003 17:18:00 -0000	1.1
  +++ CopySourceAction.java	20 Dec 2003 14:29:19 -0000	1.2
  @@ -58,10 +58,12 @@
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.thread.ThreadSafe;
  +import org.apache.cocoon.components.source.impl.PartSource;
   import org.apache.cocoon.environment.Redirector;
   import org.apache.excalibur.source.ModifiableSource;
   import org.apache.excalibur.source.Source;
   import org.apache.excalibur.source.SourceResolver;
  +import org.apache.excalibur.source.TraversableSource;
   
   /**
    * The CopySourceAction copies the content of it's "src" attribute to its "dest" parameter.
  @@ -98,6 +100,20 @@
           // Check that dest is writeable
           if (! (dest instanceof ModifiableSource)) {
               throw new IllegalArgumentException("Non-writeable URI : " + dest.getURI());
  +        }
  +        
  +        if (dest instanceof TraversableSource) {
  +            TraversableSource trDest = (TraversableSource) dest;
  +            if (trDest.isCollection()) {
  +                if (src instanceof TraversableSource) {
  +                    dest = trDest.getChild(((TraversableSource)src).getName());
  +                } else if (src instanceof PartSource){
  +                    // FIXME : quick hack to store "upload://xxx" sources into directories
  +                    // it would be better for the PartSource to be Traversable, or to
  +                    // create a new "NamedSource" interface
  +                    dest = trDest.getChild(((PartSource)src).getPart().getFileName());
  +                }
  +            }
           }
           
           ModifiableSource wdest = (ModifiableSource)dest;