json 로드 방식 list name 제거

게임모드 로드
게임 FFA 데이터 로드
This commit is contained in:
2025-06-19 18:55:15 +09:00
parent 4de51b663d
commit ccfa1d3afa
3 changed files with 131 additions and 30 deletions

View File

@@ -30,7 +30,7 @@ public class JsonFileReader {
this.objectMapper = new ObjectMapper();
}
public List<Map<String, Object>> readJsonFile(String metaName, String listName) {
public List<Map<String, Object>> readJsonFile(String metaName) {
List<Map<String, Object>> resultMap = new ArrayList<>();
try {
@@ -55,7 +55,7 @@ public class JsonFileReader {
for (File jsonFile : jsonFiles) {
log.info("Processing JSON file: {}", jsonFile.getPath());
List<Map<String, Object>> fileResult = parseJsonFile(jsonFile, listName);
List<Map<String, Object>> fileResult = parseJsonFile(jsonFile);
if (fileResult != null) {
resultMap.addAll(fileResult);
}
@@ -72,7 +72,7 @@ public class JsonFileReader {
return null;
}
return parseJsonFile(metaFile, listName);
return parseJsonFile(metaFile);
}
} catch (IOException e) {
@@ -83,26 +83,30 @@ public class JsonFileReader {
return resultMap;
}
private List<Map<String, Object>> parseJsonFile(File file, String listName) {
private List<Map<String, Object>> parseJsonFile(File file) {
try {
log.debug("Parsing JSON file: {}", file.getPath());
String fileContent = readFileAsString(file);
JsonNode rootNode = objectMapper.readTree(fileContent);
JsonNode listNode = rootNode.get(listName);
// JsonNode listNode = rootNode.get(listName);
if (listNode == null) {
log.warn("List name '{}' not found in file: {}", listName, file.getPath());
if (!rootNode.isEmpty()) {
String firstFieldName = rootNode.fieldNames().next();
JsonNode firstNode = rootNode.get(firstFieldName);
List<Map<String, Object>> resultList = objectMapper.readValue(
firstNode.toString(),
new TypeReference<>() {}
);
log.debug("Successfully parsed JSON file: {}, first field: {}, items count: {}",
file.getName(), firstFieldName, resultList.size());
return resultList;
} else {
log.warn("No fields found in JSON file: {}", file.getPath());
return null;
}
List<Map<String, Object>> resultMap = objectMapper.readValue(
listNode.toString(),
new TypeReference<>() {}
);
log.debug("Successfully parsed JSON file: {}, items count: {}", file.getName(), resultMap.size());
return resultMap;
} catch (JsonProcessingException e) {
log.error("Failed to parse JSON from file: {}", file.getName(), e);
throw new MetaDataException("Failed to parse JSON from file: " + file.getName(), e);

View File

@@ -6,7 +6,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import com.caliverse.admin.domain.entity.metadata.*;
import com.caliverse.admin.global.common.constants.MetadataConstants;
import com.caliverse.admin.global.common.exception.MetaDataException;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
@@ -27,12 +26,15 @@ public class MetaDataFileLoader {
private final Map<MetaQuestKey, MetaQuestData> quests;
private final Map<Integer, MetaBuildingData> buildings;
private final Map<Integer, MetaLandData> lands;
private final Map<Integer, MetaGameModeData> gameModes;
private final Map<Integer, MetaGameFFAConfigData> gameFFAConfigs;
private final Map<Integer, MetaBattleConfigData> battleConfigs;
private final Map<Integer, MetaBattleRewardData> battleRewards;
private final Map<String, MetaSystemMailData> systemMails;
public MetaDataFileLoader(JsonFileReader jsonFileReader) {
this.jsonFileReader = jsonFileReader;
this.gameModes = new ConcurrentHashMap<>();
this.items = new ConcurrentHashMap<>();
this.textStrings = new ConcurrentHashMap<>();
this.clothTypes = new ConcurrentHashMap<>();
@@ -44,6 +46,7 @@ public class MetaDataFileLoader {
this.battleConfigs = new ConcurrentHashMap<>();
this.battleRewards = new ConcurrentHashMap<>();
this.systemMails = new ConcurrentHashMap<>();
this.gameFFAConfigs = new ConcurrentHashMap<>();
}
@PostConstruct
@@ -75,6 +78,8 @@ public class MetaDataFileLoader {
loadBattleConfig();
loadBattleReward();
loadSystemMail();
loadGameMode();
loadGameModeFFAConfig();
}catch(MetaDataException e){
log.error("Failed to initialize metadata", e);
throw e;
@@ -144,9 +149,19 @@ public class MetaDataFileLoader {
return new ArrayList<>(lands.values());
}
public List<MetaGameModeData> getMetaGameModes() {
return new ArrayList<>(gameModes.values());
}
public List<MetaGameFFAConfigData> getMetaGameFFAConfigs() {
return new ArrayList<>(gameFFAConfigs.values());
}
// 추후 없어질것
public List<MetaBattleConfigData> getMetaBattleConfigs() {
return new ArrayList<>(battleConfigs.values());
}
// 추후 없어질것
public List<MetaBattleRewardData> getMetaBattleRewards() {
return battleRewards.values().stream()
.collect(Collectors.groupingBy(MetaBattleRewardData::getGroupID)) // groupId로 그룹화
@@ -155,6 +170,7 @@ public class MetaDataFileLoader {
.sorted(Comparator.comparing(MetaBattleRewardData::getGroupID)) // groupId 기준으로 정렬
.collect(Collectors.toList());
}
public List<MetaSystemMailData> getMetaSystemMail() {
return new ArrayList<>(systemMails.values());
}
@@ -169,10 +185,7 @@ public class MetaDataFileLoader {
// 문자 데이터 로드
private void loadTextStrings() {
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(
EMetaData.TEXT_STRING_DATA.getFileName(),
MetadataConstants.JSON_LIST_TEXT_STRING
);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.TEXT_STRING_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("textStrings data is empty or file not found: {}", EMetaData.TOOL_DATA.getFileName());
return;
@@ -192,7 +205,7 @@ public class MetaDataFileLoader {
// 아이템 정보 데이터 로드
public void loadItems(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.ITEM_DATA.getFileName(), MetadataConstants.JSON_LIST_ITEM);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.ITEM_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("item data is empty or file not found: {}", EMetaData.TOOL_DATA.getFileName());
return;
@@ -213,7 +226,7 @@ public class MetaDataFileLoader {
// 의상 타입 데이터 로드
public void loadClothType(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.CLOTH_TYPE_DATA.getFileName(), MetadataConstants.JSON_LIST_CLOTH_TYPE);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.CLOTH_TYPE_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("clothType data is empty or file not found: {}", EMetaData.TOOL_DATA.getFileName());
return;
@@ -232,7 +245,7 @@ public class MetaDataFileLoader {
// 도구 정보 데이터 로드
public void loadToolItems(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.TOOL_DATA.getFileName(), MetadataConstants.JSON_LIST_TOOL);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.TOOL_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("tool data is empty or file not found: {}", EMetaData.TOOL_DATA.getFileName());
return;
@@ -250,7 +263,7 @@ public class MetaDataFileLoader {
// 금지어 데이터 로드
public void loadBanWord(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BAN_WORD_DATA.getFileName(), MetadataConstants.JSON_LIST_BAN_WORD);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BAN_WORD_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("ban data is empty or file not found: {}", EMetaData.BAN_WORD_DATA.getFileName());
return;
@@ -265,7 +278,7 @@ public class MetaDataFileLoader {
// 퀘스트 데이터 로드
public void loadQuests(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.QUEST_DATA.getFileName(), MetadataConstants.JSON_LIST_QUEST);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.QUEST_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("quest data is empty or file not found: {}", EMetaData.QUEST_DATA.getFileName());
return;
@@ -287,7 +300,7 @@ public class MetaDataFileLoader {
// 빌딩 데이터 로드
public void loadBuilding(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BUILDING_DATA.getFileName(), MetadataConstants.JSON_LIST_BUILDING);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BUILDING_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("building data is empty or file not found: {}", EMetaData.BUILDING_DATA.getFileName());
return;
@@ -313,7 +326,7 @@ public class MetaDataFileLoader {
// 랜드 데이터 로드
public void loadLand(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.LAND_DATA.getFileName(), MetadataConstants.JSON_LIST_LAND);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.LAND_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("land data is empty or file not found: {}", EMetaData.LAND_DATA.getFileName());
return;
@@ -346,9 +359,85 @@ public class MetaDataFileLoader {
log.info("loadLand {} Load Complete", EMetaData.LAND_DATA.getFileName());
}
// 게임 모드 데이터 로드
public void loadGameMode(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.GAME_MODE_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("Game Mode data is empty or file not found: {}", EMetaData.GAME_MODE_DATA.getFileName());
return;
}
metaList.forEach(meta -> {
MetaGameModeData item = new MetaGameModeData();
item.setId((Integer)meta.get("GameModeID"));
item.setDesc((String)meta.get("GameModeDescription"));
item.setGenreType((String)meta.get("GameGenreType"));
item.setModeType((String)meta.get("GameModeType"));
item.setModeConfigId((Integer)meta.get("GameModeConfigID"));
item.setModeCommonId((Integer)meta.get("GameModeCommonID"));
item.setInstanceId((Integer)meta.get("InstanceID"));
item.setModeMatchId((Integer)meta.get("GameModeMatchID"));
item.setModeRewardGroupId((Integer)meta.get("GameModeRewardGroupID"));
item.setModeOptionId((Integer)meta.get("GameModeOptionID"));
item.setModeStartId((Integer)meta.get("GameModeStartID"));
item.setModeTeamId((Integer)meta.get("GameModeTeamID"));
gameModes.put((Integer)meta.get("GameModeID"), item);
});
log.info("loadGameMode {} Load Complete", EMetaData.GAME_MODE_DATA.getFileName());
}
// 게임 TPS_FFA 설정 데이터 로드
public void loadGameModeFFAConfig(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.GAME_MODE_FFA_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("gameMode TPS FFA data is empty or file not found: {}", EMetaData.GAME_MODE_FFA_DATA.getFileName());
return;
}
metaList.forEach(meta -> {
MetaGameFFAConfigData item = new MetaGameFFAConfigData();
item.setId((Integer)meta.get("GameModeTpsFfaID"));
item.setDesc((String)meta.get("GameModeTpsFfaDescription"));
item.setPlayerRespawnTime((Integer)meta.get("PlayerRespawnTime"));
item.setDefaultRoundCount((Integer)meta.get("DefaultRoundCount"));
item.setRoundTime((Integer)meta.get("RoundTime"));
item.setNextRoundWaitTime((Integer)meta.get("NextRoundWaitTime"));
item.setResultUIWaitTime((Integer)meta.get("ResultUIWaitTime"));
item.setGetRewardTime((Integer)meta.get("GetRewardTime"));
gameFFAConfigs.put((Integer)meta.get("GameModeTpsFfaID"), item);
});
log.info("loadGameModeFFAConfig {} Load Complete", EMetaData.GAME_MODE_FFA_DATA.getFileName());
}
// 게임 TPS_TDM 설정 데이터 로드
public void loadGameModeTDMConfig(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.GAME_MODE_TDM_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("Battle config data is empty or file not found: {}", EMetaData.GAME_MODE_TDM_DATA.getFileName());
return;
}
metaList.forEach(meta -> {
MetaBattleConfigData item = new MetaBattleConfigData();
item.setId((Integer)meta.get("Id"));
item.setDesc((String)meta.get("Description"));
item.setPlayerRespawnTime((Integer)meta.get("PlayerRespawnTime"));
item.setDefaultRoundCount((Integer)meta.get("DefaultRoundCount"));
item.setRoundTime((Integer)meta.get("RoundTime"));
item.setNextRoundWaitTime((Integer)meta.get("NextRoundWaitTime"));
item.setResultUIWaitTime((Integer)meta.get("ResultUIWaitTime"));
item.setGetRewardTime((Integer)meta.get("GetRewardTime"));
battleConfigs.put((Integer)meta.get("Id"), item);
});
log.info("loadBattleConfig {} Load Complete", EMetaData.GAME_MODE_TDM_DATA.getFileName());
}
// 전투 설정 데이터 로드
public void loadBattleConfig(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BATTLE_CONFIG_DATA.getFileName(), MetadataConstants.JSON_LIST_BATTLE_CONFIG);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BATTLE_CONFIG_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("Battle config data is empty or file not found: {}", EMetaData.BATTLE_CONFIG_DATA.getFileName());
return;
@@ -372,7 +461,7 @@ public class MetaDataFileLoader {
// 전투 보상 데이터 로드
public void loadBattleReward(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BATTLE_REWARD_DATA.getFileName(), MetadataConstants.JSON_LIST_BATTLE_REWARD);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.BATTLE_REWARD_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("Battle reward data is empty or file not found: {}", EMetaData.BATTLE_REWARD_DATA.getFileName());
return;
@@ -395,7 +484,7 @@ public class MetaDataFileLoader {
// 시스템메일 데이터 로드
public void loadSystemMail(){
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.SYSTEM_MAIL_DATA.getFileName(), MetadataConstants.JSON_LIST_SYSTEM_META);
List<Map<String, Object>> metaList = jsonFileReader.readJsonFile(EMetaData.SYSTEM_MAIL_DATA.getFileName());
if(metaList == null || metaList.isEmpty()) {
log.warn("System Mail data is empty or file not found: {}", EMetaData.SYSTEM_MAIL_DATA.getFileName());
return;

View File

@@ -79,6 +79,14 @@ public class MetaDataHandler {
return metadataFileLoader.getMetaBattleRewards();
}
public List<MetaGameModeData> getMetaGameModeListData() {
return metadataFileLoader.getMetaGameModes();
}
public List<MetaGameFFAConfigData> getMetaGameFFAConfigListData() {
return metadataFileLoader.getMetaGameFFAConfigs();
}
public List<MetaSystemMailData> getMetaSystemMailListData() {
return metadataFileLoader.getMetaSystemMail();
}