You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2015/05/08 10:16:41 UTC
svn commit: r1678300 - in /manifoldcf/trunk: CHANGES.txt
connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
Author: kwright
Date: Fri May 8 08:16:41 2015
New Revision: 1678300
URL: http://svn.apache.org/r1678300
Log:
Fix for CONNECTORS-1197
Modified:
manifoldcf/trunk/CHANGES.txt
manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
Modified: manifoldcf/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/CHANGES.txt?rev=1678300&r1=1678299&r2=1678300&view=diff
==============================================================================
--- manifoldcf/trunk/CHANGES.txt (original)
+++ manifoldcf/trunk/CHANGES.txt Fri May 8 08:16:41 2015
@@ -3,6 +3,9 @@ $Id$
======================= 2.2-dev =====================
+CONNECTORS-1197: Add "windows" file mode to file system output connector.
+(Karl Wright
+
CONNECTORS-1195: Fix for NumberFormatException exception thrown in Maximum Bandwidth Report
(Kishore Kumar)
Modified: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java?rev=1678300&r1=1678299&r2=1678300&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java (original)
+++ manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java Fri May 8 08:16:41 2015
@@ -28,6 +28,7 @@ import java.io.BufferedReader;
import java.io.StringReader;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.SystemUtils;
import java.net.URI;
import java.net.URISyntaxException;
@@ -629,17 +630,94 @@ public class FileOutputConnector extends
*/
final private String documentURItoFilePath(String documentURI) throws URISyntaxException, NullPointerException {
StringBuffer path = new StringBuffer();
- URI uri = null;
+ URI uri = new URI(documentURI);
+ if (SystemUtils.IS_OS_WINDOWS)
+ windowsFileName(path, uri);
+ else
+ unixFileName(path, uri);
+ return path.toString();
+ }
+
+ final private void windowsFileName(final StringBuffer path, final URI uri) {
+ // Illegal characters: \ / : * ? " < > |
+ boolean endsWithSlash = false;
+ if (uri.getScheme() != null) {
+ path.append(uri.getScheme());
+ path.append("_");
+ endsWithSlash = true;
+ }
- uri = new URI(documentURI);
+ if (uri.getHost() != null) {
+ path.append(uri.getHost());
+ endsWithSlash = false;
+ if (uri.getPort() != -1) {
+ path.append("_");
+ path.append(uri.getPort());
+ }
+ if (uri.getRawPath() != null) {
+ if (uri.getRawPath().length() == 0) {
+ path.append("_");
+ endsWithSlash = true;
+ } else if (uri.getRawPath().equals("/")) {
+ path.append(uri.getRawPath());
+ endsWithSlash = false;
+ } else {
+ for (String name : uri.getRawPath().split("/")) {
+ if (name.length() > 0) {
+ path.append("_");
+ path.append(convertWindowsString(name));
+ endsWithSlash = false;
+ }
+ }
+ }
+ }
+ if (uri.getRawQuery() != null) {
+ path.append("_");
+ path.append(convertWindowsString(uri.getRawQuery()));
+ endsWithSlash = false;
+ }
+ } else {
+ if (uri.getRawSchemeSpecificPart() != null) {
+ for (String name : uri.getRawSchemeSpecificPart().split("/")) {
+ if (name.length() > 0) {
+ path.append("_");
+ path.append(convertWindowsString(name));
+ endsWithSlash = false;
+ }
+ }
+ }
+ }
+
+ if (endsWithSlash) {
+ path.append(".content");
+ }
+ }
+
+ final private String convertWindowsString(final String input) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < input.length(); i++) {
+ char c = input.charAt(i);
+ // Handle filename disallowed special characters!
+ if (c == ':' || c == '/' || c == '\\' | c == '*' | c == '"' | c == '?' | c == '|' || c == '<' || c == '>') {
+ sb.append('_');
+ }
+ else
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+ final private void unixFileName(final StringBuffer path, final URI uri) {
+ boolean endsWithSlash = false;
if (uri.getScheme() != null) {
path.append(uri.getScheme());
path.append("/");
+ endsWithSlash = true;
}
if (uri.getHost() != null) {
path.append(uri.getHost());
+ endsWithSlash = false;
if (uri.getPort() != -1) {
path.append(":");
path.append(uri.getPort());
@@ -647,39 +725,43 @@ public class FileOutputConnector extends
if (uri.getRawPath() != null) {
if (uri.getRawPath().length() == 0) {
path.append("/");
+ endsWithSlash = true;
} else if (uri.getRawPath().equals("/")) {
path.append(uri.getRawPath());
+ endsWithSlash = false;
} else {
for (String name : uri.getRawPath().split("/")) {
if (name.length() > 0) {
path.append("/");
- path.append(convertString(name));
+ path.append(convertUnixString(name));
+ endsWithSlash = false;
}
}
}
}
if (uri.getRawQuery() != null) {
path.append("?");
- path.append(convertString(uri.getRawQuery()));
+ path.append(convertUnixString(uri.getRawQuery()));
+ endsWithSlash = false;
}
} else {
if (uri.getRawSchemeSpecificPart() != null) {
for (String name : uri.getRawSchemeSpecificPart().split("/")) {
if (name.length() > 0) {
path.append("/");
- path.append(convertString(name));
+ path.append(convertUnixString(name));
+ endsWithSlash = false;
}
}
}
}
- if (path.toString().endsWith("/")) {
+ if (endsWithSlash) {
path.append(".content");
}
- return path.toString();
}
- final private String convertString(final String input) {
+ final private String convertUnixString(final String input) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);