diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java
index 0a0d6c5d33..f273fa2092 100644
--- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java
+++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java
@@ -306,8 +306,7 @@ public class TemplateFileTree extends EnvFileTree {
if (interceptRefresh(root)) {
return;
}
-
- if (!TemplateTreeSearchManager.getInstance().isRefreshing()) {
+ if (!TemplateTreeSearchManager.getInstance().isRefreshing() || TemplateTreeSearchManager.getInstance().allFileNodes().size() != allTreeNode.size()) {
currentTreeMode.clear();
calculateNode.clear();
allTreeNode = TemplateTreeSearchManager.getInstance().allFileNodes().entrySet().stream().collect(
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
index dfd2a20cd0..5040a5cbd4 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
@@ -886,6 +886,54 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
layeredPane.repaint();
}
+ /**
+ * 激活模板
+ *
+ * activateJTemplate需要模板存在,openTemplate需要模板保存过,该方法模板保存与未保存皆可激活,模板如果关闭,并且保存过,会重新打开
+ *
+ * @param templatePath 模板路径 template.getPath()
+ */
+ public void openOrActiveTemplate(String templatePath) {
+ //没保存过的模板如果要激活就要从当前历史模板列表里面找
+ String templateName = getTemplateNameFromPath(templatePath);
+ if (isTemplateNeverSaved(templatePath)) {
+ int index = HistoryTemplateListCache.getInstance().contains(templateName);
+ //如果历史模板列表中存在则激活
+ if (index != -1) {
+ DesignerContext.getDesignerFrame().activateJTemplate(HistoryTemplateListCache.getInstance().getTemplate(index));
+ }
+ } else {
+ DesignerContext.getDesignerFrame().openTemplate(FILEFactory.createFILE(templatePath));
+ }
+ }
+
+ /**
+ * 指定路径的模板是否保存过
+ *
+ * @param templatePath 模板路径 template.getPath()
+ * @return 如果模板没保存过则返回true
+ */
+ private boolean isTemplateNeverSaved(String templatePath) {
+ FILE tplFile = FILEFactory.createFILE(templatePath);
+ //没保存过的模板获取到的templatePath所生成的FILE文件会不存在
+ return tplFile == null || !tplFile.exists() || StringUtils.isEmpty(templatePath);
+ }
+
+ /**
+ * 根据模板路径获取模板名称
+ * @param templatePath 模板路径 template.getPath()
+ * @return 模板名
+ */
+ private String getTemplateNameFromPath(String templatePath) {
+ FILE tplFile = FILEFactory.createFILE(templatePath);
+ String templateName = StringUtils.EMPTY;
+ if (tplFile != null) {
+ templateName = tplFile.getName();
+ }
+ return templateName;
+ }
+
+
/**
* 当前模板 停用失败
*
@@ -1231,6 +1279,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/**
* 判断是否正在进行服务器配置
+ *
* @return boolean
*/
public boolean isServerConfig() {
@@ -1239,6 +1288,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/**
* 设置是否正在进行服务器配置
+ *
* @param serverConfig
*/
public void setServerConfig(boolean serverConfig) {
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
index fe0e4ee4ff..844b8d0144 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
@@ -54,6 +54,7 @@ import com.fr.design.mainframe.toolbar.VcsScene;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.NameSeparator;
import com.fr.design.menu.ShortCut;
+import com.fr.design.module.DesignModuleFactory;
import com.fr.design.preview.PagePreview;
import com.fr.design.ui.util.UIUtil;
import com.fr.design.utils.DesignUtils;
@@ -1109,6 +1110,10 @@ public abstract class JTemplate>
tplMenu.addShortCut(shortCuts4Authority());
}
+ //查找替换
+ tplMenu.addShortCut(new NameSeparator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Replace_Name_Separate")));
+ tplMenu.addShortCut((ShortCut) DesignModuleFactory.getITReplaceAction());
+
return new MenuDef[]{tplMenu};
}
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
index 6a83a159b8..904c281560 100644
--- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
+++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
@@ -580,13 +580,7 @@ public abstract class ToolBarMenuDock {
}
shortCuts.add(new AboutAction());
- try {
- if (DesignModuleFactory.getITReplaceAction() != null) {
- shortCuts.add((ShortCut) DesignModuleFactory.getITReplaceAction().newInstance());
- }
- } catch (Exception e) {
- FineLoggerFactory.getLogger().error(e.getMessage(), e);
- }
+
return shortCuts.toArray(new ShortCut[0]);
}
diff --git a/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java b/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java
index bab9bb1ac8..cccd6f71e6 100644
--- a/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java
+++ b/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java
@@ -19,6 +19,7 @@ import com.fr.log.FineLoggerFactory;
import com.fr.plugin.solution.sandbox.collection.PluginSandboxCollections;
import com.fr.stable.StableUtils;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.lang.reflect.Constructor;
import java.awt.Dialog;
@@ -129,8 +130,21 @@ public class DesignModuleFactory {
instance.ITReplaceAction = r;
}
- public static Class getITReplaceAction() {
- return instance.ITReplaceAction;
+ /**
+ * 获取查找替换
+ *
+ * @return ITReplaceAction
+ */
+ @Nullable
+ public static Object getITReplaceAction() {
+ try {
+ if (instance.ITReplaceAction != null) {
+ return instance.ITReplaceAction.newInstance();
+ }
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error(e.getMessage(), e);
+ }
+ return null;
}
/**
diff --git a/designer-base/src/main/java/com/fr/env/detect/impl/converter/ClassConflictConvertor.java b/designer-base/src/main/java/com/fr/env/detect/impl/converter/ClassConflictConvertor.java
index 57c97326e5..6cd92e4039 100644
--- a/designer-base/src/main/java/com/fr/env/detect/impl/converter/ClassConflictConvertor.java
+++ b/designer-base/src/main/java/com/fr/env/detect/impl/converter/ClassConflictConvertor.java
@@ -48,6 +48,7 @@ public class ClassConflictConvertor implements ThrowableConverter {
private static final String JAR_URL_SUFFIX = ".jar!";
private static final String JAR_FILE_SUFFIX = ".jar";
private static final String FILE_URL_PREFIX = "file:";
+ private static final String PLUGINS_DIR_NAME = "plugins";
private final Map, ClassNameConverter> throwableMap = new HashMap<>();
@@ -108,6 +109,9 @@ public class ClassConflictConvertor implements ThrowableConverter {
for (URL url : urlList) {
String file = url.getFile();
String decodeFileStr = URLDecoder.decode(file, EncodeConstants.ENCODING_UTF_8);
+ if (decodeFileStr.contains(PLUGINS_DIR_NAME)) {
+ continue;
+ }
if (decodeFileStr.contains(JAR_URL_SUFFIX)) {
String jarPath = decodeFileStr.substring(FILE_URL_PREFIX.length(), decodeFileStr.indexOf(JAR_URL_SUFFIX) + JAR_FILE_SUFFIX.length());
String jar = new File(jarPath).getName();
diff --git a/designer-base/src/main/resources/com/fr/design/images/replace/replace.png b/designer-base/src/main/resources/com/fr/design/images/replace/replace.png
new file mode 100644
index 0000000000..e736042724
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/replace/replace.png differ
diff --git a/designer-base/src/main/resources/com/fr/design/images/replace/replace_normal.svg b/designer-base/src/main/resources/com/fr/design/images/replace/replace_normal.svg
new file mode 100644
index 0000000000..efe176ceab
--- /dev/null
+++ b/designer-base/src/main/resources/com/fr/design/images/replace/replace_normal.svg
@@ -0,0 +1,3 @@
+
diff --git a/designer-base/src/test/java/com/fr/env/detect/impl/converter/ClassConflictConvertorTest.java b/designer-base/src/test/java/com/fr/env/detect/impl/converter/ClassConflictConvertorTest.java
index cdc789b015..20f370b7b1 100644
--- a/designer-base/src/test/java/com/fr/env/detect/impl/converter/ClassConflictConvertorTest.java
+++ b/designer-base/src/test/java/com/fr/env/detect/impl/converter/ClassConflictConvertorTest.java
@@ -1,5 +1,6 @@
package com.fr.env.detect.impl.converter;
+import org.junit.Assert;
import org.junit.Test;
public class ClassConflictConvertorTest {
@@ -10,14 +11,7 @@ public class ClassConflictConvertorTest {
ClassNotFoundException ex1 = new ClassNotFoundException("Class 111.222.333 not found");
Iterable names = ClassConflictConvertor.Converter.CLASS.converter(ex1);
- System.out.println();
- }
-
- @Test
- public void testConverter() {
-
- ClassNotFoundException ex1 = new ClassNotFoundException("com.zaxxer.hikari.HikariConfig");
- ClassConflictConvertor convertor = new ClassConflictConvertor();
- convertor.convert(ex1);
+ String next = names.iterator().next();
+ Assert.assertEquals("111.222.333", next);
}
}
\ No newline at end of file
diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java
index 358dc19652..6d085cbbdf 100644
--- a/designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java
+++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java
@@ -29,6 +29,7 @@ public class ITReplaceAction extends UpdateAction {
this.setName(getMenuKeySet().getMenuName());
this.setMnemonic(getMenuKeySet().getMnemonic());
this.setAccelerator(getMenuKeySet().getKeyStroke());
+ this.setSmallIcon("/com/fr/design/images/replace/replace");
}
private static final MenuKeySet IT_REPLACE = new MenuKeySet() {
diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java
index 1a73d3fcb3..c4cf47f592 100644
--- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java
+++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java
@@ -6,10 +6,12 @@ import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext;
+import com.fr.design.mainframe.JTemplate;
+import com.fr.file.FILE;
import com.fr.file.FILEFactory;
import com.fr.general.GeneralUtils;
import com.fr.stable.StringUtils;
-import com.fr.stable.project.ProjectConstants;
+
import javax.swing.AbstractCellEditor;
@@ -44,14 +46,13 @@ public class ITTableButton extends AbstractCellEditor implements TableCellEditor
if (StringUtils.isNotEmpty(GeneralUtils.objectToString(content.getTrlString()))) {
ITReplaceMainDialog.setITReplaceFlag(true);
TRL trl = new TRL(GeneralUtils.objectToString(content.getTrlString()));
- DesignerContext.getDesignerFrame().openTemplate(FILEFactory.createFILE(content.getTemplatePath()));
+ DesignerContext.getDesignerFrame().openOrActiveTemplate(content.getTemplatePath());
HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().navigate(trl);
}
ITReplaceMainDialog.setITReplaceFlag(false);
}
});
-
}
/**