Skip to content

Commit 00b28d3

Browse files
author
Evan Hu
committed
config模块优化
1 parent 3332be6 commit 00b28d3

16 files changed

+717
-711
lines changed

src/main/java/info/xiaomo/gengine/ai/nav/triangle/TrianglePointPath.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.util.Iterator;
66
import java.util.List;
77
import info.xiaomo.gengine.ai.pfa.Connection;
8-
import info.xiaomo.gengine.common.math.*;
98
import info.xiaomo.gengine.math.*;
109

1110
/**

src/main/java/info/xiaomo/gengine/config/AbstractFileConfigDataManager.java

Lines changed: 143 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -20,146 +20,150 @@
2020

2121
/**
2222
* 文件配置管理器
23+
*
2324
* @author YangQiang
2425
*/
2526
public abstract class AbstractFileConfigDataManager extends AbstractConfigDataManager {
26-
protected FileConfigDataManagerConfig config;
27-
28-
public AbstractFileConfigDataManager() {
29-
Class<?> clz = getClass();
30-
this.config = new FileConfigDataManagerConfig(clz);
31-
}
32-
33-
public AbstractFileConfigDataManager(Class<?> configClz) {
34-
this(new FileConfigDataManagerConfig(configClz));
35-
}
36-
37-
public AbstractFileConfigDataManager(FileConfigDataManagerConfig config) {
38-
this.config = config;
39-
}
40-
41-
public AbstractFileConfigDataManager setXmlConfigFile(String file) {
42-
this.config.setXmlConfigFile(file);
43-
return this;
44-
}
45-
46-
public AbstractFileConfigDataManager setConfigPackage(String configPackage) {
47-
this.config.setConfigPackage(configPackage);
48-
return this;
49-
}
50-
51-
public AbstractFileConfigDataManager setConfigFileDir(String configFileDir) {
52-
this.config.setConfigFileDir(configFileDir);
53-
return this;
54-
}
55-
56-
public AbstractFileConfigDataManager setConfigFileSuffix(String configFileSuffix) {
57-
if (configFileSuffix == null) {
58-
configFileSuffix = "";
59-
}
60-
this.config.setConfigFileSuffix(configFileSuffix);
61-
return this;
62-
}
63-
64-
public String getXmlConfigFile() {
65-
return config.getXmlConfigFile();
66-
}
67-
68-
public String getConfigPackage() {
69-
return config.getConfigPackage();
70-
}
71-
72-
public String getConfigFileDir() {
73-
return config.getConfigFileDir();
74-
}
75-
76-
public String getConfigFileSuffix() {
77-
return config.getConfigFileSuffix();
78-
}
79-
80-
@Override
81-
public void init() throws Exception {
82-
parseFileConfig();
83-
}
84-
85-
private void parseFileConfig() throws Exception {
86-
String configFileDir = getConfigFileDir();
87-
Objects.requireNonNull(configFileDir, "configFileDir 不能为空!");
88-
File excelFile = new File(configFileDir);
89-
if (!excelFile.isDirectory()) {
90-
LOGGER.error("配置文件路径错误[%s]", configFileDir);
91-
throw new RuntimeException(String.format("excel文件路径错误[%s]", configFileDir));
92-
}
93-
94-
Map<String, Class> cacheClz = new HashMap<>(10);
95-
Map<String, TableDesc> configTable = new HashMap<>(10);
96-
97-
String configPackage = getConfigPackage();
98-
if (configPackage != null) {
99-
// 获取所有的配置类和缓存类
100-
Set<Class> clzSet = ClassFileUtils.getClasses(configPackage, clz -> clz.isAnnotationPresent(Config.class) || clz.isAnnotationPresent(Cache.class));
101-
for (Class clz : clzSet) {
102-
if (clz.isAnnotationPresent(Config.class)) {
103-
TableDesc tableDesc = ReflectUtils.getTableDesc(clz);
104-
configTable.put(clz.getName(), tableDesc);
105-
} else if (clz.isAnnotationPresent(Cache.class)) {
106-
cacheClz.put(clz.getName(), clz);
107-
}
108-
}
109-
}
110-
111-
String xmlConfigFile = getXmlConfigFile();
112-
if (xmlConfigFile == null) {
113-
URL xmlConfigResource = ExcelConfigDataManager.class.getClassLoader().getResource(DEFAULT_XML_CONFIG_FILE);
114-
if (xmlConfigResource != null) {
115-
xmlConfigFile = xmlConfigResource.getFile();
116-
}
117-
}
118-
119-
if (xmlConfigFile != null) {
120-
Map<String, TableDesc> xmlConfigs = DataConfigXmlParser.parseConfigs(xmlConfigFile);
121-
configTable.putAll(xmlConfigs);
122-
123-
Map<String, Class> xmlCaches = DataConfigXmlParser.parseCaches(xmlConfigFile);
124-
cacheClz.putAll(xmlCaches);
125-
}
126-
127-
Map<String, IConfigWrapper> tempConfigs = new HashMap<>(10);
128-
configTable.forEach((clzName, tableDesc) -> {
129-
IConfigWrapper wrapper = parseTableDesc(tableDesc);
130-
wrapper.getList().forEach(e -> {
131-
if (IConfig.class.isAssignableFrom(e.getClass())) {
132-
IConfig config = (IConfig) e;
133-
config.afterLoad();
134-
}
135-
});
136-
tempConfigs.put(clzName, wrapper);
137-
});
138-
139-
Map<String, Object> tempCaches = new HashMap<>(10);
140-
cacheClz.forEach((clzName, clz) -> {
141-
try {
142-
Object obj = clz.newInstance();
143-
if (IConfigCache.class.isAssignableFrom(clz)) {
144-
IConfigCache cache = (IConfigCache) obj;
145-
cache.build();
146-
}
147-
LOGGER.info("加载缓存【{}】...", clz.getName());
148-
tempCaches.put(clzName, obj);
149-
} catch (Exception e) {
150-
throw new RuntimeException(String.format("创建对象【%s】错误", clz.getName()), e);
151-
}
152-
});
153-
154-
configs = tempConfigs;
155-
caches = tempCaches;
156-
}
157-
158-
/**
159-
* 转换table
160-
*
161-
* @param tableDesc tableDesc
162-
* @return IConfigWrapper
163-
*/
164-
public abstract IConfigWrapper parseTableDesc(TableDesc tableDesc);
27+
protected FileConfigDataManagerConfig config;
28+
29+
public AbstractFileConfigDataManager() {
30+
Class<?> clz = getClass();
31+
this.config = new FileConfigDataManagerConfig(clz);
32+
}
33+
34+
public AbstractFileConfigDataManager(Class<?> configClz) {
35+
this(new FileConfigDataManagerConfig(configClz));
36+
}
37+
38+
public AbstractFileConfigDataManager(FileConfigDataManagerConfig config) {
39+
this.config = config;
40+
}
41+
42+
public AbstractFileConfigDataManager setXmlConfigFile(String file) {
43+
this.config.setXmlConfigFile(file);
44+
return this;
45+
}
46+
47+
public AbstractFileConfigDataManager setConfigPackage(String configPackage) {
48+
this.config.setConfigPackage(configPackage);
49+
return this;
50+
}
51+
52+
public AbstractFileConfigDataManager setConfigFileDir(String configFileDir) {
53+
this.config.setConfigFileDir(configFileDir);
54+
return this;
55+
}
56+
57+
public AbstractFileConfigDataManager setConfigFileSuffix(String configFileSuffix) {
58+
if (configFileSuffix == null) {
59+
configFileSuffix = "";
60+
}
61+
this.config.setConfigFileSuffix(ConfigSuffix.parse(configFileSuffix));
62+
return this;
63+
}
64+
65+
public String getXmlConfigFile() {
66+
return config.getXmlConfigFile();
67+
}
68+
69+
public String getConfigPackage() {
70+
return config.getConfigPackage();
71+
}
72+
73+
public String getConfigFileDir() {
74+
if (config.getConfigFileDir().isEmpty()) {
75+
return Objects.requireNonNull(AbstractConfigDataManager.class.getClassLoader().getResource("")).getPath();
76+
}
77+
return config.getConfigFileDir();
78+
}
79+
80+
public String getConfigFileSuffix() {
81+
return config.getConfigFileSuffix().getSuffix();
82+
}
83+
84+
@Override
85+
public void init() throws Exception {
86+
parseFileConfig();
87+
}
88+
89+
private void parseFileConfig() throws Exception {
90+
String configFileDir = getConfigFileDir();
91+
Objects.requireNonNull(configFileDir, "configFileDir 不能为空!");
92+
File excelFile = new File(configFileDir);
93+
if (!excelFile.isDirectory()) {
94+
LOGGER.error("配置文件路径错误[{}]", configFileDir);
95+
throw new RuntimeException(String.format("excel文件路径错误[%s]", configFileDir));
96+
}
97+
98+
Map<String, Class<IConfig>> cacheClz = new HashMap<>(10);
99+
Map<String, TableDesc<IConfig>> configTable = new HashMap<>(10);
100+
101+
String configPackage = getConfigPackage();
102+
if (configPackage != null) {
103+
// 获取所有的配置类和缓存类
104+
Set<Class<IConfig>> clzSet = ClassFileUtils.getClasses(configPackage, clz -> clz.isAnnotationPresent(Config.class) || clz.isAnnotationPresent(Cache.class));
105+
for (Class<IConfig> clz : clzSet) {
106+
if (clz.isAnnotationPresent(Config.class)) {
107+
TableDesc<IConfig> tableDesc = ReflectUtils.getTableDesc(clz);
108+
configTable.put(clz.getName(), tableDesc);
109+
} else if (clz.isAnnotationPresent(Cache.class)) {
110+
cacheClz.put(clz.getName(), clz);
111+
}
112+
}
113+
}
114+
115+
String xmlConfigFile = getXmlConfigFile();
116+
if (xmlConfigFile == null) {
117+
URL xmlConfigResource = ExcelConfigDataManager.class.getClassLoader().getResource(DEFAULT_XML_CONFIG_FILE);
118+
if (xmlConfigResource != null) {
119+
xmlConfigFile = xmlConfigResource.getFile();
120+
}
121+
}
122+
123+
if (xmlConfigFile != null) {
124+
Map<String, TableDesc<IConfig>> xmlConfigs = DataConfigXmlParser.parseConfigs(xmlConfigFile);
125+
configTable.putAll(xmlConfigs);
126+
127+
Map<String, Class<IConfig>> xmlCaches = DataConfigXmlParser.parseCaches(xmlConfigFile);
128+
cacheClz.putAll(xmlCaches);
129+
}
130+
131+
Map<String, IConfigWrapper> tempConfigs = new HashMap<>(10);
132+
configTable.forEach((clzName, tableDesc) -> {
133+
IConfigWrapper wrapper = parseTableDesc(tableDesc);
134+
wrapper.getList().forEach(e -> {
135+
if (IConfig.class.isAssignableFrom(e.getClass())) {
136+
IConfig config = (IConfig) e;
137+
config.afterLoad();
138+
}
139+
});
140+
tempConfigs.put(clzName, wrapper);
141+
});
142+
143+
Map<String, Object> tempCaches = new HashMap<>(10);
144+
cacheClz.forEach((clzName, clz) -> {
145+
try {
146+
Object obj = clz.newInstance();
147+
if (IConfigCache.class.isAssignableFrom(clz)) {
148+
IConfigCache cache = (IConfigCache) obj;
149+
cache.build();
150+
}
151+
LOGGER.info("加载缓存【{}】...", clz.getName());
152+
tempCaches.put(clzName, obj);
153+
} catch (Exception e) {
154+
throw new RuntimeException(String.format("创建对象【%s】错误", clz.getName()), e);
155+
}
156+
});
157+
158+
configs = tempConfigs;
159+
caches = tempCaches;
160+
}
161+
162+
/**
163+
* 转换table
164+
*
165+
* @param tableDesc tableDesc
166+
* @return IConfigWrapper
167+
*/
168+
public abstract IConfigWrapper parseTableDesc(TableDesc<IConfig> tableDesc);
165169
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package info.xiaomo.gengine.config;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
@AllArgsConstructor
7+
@Getter
8+
public enum ConfigSuffix {
9+
10+
excel("xlsx"),
11+
csv("csv"),
12+
json("json"),
13+
;
14+
15+
private final String suffix;
16+
17+
18+
public static ConfigSuffix parse(String configFileSuffix) {
19+
for (ConfigSuffix value : values()) {
20+
if (value.getSuffix().equals(configFileSuffix)) {
21+
return value;
22+
}
23+
}
24+
return ConfigSuffix.excel;
25+
26+
}
27+
}

0 commit comments

Comments
 (0)