/*
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.incubator.jpackage.internal;
import java.nio.file.Path;
import java.util.Map;
Application directory layout.
/**
* Application directory layout.
*/
public final class ApplicationLayout implements PathGroup.Facade<ApplicationLayout> {
enum PathRole {
Java run-time directory.
/**
* Java run-time directory.
*/
RUNTIME,
Java run-time home directory.
/**
* Java run-time home directory.
*/
RUNTIME_HOME,
Application data directory.
/**
* Application data directory.
*/
APP,
Directory with application launchers.
/**
* Directory with application launchers.
*/
LAUNCHERS,
Directory for files for desktop integration.
/**
* Directory for files for desktop integration.
*/
DESKTOP,
Directory with application Java modules.
/**
* Directory with application Java modules.
*/
MODULES,
}
ApplicationLayout(Map<Object, Path> paths) {
data = new PathGroup(paths);
}
private ApplicationLayout(PathGroup data) {
this.data = data;
}
@Override
public PathGroup pathGroup() {
return data;
}
@Override
public ApplicationLayout resolveAt(Path root) {
return new ApplicationLayout(pathGroup().resolveAt(root));
}
Path to launchers directory.
/**
* Path to launchers directory.
*/
public Path launchersDirectory() {
return pathGroup().getPath(PathRole.LAUNCHERS);
}
Path to application data directory.
/**
* Path to application data directory.
*/
public Path appDirectory() {
return pathGroup().getPath(PathRole.APP);
}
Path to Java run-time directory.
/**
* Path to Java run-time directory.
*/
public Path runtimeDirectory() {
return pathGroup().getPath(PathRole.RUNTIME);
}
Path to Java run-time home directory.
/**
* Path to Java run-time home directory.
*/
public Path runtimeHomeDirectory() {
return pathGroup().getPath(PathRole.RUNTIME_HOME);
}
Path to application mods directory.
/**
* Path to application mods directory.
*/
public Path appModsDirectory() {
return pathGroup().getPath(PathRole.MODULES);
}
Path to directory with application's desktop integration files.
/**
* Path to directory with application's desktop integration files.
*/
public Path destktopIntegrationDirectory() {
return pathGroup().getPath(PathRole.DESKTOP);
}
static ApplicationLayout linuxAppImage() {
return new ApplicationLayout(Map.of(
PathRole.LAUNCHERS, Path.of("bin"),
PathRole.APP, Path.of("lib/app"),
PathRole.RUNTIME, Path.of("lib/runtime"),
PathRole.RUNTIME_HOME, Path.of("lib/runtime"),
PathRole.DESKTOP, Path.of("lib"),
PathRole.MODULES, Path.of("lib/app/mods")
));
}
static ApplicationLayout windowsAppImage() {
return new ApplicationLayout(Map.of(
PathRole.LAUNCHERS, Path.of(""),
PathRole.APP, Path.of("app"),
PathRole.RUNTIME, Path.of("runtime"),
PathRole.RUNTIME_HOME, Path.of("runtime"),
PathRole.DESKTOP, Path.of(""),
PathRole.MODULES, Path.of("app/mods")
));
}
static ApplicationLayout macAppImage() {
return new ApplicationLayout(Map.of(
PathRole.LAUNCHERS, Path.of("Contents/MacOS"),
PathRole.APP, Path.of("Contents/app"),
PathRole.RUNTIME, Path.of("Contents/runtime"),
PathRole.RUNTIME_HOME, Path.of("Contents/runtime/Contents/Home"),
PathRole.DESKTOP, Path.of("Contents/Resources"),
PathRole.MODULES, Path.of("Contents/app/mods")
));
}
public static ApplicationLayout platformAppImage() {
if (Platform.isWindows()) {
return windowsAppImage();
}
if (Platform.isLinux()) {
return linuxAppImage();
}
if (Platform.isMac()) {
return macAppImage();
}
throw Platform.throwUnknownPlatformError();
}
public static ApplicationLayout javaRuntime() {
return new ApplicationLayout(Map.of(PathRole.RUNTIME, Path.of("")));
}
public static ApplicationLayout linuxUsrTreePackageImage(Path prefix,
String packageName) {
final Path lib = prefix.resolve(Path.of("lib", packageName));
return new ApplicationLayout(Map.of(
PathRole.LAUNCHERS, prefix.resolve("bin"),
PathRole.APP, lib.resolve("app"),
PathRole.RUNTIME, lib.resolve("runtime"),
PathRole.RUNTIME_HOME, lib.resolve("runtime"),
PathRole.DESKTOP, lib,
PathRole.MODULES, lib.resolve("app/mods")
));
}
private final PathGroup data;
}