diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java index cc2c1988e..5bced089a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java @@ -59,7 +59,7 @@ public class SearchDSColumnFormulaAction implements SearchCellFormula { private void addFormulaInfos2ArrayFromResult(ITContent content, DSColumn dsColumn, List formulaInfos) { char formulaLabel = '='; - if (dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == formulaLabel) { + if (dsColumn.getResult() != null && dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == formulaLabel) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(dsColumn); //高级-显示值 diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java index d0a00644e..cff74e9e0 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java @@ -61,20 +61,6 @@ public class SearchCellJSAction implements SearchJS { //单元格如果是图表还需要额外处理 if (cell.getValue() instanceof ChartCollection) { SearchChartJSAction.getInstance().searchChartJS((ChartCollection) cell.getValue(), ITContent.copy(cellInfo.getContent()), jsInfos); - //List> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) cell.getValue()); - //List nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) cell.getValue()); - ////图表-样式-标签以及图表-特效-条件显示 - //ITContent htmlITContent = ITContent.copy(cellInfo.getContent()); - //htmlITContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); - //SearchJSUtils.addJSInfosFromHtmlLabel(htmlITContent, htmlLabels, jsInfos); - ////图表-特效-交互属性 - //ITContent conditionContent = ITContent.copy(cellInfo.getContent()); - //conditionContent.addOtherPos( - // Toolkit.i18nText("Fine-Design_Chart_Chart"), - // Toolkit.i18nText("Fine-Design_Chart_Animation_Special"), - // Toolkit.i18nText("Fine-Design_Chart_Interactive") - //); - //SearchJSUtils.addJSInfosFromNameJS(conditionContent, nameJavaScripts, jsInfos); } } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchComponentJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchComponentJSAction.java new file mode 100644 index 000000000..881b0d166 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchComponentJSAction.java @@ -0,0 +1,87 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.base.chart.BaseChartCollection; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.content.component.SearchComponentAction; +import com.fr.design.actions.replace.info.ComponentInfo; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.container.WTitleLayout; + +import java.util.ArrayList; +import java.util.List; + +/** + * 决策报表的图表组件中特殊存在的JS + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-20 + */ +public class SearchComponentJSAction implements SearchJS { + private SearchComponentJSAction() { + } + + @Override + public void searchJSFromObject(JTemplate jTemplate, List jsInfos) { + List componentJSInfos = new ArrayList<>(); + addJSInfos2ListFromComponent(jTemplate, componentJSInfos); + jsInfos.addAll(componentJSInfos); + } + + private void addJSInfos2ListFromComponent(JTemplate jTemplate, List componentJSInfos) { + SearchComponentAction searchComponentAction = SearchComponentAction.getInstance(); + searchComponentAction.search4Infos(jTemplate); + List componentInfoList = searchComponentAction.getComponentInfos(); + for (ComponentInfo componentInfo : componentInfoList) { + Object o = componentInfo.getContent().getReplaceObject(); + if (o instanceof WTitleLayout) { + if (((WTitleLayout) o).getBodyBoundsWidget().getWidget() instanceof ChartEditor) { + ChartEditor chartEditor = (ChartEditor) ((WTitleLayout) o).getBodyBoundsWidget().getWidget(); + SearchChartJSAction searchChartJSAction = SearchChartJSAction.getInstance(); + for (BaseChartCollection chartCollection : chartEditor.getChartCollections()) { + if (chartCollection instanceof ChartCollection) { + searchChartJSAction.searchChartJS((ChartCollection) chartCollection, ITContent.copy(componentInfo.getContent()), componentJSInfos); + } + + } + } + } + } + } + + /** + * 对外开放获取对象的方法 + * + * @return + */ + public static SearchComponentJSAction getInstance() { + return SearchComponentJSActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchComponentJSActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchComponentJSAction instance; + + SearchComponentJSActionEnum() { + instance = new SearchComponentJSAction(); + } + + /** + * 获取单例的方法 + * + * @return + */ + public SearchComponentJSAction getInstance() { + return instance; + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java index 01e12dbd8..9bd972a1f 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java @@ -32,6 +32,8 @@ public class SearchJSManager implements SearchAction, SearchManager { register(SearchWebJSAction.getInstance()); //从悬浮元素 register(SearchFloatJSAction.getInstance()); + //从决策报表图表组件 + register(SearchComponentJSAction.getInstance()); } @Override diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java index ed78c6278..ec57cfcc8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java @@ -93,6 +93,7 @@ public enum ReplaceObject implements DealWithInfoValue { } } else { Listener listener = ((Listener) ((info.getContent().getReplaceObject()))); + info.updateOldStr(listener.getName(), findStr); listener.setName(listener.getName().replaceAll(findStr, replaceStr)); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java index e9ff2286c..a552f4f84 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java @@ -25,13 +25,9 @@ public class ITReplaceWestPanel { UIToggleButton contentButton = new UIToggleButton(Toolkit.i18nText("Fine-Design_Basic_Templates_Content")); contentButton.setSelected(true); contentButton.setBorderPainted(false); - UIToggleButton settingButton = new UIToggleButton("//"); - settingButton.setBorderPainted(false); leftJpanel.add(contentButton); leftJpanel.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, new Color(218, 218, 221))); - leftJpanel.add(settingButton); - //由于要砍掉设置项这部分,这边先暂时填充一下 - int labelNum = 13; + int labelNum = 14; for (int i = 0; i < labelNum; i++) { leftJpanel.add(new UILabel("")); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java index 729f1e6a8..6ec96038e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java @@ -38,11 +38,14 @@ public class SearchJSUtils { * 从Listener中获取JS */ public static void searchJSFromListener(List jsInfos, ITContent content) { - JavaScript javaScript = ((Listener) (content.getReplaceObject())).getAction(); - if (javaScript instanceof JavaScriptImpl) { - ITContent newContent = ITContent.copy(content); - newContent.setReplaceObject(javaScript); - SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + if (content.getReplaceObject() instanceof Listener){ + Listener listener = (Listener) (content.getReplaceObject()); + JavaScript javaScript = listener.getAction(); + if (javaScript instanceof JavaScriptImpl) { + ITContent newContent = ITContent.copy(content); + newContent.setReplaceObject(listener); + SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + } } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java index 6f4e7e84f..003fe1baf 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java @@ -11,8 +11,10 @@ import com.fr.stable.collections.combination.Pair; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.regex.Matcher; import java.util.regex.Pattern; + /** * 用来处理展示内容的工具类(截取、高亮) * @@ -22,6 +24,12 @@ import java.util.regex.Pattern; */ public class ShowValueUtils { + public static final String ANY_THING = "?"; + public static final String NUMBER = "#"; + public static final String ENGLISH = "$"; + public static final String ANY_THING_REGEX = "."; + public static final String NUMBER_REGEX = "[0-9]"; + public static final String ENGLISH_REGEX = "[\u4e00-\u9fa5a-zA-Z]"; /** * 获取除内容外其他一次性展示所有的内容(名称、水印...) * @@ -48,14 +56,20 @@ public class ShowValueUtils { * @return 替换后的字符串 */ public static String replaceAll(String str, String regex, String replacement) { - if (ITReplaceMainDialog.isMatched()){ - return str.replaceAll(Pattern.quote(regex), replacement); - }else { - return str.replace(regex, replacement); - } - + return str.replace(regex, replacement); } + /** + * 转换正则表达式 + * @param regex + * @return + */ + public static String changeRegex(String regex){ + regex = regex.replace(NUMBER,NUMBER_REGEX); + regex = regex.replace(ENGLISH, ENGLISH_REGEX); + regex = regex.replace(ANY_THING,ANY_THING_REGEX); + return regex; + } /** * 获取匹配的字符串的位置(开始位置,结束位置) @@ -93,7 +107,7 @@ public class ShowValueUtils { */ public static void updateHighlight(Info info, String replaceStr) { String s = info.getInfoShowStr(info); - s = ShowValueUtils.replaceAll(s, info.getContent().getLastSearchStr(), "" + replaceStr + ""); + s = s.replace(info.getContent().getLastSearchStr(), "" + replaceStr + ""); info.getContent().setShowStr( "
" + s + "
" ); @@ -110,4 +124,23 @@ public class ShowValueUtils { public static boolean isNotEmpty(Collection collection) { return collection != null && collection.size() > 0; } + + + /** + * 支持正则表达式的indexOf + * @param str + * @param regex + * @return + */ + public static int indexOf(String str, String regex){ + CharSequence inputStr = str; + int failReturn = -1; + String patternStr = changeRegex(regex); + Pattern pattern = Pattern.compile(patternStr); + Matcher matcher = pattern.matcher(inputStr); + if(matcher.find()){ + return matcher.start(); + } + return failReturn; + } }