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 ef321e708..2c5db9a31 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 @@ -38,6 +38,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; 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.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; @@ -964,7 +965,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { if (parameters.length < 1 && editor4CalPane.update().size() < 1) { return parameterMap; } - ParameterInputPane pPane = new ParameterInputPane(parameters); + ParameterInputPane pPane = new ParameterInputNoneListenerPane(parameters); pPane.showSmallWindow(new JFrame(), new DialogActionAdapter() { @Override public void doOk() { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 43097e366..d640f84f4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -287,7 +287,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { // 悬浮元素 PropertyItem floatElement = new PropertyItem(KEY_FLOAT_ELEMENT, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Float_Element"), "floatelement", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART}, - new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT, PropertyMode.DUCHAMP_REPORT}); + new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT}); // 控件设置 PropertyItem widgetSettings = new PropertyItem(KEY_WIDGET_SETTINGS, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Settings"), "widgetsettings", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.FORM, PropertyMode.POLY}, diff --git a/designer-base/src/main/java/com/fr/design/parameter/ParameterInputNoneListenerPane.java b/designer-base/src/main/java/com/fr/design/parameter/ParameterInputNoneListenerPane.java new file mode 100644 index 000000000..2484a4b20 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/parameter/ParameterInputNoneListenerPane.java @@ -0,0 +1,30 @@ +package com.fr.design.parameter; + +import com.fr.design.editor.ValueEditorPane; +import com.fr.stable.ParameterProvider; + +/** + * 与ParameterInputPane区别在于 输入参数不会触发模板修改事件 + * + * 适用于参数不需要存储在模板中的场景 + * + * @author hades + * @version 11.0 + * Created by hades on 2022/5/13 + */ +public class ParameterInputNoneListenerPane extends ParameterInputPane { + + public ParameterInputNoneListenerPane(ParameterProvider[] parameters) { + super(parameters); + } + + public ParameterInputNoneListenerPane(ParameterProvider[] parameters, boolean allowBlank) { + super(parameters, allowBlank); + } + + @Override + protected void initTextListener(ValueEditorPane textF) { + // 这边输入参数 不用联动模板变化激活保存按钮 相关参数并不存储在模板 + // do nothing + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java index f4440fb5c..9ceec2a2f 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java @@ -48,6 +48,17 @@ public class AlphaFineConstants { public static final int HOT_ITEMS = 6; + /** + * 限制搜索字符长度 + */ + public static final int LEN_LIMIT = 50; + + /** + * 帮助文档搜索间隔(ms) api限制了1s之内只能搜索一次 + * + */ + public static final long DOCUMENT_SEARCH_GAP = 1000; + public static final Dimension FULL_SIZE = new Dimension(680, 460); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java index b6763f8cf..db89cf348 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java @@ -146,6 +146,8 @@ public class AlphaFineFrame extends JFrame { private UILabel clearLabel; + private JPanel tabPane; + private CellType selectedType; private String beforeSearchStr = StringUtils.EMPTY; @@ -365,7 +367,7 @@ public class AlphaFineFrame extends JFrame { labelPane.add(labelContentPane); labelPane.setPreferredSize(new Dimension(AlphaFineConstants.FULL_SIZE.width, 30)); - JPanel tabPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 20, 10)); + tabPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 20, 10)); tabPane.setBackground(Color.WHITE); List selectedLabelList = createSelectedLabelList(); selectedType = selectedLabelList.get(0).getCellType(); @@ -624,6 +626,7 @@ public class AlphaFineFrame extends JFrame { clearLabel.setVisible(true); SearchTooltipPopup.getInstance().show(searchTextFieldWrapperPane); } + tabPane.repaint(); }); timer.start(); @@ -644,28 +647,58 @@ public class AlphaFineFrame extends JFrame { beforeSearchStr = StringUtils.EMPTY; return; } + String lowerCaseSearchText = preProcessSearchText(searchTextField.getText().toLowerCase()); if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isNeedSegmentationCheckbox()) { - //是高级搜索 - if (searchTextField.getText().toLowerCase().startsWith(ADVANCED_SEARCH_MARK)) { - segmentationResult = SegmentationManager.getInstance().startSegmentation(getStoreText(searchTextField.getText().toLowerCase())); - } - //是普通搜索 - else { - segmentationResult = SegmentationManager.getInstance().startSegmentation(searchTextField.getText().toLowerCase()); - } + dealSegmentationSearch(lowerCaseSearchText); } else { - if (StringUtils.isEmpty(getRealSearchText(searchTextField.getText()))) { - segmentationResult = null; - } else { - segmentationResult = new String[]{getRealSearchText(searchTextField.getText())}; - } + dealNormalSearch(); } DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().getHistorySearch().push(searchTextField.getText()); - doSearch(searchTextField.getText().toLowerCase()); + doSearch(lowerCaseSearchText); beforeSearchStr = searchTextField.getText(); SearchTooltipPopup.getInstance().hide(); } + /** + * 普通搜索 + */ + private void dealNormalSearch() { + String searchText = preProcessSearchText(searchTextField.getText()); + if (StringUtils.isEmpty(getRealSearchText(searchText))) { + segmentationResult = null; + } else { + segmentationResult = new String[]{getRealSearchText(searchText)}; + } + } + + /** + * 分词搜索 + */ + private void dealSegmentationSearch(String lowerCaseSearchText) { + //是高级搜索 + if (searchTextField.getText().toLowerCase().startsWith(ADVANCED_SEARCH_MARK)) { + segmentationResult = SegmentationManager.getInstance().startSegmentation(getStoreText(lowerCaseSearchText)); + } + //是普通搜索 + else { + segmentationResult = SegmentationManager.getInstance().startSegmentation(lowerCaseSearchText); + } + } + + /** + * 文本预处理 限制长度 + * + * @param text + * @return + */ + private String preProcessSearchText(String text) { + if (text.length() > AlphaFineConstants.LEN_LIMIT) { + return text.substring(0, AlphaFineConstants.LEN_LIMIT); + } else { + return text; + } + } + private void dealWithSearchResult() { final AlphaCellModel model = searchResultList.getSelectedValue(); if (model != null) { @@ -717,7 +750,7 @@ public class AlphaFineFrame extends JFrame { * */ private void reSearch() { - String text = this.searchTextField.getText().toLowerCase(); + String text = preProcessSearchText(this.searchTextField.getText().toLowerCase()); if (StringUtils.isEmpty(text)) { return; } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java index a2a1a7037..54d6d1402 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java @@ -17,7 +17,9 @@ import com.fr.json.JSONObject; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Created by XiaXiang on 2017/3/27. @@ -68,12 +70,17 @@ public class ActionSearchManager implements AlphaFineSearchProvider { return lessModelList; } List updateActions = UpdateActionManager.getUpdateActionManager().getUpdateActions(); + Set searchKeySet = new HashSet<>(); for (UpdateActionModel updateActionModel : updateActions) { for (int j = 0; j < searchText.length; j++) { AlphaFineHelper.checkCancel(); if (StringUtils.isNotBlank(updateActionModel.getSearchKey())) { - if (updateActionModel.getSearchKey().contains(searchText[j]) && updateActionModel.getAction().isEnabled()) { + if (updateActionModel.getSearchKey().contains(searchText[j]) + && updateActionModel.getAction().isEnabled() + // 老alphaFine就有问题 加个去重 + && !searchKeySet.contains(updateActionModel.getSearchKey())) { filterModelList.add(new ActionModel(updateActionModel.getActionName(), updateActionModel.getParentName(), updateActionModel.getAction())); + searchKeySet.add(updateActionModel.getSearchKey()); } } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java index bc3b214d0..3ea1f2db2 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java @@ -15,6 +15,7 @@ import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; +import java.util.concurrent.TimeUnit; /** @@ -67,6 +68,7 @@ public class DocumentSearchManager implements AlphaFineSearchProvider { } searchResult = new SearchResult(); for (int j = 0; j < searchText.length; j++) { + long start = System.currentTimeMillis(); String url = AlphaFineConstants.DOCUMENT_SEARCH_URL + searchText[j]; try { String result = HttpToolbox.get(url); @@ -88,6 +90,15 @@ public class DocumentSearchManager implements AlphaFineSearchProvider { } catch (Exception e) { FineLoggerFactory.getLogger().error("document search error: " + e.getMessage()); } + // 计算等待时间 防止1s内搜索多次 + long spentTime = (System.currentTimeMillis() - start); + long waitTime = AlphaFineConstants.DOCUMENT_SEARCH_GAP - spentTime; + if (waitTime > 0 && j != searchText.length - 1) { + try { + TimeUnit.MILLISECONDS.sleep(waitTime); + } catch (Exception ignored) { + } + } } lessModelList.clear(); moreModelList.clear(); diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java b/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java index da8b559e8..4149753f7 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java @@ -124,6 +124,10 @@ public class DesignerStartup extends Activator { listenEvent(LazyStartupEvent.INSTANCE, new Listener(Integer.MIN_VALUE) { @Override public void on(Event event, Null param) { + // 有可能被插件之类的 强制启动了 判断下 + if (FineEmbedServer.isRunning()) { + return; + } startEmbeddedServer(); } }); diff --git a/designer-realize/src/main/java/com/fr/start/module/optimized/TenantDBAdapter4Designer.java b/designer-realize/src/main/java/com/fr/start/module/optimized/TenantDBAdapter4Designer.java index d45913e1a..ad2485d69 100644 --- a/designer-realize/src/main/java/com/fr/start/module/optimized/TenantDBAdapter4Designer.java +++ b/designer-realize/src/main/java/com/fr/start/module/optimized/TenantDBAdapter4Designer.java @@ -9,6 +9,7 @@ import com.fr.event.Null; import com.fr.exit.ConfigToPropMigrator; import com.fr.stable.db.tenant.TenantDBAdapter; import com.fr.start.event.LazyStartupEvent; +import com.fr.start.server.EmbedServerEvent; /** * @author hades @@ -24,7 +25,15 @@ public class TenantDBAdapter4Designer extends TenantDBAdapter { @Override public void on(Event event, Null param) { TenantDBAdapter4Designer.super.start(); - afterStart(); + } + }); + + listenEvent(EmbedServerEvent.BeforeStart, new Listener() { + @Override + public void on(Event event, Null param) { + if (DaoSelectorFactory.getDaoSelector().useCacheDao()) { + beforeEmbedServerStart(); + } } }); @@ -33,7 +42,7 @@ public class TenantDBAdapter4Designer extends TenantDBAdapter { } } - private void afterStart() { + private void beforeEmbedServerStart() { DesignerEnvManager.getEnvManager().setPropertiesUsable(false); DaoSwitcher.executeSwitch(); ConfigToPropMigrator.getInstance().deletePropertiesCache();