!135 暂时将日志输出改在用户目录

Merge pull request !135 from 格物方能致知/develop
This commit is contained in:
格物方能致知 2023-10-03 16:07:18 +00:00 committed by Gitee
commit f02332332e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
24 changed files with 320 additions and 232 deletions

3
.gitignore vendored
View File

@ -15,6 +15,9 @@ test/
### 此处排除证书目录 ### 此处排除证书目录
certificate/ certificate/
### 此处排除了项目文件
.jnotepad/
### Eclipse ### ### Eclipse ###
.apt_generated .apt_generated
.classpath .classpath

View File

@ -147,7 +147,7 @@
<configuration> <configuration>
<mainClass>org.jcnc.jnotepad/org.jcnc.jnotepad.LunchApp</mainClass> <mainClass>org.jcnc.jnotepad/org.jcnc.jnotepad.LunchApp</mainClass>
<reflectionList> <reflectionList>
org.jcnc.jnotepad.app.config.AppConfig,org.jcnc.jnotepad.app.config.AppConfig$ShortcutKey org.jcnc.jnotepad.app.config.UserConfig,org.jcnc.jnotepad.app.config.UserConfig$ShortcutKey
</reflectionList> </reflectionList>
<bundlesList> <bundlesList>
i18n/i18n i18n/i18n

View File

@ -3,6 +3,7 @@ package org.jcnc.jnotepad;
import javafx.application.Application; import javafx.application.Application;
import javafx.stage.Stage; import javafx.stage.Stage;
import org.jcnc.jnotepad.app.manager.ApplicationManager; import org.jcnc.jnotepad.app.manager.ApplicationManager;
import org.jcnc.jnotepad.common.util.LogUtil;
/** /**
@ -26,6 +27,10 @@ public class LunchApp extends Application {
@Override @Override
public void start(Stage primaryStage) { public void start(Stage primaryStage) {
// 获取当前启动位置
String currentWorkingDirectory = System.getProperty("user.dir");
LogUtil.getLogger(this.getClass()).info("当前启动位置:{}", currentWorkingDirectory);
// 设置参数 // 设置参数
APPLICATION_MANAGER.setApplication(this); APPLICATION_MANAGER.setApplication(this);
APPLICATION_MANAGER.setPrimaryStage(primaryStage); APPLICATION_MANAGER.setPrimaryStage(primaryStage);

View File

@ -1,89 +1,25 @@
package org.jcnc.jnotepad.app.config; package org.jcnc.jnotepad.app.config;
import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.Optional;
import org.jcnc.jnotepad.model.entity.ShortcutKey;
import java.util.ArrayList; import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY;
import java.util.List;
import static org.jcnc.jnotepad.common.constants.TextConstants.CHINESE;
/** /**
* 数据模型类用于表示 MyData 对象的数据结构 * 应用程序配置文件
* *
* @author 许轲 * @author gewuyou
*/ */
public class AppConfig { public class AppConfig {
private static final String CTRL_N = "ctrl+n";
private static final String CTRL_O = "ctrl+o";
private static final String CTRL_S = "ctrl+s";
private static final String CTRL_ALT_S = "ctrl+alt+s";
private static final String ALT_S = "alt+s";
private String language;
@JsonIgnore
private boolean textWrap;
private List<ShortcutKey> shortcutKey;
/** /**
* 生成默认应用配置对象 * 程序根路径
*
* @return 默认应用配置对象
*/ */
public static AppConfig generateDefaultAppConfig() { private String rootPath;
AppConfig config = new AppConfig();
config.setLanguage(CHINESE);
config.setTextWrap(false);
List<ShortcutKey> shortcutKeys = new ArrayList<>(); public String getRootPath() {
shortcutKeys.add(createShortcutKey("newItem", CTRL_N)); return Optional.of(rootPath).orElse(System.getProperty(DEFAULT_PROPERTY));
shortcutKeys.add(createShortcutKey("openItem", CTRL_O));
shortcutKeys.add(createShortcutKey("saveItem", CTRL_S));
shortcutKeys.add(createShortcutKey("saveAsItem", CTRL_ALT_S));
shortcutKeys.add(createShortcutKey("lineFeedItem", ""));
shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S));
shortcutKeys.add(createShortcutKey("pluginManager", ""));
shortcutKeys.add(createShortcutKey("countItem", ""));
shortcutKeys.add(createShortcutKey("aboutItem", ""));
config.setShortcutKey(shortcutKeys);
return config;
} }
/** public void setRootPath(String rootPath) {
* 创建 ShortcutKey 对象 this.rootPath = rootPath;
*
* @param buttonName 按钮名称
* @param shortcutKeyValue 快捷键值
* @return ShortcutKey 对象
*/
private static ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) {
ShortcutKey shortcutKey = new ShortcutKey();
shortcutKey.setButtonName(buttonName);
shortcutKey.setShortcutKeyValue(shortcutKeyValue);
return shortcutKey;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public List<ShortcutKey> getShortcutKey() {
return shortcutKey;
}
public void setShortcutKey(List<ShortcutKey> shortcutKey) {
this.shortcutKey = shortcutKey;
}
public boolean isTextWrap() {
return textWrap;
}
public void setTextWrap(boolean textWrap) {
this.textWrap = textWrap;
} }
} }

View File

@ -2,7 +2,6 @@ package org.jcnc.jnotepad.app.config;
import org.jcnc.jnotepad.model.entity.PluginDescriptor; import org.jcnc.jnotepad.model.entity.PluginDescriptor;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -13,19 +12,6 @@ import java.util.List;
public class PluginConfig { public class PluginConfig {
private List<PluginDescriptor> plugins; private List<PluginDescriptor> plugins;
/**
* 生成默认的插件配置文件
*
* @return org.jcnc.jnotepad.app.config.PluginConfig 插件配置文件
* @apiNote
* @since 2023/9/17 0:57
*/
public static PluginConfig generateDefaultPluginConfig() {
PluginConfig pluginConfig = new PluginConfig();
pluginConfig.setPlugins(new ArrayList<>());
return pluginConfig;
}
public List<PluginDescriptor> getPlugins() { public List<PluginDescriptor> getPlugins() {
return plugins; return plugins;
} }

View File

@ -0,0 +1,44 @@
package org.jcnc.jnotepad.app.config;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.jcnc.jnotepad.model.entity.ShortcutKey;
import java.util.List;
/**
* 用户配置文件类
*
* @author 许轲
*/
public class UserConfig {
private String language;
@JsonIgnore
private boolean textWrap;
private List<ShortcutKey> shortcutKey;
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public List<ShortcutKey> getShortcutKey() {
return shortcutKey;
}
public void setShortcutKey(List<ShortcutKey> shortcutKey) {
this.shortcutKey = shortcutKey;
}
public boolean isTextWrap() {
return textWrap;
}
public void setTextWrap(boolean textWrap) {
this.textWrap = textWrap;
}
}

View File

@ -16,8 +16,8 @@ import org.jcnc.jnotepad.common.util.LogUtil;
import org.jcnc.jnotepad.common.util.UiUtil; import org.jcnc.jnotepad.common.util.UiUtil;
import org.jcnc.jnotepad.controller.ResourceController; import org.jcnc.jnotepad.controller.ResourceController;
import org.jcnc.jnotepad.controller.cache.CacheController; import org.jcnc.jnotepad.controller.cache.CacheController;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.controller.config.PluginConfigController; import org.jcnc.jnotepad.controller.config.PluginConfigController;
import org.jcnc.jnotepad.controller.config.UserConfigController;
import org.jcnc.jnotepad.controller.manager.Controller; import org.jcnc.jnotepad.controller.manager.Controller;
import org.jcnc.jnotepad.plugin.manager.PluginManager; import org.jcnc.jnotepad.plugin.manager.PluginManager;
import org.jcnc.jnotepad.views.manager.*; import org.jcnc.jnotepad.views.manager.*;
@ -141,7 +141,7 @@ public class ApplicationManager {
pluginConfigController.getConfig().setPlugins(PluginManager.getInstance().getPluginDescriptors()); pluginConfigController.getConfig().setPlugins(PluginManager.getInstance().getPluginDescriptors());
pluginConfigController.writeConfig(); pluginConfigController.writeConfig();
// 保存配置文件 // 保存配置文件
AppConfigController.getInstance().writeConfig(); UserConfigController.getInstance().writeConfig();
// 销毁插件可能申请的资源 // 销毁插件可能申请的资源
PluginManager.getInstance().destroyPlugins(); PluginManager.getInstance().destroyPlugins();
// 保存已打开的文件标签页 // 保存已打开的文件标签页

View File

@ -40,7 +40,7 @@ public class TextConstants {
*/ */
public static final String ENGLISH = "english"; public static final String ENGLISH = "english";
/// Config 文本常量 /// BaseConfig 文本常量
/** /**
* 中文小写 * 中文小写
*/ */

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
import org.jcnc.jnotepad.common.util.JsonUtil; import org.jcnc.jnotepad.common.util.JsonUtil;
import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.LogUtil;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.exception.AppException;
import org.jcnc.jnotepad.model.entity.Cache; import org.jcnc.jnotepad.model.entity.Cache;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -19,8 +20,6 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY;
/** /**
* 缓存控制器 * 缓存控制器
* *
@ -36,7 +35,7 @@ public class CacheController {
private String cacheDir; private String cacheDir;
private CacheController() { private CacheController() {
cacheDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad", "caches").toString(); cacheDir = Paths.get(AppConfigController.getInstance().getConfig().getRootPath(), ".jnotepad", "caches").toString();
} }
public static CacheController getInstance() { public static CacheController getInstance() {
@ -48,7 +47,6 @@ public class CacheController {
if (createCachesIfNotExists()) { if (createCachesIfNotExists()) {
return; return;
} }
// 检查并获取缓存根目录 // 检查并获取缓存根目录
File cacheFileDir = createCacheRootIfNotExist(); File cacheFileDir = createCacheRootIfNotExist();
// 获取缓存命名空间 // 获取缓存命名空间

View File

@ -1,44 +1,37 @@
package org.jcnc.jnotepad.controller.config; package org.jcnc.jnotepad.controller.config;
import org.jcnc.jnotepad.app.config.AppConfig; import org.jcnc.jnotepad.app.config.AppConfig;
import org.jcnc.jnotepad.model.entity.ShortcutKey;
import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController; import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List;
import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY; import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY;
/** /**
* 应用程序配置控制器 * 应用程序配置文件控制器
* *
* <p>该类负责管理应用程序的配置文件包括加载持久化和更新配置信息等操作</p> * @author gewuyou
*
* @author songdragon
*/ */
public class AppConfigController extends BaseConfigController<AppConfig> { public class AppConfigController extends BaseConfigController<AppConfig> {
private static final AppConfigController INSTANCE = new AppConfigController();
public static AppConfigController getInstance() {
return INSTANCE;
}
/** /**
* 配置文件名 * 配置文件名
*/ */
public static final String CONFIG_NAME = "jnotepadConfig.json"; public static final String CONFIG_NAME = "appConfig.json";
private static final AppConfigController INSTANCE = new AppConfigController();
private String configDir;
private AppConfigController() { private final String configDir;
configDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad").toString();
public AppConfigController() {
configDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad", ROOT_CONFIG_DIR).toString();
loadConfig(); loadConfig();
} }
/**
* 获取 AppConfigController 的实例
*
* @return AppConfigController 的实例
*/
public static AppConfigController getInstance() {
return INSTANCE;
}
/** /**
* 获取配置文件Class类 * 获取配置文件Class类
* *
@ -49,15 +42,6 @@ public class AppConfigController extends BaseConfigController<AppConfig> {
return AppConfig.class; return AppConfig.class;
} }
/**
* 生成默认的配置文件
*
* @return 默认的配置文件
*/
@Override
protected AppConfig generateDefaultConfig() {
return AppConfig.generateDefaultAppConfig();
}
/** /**
* 获取配置文件名称 * 获取配置文件名称
@ -79,51 +63,16 @@ public class AppConfigController extends BaseConfigController<AppConfig> {
return configDir; return configDir;
} }
public void setConfigDir(String configDir) {
this.configDir = configDir;
}
/** /**
* 获取自动换行设置默认自动换行 * 创建配置文件实体
* *
* @return true自动换行false不自动换行 * @return 默认的配置文件实体
* @apiNote 返回默认的配置文件实体用于序列化json
*/ */
public boolean getAutoLineConfig() { @Override
return getConfig().isTextWrap(); public AppConfig generateDefaultConfig() {
} AppConfig config = new AppConfig();
config.setRootPath(System.getProperty(DEFAULT_PROPERTY));
public void setAutoLineConfig(boolean isAutoLine) { return config;
getConfig().setTextWrap(isAutoLine);
}
/**
* 更新配置文件中的语言设置
*
* @param language 更新后的语言设置
*/
public void updateLanguage(String language) {
if (getLanguage().equals(language)) {
return;
}
getConfig().setLanguage(language);
writeConfig();
}
/**
* 获取当前的语言设置
*
* @return 语言设置
*/
public String getLanguage() {
return getConfig().getLanguage();
}
/**
* 获取快捷键设置
*
* @return 快捷键设置列表
*/
public List<ShortcutKey> getShortcutKey() {
return getConfig().getShortcutKey();
} }
} }

View File

@ -5,8 +5,7 @@ import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList;
import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY;
/** /**
* 插件控制器 * 插件控制器
@ -24,8 +23,9 @@ public class PluginConfigController extends BaseConfigController<PluginConfig> {
private String pluginsDir; private String pluginsDir;
private PluginConfigController() { private PluginConfigController() {
configDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad").toString(); String rootPath = AppConfigController.getInstance().getConfig().getRootPath();
setPluginsDir(Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad", "plugins").toString()); configDir = Paths.get(rootPath, ".jnotepad", ROOT_CONFIG_DIR).toString();
setPluginsDir(Paths.get(rootPath, ".jnotepad", "plugins").toString());
loadConfig(); loadConfig();
} }
@ -43,15 +43,6 @@ public class PluginConfigController extends BaseConfigController<PluginConfig> {
return PluginConfig.class; return PluginConfig.class;
} }
/**
* 生成默认的配置文件
*
* @return 默认的配置文件
*/
@Override
protected PluginConfig generateDefaultConfig() {
return PluginConfig.generateDefaultPluginConfig();
}
/** /**
* 获取配置文件名称 * 获取配置文件名称
@ -73,6 +64,20 @@ public class PluginConfigController extends BaseConfigController<PluginConfig> {
return configDir; return configDir;
} }
/**
* 创建配置文件实体
*
* @return 默认的配置文件实体
* @apiNote 返回默认的配置文件实体用于序列化json
*/
@Override
public PluginConfig generateDefaultConfig() {
PluginConfig pluginConfig = new PluginConfig();
pluginConfig.setPlugins(new ArrayList<>());
return pluginConfig;
}
public void setConfigDir(String configDir) { public void setConfigDir(String configDir) {
this.configDir = configDir; this.configDir = configDir;
} }

View File

@ -0,0 +1,166 @@
package org.jcnc.jnotepad.controller.config;
import org.jcnc.jnotepad.app.config.UserConfig;
import org.jcnc.jnotepad.model.entity.ShortcutKey;
import org.jcnc.jnotepad.plugin.api.core.controller.config.BaseConfigController;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import static org.jcnc.jnotepad.common.constants.TextConstants.CHINESE;
/**
* 应用程序配置控制器
*
* <p>该类负责管理应用程序的配置文件包括加载持久化和更新配置信息等操作</p>
*
* @author songdragon
*/
public class UserConfigController extends BaseConfigController<UserConfig> {
/**
* 配置文件名
*/
public static final String CONFIG_NAME = "userConfig.json";
private static final String CTRL_N = "ctrl+n";
private static final String CTRL_O = "ctrl+o";
private static final String CTRL_S = "ctrl+s";
private static final String CTRL_ALT_S = "ctrl+alt+s";
private static final String ALT_S = "alt+s";
private static final UserConfigController INSTANCE = new UserConfigController();
private String configDir;
private UserConfigController() {
configDir = Paths.get(AppConfigController.getInstance().getConfig().getRootPath(), ".jnotepad", ROOT_CONFIG_DIR).toString();
loadConfig();
}
/**
* 获取 UserConfigController 的实例
*
* @return UserConfigController 的实例
*/
public static UserConfigController getInstance() {
return INSTANCE;
}
/**
* 创建 ShortcutKey 对象
*
* @param buttonName 按钮名称
* @param shortcutKeyValue 快捷键值
* @return ShortcutKey 对象
*/
private static ShortcutKey createShortcutKey(String buttonName, String shortcutKeyValue) {
ShortcutKey shortcutKey = new ShortcutKey();
shortcutKey.setButtonName(buttonName);
shortcutKey.setShortcutKeyValue(shortcutKeyValue);
return shortcutKey;
}
/**
* 获取配置文件Class类
*
* @return 配置文件Class类
*/
@Override
protected Class<UserConfig> getConfigClass() {
return UserConfig.class;
}
/**
* 获取配置文件名称
*
* @return 配置文件名称
*/
@Override
protected String getConfigName() {
return CONFIG_NAME;
}
/**
* 获取配置文件文件夹路径
*
* @return 配置文件夹路径
*/
@Override
protected String getConfigDir() {
return configDir;
}
public void setConfigDir(String configDir) {
this.configDir = configDir;
}
/**
* 创建配置文件实体
*
* @return 默认的配置文件实体
* @apiNote 返回默认的配置文件实体用于序列化json
*/
@Override
public UserConfig generateDefaultConfig() {
UserConfig config = new UserConfig();
config.setLanguage(CHINESE);
config.setTextWrap(false);
List<ShortcutKey> shortcutKeys = new ArrayList<>();
shortcutKeys.add(createShortcutKey("newItem", CTRL_N));
shortcutKeys.add(createShortcutKey("openItem", CTRL_O));
shortcutKeys.add(createShortcutKey("saveItem", CTRL_S));
shortcutKeys.add(createShortcutKey("saveAsItem", CTRL_ALT_S));
shortcutKeys.add(createShortcutKey("lineFeedItem", ""));
shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S));
shortcutKeys.add(createShortcutKey("pluginManager", ""));
shortcutKeys.add(createShortcutKey("countItem", ""));
shortcutKeys.add(createShortcutKey("aboutItem", ""));
config.setShortcutKey(shortcutKeys);
return config;
}
/**
* 获取自动换行设置默认自动换行
*
* @return true自动换行false不自动换行
*/
public boolean getAutoLineConfig() {
return getConfig().isTextWrap();
}
public void setAutoLineConfig(boolean isAutoLine) {
getConfig().setTextWrap(isAutoLine);
}
/**
* 更新配置文件中的语言设置
*
* @param language 更新后的语言设置
*/
public void updateLanguage(String language) {
if (getLanguage().equals(language)) {
return;
}
getConfig().setLanguage(language);
writeConfig();
}
/**
* 获取当前的语言设置
*
* @return 语言设置
*/
public String getLanguage() {
return getConfig().getLanguage();
}
/**
* 获取快捷键设置
*
* @return 快捷键设置列表
*/
public List<ShortcutKey> getShortcutKey() {
return getConfig().getShortcutKey();
}
}

View File

@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.event.handler.menubar;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.LogUtil;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.UserConfigController;
import java.io.File; import java.io.File;
@ -23,7 +23,7 @@ public class OpenConfig extends OpenFile {
@Override @Override
public void handle(ActionEvent actionEvent) { public void handle(ActionEvent actionEvent) {
// 显示文件选择对话框并获取配置文件 // 显示文件选择对话框并获取配置文件
File file = AppConfigController.getInstance().getConfigPath().toFile(); File file = UserConfigController.getInstance().getConfigPath().toFile();
LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能, {}", file); LogUtil.getLogger(this.getClass()).info("已调用打开配置文件功能, {}", file);
// 创建打开文件的任务并启动线程执行任务 // 创建打开文件的任务并启动线程执行任务
openFile(file); openFile(file);

View File

@ -8,7 +8,7 @@ import org.jcnc.jnotepad.common.constants.TextConstants;
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.LogUtil;
import org.jcnc.jnotepad.common.util.UiUtil; import org.jcnc.jnotepad.common.util.UiUtil;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.UserConfigController;
import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.model.entity.Cache; import org.jcnc.jnotepad.model.entity.Cache;
import org.jcnc.jnotepad.model.enums.CacheExpirationTime; import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
@ -20,7 +20,7 @@ import org.slf4j.Logger;
import java.io.File; import java.io.File;
import static org.jcnc.jnotepad.controller.config.AppConfigController.CONFIG_NAME; import static org.jcnc.jnotepad.controller.config.UserConfigController.CONFIG_NAME;
/** /**
* 保存文件事件处理程序 * 保存文件事件处理程序
@ -59,7 +59,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
// 如果该文件是配置文件则刷新快捷键 // 如果该文件是配置文件则刷新快捷键
if (CONFIG_NAME.equals(selectedTab.getText())) { if (CONFIG_NAME.equals(selectedTab.getText())) {
// 重新加载语言包和快捷键 // 重新加载语言包和快捷键
AppConfigController.getInstance().loadConfig(); UserConfigController.getInstance().loadConfig();
TopMenuBarManager.getInstance().initShortcutKeys(); TopMenuBarManager.getInstance().initShortcutKeys();
LocalizationController.initLocal(); LocalizationController.initLocal();
logger.info("已刷新语言包!"); logger.info("已刷新语言包!");

View File

@ -2,7 +2,7 @@ package org.jcnc.jnotepad.controller.i18n;
import org.jcnc.jnotepad.LunchApp; import org.jcnc.jnotepad.LunchApp;
import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.UserConfigController;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@ -37,10 +37,10 @@ public class LocalizationController {
SUPPORT_LANGUAGES.put(Locale.ENGLISH, ENGLISH); SUPPORT_LANGUAGES.put(Locale.ENGLISH, ENGLISH);
} }
private final AppConfigController appConfigController; private final UserConfigController userConfigController;
private LocalizationController() { private LocalizationController() {
this.appConfigController = AppConfigController.getInstance(); this.userConfigController = UserConfigController.getInstance();
} }
/** /**
@ -87,10 +87,10 @@ public class LocalizationController {
* @return appConfig中的当前语言配置 * @return appConfig中的当前语言配置
*/ */
public String getLanguage() { public String getLanguage() {
return appConfigController.getLanguage(); return userConfigController.getLanguage();
} }
private void setLanguage(String language) { private void setLanguage(String language) {
appConfigController.updateLanguage(language); userConfigController.updateLanguage(language);
} }
} }

View File

@ -40,7 +40,7 @@ public class Controller implements ControllerAble {
@Override @Override
public void openAssociatedFileAndCreateTextArea(List<String> rawParameters) { public void openAssociatedFileAndCreateTextArea(List<String> rawParameters) {
// 获取上次打开的页面 // 获取上次打开的页面
Optional<Object> cacheData = Optional.of(CACHE_MANAGER.getCacheData("tabs", "centerTabs")); Optional<Object> cacheData = Optional.ofNullable(CACHE_MANAGER.getCacheData("tabs", "centerTabs"));
// 判空 // 判空
List<String> fileTab = (List<String>) cacheData.orElse(Collections.emptyList()); List<String> fileTab = (List<String>) cacheData.orElse(Collections.emptyList());
// 打开上次打开的标签页 // 打开上次打开的标签页

View File

@ -3,8 +3,8 @@ package org.jcnc.jnotepad.plugin.api.core.controller.config;
import org.jcnc.jnotepad.common.util.JsonUtil; import org.jcnc.jnotepad.common.util.JsonUtil;
import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.LogUtil;
import org.jcnc.jnotepad.common.util.PopUpUtil; import org.jcnc.jnotepad.common.util.PopUpUtil;
import org.jcnc.jnotepad.controller.interfaces.ConfigController;
import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.exception.AppException;
import org.jcnc.jnotepad.plugin.api.core.controller.interfaces.ConfigController;
import org.slf4j.Logger; import org.slf4j.Logger;
import java.io.BufferedWriter; import java.io.BufferedWriter;
@ -22,6 +22,8 @@ import java.nio.file.Paths;
*/ */
public abstract class BaseConfigController<T> implements ConfigController<T> { public abstract class BaseConfigController<T> implements ConfigController<T> {
public static final String ROOT_CONFIG_DIR = "config";
protected T config; protected T config;
Logger logger = LogUtil.getLogger(this.getClass()); Logger logger = LogUtil.getLogger(this.getClass());
@ -32,13 +34,6 @@ public abstract class BaseConfigController<T> implements ConfigController<T> {
*/ */
protected abstract Class<T> getConfigClass(); protected abstract Class<T> getConfigClass();
/**
* 生成默认的配置文件
*
* @return 默认的配置文件
*/
protected abstract T generateDefaultConfig();
/** /**
* 获取配置文件名称 * 获取配置文件名称
* *
@ -62,9 +57,6 @@ public abstract class BaseConfigController<T> implements ConfigController<T> {
return config; return config;
} }
public void setConfig(T config) {
this.config = config;
}
/** /**
* 加载配置文件内容 * 加载配置文件内容
@ -102,7 +94,7 @@ public abstract class BaseConfigController<T> implements ConfigController<T> {
public void writeConfig(T config) { public void writeConfig(T config) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(getConfigPath().toString()))) { try (BufferedWriter writer = new BufferedWriter(new FileWriter(getConfigPath().toString()))) {
if (config == null) { if (config == null) {
config = createConfigJson(); config = generateDefaultConfig();
} }
writer.write(JsonUtil.toJsonString(config)); writer.write(JsonUtil.toJsonString(config));
} catch (Exception e) { } catch (Exception e) {
@ -127,17 +119,6 @@ public abstract class BaseConfigController<T> implements ConfigController<T> {
writeConfig(null); writeConfig(null);
} }
/**
* 创建配置文件json实体
*
* @return 默认的配置文件实体
* @apiNote 返回默认的配置文件实体用于序列化jso
*/
@Override
public T createConfigJson() {
return generateDefaultConfig();
}
/** /**
* 获取配置文件路径 * 获取配置文件路径
* *

View File

@ -1,4 +1,4 @@
package org.jcnc.jnotepad.controller.interfaces; package org.jcnc.jnotepad.plugin.api.core.controller.interfaces;
import java.nio.file.Path; import java.nio.file.Path;
@ -31,12 +31,12 @@ public interface ConfigController<T> {
void createConfigIfNotExists(); void createConfigIfNotExists();
/** /**
* 创建配置文件json实体 * 创建配置文件实体
* *
* @return 默认的配置文件实体 * @return 默认的配置文件实体
* @apiNote 返回默认的配置文件实体用于序列化jso * @apiNote 返回默认的配置文件实体用于序列化json
*/ */
T createConfigJson(); T generateDefaultConfig();
/** /**
* 获取配置文件路径 * 获取配置文件路径

View File

@ -6,7 +6,7 @@ import javafx.stage.Stage;
import org.jcnc.jnotepad.common.manager.ApplicationCacheManager; import org.jcnc.jnotepad.common.manager.ApplicationCacheManager;
import org.jcnc.jnotepad.common.util.FileUtil; import org.jcnc.jnotepad.common.util.FileUtil;
import org.jcnc.jnotepad.common.util.PopUpUtil; import org.jcnc.jnotepad.common.util.PopUpUtil;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.UserConfigController;
import org.jcnc.jnotepad.model.enums.CacheExpirationTime; import org.jcnc.jnotepad.model.enums.CacheExpirationTime;
import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab; import org.jcnc.jnotepad.views.root.center.main.center.tab.CenterTab;
@ -137,7 +137,7 @@ public class CenterTabPaneManager {
if (selectedTab == null) { if (selectedTab == null) {
return; return;
} }
selectedTab.setAutoLine(AppConfigController.getInstance().getAutoLineConfig()); selectedTab.setAutoLine(UserConfigController.getInstance().getAutoLineConfig());
bottomStatusBoxManager.updateWhenTabSelected(); bottomStatusBoxManager.updateWhenTabSelected();
} }

View File

@ -60,11 +60,9 @@ public class DirectorySidebarManager {
if (Double.compare(roundedNumber, 0.0) != 0) { if (Double.compare(roundedNumber, 0.0) != 0) {
// 收缩分割条 收缩文件树 // 收缩分割条 收缩文件树
center.setDividerPositions(0.0); center.setDividerPositions(0.0);
} else { } else {
// 展开分割条文件树 // 展开分割条文件树
center.setDividerPositions(LAST_DIVIDER_POSITION); center.setDividerPositions(LAST_DIVIDER_POSITION);
} }
} }
@ -82,6 +80,12 @@ public class DirectorySidebarManager {
} }
/**
* 设置文件树项监听事件
*
* @param item 文件树项
* @return 监听事件
*/
private static ChangeListener<Boolean> getTreeItemListener(TreeItem<DirFileModel> item) { private static ChangeListener<Boolean> getTreeItemListener(TreeItem<DirFileModel> item) {
return (observable, oldValue, newValue) -> { return (observable, oldValue, newValue) -> {
if (Boolean.TRUE.equals(newValue)) { if (Boolean.TRUE.equals(newValue)) {

View File

@ -11,7 +11,7 @@ import javafx.stage.Stage;
import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.app.i18n.UiResourceBundle;
import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.LogUtil;
import org.jcnc.jnotepad.common.util.UiUtil; import org.jcnc.jnotepad.common.util.UiUtil;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.UserConfigController;
import org.jcnc.jnotepad.controller.event.handler.menubar.*; import org.jcnc.jnotepad.controller.event.handler.menubar.*;
import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.model.entity.ShortcutKey; import org.jcnc.jnotepad.model.entity.ShortcutKey;
@ -44,7 +44,7 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
private final Map<String, RadioMenuItem> languageMenuItems = new HashMap<>(); private final Map<String, RadioMenuItem> languageMenuItems = new HashMap<>();
Logger logger = LogUtil.getLogger(this.getClass()); Logger logger = LogUtil.getLogger(this.getClass());
AppConfigController appConfigController = AppConfigController.getInstance(); UserConfigController userConfigController = UserConfigController.getInstance();
private TopMenuBarManager() { private TopMenuBarManager() {
@ -66,7 +66,7 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
// 初始化语言菜单 // 初始化语言菜单
initLanguageMenu(); initLanguageMenu();
// 设置当前语言选中状态 // 设置当前语言选中状态
toggleLanguageCheck(appConfigController.getLanguage()); toggleLanguageCheck(userConfigController.getLanguage());
// 初始化设置菜单 // 初始化设置菜单
initSettingMenu(); initSettingMenu();
// 初始化设置菜单 // 初始化设置菜单
@ -101,7 +101,7 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
// 设置菜单 // 设置菜单
registerSetMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> { registerSetMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> {
// 1. 更新全局配置 // 1. 更新全局配置
AppConfigController.getInstance().setAutoLineConfig(after); UserConfigController.getInstance().setAutoLineConfig(after);
// 2. 对当前tab生效配置 // 2. 对当前tab生效配置
CenterTabPaneManager.getInstance().fireTabSelected(); CenterTabPaneManager.getInstance().fireTabSelected();
}); });
@ -273,7 +273,7 @@ public class TopMenuBarManager extends AbstractManager<Menu> {
*/ */
public void initShortcutKeys() { public void initShortcutKeys() {
List<MenuItem> itemsToUnbind = new ArrayList<>(); List<MenuItem> itemsToUnbind = new ArrayList<>();
List<ShortcutKey> shortcutKeyConfigs = appConfigController.getShortcutKey(); List<ShortcutKey> shortcutKeyConfigs = userConfigController.getShortcutKey();
for (ShortcutKey shortcutKey : shortcutKeyConfigs) { for (ShortcutKey shortcutKey : shortcutKeyConfigs) {
// 保证json的key必须和变量名一致 // 保证json的key必须和变量名一致
MenuItem menuItem = topMenuBar.getItemMap().get(shortcutKey.getButtonName()); MenuItem menuItem = topMenuBar.getItemMap().get(shortcutKey.getButtonName());

View File

@ -3,7 +3,7 @@ package org.jcnc.jnotepad.views.root.center.main.center.tab;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import org.fxmisc.flowless.VirtualizedScrollPane; import org.fxmisc.flowless.VirtualizedScrollPane;
import org.jcnc.jnotepad.common.util.LogUtil; import org.jcnc.jnotepad.common.util.LogUtil;
import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.controller.config.UserConfigController;
import org.jcnc.jnotepad.ui.module.LineNumberTextArea; import org.jcnc.jnotepad.ui.module.LineNumberTextArea;
import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager; import org.jcnc.jnotepad.views.manager.BottomStatusBoxManager;
import org.jcnc.jnotepad.views.manager.CenterTabPaneManager; import org.jcnc.jnotepad.views.manager.CenterTabPaneManager;
@ -51,7 +51,7 @@ public class CenterTab extends Tab {
lineNumberTextArea = textArea; lineNumberTextArea = textArea;
initTextAreaListeners(); initTextAreaListeners();
this.setContent(new VirtualizedScrollPane<>(lineNumberTextArea)); this.setContent(new VirtualizedScrollPane<>(lineNumberTextArea));
setAutoLine(AppConfigController.getInstance().getAutoLineConfig()); setAutoLine(UserConfigController.getInstance().getAutoLineConfig());
this.charset = charset; this.charset = charset;
} }

View File

@ -9,9 +9,9 @@
<!-- 文件保留时间 --> <!-- 文件保留时间 -->
<property name="log.maxHistory" value="30"/> <property name="log.maxHistory" value="30"/>
<!-- 日志存储路径 --> <!-- 日志存储路径 -->
<property name="log.filePath" value="logs"/> <!--<property name="log.filePath" value="logs"/>-->
<!--发布时,请使用下方的路径--> <!--发布时,请使用下方的路径-->
<!--<property name="log.filePath" value="${user.home}/.jnotepad/logs"/>--> <property name="log.filePath" value="${user.home}/.jnotepad/logs"/>
<!-- 日志的显式格式 --> <!-- 日志的显式格式 -->
<property name="log.pattern" <property name="log.pattern"
value="时间:[%d{yyyy-MM-dd HH:mm:ss.SSS}] 线程:[%thread] 日志级别:[%-5level] 调用位置:[%logger{50} 参见:[\(%F:%L\)]] - 日志信息:[%msg]%n"> value="时间:[%d{yyyy-MM-dd HH:mm:ss.SSS}] 线程:[%thread] 日志级别:[%-5level] 调用位置:[%logger{50} 参见:[\(%F:%L\)]] - 日志信息:[%msg]%n">

11
tool/jpackage.sh Normal file
View File

@ -0,0 +1,11 @@
#!/bin/bash
cd ..
jpackage \
--name JNotepad \
--type app-image \
-m org.jcnc.jnotepad/org.jcnc.jnotepad.LunchApp \
--runtime-image ./target/JNotepad/ \
--icon src/main/resources/img/icon.ico \
--app-version 1.1.13 \
--vendor "JCNC"