From: Olyutorskii Date: Thu, 9 Jul 2020 18:41:03 +0000 (+0900) Subject: modify envinfo. X-Git-Tag: release-4.101.4^2~9 X-Git-Url: http://git.osdn.net/view?p=jindolf%2FJindolf.git;a=commitdiff_plain;h=040951920e972e5d37328e8e9c99e77c69c7467f modify envinfo. --- diff --git a/src/main/java/jp/sfjp/jindolf/JindolfMain.java b/src/main/java/jp/sfjp/jindolf/JindolfMain.java index 6589322..4610571 100644 --- a/src/main/java/jp/sfjp/jindolf/JindolfMain.java +++ b/src/main/java/jp/sfjp/jindolf/JindolfMain.java @@ -141,31 +141,31 @@ public final class JindolfMain { return; } - + /** * 起動時の諸々の情報をログ出力する。 - * + * * @param optinfo コマンドラインオプション */ private static void logBootInfo(OptionInfo optinfo){ StringBuilder bootArgs = new StringBuilder(); - + bootArgs.append("\n\n").append("起動時引数:\n"); - optinfo.getInvokeArgList().forEach(arg -> + optinfo.getInvokeArgList().forEach(arg -> bootArgs.append("\u0020\u0020").append(arg).append('\n') ); bootArgs.append('\n'); - + bootArgs.append(EnvInfo.getVMInfo()); - + LOGGER.info(bootArgs.toString()); return; } - + /** * 起動時の諸々の情報をログ出力する。 - * + * * @param configStore 設定ディレクトリ情報 */ private static void logBootInfo(ConfigStore configStore){ @@ -176,7 +176,7 @@ public final class JindolfMain { } return; } - + /** * JindolfMain のスタートアップエントリ。 * @param args コマンドライン引数 @@ -263,11 +263,11 @@ public final class JindolfMain { logBootInfo(); logBootInfo(optinfo); - + final AppSetting appSetting = new AppSetting(optinfo); ConfigStore configStore = appSetting.getConfigStore(); logBootInfo(configStore); - + ConfigDirUi.prepareConfigDir(configStore); ConfigDirUi.tryLock(configStore); // ここから設定格納ディレクトリ解禁 @@ -294,7 +294,7 @@ public final class JindolfMain { int exitCode = 0; try{ - EventQueue.invokeAndWait(() -> + EventQueue.invokeAndWait(() -> startGUI(appSetting) ); }catch(InvocationTargetException | InterruptedException e){ diff --git a/src/main/java/jp/sfjp/jindolf/config/EnvInfo.java b/src/main/java/jp/sfjp/jindolf/config/EnvInfo.java index 4d35025..1ce75a5 100644 --- a/src/main/java/jp/sfjp/jindolf/config/EnvInfo.java +++ b/src/main/java/jp/sfjp/jindolf/config/EnvInfo.java @@ -8,8 +8,10 @@ package jp.sfjp.jindolf.config; import java.io.File; -import java.text.NumberFormat; -import java.util.Set; +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.SortedMap; import java.util.TreeMap; @@ -32,36 +34,48 @@ public final class EnvInfo{ /** 最大ヒープメモリ。 */ public static final long MAX_MEMORY; - private static final SortedMap PROPERTY_MAP = - new TreeMap<>(); - - private static final SortedMap ENVIRONMENT_MAP = - new TreeMap<>(); - - private static final String[] CLASSPATHS; + private static final SortedMap PROPERTY_MAP; + private static final SortedMap ENVIRONMENT_MAP; + + private static final List CLASSPATHS; + + private static final String[] PROPNAMES = { + "os.name", + "os.version", + "os.arch", + "java.vendor", + "java.version", + "java.class.path", + }; + + private static final String[] ENVNAMES = { + "LANG", + "DISPLAY", + //"PATH", + //"TEMP", + //"USER", + }; + + private static final String FORM_MEM = + "最大ヒープメモリ量: {0,number} bytes\n"; + private static final String INDENT = "\u0020\u0020"; + private static final char NL = '\n'; static{ - OS_NAME = getSecureProperty("os.name"); - OS_VERSION = getSecureProperty("os.version"); - OS_ARCH = getSecureProperty("os.arch"); - JAVA_VENDOR = getSecureProperty("java.vendor"); - JAVA_VERSION = getSecureProperty("java.version"); - - getSecureEnvironment("LANG"); - getSecureEnvironment("DISPLAY"); - Runtime runtime = Runtime.getRuntime(); MAX_MEMORY = runtime.maxMemory(); - String classpath = getSecureProperty("java.class.path"); - String[] pathVec; - if(classpath != null){ - pathVec = classpath.split(File.pathSeparator); - }else{ - pathVec = new String[0]; - } - CLASSPATHS = pathVec; + ENVIRONMENT_MAP = buildEnvMap(); + + PROPERTY_MAP = buildPropMap(); + OS_NAME = PROPERTY_MAP.get("os.name"); + OS_VERSION = PROPERTY_MAP.get("os.version"); + OS_ARCH = PROPERTY_MAP.get("os.arch"); + JAVA_VENDOR = PROPERTY_MAP.get("java.vendor"); + JAVA_VERSION = PROPERTY_MAP.get("java.version"); + String classpath = PROPERTY_MAP.get("java.class.path"); + CLASSPATHS = buildClassPathList(classpath); } @@ -69,39 +83,78 @@ public final class EnvInfo{ * 隠れコンストラクタ。 */ private EnvInfo(){ - throw new AssertionError(); + assert false; } /** - * 可能ならシステムプロパティを読み込む。 - * @param key キー - * @return プロパティ値。セキュリティ上読み込み禁止の場合はnull。 + * 主要環境変数マップを作成する。 + * + * @return 主要環境変数マップ */ - private static String getSecureProperty(String key){ - String result; - try{ - result = System.getProperty(key); - if(result != null) PROPERTY_MAP.put(key, result); - }catch(SecurityException e){ - result = null; + private static SortedMap buildEnvMap(){ + SortedMap envmap = new TreeMap<>(); + + for(String name : ENVNAMES){ + String val; + try{ + val = System.getenv(name); + }catch(SecurityException e){ + continue; + } + if(val == null) continue; + envmap.put(name, val); } + + SortedMap result; + result = Collections.unmodifiableSortedMap(envmap); + return result; } /** - * 可能なら環境変数を読み込む。 - * @param name 環境変数名 - * @return 環境変数値。セキュリティ上読み込み禁止の場合はnull。 + * 主要システムプロパティ値マップを作成する。 + * + * @return 主要システムプロパティ値マップ */ - private static String getSecureEnvironment(String name){ - String result; - try{ - result = System.getenv(name); - if(result != null) ENVIRONMENT_MAP.put(name, result); - }catch(SecurityException e){ - result = null; + private static SortedMap buildPropMap(){ + SortedMap propmap = new TreeMap<>(); + + for(String name : PROPNAMES){ + String val; + try{ + val = System.getProperty(name); + }catch(SecurityException e){ + continue; + } + if(val == null) continue; + propmap.put(name, val); } + + SortedMap result; + result = Collections.unmodifiableSortedMap(propmap); + + return result; + } + + /** + * クラスパスリストを作成する。 + * + * @param 連結クラスパス値 + * @return クラスパスリスト + */ + private static List buildClassPathList(String classpath){ + String[] pathArray; + if(classpath != null){ + pathArray = classpath.split(File.pathSeparator); + }else{ + pathArray = new String[0]; + } + + List result; + result = Arrays.asList(pathArray); + result = Collections.unmodifiableList(result); + return result; } @@ -111,44 +164,74 @@ public final class EnvInfo{ */ public static String getVMInfo(){ StringBuilder result = new StringBuilder(); - NumberFormat nform = NumberFormat.getNumberInstance(); - result.append("最大ヒープメモリ量: ") - .append(nform.format(MAX_MEMORY)) - .append(" bytes\n"); + String memform = MessageFormat.format(FORM_MEM, MAX_MEMORY); + result.append(memform).append(NL); + + result.append(getSysPropInfo()).append(NL); + result.append(getEnvInfo()).append(NL); + result.append(getClassPathInfo()).append(NL); - result.append("\n"); + return result.toString(); + } + /** + * システムプロパティ要覧を返す。 + * + *

java.class.pathの値は除く。 + * + * @return システムプロパティ要覧 + */ + private static CharSequence getSysPropInfo(){ + StringBuilder result = new StringBuilder(); result.append("主要システムプロパティ:\n"); - Set propKeys = PROPERTY_MAP.keySet(); - for(String propKey : propKeys){ - if(propKey.equals("java.class.path")) continue; - String value = PROPERTY_MAP.get(propKey); - result.append(" "); - result.append(propKey).append("=").append(value).append("\n"); - } - result.append("\n"); + PROPERTY_MAP.entrySet().stream() + .filter(entry -> ! entry.getKey().equals("java.class.path")) + .forEachOrdered(entry -> { + result.append(INDENT); + result.append(entry.getKey()); + result.append("="); + result.append(entry.getValue()); + result.append(NL); + }); - result.append("主要環境変数:\n"); - Set envKeys = ENVIRONMENT_MAP.keySet(); - for(String envKey : envKeys){ - String value = ENVIRONMENT_MAP.get(envKey); - result.append(" "); - result.append(envKey).append("=").append(value).append("\n"); - } + return result; + } - result.append("\n"); + /** + * 環境変数要覧を返す。 + * + * @return 環境変数要覧 + */ + private static CharSequence getEnvInfo(){ + StringBuilder result = new StringBuilder("主要環境変数:\n"); + + ENVIRONMENT_MAP.entrySet().stream() + .forEachOrdered(entry -> { + result.append(INDENT); + result.append(entry.getKey()); + result.append('='); + result.append(entry.getValue()); + result.append(NL); + }); - result.append("クラスパス:\n"); - for(String path : CLASSPATHS){ - result.append(" "); - result.append(path).append("\n"); - } + return result; + } - result.append("\n"); + /** + * クラスパス情報要覧を返す。 + * + * @return クラスパス情報要覧 + */ + private static CharSequence getClassPathInfo(){ + StringBuilder result = new StringBuilder("クラスパス:\n"); - return result.toString(); + CLASSPATHS.stream().forEachOrdered(path -> { + result.append(INDENT).append(path).append(NL); + }); + + return result; } }