mirror of https://gitee.com/makejava/EasyCode.git
完成全局变量的编辑功能
This commit is contained in:
parent
70909e95c1
commit
e24ea01047
|
@ -52,8 +52,11 @@ public class SettingsStorageDTO {
|
|||
storage.templateGroupMap = new HashMap<>(16);
|
||||
storage.templateGroupMap.put(GlobalDict.DEFAULT_GROUP_NAME, templateGroup);
|
||||
|
||||
GlobalConfigGroup globalConfigGroup = new GlobalConfigGroup();
|
||||
globalConfigGroup.setName(GlobalDict.DEFAULT_GROUP_NAME);
|
||||
globalConfigGroup.setElementList(Arrays.asList(new GlobalConfig("test", "abc"), new GlobalConfig("demo", "value")));
|
||||
storage.globalConfigGroupMap = new HashMap<>(16);
|
||||
storage.globalConfigGroupMap.put(GlobalDict.DEFAULT_GROUP_NAME, new GlobalConfigGroup());
|
||||
storage.globalConfigGroupMap.put(GlobalDict.DEFAULT_GROUP_NAME, globalConfigGroup);
|
||||
return storage;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ import lombok.NoArgsConstructor;
|
|||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GlobalConfig implements AbstractItem<GlobalConfig>, Item {
|
||||
public class GlobalConfig implements AbstractEditorItem<GlobalConfig>, Item {
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
|
@ -29,4 +29,24 @@ public class GlobalConfig implements AbstractItem<GlobalConfig>, Item {
|
|||
public GlobalConfig defaultVal() {
|
||||
return new GlobalConfig("demo", "value");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changeFileName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String fileName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changeFileContent(String content) {
|
||||
this.value = content;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String fileContent() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,170 @@
|
|||
package com.sjhy.plugin.ui;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.intellij.ide.fileTemplates.impl.UrlUtil;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.util.ExceptionUtil;
|
||||
import com.sjhy.plugin.dict.GlobalDict;
|
||||
import com.sjhy.plugin.dto.SettingsStorageDTO;
|
||||
import com.sjhy.plugin.entity.GlobalConfig;
|
||||
import com.sjhy.plugin.entity.GlobalConfigGroup;
|
||||
import com.sjhy.plugin.tool.CloneUtils;
|
||||
import com.sjhy.plugin.ui.component.EditListComponent;
|
||||
import com.sjhy.plugin.ui.component.EditorComponent;
|
||||
import com.sjhy.plugin.ui.component.GroupNameComponent;
|
||||
import com.sjhy.plugin.ui.component.LeftRightComponent;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @author makejava
|
||||
* @version 1.0.0
|
||||
* @date 2021/08/10 16:14
|
||||
*/
|
||||
public class GlobalConfigSettingForm implements Configurable, BaseSettings {
|
||||
/**
|
||||
* 全局变量描述信息,说明文档
|
||||
*/
|
||||
private static final String TEMPLATE_DESCRIPTION_INFO;
|
||||
|
||||
static {
|
||||
String descriptionInfo = "";
|
||||
try {
|
||||
descriptionInfo = UrlUtil.loadText(GlobalConfigSettingForm.class.getResource("/description/globalConfigDescription.html"));
|
||||
} catch (IOException e) {
|
||||
ExceptionUtil.rethrow(e);
|
||||
} finally {
|
||||
TEMPLATE_DESCRIPTION_INFO = descriptionInfo;
|
||||
}
|
||||
}
|
||||
|
||||
private JPanel mainPanel;
|
||||
/**
|
||||
* 类型映射配置
|
||||
*/
|
||||
private Map<String, GlobalConfigGroup> globalConfigGroupMap;
|
||||
/**
|
||||
* 当前分组名
|
||||
*/
|
||||
private GlobalConfigGroup currGlobalConfigGroup;
|
||||
/**
|
||||
* 编辑框组件
|
||||
*/
|
||||
private EditorComponent<GlobalConfig> editorComponent;
|
||||
/**
|
||||
* 分组操作组件
|
||||
*/
|
||||
private GroupNameComponent<GlobalConfig, GlobalConfigGroup> groupNameComponent;
|
||||
/**
|
||||
* 编辑列表框
|
||||
*/
|
||||
private EditListComponent<GlobalConfig> editListComponent;
|
||||
|
||||
|
||||
public GlobalConfigSettingForm() {
|
||||
this.mainPanel = new JPanel(new BorderLayout());
|
||||
}
|
||||
|
||||
|
||||
private void initGroupName() {
|
||||
Consumer<GlobalConfigGroup> switchGroupOperator = globalConfigGroup -> {
|
||||
this.currGlobalConfigGroup = globalConfigGroup;
|
||||
refreshUiVal();
|
||||
// 切换分组情况编辑框
|
||||
this.editorComponent.setFile(null);
|
||||
};
|
||||
|
||||
this.groupNameComponent = new GroupNameComponent<>(switchGroupOperator, this.globalConfigGroupMap);
|
||||
this.mainPanel.add(groupNameComponent.getPanel(), BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
private void initEditList() {
|
||||
Consumer<GlobalConfig> switchItemFun = globalConfig -> {
|
||||
refreshUiVal();
|
||||
if (globalConfig != null) {
|
||||
this.editListComponent.setCurrentItem(globalConfig.getName());
|
||||
}
|
||||
editorComponent.setFile(globalConfig);
|
||||
};
|
||||
this.editListComponent = new EditListComponent<>(switchItemFun, "GlobalConfig Name:", GlobalConfig.class, this.currGlobalConfigGroup.getElementList());
|
||||
}
|
||||
|
||||
private void initEditor() {
|
||||
this.editorComponent = new EditorComponent<>(null, TEMPLATE_DESCRIPTION_INFO);
|
||||
}
|
||||
|
||||
private void initPanel() {
|
||||
this.loadSettingsStore(getSettingsStorage());
|
||||
// 初始化表格
|
||||
this.initGroupName();
|
||||
// 初始化编辑列表组件
|
||||
this.initEditList();
|
||||
// 初始化编辑框组件
|
||||
this.initEditor();
|
||||
// 左右组件
|
||||
LeftRightComponent leftRightComponent = new LeftRightComponent(editListComponent.getMainPanel(), this.editorComponent.getMainPanel());
|
||||
this.mainPanel.add(leftRightComponent.getMainPanel(), BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "Global Config";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getHelpTopic() {
|
||||
return getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadSettingsStore(SettingsStorageDTO settingsStorage) {
|
||||
// 复制配置,防止篡改
|
||||
this.globalConfigGroupMap = CloneUtils.cloneByJson(settingsStorage.getGlobalConfigGroupMap(), new TypeReference<Map<String, GlobalConfigGroup>>() {
|
||||
});
|
||||
this.currGlobalConfigGroup = this.globalConfigGroupMap.get(settingsStorage.getCurrTypeMapperGroupName());
|
||||
if (this.currGlobalConfigGroup == null) {
|
||||
this.currGlobalConfigGroup = this.globalConfigGroupMap.get(GlobalDict.DEFAULT_GROUP_NAME);
|
||||
}
|
||||
this.refreshUiVal();
|
||||
// 解决reset后编辑框未清空BUG
|
||||
if (this.editorComponent != null) {
|
||||
this.editorComponent.setFile(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable JComponent createComponent() {
|
||||
this.initPanel();
|
||||
return mainPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
return !this.globalConfigGroupMap.equals(getSettingsStorage().getGlobalConfigGroupMap())
|
||||
|| !getSettingsStorage().getCurrGlobalConfigGroupName().equals(this.currGlobalConfigGroup.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() {
|
||||
getSettingsStorage().setGlobalConfigGroupMap(this.globalConfigGroupMap);
|
||||
getSettingsStorage().setCurrTypeMapperGroupName(this.currGlobalConfigGroup.getName());
|
||||
// 保存包后重新加载配置
|
||||
this.loadSettingsStore(getSettingsStorage());
|
||||
}
|
||||
|
||||
private void refreshUiVal() {
|
||||
if (this.groupNameComponent != null) {
|
||||
this.groupNameComponent.setGroupMap(this.globalConfigGroupMap);
|
||||
this.groupNameComponent.setCurrGroupName(this.currGlobalConfigGroup.getName());
|
||||
}
|
||||
if (this.editListComponent != null) {
|
||||
this.editListComponent.setElementList(this.currGlobalConfigGroup.getElementList());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -79,7 +79,7 @@ public class MainSettingForm implements Configurable, Configurable.Composite, Ba
|
|||
new TypeMapperSettingForm(),
|
||||
new TemplateSettingForm(),
|
||||
new ColumnConfigSettingForm(),
|
||||
// new GlobalConfigSettingPanel()
|
||||
new GlobalConfigSettingForm(),
|
||||
};
|
||||
this.loadChildSettingsStore();
|
||||
return this.childConfigurableArray;
|
||||
|
|
|
@ -35,7 +35,7 @@ public class TemplateSettingForm implements Configurable, BaseSettings {
|
|||
static {
|
||||
String descriptionInfo = "";
|
||||
try {
|
||||
descriptionInfo = UrlUtil.loadText(TemplateSettingPanel.class.getResource("/description/templateDescription.html"));
|
||||
descriptionInfo = UrlUtil.loadText(TemplateSettingForm.class.getResource("/description/templateDescription.html"));
|
||||
} catch (IOException e) {
|
||||
ExceptionUtil.rethrow(e);
|
||||
} finally {
|
||||
|
@ -75,6 +75,8 @@ public class TemplateSettingForm implements Configurable, BaseSettings {
|
|||
Consumer<TemplateGroup> switchGroupOperator = templateGroup -> {
|
||||
this.currTemplateGroup = templateGroup;
|
||||
refreshUiVal();
|
||||
// 切换分组情况编辑框
|
||||
this.editorComponent.setFile(null);
|
||||
};
|
||||
|
||||
this.groupNameComponent = new GroupNameComponent<>(switchGroupOperator, this.templateGroupMap);
|
||||
|
@ -84,7 +86,9 @@ public class TemplateSettingForm implements Configurable, BaseSettings {
|
|||
private void initEditList() {
|
||||
Consumer<Template> switchItemFun = template -> {
|
||||
refreshUiVal();
|
||||
this.editListComponent.setCurrentItem(template.getName());
|
||||
if (template != null) {
|
||||
this.editListComponent.setCurrentItem(template.getName());
|
||||
}
|
||||
editorComponent.setFile(template);
|
||||
};
|
||||
this.editListComponent = new EditListComponent<>(switchItemFun, "Template Name:", Template.class, this.currTemplateGroup.getElementList());
|
||||
|
@ -128,6 +132,10 @@ public class TemplateSettingForm implements Configurable, BaseSettings {
|
|||
this.currTemplateGroup = this.templateGroupMap.get(GlobalDict.DEFAULT_GROUP_NAME);
|
||||
}
|
||||
this.refreshUiVal();
|
||||
// 解决reset后编辑框未清空BUG
|
||||
if (this.editorComponent != null) {
|
||||
this.editorComponent.setFile(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -158,8 +166,5 @@ public class TemplateSettingForm implements Configurable, BaseSettings {
|
|||
if (this.editListComponent != null) {
|
||||
this.editListComponent.setElementList(this.currTemplateGroup.getElementList());
|
||||
}
|
||||
if (this.editorComponent != null) {
|
||||
this.editorComponent.setFile(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import org.jetbrains.annotations.NotNull;
|
|||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
|
@ -210,6 +211,9 @@ public class EditListComponent<E extends AbstractEditorItem<E>> {
|
|||
}
|
||||
|
||||
private List<String> getAllItemName() {
|
||||
if (CollectionUtil.isEmpty(elementList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return elementList.stream().map(AbstractEditorItem::fileName).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
@ -223,6 +227,7 @@ public class EditListComponent<E extends AbstractEditorItem<E>> {
|
|||
}
|
||||
if (StringUtils.isEmpty(this.currentItem) && elementList != null && elementList.size() > 0) {
|
||||
setCurrentItem(elementList.get(0).fileName());
|
||||
switchItemFun.accept(findByName(this.currentItem));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,23 +1,24 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>全局变量说明</title>
|
||||
<meta charset="UTF-8">
|
||||
<title>全局变量说明</title>
|
||||
</head>
|
||||
<body>
|
||||
<h4>说明文档:</h4>
|
||||
<h3>说明文档:</h3>
|
||||
<h4>使用案例一(简单)</h4>
|
||||
<p>
|
||||
不仅仅是简单的全局变量,完全的自由发挥。<br>
|
||||
<span style="color: #ffb224; background: gray">注意:</span>全局变量具有优先处理权限,会影响到模板中的任意同名变量,<br>
|
||||
<span style="color: #ff4c41">所以在模板中一定不要定义与全局变量同名的变量。</span>
|
||||
名称为变量名,内容为变量值<br>
|
||||
使用示例:在模板中直接使用${变量名}引用变量
|
||||
</p>
|
||||
<h4>使用方式:</h4>
|
||||
<h4>使用案例二(复杂)</h4>
|
||||
<p>
|
||||
使用全局变量时,直接在模板中当普通变量引入即可。<br>
|
||||
名称为变量名,内容为模板内容<br>
|
||||
使用示例:在模板任意位置直接使用${变量名}引入模板
|
||||
</p>
|
||||
<h4>作用:</h4>
|
||||
<p>
|
||||
通常用于定义宏,初始化操作,定义字符串变量,等等。
|
||||
<span style="color: #ffb224; background: gray">注意:</span>全局变量具有优先处理权限,会影响到模板中的任意同名变量,<br>
|
||||
<span style="color: #ff4c41">所以在模板中一定不要定义与全局变量同名的变量。</span>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in New Issue