mxd 4 lat temu
rodzic
commit
fc90fb33e7

+ 1 - 8
magic-api/src/main/java/org/ssssssss/magicapi/adapter/Resource.java

@@ -153,13 +153,6 @@ public interface Resource {
 	 */
 	String getAbsolutePath();
 
-	default String getFilePath() {
-		Resource parent = parent();
-		while (parent.parent() != null){
-			parent = parent.parent();
-		}
-		String path = this.getAbsolutePath().replace(parent.getAbsolutePath(), "");
-		return path.startsWith("/") ? path.substring(1) : path;
-	}
+	String getFilePath();
 
 }

+ 1 - 1
magic-api/src/main/java/org/ssssssss/magicapi/adapter/ResourceAdapter.java

@@ -54,7 +54,7 @@ public abstract class ResourceAdapter {
 			}
 			return new JarResource(jarFile, entryName, entries, springBootClassPath);
 		} else {
-			return new FileResource(resource.getFile(), readonly);
+			return new FileResource(resource.getFile(), readonly, resource.getFile().getAbsolutePath());
 		}
 	}
 

+ 23 - 6
magic-api/src/main/java/org/ssssssss/magicapi/adapter/resource/FileResource.java

@@ -16,10 +16,12 @@ public class FileResource implements Resource {
 
 	private final boolean readonly;
 	private File file;
+	private String rootPath;
 
-	public FileResource(File file, boolean readonly) {
+	public FileResource(File file, boolean readonly, String rootPath) {
 		this.file = file;
 		this.readonly = readonly;
+		this.rootPath = rootPath;
 	}
 
 	@Override
@@ -66,7 +68,7 @@ public class FileResource implements Resource {
 
 	@Override
 	public Resource getResource(String name) {
-		return new FileResource(new File(this.file, name), this.readonly);
+		return new FileResource(new File(this.file, name), this.readonly, this.rootPath);
 	}
 
 	@Override
@@ -77,17 +79,17 @@ public class FileResource implements Resource {
 	@Override
 	public List<Resource> resources() {
 		File[] files = this.file.listFiles();
-		return files == null ? Collections.emptyList() : Arrays.stream(files).map(it -> new FileResource(it, this.readonly)).collect(Collectors.toList());
+		return files == null ? Collections.emptyList() : Arrays.stream(files).map(it -> new FileResource(it, this.readonly, this.rootPath)).collect(Collectors.toList());
 	}
 
 	@Override
 	public Resource parent() {
-		return new FileResource(this.file.getParentFile(), this.readonly);
+		return this.rootPath.equals(this.file.getAbsolutePath()) ? null : new FileResource(this.file.getParentFile(), this.readonly, this.rootPath);
 	}
 
 	@Override
 	public List<Resource> dirs() {
-		return IoUtils.dirs(this.file).stream().map(it -> new FileResource(it, this.readonly)).collect(Collectors.toList());
+		return IoUtils.dirs(this.file).stream().map(it -> new FileResource(it, this.readonly, this.rootPath)).collect(Collectors.toList());
 	}
 
 	@Override
@@ -102,7 +104,7 @@ public class FileResource implements Resource {
 
 	@Override
 	public List<Resource> files(String suffix) {
-		return IoUtils.files(this.file, suffix).stream().map(it -> new FileResource(it, this.readonly)).collect(Collectors.toList());
+		return IoUtils.files(this.file, suffix).stream().map(it -> new FileResource(it, this.readonly, this.rootPath)).collect(Collectors.toList());
 	}
 
 	@Override
@@ -132,4 +134,19 @@ public class FileResource implements Resource {
 			}
 		}
 	}
+
+	@Override
+	public String getFilePath() {
+		Resource parent = parent();
+		while (parent.parent() != null){
+			parent = parent.parent();
+		}
+		String path = this.getAbsolutePath()
+				.replace(parent.getAbsolutePath(), "")
+				.replace("\\","/");
+		if(isDirectory() && !path.endsWith("/")){
+			path += "/";
+		}
+		return path.startsWith("/") ? path.substring(1) : path;
+	}
 }

+ 17 - 3
magic-api/src/main/java/org/ssssssss/magicapi/adapter/resource/JarResource.java

@@ -22,12 +22,17 @@ public class JarResource implements Resource {
 	private final List<JarEntry> entries;
 
 	private final String entryName;
+
 	private final boolean inSpringBoot;
-	private JarResource parent = this;
+
+	private JarResource parent = null;
+
+	private String rootName;
 
 	public JarResource(JarFile jarFile, String entryName, List<JarEntry> entries, boolean inSpringBoot) {
 		this.jarFile = jarFile;
 		this.entryName = entryName;
+		this.rootName = entryName;
 		this.inSpringBoot = inSpringBoot;
 		this.entry = getEntry(this.entryName);
 		this.entries = entries;
@@ -106,7 +111,7 @@ public class JarResource implements Resource {
 	@Override
 	public List<Resource> files(String suffix) {
 		return this.entries.stream().filter(it -> it.getName().endsWith(suffix))
-				.map(entry -> new JarResource(jarFile, entry.getName(), Collections.emptyList(), this.inSpringBoot))
+				.map(entry -> new JarResource(jarFile, entry.getName(), Collections.emptyList(), this, this.inSpringBoot))
 				.collect(Collectors.toList());
 	}
 
@@ -117,7 +122,7 @@ public class JarResource implements Resource {
 				.filter(it -> it.getName().startsWith(prefix))
 				.map(entry -> new JarResource(jarFile, entry.getName(), entries.stream()
 						.filter(item -> item.getName().startsWith(PathUtils.replaceSlash(entry.getName() + "/")))
-						.collect(Collectors.toList()), this.inSpringBoot)
+						.collect(Collectors.toList()), this,this.inSpringBoot)
 				)
 				.collect(Collectors.toList());
 	}
@@ -132,4 +137,13 @@ public class JarResource implements Resource {
 		return String.format("jar://%s", this.entryName);
 	}
 
+	@Override
+	public String getFilePath() {
+		JarResource root = this;
+		while(root.parent != null){
+			root = root.parent;
+		}
+		String path = this.entryName.substring(root.rootName.length());
+		return path.startsWith("/") ? path.substring(1) : path;
+	}
 }

+ 12 - 0
magic-api/src/main/java/org/ssssssss/magicapi/adapter/resource/KeyValueResource.java

@@ -152,4 +152,16 @@ public abstract class KeyValueResource implements Resource {
 		return this.path;
 	}
 
+	@Override
+	public String getFilePath() {
+		Resource parent = parent();
+		while (parent.parent() != null){
+			parent = parent.parent();
+		}
+		String path = this.getAbsolutePath()
+				.replace(parent.getAbsolutePath(), "")
+				.replace("\\","/")
+				.replace(this.separator, "/");
+		return path.startsWith("/") ? path.substring(1) : path;
+	}
 }

+ 5 - 0
magic-api/src/main/java/org/ssssssss/magicapi/adapter/resource/ZipResource.java

@@ -119,4 +119,9 @@ public class ZipResource implements Resource {
 	public String getAbsolutePath() {
 		return this.path;
 	}
+
+	@Override
+	public String getFilePath() {
+		throw new UnsupportedOperationException();
+	}
 }