Files
svn-manager/backend/src/main/java/com/svnmanager/util/ConfigUtil.java
2026-02-09 17:22:26 +08:00

163 lines
4.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.svnmanager.util;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.svnmanager.model.Project;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* 配置管理工具类
*/
public class ConfigUtil {
private static final Logger logger = LoggerFactory.getLogger(ConfigUtil.class);
private static final String CONFIG_DIR = System.getProperty("user.home") + File.separator + ".svn-manager";
private static final String PROJECTS_FILE = CONFIG_DIR + File.separator + "projects.json";
private static final ObjectMapper objectMapper = new ObjectMapper();
static {
// 确保配置目录存在
try {
Path configPath = Paths.get(CONFIG_DIR);
if (!Files.exists(configPath)) {
Files.createDirectories(configPath);
}
} catch (IOException e) {
logger.error("创建配置目录失败", e);
}
}
/**
* 加载项目列表
*
* @return 项目列表
*/
public static List<Project> loadProjects() {
File file = new File(PROJECTS_FILE);
if (!file.exists()) {
logger.info("项目配置文件不存在,返回空列表");
return new ArrayList<>();
}
try {
CollectionType listType = objectMapper.getTypeFactory()
.constructCollectionType(List.class, Project.class);
List<Project> projects = objectMapper.readValue(file, listType);
logger.info("成功加载 {} 个项目", projects.size());
return projects;
} catch (IOException e) {
logger.error("加载项目配置失败", e);
return new ArrayList<>();
}
}
/**
* 保存项目列表
*
* @param projects 项目列表
* @return 是否保存成功
*/
public static boolean saveProjects(List<Project> projects) {
File file = new File(PROJECTS_FILE);
try {
objectMapper.writerWithDefaultPrettyPrinter().writeValue(file, projects);
logger.info("成功保存 {} 个项目", projects.size());
return true;
} catch (IOException e) {
logger.error("保存项目配置失败", e);
return false;
}
}
/**
* 添加项目
*
* @param project 项目
* @return 是否添加成功
*/
public static boolean addProject(Project project) {
if (project.getId() == null || project.getId().isEmpty()) {
project.setId(UUID.randomUUID().toString());
}
List<Project> projects = loadProjects();
projects.add(project);
return saveProjects(projects);
}
/**
* 更新项目
*
* @param project 项目
* @return 是否更新成功
*/
public static boolean updateProject(Project project) {
List<Project> projects = loadProjects();
for (int i = 0; i < projects.size(); i++) {
if (projects.get(i).getId().equals(project.getId())) {
Project existing = projects.get(i);
// 密码留空时保留原密码
if (project.getPassword() == null || project.getPassword().isEmpty()) {
project.setPassword(existing.getPassword());
}
projects.set(i, project);
return saveProjects(projects);
}
}
return false;
}
/**
* 删除项目
*
* @param projectId 项目ID
* @return 是否删除成功
*/
public static boolean deleteProject(String projectId) {
List<Project> projects = loadProjects();
projects.removeIf(p -> p.getId().equals(projectId));
return saveProjects(projects);
}
/**
* 根据ID获取项目
*
* @param projectId 项目ID
* @return 项目如果不存在返回null
*/
public static Project getProjectById(String projectId) {
List<Project> projects = loadProjects();
return projects.stream()
.filter(p -> p.getId().equals(projectId))
.findFirst()
.orElse(null);
}
/**
* 获取配置目录路径
*
* @return 配置目录路径
*/
public static String getConfigDir() {
return CONFIG_DIR;
}
/**
* 获取项目配置文件路径
*
* @return 项目配置文件路径
*/
public static String getProjectsFilePath() {
return PROJECTS_FILE;
}
}