silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-ams/src/main/java/io/horizon/util/IoPath.java

Summary

Maintainability
A
1 hr
Test Coverage
package io.horizon.util;

import io.horizon.eon.VString;
import io.horizon.eon.em.Environment;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author lang : 2023/4/28
 */
class IoPath {
    static String root() {
        final URL rootUrl = IoStream.class.getResource("/");
        if (Objects.isNull(rootUrl)) {
            return VString.EMPTY;
        } else {
            final File rootFile = new File(rootUrl.getFile());
            return rootFile.getAbsolutePath() + "/";
        }
    }

    static String resolve(final String path, final Environment environment) {
        if (TIs.isNil(path) || path.startsWith(VString.SLASH)) {
            return path;
        }
        if (Environment.Production == environment) {
            return path;
        } else {
            // TODO: 追加环境变量,默认用了 Maven 的
            return resolve("src/main/resources", path);
        }
    }

    static String resolve(final String folder, final String file) {
        Objects.requireNonNull(file);
        final String valueFolder;
        if (TIs.isNil(folder)) {
            valueFolder = "/";
        } else {
            if (folder.endsWith("/")) {
                // Fix issue of deployment on production environment data loading
                valueFolder = folder.substring(0, folder.lastIndexOf("/"));
            } else {
                valueFolder = folder;
            }
        }
        final String valueFile;
        if (file.startsWith("/")) {
            valueFile = file;
        } else {
            valueFile = "/" + file;
        }
        // Convert `//` to `/`
        return (valueFolder + valueFile).replace("//", "/");
    }


    static List<String> ladder(final String path) {
        if (TIs.isNil(path)) {
            return new ArrayList<>();
        }
        final String[] splitArr = path.split(VString.SLASH);
        final List<String> itemList = new ArrayList<>();
        for (int idx = 0; idx < splitArr.length; idx++) {
            final StringBuilder item = new StringBuilder();
            for (int jdx = 0; jdx < idx; jdx++) {
                item.append(splitArr[jdx]).append(VString.SLASH);
            }
            item.append(splitArr[idx]);
            final String itemStr = item.toString();
            if (!TIs.isNil(itemStr)) {
                itemList.add(itemStr);
            }
        }
        return itemList;
    }

    static String first(final String path, final String separator) {
        final String[] names = path.split(separator);
        String result = null;
        for (final String found : names) {
            if (HUt.isNotNil(found)) {
                result = found;
                break;
            }
        }
        return result;
    }

    @SuppressWarnings("all")
    static String last(final String path, final String separator) {
        final String[] names = path.split(separator);
        String result = null;
        for (int idx = names.length - 1; idx < names.length; idx--) {
            final String found = names[idx];
            if (HUt.isNotNil(found)) {
                result = found;
                break;
            }
        }
        return result;
    }
}