Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Agapov2015-08-13 04:59:20 +0000
committerPavel Agapov2015-08-17 05:17:14 +0000
commitf256ffd7ada9480d43e9c971a9813729149facc2 (patch)
treed2ffbe0b1fecdc16dc2f8e891e58d566d3a11739
parentfa0cdc44a1a702777ca89dcea02e9438a62e384e (diff)
downloadorg.eclipse.rcptt-f256ffd7ada9480d43e9c971a9813729149facc2.tar.gz
org.eclipse.rcptt-f256ffd7ada9480d43e9c971a9813729149facc2.tar.xz
org.eclipse.rcptt-f256ffd7ada9480d43e9c971a9813729149facc2.zip
[474788] Use FileResolver to resolve pathes of copy-file command.
Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=474788 Change-Id: I5ad91075407c6fb822a41ef68144c53631fb9815 Signed-off-by: Pavel Agapov <pavel.agapov@xored.com>
-rw-r--r--ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java3
-rw-r--r--ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java1
-rw-r--r--ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java28
-rw-r--r--ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java5
-rw-r--r--ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java6
-rw-r--r--ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java12
-rw-r--r--ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java10
7 files changed, 45 insertions, 20 deletions
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java
index 764d8dbe4..4a3200ba1 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.rcptt.ecl.filesystem;
+import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.util.Collection;
@@ -35,4 +36,6 @@ public interface EclFile {
void write(InputStream data) throws CoreException;
InputStream read() throws CoreException;
+
+ File toFile();
}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java
index 509bf29a6..52dbf241b 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java
@@ -55,6 +55,7 @@ public class FileResolver {
}
public static EclFile resolve(String uri) throws CoreException {
+ uri = uri.replaceAll("(/{2,})|(\\\\{2,})", "/");
try {
return resolve(new URI(uri));
} catch (URISyntaxException e) {
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java
index dd60540f8..7ad040e97 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java
@@ -12,6 +12,7 @@ package org.eclipse.rcptt.ecl.filesystem.internal;
import java.io.IOException;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
@@ -26,13 +27,30 @@ public class CompositeEclFileResolver implements EclFileResolver {
}
@Override
- public EclFile resolve(URI uri) throws IOException {
- for (EclFileResolver child : children) {
- EclFile rv = child.resolve(uri);
- if (rv != null)
- return rv;
+ public EclFile resolve(URI uri) throws IOException {
+ EclFile result = resolveRaw(uri);
+ if (result != null) {
+ return result;
+ }
+ try {
+ uri = new URI("file", null, uri.getPath(), null);
+ } catch (URISyntaxException e) {
+ throw new IOException(e.getMessage());
+ }
+ result = resolveRaw(uri);
+ if (result != null) {
+ return result;
}
throw new IOException("failed to resolve " + uri);
}
+
+ private EclFile resolveRaw(URI uri) throws IOException {
+ for (EclFileResolver child : children) {
+ EclFile rv = child.resolve(uri);
+ if (rv != null)
+ return rv;
+ }
+ return null;
+ }
}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java
index 5dddb4b63..0fb5b450c 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java
@@ -214,4 +214,9 @@ public class JavaFile implements EclFile {
return file.toString();
}
+ @Override
+ public File toFile() {
+ return file;
+ }
+
}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java
index 73aa520ea..88f118faf 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.rcptt.ecl.filesystem.internal;
+import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
@@ -201,4 +202,9 @@ public class ResourceFile implements EclFile {
return path.makeAbsolute().toPortableString();
}
+ @Override
+ public File toFile() {
+ return new File(root.getLocation().append(path).makeAbsolute().toPortableString());
+ }
+
}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java
index dc2f72f73..cd8ef62cf 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java
@@ -16,6 +16,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.net.URI;
import java.nio.channels.FileChannel;
import org.eclipse.core.runtime.CoreException;
@@ -24,6 +25,7 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.rcptt.ecl.core.Command;
import org.eclipse.rcptt.ecl.filesystem.CopyFile;
import org.eclipse.rcptt.ecl.filesystem.EclFilesystemPlugin;
+import org.eclipse.rcptt.ecl.filesystem.FileResolver;
import org.eclipse.rcptt.ecl.runtime.ICommandService;
import org.eclipse.rcptt.ecl.runtime.IProcess;
@@ -41,14 +43,14 @@ public class CopyFileService implements ICommandService {
if (dst == null || dst.length() == 0)
return createError("Destination directory is not specified.");
-
+
try {
- File srcFile = new File(src).getCanonicalFile();
+ File srcFile = FileResolver.resolve(src).toFile().getCanonicalFile();
if (!srcFile.exists())
return createError("Source file/directory \"%s\" does not exist.",
srcFile);
- File dstFile = new File(dst).getCanonicalFile();
+ File dstFile = FileResolver.resolve(dst).toFile().getCanonicalFile();
if (dstFile.exists() && !dstFile.isDirectory())
return createError("Destination \"%s\" must be a directory.", dstFile);
@@ -58,9 +60,9 @@ public class CopyFileService implements ICommandService {
dstFile);
if (name != null && name.length() > 0)
- dstFile = new File(dst, name);
+ dstFile = new File(dstFile, name);
else
- dstFile = new File(dst, srcFile.getName());
+ dstFile = new File(dstFile, srcFile.getName());
if (srcFile.isFile())
return copyFile(srcFile, dstFile);
diff --git a/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java b/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java
index 53d2e01ea..f87ca3924 100644
--- a/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java
+++ b/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java
@@ -28,16 +28,6 @@ public class ReadFileTest extends TestWithSession{
}
@Test
- public void testWrongUri() {
- try {
- runScript("read-file \"%s\"", workspacePath);
- } catch (CoreException exc) {
- String message = exc.getMessage();
- Assert.assertTrue(message != null && message.equals("Failed to resolve project/folder/data.txt"));
- }
- }
-
- @Test
public void testNotExists() {
try {
runScript("read-file \"file:/unknown\"");

Back to the top