]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/ScpTo.java
Move Swing JSCH UI in a separate package
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / jsch / ScpTo.java
index 2a6da62de8048b60607c7aee17d0994999151036..2c984bc22c7973aa357fd396c973d31ac6218703 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.argeo.slc.jsch;
 
 import java.io.ByteArrayInputStream;
@@ -15,6 +31,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.SlcException;
+import org.springframework.core.io.ByteArrayResource;
 import org.springframework.core.io.Resource;
 import org.springframework.util.AntPathMatcher;
 import org.springframework.util.PathMatcher;
@@ -56,7 +73,7 @@ public class ScpTo extends AbstractJschTask {
                }
 
                if (localResource != null) {
-                       uploadResource(session, localResource, remoteDir);
+                       uploadResource(session, localResource);
                }
        }
 
@@ -108,35 +125,45 @@ public class ScpTo extends AbstractJschTask {
 
        protected void uploadFile(Session session, File file, String remoteFile) {
                try {
-                       uploadFile(session, new FileInputStream(file), file.length(), file
+                       upload(session, new FileInputStream(file), file.length(), file
                                        .getPath(), file.toString(), remoteFile);
                } catch (FileNotFoundException e) {
                        throw new SlcException("Cannot upload " + file, e);
                }
        }
 
-       protected void uploadResource(Session session, Resource resource,
-                       String remoteFile) {
+       protected void uploadResource(Session session, Resource resource) {
+               String targetPath = remotePath != null ? remotePath : remoteDir + '/'
+                               + resource.getFilename();
                try {
                        File lFile = resource.getFile();
-                       uploadFile(session, lFile, remotePath);
+                       uploadFile(session, lFile, targetPath);
                } catch (IOException e) {
                        // no underlying file found
                        // load the resource in memory before transferring it
                        InputStream in = null;
                        try {
-                               in = resource.getInputStream();
-                               ByteArrayOutputStream out = new ByteArrayOutputStream();
-                               IOUtils.copy(in, out);
-                               byte[] arr = out.toByteArray();
+                               byte[] arr;
+                               String path;
+                               if (resource instanceof ByteArrayResource) {
+                                       arr = ((ByteArrayResource) resource).getByteArray();
+                                       path = "bytearray";
+                               } else {
+                                       in = resource.getInputStream();
+                                       ByteArrayOutputStream out = new ByteArrayOutputStream();
+                                       IOUtils.copy(in, out);
+                                       arr = out.toByteArray();
+                                       path = resource.getURL().getPath();
+                                       if (path.startsWith("/"))
+                                               path = path.substring(1);
+                               }
                                ByteArrayInputStream content = new ByteArrayInputStream(arr);
-                               uploadFile(session, content, arr.length, resource.getURL()
-                                               .getPath(), resource.toString(), remotePath);
+                               upload(session, content, arr.length, path, resource.toString(),
+                                               targetPath);
                                arr = null;
                        } catch (IOException e1) {
-                               throw new SlcException("Can neither interpret resource "
-                                               + localResource
-                                               + " as file, nor create a temporary file", e1);
+                               throw new SlcException("Can not interpret resource "
+                                               + localResource, e1);
                        } finally {
                                IOUtils.closeQuietly(in);
                                // no need to close byte arrays streams
@@ -144,7 +171,7 @@ public class ScpTo extends AbstractJschTask {
                }
        }
 
-       protected void uploadFile(Session session, InputStream in, long size,
+       protected void upload(Session session, InputStream in, long size,
                        String path, String sourceDesc, String remoteFile) {
                OutputStream channelOut;
                InputStream channelIn;