From 539dd8ca4ce4778ceeba2afaebec012e3e475586 Mon Sep 17 00:00:00 2001 From: shine Date: Tue, 21 Dec 2021 14:45:30 +0800 Subject: [PATCH 01/19] =?UTF-8?q?CHART-22090=20=E6=9D=A1=E4=BB=B6=E5=B1=9E?= =?UTF-8?q?=E6=80=A7-=E9=A2=9C=E8=89=B2=E6=8E=A7=E4=BB=B6=E6=AE=8B?= =?UTF-8?q?=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/component/VanChartUIListControlPane.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java index 8a18814ebd..07f35672c7 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java @@ -25,6 +25,7 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Point; +import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -210,6 +211,16 @@ public abstract class VanChartUIListControlPane extends UIListControlPane implem public void doCancel() { setVisible(false); } + + @Override + public void setVisible(boolean b) { + //把一些可能没隐藏的子弹框隐藏 比如 边框-颜色弹框 + for (Window window : getOwnedWindows()) { + window.setVisible(false); + } + + super.setVisible(b); + } } } From 8638c51f4ce98c08d66b9ad59c944c822b54359c Mon Sep 17 00:00:00 2001 From: shine Date: Tue, 21 Dec 2021 14:48:14 +0800 Subject: [PATCH 02/19] update --- .../chart/designer/component/VanChartUIListControlPane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java index 07f35672c7..ce8253b981 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartUIListControlPane.java @@ -214,12 +214,12 @@ public abstract class VanChartUIListControlPane extends UIListControlPane implem @Override public void setVisible(boolean b) { + super.setVisible(b); + //把一些可能没隐藏的子弹框隐藏 比如 边框-颜色弹框 for (Window window : getOwnedWindows()) { window.setVisible(false); } - - super.setVisible(b); } } From 75a342690caa19f7ccb9dd7dd6d4ace4816605de Mon Sep 17 00:00:00 2001 From: shine Date: Tue, 21 Dec 2021 18:58:26 +0800 Subject: [PATCH 03/19] =?UTF-8?q?CHART-22076=20fix:fvs.cpt=20=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=A0=BC=E8=AE=BE=E7=BD=AE=E8=B6=85=E9=93=BE=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=B6=85=E9=93=BE=20=E6=96=87=E6=9C=AC=E7=99=BD?= =?UTF-8?q?=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/utils/gui/AdjustWorkBookDefaultStyleUtils.java | 7 ++++++- .../fr/design/mainframe/HyperlinkGroupPaneActionImpl.java | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java index 760fc3c808..a3121e36ca 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java @@ -17,6 +17,7 @@ public class AdjustWorkBookDefaultStyleUtils { private static final Color TEMPLATE_BACKGROUND = new Color(16, 11, 43); private static final Color CELL_ELEMENT_BORDER = new Color(110, 110, 110); + private static final Color CELL_ELEMENT_FONT_FOREGROUND = Color.WHITE; private static Color currentStoryBack = null; @@ -31,7 +32,7 @@ public class AdjustWorkBookDefaultStyleUtils { public static void adjustCellElement(CellElement cellElement) { if (DesignModeContext.isDuchampMode()) { Style style = cellElement.getStyle(); - style = style.deriveFRFont(style.getFRFont().applyForeground(Color.WHITE)); + style = style.deriveFRFont(style.getFRFont().applyForeground(CELL_ELEMENT_FONT_FOREGROUND)); style = style.deriveBorder(0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, @@ -40,6 +41,10 @@ public class AdjustWorkBookDefaultStyleUtils { } } + public static Color adjustCellElementFontForeground(Color color) { + return DesignModeContext.isDuchampMode() ? CELL_ELEMENT_FONT_FOREGROUND : color; + } + public static void adjustFloatElement(FloatElement floatElement) { if (DesignModeContext.isDuchampMode()) { Style style = floatElement.getStyle(); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java b/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java index 71a37e42f0..d90b7e8ec3 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java @@ -6,6 +6,7 @@ import com.fr.design.designer.TargetComponent; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.general.FRFont; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; @@ -82,7 +83,7 @@ public class HyperlinkGroupPaneActionImpl implements HyperlinkGroupPaneActionPro frFont = frFont.applyForeground(Color.blue); frFont = frFont.applyUnderline(Constants.LINE_THIN); } else { - frFont = frFont.applyForeground(Color.black); + frFont = frFont.applyForeground(AdjustWorkBookDefaultStyleUtils.adjustCellElementFontForeground(Color.black)); frFont = frFont.applyUnderline(Constants.LINE_NONE); } editCellElement.setStyle(elementStyle.deriveFRFont(frFont)); From e49d512d1861fa87ea7fc73d84e42b7d5ad6732e Mon Sep 17 00:00:00 2001 From: shine Date: Wed, 22 Dec 2021 10:18:51 +0800 Subject: [PATCH 04/19] =?UTF-8?q?CHART-21877=20fix:fvs.cpt=20=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E8=AE=BE=E7=BD=AE=E5=8D=95=E5=85=83=E6=A0=BC=E8=83=8C?= =?UTF-8?q?=E6=99=AF=E9=A2=9C=E8=89=B2=E5=90=8E=20=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=A0=BC=E5=AD=97=E4=BD=93=E6=98=AF=E9=BB=91=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/style/BorderPane.java | 13 +++++++++---- .../utils/gui/AdjustWorkBookDefaultStyleUtils.java | 9 ++++++++- .../fr/design/actions/utils/ReportActionUtils.java | 5 +++-- .../cell/settingpane/AbstractCellAttrPane.java | 2 ++ .../mainframe/cell/settingpane/CellStylePane.java | 12 +++++++----- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java index 9f948e7a18..a3151b2e71 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java @@ -17,14 +17,19 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.style.color.NewColorSelectBox; - +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.stable.Constants; import com.fr.stable.CoreConstants; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.GridLayout; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -198,7 +203,7 @@ public class BorderPane extends AbstractBasicStylePane implements GlobalNameObse public Style update(Style style) { if (style == null) { - style = Style.DEFAULT_STYLE; + style = AdjustWorkBookDefaultStyleUtils.adjustCellElement(Style.DEFAULT_STYLE); } if (backgroundPane.currentPane.isBackgroundChange()) { diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java index a3121e36ca..bfa742f9b1 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/AdjustWorkBookDefaultStyleUtils.java @@ -32,13 +32,20 @@ public class AdjustWorkBookDefaultStyleUtils { public static void adjustCellElement(CellElement cellElement) { if (DesignModeContext.isDuchampMode()) { Style style = cellElement.getStyle(); + style = adjustCellElement(style); + cellElement.setStyle(style); + } + } + + public static Style adjustCellElement(Style style) { + if (DesignModeContext.isDuchampMode()) { style = style.deriveFRFont(style.getFRFont().applyForeground(CELL_ELEMENT_FONT_FOREGROUND)); style = style.deriveBorder(0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER, 0, CELL_ELEMENT_BORDER); - cellElement.setStyle(style); } + return style; } public static Color adjustCellElementFontForeground(Color color) { diff --git a/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java b/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java index 2c0b73fe95..a40397b7f3 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java +++ b/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java @@ -4,6 +4,7 @@ import com.fr.base.Style; import com.fr.design.actions.cell.style.StyleActionInterface; import com.fr.design.mainframe.DesignOperationEvent; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.event.EventDispatcher; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; @@ -15,7 +16,7 @@ import com.fr.report.cell.TemplateCellElement; import com.fr.report.elementcase.ElementCase; import com.fr.report.elementcase.TemplateElementCase; -import java.awt.*; +import java.awt.Rectangle; public class ReportActionUtils { private ReportActionUtils() { @@ -113,7 +114,7 @@ public class ReportActionUtils { CellElement editCellElement = report.getCellElement(((CellSelection) sel).getColumn(), ((CellSelection) sel).getRow()); if (editCellElement == null) { - return Style.DEFAULT_STYLE; + return AdjustWorkBookDefaultStyleUtils.adjustCellElement(Style.DEFAULT_STYLE); } //peter:直接返回当前编辑元素的Style diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java index 83ef31eaa9..358da10b5d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/AbstractCellAttrPane.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.cell.settingpane; import com.fr.design.mainframe.AbstractAttrPane; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; import com.fr.report.cell.DefaultTemplateCellElement; @@ -53,6 +54,7 @@ public abstract class AbstractCellAttrPane extends AbstractAttrPane { TemplateCellElement cellElement = elementCase.getTemplateCellElement(cs.getColumn(), cs.getRow()); if (cellElement == null) { cellElement = new DefaultTemplateCellElement(cs.getColumn(), cs.getRow()); + AdjustWorkBookDefaultStyleUtils.adjustCellElement(cellElement); } this.cellElement = cellElement; elementCase.addCellElement(this.cellElement); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java index 049b0111ae..0130d0fad0 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java @@ -5,16 +5,18 @@ import com.fr.design.actions.utils.ReportActionUtils; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.cell.settingpane.style.StylePane; import com.fr.design.style.BorderUtils; +import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils; import com.fr.design.utils.gui.GUICoreUtils; - import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.elementcase.TemplateElementCase; -import javax.swing.*; +import javax.swing.JFrame; +import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Rectangle; /** * @author zhou @@ -101,12 +103,12 @@ public class CellStylePane extends AbstractCellAttrPane { TemplateCellElement cellElement = elementCase.getTemplateCellElement(column, row); if (cellElement == null) { cellElement = new DefaultTemplateCellElement(column, row); + AdjustWorkBookDefaultStyleUtils.adjustCellElement(cellElement); elementCase.addCellElement(cellElement); } Style style = cellElement.getStyle(); if (style == null) { - style = Style.DEFAULT_STYLE; - + style = AdjustWorkBookDefaultStyleUtils.adjustCellElement(Style.DEFAULT_STYLE); } style = stylePane.updateStyle(style); cellElement.setStyle(style); From 79e42b26a4d35178ea088222bf5c43f0ff7328d3 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 14:03:15 +0800 Subject: [PATCH 05/19] =?UTF-8?q?REPORT-64741=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=8F=AF=E6=9B=B4=E6=96=B0=E6=8F=90=E9=86=92=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8-=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=AB=AF=E5=AE=89=E8=A3=85=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=AB=98=E4=BA=8E=E5=BD=93=E5=89=8D=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E7=89=88=E6=9C=AC=E7=9A=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 重新确定了组件是否可以被安装的规则。 安装新组件时,如果之前没有安装过该UID的组件,则允许安装; 否则将会比较新旧组件的兼容性和版本高低,以确定是否安装新组件。 优先满足兼容性需求,兼容性相同时,再考虑组件版本. 兼容 + 高版本 > 兼容 + 低版本 > 不兼容 + 高版本 > 不兼容 + 低版本 2. 安装新的组件reu时,删除组内旧的组件reu文件 【改动思路】 同上 --- .../fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java | 2 +- .../java/com/fr/design/mainframe/share/util/InstallUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index b8cb0e6788..646a4c8634 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -179,7 +179,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { //安装 File file = new File(filePath); try { - if (file.exists() && getDefaultGroup().installModule(file)) { + if (file.exists() && getDefaultGroup().installUniqueIdModule(file)) { ShareUtils.recordInstallTime(file.getName(), System.currentTimeMillis()); ComponentCollector.getInstance().collectCmpDownLoad(widget.getUuid()); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java index 610f688a46..b3c711c01a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java @@ -112,7 +112,7 @@ public class InstallUtils { private static boolean installReuFile(Group group, File chosenFile, long installTime) { try { - if (!group.installModule(chosenFile)) { + if (!group.installUniqueIdModule(chosenFile)) { return false; } ShareUtils.recordInstallTime(chosenFile.getName(), installTime); From 0376e4742a8a7cbcf05f458c640e39d2a7d5b603 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 11:12:07 +0800 Subject: [PATCH 06/19] =?UTF-8?q?REPORT-64811=20=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=95=86=E5=9F=8E=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?reu=E6=96=87=E4=BB=B6=E5=90=8D=E4=B8=AD=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 使用商城组件数据中的fileLoca字段值作为本地reu文件名,该字段与oss服务器中reu文件的 文件名保持一致. 设计器在下载安装组件时,不对reu文件进行重命名操作, 即本地安装组件时,使用原本地reu 文件名,在线安装商城组件时,使用原oss服务器中reu文件名. 【改动思路】 同上 --- .../mainframe/share/ui/block/OnlineWidgetBlock.java | 11 ++++++++++- .../fr/design/mainframe/share/util/DownloadUtils.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 646a4c8634..74651ccae7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -150,6 +150,14 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { } } + private String createLocalReuFilename() { + String filename = widget.getFileLoca(); + if (StringUtils.isEmpty(filename) || !filename.endsWith(".reu")) { + filename = widget.getName() + "." + widget.getUuid() + ".reu"; + } + return filename; + } + private void downLoadWidget() { if (OnlineWidgetRepoPane.getInstance().isShowPackagePanel()) { ComponentCollector.getInstance().collectDownloadPktNum(); @@ -170,7 +178,8 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { protected Boolean doInBackground() { String filePath; try { - filePath = DownloadUtils.download(widget.getId(), widget.getName() + "." + widget.getUuid(), process); + String filename = createLocalReuFilename(); + filePath = DownloadUtils.download(widget.getId(), filename, process); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index 96c2cc28c6..18cb938387 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -67,7 +67,7 @@ public class DownloadUtils { long totalSize = entity.getContentLength(); InputStream content = entity.getContent(); - filePath = StableUtils.pathJoin(realPath, fileName + ".reu"); + filePath = StableUtils.pathJoin(realPath, fileName); StableUtils.makesureFileExist(new File(filePath)); FileOutputStream writer = new FileOutputStream(filePath); byte[] data = new byte[PluginConstants.BYTES_NUM]; From 8d46130275772012f8b8b859db8157cba50ccf60 Mon Sep 17 00:00:00 2001 From: pengda Date: Thu, 23 Dec 2021 15:23:26 +0800 Subject: [PATCH 07/19] =?UTF-8?q?CHART-22211=20=E7=94=98=E7=89=B9=E5=9B=BE?= =?UTF-8?q?=E7=94=A8=E6=96=87=E4=BB=B6=E6=95=B0=E6=8D=AE=E9=9B=86=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/component/GanttTableDataContentPane.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java index b8a2001147..82bb26e438 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/data/data/component/GanttTableDataContentPane.java @@ -93,13 +93,13 @@ public class GanttTableDataContentPane extends AbstractTableDataContentPane{ ganttDefinition.setEndTime(endTime == null ? StringUtils.EMPTY : String.valueOf(endTime)); Object markTime = markerTimeComboBox.getSelectedItem(); - ganttDefinition.setMarkTime(isNoneObject(markTime) ? StringUtils.EMPTY : String.valueOf(markTime)); + ganttDefinition.setMarkTime(isNoneObject(markTime) ? null : String.valueOf(markTime)); Object process = processComboBox.getSelectedItem(); - ganttDefinition.setProgress(isNoneObject(process) ? StringUtils.EMPTY : String.valueOf(process)); + ganttDefinition.setProgress(isNoneObject(process) ? null : String.valueOf(process)); Object taskID = taskIDComboBox.getSelectedItem(); - ganttDefinition.setLinkID(isNoneObject(taskID) ? StringUtils.EMPTY : String.valueOf(taskID)); + ganttDefinition.setLinkID(isNoneObject(taskID) ? null : String.valueOf(taskID)); } private boolean isNoneObject(Object markTime) { @@ -117,9 +117,9 @@ public class GanttTableDataContentPane extends AbstractTableDataContentPane{ seriesComboBox.setSelectedItem(ganttDefinition.getSeriesName()); startTimeComboBox.setSelectedItem(ganttDefinition.getStartTime()); endTimeComboBox.setSelectedItem(ganttDefinition.getEndTime()); - markerTimeComboBox.setSelectedItem(StringUtils.isEmpty(ganttDefinition.getMarkTime()) ? NONE : ganttDefinition.getMarkTime()); - processComboBox.setSelectedItem(StringUtils.isEmpty(ganttDefinition.getProgress()) ? NONE : ganttDefinition.getProgress()); - taskIDComboBox.setSelectedItem(StringUtils.isEmpty(ganttDefinition.getLinkID()) ? NONE : ganttDefinition.getLinkID()); + markerTimeComboBox.setSelectedItem(ganttDefinition.getMarkTime() == null ? NONE : ganttDefinition.getMarkTime()); + processComboBox.setSelectedItem(ganttDefinition.getProgress() == null ? NONE : ganttDefinition.getProgress()); + taskIDComboBox.setSelectedItem(ganttDefinition.getLinkID() == null ? NONE : ganttDefinition.getLinkID()); } } From eb35507eb4216b0ece2c8242fd53debe0e1cf1eb Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 14:03:15 +0800 Subject: [PATCH 08/19] =?UTF-8?q?REPORT-64741=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=8F=AF=E6=9B=B4=E6=96=B0=E6=8F=90=E9=86=92=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8-=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=AB=AF=E5=AE=89=E8=A3=85=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=AB=98=E4=BA=8E=E5=BD=93=E5=89=8D=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E7=89=88=E6=9C=AC=E7=9A=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 重新确定了组件是否可以被安装的规则。 安装新组件时,如果之前没有安装过该UID的组件,则允许安装; 否则将会比较新旧组件的兼容性和版本高低,以确定是否安装新组件。 优先满足兼容性需求,兼容性相同时,再考虑组件版本. 兼容 + 高版本 > 兼容 + 低版本 > 不兼容 + 高版本 > 不兼容 + 低版本 2. 安装新的组件reu时,删除组内旧的组件reu文件 【改动思路】 同上 --- .../fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java | 2 +- .../java/com/fr/design/mainframe/share/util/InstallUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index b8cb0e6788..646a4c8634 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -179,7 +179,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { //安装 File file = new File(filePath); try { - if (file.exists() && getDefaultGroup().installModule(file)) { + if (file.exists() && getDefaultGroup().installUniqueIdModule(file)) { ShareUtils.recordInstallTime(file.getName(), System.currentTimeMillis()); ComponentCollector.getInstance().collectCmpDownLoad(widget.getUuid()); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java index 610f688a46..b3c711c01a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java @@ -112,7 +112,7 @@ public class InstallUtils { private static boolean installReuFile(Group group, File chosenFile, long installTime) { try { - if (!group.installModule(chosenFile)) { + if (!group.installUniqueIdModule(chosenFile)) { return false; } ShareUtils.recordInstallTime(chosenFile.getName(), installTime); From eb17d1c17f3979829df1cdeb74094e8f3d98232c Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 23 Dec 2021 11:12:07 +0800 Subject: [PATCH 09/19] =?UTF-8?q?REPORT-64811=20=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=95=86=E5=9F=8E=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?reu=E6=96=87=E4=BB=B6=E5=90=8D=E4=B8=AD=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 使用商城组件数据中的fileLoca字段值作为本地reu文件名,该字段与oss服务器中reu文件的 文件名保持一致. 设计器在下载安装组件时,不对reu文件进行重命名操作, 即本地安装组件时,使用原本地reu 文件名,在线安装商城组件时,使用原oss服务器中reu文件名. 【改动思路】 同上 --- .../mainframe/share/ui/block/OnlineWidgetBlock.java | 11 ++++++++++- .../fr/design/mainframe/share/util/DownloadUtils.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 646a4c8634..74651ccae7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -150,6 +150,14 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { } } + private String createLocalReuFilename() { + String filename = widget.getFileLoca(); + if (StringUtils.isEmpty(filename) || !filename.endsWith(".reu")) { + filename = widget.getName() + "." + widget.getUuid() + ".reu"; + } + return filename; + } + private void downLoadWidget() { if (OnlineWidgetRepoPane.getInstance().isShowPackagePanel()) { ComponentCollector.getInstance().collectDownloadPktNum(); @@ -170,7 +178,8 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { protected Boolean doInBackground() { String filePath; try { - filePath = DownloadUtils.download(widget.getId(), widget.getName() + "." + widget.getUuid(), process); + String filename = createLocalReuFilename(); + filePath = DownloadUtils.download(widget.getId(), filename, process); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index 96c2cc28c6..18cb938387 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -67,7 +67,7 @@ public class DownloadUtils { long totalSize = entity.getContentLength(); InputStream content = entity.getContent(); - filePath = StableUtils.pathJoin(realPath, fileName + ".reu"); + filePath = StableUtils.pathJoin(realPath, fileName); StableUtils.makesureFileExist(new File(filePath)); FileOutputStream writer = new FileOutputStream(filePath); byte[] data = new byte[PluginConstants.BYTES_NUM]; From 4a1df52f26c14ebc25a6d355024978b73f4950de Mon Sep 17 00:00:00 2001 From: Starryi Date: Tue, 28 Dec 2021 15:14:55 +0800 Subject: [PATCH 10/19] =?UTF-8?q?REPORT-64738=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=9C=A8=E7=BA=BF=E7=BB=84=E4=BB=B6=E5=BA=93=E4=B8=AD?= =?UTF-8?q?=E5=8F=AF=E8=A7=81=E7=BB=84=E4=BB=B6=E5=BA=94=E5=8E=BB=E9=87=8D?= =?UTF-8?q?=E4=B8=94=E4=BB=85=E6=98=BE=E7=A4=BA=E5=85=BC=E5=AE=B9=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=9A=84=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 获取组件包中子组件json数据接口添加当前设计器版本参数 2. 下载组件包的接口添加当前设计器版本参数 【改动思路】 同上 --- .../mainframe/share/util/DownloadUtils.java | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index 18cb938387..b6375b1d69 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -30,6 +30,9 @@ import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.interfaces.RSAPublicKey; import java.security.spec.X509EncodedKeySpec; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; /** * created by Harrison on 2020/05/27 @@ -55,9 +58,9 @@ public class DownloadUtils { @NotNull public static String download(String id, String fileName, com.fr.design.extra.Process process) throws Exception { - CloseableHttpResponse fileRes = getHttpResponse(REUSES_URL, id); + CloseableHttpResponse fileRes = postDownloadHttpResponse(REUSES_URL, id); if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) { - fileRes = getHttpResponse(fileRes.getHeaders("Location")[0].getValue()); + fileRes = getDownloadHttpResponse(fileRes.getHeaders("Location")[0].getValue()); } if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_SHARE); @@ -93,9 +96,11 @@ public class DownloadUtils { public static String downloadPackage(String id, String fileName, CancelCheck cancelCheck) throws Exception { - CloseableHttpResponse fileRes = getHttpResponse(PACKAGE_REUSES_URL, id); + Map params = new HashMap<>(); + params.put("designerVersion", ProductConstants.RELEASE_VERSION); + CloseableHttpResponse fileRes = postDownloadHttpResponse(PACKAGE_REUSES_URL, id, params); if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) { - fileRes = getHttpResponse(fileRes.getHeaders("Location")[0].getValue()); + fileRes = getDownloadHttpResponse(fileRes.getHeaders("Location")[0].getValue()); } String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_PACKAGE_SHARE); String filePath; @@ -130,21 +135,33 @@ public class DownloadUtils { } } - private static CloseableHttpResponse getHttpResponse(String url, String id) throws Exception { + private static CloseableHttpResponse postDownloadHttpResponse(String url, String id) throws Exception { + return postDownloadHttpResponse(url, id, new HashMap<>()); + } + + private static CloseableHttpResponse postDownloadHttpResponse(String url, String id, Map params) throws Exception { //先登录一下。不然可能失败 CloseableHttpClient client = createClient(); FineLoggerFactory.getLogger().info("login fr-market"); FineLoggerFactory.getLogger().info("start download widget {}", id); - HttpUriRequest file = RequestBuilder.post() + RequestBuilder builder = RequestBuilder.post() .setHeader("User-Agent", "Mozilla/5.0") - .setUri(url).addParameter("id", encrypt(id)).addParameter("userId", - String.valueOf(DesignerEnvManager.getEnvManager().getDesignerLoginUid())) - .build(); - return client.execute(file); + .setUri(url) + .addParameter("id", encrypt(id)) + .addParameter("userId", String.valueOf(DesignerEnvManager.getEnvManager().getDesignerLoginUid())); + + if (params != null) { + Set keys = params.keySet(); + for (String key: keys) { + builder.addParameter(key, params.get(key)); + } + } + + return client.execute(builder.build()); } - private static CloseableHttpResponse getHttpResponse(String url) throws Exception { + private static CloseableHttpResponse getDownloadHttpResponse(String url) throws Exception { //先登录一下。不然可能失败 CloseableHttpClient client = createClient(); HttpUriRequest file = RequestBuilder.get() From b74c40c8b5192222ba47073f56386cf5d25e4b73 Mon Sep 17 00:00:00 2001 From: Tommy Date: Wed, 29 Dec 2021 16:25:05 +0800 Subject: [PATCH 11/19] =?UTF-8?q?REPORT-64920=20=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E7=B2=98=E8=B4=B4=E6=8E=A5=E5=8F=A3=E6=8A=A5=E9=94=99=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/clipboard/ClipboardFilter.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java index 140a46579d..22fff0d178 100644 --- a/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java +++ b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java @@ -27,11 +27,7 @@ public abstract class ClipboardFilter { } public static T cut(T selection) { - - ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); - Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); - providers.addAll(clipboardHandlerProviders); - for (ClipboardHandlerProvider provider : providers) { + for (ClipboardHandlerProvider provider : getClipboardHandlerProviders()) { if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).cut(selection); } @@ -40,10 +36,7 @@ public abstract class ClipboardFilter { } public static T copy(T selection) { - ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); - Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); - providers.addAll(clipboardHandlerProviders); - for (ClipboardHandlerProvider provider : providers) { + for (ClipboardHandlerProvider provider : getClipboardHandlerProviders()) { if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).copy(selection); } @@ -52,15 +45,27 @@ public abstract class ClipboardFilter { } public static T paste(T selection) { - ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); - Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); - providers.addAll(clipboardHandlerProviders); - - for (ClipboardHandlerProvider provider : providers) { + for (ClipboardHandlerProvider provider : getClipboardHandlerProviders()) { if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).paste(selection); } } return selection; } + + private static Set getClipboardHandlerProviders() { + Set providers = new HashSet<>(); + + for (ClipboardHandlerProvider clipboardHandlerProvider : clipboardHandlerProviders) { + providers.add(clipboardHandlerProvider); + } + + ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); + Set pluginProviders = manager.getArray(ClipboardHandlerProvider.XML_TAG); + for (ClipboardHandlerProvider clipboardHandlerProvider : pluginProviders) { + providers.add(clipboardHandlerProvider); + } + + return providers; + } } From 5cdbe2ac25a8274ef19062c92f6e012196ee27a9 Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 30 Dec 2021 16:01:52 +0800 Subject: [PATCH 12/19] =?UTF-8?q?REPORT-64009=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=86=85=E5=AF=B9macOS12=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 13 + .../design/actions/file/PreferencePane.java | 15 +- .../gui/ifilechooser/ExtensionFilter.java | 25 ++ .../gui/ifilechooser/FileChooserArgs.java | 109 +++++++ .../gui/ifilechooser/FileChooserFactory.java | 44 +++ .../gui/ifilechooser/FileChooserProvider.java | 13 + .../ifilechooser/JavaFxNativeFileChooser.java | 23 +- .../gui/ifilechooser/SwingFileChooser.java | 130 +++++++++ .../ifilechooser/SwingImageFileChooser.java | 276 ++++++++++++++++++ .../com/fr/design/os/impl/PMDialogAction.java | 5 +- .../com/fr/design/os/impl/SupportOSImpl.java | 44 +++ .../background/image/ImageFileChooser.java | 39 +-- .../java/com/fr/design/upm/UpmBridge.java | 18 +- .../main/java/com/fr/env/RemoteEnvPane.java | 6 +- .../series/PlotSeries/MapCustomPane.java | 13 +- .../share/action/InstallComponentAction.java | 28 +- 16 files changed, 733 insertions(+), 68 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/gui/ifilechooser/ExtensionFilter.java create mode 100644 designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserArgs.java create mode 100644 designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserFactory.java create mode 100644 designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingFileChooser.java create mode 100644 designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingImageFileChooser.java diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index b8d63ca7a7..85b4e4e78f 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -22,6 +22,7 @@ import com.fr.design.login.DesignerLoginType; import com.fr.design.login.config.DesignerLoginConfigManager; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.notification.SnapChatConfig; +import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.port.DesignerPortContext; import com.fr.design.style.color.ColorSelectConfigManager; import com.fr.design.update.push.DesignerPushUpdateConfigManager; @@ -202,6 +203,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private boolean showTemplateMissingPlugin = true; + private boolean useOptimizedUPM4Adapter; + /** * DesignerEnvManager. */ @@ -639,6 +642,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.showTemplateMissingPlugin = showTemplateMissingPlugin; } + public boolean isUseOptimizedUPM4Adapter() { + return useOptimizedUPM4Adapter; + } + + public void setUseOptimizedUPM4Adapter(boolean useOptimizedUPM4Adapter) { + this.useOptimizedUPM4Adapter = useOptimizedUPM4Adapter; + } + /** * 知否自动备份 * @@ -1829,6 +1840,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } this.setEmbedServerLazyStartup(reader.getAttrAsBoolean("embedServerLazyStartup", false)); this.setShowTemplateMissingPlugin(reader.getAttrAsBoolean("showTemplateMissingPlugin", true)); + this.setUseOptimizedUPM4Adapter(reader.getAttrAsBoolean("useOptimizedUPM4Adapter", SupportOSImpl.MACOS_12_VERSION_ADAPTER.support())); } private void readReportPaneAttributions(XMLableReader reader) { @@ -2101,6 +2113,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (!this.isShowTemplateMissingPlugin()) { writer.attr("showTemplateMissingPlugin", this.isShowTemplateMissingPlugin()); } + writer.attr("useOptimizedUPM4Adapter", this.isUseOptimizedUPM4Adapter()); writer.end(); } 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 24e359d6f0..e3dd02e950 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 @@ -15,9 +15,10 @@ import com.fr.design.gui.ibutton.UIColorButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIDictionaryComboBox; +import com.fr.design.gui.ifilechooser.FileChooserArgs; +import com.fr.design.gui.ifilechooser.FileChooserFactory; import com.fr.design.gui.ifilechooser.FileChooserProvider; import com.fr.design.gui.ifilechooser.FileSelectionMode; -import com.fr.design.gui.ifilechooser.JavaFxNativeFileChooser; import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.iprogressbar.UIProgressBarUI; @@ -28,7 +29,6 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.VerticalFlowLayout; -import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.os.impl.SupportOSImpl; @@ -50,8 +50,6 @@ import com.fr.transaction.Worker; import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; import com.fr.workspace.server.vcs.git.config.GcConfig; -import com.sun.javafx.tk.FileChooserType; -import javafx.stage.FileChooser; import javax.swing.BorderFactory; import javax.swing.BoxLayout; @@ -500,9 +498,8 @@ public class PreferencePane extends BasicPane { @Override public void actionPerformed(ActionEvent evt) { FileChooserProvider fileChooserProvider = - new JavaFxNativeFileChooser.Builder(). - fileSelectionMode(FileSelectionMode.DIR). - build(); + FileChooserFactory.createFileChooser(FileChooserArgs.newBuilder(). + setFileSelectionMode(FileSelectionMode.DIR).build()); int saveValue = fileChooserProvider.showDialog(chooseDirBtn); if (saveValue == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooserProvider.getSelectedFile(); @@ -715,7 +712,8 @@ public class PreferencePane extends BasicPane { this.portEditor.setValue(new Integer(designerEnvManager.getEmbedServerPort())); if (useOptimizedUPMCheckbox != null) { - useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM()); + useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM() + || DesignerEnvManager.getEnvManager().isUseOptimizedUPM4Adapter()); } useUniverseDBMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseUniverseDBM()); @@ -790,6 +788,7 @@ public class PreferencePane extends BasicPane { designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected()); designerEnvManager.setEmbedServerLazyStartup(this.embedServerLazyStartupCheckBox.isSelected()); designerEnvManager.setImageCompress(this.imageCompressPanelCheckBox.isSelected()); + designerEnvManager.setUseOptimizedUPM4Adapter(this.useOptimizedUPMCheckbox.isSelected()); VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); vcsConfigManager.setSaveInterval(this.saveIntervalEditor.getValue()); vcsConfigManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/ExtensionFilter.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/ExtensionFilter.java new file mode 100644 index 0000000000..9ec582f693 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/ExtensionFilter.java @@ -0,0 +1,25 @@ +package com.fr.design.gui.ifilechooser; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/12/29 + */ +public class ExtensionFilter { + + private final String des; + private final String[] extensions; + + public ExtensionFilter(String des, String... extensions) { + this.des = des; + this.extensions = extensions; + } + + public String getDes() { + return des; + } + + public String[] getExtensions() { + return extensions; + } +} diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserArgs.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserArgs.java new file mode 100644 index 0000000000..b011e5b350 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserArgs.java @@ -0,0 +1,109 @@ +package com.fr.design.gui.ifilechooser; + +/** + * 文件选择器可设置的参数集合 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/12/21 + */ +public class FileChooserArgs { + + private final FileSelectionMode fileSelectionMode; + private final String filterDes; + private final String[] extensions; + private final String selectedPath; + private final ExtensionFilter[] filters; + private final String tipText; + private final boolean multiSelectionEnabled; + + public static Builder newBuilder() { + return new Builder(); + } + + private FileChooserArgs(Builder builder) { + this.fileSelectionMode = builder.fileSelectionMode; + this.filterDes = builder.filterDes; + this.extensions = builder.extensions; + this.selectedPath = builder.selectedPath; + this.filters = builder.filters; + this.tipText = builder.tipText; + this.multiSelectionEnabled = builder.multiSelectionEnabled; + } + + public FileSelectionMode getFileSelectionMode() { + return fileSelectionMode; + } + + public String getFilterDes() { + return filterDes; + } + + public String[] getExtensions() { + return extensions; + } + + public String getSelectedPath() { + return selectedPath; + } + + public ExtensionFilter[] getFilters() { + return filters; + } + + public String getTipText() { + return tipText; + } + + public boolean isMultiSelectionEnabled() { + return multiSelectionEnabled; + } + + public static class Builder { + + private FileSelectionMode fileSelectionMode; + private String filterDes; + private String[] extensions; + private String selectedPath; + private ExtensionFilter[] filters = new ExtensionFilter[0]; + private String tipText; + private boolean multiSelectionEnabled; + + public Builder setFileSelectionMode(FileSelectionMode fileSelectionMode) { + this.fileSelectionMode = fileSelectionMode; + return this; + } + + public Builder setFilter(String filterDes, String... extensions) { + this.filterDes = filterDes; + this.extensions = extensions; + return this; + } + + public Builder setSelectedPath(String selectedPath) { + this.selectedPath = selectedPath; + return this; + } + + public Builder setFilters(ExtensionFilter[] filters) { + this.filters = filters; + return this; + } + + public Builder setTipText(String tipText) { + this.tipText = tipText; + return this; + } + + public Builder setMultiSelectionEnabled(boolean multiSelectionEnabled) { + this.multiSelectionEnabled = multiSelectionEnabled; + return this; + } + + public FileChooserArgs build() { + return new FileChooserArgs(this); + } + } + + +} diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserFactory.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserFactory.java new file mode 100644 index 0000000000..36a53c8dc9 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserFactory.java @@ -0,0 +1,44 @@ +package com.fr.design.gui.ifilechooser; + +import com.fr.design.i18n.Toolkit; +import com.fr.design.os.impl.SupportOSImpl; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/12/21 + */ +public class FileChooserFactory { + + public static FileChooserProvider createFileChooser(FileChooserArgs fileChooserArgs) { + if (SupportOSImpl.OLD_STYLE_CHOOSER.support()) { + return new SwingFileChooser.Builder(). + setFileSelectionMode(fileChooserArgs.getFileSelectionMode()). + setFileFilter(fileChooserArgs.getFilterDes(), fileChooserArgs.getExtensions()). + setSelectedFile(fileChooserArgs.getSelectedPath()). + setMultiSelectionEnabled(fileChooserArgs.isMultiSelectionEnabled()). + setTipText(fileChooserArgs.getTipText()). + setFileFilter(fileChooserArgs.getFilters()).build(); + } else { + return new JavaFxNativeFileChooser.Builder(). + fileSelectionMode(fileChooserArgs.getFileSelectionMode()). + filter(fileChooserArgs.getFilterDes(), fileChooserArgs.getExtensions()). + currentDirectory(fileChooserArgs.getSelectedPath()). + title(fileChooserArgs.getTipText()). + filters(fileChooserArgs.getFilters()).build(); + } + } + + public static FileChooserProvider createImageFileChooser() { + if (SupportOSImpl.OLD_STYLE_CHOOSER.support()) { + return new SwingImageFileChooser(); + } else { + return new JavaFxNativeFileChooser.Builder(). + fileSelectionMode(FileSelectionMode.FILE). + title(Toolkit.i18nText("Fine-Design_Basic_Open")). + filter(Toolkit.i18nText("Fine-Design_Basic_Image_Image_Files"), "*.jpg", "*.gif", "*.png", "*.bmp"). + build(); + } + } + +} diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserProvider.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserProvider.java index aa95fe27bd..a5d7e97303 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserProvider.java +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/FileChooserProvider.java @@ -9,4 +9,17 @@ public interface FileChooserProvider { File getSelectedFile(); int showDialog(Component parent); + + + default int showOpenDialog(Component parent, String approveButtonText) { + return -1; + } + + default void setMultiSelectionEnabled(boolean multiple) { + + } + + default void setCurrentDirectory(File file) { + + } } diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/JavaFxNativeFileChooser.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/JavaFxNativeFileChooser.java index fc4b8e3682..4d36883240 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/JavaFxNativeFileChooser.java +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/JavaFxNativeFileChooser.java @@ -4,6 +4,8 @@ package com.fr.design.gui.ifilechooser; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; import com.sun.javafx.application.PlatformImpl; import javafx.application.Platform; import javafx.scene.Scene; @@ -173,10 +175,20 @@ public class JavaFxNativeFileChooser implements FileChooserProvider { this.fileSelectionMode = fileSelectionMode; } + @Override public void setCurrentDirectory(File currentDirectory) { this.currentDirectory = currentDirectory; } + @Override + public void setMultiSelectionEnabled(boolean multiple) { + this.setSelectionMode(multiple ? FileSelectionMode.MULTIPLE_FILE : FileSelectionMode.FILE); + } + + @Override + public int showOpenDialog(Component parent, String approveButtonText) { + return this.showDialog(parent); + } public static class Builder { private FileSelectionMode fileSelectionMode = FileSelectionMode.FILE; @@ -190,7 +202,9 @@ public class JavaFxNativeFileChooser implements FileChooserProvider { } public Builder title(String title) { - this.title = title; + if (StringUtils.isNotEmpty(title)) { + this.title = title; + } return this; } @@ -199,6 +213,13 @@ public class JavaFxNativeFileChooser implements FileChooserProvider { return this; } + public Builder filters(ExtensionFilter[] filters) { + for (ExtensionFilter filter : filters) { + this.filters = ArrayUtils.add(this.filters, new FileChooser.ExtensionFilter(filter.getDes(), filter.getExtensions())); + } + return this; + } + public Builder filter(String des, String... extensions) { if (extensions != null) { this.filters = new FileChooser.ExtensionFilter[]{new FileChooser.ExtensionFilter(des, extensions)}; diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingFileChooser.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingFileChooser.java new file mode 100644 index 0000000000..942c3430c1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingFileChooser.java @@ -0,0 +1,130 @@ +package com.fr.design.gui.ifilechooser; + +import com.fr.common.annotations.Negative; +import com.fr.design.upm.UpmUtils; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; +import java.awt.Component; +import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/12/21 + */ +@Negative(until = "2022-6-1") +class SwingFileChooser implements FileChooserProvider { + + private final JFileChooser fileChooser; + private final Builder builder; + + private SwingFileChooser(Builder builder) { + fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(builder.fileSelectionMode); + fileChooser.setFileFilter(builder.fileFilter); + fileChooser.setSelectedFile(builder.selectedFile); + fileChooser.setMultiSelectionEnabled(builder.multiSelectionEnabled); + this.builder = builder; + } + + @Override + public File[] getSelectedFiles() { + return fileChooser.getSelectedFiles(); + } + + @Override + public File getSelectedFile() { + return fileChooser.getSelectedFile(); + } + + @Override + public int showDialog(Component parent) { + if (StringUtils.isEmpty(builder.tipText)) { + return fileChooser.showOpenDialog(parent); + } else { + return fileChooser.showDialog(parent, builder.tipText); + } + } + + @Override + public int showOpenDialog(Component parent, String approveButtonText) { + return fileChooser.showDialog(parent, approveButtonText); + } + + @Override + public void setCurrentDirectory(File file) { + fileChooser.setCurrentDirectory(file); + } + + @Override + public void setMultiSelectionEnabled(boolean multiple) { + fileChooser.setMultiSelectionEnabled(multiple); + } + + /** + * 和一般builder不同的是 setXXX还做参数转换逻辑 + */ + public static class Builder { + + private int fileSelectionMode = JFileChooser.FILES_ONLY; + private FileFilter fileFilter; + private File selectedFile; + private boolean multiSelectionEnabled; + private String tipText; + + public Builder setFileSelectionMode(FileSelectionMode fileSelectionMode) { + if (FileSelectionMode.DIR.equals(fileSelectionMode)) { + this.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY; + } else if (FileSelectionMode.FILE.equals(fileSelectionMode)) { + this.fileSelectionMode = JFileChooser.FILES_ONLY; + } else if (FileSelectionMode.MULTIPLE_FILE.equals(fileSelectionMode)) { + this.fileSelectionMode = JFileChooser.FILES_AND_DIRECTORIES; + } + return this; + } + + public Builder setFileFilter(String des, String... extension) { + if (StringUtils.isNotEmpty(des) && ArrayUtils.isNotEmpty(extension)) { + this.fileFilter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(extension)); + } + return this; + } + + public Builder setFileFilter(ExtensionFilter[] extensionFilters) { + StringBuilder desBuilder = new StringBuilder(); + String[] extensions = new String[0]; + for (ExtensionFilter extensionFilter : extensionFilters) { + desBuilder.append(extensionFilter.getDes()).append(" "); + extensions = ArrayUtils.addAll(extensions, UpmUtils.findMatchedExtension(extensionFilter.getExtensions())); + } + if (ArrayUtils.isNotEmpty(extensionFilters)) { + this.fileFilter = new FileNameExtensionFilter(desBuilder.toString().trim(), extensions); + } + return this; + } + + public Builder setSelectedFile(String selectedPath) { + if (StringUtils.isNotEmpty(selectedPath)) { + this.selectedFile = new File(selectedPath); + } + return this; + } + + public Builder setMultiSelectionEnabled(boolean multiSelectionEnabled) { + this.multiSelectionEnabled = multiSelectionEnabled; + return this; + } + + public Builder setTipText(String tipText) { + this.tipText = tipText; + return this; + } + + public SwingFileChooser build() { + return new SwingFileChooser(this); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingImageFileChooser.java b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingImageFileChooser.java new file mode 100644 index 0000000000..3c0c6c1afc --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingImageFileChooser.java @@ -0,0 +1,276 @@ +package com.fr.design.gui.ifilechooser; + +import com.fr.base.BaseUtils; +import com.fr.common.annotations.Negative; +import com.fr.design.DesignerEnvManager; +import com.fr.design.style.ChooseFileView; +import com.fr.design.style.background.image.ExpandFileChooser; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.Enumeration; +import java.util.Hashtable; +import javax.swing.filechooser.FileFilter; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/12/30 + */ +@Negative(until = "2022-6-1") +class SwingImageFileChooser extends ExpandFileChooser implements FileChooserProvider { + + public SwingImageFileChooser() { + super(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Image_Compress"),com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Open")); + ExampleFileFilter bothFilter = new ExampleFileFilter( + new String[]{"jpg", "gif", "png", "bmp"}, + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Image_Image_Files")); + bothFilter.setExtensionListInDescription(true); + this.addChoosableFileFilter(bothFilter); + this.setAcceptAllFileFilterUsed(false); + + // Create Custom FileView + ChooseFileView fileView = new ChooseFileView(); + fileView.putIcon("jpg", BaseUtils.readIcon("/com/fr/base/images/dialog/file/jpgFile.gif")); + fileView.putIcon("gif", BaseUtils.readIcon("/com/fr/base/images/dialog/file/gifFile.gif")); + fileView.putIcon("png", BaseUtils.readIcon("/com/fr/base/images/dialog/file/pngFile.png")); + fileView.putIcon("bmp", BaseUtils.readIcon("/com/fr/base/images/dialog/file/bmpFile.gif")); + + this.setFileView(fileView); + } + + @Override + public int showDialog(Component parent, String approveButtonText) { + return super.showDialog(parent, approveButtonText); + } + + @Override + public ActionListener checkAction() { + return new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + DesignerEnvManager.getEnvManager().setImageCompress(isCheckSelected()); + DesignerEnvManager.getEnvManager().saveXMLFile(); + } + }; + + } + + @Override + public int showDialog(Component parent) { + return showOpenDialog(parent); + } + + /** + * A convenience implementation of FileFilter that filters out + * all files except for those type extensions that it knows about. + *

D:\finereport\develop\code\test\TestCase\WEB-INF\reportlets\TestCase\01903.cpt + *

+ * Extensions are of the type ".foo", which is typically found on + * Windows and Unix boxes, but not on Macinthosh. Case is ignored. + *

+ * Example - create a new filter that filerts out all files + * but gif and jpg image files: + *

+ * JFileChooser chooser = new JFileChooser(); + * ExampleFileFilter filter = new ExampleFileFilter( + * new String{"gif", "jpg"}, "JPEG & GIF Images") + * chooser.addChoosableFileFilter(filter); + * chooser.showOpenDialog(this); + * + * @author Jeff Dinkins + * @version 1.12 12/03/01 + */ + class ExampleFileFilter extends FileFilter { + private Hashtable filters = null; + private String description = null; + private String fullDescription = null; + private boolean useExtensionsInDescription = true; + + /** + * Creates a file filter. If no filters are added, then all + * files are accepted. + * + * @see #addExtension + */ + public ExampleFileFilter() { + this.filters = new Hashtable(); + } + + /** + * Creates a file filter that accepts files with the given extension. + * Example: new ExampleFileFilter("jpg"); + * + * @see #addExtension + */ + public ExampleFileFilter(String extension) { + this(extension, null); + } + + /** + * Creates a file filter that accepts the given file type. + * Example: new ExampleFileFilter("jpg", "JPEG Image Images"); + *

+ * Note that the "." before the extension is not needed. If + * provided, it will be ignored. + * + * @see #addExtension + */ + public ExampleFileFilter(String extension, String description) { + this(); + if (extension != null) addExtension(extension); + if (description != null) setDescription(description); + } + + /** + * Creates a file filter from the given string array. + * Example: new ExampleFileFilter(String {"gif", "jpg"}); + *

+ * Note that the "." before the extension is not needed adn + * will be ignored. + * + * @see #addExtension + */ + public ExampleFileFilter(String[] filters) { + this(filters, null); + } + + /** + * Creates a file filter from the given string array and description. + * Example: new ExampleFileFilter(String {"gif", "jpg"}, "Gif and JPG Images"); + *

+ * Note that the "." before the extension is not needed and will be ignored. + * + * @see #addExtension + */ + public ExampleFileFilter(String[] filters, String description) { + this(); + for (int i = 0; i < filters.length; i++) { + // add filters one by one + addExtension(filters[i]); + } + if (description != null) setDescription(description); + } + + /** + * Return true if this file should be shown in the directory pane, + * false if it shouldn't. + *

+ * Files that begin with "." are ignored. + * + * @see #getExtension + */ + @Override + public boolean accept(File f) { + if (f != null) { + if (f.isDirectory()) { + return true; + } + String extension = getExtension(f); + if (extension != null && filters.get(getExtension(f)) != null) { + return true; + } + } + return false; + } + + /** + * Return the extension portion of the file's name . + * + * @see #getExtension + * @see FileFilter#accept + */ + public String getExtension(File f) { + if (f != null) { + String filename = f.getName(); + int i = filename.lastIndexOf('.'); + if (i > 0 && i < filename.length() - 1) { + return filename.substring(i + 1).toLowerCase(); + } + } + return null; + } + + /** + * Adds a filetype "dot" extension to filter against. + *

+ * For example: the following code will create a filter that filters + * out all files except those that end in ".jpg" and ".tif": + *

+ * ExampleFileFilter filter = new ExampleFileFilter(); + * filter.addExtension("jpg"); + * filter.addExtension("tif"); + *

+ * Note that the "." before the extension is not needed and will be ignored. + */ + public void addExtension(String extension) { + if (filters == null) { + filters = new Hashtable(5); + } + filters.put(extension.toLowerCase(), this); + fullDescription = null; + } + + + /** + * Returns the human readable description of this filter. For + * example: "JPEG and GIF Image Files (*.jpg, *.gif)" + * + * @see FileFilter#getDescription + */ + @Override + public String getDescription() { + if (fullDescription == null) { + if (description == null || isExtensionListInDescription()) { + fullDescription = description == null ? "(" : description + " ("; + // build the description from the extension list + Enumeration extensions = filters.keys(); + if (extensions != null) { + fullDescription += "." + extensions.nextElement(); + while (extensions.hasMoreElements()) { + fullDescription += ", ." + extensions.nextElement(); + } + } + fullDescription += ")"; + } else { + fullDescription = description; + } + } + return fullDescription; + } + + /** + * Sets the human readable description of this filter. For + * example: filter.setDescription("Gif and JPG Images"); + */ + public void setDescription(String description) { + this.description = description; + fullDescription = null; + } + + /** + * Determines whether the extension list (.jpg, .gif, etc) should + * show up in the human readable description. + *

+ * Only relevent if a description was provided in the constructor + * or using setDescription(); + */ + public void setExtensionListInDescription(boolean b) { + useExtensionsInDescription = b; + fullDescription = null; + } + + /** + * Returns whether the extension list (.jpg, .gif, etc) should + * show up in the human readable description. + *

+ * Only relevent if a description was provided in the constructor + * or using setDescription(); + */ + public boolean isExtensionListInDescription() { + return useExtensionsInDescription; + } + } + +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java index 990e73ee9c..16944da068 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java @@ -1,6 +1,7 @@ package com.fr.design.os.impl; import com.fr.config.ServerPreferenceConfig; +import com.fr.design.DesignerEnvManager; import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.jdk.JdkVersion; import com.fr.design.upm.UpmFinder; @@ -23,7 +24,9 @@ public class PMDialogAction implements OSBasedAction { DesignUtils.visitEnvServerByParameters( PLUGIN_MANAGER_ROUTE,null,null); return; } - if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() || SupportOSImpl.MACOS_NEW_PLUGIN_MANAGEMENT.support()) { + if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() + || SupportOSImpl.MACOS_NEW_PLUGIN_MANAGEMENT.support() + || DesignerEnvManager.getEnvManager().isUseOptimizedUPM4Adapter()) { UpmFinder.showUPMDialog(); } else { WebViewDlgHelper.createPluginDialog(); diff --git a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java index 949d770456..3ec67200d5 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java @@ -7,13 +7,18 @@ import com.fr.general.GeneralContext; import com.fr.json.JSON; import com.fr.json.JSONFactory; import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.stable.os.Arch; import com.fr.stable.os.OperatingSystem; import com.fr.stable.os.support.SupportOS; import com.fr.workspace.WorkContext; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; +import java.util.Scanner; /** * @author pengda @@ -142,6 +147,45 @@ public enum SupportOSImpl implements SupportOS { } }, + OLD_STYLE_CHOOSER { + + @Override + public boolean support() { + return (OperatingSystem.isLinux() && Arch.getArch() == Arch.ARM) || MACOS_12_VERSION_ADAPTER.support(); + } + }, + + MACOS_12_VERSION_ADAPTER { + @Override + public boolean support() { + return (OperatingSystem.isMacos() && getMacOsVersionNumber() >= macosMontereyVersionNum); + } + + private final int macosMontereyVersionNum = 12; + + /** + * System.getProperty("os.version") 在最新macos版本存在bug + * https://bugs.openjdk.java.net/browse/JDK-8253702 + * + * @return + */ + private int getMacOsVersionNumber() { + String result; + List command = new ArrayList<>(); + command.add("/usr/bin/sw_vers"); + command.add("-productVersion"); + try (InputStream inputStream = new ProcessBuilder(command).start().getInputStream(); + Scanner s = new Scanner(inputStream).useDelimiter("\\A")) { + result = s.hasNext() ? s.next() : StringUtils.EMPTY; + String[] versionSlice = result.split("\\."); + return Integer.parseInt(versionSlice[0]); + } catch (Exception e) { + FineLoggerFactory.getLogger().warn(e.getMessage(), e); + return 0; + } + } + }, + DESIGNER_LOGIN { @Override public boolean support() { diff --git a/designer-base/src/main/java/com/fr/design/style/background/image/ImageFileChooser.java b/designer-base/src/main/java/com/fr/design/style/background/image/ImageFileChooser.java index 9c5b1af4d1..739dc81d55 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/image/ImageFileChooser.java +++ b/designer-base/src/main/java/com/fr/design/style/background/image/ImageFileChooser.java @@ -4,62 +4,47 @@ package com.fr.design.style.background.image; import com.fr.design.DesignerEnvManager; -import com.fr.design.gui.ifilechooser.FileSelectionMode; -import com.fr.design.gui.ifilechooser.JavaFxNativeFileChooser; -import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ifilechooser.FileChooserFactory; +import com.fr.design.gui.ifilechooser.FileChooserProvider; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.toast.DesignerToastMsgUtil; -import javafx.stage.FileChooser; -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; + +import java.awt.Component; import java.io.File; +import javax.swing.SwingUtilities; /** * This class used to choose image files. */ public class ImageFileChooser { - - JavaFxNativeFileChooser javaFxNativeFileChooser; + private final FileChooserProvider fileChooserProvider; public ImageFileChooser() { - javaFxNativeFileChooser = - new JavaFxNativeFileChooser.Builder(). - fileSelectionMode(FileSelectionMode.FILE). - title(Toolkit.i18nText("Fine-Design_Basic_Open")). - filter(Toolkit.i18nText("Fine-Design_Basic_Image_Image_Files"), "*.jpg", "*.gif", "*.png", "*.bmp"). - build(); + fileChooserProvider = FileChooserFactory.createImageFileChooser(); } public int showOpenDialog(Component parent, String approveButtonText) { - return showOpenDialog(parent); + return fileChooserProvider.showOpenDialog(parent, approveButtonText); } public int showOpenDialog(Component parent) { showImageCompressMoveTip(); - return javaFxNativeFileChooser.showDialog(parent); + return fileChooserProvider.showDialog(parent); } public void setCurrentDirectory(File file) { - javaFxNativeFileChooser.setCurrentDirectory(file); + fileChooserProvider.setCurrentDirectory(file); } public void setMultiSelectionEnabled(boolean multiple) { - if (multiple) { - javaFxNativeFileChooser.setSelectionMode(FileSelectionMode.MULTIPLE_FILE); - } else { - javaFxNativeFileChooser.setSelectionMode(FileSelectionMode.FILE); - } + fileChooserProvider.setMultiSelectionEnabled(multiple); } public File getSelectedFile() { - return javaFxNativeFileChooser.getSelectedFile(); + return fileChooserProvider.getSelectedFile(); } public boolean isCheckSelected() { diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index fee07ac467..01369116d7 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -14,9 +14,10 @@ import com.fr.design.extra.exe.GetPluginPrefixExecutor; import com.fr.design.extra.exe.PluginLoginExecutor; import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; import com.fr.design.extra.exe.SearchOnlineExecutor; +import com.fr.design.gui.ifilechooser.FileChooserArgs; +import com.fr.design.gui.ifilechooser.FileChooserFactory; import com.fr.design.gui.ifilechooser.FileChooserProvider; import com.fr.design.gui.ifilechooser.FileSelectionMode; -import com.fr.design.gui.ifilechooser.JavaFxNativeFileChooser; import com.fr.design.i18n.Toolkit; import com.fr.design.locale.impl.BbsRegisterMark; import com.fr.design.locale.impl.BbsResetMark; @@ -39,11 +40,12 @@ import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.chromium.JSArray; import com.teamdev.jxbrowser.chromium.JSFunction; import com.teamdev.jxbrowser.chromium.JSObject; -import javafx.stage.FileChooser; -import javax.swing.*; +import java.awt.Desktop; +import javax.swing.JFileChooser; +import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; import javax.swing.filechooser.FileNameExtensionFilter; -import java.awt.*; import java.io.File; import java.net.URI; import java.util.ArrayList; @@ -312,10 +314,10 @@ public class UpmBridge { RunnableFuture future = new FutureTask<>(new Callable() { @Override public String call() { - FileChooserProvider fileChooserProvider = new JavaFxNativeFileChooser.Builder(). - fileSelectionMode(FileSelectionMode.FILE). - filter(des, filter). - build(); + FileChooserProvider fileChooserProvider = FileChooserFactory.createFileChooser( + FileChooserArgs.newBuilder(). + setFileSelectionMode(FileSelectionMode.FILE). + setFilter(des, filter).build()); int result = fileChooserProvider.showDialog(UpmFinder.getDialog()); if (result == JFileChooser.APPROVE_OPTION) { return fileChooserProvider.getSelectedFile().getAbsolutePath(); diff --git a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java index 56f90e804e..31bdaa979b 100644 --- a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java @@ -9,9 +9,10 @@ import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ifilechooser.FileChooserArgs; +import com.fr.design.gui.ifilechooser.FileChooserFactory; import com.fr.design.gui.ifilechooser.FileChooserProvider; import com.fr.design.gui.ifilechooser.FileSelectionMode; -import com.fr.design.gui.ifilechooser.JavaFxNativeFileChooser; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ipasswordfield.UIPassWordField; import com.fr.design.gui.ipasswordfield.UIPasswordFieldWithFixedLength; @@ -564,7 +565,8 @@ public class RemoteEnvPane extends BasicBeanPane { fileChooserButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { - FileChooserProvider fileChooserProvider = new JavaFxNativeFileChooser.Builder().fileSelectionMode(FileSelectionMode.FILE).build(); + FileChooserProvider fileChooserProvider = FileChooserFactory.createFileChooser(FileChooserArgs.newBuilder(). + setFileSelectionMode(FileSelectionMode.FILE).build()); int saveValue = fileChooserProvider.showDialog(SwingUtilities.getWindowAncestor(RemoteEnvPane.this)); if (saveValue == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooserProvider.getSelectedFile(); diff --git a/designer-chart/src/main/java/com/fr/design/chart/series/PlotSeries/MapCustomPane.java b/designer-chart/src/main/java/com/fr/design/chart/series/PlotSeries/MapCustomPane.java index 133e2fef74..a5351c74bf 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/series/PlotSeries/MapCustomPane.java +++ b/designer-chart/src/main/java/com/fr/design/chart/series/PlotSeries/MapCustomPane.java @@ -9,8 +9,9 @@ import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.tabledata.wrapper.TableDataWrapper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icombobox.FilterComboBox; +import com.fr.design.gui.ifilechooser.FileChooserArgs; +import com.fr.design.gui.ifilechooser.FileChooserFactory; import com.fr.design.gui.ifilechooser.FileChooserProvider; -import com.fr.design.gui.ifilechooser.JavaFxNativeFileChooser; import com.fr.design.gui.ilable.BoldFontTextLabel; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.DesignerContext; @@ -19,8 +20,6 @@ import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; import com.fr.general.data.DataModel; import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import org.apache.batik.swing.svg.SVGFileFilter; import javax.swing.JFileChooser; import javax.swing.JPanel; @@ -110,10 +109,12 @@ public class MapCustomPane extends BasicBeanPane implements AbstrctMapAt private ActionListener selectPictureActionListener = new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { - FileChooserProvider fileChooserProvider = new JavaFxNativeFileChooser.Builder(). - filter(".svg, .svgz", "*.svg", "*.svgz"). - currentDirectory(lastSelectPath).build(); + FileChooserProvider fileChooserProvider = FileChooserFactory.createFileChooser( + FileChooserArgs.newBuilder(). + setFilter(".svg, .svgz", "*.svg", "*.svgz"). + setSelectedPath(lastSelectPath).build()); int returnVal = fileChooserProvider.showDialog(DesignerContext.getDesignerFrame()); if (returnVal != JFileChooser.CANCEL_OPTION) { File selectedFile = fileChooserProvider.getSelectedFile(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java b/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java index a845759f73..e777e2b411 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java @@ -4,10 +4,11 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ifilechooser.ExtensionFilter; +import com.fr.design.gui.ifilechooser.FileChooserArgs; +import com.fr.design.gui.ifilechooser.FileChooserFactory; import com.fr.design.gui.ifilechooser.FileChooserProvider; import com.fr.design.gui.ifilechooser.FileSelectionMode; -import com.fr.design.gui.ifilechooser.JavaFxNativeFileChooser; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.share.ui.base.FailureMessagePane; @@ -15,17 +16,13 @@ import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; import com.fr.design.mainframe.share.util.InstallUtils; import com.fr.design.mainframe.share.util.ShareComponentUtils; import com.fr.design.mainframe.share.util.ShareUIUtils; -import com.fr.design.os.impl.SupportOSImpl; import com.fr.form.share.record.ShareWidgetInfoManager; import com.fr.form.share.utils.ReuxUtils; import com.fr.log.FineLoggerFactory; -import com.sun.javafx.tk.FileChooserType; -import javafx.stage.FileChooser; import javax.swing.Action; import javax.swing.JFileChooser; import javax.swing.SwingWorker; -import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.event.ActionEvent; import java.io.File; import java.util.ArrayList; @@ -46,15 +43,16 @@ public class InstallComponentAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { - FileChooserProvider fileChooserProvider = - new JavaFxNativeFileChooser.Builder(). - fileSelectionMode(FileSelectionMode.MULTIPLE_FILE). - title(Toolkit.i18nText("Fine-Design_Basic_Select")). - filters(new FileChooser.ExtensionFilter[]{ - new FileChooser.ExtensionFilter("reu", "*.reu"), - new FileChooser.ExtensionFilter("reus", "*.reus"), - new FileChooser.ExtensionFilter("zip", "*.zip")}). - build(); + FileChooserProvider fileChooserProvider = FileChooserFactory.createFileChooser( + FileChooserArgs.newBuilder(). + setFileSelectionMode(FileSelectionMode.MULTIPLE_FILE). + setMultiSelectionEnabled(true). + setTipText(Toolkit.i18nText("Fine-Design_Basic_Select")). + setFilters(new ExtensionFilter[] { + new ExtensionFilter("reu", "*.reu"), + new ExtensionFilter("reus", "*.reus"), + new ExtensionFilter("zip", "*.zip"), + }).build()); int returnValue = fileChooserProvider.showDialog(null); installComponent(returnValue, fileChooserProvider.getSelectedFiles()); } From d357ff42c747d5b7a651ad7c46f33708c90598f2 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 31 Dec 2021 15:12:13 +0800 Subject: [PATCH 13/19] =?UTF-8?q?REPORT-64009=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=86=85=E5=AF=B9macOS12=E7=9A=84=E5=A4=84=E7=90=86?= =?UTF-8?q?=20fix=E9=97=A8=E6=A7=9B=E7=94=A8=E4=BE=8B=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/web/CustomIconPane.java | 9 ++++----- .../main/java/com/fr/start/module/DesignerActivator.java | 4 ++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java index 9e03dcc9dc..93e65a7ea7 100644 --- a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java +++ b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java @@ -4,14 +4,14 @@ import com.fr.base.BaseUtils; import com.fr.base.GraphHelper; import com.fr.base.Icon; import com.fr.base.IconManager; -import com.fr.design.designer.IntervalConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ifilechooser.FileChooserArgs; +import com.fr.design.gui.ifilechooser.FileChooserFactory; import com.fr.design.gui.ifilechooser.FileChooserProvider; -import com.fr.design.gui.ifilechooser.JavaFxNativeFileChooser; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.iscrollbar.UIScrollBar; import com.fr.design.gui.itextarea.DescriptionTextArea; @@ -451,9 +451,8 @@ public class CustomIconPane extends BasicPane { private void onBrowseButtonClicked() { // carl:不知道是否只要png格式,反正导出时全部都转成png了 - FileChooserProvider fileChooserProvider = new JavaFxNativeFileChooser.Builder(). - filter("Icon Image File", "*.jpg", "*.jpeg", "*.png", "*.gif"). - build(); + FileChooserProvider fileChooserProvider = FileChooserFactory.createFileChooser(FileChooserArgs.newBuilder(). + setFilter("Icon Image File", "*.jpg", "*.jpeg", "*.png", "*.gif").build()); if (JFileChooser.APPROVE_OPTION == fileChooserProvider.showDialog(DesignerContext.getDesignerFrame())) { String path = fileChooserProvider.getSelectedFile().getAbsolutePath(); // 图片存储有最大值48*48限制,没有超过最大值时,按原图大小存储,超过最大值后,压缩至最大值存储 diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 3c9b4dc9db..8ea078cd4d 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -8,6 +8,7 @@ import com.fr.base.passport.FinePassportManager; import com.fr.base.process.ProcessOperator; import com.fr.chart.chartattr.ChartCollection; import com.fr.config.MarketConfig; +import com.fr.config.ServerPreferenceConfig; import com.fr.decision.update.backup.RecoverManager; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -177,6 +178,9 @@ public class DesignerActivator extends Activator implements Prepare { //生成BasicChartQuickEditor对象,需要用到ChartDesignerActivator的注册信息(DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class);) //所以不能在registerCellEditor函数中进行注册 ActionFactory.registerCellEditor(ChartCollection.class, new BasicChartQuickEditor()); + if (DesignerEnvManager.getEnvManager().isUseOptimizedUPM4Adapter() && WorkContext.getCurrent().isLocal()) { + ServerPreferenceConfig.getInstance().setUseOptimizedUPM(DesignerEnvManager.getEnvManager().isUseOptimizedUPM4Adapter()); + } } private void loadLogAppender() { From 40e5ba10a1e43a649d189dfcfbe69a34e217b7ab Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 31 Dec 2021 15:18:53 +0800 Subject: [PATCH 14/19] =?UTF-8?q?REPORT-64009=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=86=85=E5=AF=B9macOS12=E7=9A=84=E5=A4=84=E7=90=86?= =?UTF-8?q?=20fix=20import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/web/CustomIconPane.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java index 93e65a7ea7..96b5840208 100644 --- a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java +++ b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java @@ -30,23 +30,34 @@ import com.fr.stable.ListMap; import com.fr.stable.StringUtils; import com.fr.transaction.Configurations; import com.fr.transaction.WorkerFacade; -import javafx.stage.FileChooser; -import javax.swing.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import javax.swing.ButtonGroup; +import javax.swing.ImageIcon; +import javax.swing.JComponent; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JToggleButton; +import javax.swing.ScrollPaneConstants; +import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.plaf.basic.BasicButtonUI; -import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; /** * carl:自定义Icon编辑 From 5132d43d76d4912e9ade46a730359dbef59542e4 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 4 Jan 2022 15:56:06 +0800 Subject: [PATCH 15/19] =?UTF-8?q?REPORT-65381=20linux=5Farm=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8-=E7=82=B9=E5=87=BB=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A0=8F=E6=96=87=E4=BB=B6-=E9=80=89=E9=A1=B9=EF=BC=8C?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E5=BC=B9=E7=AA=97=E5=90=8E=E5=86=8D=E7=82=B9?= =?UTF-8?q?=E5=87=BB=20=E7=A1=AE=E5=AE=9A=E6=8C=89=E9=92=AE=EF=BC=8C?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E4=B8=8D=E6=B6=88=E5=A4=B1=EF=BC=8C=E6=97=A0?= =?UTF-8?q?=E4=BB=BB=E4=BD=95=E5=8F=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e3dd02e950..db94ace66f 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 @@ -788,7 +788,7 @@ public class PreferencePane extends BasicPane { designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected()); designerEnvManager.setEmbedServerLazyStartup(this.embedServerLazyStartupCheckBox.isSelected()); designerEnvManager.setImageCompress(this.imageCompressPanelCheckBox.isSelected()); - designerEnvManager.setUseOptimizedUPM4Adapter(this.useOptimizedUPMCheckbox.isSelected()); + designerEnvManager.setUseOptimizedUPM4Adapter(this.useOptimizedUPMCheckbox != null && this.useOptimizedUPMCheckbox.isSelected()); VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); vcsConfigManager.setSaveInterval(this.saveIntervalEditor.getValue()); vcsConfigManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); From d1321ea0815c4b4a4c4b672b38ac363728852cf6 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 4 Jan 2022 15:56:57 +0800 Subject: [PATCH 16/19] =?UTF-8?q?REPORT-65369=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=86=85=E5=AF=B9macOS12=E7=9A=84=E5=A4=84=E7=90=86-?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E5=9B=BE=E6=A0=87=E8=AE=BE=E7=BD=AE-?= =?UTF-8?q?=E5=9C=A8=E7=82=B9=E5=87=BB=20=E9=80=89=E6=8B=A9=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=97=B6=E5=9B=9E=E5=88=B0=E4=BA=86=E7=88=B6=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E7=95=8C=E9=9D=A2=EF=BC=8C=E6=B2=A1=E6=9C=89=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E6=98=BE=E7=A4=BA=E5=87=BA=E6=9D=A5=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=86=8D=E6=AC=A1=E5=8D=95=E6=9C=BA=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/web/CustomIconPane.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java index 96b5840208..564b09d467 100644 --- a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java +++ b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java @@ -40,6 +40,7 @@ import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; +import java.awt.Window; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JComponent; @@ -425,7 +426,7 @@ public class CustomIconPane extends BasicPane { browseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - onBrowseButtonClicked(); + onBrowseButtonClicked(SwingUtilities.getWindowAncestor(EditIconDialog.this)); } }); @@ -460,11 +461,11 @@ public class CustomIconPane extends BasicPane { this.add(centerPane, BorderLayout.CENTER); } - private void onBrowseButtonClicked() { + private void onBrowseButtonClicked(Window parent) { // carl:不知道是否只要png格式,反正导出时全部都转成png了 FileChooserProvider fileChooserProvider = FileChooserFactory.createFileChooser(FileChooserArgs.newBuilder(). setFilter("Icon Image File", "*.jpg", "*.jpeg", "*.png", "*.gif").build()); - if (JFileChooser.APPROVE_OPTION == fileChooserProvider.showDialog(DesignerContext.getDesignerFrame())) { + if (JFileChooser.APPROVE_OPTION == fileChooserProvider.showDialog(parent)) { String path = fileChooserProvider.getSelectedFile().getAbsolutePath(); // 图片存储有最大值48*48限制,没有超过最大值时,按原图大小存储,超过最大值后,压缩至最大值存储 Image image = BaseUtils.readImage(path); From b74f5d3bd323a8a78d7ada1bd022e41ba53d7e44 Mon Sep 17 00:00:00 2001 From: Hoky <303455184@qq.com> Date: Tue, 4 Jan 2022 16:25:24 +0800 Subject: [PATCH 17/19] =?UTF-8?q?REPORT-65290=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E6=B0=B4=E5=8D=B0=EF=BC=8C=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=94=B9=E5=8F=98=E6=B0=B4=E5=8D=B0=E5=BC=80=E5=85=B3=EF=BC=8C?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=B0=B4=E5=8D=B0=E5=8F=98=E6=88=90=E4=BA=86?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=8D=95=E7=8B=AC=E8=AE=BE=E7=BD=AE=201.?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B0=B4=E5=8D=B0=E7=9A=84isvalid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/report/WatermarkSettingPane.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java b/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java index 0cc211c5f1..e79bfcf6b8 100644 --- a/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java +++ b/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java @@ -1,5 +1,6 @@ package com.fr.design.report; +import com.fr.base.iofile.attr.WaterMarkProvideConstant; import com.fr.base.iofile.attr.WatermarkAttr; import com.fr.design.dialog.AbstractTemplateServerSettingPane; import com.fr.report.core.ReportUtils; @@ -42,13 +43,13 @@ public class WatermarkSettingPane extends AbstractTemplateServerSettingPane { } public void populate(WatermarkAttr watermark) { - if (!watermark.isValid()) { + if (watermark.getWaterMarkProvider().equals(WaterMarkProvideConstant.TEMPLATE)) { + chooseComboBox.setSelectedIndex(SINGLE_SET); + watermarkPane.populate(watermark); + } else { chooseComboBox.setSelectedIndex(SERVER_SET); populateServerSettings(); - return; } - chooseComboBox.setSelectedIndex(SINGLE_SET); - watermarkPane.populate(watermark); } From 354400bec3cc6a452d291af16e8097d393115dd7 Mon Sep 17 00:00:00 2001 From: Starryi Date: Wed, 5 Jan 2022 11:36:54 +0800 Subject: [PATCH 18/19] =?UTF-8?q?REPORT-64811=2010.0=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E4=B8=8B=E8=BD=BD=E7=9A=84=E7=BB=84=E4=BB=B6=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=97=A0=E6=B3=95=E8=A7=A3=E5=8E=8B=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 10.0设计器无法通过配置文件使用测试服务器的下载接口,导致文件 下载失败. 【改动思路】 和11.0一样优先使用配置文件中的地址 --- .../com/fr/design/mainframe/share/util/DownloadUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java index b6375b1d69..6c6e156b07 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -38,8 +38,8 @@ import java.util.Set; * created by Harrison on 2020/05/27 **/ public class DownloadUtils { - private static final String REUSES_URL = CloudCenter.getInstance().acquireUrlByKind("af.reuseInfo") + "file/download"; - private static final String PACKAGE_REUSES_URL = CloudCenter.getInstance().acquireUrlByKind("af.reuseInfo") + "package/download/"; + private static final String REUSES_URL = ShareComponentConstants.REU_INFO_PATH + "file/download"; + private static final String PACKAGE_REUSES_URL = ShareComponentConstants.REU_INFO_PATH + "package/download/"; private static final String CERTIFICATE_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtsz62CPSWXZE/IYZRiAuTSZkw\n" + "1WOwer8+JFktK0uKLAUuQoBr+UjAMFtRA8W7JgKMDwZy/2liEAiXEOSPU/hrdV8D\n" + "tT541LnGi1X/hXiRwuttPWYN3L2GYm/d5blU+FBNwghBIrdAxXTzYBc6P4KL/oYX\n" + From 914aa241de62f41ef830b013e1b7726ef089f7cf Mon Sep 17 00:00:00 2001 From: Hoky <303455184@qq.com> Date: Wed, 5 Jan 2022 20:07:14 +0800 Subject: [PATCH 19/19] =?UTF-8?q?REPORT-65474=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E6=B0=B4=E5=8D=B0=EF=BC=8C=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=94=B9=E5=8F=98=E6=B0=B4=E5=8D=B0=E5=BC=80=E5=85=B3=EF=BC=8C?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=B0=B4=E5=8D=B0=E5=8F=98=E6=88=90=E4=BA=86?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=8D=95=E7=8B=AC=E8=AE=BE=E7=BD=AE=201.?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E6=B0=B4=E5=8D=B0=E9=BB=98=E8=AE=A4=E4=B8=8D?= =?UTF-8?q?=E6=98=AF=E6=A8=A1=E6=9D=BF=E6=B0=B4=E5=8D=B0=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E6=A8=A1=E6=9D=BF=E6=B0=B4=E5=8D=B0=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99=EF=BC=8C=E8=BF=9B=E8=A1=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8D=B3=E5=8F=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/report/WatermarkSettingPane.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java b/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java index e79bfcf6b8..f3de6eef96 100644 --- a/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java +++ b/designer-base/src/main/java/com/fr/design/report/WatermarkSettingPane.java @@ -34,6 +34,7 @@ public class WatermarkSettingPane extends AbstractTemplateServerSettingPane { @Override protected void populateServerSettings() { WatermarkAttr watermarkAttr = ReportUtils.getWatermarkAttrFromServerConfig(); + watermarkAttr.setValid(true); watermarkPane.populate(watermarkAttr); } @@ -55,8 +56,9 @@ public class WatermarkSettingPane extends AbstractTemplateServerSettingPane { public WatermarkAttr update() { WatermarkAttr watermark = watermarkPane.update(); - if (isUsingServerSettings()) { - watermark.setValid(false); + if (!isUsingServerSettings()) { + watermark.setValid(true); + watermark.setWaterMarkProvider(WaterMarkProvideConstant.TEMPLATE); } return watermark; }