diff --git a/pom.xml b/pom.xml
index 83d15b9..1c13204 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
de.chaos
swlnmngr
- 1.0-SNAPSHOT
+ 0.1
SteamWarLinkManager
@@ -40,11 +40,21 @@
+
+ src/main/resources
+
+ *.version
+
+ true
+
src/main/resources
*.*
+
+ *.version
+
false
@@ -57,12 +67,6 @@
json
20211205
-
- junit
- junit
- 4.13.2
- test
-
org.projectlombok
lombok
@@ -88,5 +92,10 @@
httpclient
4.5.13
+
+ commons-lang
+ commons-lang
+ 2.6
+
\ No newline at end of file
diff --git a/src/main/java/de/chaos/swlnmngr/Main.java b/src/main/java/de/chaos/swlnmngr/Main.java
index 8a7ecdc..ae529c9 100644
--- a/src/main/java/de/chaos/swlnmngr/Main.java
+++ b/src/main/java/de/chaos/swlnmngr/Main.java
@@ -23,11 +23,14 @@ public class Main {
if(CLIConfig.IS_DEBUG) {
Configurator.setRootLevel(Level.DEBUG);
}
+ if(!CLIConfig.NO_UPDATE) {
+ UpdateChecker.checkForUpdates();
+ }
logger.debug("Arguments: {}", Arrays.toString(allArgs));
if(CLIConfig.ARGS.length > 0) {
Router.route(CLIConfig.ARGS);
} else {
-
+ Router.printRoutes();
}
}
}
diff --git a/src/main/java/de/chaos/swlnmngr/UpdateChecker.java b/src/main/java/de/chaos/swlnmngr/UpdateChecker.java
new file mode 100644
index 0000000..5f7bcd8
--- /dev/null
+++ b/src/main/java/de/chaos/swlnmngr/UpdateChecker.java
@@ -0,0 +1,51 @@
+package de.chaos.swlnmngr;
+
+import de.chaos.swlnmngr.config.Config;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.json.JSONTokener;
+
+import java.io.IOException;
+import java.net.URI;
+
+public class UpdateChecker {
+
+ private static final URI repoUrl = URI.create("https://steamwar.de/devlabs/api/v1/repos/Chaoscaot/SteamwarLinkManager/releases?draft=false&pre-release=" + Config.PRE_RELEASES + "&page=1&limit=1");
+
+ public static final String CURRENT_VERSION;
+
+ static {
+ try {
+ CURRENT_VERSION = new String(UpdateChecker.class.getResourceAsStream("/jar.version").readAllBytes());
+ } catch (IOException e) {
+ Main.getLogger().error("Could not read Version", e);
+ System.exit(1);
+ throw new SecurityException(e);
+ }
+ }
+
+ public static void checkForUpdates() {
+ try (CloseableHttpClient client = HttpClients.createMinimal()) {
+ HttpGet get = new HttpGet(repoUrl);
+ try (CloseableHttpResponse response = client.execute(get)) {
+ JSONArray array = new JSONArray(new JSONTokener(response.getEntity().getContent()));
+ JSONObject latestObject = array.getJSONObject(0);
+ String latestVersion = latestObject.getString("name");
+ if(!latestVersion.equals(CURRENT_VERSION)) {
+ Main.getLogger().info("The Running Jar is not the Latest release Version\n\tYour Version: {}\n\tLatest Release Version: {}", CURRENT_VERSION, latestVersion);
+ Main.getLogger().info("Download the Latest Jar here: https://steamwar.de/devlabs/Chaoscaot/SteamwarLinkManager/releases");
+ }
+ }
+ } catch (IOException e) {
+ Main.getLogger().error("Could not fetch Updates", e);
+ }
+ }
+
+ public static void update() {
+
+ }
+}
diff --git a/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java b/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java
index 9f15fa6..c0b95c2 100644
--- a/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java
+++ b/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java
@@ -8,17 +8,18 @@ import java.io.File;
public class CLIConfig {
public static final boolean IS_DEBUG;
- public static final boolean UPDATE;
+ public static final boolean NO_UPDATE;
public static final File CONFIG;
public static final File INSTALL_DIR;
public static final String[] ARGS;
static {
Options options = new Options();
+ options.addOption(new Option("h", "help", false, "Display this Message"));
options.addOption(new Option("d", "debug", false, "Set the Log Level to Debug"));
- options.addOption(new Option("u", "update", false, "Update the Default libs"));
options.addOption(new Option("c", "config", true, "Use another Config File"));
options.addOption(new Option("i", "installdir", true, "Use other Install Dir"));
+ options.addOption(new Option("u", "no-update", false, "Disable the Auto-Update Checker"));
CommandLine cli = null;
CommandLineParser parser = new DefaultParser();
@@ -32,9 +33,14 @@ public class CLIConfig {
System.exit(1);
}
+ if(cli.hasOption("h")) {
+ formatter.printHelp("swlnmngr", options, true);
+ System.exit(0);
+ }
+
ARGS = cli.getArgs();
IS_DEBUG = cli.hasOption("d");
- UPDATE = cli.hasOption("u");
+ NO_UPDATE = cli.hasOption("u");
if(cli.hasOption("i")) {
INSTALL_DIR = new File(cli.getOptionValue("i"));
} else {
diff --git a/src/main/java/de/chaos/swlnmngr/config/Config.java b/src/main/java/de/chaos/swlnmngr/config/Config.java
index dcb52b6..16ce300 100644
--- a/src/main/java/de/chaos/swlnmngr/config/Config.java
+++ b/src/main/java/de/chaos/swlnmngr/config/Config.java
@@ -16,10 +16,11 @@ public class Config {
private static final File CONFIG_FILE = new File(CLIConfig.INSTALL_DIR, "config.json");
- public static final String PROJECT_PATH;
+ public static final File PROJECT_PATH;
public static final File LIB_PATH;
public static final String DEFAULTS;
public static final URI LIB_URL;
+ public static final boolean PRE_RELEASES;
public static final String USERNAME;
public static final String PASSWORD;
@@ -40,9 +41,10 @@ public class Config {
System.exit(1);
}
- PROJECT_PATH = config.getString("projectPath");
+ PROJECT_PATH = new File(config.getString("projectPath"));
LIB_PATH = new File(config.getString("libPath"));
DEFAULTS = config.getString("defaultName");
+ PRE_RELEASES = config.getBoolean("preReleases");
try {
LIB_URL = new URI(config.getString("libUrl"));
} catch (URISyntaxException e) {
diff --git a/src/main/java/de/chaos/swlnmngr/route/Router.java b/src/main/java/de/chaos/swlnmngr/route/Router.java
index 4fff1c4..c00f495 100644
--- a/src/main/java/de/chaos/swlnmngr/route/Router.java
+++ b/src/main/java/de/chaos/swlnmngr/route/Router.java
@@ -1,9 +1,7 @@
package de.chaos.swlnmngr.route;
import de.chaos.swlnmngr.Main;
-import de.chaos.swlnmngr.route.routes.InstallRoute;
-import de.chaos.swlnmngr.route.routes.Route;
-import de.chaos.swlnmngr.route.routes.UpdateRoute;
+import de.chaos.swlnmngr.route.routes.*;
import java.util.*;
@@ -12,7 +10,7 @@ public class Router {
private static final List ROUTES;
static {
- ROUTES = List.of(new InstallRoute(), new UpdateRoute());
+ ROUTES = List.of(new InstallRoute(), new UpdateRoute(), new LinkRoute(), new NewRoute());
}
public static void route(String[] args) {
@@ -29,4 +27,9 @@ public class Router {
}
}
}
+
+ public static void printRoutes() {
+ Main.getLogger().info("Available Routes: ");
+ Main.getLogger().info("\t{}", ROUTES.stream().map(Route::getName).reduce((s, s2) -> s + ", " + s2).get());
+ }
}
diff --git a/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java b/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
index e4e942e..57adbb1 100644
--- a/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
+++ b/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
@@ -1,19 +1,22 @@
package de.chaos.swlnmngr.route.routes;
-import com.sun.nio.file.ExtendedCopyOption;
import de.chaos.swlnmngr.Main;
import de.chaos.swlnmngr.config.CLIConfig;
+import org.apache.commons.lang.SystemUtils;
+import org.json.JSONObject;
+import org.json.JSONTokener;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
import java.util.Objects;
public class InstallRoute implements Route {
- private static final String[] defaultFiles = new String[] {"default_config.json", "default_swlnmngr.bat", "default_swlnmngr.sh"};
+ private static final String[] defaultFiles = new String[] {"default_swlnmngr.bat", "default_swlnmngr.sh"};
@Override
public String getName() {
@@ -37,6 +40,43 @@ public class InstallRoute implements Route {
}
}
+ if(SystemUtils.IS_OS_UNIX) {
+ try {
+ Files.deleteIfExists(new File(CLIConfig.INSTALL_DIR, "swlnmngr").toPath());
+ Files.createSymbolicLink(new File(CLIConfig.INSTALL_DIR, "swlnmngr").toPath(), new File(CLIConfig.INSTALL_DIR, "swlnmngr.sh").toPath());
+ } catch (IOException e) {
+ Main.getLogger().error("Could not create SymLink", e);
+ return false;
+ }
+ }
+
+ File configFile = new File(installDir, "config.json");
+ if(!configFile.exists()) {
+ try {
+ Files.copy(Objects.requireNonNull(InstallRoute.class.getResourceAsStream("/default_config.json")), configFile.toPath());
+ } catch (IOException e) {
+ Main.getLogger().error("Could not copy Config File", e);
+ return false;
+ }
+ } else {
+ try {
+ JSONObject defaultConfig = new JSONObject(new JSONTokener(Objects.requireNonNull(InstallRoute.class.getResourceAsStream("/default_config.json"))));
+ Main.getLogger().info(defaultConfig);
+ JSONObject currentConfig = new JSONObject(Files.readString(configFile.toPath()));
+ Main.getLogger().info(currentConfig);
+ for (String s : defaultConfig.keySet()) {
+ if(currentConfig.has(s)) continue;
+ currentConfig.put(s, defaultConfig.get(s));
+ }
+ Files.writeString(configFile.toPath(),
+ currentConfig.toString(2),
+ StandardOpenOption.TRUNCATE_EXISTING);
+ } catch (IOException e) {
+ Main.getLogger().error("Could write Config File", e);
+ return false;
+ }
+ }
+
try {
File jar = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
Main.getLogger().debug(jar);
diff --git a/src/main/java/de/chaos/swlnmngr/route/routes/LinkRoute.java b/src/main/java/de/chaos/swlnmngr/route/routes/LinkRoute.java
new file mode 100644
index 0000000..3e26bca
--- /dev/null
+++ b/src/main/java/de/chaos/swlnmngr/route/routes/LinkRoute.java
@@ -0,0 +1,50 @@
+package de.chaos.swlnmngr.route.routes;
+
+import de.chaos.swlnmngr.Main;
+import de.chaos.swlnmngr.config.Config;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+public class LinkRoute implements Route {
+ @Override
+ public String getName() {
+ return "link";
+ }
+
+ @Override
+ public boolean route(String[] args) {
+ if(args.length < 1) {
+ Main.getLogger().error("Usage: swlnmngr [Project] {Libs}");
+ return false;
+ }
+ String libs = args.length>1?args[1]:Config.DEFAULTS;
+ File libsFile = new File(Config.LIB_PATH, libs);
+ if(!libsFile.exists()) {
+ Main.getLogger().error("No Libs with name: {}", libs);
+ if(libs.equals(Config.DEFAULTS)) {
+ Main.getLogger().info("To Create the {} Folder run 'swlnmngr update'", Config.DEFAULTS);
+ }
+ return false;
+ }
+ File projectDir = new File(Config.PROJECT_PATH, args[0]);
+ if(!projectDir.exists()) {
+ Main.getLogger().error("No Project with name: {}", args[0]);
+ return false;
+ }
+ File link = new File(projectDir, "libs");
+ try {
+ Files.deleteIfExists(link.toPath());
+ Main.getLogger().debug(libsFile);
+ Main.getLogger().debug(link);
+ Path linkPath = Files.createSymbolicLink(link.toPath(), libsFile.toPath());
+ Main.getLogger().debug(linkPath);
+ } catch (IOException e) {
+ Main.getLogger().error("Could not Create SymLink", e);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/de/chaos/swlnmngr/route/routes/NewRoute.java b/src/main/java/de/chaos/swlnmngr/route/routes/NewRoute.java
new file mode 100644
index 0000000..8b5abd6
--- /dev/null
+++ b/src/main/java/de/chaos/swlnmngr/route/routes/NewRoute.java
@@ -0,0 +1,43 @@
+package de.chaos.swlnmngr.route.routes;
+
+import de.chaos.swlnmngr.Main;
+import de.chaos.swlnmngr.config.Config;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+
+public class NewRoute implements Route {
+ @Override
+ public String getName() {
+ return "new";
+ }
+
+ @Override
+ public boolean route(String[] args) {
+ if(args.length < 1) {
+ Main.getLogger().error("Usage: swlnmngr [Name]");
+ return false;
+ }
+ String name = args[0];
+ File newFile = new File(Config.LIB_PATH, name);
+ Main.getLogger().debug(newFile);
+ if(newFile.exists()) {
+ Main.getLogger().error("Directory {} already exists", name);
+ return false;
+ }
+ newFile.mkdir();
+ File defaultFile = new File(Config.LIB_PATH, Config.DEFAULTS);
+ Main.getLogger().debug(defaultFile);
+ try {
+ for (File file : defaultFile.listFiles()) {
+ Main.getLogger().debug(file);
+ Files.createSymbolicLink(new File(newFile, file.getName()).toPath(), file.toPath());
+ }
+ } catch (IOException e) {
+ Main.getLogger().error("Could not create SymLink", e);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/main/resources/default_config.json b/src/main/resources/default_config.json
index 62115ca..66afcfd 100644
--- a/src/main/resources/default_config.json
+++ b/src/main/resources/default_config.json
@@ -3,8 +3,7 @@
"libPath": "~/libs/",
"defaultName": "default",
"libUrl": "https://steamwar.de/lib.php",
- "credentials": {
- "username": "[EnterName]",
- "password": "[EnterPW]"
- }
+ "preReleases": false,
+ "username": "[EnterName]",
+ "password": "[EnterPW]"
}
\ No newline at end of file
diff --git a/src/main/resources/jar.version b/src/main/resources/jar.version
new file mode 100644
index 0000000..e78e522
--- /dev/null
+++ b/src/main/resources/jar.version
@@ -0,0 +1 @@
+${version}
\ No newline at end of file
diff --git a/test.sh b/test.sh
index 16cc0ab..7b55f9f 100644
--- a/test.sh
+++ b/test.sh
@@ -1 +1 @@
-java -jar target/SteamWarLinkManager.jar -i /home/chaos/IdeaProjects/swlnmngr/test/ install
\ No newline at end of file
+java -jar target/SteamWarLinkManager.jar -i ~/IdeaProjects/swlnmngr/test -du install
\ No newline at end of file