🚩 编写项目缓存逻辑
This commit is contained in:
parent
c385b9429f
commit
b02ab2ac99
@ -30,9 +30,9 @@ public class AppConfig {
|
|||||||
* @return 默认应用配置对象
|
* @return 默认应用配置对象
|
||||||
*/
|
*/
|
||||||
public static AppConfig generateDefaultAppConfig() {
|
public static AppConfig generateDefaultAppConfig() {
|
||||||
AppConfig myData = new AppConfig();
|
AppConfig config = new AppConfig();
|
||||||
myData.setLanguage(CHINESE);
|
config.setLanguage(CHINESE);
|
||||||
myData.setTextWrap(false);
|
config.setTextWrap(false);
|
||||||
|
|
||||||
List<ShortcutKey> shortcutKeys = new ArrayList<>();
|
List<ShortcutKey> shortcutKeys = new ArrayList<>();
|
||||||
shortcutKeys.add(createShortcutKey("newItem", CTRL_N));
|
shortcutKeys.add(createShortcutKey("newItem", CTRL_N));
|
||||||
@ -43,8 +43,8 @@ public class AppConfig {
|
|||||||
shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S));
|
shortcutKeys.add(createShortcutKey("openConfigItem", ALT_S));
|
||||||
shortcutKeys.add(createShortcutKey("pluginManager", ""));
|
shortcutKeys.add(createShortcutKey("pluginManager", ""));
|
||||||
shortcutKeys.add(createShortcutKey("countItem", ""));
|
shortcutKeys.add(createShortcutKey("countItem", ""));
|
||||||
myData.setShortcutKey(shortcutKeys);
|
config.setShortcutKey(shortcutKeys);
|
||||||
return myData;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -49,13 +49,13 @@ public class ApplicationManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化程序
|
* 初始化程序(Initializes the application)
|
||||||
*
|
*
|
||||||
* @apiNote
|
* @apiNote
|
||||||
* @since 2023/9/20 17:26
|
* @since 2023/9/20 17:26
|
||||||
*/
|
*/
|
||||||
public void initializeApp() {
|
public void initializeApp() {
|
||||||
// 设置应用程序主题
|
// 设置应用程序主题 SetTheApplicationTheme
|
||||||
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
|
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
|
||||||
// 初始化scene
|
// 初始化scene
|
||||||
initScene();
|
initScene();
|
||||||
|
|||||||
@ -0,0 +1,86 @@
|
|||||||
|
package org.jcnc.jnotepad.common.manager;
|
||||||
|
|
||||||
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 抽象缓存管理类
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public abstract class AbstractCacheManager {
|
||||||
|
/**
|
||||||
|
* 缓存集合
|
||||||
|
*/
|
||||||
|
protected Map<String, Cache<?>> caches;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取全局命名空间
|
||||||
|
*
|
||||||
|
* @return 全局命名空间
|
||||||
|
*/
|
||||||
|
public abstract String getGlobalNamespace();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取缓存集合
|
||||||
|
*
|
||||||
|
* @return 缓存集合
|
||||||
|
*/
|
||||||
|
|
||||||
|
public abstract Map<String, Cache<?>> getCaches();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置缓存集合
|
||||||
|
*
|
||||||
|
* @param caches 缓存集合
|
||||||
|
*/
|
||||||
|
public abstract void setCaches(Map<String, Cache<?>> caches);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加缓存
|
||||||
|
*
|
||||||
|
* @param cache 缓存
|
||||||
|
*/
|
||||||
|
public void addCache(Cache<?> cache) {
|
||||||
|
String cacheKey = cache.getCacheKey();
|
||||||
|
// 如果集合中已存在该缓存,则更新读写时间
|
||||||
|
if (caches.containsKey(cacheKey)) {
|
||||||
|
cache.setLastReadOrWriteTime(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
caches.put(cacheKey, cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取缓存类
|
||||||
|
*
|
||||||
|
* @param cacheKey 缓存key
|
||||||
|
* @return 缓存类
|
||||||
|
*/
|
||||||
|
public Cache<?> getCache(String cacheKey) {
|
||||||
|
if (caches.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (caches.containsKey(cacheKey)) {
|
||||||
|
Cache<?> cache = caches.get(cacheKey);
|
||||||
|
cache.setLastReadOrWriteTime(System.currentTimeMillis());
|
||||||
|
return cache;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取缓存数据
|
||||||
|
*
|
||||||
|
* @param cacheKey 缓存key
|
||||||
|
* @return 缓存类
|
||||||
|
*/
|
||||||
|
public Object getCacheData(String cacheKey) {
|
||||||
|
Cache<?> cache = getCache(cacheKey);
|
||||||
|
if (cache == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return cache.getCacheData();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
package org.jcnc.jnotepad.common.manager;
|
||||||
|
|
||||||
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应用程序缓存管理类
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class ApplicationCacheManager extends AbstractCacheManager {
|
||||||
|
|
||||||
|
private static final ApplicationCacheManager INSTANCE = new ApplicationCacheManager();
|
||||||
|
|
||||||
|
private ApplicationCacheManager() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ApplicationCacheManager getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Cache<?>> getCaches() {
|
||||||
|
return caches;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCaches(Map<String, Cache<?>> caches) {
|
||||||
|
this.caches = caches;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGlobalNamespace() {
|
||||||
|
return "jcnc";
|
||||||
|
}
|
||||||
|
}
|
||||||
74
src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java
vendored
Normal file
74
src/main/java/org/jcnc/jnotepad/controller/cache/CacheController.java
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
package org.jcnc.jnotepad.controller.cache;
|
||||||
|
|
||||||
|
import org.jcnc.jnotepad.exception.AppException;
|
||||||
|
import org.jcnc.jnotepad.model.entity.Cache;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jcnc.jnotepad.common.constants.AppConstants.DEFAULT_PROPERTY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存控制器
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class CacheController {
|
||||||
|
|
||||||
|
private static final CacheController INSTANCE = new CacheController();
|
||||||
|
|
||||||
|
private String cacheDir;
|
||||||
|
|
||||||
|
private CacheController() {
|
||||||
|
cacheDir = Paths.get(System.getProperty(DEFAULT_PROPERTY), ".jnotepad", "caches").toString();
|
||||||
|
loadCaches();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CacheController getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadCaches() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeCaches(Map<String, Cache<?>> caches) {
|
||||||
|
File cacheFileDir = new File(cacheDir);
|
||||||
|
if (!cacheFileDir.exists()) {
|
||||||
|
cacheFileDir.mkdirs();
|
||||||
|
}
|
||||||
|
// 生成缓存
|
||||||
|
caches.forEach((key, value) -> {
|
||||||
|
// 判断当前命名空间对应目录是否创建
|
||||||
|
File namespaceDir = new File(cacheFileDir, value.getNamespace());
|
||||||
|
if (!namespaceDir.exists()) {
|
||||||
|
namespaceDir.mkdirs();
|
||||||
|
}
|
||||||
|
// 判断当前组文件是否创建
|
||||||
|
File groupFile = new File(namespaceDir, value.getGroup());
|
||||||
|
if (!groupFile.exists()) {
|
||||||
|
try {
|
||||||
|
boolean flag = groupFile.createNewFile();
|
||||||
|
if (!flag) {
|
||||||
|
throw new AppException("创建文件失败");
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new AppException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 如果缓存
|
||||||
|
*/
|
||||||
|
private void createCachesIfNotExists() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
109
src/main/java/org/jcnc/jnotepad/model/entity/Cache.java
Normal file
109
src/main/java/org/jcnc/jnotepad/model/entity/Cache.java
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
package org.jcnc.jnotepad.model.entity;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存类
|
||||||
|
*
|
||||||
|
* @author gewuyou
|
||||||
|
*/
|
||||||
|
public class Cache<T> {
|
||||||
|
/**
|
||||||
|
* 命名空间
|
||||||
|
*/
|
||||||
|
@JsonIgnore
|
||||||
|
private String namespace;
|
||||||
|
/**
|
||||||
|
* 组
|
||||||
|
*/
|
||||||
|
@JsonIgnore
|
||||||
|
private String group;
|
||||||
|
/**
|
||||||
|
* 缓存名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 缓存数据
|
||||||
|
*/
|
||||||
|
private T cacheData;
|
||||||
|
/**
|
||||||
|
* 过期时间<br/>如果过期时间为负数则永不过期
|
||||||
|
*/
|
||||||
|
private Long expirationTime;
|
||||||
|
/**
|
||||||
|
* 上次读或写时间
|
||||||
|
*/
|
||||||
|
private Long lastReadOrWriteTime;
|
||||||
|
|
||||||
|
public Cache() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Cache(String namespace, String group, String name, T cacheData, Long expirationTime) {
|
||||||
|
this.namespace = namespace;
|
||||||
|
this.group = group;
|
||||||
|
this.name = name;
|
||||||
|
this.cacheData = cacheData;
|
||||||
|
this.expirationTime = expirationTime;
|
||||||
|
this.lastReadOrWriteTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据缓存key
|
||||||
|
*
|
||||||
|
* @return key
|
||||||
|
*/
|
||||||
|
public String getCacheKey() {
|
||||||
|
return this.getNamespace() + "." + this.getGroup() + "." + this.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNamespace() {
|
||||||
|
return namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNamespace(String namespace) {
|
||||||
|
this.namespace = namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup() {
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup(String group) {
|
||||||
|
this.group = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getCacheData() {
|
||||||
|
return cacheData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCacheData(T cacheData) {
|
||||||
|
this.cacheData = cacheData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getExpirationTime() {
|
||||||
|
return expirationTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpirationTime(Long expirationTime) {
|
||||||
|
this.expirationTime = expirationTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getLastReadOrWriteTime() {
|
||||||
|
return lastReadOrWriteTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastReadOrWriteTime(Long lastReadOrWriteTime) {
|
||||||
|
this.lastReadOrWriteTime = lastReadOrWriteTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -218,7 +218,10 @@ public class PluginManagementPane extends BorderPane {
|
|||||||
// 创建一个按钮
|
// 创建一个按钮
|
||||||
var toggleSwitch = new ToggleSwitch();
|
var toggleSwitch = new ToggleSwitch();
|
||||||
// 创建一个图标
|
// 创建一个图标
|
||||||
ImageView icon = new ImageView(new Image(pluginDescriptor.getIcon() == null ? "plug.png" : pluginDescriptor.getIcon()));
|
ImageView icon = new ImageView(
|
||||||
|
new Image(
|
||||||
|
pluginDescriptor.getIcon() == null ||
|
||||||
|
pluginDescriptor.getIcon().isEmpty() ? "plug.png" : pluginDescriptor.getIcon()));
|
||||||
// 指定要缩放的固定像素大小
|
// 指定要缩放的固定像素大小
|
||||||
double iconSize = ICON_SIZE;
|
double iconSize = ICON_SIZE;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user