scohen      2005/05/30 07:41:34

  Modified:    src/testcases/org/apache/tools/ant/taskdefs/optional/net
                        FTPTest.java
               src/main/org/apache/tools/ant/taskdefs/optional/net FTP.java
               src/etc/testcases/taskdefs/optional/net ftp.xml
               docs/manual/OptionalTasks ftp.html
  Log:
  Add initialSiteCommand and siteCommand attributes.
  PR:34257, 34853
  
  Revision  Changes    Path
  1.21      +26 -0     
ant/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
  
  Index: FTPTest.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- FTPTest.java      30 May 2005 02:18:39 -0000      1.20
  +++ FTPTest.java      30 May 2005 14:41:34 -0000      1.21
  @@ -866,5 +866,31 @@
               fail("Retry forever specified, but failed.");
           }
       }
  +    
  +    public void testInitialCommand() {
  +        performCommandTest("test-initial-command", new int[] { 1,0 });
  +    }
  +    public void testSiteAction() {
  +        performCommandTest("test-site-action", new int[] { 1,0 });
  +    }
  +    
  +    private void performCommandTest(String target, int[] expectedCounts) {
  +        String[] messages = new String[]{
  +                "Doing Site Command: umask 222",
  +                "Failed to issue Site Command: umask 222",
   
  +        };
  +        LogCounter counter = new LogCounter();
  +        for (int i=0; i < messages.length; i++) {
  +            counter.addLogMessageToSearch(messages[i]);
  +        }
  +            
  +        getProject().addBuildListener(counter);
  +        getProject().executeTarget(target);
  +        for (int i=0; i < messages.length; i++) {
  +            assertEquals("target "+target+":message "+ i, expectedCounts[i], 
counter.getMatchCount(messages[i]));
  +        }
  +
  +    }
  +    
   }
  
  
  
  1.78      +77 -24    
ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
  
  Index: FTP.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java,v
  retrieving revision 1.77
  retrieving revision 1.78
  diff -u -r1.77 -r1.78
  --- FTP.java  30 May 2005 00:40:20 -0000      1.77
  +++ FTP.java  30 May 2005 14:41:34 -0000      1.78
  @@ -84,6 +84,7 @@
       protected static final int MK_DIR = 4;
       protected static final int CHMOD = 5;
       protected static final int RM_DIR = 6;
  +    protected static final int SITE_CMD = 7;
       /** return code of ftp - not implemented in commons-net version 1.0 */
       private static final int CODE_521 = 521;
       
  @@ -129,6 +130,8 @@
       private Granularity timestampGranularity = Granularity.getDefault();
       private boolean isConfigurationSet = false;
       private int retriesAllowed = 0;
  +    private String siteCommand = null;
  +    private String initialSiteCommand = null;
   
       protected static final String[] ACTION_STRS = {
           "sending",
  @@ -137,7 +140,8 @@
           "listing",
           "making directory",
           "chmod",
  -        "removing"
  +        "removing",
  +        "site"
           };
   
       protected static final String[] COMPLETED_ACTION_STRS = {
  @@ -147,7 +151,8 @@
           "listed",
           "created directory",
           "mode changed",
  -        "removed"
  +        "removed",
  +        "site command executed"
           };
   
       protected static final String[] ACTION_TARGET_STRS = {
  @@ -157,7 +162,8 @@
           "files",
           "directory",
           "files",
  -        "directories"
  +        "directories",
  +        "site command"
           };
   
   
  @@ -1193,7 +1199,7 @@
   
       /**
        * Sets the FTP action to be taken. Currently accepts "put", "get", 
"del",
  -     * "mkdir" and "list".
  +     * "mkdir", "chmod", "list", and "site".
        *
        * @deprecated setAction(String) is deprecated and is replaced with
        *      setAction(FTP.Action) to make Ant's Introspection mechanism do 
the
  @@ -1218,7 +1224,7 @@
   
       /**
        * Sets the FTP action to be taken. Currently accepts "put", "get", 
"del",
  -     * "mkdir", "chmod" and "list".
  +     * "mkdir", "chmod", "list", and "site".
        *
        * @param action the FTP action to be performed.
        *
  @@ -1268,10 +1274,11 @@
       }
   
       /**
  +     * Sets the systemTypeKey attribute.
        * Method for setting <code>FTPClientConfig</code> remote system key.
        * 
        * @param systemTypeKey the key to be set - BUT if blank 
  -     * the default value of null will be kept.
  +     * the default value of null (which signifies "autodetect") will be kept.
        * @see org.apache.commons.net.ftp.FTPClientConfig
        */
       public void setSystemTypeKey(FTPSystemType systemKey) {
  @@ -1283,9 +1290,7 @@
       }
   
       /**
  -     * Delegate method for
  -     * <code>FTPClientConfig.setDefaultDateFormatStr(String)</code>.
  -     * 
  +     * Sets the defaultDateFormatConfig attribute.
        * @param defaultDateFormatConfig configuration to be set, unless it is
        * null or empty string, in which case ignored.
        * @see org.apache.commons.net.ftp.FTPClientConfig
  @@ -1299,9 +1304,7 @@
       }
   
       /**
  -     * Delegate method for
  -     * <code>FTPClientConfig.setRecentDateFormatStr(String)</code>.
  -     * 
  +     * Sets the recentDateFormatConfig attribute.
        * @param recentDateFormatConfig configuration to be set, unless it is
        * null or empty string, in which case ignored.
        * @see org.apache.commons.net.ftp.FTPClientConfig
  @@ -1315,9 +1318,7 @@
       }
   
       /**
  -     * Delegate method for
  -     * <code>FTPClientConfig.setServerLanguageCode(String)</code>.
  -     * 
  +     * Sets the serverLanguageCode attribute.
        * @param serverLanguageCodeConfig configuration to be set, unless it is
        * null or empty string, in which case ignored.
        * @see org.apache.commons.net.ftp.FTPClientConfig
  @@ -1331,9 +1332,7 @@
       }
   
       /**
  -     * Delegate method for
  -     * <code>FTPClientConfig.setServerTimeZoneId(String)</code>.
  -     * 
  +     * Sets the serverTimeZoneConfig attribute.
        * @param serverTimeZoneConfig configuration to be set, unless it is
        * null or empty string, in which case ignored.
        * @see org.apache.commons.net.ftp.FTPClientConfig
  @@ -1347,8 +1346,7 @@
       }
   
       /**
  -     * Delegate method for
  -     * <code>FTPClientConfig.setShortMonthNames(String)</code>.
  +     * Sets the shortMonthNamesConfig attribute
        * 
        * @param shortMonthNamesConfig configuration to be set, unless it is
        * null or empty string, in which case ignored.
  @@ -1437,6 +1435,7 @@
           return timestampGranularity;
       }
       /**
  +     * Sets the timestampGranularity attribute
        * @param timestampGranularity The timestampGranularity to set.
        */
       public void setTimestampGranularity(Granularity timestampGranularity) {
  @@ -1446,6 +1445,24 @@
           this.timestampGranularity = timestampGranularity;
        }
       /**
  +     * Sets the siteCommand attribute.  This attribute
  +     * names the command that will be executed if the action
  +     * is "site".
  +     * @param siteCommand The siteCommand to set.
  +     */
  +    public void setSiteCommand(String siteCommand) {
  +        this.siteCommand = siteCommand;
  +    }
  +    /**
  +     * Sets the initialSiteCommand attribute.  This attribute
  +     * names a site command that will be executed immediately
  +     * after connection. 
  +     * @param initialSiteCommand The initialSiteCommand to set.
  +     */
  +    public void setInitialSiteCommand(String initialCommand) {
  +        this.initialSiteCommand = initialCommand;
  +    }
  +    /**
        * Checks to see that all required parameters are set.
        *
        * @throws BuildException if the configuration is not valid.
  @@ -1475,6 +1492,11 @@
               throw new BuildException("chmod attribute must be set for chmod "
                    + "action!");
           }
  +        if (action == SITE_CMD && siteCommand == null) {
  +            throw new BuildException("sitecommand attribute must be set for 
site "
  +                 + "action!");
  +        }
  +
           
           if (this.isConfigurationSet) {
               try {
  @@ -1486,10 +1508,10 @@
           }
       }
       
  -    protected void executeRetryable(RetryHandler h, Retryable r, String 
filename) 
  +    protected void executeRetryable(RetryHandler h, Retryable r, String 
descr) 
       throws IOException
       {
  -        h.execute(r, filename);
  +        h.execute(r, descr);
       }
   
   
  @@ -2239,12 +2261,33 @@
                            + "mode: " + ftp.getReplyString());
                   }
               }
  +            
  +            // If an initial command was configured then send it.
  +            // Some FTP servers offer different modes of operation,
  +            // E.G. switching between a UNIX file system mode and
  +            // a legacy file system.
  +            if (this.initialSiteCommand != null) {
  +                RetryHandler h = new RetryHandler(this.retriesAllowed, this);
  +                final FTPClient lftp = ftp;
  +                executeRetryable(h, new Retryable() {
  +                    public void execute() throws IOException {
  +                        doSiteCommand(lftp, FTP.this.initialSiteCommand);
  +                    }
  +                }, "initial site command: "+ this.initialSiteCommand);
  +            }
  +
   
               // For a unix ftp server you can set the default mask for all 
files
               // created.
   
               if (umask != null) {
  -                doSiteCommand(ftp, "umask " + umask);
  +                RetryHandler h = new RetryHandler(this.retriesAllowed, this);
  +                final FTPClient lftp = ftp;
  +                executeRetryable(h, new Retryable() {
  +                    public void execute() throws IOException {
  +                        doSiteCommand(lftp, "umask " + umask);
  +                    }
  +                }, "umask " + umask);
               }
   
               // If the action is MK_DIR, then the specified remote
  @@ -2258,6 +2301,14 @@
                           makeRemoteDir(lftp, remotedir);
                       }
                   }, remotedir);
  +            } else if (action == SITE_CMD) {
  +                    RetryHandler h = new RetryHandler(this.retriesAllowed, 
this);
  +                    final FTPClient lftp = ftp;
  +                    executeRetryable(h, new Retryable() {
  +                        public void execute() throws IOException {
  +                            doSiteCommand(lftp, FTP.this.siteCommand);
  +                        }
  +                    }, "Site Command: " + this.siteCommand);
               } else {
                   if (remotedir != null) {
                       log("changing the remote directory", 
Project.MSG_VERBOSE);
  @@ -2301,7 +2352,7 @@
   
           private static final String[] VALID_ACTIONS = {
               "send", "put", "recv", "get", "del", "delete", "list", "mkdir",
  -            "chmod", "rmdir"
  +            "chmod", "rmdir", "site"
               };
   
   
  @@ -2337,6 +2388,8 @@
                   return MK_DIR;
               } else if (actionL.equals("rmdir")) {
                   return RM_DIR;
  +            } else if (actionL.equals("site")) {
  +                return SITE_CMD;
               }
               return SEND_FILES;
           }
  
  
  
  1.14      +25 -0     ant/src/etc/testcases/taskdefs/optional/net/ftp.xml
  
  Index: ftp.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/net/ftp.xml,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ftp.xml   30 May 2005 00:40:20 -0000      1.13
  +++ ftp.xml   30 May 2005 14:41:34 -0000      1.14
  @@ -285,5 +285,30 @@
               <fileset refid="fileset-destination-with-selector"/>
           </ftp>
       </target>
  +    <target name="test-initial-command">
  +        <ftp action="put"
  +            server="${ftp.host}"
  +            userid="${ftp.user}"
  +            password="${ftp.password}"
  +            separator="${ftp.filesep}"
  +            remotedir="${tmp.remote}"
  +            initialSiteCommand="umask 222"
  +            >
  +            <fileset dir="${tmp.local}">
  +                <patternset refid="timed-test-files"/>
  +            </fileset>
  +        </ftp>
  +    </target>
   
  +    <target name="test-site-action">
  +        <ftp action="site"
  +            server="${ftp.host}"
  +            userid="${ftp.user}"
  +            password="${ftp.password}"
  +            separator="${ftp.filesep}"
  +            remotedir="${tmp.remote}"
  +            siteCommand="umask 222"
  +            >
  +        </ftp>
  +    </target>
   </project>
  \ No newline at end of file
  
  
  
  1.38      +13 -1     ant/docs/manual/OptionalTasks/ftp.html
  
  Index: ftp.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/ftp.html,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- ftp.html  30 May 2005 00:40:21 -0000      1.37
  +++ ftp.html  30 May 2005 14:41:34 -0000      1.38
  @@ -77,7 +77,7 @@
       <td valign="top">the ftp action to perform, defaulting to "send".
                        Currently supports "put", "get",
                        "del", "list", "chmod",
  -                     "mkdir" and "rmdir".</td>
  +                     "mkdir", "rmdir", and "site".</td>
       <td valign="top" align="center">No</td>
     </tr>
     <tr>
  @@ -200,6 +200,18 @@
       operation will keep trying until it succeeds.</td>
       <td valign="top" align="center">No; defaults to 0</td>
     </tr>
  +  <tr>
  +    <td valign="top">siteCommand</td>
  +    <td valign="top">Set the server-specific SITE command to execute if
  +    the <code>action</code> attribute has been specified as 
<code>"site"</code>.
  +    <td valign="top" align="center">No</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">initialSiteCommand</td>
  +    <td valign="top">Set a server-specific SITE command to execute 
immediately
  +    after login.
  +    <td valign="top" align="center">No</td>
  +  </tr>
   
       <tr>
       <td colspan="3">
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to