diff --git a/benchmark/src/main/java/net/woggioni/jwo/benchmark/Main.java b/benchmark/src/main/java/net/woggioni/jwo/benchmark/Main.java index 5a1915c..8919a51 100644 --- a/benchmark/src/main/java/net/woggioni/jwo/benchmark/Main.java +++ b/benchmark/src/main/java/net/woggioni/jwo/benchmark/Main.java @@ -4,8 +4,8 @@ import lombok.SneakyThrows; import net.woggioni.jwo.Chronometer; import net.woggioni.jwo.CollectionUtils; import net.woggioni.jwo.JWO; -import net.woggioni.jwo.io.CircularInputStream; -import net.woggioni.jwo.tuple.Tuple2; +import net.woggioni.jwo.CircularInputStream; +import net.woggioni.jwo.Tuple2; import java.io.InputStream; import java.io.InputStreamReader; diff --git a/build.gradle b/build.gradle index eb67144..735aa48 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,6 @@ plugins { id 'maven-publish' + id 'net.woggioni.plugins.multi-release-jar' id 'net.woggioni.gradle.lombok' apply false } @@ -37,20 +38,12 @@ dependencies { } java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 withJavadocJar() withSourcesJar() } -jar { - manifest{ - attributes([ - "Automatic-Module-Name": "net.woggioni.jwo" - ]) - } -} - TaskProvider pathClassLoaderTestBundleTask = tasks.register("pathClassLoaderTestBundle", Zip) { from(configurations.pathClassloaderTest) archiveBaseName = "pathClassLoaderTestBundle" diff --git a/gradle.properties b/gradle.properties index 80e1eda..e4d7fa3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -gradle.version = 7.1 +gradle.version = 7.1.1 jwo.version=1.0 junitJupiter.version=5.7.0 lombok.version=1.18.16 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c..7454180 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf..05679dc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0..744e882 100755 --- a/gradlew +++ b/gradlew @@ -72,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* ) diff --git a/settings.gradle b/settings.gradle index cec1a9e..3209b19 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,6 +8,7 @@ pluginManagement { plugins { id "net.woggioni.gradle.lombok" version "0.1" + id "net.woggioni.plugins.multi-release-jar" version "0.1" } } diff --git a/src/main/java/net/woggioni/jwo/io/CircularBuffer.java b/src/main/java/net/woggioni/jwo/CircularBuffer.java similarity index 96% rename from src/main/java/net/woggioni/jwo/io/CircularBuffer.java rename to src/main/java/net/woggioni/jwo/CircularBuffer.java index 9b02bb8..00cbe5c 100644 --- a/src/main/java/net/woggioni/jwo/io/CircularBuffer.java +++ b/src/main/java/net/woggioni/jwo/CircularBuffer.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import lombok.SneakyThrows; diff --git a/src/main/java/net/woggioni/jwo/io/CircularInputStream.java b/src/main/java/net/woggioni/jwo/CircularInputStream.java similarity index 97% rename from src/main/java/net/woggioni/jwo/io/CircularInputStream.java rename to src/main/java/net/woggioni/jwo/CircularInputStream.java index 03704d0..95037f9 100644 --- a/src/main/java/net/woggioni/jwo/io/CircularInputStream.java +++ b/src/main/java/net/woggioni/jwo/CircularInputStream.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/net/woggioni/jwo/hash/Hash.java b/src/main/java/net/woggioni/jwo/Hash.java similarity index 98% rename from src/main/java/net/woggioni/jwo/hash/Hash.java rename to src/main/java/net/woggioni/jwo/Hash.java index 9b6145b..85a8d4f 100644 --- a/src/main/java/net/woggioni/jwo/hash/Hash.java +++ b/src/main/java/net/woggioni/jwo/Hash.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.hash; +package net.woggioni.jwo; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/src/main/java/net/woggioni/jwo/HttpClient.java b/src/main/java/net/woggioni/jwo/HttpClient.java new file mode 100644 index 0000000..fe35fda --- /dev/null +++ b/src/main/java/net/woggioni/jwo/HttpClient.java @@ -0,0 +1,125 @@ +package net.woggioni.jwo; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.SneakyThrows; + +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class HttpClient { + + private SSLSocketFactory socketFactory; + + public HttpClient() {} + + public HttpClient(final SSLContext sslContext) { + socketFactory = sslContext.getSocketFactory(); + } + + @SneakyThrows + public HttpsURLConnection call(HttpRequest httpRequest) { + HttpsURLConnection conn = (HttpsURLConnection) httpRequest.url.openConnection(); + if(socketFactory != null) { + conn.setSSLSocketFactory(socketFactory); + } + conn.setInstanceFollowRedirects(false); + conn.setRequestMethod(httpRequest.method.text); + httpRequest.headers.forEach((key, value) -> + value.forEach(headerValue -> conn.addRequestProperty(key, headerValue))); + switch (httpRequest.method) { + case PUT: + case POST: + case DELETE: + if (httpRequest.body != null) { + conn.setDoOutput(true); + byte[] buffer = new byte[1024]; + OutputStream os = conn.getOutputStream(); + while (true) { + int read = httpRequest.body.read(buffer, 0, buffer.length); + if (read < 0) break; + os.write(buffer, 0, read); + } + } + break; + case GET: + case HEAD: + case OPTIONS: + break; + } + return conn; + } + + public enum HttpMethod { + PUT("PUT"), + GET("GET"), + POST("POST"), + DELETE("DELETE"), + HEAD("HEAD"), + OPTIONS("OPTIONS"); + + public final String text; + + HttpMethod(String text) { + this.text = text; + } + } + + public enum HttpStatus { + OK(200), + INTERNAL_SERVER_ERROR(500), + BAD_REQUEST(400), + UNAUTHORIZED(401), + FORBIDDEN(403), + NOT_FOUND(404), + CONFLICT(409); + + public final int code; + + HttpStatus(int code) { + this.code = code; + } + } + + @Builder(builderMethodName = "privateBuilder", access = AccessLevel.PUBLIC) + public static class HttpRequest { + + final URL url; + + final HttpMethod method = HttpMethod.GET; + + final Map> headers = Collections.emptyMap(); + + final InputStream body = null; + + public static HttpRequestBuilder builder(URL url) { + return HttpRequest.privateBuilder().url(url); + } + + public static class Builder { + private final URL url; + + private HttpMethod method = HttpMethod.GET; + + private Map> headers = Collections.emptyMap(); + + private InputStream body = null; + + private Builder(URL url) { + this.url = url; + } + + public Builder method(HttpMethod method) { + this.method = method; + return this; + } + } + } +} diff --git a/src/main/java/net/woggioni/jwo/JWO.java b/src/main/java/net/woggioni/jwo/JWO.java index dbcd305..75f00ad 100644 --- a/src/main/java/net/woggioni/jwo/JWO.java +++ b/src/main/java/net/woggioni/jwo/JWO.java @@ -2,7 +2,6 @@ package net.woggioni.jwo; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import net.woggioni.jwo.tuple.Tuple2; import javax.net.ssl.*; import java.io.*; diff --git a/src/main/java/net/woggioni/jwo/io/JarExtractorInputStream.java b/src/main/java/net/woggioni/jwo/JarExtractorInputStream.java similarity index 89% rename from src/main/java/net/woggioni/jwo/io/JarExtractorInputStream.java rename to src/main/java/net/woggioni/jwo/JarExtractorInputStream.java index b11779d..d1c4ae9 100644 --- a/src/main/java/net/woggioni/jwo/io/JarExtractorInputStream.java +++ b/src/main/java/net/woggioni/jwo/JarExtractorInputStream.java @@ -1,6 +1,4 @@ -package net.woggioni.jwo.io; - -import net.woggioni.jwo.JWO; +package net.woggioni.jwo; import java.io.IOException; import java.io.InputStream; @@ -13,11 +11,10 @@ import java.util.jar.Manifest; import java.util.zip.ZipEntry; /** - * Input stream that extract a jar archive in the provided {@param destination} while reading it + * Input stream that extract a jar archive in the provided destination while reading it */ -class JarExtractorInputStream extends JarInputStream { +public class JarExtractorInputStream extends JarInputStream { - private final String sourceLocation; private final Path destination; private OutputStream currentFile = null; @@ -26,7 +23,6 @@ class JarExtractorInputStream extends JarInputStream { boolean verify, String sourceLocation) throws IOException { super(source, verify); - this.sourceLocation = sourceLocation; this.destination = destination; Path newFileSystemLocation = destination.resolve(JarFile.MANIFEST_NAME); Files.createDirectories(newFileSystemLocation.getParent()); diff --git a/src/main/java/net/woggioni/jwo/collection/LexicographicIterableComparator.java b/src/main/java/net/woggioni/jwo/LexicographicIterableComparator.java similarity index 96% rename from src/main/java/net/woggioni/jwo/collection/LexicographicIterableComparator.java rename to src/main/java/net/woggioni/jwo/LexicographicIterableComparator.java index 9a474ab..a605427 100644 --- a/src/main/java/net/woggioni/jwo/collection/LexicographicIterableComparator.java +++ b/src/main/java/net/woggioni/jwo/LexicographicIterableComparator.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.collection; +package net.woggioni.jwo; import java.util.Comparator; diff --git a/src/main/java/net/woggioni/jwo/io/LookAheadInputStream.java b/src/main/java/net/woggioni/jwo/LookAheadInputStream.java similarity index 97% rename from src/main/java/net/woggioni/jwo/io/LookAheadInputStream.java rename to src/main/java/net/woggioni/jwo/LookAheadInputStream.java index b65401f..d8f203a 100644 --- a/src/main/java/net/woggioni/jwo/io/LookAheadInputStream.java +++ b/src/main/java/net/woggioni/jwo/LookAheadInputStream.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import lombok.SneakyThrows; diff --git a/src/main/java/net/woggioni/jwo/io/LookAheadTextInputStream.java b/src/main/java/net/woggioni/jwo/LookAheadTextInputStream.java similarity index 97% rename from src/main/java/net/woggioni/jwo/io/LookAheadTextInputStream.java rename to src/main/java/net/woggioni/jwo/LookAheadTextInputStream.java index dadb989..52e0b4b 100644 --- a/src/main/java/net/woggioni/jwo/io/LookAheadTextInputStream.java +++ b/src/main/java/net/woggioni/jwo/LookAheadTextInputStream.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import lombok.SneakyThrows; diff --git a/src/main/java/net/woggioni/jwo/cache/LruCache.java b/src/main/java/net/woggioni/jwo/LruCache.java similarity index 98% rename from src/main/java/net/woggioni/jwo/cache/LruCache.java rename to src/main/java/net/woggioni/jwo/LruCache.java index 36bbd34..12241fe 100644 --- a/src/main/java/net/woggioni/jwo/cache/LruCache.java +++ b/src/main/java/net/woggioni/jwo/LruCache.java @@ -1,8 +1,6 @@ -package net.woggioni.jwo.cache; +package net.woggioni.jwo; import lombok.Getter; -import net.woggioni.jwo.Chronometer; -import net.woggioni.jwo.CollectionUtils; import java.util.*; import java.util.function.Function; diff --git a/src/main/java/net/woggioni/jwo/tuple/MutableTuple2.java b/src/main/java/net/woggioni/jwo/MutableTuple2.java similarity index 96% rename from src/main/java/net/woggioni/jwo/tuple/MutableTuple2.java rename to src/main/java/net/woggioni/jwo/MutableTuple2.java index 65f3444..53d4a9f 100644 --- a/src/main/java/net/woggioni/jwo/tuple/MutableTuple2.java +++ b/src/main/java/net/woggioni/jwo/MutableTuple2.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.tuple; +package net.woggioni.jwo; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; diff --git a/src/main/java/net/woggioni/jwo/tuple/MutableTuple3.java b/src/main/java/net/woggioni/jwo/MutableTuple3.java similarity index 97% rename from src/main/java/net/woggioni/jwo/tuple/MutableTuple3.java rename to src/main/java/net/woggioni/jwo/MutableTuple3.java index 6e9e6cc..1e44846 100644 --- a/src/main/java/net/woggioni/jwo/tuple/MutableTuple3.java +++ b/src/main/java/net/woggioni/jwo/MutableTuple3.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.tuple; +package net.woggioni.jwo; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; diff --git a/src/main/java/net/woggioni/jwo/NullInputStream.java b/src/main/java/net/woggioni/jwo/NullInputStream.java new file mode 100644 index 0000000..b94eb00 --- /dev/null +++ b/src/main/java/net/woggioni/jwo/NullInputStream.java @@ -0,0 +1,11 @@ +package net.woggioni.jwo; + +import java.io.IOException; +import java.io.InputStream; + +public class NullInputStream extends InputStream { + @Override + public int read() throws IOException { + return -1; + } +} diff --git a/src/main/java/net/woggioni/jwo/io/NullOutputStream.java b/src/main/java/net/woggioni/jwo/NullOutputStream.java similarity index 86% rename from src/main/java/net/woggioni/jwo/io/NullOutputStream.java rename to src/main/java/net/woggioni/jwo/NullOutputStream.java index 20545d3..ddbd2b4 100644 --- a/src/main/java/net/woggioni/jwo/io/NullOutputStream.java +++ b/src/main/java/net/woggioni/jwo/NullOutputStream.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import java.io.OutputStream; diff --git a/src/main/java/net/woggioni/jwo/loader/PathClassLoader.java b/src/main/java/net/woggioni/jwo/PathClassLoader.java similarity index 59% rename from src/main/java/net/woggioni/jwo/loader/PathClassLoader.java rename to src/main/java/net/woggioni/jwo/PathClassLoader.java index f3bc3d0..05b2d55 100644 --- a/src/main/java/net/woggioni/jwo/loader/PathClassLoader.java +++ b/src/main/java/net/woggioni/jwo/PathClassLoader.java @@ -1,13 +1,17 @@ -package net.woggioni.jwo.loader; +package net.woggioni.jwo; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import lombok.SneakyThrows; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URI; import java.net.URL; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.SimpleFileVisitor; +import java.net.URLConnection; +import java.net.URLStreamHandler; +import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.util.*; @@ -94,4 +98,63 @@ public final class PathClassLoader extends ClassLoader { private static URL toURL(Path path) throws IOException { return new URL(null, path.toUri().toString(), PathURLStreamHandler.INSTANCE); } + + private static final class PathURLConnection extends URLConnection { + + private final Path path; + + PathURLConnection(URL url, Path path) { + super(url); + this.path = path; + } + + @Override + public void connect() {} + + @Override + public long getContentLengthLong() { + try { + return Files.size(this.path); + } catch (IOException e) { + throw new RuntimeException("could not get size of: " + this.path, e); + } + } + + @Override + public InputStream getInputStream() throws IOException { + return Files.newInputStream(this.path); + } + + @Override + public OutputStream getOutputStream() throws IOException { + return Files.newOutputStream(this.path); + } + + @Override + @SneakyThrows + public String getContentType() { + return Files.probeContentType(this.path); + } + + @Override + @SneakyThrows + public long getLastModified() { + BasicFileAttributes attributes = Files.readAttributes(this.path, BasicFileAttributes.class); + return attributes.lastModifiedTime().toMillis(); + } + } + + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class PathURLStreamHandler extends URLStreamHandler { + + static final URLStreamHandler INSTANCE = new PathURLStreamHandler(); + + @Override + @SneakyThrows + protected URLConnection openConnection(URL url) { + URI uri = url.toURI(); + Path path = Paths.get(uri); + return new PathURLConnection(url, path); + } + } } \ No newline at end of file diff --git a/src/main/java/net/woggioni/jwo/signing/SignatureCollector.java b/src/main/java/net/woggioni/jwo/SignatureCollector.java similarity index 98% rename from src/main/java/net/woggioni/jwo/signing/SignatureCollector.java rename to src/main/java/net/woggioni/jwo/SignatureCollector.java index 800a18e..60c4898 100644 --- a/src/main/java/net/woggioni/jwo/signing/SignatureCollector.java +++ b/src/main/java/net/woggioni/jwo/SignatureCollector.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.signing; +package net.woggioni.jwo; import java.security.CodeSigner; import java.security.PublicKey; diff --git a/src/main/java/net/woggioni/jwo/tree/TreeNodeVisitor.java b/src/main/java/net/woggioni/jwo/TreeNodeVisitor.java similarity index 68% rename from src/main/java/net/woggioni/jwo/tree/TreeNodeVisitor.java rename to src/main/java/net/woggioni/jwo/TreeNodeVisitor.java index 6411a24..388e27f 100644 --- a/src/main/java/net/woggioni/jwo/tree/TreeNodeVisitor.java +++ b/src/main/java/net/woggioni/jwo/TreeNodeVisitor.java @@ -1,5 +1,6 @@ -package net.woggioni.jwo.tree; +package net.woggioni.jwo; +import java.util.Iterator; import java.util.List; /** @@ -13,7 +14,35 @@ import java.util.List; * The last element of the list corresponds to the node currently being traversed. * @param the type of the context object used */ -public interface TreeNodeVisitor, T> { +public interface TreeNodeVisitor, T> { + + interface TreeNode { + Iterator children(); + } + + /** + * This interface exposes the methods that are visible to the user of + * {@link TreeWalker}, it allows to + * set/get a custom object in the current stack context or to get the current link's Aci + * @param the type of the context object used + */ + interface StackContext { + + /** + * @param ctx the user object to set for this stack level + */ + void setContext(T ctx); + + /** + * @return the current user object + */ + T getContext(); + + /** + * @return the current TreeNode + */ + NODE getNode(); + } enum VisitOutcome { CONTINUE, SKIP, EARLY_EXIT diff --git a/src/main/java/net/woggioni/jwo/tree/TreeWalker.java b/src/main/java/net/woggioni/jwo/TreeWalker.java similarity index 86% rename from src/main/java/net/woggioni/jwo/tree/TreeWalker.java rename to src/main/java/net/woggioni/jwo/TreeWalker.java index 1134f48..3e16069 100644 --- a/src/main/java/net/woggioni/jwo/tree/TreeWalker.java +++ b/src/main/java/net/woggioni/jwo/TreeWalker.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.tree; +package net.woggioni.jwo; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -13,10 +13,10 @@ import static net.woggioni.jwo.JWO.pop; import static net.woggioni.jwo.JWO.tail; @RequiredArgsConstructor -public class TreeWalker, T> { +public class TreeWalker, T> { @RequiredArgsConstructor - private static class StackElement, T> implements StackContext { + private static class StackElement, T> implements TreeNodeVisitor.StackContext { @Getter final NODE node; @@ -39,7 +39,7 @@ public class TreeWalker, T> { List> stack = new ArrayList<>(); StackElement rootStackElement = new StackElement<>(root); stack.add(rootStackElement); - List> publicStack = Collections.unmodifiableList(stack); + List> publicStack = Collections.unmodifiableList(stack); switch (visitor.visitPre(publicStack)) { case CONTINUE: rootStackElement.childrenIterator = root.children(); diff --git a/src/main/java/net/woggioni/jwo/tuple/Tuple2.java b/src/main/java/net/woggioni/jwo/Tuple2.java similarity index 96% rename from src/main/java/net/woggioni/jwo/tuple/Tuple2.java rename to src/main/java/net/woggioni/jwo/Tuple2.java index f4071e2..e5a951c 100644 --- a/src/main/java/net/woggioni/jwo/tuple/Tuple2.java +++ b/src/main/java/net/woggioni/jwo/Tuple2.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.tuple; +package net.woggioni.jwo; import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/net/woggioni/jwo/tuple/Tuple3.java b/src/main/java/net/woggioni/jwo/Tuple3.java similarity index 96% rename from src/main/java/net/woggioni/jwo/tuple/Tuple3.java rename to src/main/java/net/woggioni/jwo/Tuple3.java index dab37c2..a459563 100644 --- a/src/main/java/net/woggioni/jwo/tuple/Tuple3.java +++ b/src/main/java/net/woggioni/jwo/Tuple3.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.tuple; +package net.woggioni.jwo; import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/net/woggioni/jwo/io/UncloseableInputStream.java b/src/main/java/net/woggioni/jwo/UncloseableInputStream.java similarity index 94% rename from src/main/java/net/woggioni/jwo/io/UncloseableInputStream.java rename to src/main/java/net/woggioni/jwo/UncloseableInputStream.java index 75cf3b2..7b0cba1 100644 --- a/src/main/java/net/woggioni/jwo/io/UncloseableInputStream.java +++ b/src/main/java/net/woggioni/jwo/UncloseableInputStream.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import java.io.FilterInputStream; import java.io.InputStream; diff --git a/src/main/java/net/woggioni/jwo/io/UncloseableOutputStream.java b/src/main/java/net/woggioni/jwo/UncloseableOutputStream.java similarity index 94% rename from src/main/java/net/woggioni/jwo/io/UncloseableOutputStream.java rename to src/main/java/net/woggioni/jwo/UncloseableOutputStream.java index 65b2a6b..13fa55b 100644 --- a/src/main/java/net/woggioni/jwo/io/UncloseableOutputStream.java +++ b/src/main/java/net/woggioni/jwo/UncloseableOutputStream.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import java.io.FilterOutputStream; import java.io.OutputStream; diff --git a/src/main/java/net/woggioni/jwo/io/ZipExtractorInputStream.java b/src/main/java/net/woggioni/jwo/ZipExtractorInputStream.java similarity index 89% rename from src/main/java/net/woggioni/jwo/io/ZipExtractorInputStream.java rename to src/main/java/net/woggioni/jwo/ZipExtractorInputStream.java index 7452782..854a7fd 100644 --- a/src/main/java/net/woggioni/jwo/io/ZipExtractorInputStream.java +++ b/src/main/java/net/woggioni/jwo/ZipExtractorInputStream.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import java.io.IOException; import java.io.InputStream; @@ -9,9 +9,9 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** - * Input stream that extract a zip archive in the provided {@param destination} while reading it + * Input stream that extract a zip archive in the provided destination while reading it */ -class ZipExtractorInputStream extends ZipInputStream { +public class ZipExtractorInputStream extends ZipInputStream { public ZipExtractorInputStream(InputStream source, Path destination) { super(source); diff --git a/src/main/java/net/woggioni/jwo/http/HttpClient.java b/src/main/java/net/woggioni/jwo/http/HttpClient.java deleted file mode 100644 index 47616f5..0000000 --- a/src/main/java/net/woggioni/jwo/http/HttpClient.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.woggioni.jwo.http; - -import lombok.SneakyThrows; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocketFactory; -import java.io.OutputStream; - -public class HttpClient { - - private SSLSocketFactory socketFactory; - - public HttpClient() {} - - public HttpClient(final SSLContext sslContext) { - socketFactory = sslContext.getSocketFactory(); - } - - @SneakyThrows - public HttpsURLConnection call(HttpRequest httpRequest) { - HttpsURLConnection conn = (HttpsURLConnection) httpRequest.url.openConnection(); - if(socketFactory != null) { - conn.setSSLSocketFactory(socketFactory); - } - conn.setInstanceFollowRedirects(false); - conn.setRequestMethod(httpRequest.method.text); - httpRequest.headers.forEach((key, value) -> - value.forEach(headerValue -> conn.addRequestProperty(key, headerValue))); - switch (httpRequest.method) { - case PUT: - case POST: - case DELETE: - if (httpRequest.body != null) { - conn.setDoOutput(true); - byte[] buffer = new byte[1024]; - OutputStream os = conn.getOutputStream(); - while (true) { - int read = httpRequest.body.read(buffer, 0, buffer.length); - if (read < 0) break; - os.write(buffer, 0, read); - } - } - break; - case GET: - case HEAD: - case OPTIONS: - break; - } - return conn; - } -} diff --git a/src/main/java/net/woggioni/jwo/http/HttpMethod.java b/src/main/java/net/woggioni/jwo/http/HttpMethod.java deleted file mode 100644 index 874790b..0000000 --- a/src/main/java/net/woggioni/jwo/http/HttpMethod.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.woggioni.jwo.http; - -public enum HttpMethod { - PUT("PUT"), - GET("GET"), - POST("POST"), - DELETE("DELETE"), - HEAD("HEAD"), - OPTIONS("OPTIONS"); - - public final String text; - - HttpMethod(String text) { - this.text = text; - } -} diff --git a/src/main/java/net/woggioni/jwo/http/HttpRequest.java b/src/main/java/net/woggioni/jwo/http/HttpRequest.java deleted file mode 100644 index d5d931b..0000000 --- a/src/main/java/net/woggioni/jwo/http/HttpRequest.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.woggioni.jwo.http; - -import lombok.AccessLevel; -import lombok.Builder; - -import java.io.InputStream; -import java.net.URL; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -@Builder(builderMethodName = "privateBuilder", access = AccessLevel.PUBLIC) -public class HttpRequest { - - final URL url; - - final HttpMethod method = HttpMethod.GET; - - final Map> headers = Collections.emptyMap(); - - final InputStream body = null; - - public static HttpRequestBuilder builder(URL url) { - return HttpRequest.privateBuilder().url(url); - } - - public static class Builder { - private final URL url; - - private HttpMethod method = HttpMethod.GET; - - private Map> headers = Collections.emptyMap(); - - private InputStream body = null; - - private Builder(URL url) { - this.url = url; - } - - public Builder method(HttpMethod method) { - this.method = method; - return this; - } - } -} - diff --git a/src/main/java/net/woggioni/jwo/http/HttpStatus.java b/src/main/java/net/woggioni/jwo/http/HttpStatus.java deleted file mode 100644 index f1eeb79..0000000 --- a/src/main/java/net/woggioni/jwo/http/HttpStatus.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.woggioni.jwo.http; - -public enum HttpStatus { - OK(200), - INTERNAL_SERVER_ERROR(500), - BAD_REQUEST(400), - UNAUTHORIZED(401), - FORBIDDEN(403), - NOT_FOUND(404), - CONFLICT(409); - - public final int code; - - HttpStatus(int code) { - this.code = code; - } -} diff --git a/src/main/java/net/woggioni/jwo/loader/PathURLConnection.java b/src/main/java/net/woggioni/jwo/loader/PathURLConnection.java deleted file mode 100644 index 9b809b4..0000000 --- a/src/main/java/net/woggioni/jwo/loader/PathURLConnection.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.woggioni.jwo.loader; - -import lombok.SneakyThrows; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URL; -import java.net.URLConnection; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.BasicFileAttributes; - -final class PathURLConnection extends URLConnection { - - private final Path path; - - PathURLConnection(URL url, Path path) { - super(url); - this.path = path; - } - - @Override - public void connect() {} - - @Override - public long getContentLengthLong() { - try { - return Files.size(this.path); - } catch (IOException e) { - throw new RuntimeException("could not get size of: " + this.path, e); - } - } - - @Override - public InputStream getInputStream() throws IOException { - return Files.newInputStream(this.path); - } - - @Override - public OutputStream getOutputStream() throws IOException { - return Files.newOutputStream(this.path); - } - - @Override - @SneakyThrows - public String getContentType() { - return Files.probeContentType(this.path); - } - - @Override - @SneakyThrows - public long getLastModified() { - BasicFileAttributes attributes = Files.readAttributes(this.path, BasicFileAttributes.class); - return attributes.lastModifiedTime().toMillis(); - } -} \ No newline at end of file diff --git a/src/main/java/net/woggioni/jwo/loader/PathURLStreamHandler.java b/src/main/java/net/woggioni/jwo/loader/PathURLStreamHandler.java deleted file mode 100644 index 353ac26..0000000 --- a/src/main/java/net/woggioni/jwo/loader/PathURLStreamHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.woggioni.jwo.loader; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.SneakyThrows; - -import java.net.URI; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLStreamHandler; -import java.nio.file.Path; -import java.nio.file.Paths; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -final class PathURLStreamHandler extends URLStreamHandler { - - static final URLStreamHandler INSTANCE = new PathURLStreamHandler(); - - @Override - @SneakyThrows - protected URLConnection openConnection(URL url) { - URI uri = url.toURI(); - Path path = Paths.get(uri); - return new PathURLConnection(url, path); - } -} diff --git a/src/main/java/net/woggioni/jwo/tree/StackContext.java b/src/main/java/net/woggioni/jwo/tree/StackContext.java deleted file mode 100644 index e421d19..0000000 --- a/src/main/java/net/woggioni/jwo/tree/StackContext.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.woggioni.jwo.tree; - -/** - * This interface exposes the methods that are visible to the user of - * {@link TreeWalker}, it allows to - * set/get a custom object in the current stack context or to get the current link's Aci - * @param the type of the context object used - */ -public interface StackContext { - - /** - * @param ctx the user object to set for this stack level - */ - void setContext(T ctx); - - /** - * @return the current user object - */ - T getContext(); - - /** - * @return the current TreeNode - */ - NODE getNode(); -} diff --git a/src/main/java/net/woggioni/jwo/tree/TreeNode.java b/src/main/java/net/woggioni/jwo/tree/TreeNode.java deleted file mode 100644 index 0ebfc4e..0000000 --- a/src/main/java/net/woggioni/jwo/tree/TreeNode.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.woggioni.jwo.tree; - -import java.util.Iterator; - -public interface TreeNode { - Iterator children(); -} diff --git a/src/main/java9/module-info.java b/src/main/java9/module-info.java new file mode 100644 index 0000000..fdec487 --- /dev/null +++ b/src/main/java9/module-info.java @@ -0,0 +1,3 @@ +module net.woggioni.jwo { + exports net.woggioni.jwo; +} \ No newline at end of file diff --git a/src/test/java/net/woggioni/jwo/io/CircularBufferTest.java b/src/test/java/net/woggioni/jwo/CircularBufferTest.java similarity index 94% rename from src/test/java/net/woggioni/jwo/io/CircularBufferTest.java rename to src/test/java/net/woggioni/jwo/CircularBufferTest.java index 861e69d..cab9db0 100644 --- a/src/test/java/net/woggioni/jwo/io/CircularBufferTest.java +++ b/src/test/java/net/woggioni/jwo/CircularBufferTest.java @@ -1,6 +1,7 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import lombok.SneakyThrows; +import net.woggioni.jwo.CircularBuffer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/net/woggioni/jwo/io/ExtractorInputStreamTest.java b/src/test/java/net/woggioni/jwo/ExtractorInputStreamTest.java similarity index 91% rename from src/test/java/net/woggioni/jwo/io/ExtractorInputStreamTest.java rename to src/test/java/net/woggioni/jwo/ExtractorInputStreamTest.java index b979ea0..2347b60 100644 --- a/src/test/java/net/woggioni/jwo/io/ExtractorInputStreamTest.java +++ b/src/test/java/net/woggioni/jwo/ExtractorInputStreamTest.java @@ -1,8 +1,6 @@ -package net.woggioni.jwo.io; +package net.woggioni.jwo; import lombok.SneakyThrows; -import net.woggioni.jwo.JWO; -import net.woggioni.jwo.hash.Hash; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -18,7 +16,6 @@ import java.util.NavigableMap; import java.util.Objects; import java.util.TreeMap; import java.util.function.Consumer; -import java.util.function.Predicate; import java.util.function.Supplier; import java.util.jar.JarFile; import java.util.jar.Manifest; @@ -26,15 +23,13 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ExtractorInputStreamTest { - private Path testDir; private Path testJar; private Path referenceExtractionDestination; private Path testExtractionDestination; @BeforeEach void setup(@TempDir Path testDir) { - this.testDir = testDir; - testJar = Path.of(System.getProperty("junit.jupiter.engine.jar")); + testJar = Paths.get(System.getProperty("junit.jupiter.engine.jar")); referenceExtractionDestination = testDir.resolve("referenceExtraction"); testExtractionDestination = testDir.resolve("testExtraction"); } @@ -45,7 +40,7 @@ public class ExtractorInputStreamTest { try(FileSystem fs = FileSystems.newFileSystem(source, null)) { for(Path root : fs.getRootDirectories()) { Files.walk(root) - .filter(Predicate.not(Files::isDirectory)).forEach(new Consumer() { + .filter(it -> !Files.isDirectory(it)).forEach(new Consumer() { @Override @SneakyThrows public void accept(Path path) { @@ -62,7 +57,7 @@ public class ExtractorInputStreamTest { private static NavigableMap hashFileTree(Path tree) { NavigableMap result = new TreeMap<>(); byte[] buffer = new byte[0x1000]; - FileVisitor visitor = new SimpleFileVisitor<>() { + FileVisitor visitor = new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String key = tree.relativize(file).toString(); diff --git a/src/test/java/net/woggioni/jwo/hash/HashTest.java b/src/test/java/net/woggioni/jwo/HashTest.java similarity index 97% rename from src/test/java/net/woggioni/jwo/hash/HashTest.java rename to src/test/java/net/woggioni/jwo/HashTest.java index 30a9ea1..dcacb46 100644 --- a/src/test/java/net/woggioni/jwo/hash/HashTest.java +++ b/src/test/java/net/woggioni/jwo/HashTest.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.hash; +package net.woggioni.jwo; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/net/woggioni/jwo/collection/LexicographicIterableComparatorTest.java b/src/test/java/net/woggioni/jwo/LexicographicIterableComparatorTest.java similarity index 98% rename from src/test/java/net/woggioni/jwo/collection/LexicographicIterableComparatorTest.java rename to src/test/java/net/woggioni/jwo/LexicographicIterableComparatorTest.java index d425682..16bfd1b 100644 --- a/src/test/java/net/woggioni/jwo/collection/LexicographicIterableComparatorTest.java +++ b/src/test/java/net/woggioni/jwo/LexicographicIterableComparatorTest.java @@ -1,4 +1,4 @@ -package net.woggioni.jwo.collection; +package net.woggioni.jwo; import org.junit.jupiter.api.Test; diff --git a/src/test/java/net/woggioni/jwo/cache/LruCacheTest.java b/src/test/java/net/woggioni/jwo/LruCacheTest.java similarity index 99% rename from src/test/java/net/woggioni/jwo/cache/LruCacheTest.java rename to src/test/java/net/woggioni/jwo/LruCacheTest.java index 12e12df..401f905 100644 --- a/src/test/java/net/woggioni/jwo/cache/LruCacheTest.java +++ b/src/test/java/net/woggioni/jwo/LruCacheTest.java @@ -1,8 +1,7 @@ -package net.woggioni.jwo.cache; +package net.woggioni.jwo; import lombok.EqualsAndHashCode; import lombok.SneakyThrows; -import net.woggioni.jwo.JWO; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/net/woggioni/jwo/loader/PathClassLoaderTest.java b/src/test/java/net/woggioni/jwo/PathClassLoaderTest.java similarity index 96% rename from src/test/java/net/woggioni/jwo/loader/PathClassLoaderTest.java rename to src/test/java/net/woggioni/jwo/PathClassLoaderTest.java index 2ef66e3..d184bdc 100644 --- a/src/test/java/net/woggioni/jwo/loader/PathClassLoaderTest.java +++ b/src/test/java/net/woggioni/jwo/PathClassLoaderTest.java @@ -1,6 +1,7 @@ -package net.woggioni.jwo.loader; +package net.woggioni.jwo; import lombok.SneakyThrows; +import net.woggioni.jwo.PathClassLoader; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/net/woggioni/jwo/tree/TreeWalkerTest.java b/src/test/java/net/woggioni/jwo/TreeWalkerTest.java similarity index 97% rename from src/test/java/net/woggioni/jwo/tree/TreeWalkerTest.java rename to src/test/java/net/woggioni/jwo/TreeWalkerTest.java index 04160b9..1c44f9a 100644 --- a/src/test/java/net/woggioni/jwo/tree/TreeWalkerTest.java +++ b/src/test/java/net/woggioni/jwo/TreeWalkerTest.java @@ -1,8 +1,7 @@ -package net.woggioni.jwo.tree; +package net.woggioni.jwo; import lombok.Getter; import lombok.RequiredArgsConstructor; -import net.woggioni.jwo.tuple.Tuple2; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -12,7 +11,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; @RequiredArgsConstructor -class Node implements TreeNode { +class Node implements TreeNodeVisitor.TreeNode { @Getter private final Integer id; private final List children;