From 4a753e5782e25ee8aca17fdd203783aa9d89a91a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 4 Nov 2022 09:46:26 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-80695=20=E6=A8=A1=E6=9D=BF=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E7=BA=A7=E5=88=AB=E6=9F=A5=E6=89=BE=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E4=BA=8C=E6=9C=9F=20=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/replace/action/ITChecker.java | 123 ++++++++++++++++++ .../content/component/ComponentType.java | 2 +- .../actions/replace/info/ComponentInfo.java | 4 +- .../actions/replace/info/WidgetInfo.java | 2 +- .../replace/ui/ITReplaceMainDialog.java | 31 ++++- .../replace/ui/ITReplaceNorthPanel.java | 9 +- 6 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/ITChecker.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ITChecker.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ITChecker.java new file mode 100644 index 000000000..fddee0f03 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ITChecker.java @@ -0,0 +1,123 @@ +package com.fr.design.actions.replace.action; + +import com.fr.design.actions.replace.info.Info; +import com.fr.design.i18n.Toolkit; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 校验JS、公式、控件、组件 + * 比较用户的所有对应类别的改动,不论是否选中要替换,只要整体类别改动过就算模板内容改动过 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-11-03 + */ +public enum ITChecker { + WIDGET_CHECK_TAG(Toolkit.i18nText("Fine-Design_Basic_Widget")), + FORMULA_CHECK_TAG(Toolkit.i18nText("Fine-Design_Basic_Formula")), + JS_CHECK_TAG(Toolkit.i18nText("Fine-Design_Replace_JS")), + COMPONENT_CHECK_TAG(Toolkit.i18nText("Fine-Design_Replace_Component")) + ; + + + String name; + + ITChecker(String name) { + this.name = name; + } + + + /** + * 匹配 + * + * @param name 对应的检查类型 + * @return 对应的检查checker + */ + @Nullable + public static ITChecker match(String name) { + ITChecker[] values = ITChecker.values(); + for (ITChecker value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } + + public static List checkList = new ArrayList<>(); + public static Map appearTimesMap = new HashMap<>(); + + + /** + * 更新对应的check列表 + * + * @param list 查找后的searchList + */ + public static void updateCheckInfo(List list) { + checkList = list; + updateCheckMapFromList(list); + } + + /** + * 根据列表来更新对应元素的匹配Map + * + * @param list 更新后的checkList + */ + private static void updateCheckMapFromList(List list) { + appearTimesMap.clear(); + for (Info info : list) { + String showStr = info.getContent().getOldShowStr(); + if (appearTimesMap.containsKey(showStr)) { + //如果已经存过了就个数+1 + appearTimesMap.put(showStr, appearTimesMap.get(showStr) + 1); + } else { + //没有的话就把个数初始化为1个 + appearTimesMap.put(showStr, 1); + } + } + } + + + /** + * 判断是否修改过 + * + * @param list 重新获取的当前模板最新的list + * @return 修改过返回true + */ + public boolean isChanged(List list) { + if (list.size() != checkList.size()) { + //如果总的数据的数量变了,就说明肯定修改过,没必要再进行下一步 + return true; + } + return isChangedCheckByMap(list); + } + + /** + * 通过检查Map来比较是否修改过 + * + * @param list 传入的用于比较的list + * @return 修改过则返回true + */ + private boolean isChangedCheckByMap(List list) { + for (Info info : list) { + String showStr = info.getContent().getOldShowStr(); + if (appearTimesMap.containsKey(showStr)) { + //如果map中存在对应的值,就抵消,个数-1 + appearTimesMap.put(showStr, appearTimesMap.get(showStr) - 1); + if (appearTimesMap.get(showStr) < 0) { + //如果map中的值小于0了,就说明数量对不上,修改过 + return true; + } + } else { + //如果存在map中没存的值就没必要继续下去了,肯定改过 + return true; + } + } + return false; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java index 13712a570..de747cbea 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java @@ -340,7 +340,7 @@ public enum ComponentType implements DealWithInfoValue { String str = widget.getWidgetName(); info.updateOldStr(widget.getWidgetName(), findStr); ShowValueUtils.updateAfterReplaceStr(info, str, findStr, replaceStr); - widget.setWidgetName(widget.getWidgetName().replaceAll(findStr, replaceStr)); + widget.setWidgetName(ShowValueUtils.replaceAll(widget.getWidgetName(), findStr, replaceStr)); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java index 77993c53d..c5667c7c4 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java @@ -3,6 +3,7 @@ package com.fr.design.actions.replace.info; import com.fr.design.actions.replace.action.content.component.ComponentType; import com.fr.design.actions.replace.action.content.component.SearchComponentAction; import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.form.ui.Widget; @@ -92,7 +93,8 @@ public class ComponentInfo implements Info { } SearchComponentAction.getInstance().search4Infos(jTemplate); List list = SearchComponentAction.getInstance().getComponentInfos(); - String replacedName = ((Widget)this.getContent().getReplaceObject()).getWidgetName().replace(searchStr, replaceStr); + + String replacedName = ShowValueUtils.replaceAll(((Widget)this.getContent().getReplaceObject()).getWidgetName(), searchStr, replaceStr); for (ComponentInfo info : list) { String widgetName = ((Widget)info.getContent().getReplaceObject()).getWidgetName(); if (StringUtils.equals(replacedName, widgetName)) { diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java index 4ebae73da..051105bfa 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java @@ -156,7 +156,7 @@ public class WidgetInfo implements Info, DealWithInfoValue { return false; } if (!this.isWaterMark() && this.isNeed2Check()) { - String replacedName = ((Widget)this.getContent().getReplaceObject()).getWidgetName().replace(searchStr, replaceStr); + String replacedName = ShowValueUtils.replaceAll(((Widget)this.getContent().getReplaceObject()).getWidgetName(), searchStr, replaceStr); for (WidgetName name : CheckUtils.getNeed2CheckWidgetsName(jTemplate)) { String widgetName = name.getName(); if (StringUtils.equals(replacedName, widgetName)) { diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java index 78daf0a09..199006296 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java @@ -1,6 +1,7 @@ package com.fr.design.actions.replace.ui; +import com.fr.design.actions.replace.action.ITChecker; import com.fr.design.actions.replace.action.ShowSearchResultAction; import com.fr.design.actions.replace.action.setting.SettingController; @@ -37,6 +38,7 @@ import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; +import static com.fr.design.actions.replace.ui.ITTableEditorPane.editTable; import static com.fr.design.actions.replace.ui.ITTableEditorPane.getEditTable; /** @@ -210,10 +212,13 @@ public class ITReplaceMainDialog extends UIDialog { * 模板内容替换相关 */ private void replace4Content() { + String type = ((UITextField) (northPane.getFindCombobox().getEditor().getEditorComponent())).getText(); String searchStr = ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText(); String replaceStr = ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).getText(); clearContentCount(); - if (isITReplaceValid() && checkTemplateChanged(searchContentResultList)) { + if (isITReplaceValid() && checkTemplateChanged(searchContentResultList, type)) { + ShowSearchResultAction searchAction = ShowSearchResultAction.match(GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem())); + ITChecker.updateCheckInfo(searchAction.addMatchResult(searchStr, searchAction.showSearchValue(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()))); if (StringUtils.equals(getSearchStr(), searchStr)) { String str = GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem()); //如果是控件或组件才要进行合法性校验 @@ -257,7 +262,9 @@ public class ITReplaceMainDialog extends UIDialog { if (!info.getContent().isWrongful() && info.getContent().isSelected()) { info.setValue(info, searchStr, replaceStr, info.getContent().getOperatorArray()); } - info.getContent().setReplaced(true); + if (info.getContent().isSelected()) { + info.getContent().setReplaced(true); + } } northPane.getResultLabel().setText(ShowValueUtils.getResultTip(searchContentResultList.size(), contentReplaceCount, contentReplaceFailedCount)); southPanel.getTableEditorPane().update(); @@ -338,10 +345,18 @@ public class ITReplaceMainDialog extends UIDialog { } - private Boolean checkTemplateChanged(List searchResultList) { - for (Info info : searchResultList) { - if (!info.getContent().isReplaced() && !info.checkValid()) { - return false; + private Boolean checkTemplateChanged(List searchResultList, String type) { + ITChecker checker = ITChecker.match(type); + //对于JS、控件、组件、公式进行全量校验,不只针对当前选中的地方,这边先这样处理 + if (checker != null) { + ShowSearchResultAction searchAction = ShowSearchResultAction.match(GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem())); + return !checker.isChanged(searchAction.addMatchResult(searchStr, searchAction.showSearchValue(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()))); + } else { + //其他地方走各自的校验逻辑 + for (Info info : searchResultList) { + if (!info.getContent().isReplaced() && !info.checkValid()) { + return false; + } } } return true; @@ -436,7 +451,9 @@ public class ITReplaceMainDialog extends UIDialog { ShowSearchResultAction searchAction = ShowSearchResultAction.match(GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem())); //搜索 if (searchAction != null) { - searchContentResultList = searchAction.addMatchResult(searchStr, searchAction.showSearchValue(jTemplate)); + List showValueList = searchAction.showSearchValue(jTemplate); + searchContentResultList = searchAction.addMatchResult(searchStr, showValueList); + ITChecker.updateCheckInfo(searchContentResultList); itTableEditor.add(searchContentResultList); northPane.getResultLabel().setText(ShowValueUtils.getResultTip(searchContentResultList.size(), contentReplaceCount, contentReplaceFailedCount)); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java index a11886c2c..6739d3a42 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java @@ -5,6 +5,7 @@ import com.fr.design.actions.replace.action.setting.SettingContent; import com.fr.design.actions.replace.action.setting.SettingController; import com.fr.design.data.datapane.TableDataComboBox; import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; @@ -51,7 +52,7 @@ public class ITReplaceNorthPanel { private UILabel resultLabel; private UIComboBox findCombobox; private UIComboBox rangeCombobox; - private JCheckBox matchRadioButton; + private UICheckBox matchRadioButton; private UILabel iconLabel; private UIComboBox findInputCombobox; private UIComboBox replaceInputCombobox; @@ -201,7 +202,7 @@ public class ITReplaceNorthPanel { super.setEditor(new ITComboBoxEditor()); } }; - matchRadioButton = new JCheckBox(Toolkit.i18nText("Fine-Design_Replace_WildCard")); + matchRadioButton = new UICheckBox(Toolkit.i18nText("Fine-Design_Replace_WildCard")); matchRadioButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -702,11 +703,11 @@ public class ITReplaceNorthPanel { this.rangeCombobox = rangeCombobox; } - public JCheckBox getMatchRadioButton() { + public UICheckBox getMatchRadioButton() { return matchRadioButton; } - public void setMatchRadioButton(JCheckBox checkBox) { + public void setMatchRadioButton(UICheckBox checkBox) { this.matchRadioButton = checkBox; }