diff --git a/designer-base/src/main/java/com/fr/design/lock/LockInfoDialog.java b/designer-base/src/main/java/com/fr/design/lock/LockInfoDialog.java index 003215ca6..44c95c44c 100644 --- a/designer-base/src/main/java/com/fr/design/lock/LockInfoDialog.java +++ b/designer-base/src/main/java/com/fr/design/lock/LockInfoDialog.java @@ -99,7 +99,7 @@ public class LockInfoDialog extends JDialog { return; } final String selectedFilePath = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, TemplateTreePane.getInstance().getFilePath()); - TemplateUtils.createAndOpenTemplate( + TemplateUtils.createAndReOpenTemplate( Toolkit.i18nText("Fine_Design_Template_Lock_Copy"), new FileNodeFILE(new FileNode(selectedFilePath, false)), false, diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index ce01d9992..f3d062946 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -19,6 +19,7 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.server.lock.TplOperator; +import org.jetbrains.annotations.Nullable; import javax.swing.SwingWorker; import java.io.OutputStream; @@ -47,7 +48,7 @@ public class TemplateUtils { } /** - * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate + * 创建新的模板文件并并判断新的模板文件是否之前已经被开打,如果已经打开需要reOpen * * @param prefix 模板文件名称前缀 * @param file 模板文件 @@ -55,14 +56,39 @@ public class TemplateUtils { * 为true时以CurrentEditingTemplate为准创建新模板 * 为false时以传入的File文件为准创建新模板,此文件可以不是编辑状态 * @param openNewTemplate 是否需要在创建后打开模板 - * @param doAfterCreateTemplate 创建备份模板成功后调用 */ - public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate, Runnable doAfterCreateTemplate) { - String fileName = file.getName(); + public static void createAndReOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate) { String oldPath = file.getPath(); + file = getSavedFile(prefix, file); + if (file == null) { + return; + } + Runnable doAfterCreateTemplate; + //判断一下要保存的文件是否已打开 + int index = HistoryTemplateListCache.getInstance().contains(file); + if (index == -1) { + doAfterCreateTemplate = () -> {}; + } else { + JTemplate template = HistoryTemplateListCache.getInstance().getHistoryList().get(index); + doAfterCreateTemplate = () -> HistoryTemplateListCache.getInstance().closeSelectedReport(template); + } + createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, doAfterCreateTemplate); + } + + + /** + * 返回值可以为null, 为null表示没有点击保存按钮或者传递进来的文件file本身不满足格式要求 + * + * @param prefix 模板文件名称前缀 + * @param file 模板文件 + * @return 最后选择的要保存的文件 + */ + @Nullable + private static FILE getSavedFile(String prefix, FILE file) { + String fileName = file.getName(); int indexOfLastDot = fileName.lastIndexOf(CoreConstants.DOT); if (indexOfLastDot < 0) { - return; + return null; } String suffix = fileName.substring(indexOfLastDot + 1); FILEChooserPane fileChooserPane = FILEChooserPane.getInstance(true, true); @@ -74,15 +100,36 @@ public class TemplateUtils { fileChooserPane.enableFileNameTextFiled(); if (isCancel(result)) { - return; + return null; } if (isOk(result)) { - file = fileChooserPane.getSelectedFILE(); - createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, doAfterCreateTemplate); + return fileChooserPane.getSelectedFILE(); } + + return null; } + /** + * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate + * + * @param prefix 模板文件名称前缀 + * @param file 模板文件 + * @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板 + * 为true时以CurrentEditingTemplate为准创建新模板 + * 为false时以传入的File文件为准创建新模板,此文件可以不是编辑状态 + * @param openNewTemplate 是否需要在创建后打开模板 + * @param doAfterCreateTemplate 创建备份模板成功后调用 + */ + public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate, Runnable doAfterCreateTemplate) { + String oldPath = file.getPath(); + file = getSavedFile(prefix, file); + if (file == null) { + return; + } + + createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, doAfterCreateTemplate); + } private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, Runnable doAfterCreateTemplate) { new SwingWorker() { diff --git a/designer-chart/src/main/java/com/fr/design/locale/impl/EmptyDataMark.java b/designer-chart/src/main/java/com/fr/design/locale/impl/EmptyDataMark.java deleted file mode 100644 index 14b8d5107..000000000 --- a/designer-chart/src/main/java/com/fr/design/locale/impl/EmptyDataMark.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.fr.design.locale.impl; - -import com.fr.general.GeneralContext; -import com.fr.general.IOUtils; -import com.fr.general.locale.LocaleMark; - -import java.awt.image.BufferedImage; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -/** - * 根据本地化信息设置服务器图表空数据提示图标 - * - * @author obo - * @since 11.0 - * Created on 2023/3/22 - */ -public class EmptyDataMark implements LocaleMark { - - private Map map = new HashMap<>(); - - private static final BufferedImage ZH_EMPTY_DATA = IOUtils.readImage("/com/fr/design/images/zh_emptydata.png"); - private static final BufferedImage US_EMPTY_DATA = IOUtils.readImage("/com/fr/design/images/us_emptydata.png"); - private static final BufferedImage ZH_TRADITIONAL_EMPTY_DATA = IOUtils.readImage("/com/fr/design/images/zh_traditional_emptydata.png"); - - public EmptyDataMark() { - map.put(Locale.CHINA, ZH_EMPTY_DATA); - map.put(Locale.US, US_EMPTY_DATA); - map.put(Locale.TAIWAN, ZH_TRADITIONAL_EMPTY_DATA); - } - @Override - public BufferedImage getValue() { - BufferedImage result = map.get(GeneralContext.getLocale()); - return result == null ? US_EMPTY_DATA : result; - } - -} diff --git a/designer-chart/src/main/java/com/fr/design/module/ChartEmptyDataStylePane.java b/designer-chart/src/main/java/com/fr/design/module/ChartEmptyDataStylePane.java index e73bae010..f014efed0 100644 --- a/designer-chart/src/main/java/com/fr/design/module/ChartEmptyDataStylePane.java +++ b/designer-chart/src/main/java/com/fr/design/module/ChartEmptyDataStylePane.java @@ -10,13 +10,12 @@ import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.locale.impl.EmptyDataMark; import com.fr.design.style.background.image.ImageFileChooser; import com.fr.design.style.background.image.ImagePreviewPane; import com.fr.design.utils.ImageUtils; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.locale.LocaleCenter; -import com.fr.general.locale.LocaleMark; +import com.fr.general.locale.image.LocaleImageFactory; +import com.fr.general.locale.image.LocaleImageMark; import com.fr.stable.Constants; import com.fr.stable.CoreGraphHelper; import com.fr.stable.StringUtils; @@ -35,7 +34,6 @@ import java.awt.GridLayout; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.image.BufferedImage; import java.io.File; /** @@ -63,10 +61,11 @@ public class ChartEmptyDataStylePane extends AbstractAttrNoScrollPane { private Image emptyDataImage = DEFAULT_EMPTY_DATA_IMAGE; private SwingWorker imageWorker; + private static final String EMPTY_DATA_IMAGE_PATH = "/com/fr/design/images/emptydata.png"; static { - LocaleMark localeMark = LocaleCenter.getMark(EmptyDataMark.class); - DEFAULT_EMPTY_DATA_IMAGE = localeMark.getValue(); + LocaleImageMark localeImageMark = LocaleImageFactory.getOrCreateLocaleMark(EMPTY_DATA_IMAGE_PATH); + DEFAULT_EMPTY_DATA_IMAGE = localeImageMark.getValue(); } @Override diff --git a/designer-chart/src/main/resources/com/fr/design/images/us_emptydata.png b/designer-chart/src/main/resources/com/fr/design/images/en_us_emptydata.png similarity index 100% rename from designer-chart/src/main/resources/com/fr/design/images/us_emptydata.png rename to designer-chart/src/main/resources/com/fr/design/images/en_us_emptydata.png diff --git a/designer-chart/src/main/resources/com/fr/design/images/zh_emptydata.png b/designer-chart/src/main/resources/com/fr/design/images/zh_cn_emptydata.png similarity index 100% rename from designer-chart/src/main/resources/com/fr/design/images/zh_emptydata.png rename to designer-chart/src/main/resources/com/fr/design/images/zh_cn_emptydata.png diff --git a/designer-chart/src/main/resources/com/fr/design/images/zh_traditional_emptydata.png b/designer-chart/src/main/resources/com/fr/design/images/zh_tw_emptydata.png similarity index 100% rename from designer-chart/src/main/resources/com/fr/design/images/zh_traditional_emptydata.png rename to designer-chart/src/main/resources/com/fr/design/images/zh_tw_emptydata.png