Changeset: 8aa70bd8d21f for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/8aa70bd8d21f
Added Files:
        a.bin
        b.bin
        c.bin
        src/main/java/org/monetdb/jdbc/MonetUploader.java
        src/main/java/org/monetdb/util/FileTransfer.java
        x.csv
Removed Files:
        src/main/java/org/monetdb/jdbc/MonetFileTransfer.java
Modified Files:
        src/main/java/org/monetdb/jdbc/MonetConnection.java
Branch: onclient
Log Message:

Register upload handler and download handler separately


diffs (222 lines):

diff --git a/a.bin b/a.bin
new file mode 100644
index 
0000000000000000000000000000000000000000..2c6aacdecdc212596c5e82ae940eaaa7de2f9437
GIT binary patch
literal 40
fc$^Kxi46cC3<RLl`gQ+>g@hy-PRr%?czw1X0=xh&

diff --git a/b.bin b/b.bin
new file mode 100644
index 
0000000000000000000000000000000000000000..dd67d8d40c9f01d10b8b788b1d9b4dbc482a77c5
GIT binary patch
literal 40
fc$^Kxi46cC3<RL_t-AlfLPAT@9Zr|q@_2oI1DF6f

diff --git a/c.bin b/c.bin
new file mode 100644
index 
0000000000000000000000000000000000000000..73bcaea4a0df193d7d57d9756c05396197d75906
GIT binary patch
literal 50
mc$~}3D=}cm%quYj5k?@w7(|$W2vZPY1|rNsgawGOWB>q%7!LdZ

diff --git a/src/main/java/org/monetdb/jdbc/MonetConnection.java 
b/src/main/java/org/monetdb/jdbc/MonetConnection.java
--- a/src/main/java/org/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/org/monetdb/jdbc/MonetConnection.java
@@ -10,8 +10,6 @@ package org.monetdb.jdbc;
 
 import java.io.File;
 import java.io.IOException;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
 import java.net.SocketException;
 import java.net.SocketTimeoutException;
 import java.sql.CallableStatement;
@@ -154,7 +152,7 @@ public class MonetConnection
        private DatabaseMetaData dbmd;
 
        /** A handler for ON CLIENT requests */
-       private MonetFileTransfer fileTransfer;
+       private MonetUploader uploader;
 
        /**
         * Constructor of a Connection for MonetDB. At this moment the
@@ -1199,19 +1197,19 @@ public class MonetConnection
        }
 
        /**
-        * Registers a MonetFileTransfer handler to support for example COPY ON 
CLIENT
+        * Registers a MonetUploader to support for example COPY ON CLIENT
         *
-        * @param fileTransfer the handler to register, or null to deregister
+        * @param uploader the handler to register, or null to deregister
         */
-       public void setFileTransfer(MonetFileTransfer fileTransfer) {
-               this.fileTransfer = fileTransfer;
+       public void setUploader(MonetUploader uploader) {
+               this.uploader = uploader;
        }
 
        /**
-        * Returns the currently registerered MonetFileTransfer handler, or null
+        * Returns the currently registerered MonetUploader, or null
         */
-       public MonetFileTransfer setFileTransfer() {
-               return fileTransfer;
+       public MonetUploader getUploader() {
+               return uploader;
        }
 
        /**
@@ -3209,17 +3207,17 @@ public class MonetConnection
        }
 
        private String handleUpload(String path, boolean textMode, int offset) 
throws IOException {
-               if (fileTransfer == null) {
+               if (uploader == null) {
                        return "No file transfer handler has been registered";
                }
 
                MonetUploadHandle handle = new MonetUploadHandle(server);
                boolean wasFaking = server.setInsertFakeFlushes(false);
                try {
-                       fileTransfer.handleUpload(handle, path, textMode, 
offset);
+                       uploader.handleUpload(handle, path, textMode, offset);
                        if (!handle.hasBeenUsed()) {
                                String message = String.format("Call to 
%s.handleUpload for path '%s' sent neither data nor an error message",
-                                               
fileTransfer.getClass().getCanonicalName(), path);
+                                               
uploader.getClass().getCanonicalName(), path);
                                throw new IOException(message);
                        }
                        handle.close();
diff --git a/src/main/java/org/monetdb/jdbc/MonetFileTransfer.java 
b/src/main/java/org/monetdb/jdbc/MonetFileTransfer.java
deleted file mode 100644
--- a/src/main/java/org/monetdb/jdbc/MonetFileTransfer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.monetdb.jdbc;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.FileSystems;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-public abstract class MonetFileTransfer {
-       public void handleUpload(MonetUploadHandle handle, String name, boolean 
textMode, int offset) throws IOException {
-               throw new UnsupportedOperationException("This client is not 
prepared to handle uploads");
-       }
-
-       public static class UploadFromDirectory extends MonetFileTransfer {
-               private final Path root;
-               private final boolean utf8Encoded;
-
-               public UploadFromDirectory(Path dir, boolean utf8Encoded) {
-                       root = dir.toAbsolutePath().normalize();
-                       this.utf8Encoded = utf8Encoded;
-               }
-
-               public UploadFromDirectory(String dir, boolean utf8Encoded) {
-                       this(FileSystems.getDefault().getPath(dir), 
utf8Encoded);
-               }
-
-               @Override
-               public void handleUpload(MonetUploadHandle handle, String name, 
boolean textMode, int offset) throws IOException {
-                       Path path = root.resolve(name).normalize();
-                       if (!path.startsWith(root)) {
-                               handle.sendError("File is not in upload 
directory");
-                               return;
-                       }
-                       if (!Files.isReadable(path)) {
-                               handle.sendError("Cannot read " + name);
-                               return;
-                       }
-                       if (textMode && (offset > 1 || !utf8Encoded)) {
-                               Charset encoding = utf8Encoded ? 
StandardCharsets.UTF_8 : Charset.defaultCharset();
-                               BufferedReader reader = 
Files.newBufferedReader(path, encoding);
-                               int toSkip = offset > 1 ? offset - 1 : 0;
-                               for (int i = 0; i < toSkip; i++) {
-                                       reader.readLine();
-                               }
-                               handle.uploadFrom(reader);
-                       } else {
-                               handle.uploadFrom(Files.newInputStream(path));
-                       }
-               }
-       }
-}
diff --git a/src/main/java/org/monetdb/jdbc/MonetUploader.java 
b/src/main/java/org/monetdb/jdbc/MonetUploader.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/jdbc/MonetUploader.java
@@ -0,0 +1,7 @@
+package org.monetdb.jdbc;
+
+import java.io.IOException;
+
+public interface MonetUploader {
+       void handleUpload(MonetUploadHandle handle, String name, boolean 
textMode, int offset) throws IOException;
+}
diff --git a/src/main/java/org/monetdb/util/FileTransfer.java 
b/src/main/java/org/monetdb/util/FileTransfer.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/util/FileTransfer.java
@@ -0,0 +1,49 @@
+package org.monetdb.util;
+
+import org.monetdb.jdbc.MonetUploader;
+import org.monetdb.jdbc.MonetUploadHandle;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+public class FileTransfer implements MonetUploader {
+       private final Path root;
+       private final boolean utf8Encoded;
+
+       public FileTransfer(Path dir, boolean utf8Encoded) {
+               root = dir.toAbsolutePath().normalize();
+               this.utf8Encoded = utf8Encoded;
+       }
+
+       public FileTransfer(String dir, boolean utf8Encoded) {
+               this(FileSystems.getDefault().getPath(dir), utf8Encoded);
+       }
+
+       public void handleUpload(MonetUploadHandle handle, String name, boolean 
textMode, int offset) throws IOException {
+               Path path = root.resolve(name).normalize();
+               if (!path.startsWith(root)) {
+                       handle.sendError("File is not in upload directory");
+                       return;
+               }
+               if (!Files.isReadable(path)) {
+                       handle.sendError("Cannot read " + name);
+                       return;
+               }
+               if (textMode && (offset > 1 || !utf8Encoded)) {
+                       Charset encoding = utf8Encoded ? StandardCharsets.UTF_8 
: Charset.defaultCharset();
+                       BufferedReader reader = Files.newBufferedReader(path, 
encoding);
+                       int toSkip = offset > 1 ? offset - 1 : 0;
+                       for (int i = 0; i < toSkip; i++) {
+                               reader.readLine();
+                       }
+                       handle.uploadFrom(reader);
+               } else {
+                       handle.uploadFrom(Files.newInputStream(path));
+               }
+       }
+}
diff --git a/x.csv b/x.csv
new file mode 100644
--- /dev/null
+++ b/x.csv
@@ -0,0 +1,3 @@
+1
+2
+3
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to