update to gradle 8.7, lift to module path

stable
Jörg Prante 2 months ago
parent 99406c1ca4
commit b4dc1f5203

@ -1,7 +1,5 @@
plugins {
id "checkstyle"
id "pmd"
id 'maven-publish'
id 'signing'
id "io.github.gradle-nexus.publish-plugin" version "2.0.0-rc-1"
@ -12,7 +10,7 @@ plugins {
wrapper {
gradleVersion = libs.versions.gradle.get()
distributionType = Wrapper.DistributionType.ALL
distributionType = Wrapper.DistributionType.BIN
}
ext {
@ -31,14 +29,10 @@ ext {
}
subprojects {
//apply from: rootProject.file('gradle/ide/idea.gradle')
apply from: rootProject.file('gradle/repositories/maven.gradle')
apply from: rootProject.file('gradle/compile/java.gradle')
apply from: rootProject.file('gradle/test/junit5.gradle')
apply from: rootProject.file('gradle/publish/maven.gradle')
apply from: rootProject.file('gradle/quality/checkstyle.gradle')
apply from: rootProject.file('gradle/quality/pmd.gradle')
//apply from: rootProject.file('gradle/quality/spotbugs.gradle')
}
apply from: rootProject.file('gradle/publish/sonatype.gradle')
apply from: rootProject.file('gradle/publish/forgejo.gradle')

@ -3,4 +3,4 @@ The ftp-fs is derived from
https://github.com/robtimus/ftp-fs/
Copyright by Rob Spoor
Licensed under the Apache Software License 2.0
Licensed under the Apache Software License 2.0

@ -1,8 +1,8 @@
dependencies {
api project(':files-api')
api project(':files-ftp')
testImplementation libs.mockftpserver
testImplementation libs.junit.jupiter.params
testImplementation libs.mockito.core
testImplementation libs.mockito.junit.jupiter
testImplementation testLibs.mockftpserver
testImplementation testLibs.junit.jupiter.params
testImplementation testLibs.mockito.core
testImplementation testLibs.mockito.junit.jupiter
}

@ -6,6 +6,8 @@ import org.xbib.io.ftp.fs.spi.FTPFilesProvider;
module org.xbib.files.ftp.fs {
requires org.xbib.files;
requires org.xbib.files.ftp;
exports org.xbib.io.ftp.fs;
exports org.xbib.io.ftp.fs.spi;
provides FileSystemProvider with FTPFileSystemProvider;
provides FileServiceProvider with FTPFilesProvider;
}

@ -12,7 +12,7 @@ import java.util.Collection;
*/
public class DefaultFileSystemExceptionFactory implements FileSystemExceptionFactory {
static final DefaultFileSystemExceptionFactory INSTANCE = new DefaultFileSystemExceptionFactory();
public static final DefaultFileSystemExceptionFactory INSTANCE = new DefaultFileSystemExceptionFactory();
@Override
public FileSystemException createGetFileException(String file, int replyCode, String replyString) {

@ -48,7 +48,7 @@ import java.util.regex.Pattern;
/**
* An FTP file system.
*/
class FTPFileSystem extends FileSystem {
public class FTPFileSystem extends FileSystem {
static final String CURRENT_DIR = ".";
static final String PARENT_DIR = "..";
@ -74,7 +74,7 @@ class FTPFileSystem extends FileSystem {
private final FTPFileStrategy ftpFileStrategy;
private final AtomicBoolean open = new AtomicBoolean(true);
FTPFileSystem(FTPFileSystemProvider provider, URI uri, FTPEnvironment env) throws IOException {
public FTPFileSystem(FTPFileSystemProvider provider, URI uri, FTPEnvironment env) throws IOException {
this.provider = Objects.requireNonNull(provider);
this.rootDirectories = Collections.<Path>singleton(new FTPPath(this, "/"));
this.fileStore = new FTPFileStore(this);
@ -90,7 +90,7 @@ class FTPFileSystem extends FileSystem {
}
}
static String getFileName(FTPFile ftpFile) {
public static String getFileName(FTPFile ftpFile) {
String fileName = ftpFile.getName();
if (fileName == null) {
return null;
@ -172,27 +172,27 @@ class FTPFileSystem extends FileSystem {
throw Messages.unsupportedOperation(FileSystem.class, "newWatchService");
}
void keepAlive() throws IOException {
public void keepAlive() throws IOException {
clientPool.keepAlive();
}
URI toUri(FTPPath path) {
public URI toUri(FTPPath path) {
FTPPath absPath = toAbsolutePath(path).normalize();
return toUri(absPath.path());
}
URI toUri(String path) {
public URI toUri(String path) {
return URISupport.create(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), path, null, null);
}
FTPPath toAbsolutePath(FTPPath path) {
public FTPPath toAbsolutePath(FTPPath path) {
if (path.isAbsolute()) {
return path;
}
return new FTPPath(this, defaultDirectory + "/" + path.path());
}
FTPPath toRealPath(FTPPath path, LinkOption... options) throws IOException {
public FTPPath toRealPath(FTPPath path, LinkOption... options) throws IOException {
boolean followLinks = LinkOptionSupport.followLinks(options);
try (FTPClientPool.Client client = clientPool.get()) {
return toRealPath(client, path, followLinks).ftpPath;
@ -221,7 +221,7 @@ class FTPFileSystem extends FileSystem {
return path.path();
}
InputStream newInputStream(FTPPath path, OpenOption... options) throws IOException {
public InputStream newInputStream(FTPPath path, OpenOption... options) throws IOException {
OpenOptions openOptions = OpenOptions.forNewInputStream(options);
try (FTPClientPool.Client client = clientPool.get()) {
@ -235,7 +235,7 @@ class FTPFileSystem extends FileSystem {
return client.newInputStream(path.path(), options);
}
OutputStream newOutputStream(FTPPath path, OpenOption... options) throws IOException {
public OutputStream newOutputStream(FTPPath path, OpenOption... options) throws IOException {
OpenOptions openOptions = OpenOptions.forNewOutputStream(options);
try (FTPClientPool.Client client = clientPool.get()) {
@ -268,7 +268,7 @@ class FTPFileSystem extends FileSystem {
return new FTPFileAndOutputStreamPair(ftpFile, out);
}
SeekableByteChannel newByteChannel(FTPPath path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException {
public SeekableByteChannel newByteChannel(FTPPath path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException {
if (attrs.length > 0) {
throw Messages.fileSystemProvider().unsupportedCreateFileAttribute(attrs[0].name());
}
@ -292,7 +292,7 @@ class FTPFileSystem extends FileSystem {
}
}
DirectoryStream<Path> newDirectoryStream(final FTPPath path, Filter<? super Path> filter) throws IOException {
public DirectoryStream<Path> newDirectoryStream(final FTPPath path, Filter<? super Path> filter) throws IOException {
List<FTPFile> children;
try (FTPClientPool.Client client = clientPool.get()) {
children = ftpFileStrategy.getChildren(client, path);
@ -300,7 +300,7 @@ class FTPFileSystem extends FileSystem {
return new FTPPathDirectoryStream(path, children, filter);
}
void createDirectory(FTPPath path, FileAttribute<?>... attrs) throws IOException {
public void createDirectory(FTPPath path, FileAttribute<?>... attrs) throws IOException {
if (attrs.length > 0) {
throw Messages.fileSystemProvider().unsupportedCreateFileAttribute(attrs[0].name());
}
@ -309,7 +309,7 @@ class FTPFileSystem extends FileSystem {
}
}
void delete(FTPPath path) throws IOException {
public void delete(FTPPath path) throws IOException {
try (FTPClientPool.Client client = clientPool.get()) {
FTPFile ftpFile = getFTPFile(client, path);
boolean isDirectory = ftpFile.isDirectory();
@ -317,7 +317,7 @@ class FTPFileSystem extends FileSystem {
}
}
FTPPath readSymbolicLink(FTPPath path) throws IOException {
public FTPPath readSymbolicLink(FTPPath path) throws IOException {
try (FTPClientPool.Client client = clientPool.get()) {
FTPFile ftpFile = getFTPFile(client, path);
FTPFile link = getLink(client, ftpFile, path);
@ -328,7 +328,7 @@ class FTPFileSystem extends FileSystem {
}
}
void copy(FTPPath source, FTPPath target, CopyOption... options) throws IOException {
public void copy(FTPPath source, FTPPath target, CopyOption... options) throws IOException {
boolean sameFileSystem = source.getFileSystem() == target.getFileSystem();
CopyOptions copyOptions = CopyOptions.forCopy(options);
@ -403,7 +403,7 @@ class FTPFileSystem extends FileSystem {
}
}
void move(FTPPath source, FTPPath target, CopyOption... options) throws IOException {
public void move(FTPPath source, FTPPath target, CopyOption... options) throws IOException {
boolean sameFileSystem = source.getFileSystem() == target.getFileSystem();
CopyOptions copyOptions = CopyOptions.forMove(sameFileSystem, options);
@ -444,7 +444,7 @@ class FTPFileSystem extends FileSystem {
}
}
boolean isSameFile(FTPPath path, FTPPath path2) throws IOException {
public boolean isSameFile(FTPPath path, FTPPath path2) throws IOException {
if (path.getFileSystem() != path2.getFileSystem()) {
return false;
}
@ -463,7 +463,7 @@ class FTPFileSystem extends FileSystem {
return toRealPath(client, path, true).ftpPath.path().equals(toRealPath(client, path2, true).ftpPath.path());
}
boolean isHidden(FTPPath path) throws IOException {
public boolean isHidden(FTPPath path) throws IOException {
// call getFTPFile to check for existence
try (FTPClientPool.Client client = clientPool.get()) {
getFTPFile(client, path);
@ -472,7 +472,7 @@ class FTPFileSystem extends FileSystem {
return !CURRENT_DIR.equals(fileName) && !PARENT_DIR.equals(fileName) && fileName.startsWith(".");
}
FileStore getFileStore(FTPPath path) throws IOException {
public FileStore getFileStore(FTPPath path) throws IOException {
// call getFTPFile to check existence of the path
try (FTPClientPool.Client client = clientPool.get()) {
getFTPFile(client, path);
@ -480,7 +480,7 @@ class FTPFileSystem extends FileSystem {
return fileStore;
}
void checkAccess(FTPPath path, AccessMode... modes) throws IOException {
public void checkAccess(FTPPath path, AccessMode... modes) throws IOException {
try (FTPClientPool.Client client = clientPool.get()) {
FTPFile ftpFile = getFTPFile(client, path);
for (AccessMode mode : modes) {
@ -504,7 +504,7 @@ class FTPFileSystem extends FileSystem {
}
}
PosixFileAttributes readAttributes(FTPPath path, LinkOption... options) throws IOException {
public PosixFileAttributes readAttributes(FTPPath path, LinkOption... options) throws IOException {
boolean followLinks = LinkOptionSupport.followLinks(options);
try (FTPClientPool.Client client = clientPool.get()) {
FTPPathAndFilePair pair = toRealPath(client, path, followLinks);
@ -515,7 +515,7 @@ class FTPFileSystem extends FileSystem {
}
}
Map<String, Object> readAttributes(FTPPath path, String attributes, LinkOption... options) throws IOException {
public Map<String, Object> readAttributes(FTPPath path, String attributes, LinkOption... options) throws IOException {
String view;
int pos = attributes.indexOf(':');
if (pos == -1) {
@ -622,7 +622,7 @@ class FTPFileSystem extends FileSystem {
return result;
}
FTPFile getFTPFile(FTPPath path) throws IOException {
public FTPFile getFTPFile(FTPPath path) throws IOException {
try (FTPClientPool.Client client = clientPool.get()) {
return getFTPFile(client, path);
}

@ -6,11 +6,10 @@ import java.util.ResourceBundle;
/**
* A utility class for providing translated messages and exceptions.
*/
final class FTPMessages {
public final class FTPMessages {
private static final String BUNDLE_NAME = "org.xbib.ftp.fs.messages";
private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, Locale.ROOT, UTF8Control.INSTANCE);
private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.xbib.ftp.fs.messages",
Locale.ROOT, UTF8Control.INSTANCE);
private FTPMessages() {
throw new Error("cannot create instances of " + getClass().getName());

@ -26,11 +26,11 @@ import java.util.Set;
/**
* A path for FTP file systems.
*/
class FTPPath extends SimpleAbstractPath {
public class FTPPath extends SimpleAbstractPath {
private final FTPFileSystem fs;
FTPPath(FTPFileSystem fs, String path) {
public FTPPath(FTPFileSystem fs, String path) {
super(path);
this.fs = Objects.requireNonNull(fs);
}

@ -0,0 +1,13 @@
module org.xbib.files.ftp.fs.test {
requires MockFtpServer;
requires org.hamcrest;
requires org.junit.jupiter.api;
requires org.junit.jupiter.params;
requires org.mockito;
requires org.xbib.files.ftp;
requires org.xbib.files.ftp.fs;
exports org.xbib.io.ftp.fs.test;
exports org.xbib.io.ftp.fs.test.server;
opens org.xbib.io.ftp.fs.test to org.junit.platform.commons;
opens org.xbib.io.ftp.fs.test.server to org.junit.platform.commons;
}

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
@ -12,10 +12,16 @@ import org.mockftpserver.fake.filesystem.FileSystem;
import org.mockftpserver.fake.filesystem.FileSystemEntry;
import org.mockftpserver.fake.filesystem.UnixFakeFileSystem;
import org.mockito.Mockito;
import org.xbib.io.ftp.fs.server.ExtendedUnixFakeFileSystem;
import org.xbib.io.ftp.fs.server.ListHiddenFilesCommandHandler;
import org.xbib.io.ftp.fs.server.MDTMCommandHandler;
import org.xbib.io.ftp.fs.server.SymbolicLinkEntry;
import org.xbib.io.ftp.fs.DefaultFileSystemExceptionFactory;
import org.xbib.io.ftp.fs.FTPEnvironment;
import org.xbib.io.ftp.fs.FTPFileSystem;
import org.xbib.io.ftp.fs.FTPFileSystemProvider;
import org.xbib.io.ftp.fs.FTPPath;
import org.xbib.io.ftp.fs.FileSystemExceptionFactory;
import org.xbib.io.ftp.fs.test.server.ExtendedUnixFakeFileSystem;
import org.xbib.io.ftp.fs.test.server.ListHiddenFilesCommandHandler;
import org.xbib.io.ftp.fs.test.server.MDTMCommandHandler;
import org.xbib.io.ftp.fs.test.server.SymbolicLinkEntry;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.params.ParameterizedTest;
@ -16,6 +16,9 @@ import java.net.Proxy;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.stream.Stream;
import org.xbib.io.ftp.fs.ConnectionMode;
import org.xbib.io.ftp.fs.DefaultFileSystemExceptionFactory;
import org.xbib.io.ftp.fs.FTPEnvironment;
public class FTPEnvironmentSetterTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
@ -8,6 +8,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.xbib.io.ftp.fs.FTPEnvironment;
public class FTPEnvironmentTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import org.hamcrest.Description;
import org.hamcrest.Matcher;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@ -18,6 +18,11 @@ import java.nio.file.attribute.PosixFileAttributeView;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.xbib.io.ftp.fs.FTPFileSystem;
import org.xbib.io.ftp.fs.FTPFileSystemProvider;
import org.xbib.io.ftp.fs.FTPPath;
import org.xbib.io.ftp.fs.FileType;
import org.xbib.io.ftp.fs.URISupport;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.instanceOf;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@ -7,7 +7,12 @@ import org.mockftpserver.fake.filesystem.FileEntry;
import org.mockftpserver.fake.filesystem.FileSystemEntry;
import org.mockito.verification.VerificationMode;
import org.xbib.io.ftp.client.FTPFile;
import org.xbib.io.ftp.fs.server.SymbolicLinkEntry;
import org.xbib.io.ftp.fs.FTPFileSystem;
import org.xbib.io.ftp.fs.FTPFileSystemException;
import org.xbib.io.ftp.fs.FTPPath;
import org.xbib.io.ftp.fs.SimpleGroupPrincipal;
import org.xbib.io.ftp.fs.SimpleUserPrincipal;
import org.xbib.io.ftp.fs.test.server.SymbolicLinkEntry;
import java.io.IOException;
import java.io.InputStream;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs;
package org.xbib.io.ftp.fs.test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
@ -19,6 +19,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Stream;
import org.xbib.io.ftp.fs.FTPMessages;
public class FTPMessagesTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs.server;
package org.xbib.io.ftp.fs.test.server;
import org.mockftpserver.fake.filesystem.FileSystemEntry;
import org.mockftpserver.fake.filesystem.UnixDirectoryListingFormatter;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs.server;
package org.xbib.io.ftp.fs.test.server;
import org.mockftpserver.fake.filesystem.FileSystemEntry;
import org.mockftpserver.fake.filesystem.UnixFakeFileSystem;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs.server;
package org.xbib.io.ftp.fs.test.server;
import org.mockftpserver.core.command.Command;
import org.mockftpserver.core.command.ReplyCodes;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs.server;
package org.xbib.io.ftp.fs.test.server;
import org.mockftpserver.core.command.Command;
import org.mockftpserver.core.command.ReplyCodes;

@ -1,4 +1,4 @@
package org.xbib.io.ftp.fs.server;
package org.xbib.io.ftp.fs.test.server;
import org.mockftpserver.fake.filesystem.FileSystemEntry;
import org.mockftpserver.fake.filesystem.Permissions;

@ -427,8 +427,7 @@ public class FTPClient extends FTP implements Configurable {
* or the full string after the reply code and space if the syntax is invalid
* (i.e. enclosing quotes are missing or embedded quotes are not doubled)
*/
// package protected for access by test cases
static String __parsePathname(String reply) {
public static String __parsePathname(String reply) {
String param = reply.substring(REPLY_CODE_LEN + 1);
if (param.startsWith("\"")) {
StringBuilder sb = new StringBuilder();
@ -479,7 +478,7 @@ public class FTPClient extends FTP implements Configurable {
* @param reply the reply to parse
* @throws MalformedServerReplyException if the server reply does not match (n,n,n,n),(n),(n)
*/
protected void _parsePassiveModeReply(String reply)
public void _parsePassiveModeReply(String reply)
throws MalformedServerReplyException {
java.util.regex.Matcher m = __PARMS_PAT.matcher(reply);
if (!m.find()) {
@ -2951,7 +2950,7 @@ public class FTPClient extends FTP implements Configurable {
return initiateListParsing(fileEntryParser, pathname);
}
void createParser(String parserKey) throws IOException {
public void createParser(String parserKey) throws IOException {
// We cache the value to avoid creation of a new object every
// time a file listing is generated.
// Note: we don't check against a null parserKey (NET-544)
@ -2996,7 +2995,7 @@ public class FTPClient extends FTP implements Configurable {
}
}
FTPFileEntryParser getFileEntryParser() {
public FTPFileEntryParser getFileEntryParser() {
return fileEntryParser;
}

@ -70,7 +70,7 @@ public class FTPListParseEngine {
* Intended for use by FTPClient only
*
*/
FTPListParseEngine(FTPFileEntryParser parser, FTPClientConfig configuration) {
public FTPListParseEngine(FTPFileEntryParser parser, FTPClientConfig configuration) {
this.parser = parser;
if (configuration != null) {
this.saveUnparseableEntries = configuration.getUnparseableEntries();

@ -367,14 +367,14 @@ public class FTPTimestampParserImpl implements Configurable {
/**
* @return Returns the lenientFutureDates.
*/
boolean isLenientFutureDates() {
public boolean isLenientFutureDates() {
return lenientFutureDates;
}
/**
* @param lenientFutureDates The lenientFutureDates to set.
*/
void setLenientFutureDates(boolean lenientFutureDates) {
public void setLenientFutureDates(boolean lenientFutureDates) {
this.lenientFutureDates = lenientFutureDates;
}
}

@ -15,17 +15,17 @@ import java.util.List;
*/
public class MVSFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {
static final int UNKNOWN_LIST_TYPE = -1;
static final int FILE_LIST_TYPE = 0;
static final int MEMBER_LIST_TYPE = 1;
static final int UNIX_LIST_TYPE = 2;
static final int JES_LEVEL_1_LIST_TYPE = 3;
static final int JES_LEVEL_2_LIST_TYPE = 4;
public static final int UNKNOWN_LIST_TYPE = -1;
public static final int FILE_LIST_TYPE = 0;
public static final int MEMBER_LIST_TYPE = 1;
public static final int UNIX_LIST_TYPE = 2;
public static final int JES_LEVEL_1_LIST_TYPE = 3;
public static final int JES_LEVEL_2_LIST_TYPE = 4;
/**
* Dates are ignored for file lists, but are used for member lists where
* possible
*/
static final String DEFAULT_DATE_FORMAT = "yyyy/MM/dd HH:mm"; // 2001/09/18
public static final String DEFAULT_DATE_FORMAT = "yyyy/MM/dd HH:mm"; // 2001/09/18
/**
* Matches these entries:
* <pre>
@ -33,7 +33,7 @@ public class MVSFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {
* B10142 3390 2006/03/20 2 31 F 80 80 PS MDI.OKL.WORK
* </pre>
*/
static final String FILE_LIST_REGEX = "\\S+\\s+" + // volume
public static final String FILE_LIST_REGEX = "\\S+\\s+" + // volume
// ignored
"\\S+\\s+" + // unit - ignored
"\\S+\\s+" + // access date - ignored
@ -53,7 +53,7 @@ public class MVSFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {
* TBSHELF 01.03 2002/09/12 2002/10/11 09:37 11 11 0 KIL001
* </pre>
*/
static final String MEMBER_LIST_REGEX = "(\\S+)\\s+" + // name
public static final String MEMBER_LIST_REGEX = "(\\S+)\\s+" + // name
"\\S+\\s+" + // version, modification (ignored)
"\\S+\\s+" + // create date (ignored)
"(\\S+)\\s+" + // modification date
@ -71,7 +71,7 @@ public class MVSFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {
* 1 2 3 4
* </pre>
*/
static final String JES_LEVEL_1_LIST_REGEX =
public static final String JES_LEVEL_1_LIST_REGEX =
"(\\S+)\\s+" + // job name ignored
"(\\S+)\\s+" + // job number
"(\\S+)\\s+" + // job status (OUTPUT,INPUT,ACTIVE)
@ -113,7 +113,7 @@ public class MVSFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {
* </pre>
*/
static final String JES_LEVEL_2_LIST_REGEX =
public static final String JES_LEVEL_2_LIST_REGEX =
"(\\S+)\\s+" + // job name ignored
"(\\S+)\\s+" + // job number
"(\\S+)\\s+" + // owner ignored
@ -472,7 +472,7 @@ public class MVSFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {
*
* @param type The listing type.
*/
void setType(int type) {
public void setType(int type) {
isType = type;
}

@ -122,7 +122,7 @@ public class UnixFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {
// if true, leading spaces are trimmed from file names
// this was the case for the original implementation
final boolean trimLeadingSpaces; // package protected for access from test code
public final boolean trimLeadingSpaces; // package protected for access from test code
/**
* The default constructor for a UnixFTPEntryParser object.

@ -0,0 +1,7 @@
module org.xbib.files.ftp.test {
requires org.junit.jupiter.api;
requires org.xbib.files.ftp;
exports org.xbib.io.ftp.client.test;
opens org.xbib.io.ftp.client.test to org.junit.platform.commons;
opens org.xbib.io.ftp.client.test.parser to org.junit.platform.commons;
}

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client;
package org.xbib.io.ftp.client.test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@ -9,6 +9,9 @@ import java.time.ZonedDateTime;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
import org.xbib.io.ftp.client.FTPClient;
import org.xbib.io.ftp.client.FTPClientConfig;
import org.xbib.io.ftp.client.FTPFile;
/*
* This test was contributed in a different form by W. McDonald Buck

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client;
package org.xbib.io.ftp.client.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
@ -9,6 +9,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.xbib.io.ftp.client.FTPClientConfig;
public class FTPClientConfigTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client;
package org.xbib.io.ftp.client.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -10,7 +10,13 @@ import java.io.ByteArrayOutputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.xbib.io.ftp.client.FTPClient;
import org.xbib.io.ftp.client.FTPClientConfig;
import org.xbib.io.ftp.client.FTPFile;
import org.xbib.io.ftp.client.FTPFileEntryParser;
import org.xbib.io.ftp.client.FTPListParseEngine;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
public class FTPClientTest {
@ -44,7 +50,7 @@ public class FTPClientTest {
@Test
public void testParseClient() {
for(int i = 0; i < TESTS.length; i += 2) {
assertEquals(TESTS[i+1], FTPClient.__parsePathname(TESTS[i]), "Failed to parse");
Assertions.assertEquals(TESTS[i+1], FTPClient.__parsePathname(TESTS[i]), "Failed to parse");
}
}

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client;
package org.xbib.io.ftp.client.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -11,6 +11,10 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.xbib.io.ftp.client.FTPClient;
import org.xbib.io.ftp.client.FTPClientConfig;
import org.xbib.io.ftp.client.FTPFile;
import org.xbib.io.ftp.client.FTPListParseEngine;
/**
* A functional test suite for checking that site listings work.

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client;
package org.xbib.io.ftp.client.test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@ -8,6 +8,7 @@ import java.net.ConnectException;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import org.xbib.io.ftp.client.FTPClient;
public class TestConnectTimeout {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -8,6 +8,18 @@ import static org.junit.jupiter.api.Assertions.fail;
import org.junit.jupiter.api.Test;
import org.xbib.io.ftp.client.FTPClientConfig;
import org.xbib.io.ftp.client.FTPFileEntryParser;
import org.xbib.io.ftp.client.parser.CompositeFileEntryParser;
import org.xbib.io.ftp.client.parser.DefaultFTPFileEntryParserFactory;
import org.xbib.io.ftp.client.parser.FTPFileEntryParserFactory;
import org.xbib.io.ftp.client.parser.MVSFTPEntryParser;
import org.xbib.io.ftp.client.parser.MacOsPeterFTPEntryParser;
import org.xbib.io.ftp.client.parser.NTFTPEntryParser;
import org.xbib.io.ftp.client.parser.NetwareFTPEntryParser;
import org.xbib.io.ftp.client.parser.OS2FTPEntryParser;
import org.xbib.io.ftp.client.parser.OS400FTPEntryParser;
import org.xbib.io.ftp.client.parser.ParserInitializationException;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
import org.xbib.io.ftp.client.parser.VMSFTPEntryParser;
public class DefaultFTPFileEntryParserFactoryTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@ -13,6 +13,7 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import org.xbib.io.ftp.client.parser.EnterpriseUnixFTPEntryParser;
/**
* Tests the EnterpriseUnixFTPEntryParser

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@ -10,6 +10,7 @@ import org.xbib.io.ftp.client.FTPFile;
import java.time.Year;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
/**
* This is a simple TestCase that tests entry parsing using the new FTPClientConfig

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
@ -13,6 +13,8 @@ import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import org.xbib.io.ftp.client.parser.FTPTimestampParser;
import org.xbib.io.ftp.client.parser.FTPTimestampParserImpl;
/**
* Test the FTPTimestampParser class.

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import org.junit.jupiter.api.Test;
import org.xbib.io.ftp.client.FTP;
@ -13,6 +13,8 @@ import java.io.InputStream;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.Comparator;
import org.xbib.io.ftp.client.parser.MLSxEntryParser;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
/**
* Attempt comparison of LIST and MLSD listings

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
@ -9,6 +9,7 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import org.xbib.io.ftp.client.parser.MLSxEntryParser;
public class MLSxEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -10,6 +10,7 @@ import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.xbib.io.ftp.client.parser.MVSFTPEntryParser;
public class MVSFTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@ -14,6 +14,7 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import org.xbib.io.ftp.client.parser.MacOsPeterFTPEntryParser;
public class MacOsPeterFTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -17,6 +17,9 @@ import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import java.util.Locale;
import org.xbib.io.ftp.client.parser.CompositeFileEntryParser;
import org.xbib.io.ftp.client.parser.NTFTPEntryParser;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
@Disabled
public class NTFTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@ -14,6 +14,7 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import org.xbib.io.ftp.client.parser.NetwareFTPEntryParser;
public class NetwareFTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -13,6 +13,8 @@ import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import java.util.Locale;
import org.xbib.io.ftp.client.parser.ConfigurableFTPFileEntryParserImpl;
import org.xbib.io.ftp.client.parser.OS2FTPEntryParser;
public class OS2FTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -12,6 +12,9 @@ import java.time.Month;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
import org.xbib.io.ftp.client.parser.CompositeFileEntryParser;
import org.xbib.io.ftp.client.parser.OS400FTPEntryParser;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
public class OS400FTPEntryParserAdditionalTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@ -16,6 +16,9 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import org.xbib.io.ftp.client.parser.CompositeFileEntryParser;
import org.xbib.io.ftp.client.parser.OS400FTPEntryParser;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
public class OS400FTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@ -13,6 +13,7 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.EnumSet;
import org.xbib.io.ftp.client.parser.UnixFTPEntryParser;
public class UnixFTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -14,6 +14,9 @@ import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Locale;
import org.xbib.io.ftp.client.parser.ConfigurableFTPFileEntryParserImpl;
import org.xbib.io.ftp.client.parser.VMSFTPEntryParser;
import org.xbib.io.ftp.client.parser.VMSVersioningFTPEntryParser;
public class VMSFTPEntryParserTest {

@ -1,4 +1,4 @@
package org.xbib.io.ftp.client.parser;
package org.xbib.io.ftp.client.test.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

@ -0,0 +1,7 @@
This work is build upon Apache MINA SSHD
as forked of 29 Nov 2021 (Version 2.6.0)
License: Apache License 2.0
https://github.com/apache/mina-sshd

@ -1,5 +1,5 @@
import org.apache.sshd.fs.SftpFileSystemProvider;
import java.nio.file.spi.FileSystemProvider;
import org.apache.sshd.fs.SftpFileSystemProvider;
import org.xbib.files.FileServiceProvider;
import org.apache.sshd.fs.spi.SFTPFileServiceProvider;

@ -0,0 +1,10 @@
module org.xbib.files.sftp.fs.test {
requires java.logging;
requires org.junit.jupiter.api;
requires org.xbib.files;
requires org.xbib.files.sftp;
requires org.xbib.files.sftp.fs;
requires org.xbib.net.security;
exports org.apache.sshd.fs.test;
opens org.apache.sshd.fs.test to org.junit.platform.commons;
}

@ -0,0 +1,7 @@
This work is build upon Apache MINA SSHD
as forked of 29 Nov 2021 (Version 2.6.0)
License: Apache License 2.0
https://github.com/apache/mina-sshd

@ -81,4 +81,5 @@ module org.xbib.files.sftp {
exports org.apache.sshd.common.util.threads;
requires org.xbib.net.security;
requires java.logging;
uses org.apache.sshd.common.io.IoServiceFactoryFactory;
}

@ -62,7 +62,6 @@ public class DefaultIoServiceFactoryFactory extends AbstractIoServiceFactoryFact
factory = newInstance(IoServiceFactoryFactory.class);
if (factory == null) {
factory = BuiltinIoServiceFactoryFactories.NIO2.create();
} else {
}
Factory<CloseableExecutorService> executorServiceFactory = getExecutorServiceFactory();

@ -1,5 +1,3 @@
group = org.xbib
name = files
version = 4.2.1
org.gradle.warning.mode = ALL
version = 4.3.0

@ -1,4 +1,3 @@
apply plugin: 'java-library'
java {
@ -14,16 +13,33 @@ jar {
manifest {
attributes('Implementation-Version': project.version)
}
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
tasks.withType(JavaCompile).configureEach {
doFirst {
options.fork = true
options.forkOptions.jvmArgs += ['-Duser.language=en', '-Duser.country=US']
options.encoding = 'UTF-8'
options.compilerArgs.add('-Xlint:all')
// enforce presence of module-info.java
options.compilerArgs.add("--module-path")
options.compilerArgs.add(classpath.asPath)
classpath = files()
}
}
tasks.withType(JavaCompile) {
options.fork = true
options.forkOptions.jvmArgs += ['-Duser.language=en','-Duser.country=US']
options.compilerArgs.add('-Xlint:all')
options.encoding = 'UTF-8'
tasks.withType(Javadoc).configureEach {
doFirst {
options.addStringOption('Xdoclint:none', '-quiet')
options.encoding = 'UTF-8'
}
}
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.encoding = 'UTF-8'
tasks.withType(JavaExec).configureEach {
doFirst {
jvmArguments.add("--module-path")
jvmArguments.add(classpath.asPath)
classpath = files()
}
}

@ -1,8 +1,8 @@
dependencies {
testImplementation libs.junit.jupiter.api
testImplementation libs.junit.jupiter.params
testImplementation libs.hamcrest
testRuntimeOnly libs.junit.jupiter.engine
testImplementation testLibs.junit.jupiter.api
testImplementation testLibs.hamcrest
testRuntimeOnly testLibs.junit.jupiter.engine
testRuntimeOnly testLibs.junit.jupiter.platform.launcher
}
test {

Binary file not shown.

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

20
gradlew.bat vendored

@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail

@ -15,17 +15,19 @@ pluginManagement {
dependencyResolutionManagement {
versionCatalogs {
libs {
version('gradle', '8.4')
version('groovy', '4.0.12')
version('junit', '5.10.0')
version('net', '4.0.0')
version('gradle', '8.7')
version('net', '4.3.1')
library('net-security', 'org.xbib', 'net-security').versionRef('net')
}
testLibs {
version('junit', '5.10.2')
library('junit-jupiter-api', 'org.junit.jupiter', 'junit-jupiter-api').versionRef('junit')
library('junit-jupiter-params', 'org.junit.jupiter', 'junit-jupiter-params').versionRef('junit')
library('junit-jupiter-engine', 'org.junit.jupiter', 'junit-jupiter-engine').versionRef('junit')
library('junit-vintage-engine', 'org.junit.vintage', 'junit-vintage-engine').versionRef('junit')
library('junit-jupiter-platform-launcher', 'org.junit.platform', 'junit-platform-launcher').version('1.10.1')
library('hamcrest', 'org.hamcrest', 'hamcrest-library').version('2.2')
library('junit4', 'junit', 'junit').version('4.13.2')
library('net-security', 'org.xbib', 'net-security').versionRef('net')
library('mockftpserver', 'org.mockftpserver', 'MockFtpServer').version('2.7.1')
library('mockito-core', 'org.mockito', 'mockito-core').version('5.6.0')
library('mockito-junit-jupiter', 'org.mockito', 'mockito-junit-jupiter').version('5.6.0')
@ -34,7 +36,6 @@ dependencyResolutionManagement {
}
include 'files-api'
include 'files-zlib'
include 'files-ftp'
include 'files-ftp-fs'
include 'files-sftp'

Loading…
Cancel
Save