From a7bef7e32ae19cfcdd5857fad27123f095853cd4 Mon Sep 17 00:00:00 2001 From: "Richard.Fang" Date: Fri, 13 Dec 2024 17:05:09 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-141296=20=E8=AE=BE=E8=AE=A1=E5=99=A8UI?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/EnvChangeEntrance.java | 3 +- .../design/actions/file/PreferenceAction.java | 1 - .../design/actions/file/PreferencePane.java | 61 +++++---- .../com/fr/design/formula/FormulaPane.java | 8 +- .../theme/TemplateThemeGridControlPane.java | 17 +-- .../java/com/fr/design/ui/util/UIUtil.java | 40 ------ .../env/SetupDataDesignerRemoteOperator.java | 117 ++++++++++++++++++ .../fanruan/boot/env/DesignEnvComponent.java | 2 +- .../SetupDataDesignerRemoteOperator.java | 51 -------- .../design/cell/editor/FormulaCellEditor.java | 6 +- 10 files changed, 169 insertions(+), 137 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/env/SetupDataDesignerRemoteOperator.java delete mode 100644 designer-realize/src/main/java/com/fanruan/config/SetupDataDesignerRemoteOperator.java diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java index 1ef14ad5ef..3c219d6f5e 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -240,7 +240,6 @@ public class EnvChangeEntrance { } private static void afterSwitch() { - TemplateTreePane.getInstance().refreshDockingView(); DesignModelAdapter model = DesignModelAdapter.getCurrentModelAdapter(); if (model != null) { model.envChanged(); @@ -515,7 +514,7 @@ public class EnvChangeEntrance { final EnvListPane envListPane = new EnvListPane(); final BasicDialog envListDialog = envListPane.showWindow(DesignerContext.getDesignerFrame()); dialog = envListDialog; - SwingUtilities.invokeLater(() -> envListPane.populateEnvManager(envName)); + envListPane.populateEnvManager(envName); envListDialog.addDialogActionListener(new DialogActionAdapter() { @Override diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java index 4ad36b0f34..eb83ec7bea 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java @@ -33,7 +33,6 @@ public class PreferenceAction extends UpdateAction { final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); final PreferencePane preferencePane = new PreferencePane(); BasicDialog basicDialog = preferencePane.showWindow(designerFrame); - basicDialog.setButtonEnabled(false); // 将当前环境配置填充到PreferencePane中 preferencePane.populate(basicDialog, DesignerEnvManager.getEnvManager()); basicDialog.addDialogActionListener(new DialogActionAdapter() { diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 049d0d69a8..032f55a952 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -8,6 +8,7 @@ import com.fine.theme.utils.FineUIStyle; import com.fine.theme.utils.FineUIUtils; import com.fr.config.Configuration; import com.fr.config.ServerPreferenceConfig; +import com.fr.config.utils.SetupDataHelper; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; import com.fr.design.dialog.BasicDialog; @@ -46,6 +47,7 @@ import com.fr.design.ui.util.UIUtil; import com.fr.design.unit.UnitConvertUtil; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; +import com.fr.env.SetupDataDesignerRemoteOperator; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; import com.fr.general.Inter; @@ -54,6 +56,7 @@ import com.fr.io.attr.ImageExportAttr; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.report.ReportConfigManager; +import com.fr.report.ReportConfigManagerProvider; import com.fr.stable.Constants; import com.fr.third.apache.logging.log4j.Level; import com.fr.third.guava.base.Supplier; @@ -69,7 +72,9 @@ import com.fr.workspace.server.vcs.VcsConfig; import com.fr.workspace.server.vcs.git.config.GcConfig; import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanSchedule; import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; +import java.util.ArrayList; import java.util.Arrays; +import java.util.concurrent.CountDownLatch; import java.util.function.Consumer; import java.util.List; import org.jetbrains.annotations.NotNull; @@ -259,6 +264,14 @@ public class PreferencePane extends BasicPane { put(THREE_MONTH_INDEX, THREE_MONTH_INT); } }); + + private static final List CONFIG_NAMESPACES = Arrays.asList( + VcsConfig.getInstance().getNameSpace(), + ServerPreferenceConfig.getInstance().getNameSpace(), + GcConfig.getInstance().getNameSpace(), + new ReportConfigManager().getNameSpace() + ); + public PreferencePane() { this.initComponents(); } @@ -478,7 +491,7 @@ public class PreferencePane extends BasicPane { } private VcsMovePanel createMovePane(CardLayout cardLayout, JPanel parentPane) { - return new VcsMovePanel(cardLayout, parentPane, new VcsMovePanel.MoveCallBack(){ + return new VcsMovePanel(cardLayout, parentPane, new VcsMovePanel.MoveCallBack() { @Override public void doCallBack(boolean useV2) { saveIntervalPane.setVisible(useV2); @@ -491,7 +504,7 @@ public class PreferencePane extends BasicPane { useVcsAutoSaveScheduleCheckBox.setEnabled(useV2); } }, basicDialog); - }; + } private JPanel createAutoCleanPane() { Row autoCleanPane = new Row(); @@ -880,12 +893,13 @@ public class PreferencePane extends BasicPane { loadVersionControlSettings(designerEnvManager); // 高级 loadAdvanceSettings(designerEnvManager); - // 异步加载配置后启用面板确认按钮 + // 异步加载配置 loadConfigsAsync(basicDialog); } /** * 选项-常用 + * * @param designerEnvManager */ private void loadCommonSettings(DesignerEnvManager designerEnvManager) { @@ -921,6 +935,7 @@ public class PreferencePane extends BasicPane { /** * 高级 + * * @param designerEnvManager */ private void loadAdvanceSettings(DesignerEnvManager designerEnvManager) { @@ -957,29 +972,31 @@ public class PreferencePane extends BasicPane { } private void loadConfigsAsync(BasicDialog dialog) { - List> advanceConfigLoaders = Arrays.asList( - GcConfig.getInstance()::isGcEnable, - ServerPreferenceConfig.getInstance()::isUseUniverseDBM, - ReportConfigManager.getProviderInstance()::getImageExportAttr, - VcsConfig.getInstance()::isUseV2AutoClean, - VcsConfig.getInstance()::getV2CleanInterval, - VcsConfig.getInstance()::getV2RetainInterval, - () -> null - ); - List> advanceConfigUpdaters = Arrays.asList( - gcEnable -> updateGcConfigUI((Boolean) gcEnable), - useUniverseDBM -> useUniverseDBMCheckbox.setSelected((Boolean) useUniverseDBM), - imageExportAttr -> updateImageExportUI((ImageExportAttr) imageExportAttr), - useV2AutoClean -> useVcsAutoCleanScheduleCheckBox.setSelected(true), - v2CleanInterval -> autoCleanIntervalComboBox.setSelectedIndex(getIndex((Integer) v2CleanInterval)), - v2RetainInterval -> autoCleanRetainIntervalComboBox.setSelectedIndex(getIndex((Integer) v2RetainInterval)), - obj -> dialog.setButtonEnabled(true) - ); - UIUtil.loadConfigsAndUpdateUI(advanceConfigLoaders, advanceConfigUpdaters); + UIUtil.executeAsyncTaskAndUpdateUI(() -> { + dialog.setButtonEnabled(false); + if (!WorkContext.getCurrent().isLocal()) { + SetupDataDesignerRemoteOperator.getInstance().fetchBatchConfDatas(CONFIG_NAMESPACES); + } + return null; + }, + result -> { + populateConfigs(); + dialog.setButtonEnabled(true); + }); + } + + private void populateConfigs() { + updateGcConfigUI(GcConfig.getInstance().isGcEnable()); + useUniverseDBMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseUniverseDBM()); + updateImageExportUI(ReportConfigManager.getProviderInstance().getImageExportAttr()); + useVcsAutoCleanScheduleCheckBox.setSelected(VcsConfig.getInstance().isUseV2AutoClean()); + autoCleanIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2CleanInterval())); + autoCleanRetainIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2RetainInterval())); } /** * 选项-版本管理 + * * @param designerEnvManager */ private void loadVersionControlSettings(DesignerEnvManager designerEnvManager) { diff --git a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java index aaf95bd765..44a761f060 100644 --- a/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java +++ b/designer-base/src/main/java/com/fr/design/formula/FormulaPane.java @@ -48,6 +48,7 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.parameter.ParameterInputNoneListenerPane; import com.fr.design.parameter.ParameterInputPane; +import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.FArray; @@ -1074,7 +1075,10 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { functionTypeScrollPane.setBorder(FineBorderFactory.createWrappedRoundBorder()); functionTypeList.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE)); initTypeListCellRenderer(); - initGroupTypeModel(); + UIUtil.executeAsyncTaskAndUpdateUI(() -> { + FunctionConstants.PLUGIN.getGroupName(); + return null; + }, result -> initGroupTypeModel()); initTypeListSelectionListener(); return this.createNamePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FormulaD_Function_Category"), functionTypeScrollPane); } @@ -1126,6 +1130,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { //hugh: 从函数分组插件中添加分组 FunctionConstants.addFunctionGroupFromPlugins(functionTypeListModel); + functionTypeList.setSelectedIndex(0); } private void initFunctionNameListCellRenderer() { @@ -1303,7 +1308,6 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { private JPanel initFunctionPane() { JPanel functionTypePane = initFunctionTypeList(); JPanel functionNamePane = initFunctionNameList(); - functionTypeList.setSelectedIndex(0); return Layouts.row(LayoutConstants.HORIZONTAL_GAP, cell(functionTypePane).weight(1), cell(functionNamePane).weight(1) ).getComponent(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java index 57ba7ee9c9..f2101b944a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java @@ -19,16 +19,11 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.theme.dialog.TemplateThemeProfileDialog; import com.fr.design.menu.MenuDef; import com.fr.design.menu.ToolBarDef; -import com.fr.design.ui.util.UIUtil; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; -import com.fr.third.guava.base.Supplier; import com.fr.third.javax.annotation.Nullable; import com.fr.transaction.CallBackAdaptor; -import java.util.Arrays; -import java.util.List; -import java.util.function.Consumer; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSeparator; @@ -216,15 +211,9 @@ public class TemplateThemeGridControlPane extends Basic MenuDef menuDef = new MenuDef(Toolkit.i18nText("Fine-Design_Basic_Action_Add")); menuDef.setIcon(new LazyIcon("add_popup")); menuDef.setRePaint(true); - List> configLoaders = Arrays.asList( - config::getDefaultLightThemeName, - config::getDefaultDarkThemeName - ); - List> configUpdaters = Arrays.asList( - lightThemeName -> menuDef.addShortCut(new AddThemeAction(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Pane_Create_Light_Theme"), lightThemeName)), - darkThemeName -> menuDef.addShortCut(new AddThemeAction(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Pane_Create_Dark_Theme"), darkThemeName)) - ); - UIUtil.loadConfigsAndUpdateUI(configLoaders, configUpdaters); + menuDef.addShortCut(new AddThemeAction(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Pane_Create_Light_Theme"), config.getDefaultLightThemeName())); + menuDef.addShortCut(new AddThemeAction(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Pane_Create_Dark_Theme"), config.getDefaultDarkThemeName())); + return menuDef; } diff --git a/designer-base/src/main/java/com/fr/design/ui/util/UIUtil.java b/designer-base/src/main/java/com/fr/design/ui/util/UIUtil.java index 64e17e5710..b7f23374ff 100644 --- a/designer-base/src/main/java/com/fr/design/ui/util/UIUtil.java +++ b/designer-base/src/main/java/com/fr/design/ui/util/UIUtil.java @@ -120,44 +120,4 @@ public class UIUtil { } }.execute(); } - - /** - * 异步加载多个配置并更新UI,每个配置加载的时间通常较短,约几十毫秒。 - * - * @param 配置对象的类型 - * @param configLoaders 配置加载器列表,每个加载器负责加载一种配置 - * @param uiUpdaters UI 更新器列表,每个更新器负责在 UI 上显示对应配置的值 - * - *

- * 加载过程是异步的,配置加载是顺序进行的,即一个配置加载完成后,才会加载下一个配置。 - * 配置加载任务会在后台线程中顺序执行,所有配置加载完成后,UI更新操作才会依次执行。 - *

- * 异常模式: - * - 如果在加载某个配置时发生异常,整个任务会失败,后续的配置加载将不会继续执行。 - * - 异常会被捕获为 `ExecutionException` 或 `InterruptedException`,并在 `done()` 方法中记录日志。 - * - 配置加载过程中出现的错误会导致UI更新操作被跳过。 - */ - public static void loadConfigsAndUpdateUI(List> configLoaders, List> uiUpdaters) { - new SwingWorker, Void>() { - @Override - protected List doInBackground() throws Exception { - List results = new ArrayList<>(); - for (Supplier configLoader : configLoaders) { - results.add(configLoader.get()); - } - return results; - } - @Override - protected void done() { - try { - List configResults = get(); - for (int i = 0; i < configResults.size(); i++) { - uiUpdaters.get(i).accept(configResults.get(i)); - } - } catch (InterruptedException | ExecutionException e) { - FineLoggerFactory.getLogger().debug(e.getMessage(), e); - } - } - }.execute(); - } } diff --git a/designer-base/src/main/java/com/fr/env/SetupDataDesignerRemoteOperator.java b/designer-base/src/main/java/com/fr/env/SetupDataDesignerRemoteOperator.java new file mode 100644 index 0000000000..11bcc94ebe --- /dev/null +++ b/designer-base/src/main/java/com/fr/env/SetupDataDesignerRemoteOperator.java @@ -0,0 +1,117 @@ +package com.fr.env; + +import com.fanruan.repository.ConfigRepository; +import com.fr.config.dao.DaoContext; +import com.fr.config.dao.impl.remote.RemoteConfigOperable; +import com.fr.config.utils.ConfData; +import com.fr.config.utils.ConfigReadUtils; +import com.fr.config.utils.PrefixHandler; +import com.fr.config.utils.SetupDataOperator; +import com.fr.nx.app.web.out.widget.utils.CollectionUtils; +import com.fr.stable.StringUtils; +import com.fr.tenant.context.TenantContext; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static com.sun.org.apache.xalan.internal.xsltc.compiler.Constants.STRING; + +/** + * 设计器远程下获取Updata的操作类 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2024/10/14 + */ +public class SetupDataDesignerRemoteOperator implements SetupDataOperator { + + private static final SetupDataDesignerRemoteOperator INSTANCE = new SetupDataDesignerRemoteOperator(); + + private static final String EMPTY_STRING = ""; + + /** + * 单例 + */ + public static SetupDataDesignerRemoteOperator getInstance() { + return INSTANCE; + } + + /** + * 批量拉取配置 + * @param nameSpaces + */ + public void fetchBatchConfDatas(List nameSpaces) { + if(nameSpaces.isEmpty()){ + return; + } + List namespaceList = nameSpaces.stream() + .filter(namespace -> !checkRemoteConfigCacheExistence(namespace)) + .collect(Collectors.toList()); + if(CollectionUtils.isEmpty(namespaceList)){ + return; + } + ConfigRepository.getInstance().batchGetConfigsByConfigsCache(namespaceList, () -> { + batchSaveConfigs(namespaceList, TenantContext.getCurrentWithException().getId()); + return null; + }); + } + + private void batchSaveConfigs(List nameSpaces, String tenantId) { + nameSpaces.forEach(namespace -> { + String prefix = PrefixHandler.concatPrefix(namespace, EMPTY_STRING); + ConfigReadUtils.getData(prefix, tenantId); + ConfigReadUtils.getClassInfo(prefix, tenantId); + }); + } + + @Override + public ConfData getData(String prefix, String tenantId) { + String configNamespace = getConfigNameSpace(prefix); + if (checkRemoteConfigCacheExistence(configNamespace)) { + return createConfData(prefix, tenantId); + } + return ConfigRepository.getInstance().getConfigByConfigsCache(configNamespace, () -> createConfData(prefix, tenantId)); + } + + private ConfData createConfData(String prefix, String tenantId) { + ConfData data = new ConfData(); + data.setDataMap(ConfigReadUtils.getData(prefix, tenantId)); + data.setMap(ConfigReadUtils.getClassInfo(prefix, tenantId)); + return data; + } + + private String getConfigNameSpace(String id) { + + if (StringUtils.isEmpty(id)) { + throw new IllegalArgumentException("id cannot be null"); + } + int length = id.length(); + for (int i = 0; i < length; i++) { + if (PrefixHandler.SEPERATOR == id.charAt(i)) { + return id.substring(0, i); + } + } + throw new IllegalArgumentException("cannot resolve namespace of " + id); + } + + /** + * 检查远程配置缓存是否存在 + *

+ * 该方法通过判断三个远程配置相关的DAO(EntityDao、XmlEntityDao、ClassHelperDao)是否在缓存中存在指定的命名空间。 + * 如果DAO实现了RemoteConfigOperable接口,则会依次检查缓存。 + * 如果DAO不支持远程缓存检查,返回false。 + * + * @param nameSpace 命名空间 + * @return 如果三个远程DAO的缓存中都存在指定命名空间的数据,返回true;否则返回false + */ + private boolean checkRemoteConfigCacheExistence(String nameSpace) { + // 只判断一次,所有远程的Dao都实现了RemoteConfigOperable接口 + if (DaoContext.getEntityDao() instanceof RemoteConfigOperable) { + return ((RemoteConfigOperable) DaoContext.getEntityDao()).checkCacheExistence(nameSpace) && + ((RemoteConfigOperable) DaoContext.getXmlEntityDao()).checkCacheExistence(nameSpace) && + ((RemoteConfigOperable) DaoContext.getClassHelperDao()).checkCacheExistence(nameSpace); + } + // 非远程配置不支持设计器缓存检查,返回false + return false; + } +} diff --git a/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java b/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java index 2612cdfae9..04612be802 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java @@ -12,7 +12,7 @@ import com.fanruan.carina.annotions.Stop; import com.fanruan.carina.annotions.Supplemental; import com.fanruan.config.ConfigProviderFactory; import com.fanruan.config.LocalConfigSource; -import com.fanruan.config.SetupDataDesignerRemoteOperator; +import com.fr.env.SetupDataDesignerRemoteOperator; import com.fanruan.config.realm.ConfigRealm; import com.fanruan.dao.context.DBContextProvider; import com.fanruan.dao.context.DBContextStarter; diff --git a/designer-realize/src/main/java/com/fanruan/config/SetupDataDesignerRemoteOperator.java b/designer-realize/src/main/java/com/fanruan/config/SetupDataDesignerRemoteOperator.java deleted file mode 100644 index bf5193c2ae..0000000000 --- a/designer-realize/src/main/java/com/fanruan/config/SetupDataDesignerRemoteOperator.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.fanruan.config; - -import com.fanruan.repository.ConfigRepository; -import com.fr.config.utils.ConfData; -import com.fr.config.utils.ConfigReadUtils; -import com.fr.config.utils.PrefixHandler; -import com.fr.config.utils.SetupDataOperator; -import com.fr.stable.StringUtils; - -/** - * 设计器远程下获取Updata的操作类 - * - * @author Destiny.Lin - * @since 11.0 - * Created on 2024/10/14 - */ -public class SetupDataDesignerRemoteOperator implements SetupDataOperator { - - private static final SetupDataDesignerRemoteOperator INSTANCE = new SetupDataDesignerRemoteOperator(); - - /** - * 单例 - */ - public static SetupDataDesignerRemoteOperator getInstance() { - return INSTANCE; - } - - @Override - public ConfData getData(String prefix, String tenantId) { - return ConfigRepository.getInstance().getConfigByConfigsCache(getConfigNameSpace(prefix), () -> { - ConfData data = new ConfData(); - data.setDataMap(ConfigReadUtils.getData(prefix, tenantId)); - data.setMap(ConfigReadUtils.getClassInfo(prefix, tenantId)); - return data; - }); - } - - private String getConfigNameSpace(String id) { - - if (StringUtils.isEmpty(id)) { - throw new IllegalArgumentException("id cannot be null"); - } - int length = id.length(); - for (int i = 0; i < length; i++) { - if (PrefixHandler.SEPERATOR == id.charAt(i)) { - return id.substring(0, i); - } - } - throw new IllegalArgumentException("cannot resolve namespace of " + id); - } -} diff --git a/designer-realize/src/main/java/com/fr/design/cell/editor/FormulaCellEditor.java b/designer-realize/src/main/java/com/fr/design/cell/editor/FormulaCellEditor.java index 8b189bf1c1..012dd5d41e 100644 --- a/designer-realize/src/main/java/com/fr/design/cell/editor/FormulaCellEditor.java +++ b/designer-realize/src/main/java/com/fr/design/cell/editor/FormulaCellEditor.java @@ -6,7 +6,6 @@ package com.fr.design.cell.editor; import com.fr.base.BaseFormula; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.formula.FormulaFactory; -import com.fr.design.formula.FunctionConstants; import com.fr.design.formula.UIFormula; import com.fr.design.mainframe.ElementCasePane; import com.fr.grid.Grid; @@ -23,12 +22,11 @@ public class FormulaCellEditor extends com.fr.design.cell.editor.AbstractCellEdi private UIFormula formulaEditorPane = null; - /** + /** * Constructor. */ public FormulaCellEditor(ElementCasePane ePane) { - super(ePane); - SwingUtilities.invokeLater(() -> FunctionConstants.PLUGIN.getGroupName()); + super(ePane); } /**