🚧 Add snapshot parser + fix tests
This commit is contained in:
parent
aec2a3b194
commit
15b9be7cc8
@ -1,7 +1,9 @@
|
|||||||
package dev.dinauer.maven.maven.core;
|
package dev.dinauer.maven.maven.core;
|
||||||
|
|
||||||
import dev.dinauer.maven.maven.core.model.File;
|
import dev.dinauer.maven.maven.core.model.*;
|
||||||
import dev.dinauer.maven.maven.core.model.MavenContext;
|
import dev.dinauer.maven.maven.core.parser.MavenMetadataUrlParser;
|
||||||
|
import dev.dinauer.maven.maven.core.parser.MavenUrlParser;
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
@ -9,20 +11,27 @@ public class MavenContextProvider
|
|||||||
{
|
{
|
||||||
public static MavenContext parse(String path)
|
public static MavenContext parse(String path)
|
||||||
{
|
{
|
||||||
File file = File.parse(Path.of(path).getFileName().toString());
|
switch (getExtension(path))
|
||||||
switch (file.getType())
|
|
||||||
{
|
{
|
||||||
case JAR, POM ->
|
case JAR, POM ->
|
||||||
{
|
{
|
||||||
MavenUrlParser parser = MavenUrlParser.parse(path);
|
MavenUrlParser parser = MavenUrlParser.parse(path);
|
||||||
return new MavenContext(path, parser.groupId(), parser.artifactId(), parser.version(), file);
|
String artifact = parser.artifactId();
|
||||||
|
Version version = parser.version();
|
||||||
|
return new MavenContext(path, parser.groupId(), artifact, version, FileParser.parse(artifact, version.getRaw(), Path.of(path).getFileName().toString()));
|
||||||
}
|
}
|
||||||
case XML ->
|
case XML ->
|
||||||
{
|
{
|
||||||
MavenMetadataUrlParser parser = MavenMetadataUrlParser.parse(path);
|
MavenMetadataUrlParser parser = MavenMetadataUrlParser.parse(path);
|
||||||
return new MavenContext(path, parser.groupId(), parser.artifactId(), null, file);
|
String artifact = parser.artifactId();
|
||||||
|
return new MavenContext(path, parser.groupId(), parser.artifactId(), null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static FileType getExtension(String filename)
|
||||||
|
{
|
||||||
|
return ExtensionParser.parse(filename).ext();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,36 @@
|
|||||||
|
package dev.dinauer.maven.maven.core.model;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
import org.apache.commons.lang3.Strings;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ExtensionParser
|
||||||
|
{
|
||||||
|
private static final List<String> FILE_TYPES = List.of("jar", "pom", "xml");
|
||||||
|
private static final List<String> FILE_HASHES = List.of("md5", "sha1", "sha256", "sha512");
|
||||||
|
|
||||||
|
public static Result parse(String raw)
|
||||||
|
{
|
||||||
|
String firstLevelExtension = FilenameUtils.getExtension(raw);
|
||||||
|
String firstLevelBase = Strings.CI.removeEnd(raw, String.format(".%s", firstLevelExtension));
|
||||||
|
if (FILE_TYPES.contains(firstLevelExtension))
|
||||||
|
{
|
||||||
|
return new Result(firstLevelBase, FileType.valueOf(firstLevelExtension.toUpperCase()), null);
|
||||||
|
}
|
||||||
|
if (FILE_HASHES.contains(firstLevelExtension))
|
||||||
|
{
|
||||||
|
String secondLevelExtension = FilenameUtils.getExtension(firstLevelBase);
|
||||||
|
if (FILE_TYPES.contains(secondLevelExtension))
|
||||||
|
{
|
||||||
|
String secondLevelBase = Strings.CI.removeEnd(firstLevelBase, String.format(".%s", secondLevelExtension));
|
||||||
|
return new Result(secondLevelBase, FileType.valueOf(secondLevelExtension.toUpperCase()), FileHash.valueOf(firstLevelExtension.toUpperCase()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public record Result(String base, FileType ext, FileHash hashExt)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,10 +7,8 @@ import java.util.List;
|
|||||||
|
|
||||||
public class File
|
public class File
|
||||||
{
|
{
|
||||||
private static final String METADATA_FILENAME = "maven-metadata";
|
private String artifactId;
|
||||||
private static final List<String> FILE_TYPES = List.of("jar", "pom", "xml");
|
private String version;
|
||||||
private static final List<String> FILE_HASHES = List.of("md5", "sha1");
|
|
||||||
|
|
||||||
private String raw;
|
private String raw;
|
||||||
private String base;
|
private String base;
|
||||||
private FileType type;
|
private FileType type;
|
||||||
@ -60,30 +58,25 @@ public class File
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static File parse(String raw)
|
public String getArtifactId()
|
||||||
{
|
{
|
||||||
File file = new File().setRaw(raw);
|
return artifactId;
|
||||||
String extension = FilenameUtils.getExtension(raw);
|
}
|
||||||
String base = FilenameUtils.getBaseName(raw);
|
|
||||||
if (FILE_TYPES.contains(extension.toLowerCase()))
|
public File setArtifactId(String artifactId)
|
||||||
{
|
{
|
||||||
file.setType(FileType.valueOf(extension.toUpperCase()));
|
this.artifactId = artifactId;
|
||||||
file.setBase(base);
|
return this;
|
||||||
file.setHash(FileHash.NONE);
|
}
|
||||||
return file;
|
|
||||||
}
|
public String getVersion()
|
||||||
if (FILE_HASHES.contains(extension))
|
{
|
||||||
{
|
return version;
|
||||||
file.setHash(FileHash.valueOf(extension.toUpperCase()));
|
}
|
||||||
String secondaryExtension = FilenameUtils.getExtension(base);
|
|
||||||
String secondaryBase = FilenameUtils.getBaseName(base);
|
public File setVersion(String version)
|
||||||
if (FILE_TYPES.contains(secondaryExtension.toLowerCase()))
|
{
|
||||||
{
|
this.version = version;
|
||||||
file.setType(FileType.valueOf(secondaryExtension.toUpperCase()));
|
return this;
|
||||||
file.setBase(secondaryBase);
|
|
||||||
return file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new BadRequestException();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,5 +2,5 @@ package dev.dinauer.maven.maven.core.model;
|
|||||||
|
|
||||||
public enum FileHash
|
public enum FileHash
|
||||||
{
|
{
|
||||||
SHA1, MD5, NONE
|
SHA1, SHA256, SHA512, MD5, NONE
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,39 @@
|
|||||||
|
package dev.dinauer.maven.maven.core.model;
|
||||||
|
|
||||||
|
import jakarta.ws.rs.BadRequestException;
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FileParser
|
||||||
|
{
|
||||||
|
private static final List<String> FILE_TYPES = List.of("jar", "pom", "xml");
|
||||||
|
private static final List<String> FILE_HASHES = List.of("md5", "sha1");
|
||||||
|
|
||||||
|
public static File parse(String artifactId, String version, String raw)
|
||||||
|
{
|
||||||
|
File file = new File().setRaw(raw);
|
||||||
|
String extension = FilenameUtils.getExtension(raw);
|
||||||
|
String base = FilenameUtils.getBaseName(raw);
|
||||||
|
if (FILE_TYPES.contains(extension.toLowerCase()))
|
||||||
|
{
|
||||||
|
file.setType(FileType.valueOf(extension.toUpperCase()));
|
||||||
|
file.setBase(base);
|
||||||
|
file.setHash(FileHash.NONE);
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
if (FILE_HASHES.contains(extension))
|
||||||
|
{
|
||||||
|
file.setHash(FileHash.valueOf(extension.toUpperCase()));
|
||||||
|
String secondaryExtension = FilenameUtils.getExtension(base);
|
||||||
|
String secondaryBase = FilenameUtils.getBaseName(base);
|
||||||
|
if (FILE_TYPES.contains(secondaryExtension.toLowerCase()))
|
||||||
|
{
|
||||||
|
file.setType(FileType.valueOf(secondaryExtension.toUpperCase()));
|
||||||
|
file.setBase(secondaryBase);
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new BadRequestException();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
package dev.dinauer.maven.maven.core.model;
|
||||||
|
|
||||||
|
public class SnapshotFile extends File
|
||||||
|
{
|
||||||
|
private int buildNumber;
|
||||||
|
private String date;
|
||||||
|
private String time;
|
||||||
|
|
||||||
|
public int getBuildNumber()
|
||||||
|
{
|
||||||
|
return buildNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SnapshotFile setBuildNumber(int buildNumber)
|
||||||
|
{
|
||||||
|
this.buildNumber = buildNumber;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDate()
|
||||||
|
{
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SnapshotFile setDate(String date)
|
||||||
|
{
|
||||||
|
this.date = date;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTime()
|
||||||
|
{
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SnapshotFile setTime(String time)
|
||||||
|
{
|
||||||
|
this.time = time;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,80 @@
|
|||||||
|
package dev.dinauer.maven.maven.core.model;
|
||||||
|
|
||||||
|
import jakarta.ws.rs.BadRequestException;
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
import org.apache.commons.lang3.Strings;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.OptionalInt;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
public class SnapshotFileParser
|
||||||
|
{
|
||||||
|
public static SnapshotFile parse(String artifactId, String version, String raw)
|
||||||
|
{
|
||||||
|
ExtensionParser.Result extensionResult = ExtensionParser.parse(raw);
|
||||||
|
|
||||||
|
SnapshotFile file = new SnapshotFile();
|
||||||
|
|
||||||
|
file.setBase(extensionResult.base());
|
||||||
|
file.setType(extensionResult.ext());
|
||||||
|
file.setHash(extensionResult.hashExt());
|
||||||
|
|
||||||
|
file.setRaw(raw);
|
||||||
|
file.setArtifactId(artifactId);
|
||||||
|
file.setVersion(version);
|
||||||
|
|
||||||
|
String dataString = prepareForData(artifactId, version, raw);
|
||||||
|
file.setDate(getDate(dataString));
|
||||||
|
|
||||||
|
String timeString = prepareForTime(dataString);
|
||||||
|
file.setTime(getTime(timeString));
|
||||||
|
|
||||||
|
String buildNumberString = prepareForBuildNumber(timeString);
|
||||||
|
file.setBuildNumber(getBuildNumber(buildNumberString));
|
||||||
|
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String prepareForData(String artifact, String version, String raw)
|
||||||
|
{
|
||||||
|
return Strings.CI.removeStart(raw, String.format("%s-%s-", artifact, prepareVersion(version)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String prepareForTime(String path)
|
||||||
|
{
|
||||||
|
return Strings.CI.removeStart(path.substring(9), ".");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String prepareForBuildNumber(String path)
|
||||||
|
{
|
||||||
|
return Strings.CI.removeStart(path.substring(7), "-");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getBuildNumber(String path)
|
||||||
|
{
|
||||||
|
int nextDot = path.indexOf(".");
|
||||||
|
int nextDash = path.indexOf("-");
|
||||||
|
OptionalInt optInt = IntStream.of(nextDash, nextDot).filter(index -> index > 0).min();
|
||||||
|
if (optInt.isPresent())
|
||||||
|
{
|
||||||
|
return Integer.parseInt(path.substring(0, optInt.getAsInt()));
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getDate(String path)
|
||||||
|
{
|
||||||
|
return path.substring(0, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getTime(String path)
|
||||||
|
{
|
||||||
|
return path.substring(0, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String prepareVersion(String version)
|
||||||
|
{
|
||||||
|
return Strings.CI.removeEnd(version, "-SNAPSHOT");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package dev.dinauer.maven.maven.core;
|
package dev.dinauer.maven.maven.core.parser;
|
||||||
|
|
||||||
import jakarta.ws.rs.BadRequestException;
|
import jakarta.ws.rs.BadRequestException;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package dev.dinauer.maven.maven.core;
|
package dev.dinauer.maven.maven.core.parser;
|
||||||
|
|
||||||
import dev.dinauer.maven.maven.core.model.Version;
|
import dev.dinauer.maven.maven.core.model.Version;
|
||||||
import jakarta.ws.rs.BadRequestException;
|
import jakarta.ws.rs.BadRequestException;
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
package dev.dinauer.maven.maven.core.model;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class ExtensionParserTest
|
||||||
|
{
|
||||||
|
@Test
|
||||||
|
void test_01()
|
||||||
|
{
|
||||||
|
String filename = "test.jar.md5";
|
||||||
|
|
||||||
|
ExtensionParser.Result result = ExtensionParser.parse(filename);
|
||||||
|
|
||||||
|
Assertions.assertEquals("test", result.base());
|
||||||
|
Assertions.assertEquals(FileType.JAR, result.ext());
|
||||||
|
Assertions.assertEquals(FileHash.MD5, result.hashExt());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_02()
|
||||||
|
{
|
||||||
|
String filename = "test.pom.sha1";
|
||||||
|
|
||||||
|
ExtensionParser.Result result = ExtensionParser.parse(filename);
|
||||||
|
|
||||||
|
Assertions.assertEquals("test", result.base());
|
||||||
|
Assertions.assertEquals(FileType.POM, result.ext());
|
||||||
|
Assertions.assertEquals(FileHash.SHA1, result.hashExt());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_03()
|
||||||
|
{
|
||||||
|
String filename = "test.jar";
|
||||||
|
|
||||||
|
ExtensionParser.Result result = ExtensionParser.parse(filename);
|
||||||
|
|
||||||
|
Assertions.assertEquals("test", result.base());
|
||||||
|
Assertions.assertEquals(FileType.JAR, result.ext());
|
||||||
|
Assertions.assertNull(result.hashExt());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package dev.dinauer.maven.maven.core.model;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class SnapshotFileParserTest
|
||||||
|
{
|
||||||
|
@Test
|
||||||
|
void test()
|
||||||
|
{
|
||||||
|
String filename = "my-library-1.0.0-20240315.142307-3-tests.jar.md5";
|
||||||
|
|
||||||
|
SnapshotFile file = SnapshotFileParser.parse("my-library", "1.0.0-SNAPSHOT", filename);
|
||||||
|
|
||||||
|
Assertions.assertEquals("20240315", file.getDate());
|
||||||
|
Assertions.assertEquals("142307", file.getTime());
|
||||||
|
Assertions.assertEquals(3, file.getBuildNumber());
|
||||||
|
Assertions.assertEquals(FileType.JAR, file.getType());
|
||||||
|
Assertions.assertEquals(FileHash.MD5, file.getHash());
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user