Skip to content

Commit

Permalink
Simplify VersionUtils#compare, disable development.yml
Browse files Browse the repository at this point in the history
  • Loading branch information
joshuasing committed May 20, 2021
1 parent ad70be1 commit 37858a7
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 108 deletions.
32 changes: 0 additions & 32 deletions .github/workflows/development.yml

This file was deleted.

2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -22,7 +22,7 @@

<groupId>dev.hypera</groupId>
<artifactId>UpdateLib</artifactId>
<version>3.1.1-SNAPSHOT</version>
<version>3.1.2-SNAPSHOT</version>
<packaging>jar</packaging>

<name>UpdateLib</name>
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/dev/hypera/updatelib/UpdateLib.java
Expand Up @@ -20,14 +20,15 @@
import dev.hypera.updatelib.checkers.UpdateChecker;
import dev.hypera.updatelib.data.CheckData;
import dev.hypera.updatelib.objects.UpdateStatus;
import dev.hypera.updatelib.objects.UpdateStatusBuilder;

import java.util.Timer;
import java.util.TimerTask;
import java.util.function.Consumer;

public class UpdateLib {

private final static String VERSION = "3.1.1-SNAPSHOT"; // Current UpdateLib version.
private final static String VERSION = "3.1.2-SNAPSHOT"; // Current UpdateLib version.

private final long resourceId;
private final String currentVersion;
Expand Down
19 changes: 18 additions & 1 deletion src/main/java/dev/hypera/updatelib/objects/UpdateStatus.java
Expand Up @@ -77,7 +77,24 @@ public boolean isAvailable() {
}

public enum Status {
AVAILABLE, MAJOR_AVAILABLE, MINOR_AVAILABLE, UNAVAILABLE, FAILED
MAJOR_AVAILABLE,
MINOR_AVAILABLE,
AVAILABLE,
UNAVAILABLE,
FAILED;

public static Status fromNumber(VersionScheme scheme, int i) {
if(scheme.equals(VersionScheme.CALENDAR)) return AVAILABLE;

switch(i) {
case 2:
return MAJOR_AVAILABLE;
case 3:
return MINOR_AVAILABLE;
default:
return AVAILABLE;
}
}
}

}
Expand Up @@ -95,30 +95,7 @@ public UpdateStatus build() {
scheme = versionScheme.get();
}

VersionUtils.VersionChange change = VersionUtils.compare(scheme, distributedVersion, currentVersion);

return new UpdateStatus(distributedVersion, currentVersion, changeToStatus(change));
}

/**
* Converts {@link VersionUtils.VersionChange} to {@link UpdateStatus.Status}
*
* @param change VersionChange.
*
* @return Status.
* @since 3.0.0-SNAPSHOT
*/
private UpdateStatus.Status changeToStatus(VersionUtils.VersionChange change) {
if(change.equals(VersionUtils.VersionChange.NONE))
return UpdateStatus.Status.UNAVAILABLE;

if(change.equals(VersionUtils.VersionChange.MAJOR))
return UpdateStatus.Status.MAJOR_AVAILABLE;

if(change.equals(VersionUtils.VersionChange.MINOR))
return UpdateStatus.Status.MINOR_AVAILABLE;

return UpdateStatus.Status.AVAILABLE;
return new UpdateStatus(distributedVersion, currentVersion, VersionUtils.compare(scheme, distributedVersion, currentVersion));
}

}
17 changes: 17 additions & 0 deletions src/main/java/dev/hypera/updatelib/utils/Check.java
Expand Up @@ -26,17 +26,34 @@ public class Check {
*
* @param name Name of the object.
* @param object Object.
*
* @since 3.0.0-SNAPSHOT
*/
public static void notNull(String name, Object object) {
if(null == object)
fail(name + " cannot be null");
}

/**
* Check if objects are null, if so, throw an IllegalArgumentException.
*
* @param names Object names.
* @param objects Objects to check.
*
* @since 3.1.2-SNAPSHOT
*/
public static void notNull(String[] names, Object... objects) {
for(int i = 0; i < objects.length; i++) {
if(null == objects[i])
fail(names[i] + " cannot be null.");
}
}

/**
* Throw an IllegalArgumentException.
*
* @param message Message.
*
* @since 3.0.0-SNAPSHOT
*/
private static void fail(String message) {
Expand Down
64 changes: 15 additions & 49 deletions src/main/java/dev/hypera/updatelib/utils/VersionUtils.java
Expand Up @@ -18,6 +18,7 @@

import dev.hypera.updatelib.annotations.Internal;
import dev.hypera.updatelib.exceptions.VersionSchemeException;
import dev.hypera.updatelib.objects.UpdateStatus;
import dev.hypera.updatelib.objects.VersionScheme;

import java.util.Arrays;
Expand Down Expand Up @@ -46,59 +47,29 @@ public static Optional<VersionScheme> detectScheme(String version) {
* @param newVersion New/Distributed version.
* @param currentVersion Current resource version.
*
* @return {@link VersionChange}
* @return {@link UpdateStatus.Status}
* @since 3.0.0-SNAPSHOT
*/
public static VersionChange compare(VersionScheme versionScheme, String newVersion, String currentVersion) {
Check.notNull("version scheme", versionScheme);
Check.notNull("new version", newVersion);
Check.notNull("current version", currentVersion);
public static UpdateStatus.Status compare(VersionScheme versionScheme, String newVersion, String currentVersion) {
Check.notNull(new String[] { "version scheme", "new version", "current version" }, versionScheme, newVersion, currentVersion);

// if(newVersion.equals(currentVersion))
// return VersionChange.NONE;
if(newVersion.equals(currentVersion))
return UpdateStatus.Status.UNAVAILABLE;
else if(versionScheme.equals(VersionScheme.CALENDAR))
return UpdateStatus.Status.AVAILABLE;

Matcher matcher = versionScheme.getPattern().matcher(newVersion);
Matcher currentMatcher = versionScheme.getPattern().matcher(currentVersion);

if(!matcher.find() || !currentMatcher.find())
throw new VersionSchemeException("Version does not matcher version scheme.");

switch(versionScheme) {
case BASIC:
if(safeCheck(currentMatcher.group("major"), matcher.group("major")))
return VersionChange.MAJOR;
if(safeCheck(currentMatcher.group("minor"), matcher.group("minor")))
return VersionChange.MINOR;
if(safeCheck(currentMatcher.group("prerelease"), matcher.group("prerelease")))
return VersionChange.PRE_RELEASE;
return VersionChange.NONE;

case SEMANTIC:
if(safeCheck(currentMatcher.group("major"), matcher.group("major")))
return VersionChange.MAJOR;
if(safeCheck(currentMatcher.group("minor"), matcher.group("minor")))
return VersionChange.MINOR;
if(safeCheck(currentMatcher.group("patch"), matcher.group("patch")))
return VersionChange.PATCH;
if(safeCheck(currentMatcher.group("prerelease"), matcher.group("prerelease")))
return VersionChange.PRE_RELEASE;
if(safeCheck(currentMatcher.group("buildmetadata"), matcher.group("buildmetadata")))
return VersionChange.METADATA;
return VersionChange.NONE;

case CALENDAR:
if(safeCheck(currentMatcher.group("year"), matcher.group("year")))
return VersionChange.YEAR;
if(safeCheck(currentMatcher.group("month"), matcher.group("month")))
return VersionChange.MONTH;
if(safeCheck(currentMatcher.group("day"), matcher.group("day")))
return VersionChange.DAY;
return VersionChange.NONE;

default:
throw new VersionSchemeException("Unknown version scheme");
for(int i = 1; i < Math.max(currentMatcher.groupCount(), matcher.groupCount()); i++) {
if(safeCheck(currentMatcher.group(i), matcher.group(i)))
return UpdateStatus.Status.fromNumber(versionScheme, i);
}

return UpdateStatus.Status.AVAILABLE;
}

/**
Expand Down Expand Up @@ -131,14 +102,9 @@ private static boolean safeCheck(String currentGroup, String newGroup) {
}

private static boolean isEmpty(String one) {
if(null == one) return true;
if(one.equals("")) return true;
return false;
}

@Internal
public enum VersionChange {
NONE, MAJOR, MINOR, PATCH, PRE_RELEASE, METADATA, YEAR, MONTH, DAY
if(null == one)
return true;
return one.equals("");
}

}

0 comments on commit 37858a7

Please sign in to comment.