Author: sebb
Date: Wed Dec 10 16:37:57 2014
New Revision: 1644470

URL: http://svn.apache.org/r1644470
Log:
NET-562 FTPFile.toFormattedString should print only signficant parts of the 
parsed date
+set Calendar to indicate which parts are significant remaining parsers
TODO: improve tests - ensure all more significant fields are set

Modified:
    
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
    
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
    
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java

Modified: 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java?rev=1644470&r1=1644469&r2=1644470&view=diff
==============================================================================
--- 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
 (original)
+++ 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
 Wed Dec 10 16:37:57 2014
@@ -129,6 +129,7 @@ public class FTPTimestampParserImpl impl
                 if (working.after(now)) { // must have been last year instead
                     working.add(Calendar.YEAR, -1);
                 }
+                setPrecision(recentDateFormat, working);
                 return working;
             }
         }
@@ -150,9 +151,39 @@ public class FTPTimestampParserImpl impl
                         +serverTime.getTime().toString(),
                     pp.getErrorIndex());
         }
+        setPrecision(defaultDateFormat, working);
         return working;
     }
 
+    private void setPrecision(SimpleDateFormat dateFormat, Calendar working) {
+        final String FORMAT_CHARS="HmsS"; // assume date is always present
+        String pattern = dateFormat.toPattern();
+        char lastChar=0;
+        for(char ch : FORMAT_CHARS.toCharArray()) {
+            if (pattern.indexOf(ch) == -1){
+                lastChar = ch;
+                break;
+            }
+        }
+        if (lastChar == 0) { // matched the lot
+            return;
+        }
+        switch(lastChar) {
+        case 'S':
+            working.clear(Calendar.MILLISECOND);
+            break;
+        case 's':
+            working.clear(Calendar.SECOND);
+            break;
+        case 'm':
+            working.clear(Calendar.MINUTE);
+            break;
+        case 'H':
+            working.clear(Calendar.HOUR_OF_DAY);
+            break;
+        }
+    }
+
     /**
      * @return Returns the defaultDateFormat.
      */

Modified: 
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java?rev=1644470&r1=1644469&r2=1644470&view=diff
==============================================================================
--- 
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
 (original)
+++ 
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
 Wed Dec 10 16:37:57 2014
@@ -247,6 +247,24 @@ public class UnixFTPEntryParserTest exte
     }
 
 
+    public void testPrecisionMinutes() {
+        FTPFile file = getParser().parseFTPEntry("drwxr-xr-x   2 user     
group         4096 Mar  2 15:13 zxbox");
+        assertNotNull(file);
+        Calendar stamp = file.getTimestamp();
+        assertNotNull(stamp);
+        assertTrue("Expected minute to be set", stamp.isSet(Calendar.MINUTE));
+        assertFalse("Expected second to be unset", 
stamp.isSet(Calendar.SECOND));
+    }
+
+    public void testPrecisionDays() {
+        FTPFile file = getParser().parseFTPEntry("drwxr-xr-x   2 user     
group         4096 Mar  2 2014 zxbox");
+        assertNotNull(file);
+        Calendar stamp = file.getTimestamp();
+        assertNotNull(stamp);
+        assertTrue("Expected day to be set", 
stamp.isSet(Calendar.DAY_OF_MONTH));
+        assertFalse("Expected hour to be unset", 
stamp.isSet(Calendar.HOUR_OF_DAY));
+    }
+
     private void checkPermissions(FTPFile f) {
         assertTrue("Should have user read permission.", f.hasPermission(
                 FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION));

Modified: 
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java?rev=1644470&r1=1644469&r2=1644470&view=diff
==============================================================================
--- 
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java
 (original)
+++ 
commons/proper/net/trunk/src/test/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java
 Wed Dec 10 16:37:57 2014
@@ -18,6 +18,7 @@ package org.apache.commons.net.ftp.parse
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.util.Calendar;
 
 import org.apache.commons.net.ftp.FTPFile;
 import org.apache.commons.net.ftp.FTPFileEntryParser;
@@ -204,6 +205,16 @@ public class VMSFTPEntryParserTest exten
         checkPermisions(file, 0400);
     }
 
+    public void testPrecisionSeconds() {
+        FTPFile file = getParser().parseFTPEntry("1-JUN.LIS;1              9/9 
          2-JUN-1998 07:32:04  [TRANSLATED]    (RWED,RD,,)");
+        assertNotNull(file);
+        Calendar stamp = file.getTimestamp();
+        assertNotNull(stamp);
+        assertTrue("Expected hour to be set", 
stamp.isSet(Calendar.HOUR_OF_DAY));
+        assertTrue("Expected second to be set", stamp.isSet(Calendar.SECOND));
+        assertFalse("Expected millisecond to be unset", 
stamp.isSet(Calendar.MILLISECOND));
+    }
+
     @Override
     protected String[] getBadListing()
     {


Reply via email to