All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.badlogicgames.packr.PackrConfig Maven / Gradle / Ivy

/*
 * Copyright 2020 See AUTHORS file
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.badlogicgames.packr;

import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

/**
 * The Packr configuration can be read from command line, read from a JSON config file, or created from Java code directly.
 * 

* Command line parameters can be used to override (single-argument parameters) or extend (multi-argument parameters) JSON settings. */ @SuppressWarnings({"WeakerAccess", "JavaDoc"}) public class PackrConfig { public Platform platform; public String jdk; public String executable; public List classpath; public List removePlatformLibs; public String mainClass; public List vmArgs; public String minimizeJre; public File cacheJre; public List resources; public File outDir; public File platformLibsOutDir; public File iconResource; public String bundleIdentifier; public boolean verbose; @SuppressWarnings("unused") public PackrConfig() { super(); } @SuppressWarnings("unused") public PackrConfig(Platform platform, String jdk, String executable, List classpath, String mainClass, File outDir) { this.platform = platform; this.jdk = jdk; this.executable = executable; this.classpath = classpath; this.mainClass = mainClass; this.outDir = outDir; } public PackrConfig(PackrCommandLine commandLine) throws IOException { verbose = commandLine.verbose(); // parse config file, if one is given if (commandLine.isConfig()) { readConfigJson(commandLine.config()); } // evaluate optional command line parameters // if given, they override the config file settings if (commandLine.platform() != null) { platform = Platform.byDesc(commandLine.platform()); } if (commandLine.jdk() != null) { jdk = commandLine.jdk(); } if (commandLine.executable() != null) { executable = commandLine.executable(); } classpath = appendTo(classpath, commandLine.classpath()); removePlatformLibs = appendTo(removePlatformLibs, commandLine.removePlatformLibs()); if (commandLine.mainClass() != null) { mainClass = commandLine.mainClass(); } vmArgs = appendTo(vmArgs, commandLine.vmArgs()); if (commandLine.minimizeJre() != null) { minimizeJre = commandLine.minimizeJre(); } if (commandLine.cacheJre() != null) { cacheJre = commandLine.cacheJre(); } resources = appendTo(resources, commandLine.resources()); if (commandLine.outDir() != null) { outDir = commandLine.outDir(); } if (commandLine.platformLibsOutDir() != null) { platformLibsOutDir = commandLine.platformLibsOutDir(); } if (commandLine.iconResource() != null) { iconResource = commandLine.iconResource(); } if (commandLine.bundleIdentifier() != null) { bundleIdentifier = commandLine.bundleIdentifier(); } } private void readConfigJson(File configJson) throws IOException { JsonObject json = JsonObject.readFrom(new String(Files.readAllBytes(configJson.toPath()), StandardCharsets.UTF_8)); if (json.get("platform") != null) { platform = Platform.byDesc(json.get("platform").asString()); } if (json.get("jdk") != null) { jdk = json.get("jdk").asString(); } if (json.get("executable") != null) { executable = json.get("executable").asString(); } if (json.get("classpath") != null) { classpath = toStringArray(json.get("classpath").asArray()); } if (json.get("removelibs") != null) { removePlatformLibs = toStringArray(json.get("removelibs").asArray()); } if (json.get("mainclass") != null) { mainClass = json.get("mainclass").asString(); } if (json.get("vmargs") != null) { List vmArgs = toStringArray(json.get("vmargs").asArray()); this.vmArgs = new ArrayList<>(); for (String vmArg : vmArgs) { if (vmArg.startsWith("-")) { this.vmArgs.add(vmArg.substring(1)); } else { this.vmArgs.add(vmArg); } } } if (json.get("minimizejre") != null) { minimizeJre = json.get("minimizejre").asString(); } if (json.get("cachejre") != null) { cacheJre = new File(json.get("cachejre").asString()); } if (json.get("resources") != null) { resources = toFileArray(json.get("resources").asArray()); } if (json.get("output") != null) { outDir = new File(json.get("output").asString()); } if (json.get("libs") != null) { platformLibsOutDir = new File(json.get("libs").asString()); } if (json.get("icon") != null) { iconResource = new File(json.get("icon").asString()); } if (json.get("bundle") != null) { bundleIdentifier = json.get("bundle").asString(); } } private List appendTo(List list, List append) { if (list == null) { return append != null ? append : new ArrayList<>(); } if (append != null) { for (T item : append) { boolean duplicate = false; for (T cmp : list) { if (cmp.equals(item)) { duplicate = true; break; } } if (!duplicate) { list.add(item); } } } return list; } private List toStringArray(JsonArray array) { List result = new ArrayList<>(); for (JsonValue value : array) { result.add(value.asString()); } return result; } private List toFileArray(JsonArray array) { List result = new ArrayList<>(); for (JsonValue value : array) { result.add(new File(value.asString())); } return result; } /** * Sanity checks for configuration settings. Because users like to break stuff. */ void validate() throws IOException { validate(platform, "platform"); validate(jdk, "JDK"); validate(executable, "executable name"); validate(mainClass, "main class"); validate(outDir, "output folder"); if (outDir.exists()) { if (new File(".").equals(outDir)) { throw new IOException("Output directory equals working directory, aborting"); } if (new File("/").equals(outDir)) { throw new IOException("Output directory points to root folder."); } } if (classpath.isEmpty()) { throw new IOException("Empty class path. Please check your commandline or configuration."); } } private void validate(T parameter, String name) throws IOException { if (parameter == null) { throw new IOException("No " + name + " specified. Please check your commandline or configuration."); } } public enum Platform { Windows64("windows64"), Linux64("linux64"), MacOS("mac"); final String desc; Platform(String desc) { this.desc = desc; } static Platform byDesc(String desc) throws IOException { for (Platform value : values()) { if (value.desc.equalsIgnoreCase(desc)) { return value; } } throw new IOException("Invalid platform '" + desc + "'"); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy