package core.framework.api.web.site;
import core.framework.api.util.Exceptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* @author neo
*/
public final class WebDirectory {
private final Logger logger = LoggerFactory.getLogger(WebDirectory.class);
private final Path root;
public boolean localEnv;
public WebDirectory() {
this.root = locateRootDirectory();
}
private Path locateRootDirectory() {
String value = System.getProperty("core.webPath");
if (value != null) {
Path path = Paths.get(value).toAbsolutePath();
if (Files.isDirectory(path)) {
logger.info("found -Dcore.webPath, use it as web directory, path={}", path);
return path;
}
} else {
Path path = findLocalRootDirectory();
if (path != null) {
logger.warn("found local web directory, this should only happen in local dev env or test, path={}", path);
localEnv = true;
try {
return path.toRealPath();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
logger.info("can not locate web directory");
return null;
}
private Path findLocalRootDirectory() {
Path path = Paths.get("./src/main/web");
if (Files.isDirectory(path)) return path;
path = Paths.get("./src/main/dist/web");
if (Files.isDirectory(path)) return path;
return null;
}
public Path path(String path) {
if (path.charAt(0) != '/') throw Exceptions.error("path must start with '/', path={}", path);
return root().resolve(path.substring(1)).toAbsolutePath();
}
public Path root() {
if (root == null)
throw new Error("can not find web path, check -Dcore.webPath or set working dir to be module path for local dev env.");
return root;
}
}