Ver Fonte

rename: CQuery#map => mapEach
new: PathUtils#common, cwd, list
new: Wildcard#asPathFilter

Mariusz Czarnowski há 4 anos atrás
pai
commit
bdad4715e8

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/CQuery.java

@@ -93,7 +93,7 @@ public interface CQuery<T> extends Iterable<T> {
 
     <R> CQuery<R> map(Function<? super T,? extends R> f);
     
-    <R> CQuery<R> map(EachFunction<? super T,? extends R> f);
+    <R> CQuery<R> mapEach(EachFunction<? super T,? extends R> f);
     
     <R> CQuery<R> unfold(Function<? super T, CQuery<R>> f);
 
@@ -103,7 +103,7 @@ public interface CQuery<T> extends Iterable<T> {
 
     CQuery<T> mapIf(Predicate<? super T> p, Function<? super T,? extends T> f);
 
-    CQuery<T> mapIf(EachPredicate<? super T> p, EachFunction<? super T,? extends T> f);
+    CQuery<T> mapEachIf(EachPredicate<? super T> p, EachFunction<? super T,? extends T> f);
 
     CQuery<T> unfoldIf(Predicate<? super T> p, Function<? super T, CQuery<T>> f);
 

+ 3 - 3
assira.core/src/main/java/net/ranides/assira/collection/query/CQueryAbstract.java

@@ -142,7 +142,7 @@ public abstract class CQueryAbstract<T> implements CQuery<T> {
     }
     
     @Override
-    public final <R> CQuery<R> map(EachFunction<? super T, ? extends R> f) {
+    public final <R> CQuery<R> mapEach(EachFunction<? super T, ? extends R> f) {
         return new CQIterable<>(() -> IteratorUtils.map(iterator(), f));
     }
 
@@ -152,8 +152,8 @@ public abstract class CQueryAbstract<T> implements CQuery<T> {
     }
 
     @Override
-    public CQuery<T> mapIf(EachPredicate<? super T> p, EachFunction<? super T, ? extends T> f) {
-        return map((i,v) -> p.test(i, v) ? v : f.apply(i,v));
+    public CQuery<T> mapEachIf(EachPredicate<? super T> p, EachFunction<? super T, ? extends T> f) {
+        return mapEach((i, v) -> p.test(i, v) ? v : f.apply(i,v));
     }
 
     @Override

+ 41 - 2
assira.core/src/main/java/net/ranides/assira/io/PathUtils.java

@@ -7,6 +7,7 @@
 package net.ranides.assira.io;
 
 import net.ranides.assira.collection.query.CQuery;
+import net.ranides.assira.text.Wildcard;
 
 import java.io.File;
 import java.io.IOException;
@@ -96,11 +97,11 @@ public final class PathUtils {
     }
 
     public static Path normalize(Path path) {
-        return Paths.get(path.toAbsolutePath().toUri().normalize());
+        return path.toAbsolutePath().normalize();
     }
 
     public static String normalize(String path) {
-        return Paths.get(Paths.get(path).toUri().normalize()).toString();
+        return normalize(Paths.get(path)).toString();
     }
 
     public static CQuery<Path> list(Path dir) {
@@ -111,6 +112,10 @@ public final class PathUtils {
         }
     }
 
+    public static CQuery<Path> list(Path dir, String wildcard) {
+        return PathUtils.list(dir).filter(Wildcard.compile(wildcard).asPathFilter());
+    }
+
     public static CQuery<Path> walk(Path dir) {
         try {
             return CQuery.from().stream(() -> Files.walk(dir, FileVisitOption.FOLLOW_LINKS));
@@ -118,4 +123,38 @@ public final class PathUtils {
             return CQuery.empty();
         }
     }
+
+    public static CQuery<Path> walk(Path dir, String wildcard) {
+        return PathUtils.walk(dir).filter(Wildcard.compile(wildcard).asPathFilter());
+    }
+
+    public static Path cwd() {
+        return PathUtils.normalize(Paths.get("."));
+    }
+
+    public static Path common(Path a, Path b) {
+        return cwd().relativize(common0(a,b));
+    }
+
+
+    public static Path common(Collection<Path> values) {
+        if(values.isEmpty()) {
+            return cwd();
+        }
+        return cwd().relativize(values.stream().reduce(values.iterator().next(), PathUtils::common0));
+    }
+
+    private static Path common0(Path a, Path b) {
+        Path na = PathUtils.normalize(a);
+        Path nb = PathUtils.normalize(b);
+
+        int i = 0;
+        int n = Math.min(na.getNameCount(), nb.getNameCount());
+
+        while(i<n && na.getName(i).equals(nb.getName(i))) {
+            i++;
+        }
+        return na.getRoot().resolve(na.subpath(0,i));
+    }
+
 }

+ 1 - 1
assira.core/src/main/java/net/ranides/assira/reflection/impl/RConstructor.java

@@ -72,7 +72,7 @@ public final class RConstructor<T> extends AConstructor<T> implements Serializab
         return FElements.newArguments(
             AHints.EMPTY, 
             method.getParameterCount(),
-			CQuery.from().array(method.getParameters()).map((i,v)-> FArgument.newArgument(c, this, v, i))
+			CQuery.from().array(method.getParameters()).mapEach((i, v)-> FArgument.newArgument(c, this, v, i))
         );
 	}
 

+ 1 - 1
assira.core/src/main/java/net/ranides/assira/reflection/impl/RMethod.java

@@ -74,7 +74,7 @@ public class RMethod extends AMethod implements IMethod, Serializable {
         return FElements.newArguments(
             AHints.EMPTY, 
             method.getParameterCount(),
-			CQuery.from().array(method.getParameters()).map((i,v)-> FArgument.newArgument(c, this, v, i))
+			CQuery.from().array(method.getParameters()).mapEach((i, v)-> FArgument.newArgument(c, this, v, i))
         );
 	}
     

+ 5 - 0
assira.core/src/main/java/net/ranides/assira/text/Wildcard.java

@@ -7,6 +7,7 @@
 package net.ranides.assira.text;
 
 import java.io.Serializable;
+import java.nio.file.Path;
 import java.util.function.Predicate;
 import java.util.regex.Pattern;
 
@@ -47,5 +48,9 @@ public final class Wildcard implements Serializable, Predicate<CharSequence> {
 	public Pattern asPattern() {
 		return re;
 	}
+
+	public Predicate<Path> asPathFilter() {
+		return f -> test(f.getFileName().toString());
+	}
 	
 }

+ 12 - 0
assira.core/src/test/java/net/ranides/assira/io/PathUtilsTest.java

@@ -7,6 +7,7 @@
 package net.ranides.assira.io;
 
 import static net.ranides.assira.junit.NewAssert.*;
+import static org.junit.Assert.assertEquals;
 
 import java.io.File;
 import java.net.MalformedURLException;
@@ -14,6 +15,7 @@ import java.net.URL;
 import java.nio.file.FileSystemNotFoundException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Arrays;
 
 import org.junit.Assume;
 import org.junit.Test;
@@ -238,6 +240,16 @@ public class PathUtilsTest {
         assertTrue(new File(PathUtils.normalize("other/./end")).isAbsolute());
     }
 
+    @Test
+    public void testCommon_W32() {
+        Assume.assumeTrue(HostSystem.WINDOWS.detected());
+
+        Path home = PathUtils.common(Arrays.asList(Paths.get("foo/here/dir/file1"), Paths.get("foo/here/dir/file2"), Paths.get("foo/here/not/file3")));
+
+        assertEquals("foo\\here", home.toString());
+        assertEquals("dir\\file1", home.relativize(Paths.get("foo/here/dir/file1")).toString());
+    }
+
     private static Path pce(String path, String ext) {
         return PathUtils.changeExtension(Paths.get(path), ext);
     }