Skip to content

Commit 3c764cb

Browse files
committed
feat: refactor Environment class to remove deprecated variables handling and streamline variable management
1 parent 217399b commit 3c764cb

3 files changed

Lines changed: 12 additions & 222 deletions

File tree

src/main/java/com/laker/postman/common/component/table/EasyPostmanEnvironmentTablePanel.java

Lines changed: 1 addition & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@
1616
import java.awt.event.MouseAdapter;
1717
import java.awt.event.MouseEvent;
1818
import java.util.ArrayList;
19-
import java.util.LinkedHashMap;
2019
import java.util.List;
21-
import java.util.Map;
2220

2321
/**
2422
* Postman 环境变量表格面板
@@ -48,9 +46,6 @@ public class EasyPostmanEnvironmentTablePanel extends JPanel {
4846
private static final int COL_VALUE = 2;
4947
private static final int COL_DELETE = 3;
5048

51-
private final String nameCol;
52-
private final String valueCol;
53-
5449
/**
5550
* Flag to track if dragging is in progress
5651
*/
@@ -77,8 +72,6 @@ public EasyPostmanEnvironmentTablePanel() {
7772
* @param autoAppendRowEnabled 是否启用自动补空行
7873
*/
7974
public EasyPostmanEnvironmentTablePanel(String nameCol, String valueCol, boolean popupMenuEnabled, boolean autoAppendRowEnabled) {
80-
this.nameCol = nameCol;
81-
this.valueCol = valueCol;
8275
this.columns = new String[]{"", nameCol, valueCol, ""};
8376
initializeComponents();
8477
initializeTableUI();
@@ -826,100 +819,6 @@ private void scrollToLastRow() {
826819
});
827820
}
828821

829-
/**
830-
* 获取所有行数据
831-
*/
832-
public List<Map<String, Object>> getRows() {
833-
List<Map<String, Object>> rows = new ArrayList<>();
834-
835-
for (int i = 0; i < tableModel.getRowCount(); i++) {
836-
Map<String, Object> row = new LinkedHashMap<>();
837-
row.put("Enabled", tableModel.getValueAt(i, COL_DRAG_ENABLE));
838-
row.put(nameCol, tableModel.getValueAt(i, COL_KEY));
839-
row.put(valueCol, tableModel.getValueAt(i, COL_VALUE));
840-
rows.add(row);
841-
}
842-
843-
return rows;
844-
}
845-
846-
/**
847-
* Set all rows from a list of maps
848-
*/
849-
public void setRows(List<Map<String, Object>> rows) {
850-
stopCellEditing();
851-
852-
suppressAutoAppendRow = true;
853-
try {
854-
tableModel.setRowCount(0);
855-
856-
if (rows != null) {
857-
for (Map<String, Object> row : rows) {
858-
Object enabled = row.get("Enabled");
859-
if (enabled == null) {
860-
enabled = true;
861-
}
862-
Object key = row.get(nameCol);
863-
Object value = row.get(valueCol);
864-
865-
tableModel.addRow(new Object[]{enabled, key, value, ""});
866-
}
867-
}
868-
869-
if (tableModel.getRowCount() == 0 || hasContentInLastRow()) {
870-
tableModel.addRow(new Object[]{true, "", "", ""});
871-
}
872-
} finally {
873-
suppressAutoAppendRow = false;
874-
}
875-
}
876-
877-
/**
878-
* 获取表格内容为Map(第一列为key,第二列为value)- 仅返回已启用的行
879-
* 保持向后兼容性
880-
*/
881-
public Map<String, String> getMap() {
882-
Map<String, String> map = new LinkedHashMap<>();
883-
for (int i = 0; i < tableModel.getRowCount(); i++) {
884-
Object enabledObj = tableModel.getValueAt(i, COL_DRAG_ENABLE);
885-
Object keyObj = tableModel.getValueAt(i, COL_KEY);
886-
Object valueObj = tableModel.getValueAt(i, COL_VALUE);
887-
888-
boolean enabled = enabledObj instanceof Boolean ? (Boolean) enabledObj : true;
889-
String key = keyObj == null ? "" : keyObj.toString().trim();
890-
String value = valueObj == null ? "" : valueObj.toString().trim();
891-
892-
if (enabled && !key.isEmpty()) {
893-
map.put(key, value);
894-
}
895-
}
896-
return map;
897-
}
898-
899-
/**
900-
* 用Map数据填充表格(兼容旧版本,默认全部启用)
901-
* 保持向后兼容性
902-
*/
903-
public void setMap(Map<String, String> map) {
904-
stopCellEditing();
905-
906-
suppressAutoAppendRow = true;
907-
try {
908-
tableModel.setRowCount(0);
909-
if (map != null) {
910-
for (var e : map.entrySet()) {
911-
tableModel.addRow(new Object[]{true, e.getKey(), e.getValue(), ""});
912-
}
913-
}
914-
915-
if (tableModel.getRowCount() == 0 || hasContentInLastRow()) {
916-
tableModel.addRow(new Object[]{true, "", "", ""});
917-
}
918-
} finally {
919-
suppressAutoAppendRow = false;
920-
}
921-
}
922-
923822
/**
924823
* 获取环境变量列表(新格式)
925824
*/
@@ -1011,6 +910,7 @@ public void stopCellEditing() {
1011910

1012911
/**
1013912
* Check if table is currently in dragging state
913+
*
1014914
* @return true if dragging is in progress
1015915
*/
1016916
public boolean isDragging() {

src/main/java/com/laker/postman/panel/env/EnvironmentPanel.java

Lines changed: 7 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@
4040
import java.io.Writer;
4141
import java.nio.charset.StandardCharsets;
4242
import java.util.ArrayList;
43-
import java.util.LinkedHashMap;
4443
import java.util.List;
45-
import java.util.Map;
4644

4745
/**
4846
* 环境变量管理面板
@@ -131,27 +129,11 @@ private void autoSaveVariables() {
131129

132130
try {
133131
variablesTablePanel.stopCellEditing();
134-
135-
// 清空旧格式和新格式数据
136-
currentEnvironment.getVariables().clear();
137-
currentEnvironment.getVariableList().clear();
138-
139-
// 保存到新格式 variableList
140132
List<EnvironmentVariable> variableList = variablesTablePanel.getVariableList();
141-
currentEnvironment.setVariableList(variableList);
142-
143-
// 同时保存已启用的变量到旧格式 variables,保持向后兼容
144-
for (EnvironmentVariable var : variableList) {
145-
if (var.isEnabled()) {
146-
currentEnvironment.addVariable(var.getKey(), var.getValue());
147-
}
148-
}
149-
150-
List<Map<String, Object>> newRows = getRowDatasFromTable();
133+
currentEnvironment.setVariableList(new ArrayList<>(variableList)); // 使用副本避免并发修改
151134
EnvironmentService.saveEnvironment(currentEnvironment);
152135
// 保存后更新快照
153-
originalVariablesSnapshot = JSONUtil.toJsonStr(newRows);
154-
136+
originalVariablesSnapshot = JSONUtil.toJsonStr(currentEnvironment.getVariableList());
155137
log.debug("自动保存环境变量: {}", currentEnvironment.getName());
156138
} catch (Exception ex) {
157139
log.error("自动保存环境变量失败", ex);
@@ -388,19 +370,8 @@ private void loadVariables(Environment env) {
388370
variablesTablePanel.clear();
389371
isLoadingData = true; // 设置标志位,开始加载数据
390372
if (env != null) {
391-
List<Map<String, Object>> rows = new ArrayList<>();
392-
if (env.getVariableList() != null && !env.getVariableList().isEmpty()) {
393-
for (EnvironmentVariable var : env.getVariableList()) {
394-
Map<String, Object> row = new LinkedHashMap<>();
395-
row.put("Enabled", var.isEnabled());
396-
row.put(COLUMN_NAME, var.getKey());
397-
row.put(COLUMN_VALUE, var.getValue());
398-
rows.add(row);
399-
}
400-
}
401-
402-
variablesTablePanel.setRows(rows);
403-
originalVariablesSnapshot = JSONUtil.toJsonStr(rows); // 用rows做快照,保证同步
373+
variablesTablePanel.setVariableList(env.getVariableList());
374+
originalVariablesSnapshot = JSONUtil.toJsonStr(env.getVariableList()); // 用rows做快照,保证同步
404375
} else {
405376
variablesTablePanel.clear();
406377
originalVariablesSnapshot = JSONUtil.toJsonStr(new ArrayList<>()); // 空快照
@@ -415,44 +386,12 @@ public void saveVariables() {
415386
if (currentEnvironment == null) return;
416387
variablesTablePanel.stopCellEditing();
417388

418-
// 清空旧格式和新格式数据
419-
currentEnvironment.getVariables().clear();
420-
currentEnvironment.getVariableList().clear();
421-
422389
// 保存到新格式 variableList
423390
List<EnvironmentVariable> variableList = variablesTablePanel.getVariableList();
424-
currentEnvironment.setVariableList(variableList);
425-
426-
// 同时保存已启用的变量到旧格式 variables,保持向后兼容
427-
for (EnvironmentVariable var : variableList) {
428-
if (var.isEnabled()) {
429-
currentEnvironment.addVariable(var.getKey(), var.getValue());
430-
}
431-
}
432-
433-
List<Map<String, Object>> newRows = getRowDatasFromTable();
391+
currentEnvironment.setVariableList(new ArrayList<>(variableList)); // 使用副本避免并发修改
434392
EnvironmentService.saveEnvironment(currentEnvironment);
435393
// 保存后更新快照为json字符串
436-
originalVariablesSnapshot = JSONUtil.toJsonStr(newRows);
437-
438-
// 显示保存成功提示
439-
JOptionPane.showMessageDialog(this,
440-
I18nUtil.getMessage(MessageKeys.ENV_DIALOG_SAVE_SUCCESS),
441-
I18nUtil.getMessage(MessageKeys.ENV_DIALOG_SAVE_SUCCESS_TITLE),
442-
JOptionPane.INFORMATION_MESSAGE);
443-
}
444-
445-
private List<Map<String, Object>> getRowDatasFromTable() {
446-
List<Map<String, Object>> rows = variablesTablePanel.getRows();
447-
List<Map<String, Object>> newRows = new ArrayList<>();
448-
for (Map<String, Object> row : rows) {
449-
String key = row.get(COLUMN_NAME) == null ? null : row.get(COLUMN_NAME).toString();
450-
if (CharSequenceUtil.isBlank(key)) {
451-
continue; // 跳过空key
452-
}
453-
newRows.add(row);
454-
}
455-
return newRows;
394+
originalVariablesSnapshot = JSONUtil.toJsonStr(currentEnvironment.getVariableList());
456395
}
457396

458397
/**
@@ -684,8 +623,7 @@ public void refreshUI() {
684623

685624
// 判断当前表格内容和快照是否一致,使用JSON序列化比较
686625
public boolean isVariablesChanged() {
687-
List<Map<String, Object>> rows = getRowDatasFromTable();
688-
String curJson = JSONUtil.toJsonStr(rows);
626+
String curJson = JSONUtil.toJsonStr(variablesTablePanel.getVariableList());
689627
boolean isVariablesChanged = !CharSequenceUtil.equals(curJson, originalVariablesSnapshot);
690628
if (isVariablesChanged) {
691629
log.debug("env name: {}", currentEnvironment != null ? currentEnvironment.getName() : "null");

src/main/java/com/laker/postman/service/EnvironmentService.java

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import cn.hutool.json.JSONObject;
66
import cn.hutool.json.JSONUtil;
77
import com.laker.postman.model.Environment;
8-
import com.laker.postman.model.EnvironmentVariable;
98
import com.laker.postman.model.Workspace;
109
import com.laker.postman.util.EasyPostmanVariableUtil;
1110
import com.laker.postman.util.SystemUtil;
@@ -102,27 +101,7 @@ private static void loadEnvironmentsFromPath(String filePath) {
102101
environments.clear();
103102
JSONArray array = JSONUtil.readJSONArray(file, StandardCharsets.UTF_8);
104103
for (Object obj : array) {
105-
JSONObject envJson = (JSONObject) obj;
106-
Environment env = new Environment();
107-
env.setId(envJson.getStr("id"));
108-
env.setName(envJson.getStr("name"));
109-
env.setActive(envJson.getBool("active", false));
110-
111-
// 优先加载新格式 variableList
112-
JSONArray variableListJson = envJson.getJSONArray("variableList");
113-
if (variableListJson != null && !variableListJson.isEmpty()) {
114-
// 使用新格式
115-
List<EnvironmentVariable> varList = new ArrayList<>();
116-
for (Object varObj : variableListJson) {
117-
JSONObject varJson = (JSONObject) varObj;
118-
boolean enabled = varJson.getBool("enabled", true);
119-
String key = varJson.getStr("key");
120-
String value = varJson.getStr("value", "");
121-
varList.add(new EnvironmentVariable(enabled, key, value));
122-
}
123-
env.setVariableList(varList);
124-
}
125-
104+
Environment env = JSONUtil.toBean((JSONObject) obj, Environment.class);
126105
environments.put(env.getId(), env);
127106
if (env.isActive()) {
128107
activeEnvironment = env;
@@ -200,37 +179,10 @@ public static void saveEnvironments() {
200179
parentDir.mkdirs();
201180
}
202181

203-
JSONArray array = new JSONArray();
204-
for (Environment env : environments.values()) {
205-
JSONObject envJson = new JSONObject();
206-
envJson.set("id", env.getId());
207-
envJson.set("name", env.getName());
208-
envJson.set("active", env.isActive());
209-
210-
// 优先保存新格式 variableList
211-
if (env.getVariableList() != null && !env.getVariableList().isEmpty()) {
212-
JSONArray varListJson = new JSONArray();
213-
for (com.laker.postman.model.EnvironmentVariable var : env.getVariableList()) {
214-
JSONObject varJson = new JSONObject();
215-
varJson.set("enabled", var.isEnabled());
216-
varJson.set("key", var.getKey());
217-
varJson.set("value", var.getValue());
218-
varListJson.add(varJson);
219-
}
220-
envJson.set("variableList", varListJson);
221-
} else {
222-
// 后备方案:保存旧格式 variables(向后兼容)
223-
JSONObject varsJson = new JSONObject();
224-
for (Map.Entry<String, String> entry : env.getVariables().entrySet()) {
225-
varsJson.set(entry.getKey(), entry.getValue());
226-
}
227-
envJson.set("variables", varsJson);
228-
}
229-
230-
array.add(envJson);
231-
}
182+
List<Environment> envList = new ArrayList<>(environments.values());
183+
String jsonStr = JSONUtil.toJsonPrettyStr(envList);
232184

233-
FileUtil.writeString(array.toStringPretty(), file, StandardCharsets.UTF_8);
185+
FileUtil.writeString(jsonStr, file, StandardCharsets.UTF_8);
234186
log.debug("环境变量已保存到: {}", filePath);
235187
} catch (Exception e) {
236188
log.error("保存环境变量失败", e);

0 commit comments

Comments
 (0)