Author: rwinston
Date: Sun Jun 3 14:44:08 2007
New Revision: 543998
URL: http://svn.apache.org/viewvc?view=rev&rev=543998
Log:
Attempt to provide a workaround for date rollback issue
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTP.java
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClient.java
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClientConfig.java
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/io/CopyStreamException.java
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/site/xdoc/changes.xml
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/test/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImplTest.java
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTP.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTP.java?view=diff&rev=543998&r1=543997&r2=543998
==============================================================================
---
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTP.java
(original)
+++
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTP.java
Sun Jun 3 14:44:08 2007
@@ -33,7 +33,7 @@
import org.apache.commons.net.SocketClient;
/***
- * FTP provides the basic the functionality necessary to implement your
+ * FTP provides basic functionality necessary to implement your
* own FTP client. It extends org.apache.commons.net.SocketClient since
* extending TelnetClient was causing unwanted behavior (like connections
* that did not time out properly).
@@ -311,8 +311,7 @@
// returning too soon after encountering a naked CR or some
other
// anomaly.
}
- while (!(line.length() >= 4 && line.charAt(3) != '-' &&
- Character.isDigit(line.charAt(0))));
+ while ((line.length() >= 4 || line.charAt(3) == '-' ||
!(line.substring(0,3).matches("\\d{3}"))));
// This is too strong a condition because of non-conforming ftp
// servers like ftp.funet.fi which sent 226 as the last line of a
// 426 multi-line reply in response to ls /. We relax the
condition to
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClient.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClient.java?view=diff&rev=543998&r1=543997&r2=543998
==============================================================================
---
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClient.java
(original)
+++
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClient.java
Sun Jun 3 14:44:08 2007
@@ -2431,7 +2431,7 @@
public void setListHiddenFiles(boolean listHiddenFiles) {
this.__listHiddenFiles = listHiddenFiles;
}
-
+
/**
* @see #setListHiddenFiles(boolean)
* @return the current state
@@ -2439,6 +2439,27 @@
public boolean getListHiddenFiles() {
return this.__listHiddenFiles;
}
+
+ /**
+ *
+ * @return
+ */
+ public boolean isDateRollbackPermitted() {
+ return __configuration.isDateRollbackPermitted();
+ }
+
+ /**
+ * Set a boolean flag that specifies whether short date timestamps on
the server
+ * (i.e. those with no year component) can be "rolled back" by a year
if the server
+ * timestamp is greater than the local timestamp. This is true by
default.
+ *
+ * @param dateRollbackPermitted false to explicitly prevent date
rollback
+ */
+ public void setDateRollbackPermitted(boolean dateRollbackPermitted) {
+ __configuration.setDateRollbackPermitted(dateRollbackPermitted);
+ }
+
+
}
/* Emacs configuration
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClientConfig.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClientConfig.java?view=diff&rev=543998&r1=543997&r2=543998
==============================================================================
---
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClientConfig.java
(original)
+++
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/FTPClientConfig.java
Sun Jun 3 14:44:08 2007
@@ -192,6 +192,8 @@
private String shortMonthNames = null;
private String serverTimeZoneId = null;
+ private boolean dateRollbackPermitted = true;
+
/**
* The main constructor for an FTPClientConfig object
@@ -554,5 +556,22 @@
return LANGUAGE_CODE_MAP.keySet();
}
+
+ /**
+ * getter for the [EMAIL PROTECTED] #dateRollbackPermitted} property
+ * @return
+ */
+ public boolean isDateRollbackPermitted() {
+ return dateRollbackPermitted;
+ }
+
+ /**
+ * @see FTPClient#setDateRollbackPermitted(boolean)
+ *
+ * @param dateRollbackPermitted true/false
+ */
+ public void setDateRollbackPermitted(boolean dateRollbackPermitted) {
+ this.dateRollbackPermitted = dateRollbackPermitted;
+ }
}
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java?view=diff&rev=543998&r1=543997&r2=543998
==============================================================================
---
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
(original)
+++
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java
Sun Jun 3 14:44:08 2007
@@ -26,6 +26,7 @@
import java.util.TimeZone;
import org.apache.commons.net.ftp.Configurable;
+import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
/**
@@ -44,6 +45,7 @@
private SimpleDateFormat defaultDateFormat;
private SimpleDateFormat recentDateFormat;
private boolean lenientFutureDates = false;
+ private boolean dateRollbackPermitted = true;
/**
@@ -91,7 +93,7 @@
// slightly in the future to roll back a full year.
(Bug 35181)
now.add(Calendar.DATE, 1);
}
- if (working.after(now)) {
+ if (working.after(now) && isDateRollbackPermitted()) {
working.add(Calendar.YEAR, -1);
}
} else {
@@ -244,6 +246,8 @@
setServerTimeZone(config.getServerTimeZoneId());
this.lenientFutureDates = config.isLenientFutureDates();
+
+ this.dateRollbackPermitted = config.isDateRollbackPermitted();
}
/**
* @return Returns the lenientFutureDates.
@@ -257,4 +261,19 @@
void setLenientFutureDates(boolean lenientFutureDates) {
this.lenientFutureDates = lenientFutureDates;
}
+
+ /**
+ * @returns the [EMAIL PROTECTED] #dateRollbackPermitted} property
+ */
+ boolean isDateRollbackPermitted() {
+ return dateRollbackPermitted;
+ }
+
+ /**
+ * @see FTPClient#setDateRollbackPermitted(boolean)
+ * @param dateRollbackPermitted
+ */
+ void setDateRollbackPermitted(boolean dateRollbackPermitted) {
+ this.dateRollbackPermitted = dateRollbackPermitted;
+ }
}
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/io/CopyStreamException.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/io/CopyStreamException.java?view=diff&rev=543998&r1=543997&r2=543998
==============================================================================
---
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/io/CopyStreamException.java
(original)
+++
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/main/java/org/apache/commons/net/io/CopyStreamException.java
Sun Jun 3 14:44:08 2007
@@ -68,4 +68,12 @@
{
return ioException;
}
+
+ /**
+ * Returns the original [EMAIL PROTECTED] IOException}
+ */
+ @Override
+ public Throwable getCause() {
+ return getIOException();
+ }
}
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/site/xdoc/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/site/xdoc/changes.xml?view=diff&rev=543998&r1=543997&r2=543998
==============================================================================
---
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/site/xdoc/changes.xml
(original)
+++
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/site/xdoc/changes.xml
Sun Jun 3 14:44:08 2007
@@ -23,6 +23,14 @@
<body>
<release version="2.0" date="" description="Java 5.0 release">
+ <action dev="rwinston" type="update" issue="NET-159">
+ Add a setDateRollbackPermitted() method to
disable rolling
+ back dates by 1 year when only short date
format is
+ available, and server timstamp is ahead of
local.
+ </action>
+ <action dev="rwinston" type="update" issue="NET-153">
+ Add getCause() to CopyStreamException
+ </action>
<action dev="rwinston" type="update" issue="NET-155">
Change NNTPClient/NewsgroupInfo article counts
from int to long
</action>
Modified:
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/test/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImplTest.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/test/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImplTest.java?view=diff&rev=543998&r1=543997&r2=543998
==============================================================================
---
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/test/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImplTest.java
(original)
+++
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/test/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImplTest.java
Sun Jun 3 14:44:08 2007
@@ -158,6 +158,49 @@
}
+ public void testParseWithoutDateRollback() {
+ FTPTimestampParserImpl parser = new FTPTimestampParserImpl();
+
+ // Client calendar
+ Calendar now = Calendar.getInstance();
+
+ // Server calendar - same TZ, +1 hour drift
+ Calendar working = Calendar.getInstance();
+ working.add(Calendar.HOUR_OF_DAY, 1);
+
+ // Create a dummy timestamp
+ SimpleDateFormat formatter = new SimpleDateFormat("MMM d
HH:mm");
+ String timestamp = formatter.format(working.getTime());
+
+ Calendar server = null;
+
+ try {
+ server = parser.parseTimestamp(timestamp);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ // As the server's clock is (client clock + 1 hour), the date
should have rolled back
+ // by a full year
+ assertTrue( server.get(Calendar.YEAR) == now.get(Calendar.YEAR)
- 1 );
+
+ /* Now, we attempt to parse the same timestamp, but explicitly
disallow */
+ /* date rollback
*/
+
+ // Set property directly on parser (normally we would set it
via the FTPClientConfig instance)
+ parser.setDateRollbackPermitted(false);
+
+ try {
+ server = parser.parseTimestamp(timestamp);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ // The local and remote year value should be equal
+ assertTrue( server.get(Calendar.YEAR) == now.get(Calendar.YEAR)
);
+ }
+
+
public void testParser() {
FTPTimestampParserImpl parser = new FTPTimestampParserImpl();
try {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]