From 03464c856fa488e4fc86d82ff8bf6564bc4d006c Mon Sep 17 00:00:00 2001 From: ju Date: Wed, 8 Aug 2018 11:24:23 +0800 Subject: [PATCH 01/29] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20master?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E5=85=88=E5=B1=8F=E8=94=BD=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/module/DesignerActivator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 bac7d7247..5316eb8ff 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 @@ -123,9 +123,9 @@ public class DesignerActivator extends Activator { public void start() { List markers = rightCollectMutable(InterMutableKey.Path); for (LocaleMarker marker : markers) { - if (marker.match(LocaleScope.DESIGN)) { +// if (marker.match(LocaleScope.DESIGN)) { Toolkit.addResource(marker.getPath()); - } +// } } designerModuleStart(); preLoadPane(); From f65a025b55847cca3127288d24b5c1315f6cb85a Mon Sep 17 00:00:00 2001 From: hzzz Date: Fri, 17 Aug 2018 15:51:39 +0800 Subject: [PATCH 02/29] =?UTF-8?q?REPORT-10489=E3=80=90=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E5=8D=87=E7=BA=A710.0=E3=80=91=E5=B7=A5=E4=BD=9C=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E5=88=87=E6=8D=A2=E4=BD=8D=E8=BF=9C=E7=A8=8B=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E7=AC=AC=E4=B8=80=E6=AC=A1=E9=A2=84=E8=A7=88=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=E8=BF=9B=E5=BA=A6=E6=A1=86=E4=B8=80=E7=9B=B4?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datapane/preview/PreviewTablePane.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java index 6b64f77b7..bfcba4aa2 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java @@ -26,14 +26,25 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.function.TIME; import com.fr.general.FRFont; - import com.fr.log.FineLoggerFactory; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.SwingWorker; +import javax.swing.UIManager; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; @@ -285,7 +296,7 @@ public class PreviewTablePane extends BasicPane { previewTablePane.dialog.setVisible(true); } - return previewTablePane.previewTableData; + return previewTablePane.previewTableData; } private void showErrorMessage(Exception exp) { @@ -358,14 +369,16 @@ public class PreviewTablePane extends BasicPane { worker = new SwingWorker() { protected PreviewTableModel doInBackground() throws Exception { connectionBar.start(); - if (tableData instanceof DBTableData) { - boolean status = DataOperator.getInstance().testConnection(((DBTableData) tableData).getDatabase()); - if (!status) { - connectionBar.close(); - throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed")); + try { + if (tableData instanceof DBTableData) { + boolean status = DataOperator.getInstance().testConnection(((DBTableData) tableData).getDatabase()); + if (!status) { + throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed")); + } } + } finally { + connectionBar.close(); } - connectionBar.close(); TableDataSource dataSource = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getTarget(); previewTableData = DesignTableDataManager.previewTableDataNeedInputParameters(dataSource, tableData, (int) maxPreviewNumberField.getValue(), true); // parameterInputDialog From f26245a7884980441bb56fde1e774b6128a08293 Mon Sep 17 00:00:00 2001 From: zheng Date: Fri, 17 Aug 2018 16:21:05 +0800 Subject: [PATCH 03/29] CHART-2792 uicontrollistpane --- .../design/gui/controlpane/UIControlPane.java | 7 ------- .../gui/controlpane/UIListControlPane.java | 5 ----- .../component/VanChartHyperLinkPane.java | 8 +++----- .../component/VanChartUIListControlPane.java | 19 ++++++++++--------- .../VanChartConditionAttrContentPane.java | 10 ++++++++-- .../VanChartConditionListControlPane.java | 10 ++-------- .../background/AlertLineListControlPane.java | 3 +-- .../background/BackgroundListControlPane.java | 3 +-- ...VanChartStackedAndAxisListControlPane.java | 3 +-- 9 files changed, 26 insertions(+), 42 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java index ff9e48e5d..cd3c3a5ba 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java @@ -1,6 +1,5 @@ package com.fr.design.gui.controlpane; -import com.fr.base.chart.BasePlot; import com.fr.design.constants.UIConstants; import com.fr.design.gui.controlpane.shortcutfactory.ShortCutFactory; import com.fr.design.gui.ilable.UILabel; @@ -49,7 +48,6 @@ import java.awt.event.WindowEvent; abstract class UIControlPane extends JControlPane { private UIToolbar topToolBar; protected Window popupEditDialog; - protected BasePlot plot; private static final int TOP_TOOLBAR_HEIGHT = 20; private static final int TOP_TOOLBAR_WIDTH = 156; // 可能因为用了tablelayout,要比其他地方多一个像素,看起来才正常 private static final int TOP_TOOLBAR_WIDTH_SHORT = 76; @@ -58,11 +56,6 @@ abstract class UIControlPane extends JControlPane { super(); } - UIControlPane(BasePlot plot) { - super(); - this.plot = plot; - } - public abstract void saveSettings(); @Override diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java index de2a42fa8..0dec12421 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java @@ -1,6 +1,5 @@ package com.fr.design.gui.controlpane; -import com.fr.base.chart.BasePlot; import com.fr.design.beans.BasicBeanPane; import com.fr.design.constants.UIConstants; import com.fr.design.gui.icontainer.UIScrollPane; @@ -55,10 +54,6 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon } - public UIListControlPane(BasePlot plot) { - super(plot); - } - private ListControlPaneHelper getHelper() { if (helper == null) { helper = ListControlPaneHelper.newInstance(this); diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java index b0da61844..af11a8b96 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java @@ -14,7 +14,6 @@ import com.fr.design.chart.series.SeriesCondition.impl.ChartHyperRelateFloatLink import com.fr.design.chart.series.SeriesCondition.impl.FormHyperlinkPane; import com.fr.design.designer.TargetComponent; import com.fr.design.fun.HyperlinkProvider; -import com.fr.design.gui.HyperlinkFilterHelper; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.imenutable.UIMenuNameableCreator; @@ -23,8 +22,6 @@ import com.fr.design.hyperlink.WebHyperlinkPane; import com.fr.design.javascript.JavaScriptImplPane; import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.module.DesignModuleFactory; -import com.fr.log.FineLoggerFactory; - import com.fr.general.NameObject; import com.fr.js.EmailJavaScript; import com.fr.js.FormHyperlinkProvider; @@ -35,6 +32,7 @@ import com.fr.js.NameJavaScriptGroup; import com.fr.js.ParameterJavaScript; import com.fr.js.ReportletHyperlink; import com.fr.js.WebHyperlink; +import com.fr.log.FineLoggerFactory; import com.fr.stable.ListMap; import com.fr.stable.Nameable; import com.fr.stable.bridge.StableFactory; @@ -93,7 +91,7 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { } protected Map getHyperLinkEditorMap() { - return plot.getHyperLinkEditorMap(); + return getPlot().getHyperLinkEditorMap(); } /** @@ -147,7 +145,7 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { } public void populate(Plot plot) { - this.plot = plot; + setPlot(plot); HashMap paneMap = getHyperlinkMap(plot); //安装平台内打开插件时,添加相应按钮 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 db76fe301..15e905e10 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 @@ -1,6 +1,5 @@ package com.fr.van.chart.designer.component; -import com.fr.base.chart.BasePlot; import com.fr.chart.chartattr.Plot; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; @@ -13,7 +12,6 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; - import com.fr.stable.Nameable; import com.fr.van.chart.designer.TableLayout4VanChartHelper; @@ -38,15 +36,18 @@ import java.awt.event.ActionListener; public abstract class VanChartUIListControlPane extends UIListControlPane implements UIObserver { private UIObserverListener uiObserverListener; + private Plot plot;//update用 - public VanChartUIListControlPane() { - super(); - this.setBorder(null); - iniListener(); + protected Plot getPlot() { + return plot; } - public VanChartUIListControlPane(BasePlot plot) { - super(plot); + protected void setPlot(Plot plot) { + this.plot = plot; + } + + public VanChartUIListControlPane() { + super(); this.setBorder(null); iniListener(); } @@ -116,7 +117,7 @@ public abstract class VanChartUIListControlPane extends UIListControlPane implem if (isPopulating) { return; } - update((Plot) plot); + update(getPlot()); fireChanged();//图表属性改变,响应事件 } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionAttrContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionAttrContentPane.java index bc37fee56..3028f0720 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionAttrContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionAttrContentPane.java @@ -27,10 +27,16 @@ public class VanChartConditionAttrContentPane extends AbstractConditionAttrConte populateBean(plot, collection, showPane); } - public void populateBean(Plot plot, ConditionCollection collection, Class showPane){ + public void populateBean(final Plot plot, ConditionCollection collection, Class showPane) { if (conditionPane == null) { - conditionPane = new VanChartConditionListControlPane(plot); + conditionPane = new VanChartConditionListControlPane() { + @Override + protected Plot getPlot() { + return plot; + } + }; + } this.setLayout(new BorderLayout()); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionListControlPane.java index 871b3afd4..004adba78 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/other/VanChartConditionListControlPane.java @@ -1,6 +1,5 @@ package com.fr.van.chart.designer.other; -import com.fr.base.chart.BasePlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.chartglyph.ConditionCollection; @@ -9,7 +8,6 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.condition.ConditionAttributesPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; - import com.fr.general.NameObject; import com.fr.stable.Nameable; import com.fr.van.chart.designer.component.VanChartUIListControlPane; @@ -23,10 +21,6 @@ import java.lang.reflect.InvocationTargetException; */ public class VanChartConditionListControlPane extends VanChartUIListControlPane { - public VanChartConditionListControlPane(BasePlot plot) { - super(plot); - } - public void populate(Nameable[] nameableArray, Class showPane) { initComponentPane(); this.setBorder(null); @@ -37,7 +31,7 @@ public class VanChartConditionListControlPane extends VanChartUIListControlPane @Override public NameableCreator[] createNameableCreators() { - return new NameObjectCreator[]{new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), ConditionAttr.class, ChartTypeInterfaceManager.getInstance().getPlotConditionPane((Plot) plot).getClass())}; + return new NameObjectCreator[]{new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), ConditionAttr.class, ChartTypeInterfaceManager.getInstance().getPlotConditionPane(getPlot()).getClass())}; } @@ -45,7 +39,7 @@ public class VanChartConditionListControlPane extends VanChartUIListControlPane Constructor constructor = null; try { constructor = creator.getUpdatePane().getConstructor(Plot.class); - return constructor.newInstance(plot); + return constructor.newInstance(getPlot()); } catch (InstantiationException e) { throw new RuntimeException(e); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java index b482b027e..0acf05632 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/AlertLineListControlPane.java @@ -5,7 +5,6 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.ShortCut4JControlPane; import com.fr.general.ComparatorUtils; - import com.fr.general.NameObject; import com.fr.plugin.chart.attr.DefaultAxisHelper; import com.fr.plugin.chart.attr.axis.VanChartAlertValue; @@ -47,7 +46,7 @@ public class AlertLineListControlPane extends VanChartUIListControlPane { } public void populate(Plot plot) { - this.plot = plot; + setPlot(plot); VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) plot; List xAxisList = rectanglePlot.getXAxisList(); List yAxisList = rectanglePlot.getYAxisList(); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java index 19936829e..096948b8a 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/background/BackgroundListControlPane.java @@ -5,7 +5,6 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.ShortCut4JControlPane; import com.fr.general.ComparatorUtils; - import com.fr.general.NameObject; import com.fr.plugin.chart.attr.DefaultAxisHelper; import com.fr.plugin.chart.attr.axis.VanChartAlertValue; @@ -49,7 +48,7 @@ public class BackgroundListControlPane extends VanChartUIListControlPane { } public void populate(Plot plot) { - this.plot = plot; + setPlot(plot); VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) plot; List xAxisList = rectanglePlot.getXAxisList(); List yAxisList = rectanglePlot.getYAxisList(); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java index e5138a668..a6886e3b0 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartStackedAndAxisListControlPane.java @@ -6,7 +6,6 @@ import com.fr.chart.chartglyph.ConditionCollection; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.ShortCut4JControlPane; - import com.fr.general.NameObject; import com.fr.plugin.chart.attr.DefaultAxisHelper; import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; @@ -47,7 +46,7 @@ public class VanChartStackedAndAxisListControlPane extends VanChartUIListControl } public void populate(VanChartRectanglePlot plot) { - this.plot = plot; + setPlot(plot); String[] axisXNames = DefaultAxisHelper.getXAxisNames(plot); String[] axisYNames = DefaultAxisHelper.getYAxisNames(plot); From 8f7d4e479f76874093d872fc8e72ca81060e2bfa Mon Sep 17 00:00:00 2001 From: "Wim.Zhai" Date: Sun, 19 Aug 2018 15:06:50 +0800 Subject: [PATCH 04/29] CHART-2790 --- .../src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java b/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java index 610f6417e..981956be0 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/pie/VanChartPiePlotPane.java @@ -30,7 +30,7 @@ public class VanChartPiePlotPane extends AbstractVanChartTypePane { return new String[]{ com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Pie"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_SameArc_Pie"), - com.fr.design.i18n.Toolkit.i18nText("Plugin-ChartF_DifferentArcPie") + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_DifferArc_Pie") }; } From efa5f1e2d3032857ff3d8fa05aa7b38ee21b3510 Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Mon, 20 Aug 2018 09:50:29 +0800 Subject: [PATCH 05/29] =?UTF-8?q?REPORT-10700=20=E5=85=88=E5=88=A0?= =?UTF-8?q?=E6=8E=89preload=20cloudcenter.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/Designer.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 58d450b68..812359e39 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -38,9 +38,7 @@ import com.fr.design.module.DesignModuleFactory; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; - import com.fr.module.Module; import com.fr.module.ModuleContext; import com.fr.stable.BuildContext; @@ -57,9 +55,13 @@ import com.fr.start.preload.ImagePreLoader; import com.fr.start.server.ServerTray; import com.fr.workspace.WorkContext; -import javax.swing.*; +import javax.swing.JComponent; +import javax.swing.JPanel; import javax.swing.border.MatteBorder; -import java.awt.*; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -125,14 +127,6 @@ public class Designer extends BaseDesigner { private static void preloadResource() { ExecutorService service = Executors.newCachedThreadPool(); - service.submit(new Runnable() { - @Override - public void run() { - CloudCenter.getInstance(); - Cursor cursor = UIConstants.CELL_DEFAULT_CURSOR; - } - }); - service.submit(new Runnable() { @Override public void run() { From 12eeb62f0d97c4956881502c8903451e01137b10 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 20 Aug 2018 12:02:29 +0800 Subject: [PATCH 06/29] =?UTF-8?q?REPORT-10459=20=E3=80=909.0&10.0=E3=80=91?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E5=B1=9E=E6=80=A7-=E5=85=B6?= =?UTF-8?q?=E4=BB=96=EF=BC=8C=E4=B8=8B=E9=9D=A2=E7=9A=84=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=92=8C=E8=87=AA=E5=8A=A8=E8=B0=83=E6=95=B4=E5=86=99=E5=8F=8D?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/cell/settingpane/CellOtherSetPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java index 60a7f2c79..814a4ebec 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java @@ -87,7 +87,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane { */ public JPanel createContentPane() { JPanel downPane = new JPanel(new BorderLayout()); - downPane.add(new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Auto_Adjust_Size"), HEAD_WDITH, HEAD_HEIGTH, seniorPane()), BorderLayout.NORTH); + downPane.add(new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advaced"), HEAD_WDITH, HEAD_HEIGTH, seniorPane()), BorderLayout.NORTH); downPane.add(new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Pagination"), HEAD_WDITH, HEAD_HEIGTH, pagePane()), BorderLayout.CENTER); JPanel contentPane = new JPanel(new BorderLayout(0, 0)); contentPane.add(new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Basic"), HEAD_WDITH, HEAD_HEIGTH, basicPane()), BorderLayout.NORTH); From 7446cc12fbc9a42d895ea111695803a1603c920b Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Mon, 20 Aug 2018 15:50:14 +0800 Subject: [PATCH 07/29] REPORT-10572 --- .../com/fr/design/javascript/JSContentPane.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java index 93e824acb..77e16e312 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java +++ b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java @@ -1,7 +1,9 @@ package com.fr.design.javascript; import com.fr.design.DesignerEnvManager; +import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.KeyWords; +import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.autocomplete.AutoCompletion; import com.fr.design.gui.autocomplete.BasicCompletion; @@ -14,7 +16,6 @@ import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; import com.fr.design.javascript.beautify.JavaScriptFormatHelper; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.IOUtils; @@ -60,10 +61,15 @@ public class JSContentPane extends BasicPane { } }); - this.add(GUICoreUtils.createBorderLayoutPane( - funNameLabel, BorderLayout.WEST, - label, BorderLayout.EAST - ), BorderLayout.NORTH); + //REPORT-10533 用户参数多达25个,导致JS没地方写,增加滚动条显示 + JPanel jsParaPane = new JPanel(new BorderLayout(4, 4)); + jsParaPane.setPreferredSize(new Dimension(300, 80)); + UIScrollPane scrollPane = new UIScrollPane(funNameLabel); + scrollPane.setPreferredSize(new Dimension(400, 80)); + scrollPane.setBorder(new UIRoundedBorder(UIConstants.TITLED_BORDER_COLOR, 1, UIConstants.ARC)); + jsParaPane.add(scrollPane, BorderLayout.WEST); + jsParaPane.add(label, BorderLayout.EAST); + this.add(jsParaPane, BorderLayout.NORTH); contentTextArea = new RSyntaxTextArea(); contentTextArea.setCloseCurlyBraces(true); From 5ccaffae5b96ddf4a20173c167126da144de4979 Mon Sep 17 00:00:00 2001 From: ju Date: Mon, 20 Aug 2018 20:21:21 +0800 Subject: [PATCH 08/29] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=9A=84=E4=BB=A3=E7=A0=81=E9=97=B4=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=85=A8=E5=86=99=E6=88=90=2010.0=EF=BC=8C=E5=AF=B9ja?= =?UTF-8?q?r=E7=9A=84=E4=BE=9D=E8=B5=96=E5=85=A8=E5=86=99=E6=88=90#{branch?= =?UTF-8?q?}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-base/pom.xml | 4 ++-- designer-chart/pom.xml | 6 +++--- designer-form/pom.xml | 6 +++--- designer-realize/pom.xml | 8 ++++---- pom.xml | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/designer-base/pom.xml b/designer-base/pom.xml index d97a42093..942dcd302 100644 --- a/designer-base/pom.xml +++ b/designer-base/pom.xml @@ -6,7 +6,7 @@ com.fr.report design - 10.0-RELEASE-SNAPSHOT + 10.0 @@ -17,5 +17,5 @@ com.fr.report designer-base - 10.0-RELEASE-SNAPSHOT + 10.0 \ No newline at end of file diff --git a/designer-chart/pom.xml b/designer-chart/pom.xml index 472b1e62b..8d5e30e1c 100644 --- a/designer-chart/pom.xml +++ b/designer-chart/pom.xml @@ -6,16 +6,16 @@ com.fr.report design - 10.0-RELEASE-SNAPSHOT + 10.0 com.fr.report designer-chart - 10.0-RELEASE-SNAPSHOT + 10.0 com.fr.report designer-base - 10.0-RELEASE-SNAPSHOT + 10.0 \ No newline at end of file diff --git a/designer-form/pom.xml b/designer-form/pom.xml index 19df80505..274032bd3 100644 --- a/designer-form/pom.xml +++ b/designer-form/pom.xml @@ -6,16 +6,16 @@ com.fr.report design - 10.0-RELEASE-SNAPSHOT + 10.0 com.fr.report designer-form - 10.0-RELEASE-SNAPSHOT + 10.0 com.fr.report designer-base - 10.0-RELEASE-SNAPSHOT + 10.0 \ No newline at end of file diff --git a/designer-realize/pom.xml b/designer-realize/pom.xml index 1e9d72c76..2e40943cc 100644 --- a/designer-realize/pom.xml +++ b/designer-realize/pom.xml @@ -6,21 +6,21 @@ com.fr.report design - 10.0-RELEASE-SNAPSHOT + 10.0 com.fr.report designer-realize - 10.0-RELEASE-SNAPSHOT + 10.0 com.fr.report designer-form - 10.0-RELEASE-SNAPSHOT + 10.0 com.fr.report designer-chart - 10.0-RELEASE-SNAPSHOT + 10.0 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3398bbd08..408bc7be8 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.fr.report fine-report-designer - 10.0-RELEASE-SNAPSHOT + 10.0 ../design-settings/fine-report-designer @@ -19,7 +19,7 @@ com.fr.report design - 10.0-RELEASE-SNAPSHOT + 10.0 pom From 986f8455a6c2f9c85f5c0681f18ca6060f6c3cbb Mon Sep 17 00:00:00 2001 From: ju Date: Mon, 20 Aug 2018 20:23:10 +0800 Subject: [PATCH 09/29] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=9A=84=E4=BB=A3=E7=A0=81=E9=97=B4=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=85=A8=E5=86=99=E6=88=90=2010.0=EF=BC=8C=E5=AF=B9ja?= =?UTF-8?q?r=E7=9A=84=E4=BE=9D=E8=B5=96=E5=85=A8=E5=86=99=E6=88=90#{branch?= =?UTF-8?q?}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/module/DesignerActivator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 5316eb8ff..bac7d7247 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 @@ -123,9 +123,9 @@ public class DesignerActivator extends Activator { public void start() { List markers = rightCollectMutable(InterMutableKey.Path); for (LocaleMarker marker : markers) { -// if (marker.match(LocaleScope.DESIGN)) { + if (marker.match(LocaleScope.DESIGN)) { Toolkit.addResource(marker.getPath()); -// } + } } designerModuleStart(); preLoadPane(); From 494816f7f9ddb8eaa9247c3fb3356873bb5ac5b5 Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Tue, 21 Aug 2018 14:54:08 +0800 Subject: [PATCH 10/29] REPORT-10750 --- .../src/main/java/com/fr/design/DesignerEnvManager.java | 3 ++- .../java/com/fr/design/env/LocalDesignerWorkspaceInfo.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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 4222144ae..eefafb84e 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -207,7 +207,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { return; } String installHome = StableUtils.getInstallHome(); - if (installHome != null && !".".equals(installHome)) { + //这里不判断路径是.的情况,放在checkValid方法里面,重新选 + if (installHome != null) { String name = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_DEFAULT"); String envPath = designerEnvManager.getDefaultenvPath(installHome); designerEnvManager.putEnv(name, LocalDesignerWorkspaceInfo.create(name, envPath)); diff --git a/designer-base/src/main/java/com/fr/design/env/LocalDesignerWorkspaceInfo.java b/designer-base/src/main/java/com/fr/design/env/LocalDesignerWorkspaceInfo.java index 70de03441..7da0d9fe0 100644 --- a/designer-base/src/main/java/com/fr/design/env/LocalDesignerWorkspaceInfo.java +++ b/designer-base/src/main/java/com/fr/design/env/LocalDesignerWorkspaceInfo.java @@ -77,7 +77,8 @@ public class LocalDesignerWorkspaceInfo implements DesignerWorkspaceInfo { @Override public boolean checkValid(){ File file = new File(this.path); - if(!file.isDirectory() || !ComparatorUtils.equals(file.getName(), "WEB-INF")) { + //判断不是文件夹/路径不在WEB-INF下/代码启动三种情况 + if(!file.isDirectory() || !ComparatorUtils.equals(file.getName(), "WEB-INF") || this.path.startsWith(".")) { return false; } From 4862eacfa598813ed85609697d8fce7991b650cb Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Wed, 22 Aug 2018 14:30:02 +0800 Subject: [PATCH 11/29] REPORT-10763 & REPORT-10562 & REPORT-10541 --- .../connect/DatabaseConnectionPane.java | 31 - .../mainframe/toolbar/ToolBarMenuDock.java | 5 + .../onlineupdate/actions/FileDownloader.java | 118 +++ .../actions/SoftwareUpdateAction.java | 34 + .../onlineupdate/domain/DownloadItem.java | 102 +++ .../onlineupdate/domain/UpdateConstants.java | 55 ++ .../UpdateInfoCachePropertyManager.java | 41 + .../factory/DirectoryOperationFactory.java | 132 +++ .../onlineupdate/ui/dialog/RestoreDialog.java | 122 +++ .../ui/dialog/RestoreResultDialog.java | 182 ++++ .../ui/dialog/UpdateMainDialog.java | 821 ++++++++++++++++++ .../ui/widget/ColorfulCellRender.java | 65 ++ .../onlineupdate/ui/widget/LoadingLabel.java | 48 + .../ui/widget/UpdateActionLabel.java | 95 ++ .../ui/widget/UpdateInfoTable.java | 46 + .../ui/widget/UpdateInfoTableCellRender.java | 48 + .../ui/widget/UpdateInfoTableModel.java | 65 ++ .../widget/UpdateInfoTextAreaCellRender.java | 43 + .../src/main/java/com/fr/env/EnvListPane.java | 2 +- .../fr/design/images/update/busy-icon0.png | Bin 0 -> 3588 bytes .../fr/design/images/update/busy-icon1.png | Bin 0 -> 3585 bytes .../fr/design/images/update/busy-icon10.png | Bin 0 -> 3568 bytes .../fr/design/images/update/busy-icon11.png | Bin 0 -> 3581 bytes .../fr/design/images/update/busy-icon12.png | Bin 0 -> 3589 bytes .../fr/design/images/update/busy-icon13.png | Bin 0 -> 3586 bytes .../fr/design/images/update/busy-icon14.png | Bin 0 -> 3586 bytes .../fr/design/images/update/busy-icon2.png | Bin 0 -> 3585 bytes .../fr/design/images/update/busy-icon3.png | Bin 0 -> 3572 bytes .../fr/design/images/update/busy-icon4.png | Bin 0 -> 3576 bytes .../fr/design/images/update/busy-icon5.png | Bin 0 -> 3580 bytes .../fr/design/images/update/busy-icon6.png | Bin 0 -> 3581 bytes .../fr/design/images/update/busy-icon7.png | Bin 0 -> 3598 bytes .../fr/design/images/update/busy-icon8.png | Bin 0 -> 3594 bytes .../fr/design/images/update/busy-icon9.png | Bin 0 -> 3581 bytes .../fr/design/images/update/update_new.png | Bin 0 -> 1110 bytes .../onlineupdate/actions/FileDownloader.java | 7 + .../fr/onlineupdate/domain/DownloadItem.java | 7 + .../factory/DirectoryOperationFactory.java | 7 + 38 files changed, 2044 insertions(+), 32 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/domain/DownloadItem.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateInfoCachePropertyManager.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/factory/DirectoryOperationFactory.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/ColorfulCellRender.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/LoadingLabel.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateActionLabel.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTable.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableCellRender.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableModel.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTextAreaCellRender.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon0.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon1.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon10.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon11.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon12.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon13.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon14.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon2.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon3.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon4.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon5.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon6.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon7.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon8.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/busy-icon9.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/update/update_new.png create mode 100644 designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java create mode 100644 designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java create mode 100644 designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java index 74cebeb5a..aa56e76b0 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java @@ -29,9 +29,6 @@ import java.awt.event.WindowEvent; */ public abstract class DatabaseConnectionPane extends BasicBeanPane { - // 编码转换. - private UIComboBox originalCharSetComboBox; - private UIComboBox newCharSetComboBox; private UILabel message; private UIButton okButton; private UIButton cancelButton; @@ -44,8 +41,6 @@ public abstract class DatabaseConnectionPane { + private static final int REPEAT_DOWNLOAD_TIMES = 3; + private DownloadItem[] files; + private String saveDir; + //已经完成的大小 + private long completeSize; + + public FileDownloader(DownloadItem[] files, String saveDir) { + this.files = files; + this.saveDir = saveDir; + } + + @Override + protected Boolean doInBackground() throws Exception { + if (ArrayUtils.isNotEmpty(files)) { + setCompleteSize(0L); + for (DownloadItem item : files) { + for (int i = 0; i < REPEAT_DOWNLOAD_TIMES; i++) { + item.setTotalLength(0); + item.setDownloadLength(0); + download(item); + if (item.getTotalLength() == item.getDownloadLength()) { + break; + } + } + if (item.getTotalLength() != item.getDownloadLength()) { + JOptionPane.showMessageDialog(null, + com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Download_Failed"), + com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Alert"), JOptionPane.ERROR_MESSAGE); + return false; + } else { + item.setDownloadLength(0); + completeSize += item.getTotalLength(); + } + } + } + return true; + } + + @Override + protected void done() { + boolean success = false; + try { + success = get(); + } catch (InterruptedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } catch (ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + if (success) { + onDownloadSuccess(); + } else { + onDownloadFailed(); + } + } + + private void download(DownloadItem item) throws Exception { + URL url = new URL(item.getUrl()); + URLConnection connection = url.openConnection(); + int total = connection.getContentLength(); + item.setTotalLength(total); + InputStream reader = connection.getInputStream(); + File tempFile = new File(StableUtils.pathJoin(saveDir, item.getName())); + StableUtils.makesureFileExist(tempFile); + FileOutputStream writer = new FileOutputStream(tempFile); + byte[] buffer = new byte[UpdateConstants.BYTE]; + int bytesRead = 0; + int totalBytesRead = 0; + while ((bytesRead = reader.read(buffer)) != -1) { + writer.write(buffer, 0, bytesRead); + buffer = new byte[UpdateConstants.BYTE]; + totalBytesRead += bytesRead; + item.setDownloadLength(totalBytesRead); + publish(item); + } + reader.close(); + writer.close(); + } + + /** + * 下载成功 + */ + public abstract void onDownloadSuccess(); + + /** + * 下载失败 + */ + public abstract void onDownloadFailed(); + + public long getCompleteSize() { + return completeSize; + } + + public void setCompleteSize(long completeSize) { + this.completeSize = completeSize; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java b/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java new file mode 100644 index 000000000..eee2ab2f1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java @@ -0,0 +1,34 @@ +package com.fr.design.onlineupdate.actions; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.UpdateAction; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.onlineupdate.ui.dialog.UpdateMainDialog; +import com.fr.locale.InterProviderFactory; + +import java.awt.event.ActionEvent; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class SoftwareUpdateAction extends UpdateAction { + + + public SoftwareUpdateAction() { + setName(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_UpdateAndUpgrade")); + setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/update/update_new.png")); + + } + + /** + * 事件响应 + * + * @param e 事件 + */ + @Override + public void actionPerformed(ActionEvent e) { + UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); + dialog.showDialog(); + } +} + diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/DownloadItem.java b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/DownloadItem.java new file mode 100644 index 000000000..6871190aa --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/DownloadItem.java @@ -0,0 +1,102 @@ +package com.fr.design.onlineupdate.domain; + +import com.fr.general.ComparatorUtils; +import com.fr.json.JSONObject; + +import java.util.Date; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class DownloadItem { + + //显示为百分比 + private static final int PERCENTAGE_RATIO = 100; + //显示kB + private static final int BYTETOKB_RATIO = 1000; + + private String name; + private String url; + private long size; + + private int totalLength; + private int downloadLength; + + public DownloadItem(JSONObject json) { + this(json.optString("name"), json.optString("url"), json.optLong("size")); + } + + public DownloadItem(String name, String url, long size) { + this.name = name; + this.url = url; + this.size = size; + } + + public String getName() { + return name; + } + + public String getUrl() { + return url + "?v=" + new Date().getTime(); + } + + + public long getSize() { + return size; + } + + public void setSize(long size) { + this.size = size; + } + + public int getTotalLength() { + return totalLength; + } + + public int getDownloadLength() { + return downloadLength; + } + + public void setTotalLength(int totalLength) { + this.totalLength = totalLength; + } + + public void setDownloadLength(int downloadLength) { + this.downloadLength = downloadLength; + } + + public int getProgressValue() { + return (int) ((downloadLength / (double) totalLength) * PERCENTAGE_RATIO); + } + + public String getProgressString() { + return downloadLength / BYTETOKB_RATIO + "KB/" + totalLength / BYTETOKB_RATIO + "KB"; + } + + /** + * 转化为字符串 + * + * @return 字符串 + */ + @Override + public String toString() { + return "name:" + name + ";download:" + getProgressString(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof DownloadItem + && ComparatorUtils.equals(((DownloadItem) obj).name, name) + && ComparatorUtils.equals(((DownloadItem) obj).url, url); + } + + /** + * 返回一个hash码 + * + * @return hash码 + */ + @Override + public int hashCode() { + return name.hashCode(); + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java new file mode 100644 index 000000000..5bd360542 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java @@ -0,0 +1,55 @@ +package com.fr.design.onlineupdate.domain; + +/** + * Created by XINZAI on 2018/8/21. + */ + +import java.awt.Color; + +/** + * 更新升级的常量 + */ +public interface UpdateConstants { + + String APPS_FOLDER_NAME = "webapps"; + + int CONNECTION_TIMEOUT = 1000 * 5; + Color BAR_COLOR = new Color(0x3384F0); + + String CHANGELOG_X_START = "2018-07-11"; + + String DEFAULT_APP_NAME = "FineReport"; + String DOWNLOAD_DIR = "update"; + String DESIGNER_BACKUP_DIR = "designerbackup"; + + String UPDATE_CACHE_CONFIG_X = "updateCacheConfig10"; + String UPDATE_CACHE_INFO_X = "updateCacheInfo10"; + + + int BYTE = 153600; + + String[] JARS_FOR_SERVER_X = new String[]{ + "fine-activator-10.0.jar", + "fine-core-10.0.jar", + "fine-report-engine-10.0.jar", + "fine-decision-10.0.jar", + "fine-decision-report-10.0.jar", + "fine-schedule-10.0.jar", + "fine-schedule-report-10.0.jar", + "fine-swift-log-adaptor-10.0.jar", + "fine-webui-10.0.jar", + "fine-datasource-10.0.jar", + "fine-third-10.0.jar" + }; + + String[] JARS_FOR_DESIGNER_X = new String[]{ + "fine-report-designer-10.0.jar", + "aspectjrt.jar" + }; + + + String[] LOG_TYPE = new String[]{ + "REPORT", "MOBILE", "CHART", "PFC", "BI" + }; + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateInfoCachePropertyManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateInfoCachePropertyManager.java new file mode 100644 index 000000000..7895c6913 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateInfoCachePropertyManager.java @@ -0,0 +1,41 @@ +package com.fr.design.onlineupdate.domain; + +import com.fr.log.FineLoggerFactory; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Properties; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateInfoCachePropertyManager { + private Properties prop; + private String filePath; + + public UpdateInfoCachePropertyManager(String filePath) { + this.filePath = filePath; + prop = new Properties(); + try { + prop.load(new FileInputStream(filePath)); + } catch (Exception ignored) { + + } + } + + public void updateProperty(String keyName, String keyValue) { + try { + OutputStream fos = new FileOutputStream(filePath); + prop.setProperty(keyName, keyValue); + prop.store(fos, null); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + + public String readProperty(String keyName) { + return prop.getProperty(keyName); + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/factory/DirectoryOperationFactory.java b/designer-base/src/main/java/com/fr/design/onlineupdate/factory/DirectoryOperationFactory.java new file mode 100644 index 000000000..9d929c095 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/factory/DirectoryOperationFactory.java @@ -0,0 +1,132 @@ +package com.fr.design.onlineupdate.factory; + +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StableUtils; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Arrays; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class DirectoryOperationFactory { + /** + * 新建一个目录 + * + * @param dirPath 目录路径 + */ + public static void createNewDirectory(String dirPath) { + try { + File newDirPath = new File(dirPath); + if (!newDirPath.exists()) { + StableUtils.mkdirs(newDirPath); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + + /** + * 删除目录 + * + * @param dirPath 目录路径 + */ + public static void deleteDirectory(String dirPath) { + try { + File dir = new File(dirPath); + if (dir.isDirectory()) { + File[] file = dir.listFiles(); + for (File fileTemp : file) { + deleteDirectory(fileTemp.toString()); + fileTemp.delete(); + } + } else { + dir.delete(); + } + dir.delete(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + + /** + * 复制目录 + * + * @param oldDirPath 被复制目录 + * @param newDirPath 新目录 + */ + public static void copyDirectory(String oldDirPath, String newDirPath) { + File oldDir = new File(oldDirPath); + if (oldDir.isDirectory()) { + StableUtils.mkdirs(new File(newDirPath)); + File[] files = oldDir.listFiles(); + for (File fileTemp : files) { + copyDirectory(fileTemp.toString(), newDirPath + "/" + fileTemp.getName()); + } + } else { + try { + copy(oldDirPath, newDirPath); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + } + + private static void copy(String path1, String path2) throws IOException { + DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(path1))); + DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(path2))); + byte[] date = new byte[in.available()]; + + in.read(date); + out.write(date); + + in.close(); + out.close(); + } + + /** + * 移动目录 + * + * @param oldDirPath 被移动目录 + * @param newDirPath 新目录 + */ + public static void moveDirectory(String oldDirPath, String newDirPath) { + copyDirectory(oldDirPath, newDirPath); + deleteDirectory(oldDirPath); + } + + /** + * 列出过滤后的文件 + * + * @param installHome 安装目录 + * @param backupdir 备份目录 + * @return String数组 + */ + public static String[] listFilteredFiles(String installHome, String backupdir) { + File backupDir = new File(StableUtils.pathJoin(installHome, backupdir)); + StableUtils.mkdirs(backupDir); + File[] fileNames = backupDir.listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.isDirectory(); + } + }); + String[] jarFileName = new String[fileNames.length]; + int j = 0; + for (File fileName : fileNames) { + if ((fileName.isDirectory()) && (ArrayUtils.getLength(fileName.listFiles()) > 0)) {//判断备份文件夹中是否为空,为空不显示 + jarFileName[j++] = fileName.getName(); + } + } + return Arrays.copyOf(jarFileName, j); + } +} diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java new file mode 100644 index 000000000..f197fd182 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java @@ -0,0 +1,122 @@ +package com.fr.design.onlineupdate.ui.dialog; + +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.onlineupdate.factory.DirectoryOperationFactory; +import com.fr.design.onlineupdate.ui.widget.ColorfulCellRender; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.locale.InterProviderFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StableUtils; + +import javax.swing.BoxLayout; +import javax.swing.JDialog; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.ScrollPaneConstants; +import java.awt.BorderLayout; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Arrays; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class RestoreDialog extends JDialog { + private static final int LISTCELLHEIGHT = 30; + private static final Dimension RESTOREJAR = new Dimension(523, 480); + private static final Dimension RESTOREJAR_NORTHPANE = new Dimension(500, 392); + //一个页面上最少显示13个元素 + private static final int NUMOFCELL_LEAST = 13; + + private UIButton okButton; + private UIButton cancelButton; + private JPanel buttonPanel; + private String jarSelected; + + public RestoreDialog(Dialog parent, boolean modal) { + super(parent, modal); + initComponents(); + } + + public RestoreDialog(Frame parent, boolean modal) { + super(parent, modal); + initComponents(); + } + + private void initButton() { + okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Ok")); + cancelButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Cancel")); + + okButton.setEnabled(false); + okButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + RestoreResultDialog dialog = new RestoreResultDialog(DesignerContext.getDesignerFrame(), true, jarSelected); + dialog.showDialog(); + } + }); + cancelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + } + + private void initComponents() { + + this.setResizable(false); + JPanel pane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + this.setContentPane(pane); + + initButton(); + + buttonPanel = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + buttonPanel.add(okButton); + buttonPanel.add(cancelButton); + pane.add(buttonPanel, BorderLayout.SOUTH); + + JPanel jarListPane = new JPanel(); + jarListPane.setLayout(new BoxLayout(jarListPane, BoxLayout.Y_AXIS)); + String[] jarBackupFiles = DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR); + + ArrayUtils.reverse(jarBackupFiles); + String[] jarFilesList = ((jarBackupFiles.length < NUMOFCELL_LEAST) ? Arrays.copyOf(jarBackupFiles, NUMOFCELL_LEAST) : jarBackupFiles); + final JList jarList = new JList(jarFilesList); + jarList.setFixedCellHeight(LISTCELLHEIGHT); + jarList.setCellRenderer(new ColorfulCellRender()); + jarList.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + super.mousePressed(e); + jarSelected = (String) jarList.getSelectedValue(); + okButton.setEnabled((jarSelected != null)); + } + }); + + JScrollPane jsp = new JScrollPane(jarList, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + jsp.setPreferredSize(RESTOREJAR_NORTHPANE); + pane.add(jsp, BorderLayout.NORTH); + + } + + /** + * 显示窗口 + */ + public void showDialog() { + this.setSize(RESTOREJAR); + this.setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Jar_Restore")); + GUICoreUtils.centerWindow(this); + this.setVisible(true); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java new file mode 100644 index 000000000..da0401af9 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -0,0 +1,182 @@ +package com.fr.design.onlineupdate.ui.dialog; + +import com.fr.base.FRContext; +import com.fr.design.RestartHelper; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.ComparatorUtils; +import com.fr.locale.InterProviderFactory; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.project.ProjectConstants; + +import javax.swing.AbstractAction; +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import java.awt.BorderLayout; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class RestoreResultDialog extends JDialog { + private static final Dimension RESTORE = new Dimension(340, 100); + + private static final Dimension RESTORE_OLD_VERSION = new Dimension(340, 135); + + private String jarRestoreDir; + + public RestoreResultDialog(Dialog parent, boolean modal) { + super(parent, modal); + initCommonComponents(); + } + + public RestoreResultDialog(Frame parent, boolean modal, String jarDir) { + super(parent, modal); + this.jarRestoreDir = jarDir; + if (ComparatorUtils.equals(jarDir, com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Restore_Old_Version"))) { + initOldVersionRestoreComps(); + } else { + initCommonComponents(); + } + } + + private void initCommonComponents() { + this.setResizable(false); + JPanel pane = new JPanel(); + pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); + pane.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setContentPane(pane); + + UIButton restartButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restart_Designer")); + UIButton restartLaterButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Restart_Later")); + + restartButton.setFont(new Font("Default", Font.PLAIN, 12)); + restartButton.setEnabled(false); + restartButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + RestartHelper.restart(); + } + }); + restartLaterButton.setFont(new Font("Default", Font.PLAIN, 12)); + restartLaterButton.setEnabled(false); + restartLaterButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + JPanel buttonPane = new JPanel(); + buttonPane.add(restartLaterButton); + buttonPane.add(restartButton); + pane.add(buttonPane, BorderLayout.SOUTH); + + JPanel progressLabelPane = new JPanel(new BorderLayout()); + UILabel jarProgressLabel = new UILabel((com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restore_To")) + " " + jarRestoreDir + " " + (com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_WorksAfterRestart"))); + jarProgressLabel.setFont(new Font("Default", Font.PLAIN, 12)); + jarProgressLabel.setVisible(true); + progressLabelPane.add(jarProgressLabel); + pane.add(progressLabelPane, BorderLayout.CENTER); + + UpdateMainDialog.deletePreviousPropertyFile(); + + putJarBackupFiles(); + restartButton.setEnabled(true); + restartLaterButton.setEnabled(true); + this.setSize(RESTORE); + this.setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Jar_Restore")); + } + + private void initOldVersionRestoreComps() { + this.setResizable(false); + JPanel pane = new JPanel(); + pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); + pane.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setContentPane(pane); + + UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Ok")); + okButton.setFont(new Font("Default", Font.PLAIN, 12)); + okButton.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + + JPanel buttonPane = new JPanel(); + buttonPane.add(okButton); + pane.add(buttonPane, BorderLayout.SOUTH); + + JPanel infoPane = new JPanel(new BorderLayout()); + JTextArea jTextArea = new JTextArea( + com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Already_Backup_Old_Project") + + StringUtils.BLANK + + StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR) + + com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Unzip_Replace_Restore") + ); + jTextArea.setLineWrap(true); + jTextArea.setEditable(false); + jTextArea.setBackground(null); + jTextArea.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)); + jTextArea.setFont(new Font("Default", Font.PLAIN, 12)); + infoPane.add(jTextArea); + pane.add(infoPane, BorderLayout.CENTER); + + this.setSize(RESTORE_OLD_VERSION); + this.setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Updater_Restore_to_V8")); + } + + + /** + * 显示窗口 + */ + public void showDialog() { + GUICoreUtils.centerWindow(this); + this.setVisible(true); + } + + private void putJarBackupFiles() { + Map map = new HashMap(); + java.util.List list = new ArrayList(); + String installHome = StableUtils.getInstallHome(); + + putJarBackupFilesToInstallLib(installHome, map, list); + putJarBackupFilesToInstallEnv(installHome, map, list); + RestartHelper.saveFilesWhichToMove(map); + RestartHelper.saveFilesWhichToDelete(list.toArray(new String[list.size()])); + } + + private void putJarBackupFilesToInstallLib(String installHome, Map map, java.util.List list) { + String[] files = UpdateConstants.JARS_FOR_DESIGNER_X; + String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), + StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + } + } + + private void putJarBackupFilesToInstallEnv(String installHome, Map map, java.util.List list) { + String[] files = UpdateConstants.JARS_FOR_SERVER_X; + String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + } + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java new file mode 100644 index 000000000..9ca0fccc0 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -0,0 +1,821 @@ +package com.fr.design.onlineupdate.ui.dialog; + +import com.fr.base.FRContext; +import com.fr.design.RestartHelper; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.dialog.UIDialog; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.onlineupdate.actions.FileDownloader; +import com.fr.design.onlineupdate.domain.DownloadItem; +import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.onlineupdate.domain.UpdateInfoCachePropertyManager; +import com.fr.design.onlineupdate.factory.DirectoryOperationFactory; +import com.fr.design.onlineupdate.ui.widget.LoadingLabel; +import com.fr.design.onlineupdate.ui.widget.UpdateActionLabel; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTable; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableCellRender; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableModel; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTextAreaCellRender; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.ComparatorUtils; +import com.fr.general.DateUtils; +import com.fr.general.GeneralUtils; +import com.fr.general.IOUtils; +import com.fr.general.SiteCenter; +import com.fr.general.http.HttpClient; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.project.ProjectConstants; +import com.fr.workspace.WorkContext; +import com.sun.java.swing.plaf.motif.MotifProgressBarUI; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.RowSorter; +import javax.swing.SortOrder; +import javax.swing.SwingConstants; +import javax.swing.SwingWorker; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.TableRowSorter; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ExecutionException; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateMainDialog extends UIDialog { + public static final Dimension DEFAULT = new Dimension(660, 620); + + private static final Dimension PROGRESSBAR = new Dimension(120, 15); + private static final Dimension UPDATE_BUTTON = new Dimension(80, 24); + private static final int UPDATE_PANE_ROW_SIZE = 30; + private static final int UPDATE_CONTENT_PANE_ROW_SIZE = 10; + private static final int UPDATE_CONTENT_PANE_COLUMN_SIZE = 10; + private static final int UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE = 100; + private static final int SEARCH_PANE_ROW_SIZE = 50; + private static final int SEARCH_PANE_TEXT_COLUMN = 130; + private static final int SEARCH_PANE_COLUMN_GAP = 3; + private static final int UPDATE_INFO_TABLE_HEADER_TIME_WIDTH = 120; + private static final int UPDATE_CONTENT_PANE_BORDER_COLOR = 0xCCCCCC; + private static final int RESTORE_LABEL_COLOR = 0x3384F0; + + private static final String UPDATE_CACHE_STATE_FAIL = "fail"; + private static final String UPDATE_CACHE_STATE_SUCCESS = "success"; + + private static final SimpleDateFormat CHANGELOG_FORMAT = new SimpleDateFormat("M/d/y, h:m:s a", Locale.ENGLISH); + private static final SimpleDateFormat UPDATE_INFO_TABLE_FORMAT = new SimpleDateFormat("yyyy.MM.dd"); + + private Set downloadItems = new HashSet(); + private JSONObject downloadFileConfig; + //最新版本标签 + private LoadingLabel loadingLabel; + //更新按钮 + private UIButton updateButton; + //有新版本提示标签 + private UILabel updateLabel; + + //jar包版本信息面板,包括当前版本和最新版本 + private JPanel jarVersionInfoPane; + //jar包更新信息面板,包括每个版本更新的信息 + private JPanel jarUpdateInfoPane; + //jar包更新操作面板,包括更新重启按钮和进度条 + private JPanel updateActionPane; + //进度条 + private JProgressBar progressBar; + //更新版本提示面板 + private JPanel updateVersionReminderPane; + //jar包版本标签 + private UILabel jarCurrentLabel; + //jar包还原标签 + private UILabel jarRestoreLabel; + //更新信息搜索按钮 + private UIButton searchUpdateInfoBtn; + //搜索更新信息关键词文本框 + private UITextField searchUpdateInfoKeyword; + + private boolean updateSuccessful; + + private UpdateInfoTable updateInfoTable; + + private ArrayList updateInfoList; + + private boolean getUpdateInfoSuccess; + + private UpdateInfoCachePropertyManager cacheProperty; + private String lastUpdateCacheTime; + private String lastUpdateCacheState = UPDATE_CACHE_STATE_FAIL; + + public UpdateMainDialog(Dialog parent) { + super(parent); + initComponents(); + } + + public UpdateMainDialog(Frame parent) { + super(parent); + setModal(true); + initComponents(); + } + + private void initUpdateActionPane() { + double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; + double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; + double[] columnUpdateSubContentPaneProgressSize = {TableLayout.FILL, TableLayout.PREFERRED}; + double[] columnUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_COLUMN_SIZE, TableLayout.FILL, TableLayout.PREFERRED}; + JPanel progressBarPane = new JPanel(new BorderLayout()); + + progressBar = new JProgressBar(); + progressBar.setUI(new MotifProgressBarUI()); + progressBar.setForeground(UpdateConstants.BAR_COLOR); + progressBar.setVisible(false); + progressBar.setStringPainted(true); + progressBar.setPreferredSize(PROGRESSBAR); + + updateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_New_Version_Available")); + updateLabel.setHorizontalAlignment(SwingConstants.RIGHT); + updateLabel.setVisible(false); + + progressBarPane.add(GUICoreUtils.createBorderLayoutPane( + progressBar, BorderLayout.CENTER, + updateLabel, BorderLayout.EAST + ), BorderLayout.CENTER); + + updateActionPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateSubContentPaneProgressSize, progressBarPane, updateButton), new UILabel()}, + new Component[]{new UILabel(), new UILabel(), new UILabel()} + }, rowUpdateSubContentPaneSize, columnUpdateSubContentPaneSize, LayoutConstants.VGAP_LARGE); + } + + private JPanel initPaneContent(Color color, double[] row, double[] column, Component... var) { + JPanel paneContent = TableLayoutHelper.createTableLayoutPane(new Component[][]{var}, row, column); + paneContent.setBackground(color); + return paneContent; + } + + private void initJarVersionInfoPane() { + double[] rowUpdatePaneSize = {UPDATE_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED}; + double[] columnUpdatePaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; + double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; + double[] columnUpdateContentPaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; + double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; + double[] columnUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_COLUMN_SIZE, TableLayout.FILL, TableLayout.PREFERRED}; + double[] columnUpdateSubContentPaneLabelSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; + + JPanel jarUpdateContentPane = new JPanel(); + jarUpdateContentPane.setLayout(new BorderLayout()); + jarUpdateContentPane.setBorder(BorderFactory.createLineBorder(new Color(UPDATE_CONTENT_PANE_BORDER_COLOR))); + + JPanel jarUpdateContentPane2 = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), updateVersionReminderPane, new UILabel()}, + new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_JAR_Version")), jarCurrentLabel), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Latest_JAR")), loadingLabel), new UILabel()}, + new Component[]{new UILabel(), new UILabel(), new UILabel()} + }, rowUpdateSubContentPaneSize, columnUpdateSubContentPaneSize, LayoutConstants.VGAP_LARGE); + jarUpdateContentPane2.setBackground(Color.WHITE); + jarUpdateContentPane.add(jarUpdateContentPane2); + jarVersionInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_JarUpdate")), new UILabel(), jarRestoreLabel), new UILabel()}, + new Component[]{new UILabel(), jarUpdateContentPane, new UILabel()} + }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); + } + + private void initJarUpdateInfoPane() { + double[] rowUpdatePaneSize = {SEARCH_PANE_ROW_SIZE, TableLayout.FILL}; + double[] columnUpdatePaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; + + double[] searchRow = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, SEARCH_PANE_COLUMN_GAP * 2}; + double[] searchColumn = {TableLayout.FILL, SEARCH_PANE_TEXT_COLUMN, TableLayout.PREFERRED}; + initUpdateInfoSearchPane(); + JPanel searchPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), searchUpdateInfoKeyword, searchUpdateInfoBtn}, + new Component[]{new UILabel(), new UILabel(), new UILabel()} + }, searchRow, searchColumn, LayoutConstants.VGAP_LARGE); + + String[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Date"), com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Content"), com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_SignHeader")}; + initUpdateInfoTable(columnNames); + + UIScrollPane uiScrollPane = new UIScrollPane(updateInfoTable); + jarUpdateInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), searchPane, new UILabel()}, + new Component[]{new UILabel(), uiScrollPane, new UILabel()} + }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); + } + + private void initUpdateInfoTable(String[] columnNames) { + int updateTimeColIndex = 0; + int updateTitleColIndex = 1; + int updateSignColIndex = 2; + + updateInfoTable = new UpdateInfoTable(columnNames); + + updateInfoTable.setShowGrid(false); + updateInfoTable.setCellSelectionEnabled(false); + TableRowSorter sorter = new TableRowSorter(updateInfoTable.getDataModel()); + sorter.setSortable(updateTimeColIndex, true); + sorter.setSortable(updateTitleColIndex, false); + sorter.setSortable(updateSignColIndex, false); + updateInfoTable.setRowSorter(sorter); + List sortKeys = new ArrayList(); + sortKeys.add(new RowSorter.SortKey(updateTimeColIndex, SortOrder.DESCENDING)); + sorter.setSortKeys(sortKeys); + + updateInfoTable.getTableHeader().setReorderingAllowed(false); + updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMaxWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMinWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); + updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); + updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); + updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); + updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Date")).setCellRenderer(new UpdateInfoTableCellRender()); + updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Content")).setCellRenderer(new UpdateInfoTextAreaCellRender()); + } + + private void initUpdateInfoSearchPane() { + searchUpdateInfoKeyword = new UITextField(); + searchUpdateInfoKeyword.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + } + + @Override + public void removeUpdate(DocumentEvent e) { + String keyword = searchUpdateInfoKeyword.getText(); + if (ComparatorUtils.equals(keyword, StringUtils.EMPTY) && getUpdateInfoSuccess) { + updateInfoList.clear(); + getUpdateInfo(keyword).execute(); + } + } + + @Override + public void changedUpdate(DocumentEvent e) { + } + }); + searchUpdateInfoBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Search")); + searchUpdateInfoBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (getUpdateInfoSuccess) { + updateInfoList.clear(); + getUpdateInfo(searchUpdateInfoKeyword.getText()).execute(); + } + } + }); + } + + private void initButtonAndLabel() { + loadingLabel = new LoadingLabel(); + loadingLabel.setText(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Checking_Jar_Update")); + updateButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Update")); + updateButton.setPreferredSize(UPDATE_BUTTON); + updateButton.setEnabled(false); + + double[] rowSize = {TableLayout.PREFERRED}; + + double[] colSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; + updateVersionReminderPane = initPaneContent( + Color.WHITE, rowSize, colSize, + new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Designer_Version")), + new UILabel(UpdateConstants.DEFAULT_APP_NAME + StringUtils.BLANK + ProductConstants.VERSION) + ); + + + jarCurrentLabel = new UILabel(StringUtils.isEmpty(GeneralUtils.readBuildNO()) ? com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Not_Install_Version") : GeneralUtils.readBuildNO(), SwingConstants.CENTER); + UILabel noJarPreviousRevision = new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_No_Previous_Version")); + UpdateActionLabel jarRestorePreviousRevision = new UpdateActionLabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restore"), false); + jarRestorePreviousRevision.setForeground(new Color(RESTORE_LABEL_COLOR)); + jarRestorePreviousRevision.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + RestoreDialog dialog = new RestoreDialog(DesignerContext.getDesignerFrame(), true); + dialog.showDialog(); + } + }); + //choose RestoreLabel to show + boolean isNeedRestore = ArrayUtils.isNotEmpty(DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), getBackupDirectory())); + jarRestoreLabel = isNeedRestore ? jarRestorePreviousRevision : noJarPreviousRevision; + } + + private void initComponents() { + JPanel contentPane = (JPanel) getContentPane(); + contentPane.setLayout(new BorderLayout()); + + + initButtonAndLabel(); + + initJarVersionInfoPane(); + initJarUpdateInfoPane(); + initUpdateActionPane(); + + add(jarVersionInfoPane, BorderLayout.NORTH); + add(jarUpdateInfoPane, BorderLayout.CENTER); + add(updateActionPane, BorderLayout.SOUTH); + + addActionListenerForUpdateBtn(); + + new SwingWorker() { + @Override + protected JSONObject doInBackground() throws Exception { + HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("jar10.update")); + hc.setTimeout(UpdateConstants.CONNECTION_TIMEOUT); + return new JSONObject(hc.getResponseText()); + } + + @Override + protected void done() { + try { + downloadFileConfig = get(); + showDownLoadInfo(); + } catch (InterruptedException e) { + stopLoading(); + } catch (ExecutionException e) { + stopLoading(); + } finally { + getUpdateInfo(StringUtils.EMPTY).execute(); + } + } + }.execute(); + } + + private SwingWorker getUpdateInfo(final String keyword) { + updateInfoList = new ArrayList(); + lastUpdateCacheTime = UpdateConstants.CHANGELOG_X_START; + String cacheConfigPath = getUpdateCacheConfig(); + cacheProperty = new UpdateInfoCachePropertyManager(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres", cacheConfigPath)); + String recordUpdateTime = cacheProperty.readProperty("updateTime"); + if (StringUtils.isNotEmpty(recordUpdateTime)) { + lastUpdateCacheTime = recordUpdateTime; + } + String recordUpdateState = cacheProperty.readProperty("updateState"); + if (StringUtils.isNotEmpty(recordUpdateState)) { + lastUpdateCacheState = recordUpdateState; + } + return new SwingWorker() { + @Override + protected JSONArray doInBackground() { + try { + getUpdateInfoSuccess = false; + //step1:read from cache file + getCachedUpdateInfo(keyword); + //step2:read from website,start from cacheRecordTime + if (downloadFileConfig == null) { + throw new Exception("network error."); + } + HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("changelog10") + "&start=" + lastUpdateCacheTime + "&end=" + getLatestJARTimeStr()); + hc.asGet(); + hc.setTimeout(UpdateConstants.CONNECTION_TIMEOUT * 2); + String responseText = hc.getResponseText(); + JSONArray array = JSONArray.create(); + //假如返回"-1",说明socket出错了 + if (!ComparatorUtils.equals(responseText, "-1")) { + array = new JSONArray(responseText); + } + hc.release(); + return array; + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + return JSONArray.create(); + } + + @Override + protected void done() { + try { + JSONArray jsonArray = get(); + //step3:generateInfoTableList + updateInfoTable.getDataModel().populateBean(generateUpdateInfoList(jsonArray, keyword)); + + getUpdateInfoSuccess = true; + //step4:update cache file,start from cacheRecordTime,end latest server jartime + updateCachedInfoFile(jsonArray); + } catch (Exception e) { + getUpdateInfoSuccess = true; + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + }; + } + + //从文件中读取缓存的更新信息 + private void getCachedUpdateInfo(String keyword) throws Exception { + String cacheInfoPath = getUpdateCacheInfo(); + File cacheFile = new File(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres", cacheInfoPath)); + if (!ComparatorUtils.equals(lastUpdateCacheState, "success")) { + cacheFile.delete(); + return; + } + if (cacheFile.exists()) { + FileReader reader = new FileReader(cacheFile); + BufferedReader br = new BufferedReader(reader); + String readStr, updateTimeStr; + + while ((readStr = br.readLine()) != null) { + String[] updateInfo = readStr.split("\\t"); + if (updateInfo.length == 2) { + updateTimeStr = updateInfo[0]; + Date updateTime = CHANGELOG_FORMAT.parse(updateTimeStr); + //形如 Build#release-2018.07.31.03.03.52.80 + String currentNO = GeneralUtils.readBuildNO(); + Date curJarDate = UPDATE_INFO_TABLE_FORMAT.parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (!ComparatorUtils.equals(keyword, StringUtils.EMPTY)) { + if (!containsKeyword(UPDATE_INFO_TABLE_FORMAT.format(updateTime), keyword) && !containsKeyword(updateInfo[1], keyword)) { + continue; + } + } + if (isValidLogInfo(updateInfo[1])) { + updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateInfo[1], updateTime.after(curJarDate)}); + } + } + } + br.close(); + reader.close(); + } + } + + private void updateCachedInfoFile(JSONArray jsonArray) throws Exception { + String cacheDirPath = StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres"); + File cacheFileDir = new File(cacheDirPath); + if (!StableUtils.mkdirs(cacheFileDir)) { + FineLoggerFactory.getLogger().error("make dir error."); + return; + } + final File cacheFile = new File(StableUtils.pathJoin(cacheDirPath, getUpdateCacheInfo())); + if (!cacheFile.exists()) { + cacheFile.createNewFile(); + lastUpdateCacheTime = UpdateConstants.CHANGELOG_X_START; + lastUpdateCacheState = UPDATE_CACHE_STATE_FAIL; + } + if (downloadFileConfig == null) { + return; + } + String endTime = getLatestJARTimeStr(); + if (endTime.equals(lastUpdateCacheTime) || jsonArray.length() == 0 || ComparatorUtils.compare(endTime, lastUpdateCacheTime) <= 0) { + return; + } + FileWriter fileWriter = new FileWriter(cacheFile, true); + BufferedWriter bufferWriter = new BufferedWriter(fileWriter); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jo = (JSONObject) jsonArray.get(i); + bufferWriter.write((String) jo.get("update") + '\t' + jo.get("title")); + bufferWriter.newLine(); + bufferWriter.flush(); + } + bufferWriter.close(); + fileWriter.close(); + lastUpdateCacheState = UPDATE_CACHE_STATE_SUCCESS; + lastUpdateCacheTime = endTime; + cacheProperty.updateProperty("updateTime", lastUpdateCacheTime); + cacheProperty.updateProperty("updateState", lastUpdateCacheState); + } + + private ArrayList generateUpdateInfoList(JSONArray jsonArray, String keyword) throws Exception { + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jo = (JSONObject) jsonArray.get(i); + String updateTitle = (String) jo.get("title"); + String updateTimeStr = (String) jo.get("update"); + Date updateTime = CHANGELOG_FORMAT.parse(updateTimeStr); + //形如 Build#release-2018.07.31.03.03.52.80 + String currentNO = GeneralUtils.readBuildNO(); + Date curJarDate = UPDATE_INFO_TABLE_FORMAT.parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (!ComparatorUtils.equals(keyword, StringUtils.EMPTY)) { + if (!containsKeyword(UPDATE_INFO_TABLE_FORMAT.format(updateTime), keyword) && !containsKeyword(updateTitle, keyword)) { + continue; + } + } + if (isValidLogInfo(updateTitle)) { + updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateTitle, updateTime.after(curJarDate)}); + } + } + return new ArrayList(updateInfoList); + } + + private boolean containsKeyword(String str, String keyword) { + return str.toUpperCase().contains(keyword.toUpperCase()); + } + + private void stopLoading() { + loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Connect_VersionUpdateServer_Failed")); + } + + + private void showDownLoadInfo() { + //形如 Build#release-2018.07.31.03.03.52.80 + String buildNO = downloadFileConfig.optString("buildNO"); + Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); + String serverVersionNO = downloadFileConfig.optString("versionNO"); + String currentVersionNO = ProductConstants.RELEASE_VERSION; + String[] serverVersionSplitStr = serverVersionNO.split("\\."); + String[] currentVersionSplitStr = currentVersionNO.split("\\."); + int index = 0; + int compareResult; + int versionLength = Math.min(serverVersionSplitStr.length, currentVersionSplitStr.length); + + //形如 Build#release-2018.07.31.03.03.52.80 + String currentNO = GeneralUtils.readBuildNO(); + if (!".".equals(StableUtils.getInstallHome())) { + Date currentDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.DAY) > 0) { + updateButton.setEnabled(true); + updateLabel.setVisible(true); + loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); + } else { + loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Already_Latest_Version")); + } + } else { + updateButton.setEnabled(true); + updateLabel.setVisible(true); + loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); + } + + while (index < versionLength) { + compareResult = serverVersionSplitStr[index].length() - currentVersionSplitStr[index].length(); + if (0 == compareResult) { + compareResult = serverVersionSplitStr[index].compareTo(currentVersionSplitStr[index]); + if (0 == compareResult) { + ++index; + continue; + } + break; + } + break; + } + + initMapWithInfo(downloadFileConfig); + } + + public void initMapWithInfo(JSONObject result) { + addJarNameToMap(result, "designer"); + addJarNameToMap(result, "server"); + } + + private void addJarNameToMap(JSONObject result, String category) { + JSONArray jsonArray = result.optJSONArray(category); + if (jsonArray != null) { + for (int i = 0, len = jsonArray.length(); i < len; i++) { + JSONObject jo = jsonArray.optJSONObject(i); + String downloadName = jo.optString("name"); + String downloadUrl = jo.optString("url"); + long downloadSize = jo.optLong("size"); + if (ComparatorUtils.equals(category, "server")) { + File currentJAR = new File(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), ProjectConstants.LIB_NAME, downloadName)); + if (currentJAR.exists() && ComparatorUtils.equals(currentJAR.length(), downloadSize)) { + //假如大小一样的jar包就不要下载了 + continue; + } + } + downloadItems.add(new DownloadItem(downloadName, downloadUrl, downloadSize)); + } + } + } + + /** + * jar包更新按钮监听器 + */ + private void addActionListenerForUpdateBtn() { + updateButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (updateSuccessful) { + RestartHelper.restart(); + } else { + deletePreviousPropertyFile(); + updateButton.setEnabled(false); + progressBar.setVisible(true); + updateLabel.setVisible(false); + + new FileDownloader( + downloadItems.toArray(new DownloadItem[downloadItems.size()]), + StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DOWNLOAD_DIR)) { + @Override + protected void process(java.util.List chunks) { + DownloadItem fileInfo = chunks.get(chunks.size() - 1); + progressBar.setString(fileInfo.getName() + " " + fileInfo.getProgressString()); + progressBar.setValue(fileInfo.getProgressValue()); + } + + @Override + public void onDownloadSuccess() { + updateButton.setEnabled(true); + progressBar.setVisible(false); + backup(); + putNewFiles(); + updateSuccessful = true; + updateButton.setText(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restart_Designer")); + } + + @Override + public void onDownloadFailed() { + progressBar.setVisible(false); + } + }.execute(); + } + } + }); + } + + /** + * 确保升级更新之前删除以前的配置文件 + */ + public static void deletePreviousPropertyFile() { + //在进行更新升级之前确保move和delete.properties删除 + File moveFile = new File(RestartHelper.MOVE_FILE); + File delFile = new File(RestartHelper.RECORD_FILE); + if ((moveFile.exists()) && (!moveFile.delete())) { + FineLoggerFactory.getLogger().error(RestartHelper.MOVE_FILE + "delete failed!"); + } + if ((delFile.exists()) && (!delFile.delete())) { + FineLoggerFactory.getLogger().error(RestartHelper.RECORD_FILE + "delete failed!"); + } + } + + /** + * JAR包更新的时候备份老的jar包,包括设计器相关的和服务器相关的几个 + */ + private void backup() { + String installHome = StableUtils.getInstallHome(); + //jar包备份文件的目录为"backup/"+jar包当前版本号 + String todayBackupDir = StableUtils.pathJoin(installHome, getBackupDirectory(), (GeneralUtils.readBuildNO())); + backupFilesFromInstallEnv(installHome, todayBackupDir, getJARList4Server()); + backupFilesFromInstallLib(installHome, todayBackupDir, getJARList4Designer()); + jarCurrentLabel.setText(downloadFileConfig.optString("buildNO")); + } + + private void backupFilesFromInstallEnv(String installHome, String todayBackupDir, String[] files) { + for (String file : files) { + try { + IOUtils.copy( + new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(todayBackupDir))); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + } + + private void backupFilesFromInstallLib(String installHome, String todayBackupDir, String[] files) { + for (String file : files) { + try { + IOUtils.copy( + new File(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(todayBackupDir))); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + } + + private void putNewFiles() { + Map map = new HashMap(); + java.util.List list = new ArrayList(); + String installHome = StableUtils.getInstallHome(); + putNewFilesToInstallLib(installHome, getDownLoadJAR4Designer(), map, list); + putNewFilesToInstallEnv(installHome, getDownLoadJAR4Server(), map, list); + RestartHelper.saveFilesWhichToMove(map); + RestartHelper.saveFilesWhichToDelete(list.toArray(new String[list.size()])); + } + + private void putNewFilesToInstallLib(String installHome, String[] files, Map map, java.util.List list) { + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), + StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + } + } + + private void putNewFilesToInstallEnv(String installHome, String[] files, Map map, java.util.List list) { + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + } + } + + //获取备份目录 + private String getBackupDirectory() { + return UpdateConstants.DESIGNER_BACKUP_DIR; + } + + //获取服务器jar包列表 + private String[] getJARList4Server() { + return UpdateConstants.JARS_FOR_SERVER_X; + } + + //获取设计器jar包列表 + private String[] getJARList4Designer() { + return UpdateConstants.JARS_FOR_DESIGNER_X; + } + + //获取服务器jar包下载列表 + private String[] getDownLoadJAR4Server() { + ArrayList jarList = new ArrayList(); + for (DownloadItem downloadItem : downloadItems) { + String downloadItemName = downloadItem.getName(); + if (ArrayUtils.contains(getJARList4Server(), downloadItemName)) { + jarList.add(downloadItemName); + } + } + return jarList.toArray(new String[jarList.size()]); + } + + //获取设计器jar包下载列表 + private String[] getDownLoadJAR4Designer() { + ArrayList jarList = new ArrayList(); + for (DownloadItem downloadItem : downloadItems) { + String downloadItemName = downloadItem.getName(); + if (ArrayUtils.contains(getJARList4Designer(), downloadItemName)) { + jarList.add(downloadItemName); + } + } + return jarList.toArray(new String[jarList.size()]); + } + + //获取更新日志缓存配置文件名 + private String getUpdateCacheConfig() { + return UpdateConstants.UPDATE_CACHE_CONFIG_X; + } + + //获取更新日志缓存内容文件名 + private String getUpdateCacheInfo() { + return UpdateConstants.UPDATE_CACHE_INFO_X; + } + + //获取最新的jar包时间字符串 + private String getLatestJARTimeStr() { + if (downloadFileConfig == null) { + return StringUtils.EMPTY; + } + String buildNO = downloadFileConfig.optString("buildNO"); + Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + return df.format(jarDate); + } + + //判断是否是有效的日志内容 + private boolean isValidLogInfo(String logContent) { + String log = logContent.toUpperCase(); + for (String s : UpdateConstants.LOG_TYPE) { + if (log.startsWith(s)) { + return true; + } + } + return false; + } + + /** + * 显示窗口 + */ + public void showDialog() { + setSize(DEFAULT); + setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_UpdateAndUpgrade")); + GUICoreUtils.centerWindow(this); + setVisible(true); + } + + /** + * 检查有效性 + * + * @throws Exception + */ + @Override + public void checkValid() throws Exception { + + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/ColorfulCellRender.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/ColorfulCellRender.java new file mode 100644 index 000000000..461489839 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/ColorfulCellRender.java @@ -0,0 +1,65 @@ +package com.fr.design.onlineupdate.ui.widget; + +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.ListCellRenderer; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Graphics; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class ColorfulCellRender extends JPanel implements ListCellRenderer { + private static int CELLCOLOR_DARK = 0xf6f6f6; + private static int CELLCOLOR_LIGHT = 0xffffff; + private static int CELLCOLOR_SELECTED = 0xdfecfd; + private static int TEXT_COORDINATE_X = 10; + private static int TEXT_COORDINATE_Y = 20; + private static final int LISTFONTSIZE = 12; + private Color[] colors = new Color[]{new Color(CELLCOLOR_DARK), new Color(CELLCOLOR_LIGHT)}; + + private String text; + + public ColorfulCellRender() { + setOpaque(true); + } + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + text = ((null != value) ? (value.toString()) : null); + + Color background; + Color foreground = Color.BLACK; + //当前Renderer是否是拖拽目标 + JList.DropLocation dropLocation = list.getDropLocation(); + if (dropLocation != null + && !dropLocation.isInsert() + && dropLocation.getIndex() == index) { + + background = new Color(CELLCOLOR_SELECTED); + //当前Renderer是否被选中 + } else if (isSelected) { + background = new Color(CELLCOLOR_SELECTED); + } else { + background = colors[index % 2]; + } + + setBackground(background); + setForeground(foreground); + + return this; + } + + @Override + public void paintComponent(Graphics g) { + g.setColor(getBackground()); + g.fillRect(0, 0, getWidth(), getHeight()); + g.setColor(getForeground()); + g.setFont(new Font("Default", Font.PLAIN, LISTFONTSIZE)); + if (text != null) { + g.drawString(text, TEXT_COORDINATE_X, TEXT_COORDINATE_Y); + } + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/LoadingLabel.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/LoadingLabel.java new file mode 100644 index 000000000..a21d67e46 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/LoadingLabel.java @@ -0,0 +1,48 @@ +package com.fr.design.onlineupdate.ui.widget; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.general.IOUtils; + +import javax.swing.Icon; +import javax.swing.SwingConstants; +import javax.swing.Timer; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class LoadingLabel extends UILabel { + private Icon[] busyIcons = new Icon[15]; + private Timer busyIconTimer; + private int busyIconIndex; + + public LoadingLabel() { + for (int i = 0; i < busyIcons.length; i++) { + busyIcons[i] = IOUtils.readIcon("/com/fr/design/images/update/busy-icon" + i + ".png"); + } + int busyAnimationRate = 30; + + busyIconTimer = new Timer(busyAnimationRate, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + busyIconIndex = (busyIconIndex + 1) % busyIcons.length; + setIcon(busyIcons[busyIconIndex]); + setHorizontalAlignment(SwingConstants.CENTER); + } + }); + busyIconTimer.start(); + } + + /** + * 停止加载,并显示 + * + * @param text 要显示的字段 + */ + public void stopLoading(String text) { + busyIconTimer.stop(); + setIcon(null); + setText(text); + } + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateActionLabel.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateActionLabel.java new file mode 100644 index 000000000..74c2b6ae5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateActionLabel.java @@ -0,0 +1,95 @@ +package com.fr.design.onlineupdate.ui.widget; + +import com.fr.design.gui.ilable.UILabel; + +import javax.swing.event.MouseInputAdapter; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateActionLabel extends UILabel { + private ActionListener actionListener; + private boolean drawLine = true; + + public UpdateActionLabel(String text, boolean drawUnderLine) { + super(text); + this.drawLine = drawUnderLine; + this.setForeground(Color.BLUE); + this.addMouseListener(mouseInputAdapter); + this.addMouseMotionListener(mouseInputAdapter); + } + + /** + * 增加事件监听 + * + * @param actionListener 监听器 + */ + public void addActionListener(ActionListener actionListener) { + this.actionListener = actionListener; + } + + /** + * Repaints the text. + */ + public void paintComponent(Graphics _gfx) { + super.paintComponent(_gfx); + + _gfx.setColor(Color.BLUE); + if (drawLine) { + _gfx.drawLine(0, this.getHeight() - 1, this.getWidth(), this.getHeight() - 1); + } + } + + private MouseInputAdapter mouseInputAdapter = new MouseInputAdapter() { + public void mouseClicked(MouseEvent e) { + } + + public void mousePressed(MouseEvent e) { + } + + public void mouseReleased(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + //Action. + if (actionListener != null) { + ActionEvent actionEvent = new ActionEvent(source, 99, ""); + actionListener.actionPerformed(actionEvent); + } + } + } + + public void mouseEntered(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + ((UILabel) source).setCursor(new Cursor(Cursor.HAND_CURSOR)); + } + } + + public void mouseExited(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + ((UILabel) source).setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + } + } + + public void mouseDragged(MouseEvent e) { + } + + public void mouseMoved(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + ((UILabel) source).setCursor(new Cursor(Cursor.HAND_CURSOR)); + } + } + }; +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTable.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTable.java new file mode 100644 index 000000000..f94a514ad --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTable.java @@ -0,0 +1,46 @@ +package com.fr.design.onlineupdate.ui.widget; + +import javax.swing.JTable; +import javax.swing.table.TableModel; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateInfoTable extends JTable { + private UpdateInfoTableModel dataModel; + + public UpdateInfoTable(TableModel dm) { + super(dm); + dataModel = (UpdateInfoTableModel) dm; + } + + public UpdateInfoTable() { + } + + public UpdateInfoTable(String[] columnNames) { + this(new UpdateInfoTableModel(columnNames, new ArrayList())); + } + + public UpdateInfoTable(List data, String[] columnNames) { + this(new UpdateInfoTableModel(columnNames, data)); + } + + public UpdateInfoTable(Vector rowData, Vector columnNames) { + super(rowData, columnNames); + } + + public UpdateInfoTable(int numRows, int numColumns) { + super(numRows, numColumns); + } + + public UpdateInfoTableModel getDataModel() { + return dataModel; + } + + public void setDataModel(UpdateInfoTableModel dataModel) { + this.dataModel = dataModel; + } +} diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableCellRender.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableCellRender.java new file mode 100644 index 000000000..22c603c86 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableCellRender.java @@ -0,0 +1,48 @@ +package com.fr.design.onlineupdate.ui.widget; + +import com.fr.general.ComparatorUtils; +import com.fr.stable.StringUtils; + +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Color; +import java.awt.Component; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateInfoTableCellRender extends DefaultTableCellRenderer { + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + cell.setBackground((row & 1) != 0 ? new Color(0xf0f0f0) : Color.WHITE); + if ((Boolean) table.getValueAt(row, 2)) { + cell.setBackground(new Color(0xdfecfd)); + } + if (column == 0) { + //设置首列日期居中显示 + setHorizontalAlignment(JLabel.CENTER); + + for (int i = 1; row - i >= 0; i++) { + if (ComparatorUtils.equals(table.getValueAt(row - i, 0), value)) { + //调用的父类JLabel的setText,table本身的值不变 + setText(StringUtils.EMPTY); + break; + } + } + } + return cell; + } + + @Override + public void setForeground(Color c) { + super.setForeground(c); + } + + @Override + public void setBackground(Color c) { + super.setBackground(c); + } +} diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableModel.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableModel.java new file mode 100644 index 000000000..147f88a29 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableModel.java @@ -0,0 +1,65 @@ +package com.fr.design.onlineupdate.ui.widget; + +import javax.swing.table.AbstractTableModel; +import java.util.List; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateInfoTableModel extends AbstractTableModel { + private String[] titles; + private List data; + + public UpdateInfoTableModel(String[] titles, List data) { + this.titles = titles; + this.data = data; + } + + public void populateBean(List data) { + if (data == null) { + return; + } + clear(); + this.data = data; + fireTableDataChanged(); + } + + public void clear() { + data.clear(); + } + + public List updateBean() { + return data; + } + + @Override + public int getRowCount() { + return data.size(); + } + + @Override + public int getColumnCount() { + return titles.length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return data.get(rowIndex)[columnIndex]; + } + + @Override + public String getColumnName(int column) { + return titles[column]; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + super.setValueAt(aValue, rowIndex, columnIndex); + } +} + diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTextAreaCellRender.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTextAreaCellRender.java new file mode 100644 index 000000000..1e3cebdf8 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTextAreaCellRender.java @@ -0,0 +1,43 @@ +package com.fr.design.onlineupdate.ui.widget; + +import javax.swing.BorderFactory; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.table.TableCellRenderer; +import java.awt.Color; +import java.awt.Component; +import java.awt.Insets; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateInfoTextAreaCellRender extends JTextArea implements TableCellRenderer { + public UpdateInfoTextAreaCellRender() { + setMargin(new Insets(2, 2, 2, 2)); + setLineWrap(true); + setWrapStyleWord(true); + setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)); + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + // 计算当前行的最佳高度 + int maxPreferredHeight = 0; + for (int i = 0; i < table.getColumnCount(); i++) { + setText("" + table.getValueAt(row, i)); + setSize(table.getColumnModel().getColumn(column).getWidth(), 0); + maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height); + } + + if (table.getRowHeight(row) != maxPreferredHeight) { + table.setRowHeight(row, maxPreferredHeight); + } + + setText(value == null ? "" : value.toString()); + setBackground((row & 1) != 0 ? new Color(0xf0f0f0) : Color.WHITE); + if ((Boolean) table.getValueAt(row, 2)) { + setBackground(new Color(0xdfecfd)); + } + return this; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/env/EnvListPane.java b/designer-base/src/main/java/com/fr/env/EnvListPane.java index 59eaea4e6..30b4b76f1 100644 --- a/designer-base/src/main/java/com/fr/env/EnvListPane.java +++ b/designer-base/src/main/java/com/fr/env/EnvListPane.java @@ -53,7 +53,7 @@ public class EnvListPane extends JListControlPane { */ @Override public NameableCreator[] createNameableCreators() { - NameableCreator local = new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("FR-Engine-Local_Workspace"), "com/fr/design/images/data/bind/localconnect.png", + NameableCreator local = new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Local_Workspace"), "com/fr/design/images/data/bind/localconnect.png", LocalDesignerWorkspaceInfo.class, LocalEnvPane.class); NameableCreator remote = new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Env_Remote_Server"), "com/fr/design/images/data/bind/distanceconnect.png", RemoteDesignerWorkspaceInfo.class, RemoteEnvPane.class); diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon0.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon0.png new file mode 100644 index 0000000000000000000000000000000000000000..242c0c85bc938a08f6eaa046bd24e9509b0b1d9c GIT binary patch literal 3588 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 KMNUMnLSTZ21;I%G literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon1.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6f63438ec797feb79c00697d783e4c58dcbe88 GIT binary patch literal 3585 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 Hu0mjf*HOc* literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon10.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon10.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ef4a1fc6a59aec6b053ed05c17ad3a2d24ec9b GIT binary patch literal 3568 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 DwfwCf literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon12.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon12.png new file mode 100644 index 0000000000000000000000000000000000000000..e447ee8ac29a421f2cc2c6786ace0e13559d280a GIT binary patch literal 3589 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 LNkvXXu0mjf9hSZ+ literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon13.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon13.png new file mode 100644 index 0000000000000000000000000000000000000000..848a6f1a41bac5459b3768c20e3eb044749c158e GIT binary patch literal 3586 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 IM6N<$g3?{b8UO$Q literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon14.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon14.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3561df212ff3f799e2e5c6f99db7746ffa783c GIT binary patch literal 3586 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 IM6N<$f;*eD;Q#;t literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon2.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..c866e62a7c6ae133b78981f8cfa7562364682ce0 GIT binary patch literal 3585 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 Hu0mjfrAo$p literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon3.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..9be22fa58602d70a8ffa3b0a7729ebc938153a54 GIT binary patch literal 3572 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 D&7!)r literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon7.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..49fbc6ec54f7a5a44a83ff2a7fab1d2c286e5b18 GIT binary patch literal 3598 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 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon8.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a5a409387b1eccc58b63fa0d1afa9b80108ba8 GIT binary patch literal 3594 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 Qv;Y7A07*qoM6N<$f^|K;T>t<8 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/busy-icon9.png b/designer-base/src/main/resources/com/fr/design/images/update/busy-icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..827801235b043066db61a9b1216d8f2e11002a7b GIT binary patch literal 3581 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 DEnc`0 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/update/update_new.png b/designer-base/src/main/resources/com/fr/design/images/update/update_new.png new file mode 100644 index 0000000000000000000000000000000000000000..c4b2b231c04b0e2d8af0ed7f6396e97bc68a4f74 GIT binary patch literal 1110 zcmeAS@N?(olHy`uVBq!ia0vp^LLe-_1|-?yf<%B6OS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lweEp zc6R~NK=9LfcRi5eEbxdd2GSm2>~=ESj)8&clc$Sgh{y4_q1GPSjv{jn19e22cXY~k zxOUZ~nRT*pb|fS(6wqzySaK;$Fh?Y0!v;|n-7Cj}S``*a1VnBTxcEc&2yb1$1($I1 zMTv>3ijnWMzhypD_7~Q*{c8Dq-p=x8d`|m+*qhv+oSgId_8+tT7f)13>OWq)!XQq1 zeed;6Ivh<394Awj^;yQNu4?u6UfDToMP|($z6*?20=K{r~6rhnl0u=95b3$ULMH1%F*=vc}-2#r7D|ee*b89FWqcD z-&`OJ4Lv&hk?+T4pNd|z#=VG*cMlYCz1YjU$^F}jdB-PzHHf*oE-Sn=Q1EJy?$x;1 zl?SDyjlTw#n$4Ed5IVUf`Td3yVmFnhPo2oXIl&=2`?a+UhpTD15_5lO? zi;`CzeSI2Brvx!52~F(K*Vj3{N#}J@>UH^^tJWsAf8SO6^qn+39_pkT;#Buf`t#qZ zn%bwjHa#j>plQ;&%!1D>QP?cm(4;p#rie0<8 zXF4sLkeRvjp!pBB(v^>|ifSxqxO91O2YF@hte4DK7phyr^i>+W-2O9`YxdC)V6PwRbi!8>p7JMwFx^ zmZVxG7o`Fz1|tJQb6rD2T|?6lLlY}gBP$aVZ37D{1B0{mma!-ra`RI%(<*Um*rU|= z5U9ZyWJ7UTx>ZtQajI@ex7bxeqM=wNp1m{ s7oV49V3d+so|I&fZj@?dsb5+Ea;6^8q$n#lP%dWhboFyt=akR{02q46VgLXD literal 0 HcmV?d00001 diff --git a/designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java b/designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java new file mode 100644 index 000000000..152dbd9d4 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java @@ -0,0 +1,7 @@ +package com.fr.onlineupdate.actions; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class FileDownloader { +} diff --git a/designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java b/designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java new file mode 100644 index 000000000..25cfff1f7 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java @@ -0,0 +1,7 @@ +package com.fr.onlineupdate.domain; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class DownloadItem { +} diff --git a/designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java b/designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java new file mode 100644 index 000000000..97e979c35 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java @@ -0,0 +1,7 @@ +package com.fr.onlineupdate.factory; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class DirectoryOperationFactory { +} From aedb9ae71f19cdf1956512f3dbff54b6d9a551a8 Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Wed, 22 Aug 2018 14:56:30 +0800 Subject: [PATCH 12/29] REPORT-10763 & REPORT-10562 & REPORT-10541 --- .../onlineupdate/actions/FileDownloader.java | 4 +-- .../actions/SoftwareUpdateAction.java | 2 +- .../onlineupdate/ui/dialog/RestoreDialog.java | 6 ++-- .../ui/dialog/RestoreResultDialog.java | 16 ++++----- .../ui/dialog/UpdateMainDialog.java | 36 +++++++++---------- .../onlineupdate/actions/FileDownloader.java | 7 ---- .../fr/onlineupdate/domain/DownloadItem.java | 7 ---- .../factory/DirectoryOperationFactory.java | 7 ---- 8 files changed, 32 insertions(+), 53 deletions(-) delete mode 100644 designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java delete mode 100644 designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java delete mode 100644 designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java b/designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java index e6bfd92f8..d076cc01e 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java @@ -46,8 +46,8 @@ public abstract class FileDownloader extends SwingWorker } if (item.getTotalLength() != item.getDownloadLength()) { JOptionPane.showMessageDialog(null, - com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Download_Failed"), - com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Alert"), JOptionPane.ERROR_MESSAGE); + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Download_Failed"), + InterProviderFactory.getProvider().getLocText("Fine-Design_Updater_Alert"), JOptionPane.ERROR_MESSAGE); return false; } else { item.setDownloadLength(0); diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java b/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java index eee2ab2f1..1b14f5f0b 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java @@ -15,7 +15,7 @@ public class SoftwareUpdateAction extends UpdateAction { public SoftwareUpdateAction() { - setName(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_UpdateAndUpgrade")); + setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_UpdateAndUpgrade")); setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/update/update_new.png")); } diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java index f197fd182..c316311ab 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java @@ -53,8 +53,8 @@ public class RestoreDialog extends JDialog { } private void initButton() { - okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Ok")); - cancelButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Cancel")); + okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Ok")); + cancelButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Cancel")); okButton.setEnabled(false); okButton.addActionListener(new ActionListener() { @@ -114,7 +114,7 @@ public class RestoreDialog extends JDialog { */ public void showDialog() { this.setSize(RESTOREJAR); - this.setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Jar_Restore")); + this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Jar_Restore")); GUICoreUtils.centerWindow(this); this.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java index da0401af9..787a88ea8 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -47,7 +47,7 @@ public class RestoreResultDialog extends JDialog { public RestoreResultDialog(Frame parent, boolean modal, String jarDir) { super(parent, modal); this.jarRestoreDir = jarDir; - if (ComparatorUtils.equals(jarDir, com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Restore_Old_Version"))) { + if (ComparatorUtils.equals(jarDir, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore_Old_Version"))) { initOldVersionRestoreComps(); } else { initCommonComponents(); @@ -61,8 +61,8 @@ public class RestoreResultDialog extends JDialog { pane.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setContentPane(pane); - UIButton restartButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restart_Designer")); - UIButton restartLaterButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Restart_Later")); + UIButton restartButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); + UIButton restartLaterButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Later")); restartButton.setFont(new Font("Default", Font.PLAIN, 12)); restartButton.setEnabled(false); @@ -86,7 +86,7 @@ public class RestoreResultDialog extends JDialog { pane.add(buttonPane, BorderLayout.SOUTH); JPanel progressLabelPane = new JPanel(new BorderLayout()); - UILabel jarProgressLabel = new UILabel((com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restore_To")) + " " + jarRestoreDir + " " + (com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_WorksAfterRestart"))); + UILabel jarProgressLabel = new UILabel((com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore_To")) + " " + jarRestoreDir + " " + (com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_WorksAfterRestart"))); jarProgressLabel.setFont(new Font("Default", Font.PLAIN, 12)); jarProgressLabel.setVisible(true); progressLabelPane.add(jarProgressLabel); @@ -98,7 +98,7 @@ public class RestoreResultDialog extends JDialog { restartButton.setEnabled(true); restartLaterButton.setEnabled(true); this.setSize(RESTORE); - this.setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Jar_Restore")); + this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Jar_Restore")); } private void initOldVersionRestoreComps() { @@ -108,7 +108,7 @@ public class RestoreResultDialog extends JDialog { pane.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setContentPane(pane); - UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Ok")); + UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Ok")); okButton.setFont(new Font("Default", Font.PLAIN, 12)); okButton.addActionListener(new AbstractAction() { @Override @@ -123,10 +123,10 @@ public class RestoreResultDialog extends JDialog { JPanel infoPane = new JPanel(new BorderLayout()); JTextArea jTextArea = new JTextArea( - com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Already_Backup_Old_Project") + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Already_Backup_Old_Project") + StringUtils.BLANK + StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR) - + com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Unzip_Replace_Restore") + + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Unzip_Replace_Restore") ); jTextArea.setLineWrap(true); jTextArea.setEditable(false); diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java index 9ca0fccc0..3f99543a3 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -166,7 +166,7 @@ public class UpdateMainDialog extends UIDialog { progressBar.setStringPainted(true); progressBar.setPreferredSize(PROGRESSBAR); - updateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_New_Version_Available")); + updateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_New_Version_Available")); updateLabel.setHorizontalAlignment(SwingConstants.RIGHT); updateLabel.setVisible(false); @@ -204,15 +204,15 @@ public class UpdateMainDialog extends UIDialog { JPanel jarUpdateContentPane2 = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ new Component[]{new UILabel(), new UILabel(), new UILabel()}, new Component[]{new UILabel(), updateVersionReminderPane, new UILabel()}, - new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_JAR_Version")), jarCurrentLabel), new UILabel()}, - new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Latest_JAR")), loadingLabel), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JAR_Version")), jarCurrentLabel), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Latest_JAR")), loadingLabel), new UILabel()}, new Component[]{new UILabel(), new UILabel(), new UILabel()} }, rowUpdateSubContentPaneSize, columnUpdateSubContentPaneSize, LayoutConstants.VGAP_LARGE); jarUpdateContentPane2.setBackground(Color.WHITE); jarUpdateContentPane.add(jarUpdateContentPane2); jarVersionInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ new Component[]{new UILabel(), new UILabel(), new UILabel()}, - new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_JarUpdate")), new UILabel(), jarRestoreLabel), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JarUpdate")), new UILabel(), jarRestoreLabel), new UILabel()}, new Component[]{new UILabel(), jarUpdateContentPane, new UILabel()} }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); } @@ -230,7 +230,7 @@ public class UpdateMainDialog extends UIDialog { new Component[]{new UILabel(), new UILabel(), new UILabel()} }, searchRow, searchColumn, LayoutConstants.VGAP_LARGE); - String[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Date"), com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Content"), com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_SignHeader")}; + String[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_SignHeader")}; initUpdateInfoTable(columnNames); UIScrollPane uiScrollPane = new UIScrollPane(updateInfoTable); @@ -265,8 +265,8 @@ public class UpdateMainDialog extends UIDialog { updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); - updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Date")).setCellRenderer(new UpdateInfoTableCellRender()); - updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Content")).setCellRenderer(new UpdateInfoTextAreaCellRender()); + updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date")).setCellRenderer(new UpdateInfoTableCellRender()); + updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content")).setCellRenderer(new UpdateInfoTextAreaCellRender()); } private void initUpdateInfoSearchPane() { @@ -289,7 +289,7 @@ public class UpdateMainDialog extends UIDialog { public void changedUpdate(DocumentEvent e) { } }); - searchUpdateInfoBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Search")); + searchUpdateInfoBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Search")); searchUpdateInfoBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -303,8 +303,8 @@ public class UpdateMainDialog extends UIDialog { private void initButtonAndLabel() { loadingLabel = new LoadingLabel(); - loadingLabel.setText(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Checking_Jar_Update")); - updateButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Update")); + loadingLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Checking_Jar_Update")); + updateButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Update")); updateButton.setPreferredSize(UPDATE_BUTTON); updateButton.setEnabled(false); @@ -313,14 +313,14 @@ public class UpdateMainDialog extends UIDialog { double[] colSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; updateVersionReminderPane = initPaneContent( Color.WHITE, rowSize, colSize, - new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Designer-Updater_Designer_Version")), + new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Designer_Version")), new UILabel(UpdateConstants.DEFAULT_APP_NAME + StringUtils.BLANK + ProductConstants.VERSION) ); - jarCurrentLabel = new UILabel(StringUtils.isEmpty(GeneralUtils.readBuildNO()) ? com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Not_Install_Version") : GeneralUtils.readBuildNO(), SwingConstants.CENTER); - UILabel noJarPreviousRevision = new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_No_Previous_Version")); - UpdateActionLabel jarRestorePreviousRevision = new UpdateActionLabel(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restore"), false); + jarCurrentLabel = new UILabel(StringUtils.isEmpty(GeneralUtils.readBuildNO()) ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Not_Install_Version") : GeneralUtils.readBuildNO(), SwingConstants.CENTER); + UILabel noJarPreviousRevision = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_No_Previous_Version")); + UpdateActionLabel jarRestorePreviousRevision = new UpdateActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore"), false); jarRestorePreviousRevision.setForeground(new Color(RESTORE_LABEL_COLOR)); jarRestorePreviousRevision.addActionListener(new ActionListener() { @Override @@ -532,7 +532,7 @@ public class UpdateMainDialog extends UIDialog { } private void stopLoading() { - loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Connect_VersionUpdateServer_Failed")); + loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Connect_VersionUpdateServer_Failed")); } @@ -557,7 +557,7 @@ public class UpdateMainDialog extends UIDialog { updateLabel.setVisible(true); loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); } else { - loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Already_Latest_Version")); + loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Already_Latest_Version")); } } else { updateButton.setEnabled(true); @@ -638,7 +638,7 @@ public class UpdateMainDialog extends UIDialog { backup(); putNewFiles(); updateSuccessful = true; - updateButton.setText(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_Restart_Designer")); + updateButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); } @Override @@ -804,7 +804,7 @@ public class UpdateMainDialog extends UIDialog { */ public void showDialog() { setSize(DEFAULT); - setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Desinger-Updater_UpdateAndUpgrade")); + setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_UpdateAndUpgrade")); GUICoreUtils.centerWindow(this); setVisible(true); } diff --git a/designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java b/designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java deleted file mode 100644 index 152dbd9d4..000000000 --- a/designer-realize/src/main/java/com/fr/onlineupdate/actions/FileDownloader.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.fr.onlineupdate.actions; - -/** - * Created by XINZAI on 2018/8/21. - */ -public class FileDownloader { -} diff --git a/designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java b/designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java deleted file mode 100644 index 25cfff1f7..000000000 --- a/designer-realize/src/main/java/com/fr/onlineupdate/domain/DownloadItem.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.fr.onlineupdate.domain; - -/** - * Created by XINZAI on 2018/8/21. - */ -public class DownloadItem { -} diff --git a/designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java b/designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java deleted file mode 100644 index 97e979c35..000000000 --- a/designer-realize/src/main/java/com/fr/onlineupdate/factory/DirectoryOperationFactory.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.fr.onlineupdate.factory; - -/** - * Created by XINZAI on 2018/8/21. - */ -public class DirectoryOperationFactory { -} From 52e4a734e7ddbf9a51ec495c519fb84c6e71acd3 Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Wed, 22 Aug 2018 17:03:15 +0800 Subject: [PATCH 13/29] REPORT-10780 --- .../src/main/java/com/fr/design/mainframe/JForm.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index 36bd3f32f..27fa7ce9c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -57,7 +57,12 @@ import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WLayout; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; +import com.fr.main.impl.WorkBook; +import com.fr.main.impl.WorkBookAdapter; import com.fr.page.PaperSettingProvider; +import com.fr.report.cell.Elem; +import com.fr.report.cell.cellattr.CellImage; +import com.fr.report.cell.painter.CellImagePainter; import com.fr.report.worksheet.FormElementCase; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; @@ -460,7 +465,10 @@ public class JForm extends JTemplate implements BaseJForm { // ////////////////for toolbarMenuAdapter////////////////////////////// // //////////////////////////////////////////////////////////////////// - + @Override + public void setPictureElem(Elem elem, CellImage cellImage) { + elem.setValue(cellImage.getImage()); + } /** * 目标菜单 * From 88d5dbbc13d66d524987445e7c6fa0309c0dc690 Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Wed, 22 Aug 2018 17:04:49 +0800 Subject: [PATCH 14/29] REPORT-10780 --- designer-form/src/main/java/com/fr/design/mainframe/JForm.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index 27fa7ce9c..df113a7bb 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -57,12 +57,9 @@ import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WLayout; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; -import com.fr.main.impl.WorkBook; -import com.fr.main.impl.WorkBookAdapter; import com.fr.page.PaperSettingProvider; import com.fr.report.cell.Elem; import com.fr.report.cell.cellattr.CellImage; -import com.fr.report.cell.painter.CellImagePainter; import com.fr.report.worksheet.FormElementCase; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; From cc1e8931af5749f710bab5e66289ea380046da26 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 22 Aug 2018 20:07:24 +0800 Subject: [PATCH 15/29] =?UTF-8?q?REPORT-10812=2010.0=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=8F=92=E4=BB=B6=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/extra/PluginWebBridge.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java index de96c10b9..3ab17b92e 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java @@ -570,6 +570,15 @@ public class PluginWebBridge { //todo 初始化设计器其他部分 } + + /** + * 国际化(用来做兼容,暂时不删) + */ + public String parseI18(final String key) { + return com.fr.design.i18n.Toolkit.i18nText(key); + } + + /** * 是否是在设计器中操作 */ From eab8d702ec8821091d6b55b71546ad6ca2746f3d Mon Sep 17 00:00:00 2001 From: Harrison Date: Wed, 22 Aug 2018 21:14:39 +0800 Subject: [PATCH 16/29] =?UTF-8?q?REPORT-10785=20report=E5=8C=85=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E7=99=BE=E5=A4=9A=E4=B8=AA=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E8=A7=84=E8=8C=83=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-base/src/main/java/com/fr/env/EnvListPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/env/EnvListPane.java b/designer-base/src/main/java/com/fr/env/EnvListPane.java index 59eaea4e6..b8f99de11 100644 --- a/designer-base/src/main/java/com/fr/env/EnvListPane.java +++ b/designer-base/src/main/java/com/fr/env/EnvListPane.java @@ -53,7 +53,7 @@ public class EnvListPane extends JListControlPane { */ @Override public NameableCreator[] createNameableCreators() { - NameableCreator local = new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("FR-Engine-Local_Workspace"), "com/fr/design/images/data/bind/localconnect.png", + NameableCreator local = new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_Local_Workspace"), "com/fr/design/images/data/bind/localconnect.png", LocalDesignerWorkspaceInfo.class, LocalEnvPane.class); NameableCreator remote = new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Env_Remote_Server"), "com/fr/design/images/data/bind/distanceconnect.png", RemoteDesignerWorkspaceInfo.class, RemoteEnvPane.class); From 18ef9e55f5c0abcd049e6e73bb4a6b939d1c91ae Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Thu, 23 Aug 2018 10:48:52 +0800 Subject: [PATCH 17/29] REPORT-10171 --- .../design/actions/community/BBSAction.java | 4 +- .../design/actions/community/BugAction.java | 2 +- .../actions/community/CenterAction.java | 68 +++++++++++++++++ .../actions/community/CusDemandAction.java | 68 +++++++++++++++++ .../design/actions/community/NeedAction.java | 4 +- .../actions/community/QuestionAction.java | 2 +- .../design/actions/community/SignAction.java | 2 +- .../actions/community/TechSolutionAction.java | 70 ++++++++++++++++++ .../design/actions/community/VideoAction.java | 2 +- .../design/actions/help/TutorialAction.java | 2 +- .../mainframe/toolbar/ToolBarMenuDock.java | 9 ++- .../com/fr/design/images/bbs/bbs.png | Bin 0 -> 350 bytes .../com/fr/design/images/bbs/bug.png | Bin 0 -> 560 bytes .../com/fr/design/images/bbs/center.png | Bin 0 -> 217 bytes .../com/fr/design/images/bbs/demand.png | Bin 0 -> 505 bytes .../com/fr/design/images/bbs/help.png | Bin 0 -> 348 bytes .../com/fr/design/images/bbs/need.png | Bin 0 -> 362 bytes .../com/fr/design/images/bbs/question.png | Bin 0 -> 543 bytes .../com/fr/design/images/bbs/sign.png | Bin 0 -> 340 bytes .../com/fr/design/images/bbs/solotion.png | Bin 0 -> 407 bytes .../com/fr/design/images/bbs/video.png | Bin 0 -> 450 bytes 21 files changed, 222 insertions(+), 11 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java create mode 100644 designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java create mode 100644 designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/bbs.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/bug.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/center.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/demand.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/help.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/need.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/question.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/sign.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/solotion.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/video.png diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java index 9b689bc97..8b7e45047 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java @@ -25,13 +25,13 @@ public class BBSAction extends UpdateAction this.setMenuKeySet(BBS); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/bbs.png")); } /** * 动作 - * @param e 事件 + * @param arg0 事件 */ @Override public void actionPerformed(ActionEvent arg0) diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java index b22093060..21afd306e 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java @@ -23,7 +23,7 @@ public class BugAction extends UpdateAction { this.setMenuKeySet(BUG); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bug.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/bug.png")); } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java new file mode 100644 index 000000000..f8c5ea79c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java @@ -0,0 +1,68 @@ +package com.fr.design.actions.community; + +import com.fr.base.BaseUtils; +import com.fr.base.FRContext; +import com.fr.design.menu.MenuKeySet; +import com.fr.general.CloudCenter; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; + +import javax.swing.JOptionPane; +import javax.swing.KeyStroke; +import java.awt.Desktop; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +/** + * Created by XINZAI on 2018/8/23. + */ +public class CenterAction extends UpAction{ + public CenterAction() + { + this.setMenuKeySet(CENTER); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/center.png")); + + } + + @Override + public void actionPerformed(ActionEvent arg0) + { + String url = CloudCenter.getInstance().acquireUrlByKind("bbs.center"); + if (StringUtils.isEmpty(url)) { + FRContext.getLogger().info("The URL is empty!"); + return; + } + try { + Desktop.getDesktop().browse(new URI(url)); + } catch (IOException exp) { + JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + } catch (URISyntaxException exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + } catch (Exception exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); + } + + } + public static final MenuKeySet CENTER = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'C'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Commuinity_Center"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; +} diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java new file mode 100644 index 000000000..df9880857 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java @@ -0,0 +1,68 @@ +package com.fr.design.actions.community; + +import com.fr.base.BaseUtils; +import com.fr.base.FRContext; +import com.fr.design.menu.MenuKeySet; +import com.fr.general.CloudCenter; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; + +import javax.swing.JOptionPane; +import javax.swing.KeyStroke; +import java.awt.Desktop; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +/** + * Created by XINZAI on 2018/8/23. + */ +public class CusDemandAction extends UpAction{ + public CusDemandAction() + { + this.setMenuKeySet(DEMAND); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/demand.png")); + + } + + @Override + public void actionPerformed(ActionEvent arg0) + { + String url = CloudCenter.getInstance().acquireUrlByKind("bbs.demand"); + if (StringUtils.isEmpty(url)) { + FRContext.getLogger().info("The URL is empty!"); + return; + } + try { + Desktop.getDesktop().browse(new URI(url)); + } catch (IOException exp) { + JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + } catch (URISyntaxException exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + } catch (Exception exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); + } + + } + public static final MenuKeySet DEMAND = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'D'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Commuinity_Demand"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; +} diff --git a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java index c49a484f7..e6e2cc215 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java @@ -24,8 +24,8 @@ public class NeedAction extends UpdateAction this.setMenuKeySet(NEED); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/need.png")); - + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/need.png")); + } @Override diff --git a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java index 390827f16..7d349affa 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java @@ -23,7 +23,7 @@ public class QuestionAction extends UpdateAction { this.setMenuKeySet(QUESTIONS); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/questions.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/question.png")); } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java index fe59c01f5..d0c9cd434 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java @@ -24,7 +24,7 @@ public class SignAction extends UpdateAction this.setMenuKeySet(SIGN); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/signature.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/sign.png")); } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java new file mode 100644 index 000000000..6e10d851b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java @@ -0,0 +1,70 @@ +package com.fr.design.actions.community; + +import com.fr.base.BaseUtils; +import com.fr.base.FRContext; +import com.fr.design.actions.UpdateAction; +import com.fr.design.menu.MenuKeySet; +import com.fr.general.CloudCenter; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; + +import javax.swing.JOptionPane; +import javax.swing.KeyStroke; +import java.awt.Desktop; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +/** + * Created by XINZAI on 2018/8/23. + */ +public class TechSolutionAction extends UpdateAction{ + public TechSolutionAction() + { + this.setMenuKeySet(TSO); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images//bbs/solotion.png")); + + } + + @Override + public void actionPerformed(ActionEvent arg0) + { + String url = CloudCenter.getInstance().acquireUrlByKind("bbs.solution"); + if (StringUtils.isEmpty(url)) { + FRContext.getLogger().info("The URL is empty!"); + return; + } + try { + Desktop.getDesktop().browse(new URI(url)); + } catch (IOException exp) { + JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + } catch (URISyntaxException exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + } catch (Exception exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); + } + + } + public static final MenuKeySet TSO = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'T'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Commuinity_Solution"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; + +} diff --git a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java index 662fe689b..6919fab00 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java @@ -25,7 +25,7 @@ public class VideoAction extends UpdateAction this.setMenuKeySet(VIDEO); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/video.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/video.png")); } diff --git a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java index 91cfb5712..3c51f4bbd 100644 --- a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java @@ -31,7 +31,7 @@ public class TutorialAction extends UpdateAction { this.setMenuKeySet(HELP_TUTORIAL); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/help.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/bbs/help.png")); this.setAccelerator(getMenuKeySet().getKeyStroke()); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 7a3fd3cb3..7abe673a0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -10,9 +10,12 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.community.BBSAction; import com.fr.design.actions.community.BugAction; +import com.fr.design.actions.community.CenterAction; +import com.fr.design.actions.community.CusDemandAction; import com.fr.design.actions.community.NeedAction; import com.fr.design.actions.community.QuestionAction; import com.fr.design.actions.community.SignAction; +import com.fr.design.actions.community.TechSolutionAction; import com.fr.design.actions.community.UpAction; import com.fr.design.actions.community.VideoAction; import com.fr.design.actions.file.CloseCurrentTemplateAction; @@ -493,9 +496,11 @@ public abstract class ToolBarMenuDock { shortCuts.add(new VideoAction()); shortCuts.add(new TutorialAction()); shortCuts.add(new QuestionAction()); - shortCuts.add(new UpAction()); - shortCuts.add(new NeedAction()); + shortCuts.add(new TechSolutionAction()); shortCuts.add(new BugAction()); + shortCuts.add(new NeedAction()); + shortCuts.add(new CusDemandAction()); + shortCuts.add(new CenterAction()); shortCuts.add(new SignAction()); return shortCuts.toArray(new ShortCut[shortCuts.size()]); } diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/bbs.png b/designer-base/src/main/resources/com/fr/design/images/bbs/bbs.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd2df684a17c4a4afb897fee8df67bd58c41f10 GIT binary patch literal 350 zcmV-k0iphhP)Px$7)eAyR5%f1WWWLB3STPy{r$fUB+bmqSoNr1{2n%?jOc<24gWd*ym?Xa|35?d ze+C8)kUUV)4@O3YP8Jb~jt32lKalmH7$BAN!Vf4pf#LsuMPx;AHY4MGAiLn%6p2kR zF|Yx$xi6Lf{rfiwXrmWQ0v`?3w2g_0Dev)Q@w<#tIWJ2X8UD2Zoy?9;6S^GGOFtPH znW}*Xy!Z`tG7Gu_qWFxAf0)SD46*@eF%wZX;Za1f0l59n$Z(j6k?9i1@_+yT=`s9g zu*K#O>;^D0ev;G`cRriW_#33jc;WQBY5)KL literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/bug.png b/designer-base/src/main/resources/com/fr/design/images/bbs/bug.png new file mode 100644 index 0000000000000000000000000000000000000000..24393bc4be723b49cb6c990addc2a517e06aa32c GIT binary patch literal 560 zcmV-00?+-4P)Px$>PbXFR5%fRQ@>9XQ4pSaw^#6^(TnD8IU1u0F|k0c?5QAu@}RIM$C*GQ6}i^x ziaY!REY!;6%t1{86(LX&2sA3(-R1(?7>OSH#&7mVvMzFy?0z%f%)B=#0+art7* z_OI(CG({w%%EiLWU15HACwG7Cu*!d8K1N3s+wXry^3#}1qKFhoPN!U4SGO{&piHMOdK&P??aH#qo-_U|`%03BC+* z@E^0Nq20F{Wi8F=48jGB`93(6j*O8P7~~4d|E;l1{1p{&xPbV#FJR1@VUwRcuNQVT zQAi#KXyg-y7`2dfZe4)MZvPT*$1Qsk7}habs5(w|`AaQ#Y(PXa$o+SL_#R-R=h%Bx zQSZgI-+zF4h{2HzX*uULzEVsJ{MCSCF5$9#z*kZ`=JgZ?i||AgFxzS57og7ucEsxt ze=1RY)q4~;(m(VZQB8Nrdk?)C*b(nwAT5+rvc7-fmb?F?ch(DNldAByQ1i#gIj^X^ yqT%dN8BuVCl_;4MeG6=828X^E!~oTf-^gE(;IpTzYH^|f0000>N?_zvXkusr`(K0T9DV3whr0I)+kx?Ei!xcm0=$YRbK%QXm MboFyt=akR{0AoH&rvLx| literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/demand.png b/designer-base/src/main/resources/com/fr/design/images/bbs/demand.png new file mode 100644 index 0000000000000000000000000000000000000000..b237026fa19ab0919af7d6885b79ec750ead5a2d GIT binary patch literal 505 zcmVPx$vq?ljR5%gMQn5+{K@gp}L_I+pAsS60LK?BNv$3+s2Pk5tAYzkTKtY1ooQ;TG zAe|xpfR)xFSZgCTB3NiJcZ#J3qujW&$($E*v9NL>H@h=$-@JJnfIqAWo6MBursXQi zCYh}j2w{r=F3m{a`h9WeL2AL6$T>SiPynFFXe=JPvhm$u027$TKm`ErfFSen)lmDc zYeo?aBH}d@FiMlKf;zpOsPm-0iZpB6q-*-z`XnrOSv8pkG!6_vTWV3>@CZPZk))E_ zTYhm5iD*rARAm57;L#pMBXdv1*sWkW>Tc`-0-hm4Ly8{IYAWZJ6%qbMz2AT*d_grNa~mqK$-;+&P(hJ|gf|en7@?wKTjaqe)(3hk2<@Fcno&02~$Jf{Yf- z%f3xXa)bJ*;hqxEoB)DRy-4M;G~$~rHD5^>fq}Tq7X=(NTXG!r6L%x1mg4*Dks1ZW z>=qGw=PPO|`E;z{2&{k!xC@)fBXlUrJ2uyOX%dX|oU8vxT_*wr8lgU+L>|sd-H+qe v>r^7|gc>R!{rpyKcP#7NsNa(0|4;k|hXT$$t6Mr)00000NkvXXu0mjf!kO18 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/help.png b/designer-base/src/main/resources/com/fr/design/images/bbs/help.png new file mode 100644 index 0000000000000000000000000000000000000000..c13f2f1926471fbce07f6f9037d63a3b5fcecca5 GIT binary patch literal 348 zcmV-i0i*tjP)Px$7D+@wR5%fxQaf$}K@5FfA^{S0lm&`3@;i$=S{I3NEjU#Bpq)fVrP50} zdHi-`YBvY}t!%$vs;}B>AO-c_N^_nzInP(eYjDp5<|cq)HD|a^BElFTyGlBJ`YfEl z-8}~b8S{tGHT!FL4MI22-H%`l-C6B#bORwf1eVyz3g^H~_~8uin$N-UNc@WvNTGl$ zWlD&!umH=Pg9{s^(|9DzyB&X3sn(?kZvt}V;sjdAjP@3r4l$lHzVV2EvzX)yfrY^P ujmoInePD(;D0T(&9Ft%+5G10x8$JM1*l|))yM0>#0000Px$BuPX;R5%f1U?38x6@LAoWbRG{MBtG=qdi{{Q{o50l4h02a**j0}vIxY@bFVFuvz0#3~wT+X+8`QE?` zfV<%T|Nkq2*d8Q7tY(l}xB)=+G$3Ae_0bj zVk|HQjE4DHLz?joP_sEOZ0^J41}DuZmHqrbB~F6}BDsbD0CR1K!@M_4h5!Hn07*qo IM6N<$f)Ns+;Q#;t literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/question.png b/designer-base/src/main/resources/com/fr/design/images/bbs/question.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c6fd8a1bb4dc0866dca76639c331a1ab39d8a2 GIT binary patch literal 543 zcmV+)0^t3LP)Px$*-1n}R5%fpQ$0vrK@gtVcTe=L38Lp8!9!9Q@G7emu}`BA5TamrMM5;#gftdf zN*WCu2nG^NA$GAA8x7bB5fnL4ksNo?VC4@yZ^v)m`Q)AM37KYR=li~$*_mCYd)D>7 z{DMhx!t_#zIu&N3A`5K_@z+23wyn4XSk*Eg|F#F0m01xUBZAy%EX?x5Z}L7JeomK^ z5)!*7PoD=tuz`I`O!te8Sw!Y@5j%uxaPXa-`o2GKG}p4rnQ3VZPRhT9%72`GA zi}Qa81m47gp=*hzklC-s_1?T@#pdqw(14Ky?$-MN5J@2(8mf7V%xN_DHJV#PRjpP~ z-PTrxxvJ4n_>|+E=rdWCQS_(r z7DE^L+oPW;eu(-{Ka_?l6~P!oyC~*6Qn!B1;+(BAj=!|8dWJ`d`2gEw=XhzbM)^OR h{%J{OCeNO@G&i~as&b}bTtol>002ovPDHLkV1lun^rip+ literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/sign.png b/designer-base/src/main/resources/com/fr/design/images/bbs/sign.png new file mode 100644 index 0000000000000000000000000000000000000000..b1556f7ed13d46cccba615faa4fa305437010f30 GIT binary patch literal 340 zcmV-a0jvIrP)Px$4oO5oR5%gcQZY^gF%X=&i}(TIh)_CcBJlwv$P;KI(IZ5ZFOU>;2q6T2pw0&p zl$sBa5(0vnj@&KlV4v10j;nFuon6n2*DDjcTIcWLV!g%Q+kN&BxJdxDBXMK74Vxrs zy7zk9oZDK!JA=>NBF~>8vK4ABMh1?c&#~tv*0T~@5E<0!z^WBT2LGUgwda*7iAMs% zLNFnD+3tTFblnM{LaH_wo3pRvYUPI8zQJiG^+2HAv-_-`d)Om^E2w08) zzG(KfxZ6Hk_)98(qPBeDcnLB3HIWX%nb)pDrGaBu6BS<-kmxJ_X<$tRa;!7hTwU$A m${AQ<=)~3>uGPW1$mTzBHE%bsZzeSW0000Px$QAtEWR5%fxQ$0_^Kn%63N+c>mLQH{?u3fv*nU4|vL)?v=;Y(N?8NO<+YhkMGPy#$P*^7btE|jTF1kPEn8-GKXf*|4 z7nPo}d<{^Du2IBCRdwDFja`Ix9L;ZaAFGtU&|+xVXBpjSJRc(RJpxUh+DX{=Bgss$ zo~_|k(ZnOL`&~_1w*J@81X8<^Ey!NhC5%J5VL$(Ye8WLvko*7u002ovPDHLkV1oE6 Bu6+Oi literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/video.png b/designer-base/src/main/resources/com/fr/design/images/bbs/video.png new file mode 100644 index 0000000000000000000000000000000000000000..1971f2615664186ab99617abff9f0a6a2eddd73d GIT binary patch literal 450 zcmV;z0X_bSP)Px$d`Uz>R5%fplV3{1KoG`fwn;=NDEOxoX%ApU5IljP-~s9h^g$3oPtX%6LW?in zpa&3q@DP<=ASl&hLGh(EO~(0BQ<`l8nwRYCe81hD{brf0uX@p|g=0PzkpmL0#%UIx znI8&{-1*n#?kvJdP-}?yIp|+SBBvx`lKIr1IWo+*ODpS_-3EUn7cT(#=G(|L5@APoEo8w;Pi#bQqdjfW#Qz*v#b9C Date: Thu, 23 Aug 2018 11:15:39 +0800 Subject: [PATCH 18/29] REPORT-10171 --- .../design/actions/community/BBSAction.java | 17 +----- .../design/actions/community/BugAction.java | 17 +----- .../actions/community/CenterAction.java | 17 +----- .../actions/community/CusDemandAction.java | 17 +----- .../design/actions/community/NeedAction.java | 17 +----- .../actions/community/QuestionAction.java | 18 +------ .../design/actions/community/SignAction.java | 17 +----- .../actions/community/TechSolutionAction.java | 17 +----- .../design/actions/community/VideoAction.java | 17 +----- .../java/com/fr/design/utils/BrowseUtils.java | 52 ++++++++++++++++++ .../main/java/com/fr/start/ServerStarter.java | 54 ++----------------- 11 files changed, 74 insertions(+), 186 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java index 8b7e45047..3964ac151 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java @@ -5,6 +5,7 @@ import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; @@ -37,21 +38,7 @@ public class BBSAction extends UpdateAction public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet BBS = new MenuKeySet() { @Override diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java index 21afd306e..9dd9f2ae6 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; @@ -31,21 +32,7 @@ public class BugAction extends UpdateAction public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs.bugs"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet BUG = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java index f8c5ea79c..f16862191 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java @@ -3,6 +3,7 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; @@ -32,21 +33,7 @@ public class CenterAction extends UpAction{ public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs.center"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet CENTER = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java index df9880857..c3dd646dd 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java @@ -3,6 +3,7 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; @@ -32,21 +33,7 @@ public class CusDemandAction extends UpAction{ public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs.demand"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet DEMAND = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java index e6e2cc215..74c862a76 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; @@ -32,21 +33,7 @@ public class NeedAction extends UpdateAction public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs.needs"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet NEED = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java index 7d349affa..42cf1130d 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; @@ -31,22 +32,7 @@ public class QuestionAction extends UpdateAction public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs.questions"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } - + BrowseUtils.browser(url); } public static final MenuKeySet QUESTIONS = new MenuKeySet() { @Override diff --git a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java index d0c9cd434..986e9d40e 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java @@ -5,6 +5,7 @@ import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; @@ -32,21 +33,7 @@ public class SignAction extends UpdateAction public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs.aut"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet SIGN = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java index 6e10d851b..a67c3d554 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; @@ -33,21 +34,7 @@ public class TechSolutionAction extends UpdateAction{ public void actionPerformed(ActionEvent arg0) { String url = CloudCenter.getInstance().acquireUrlByKind("bbs.solution"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet TSO = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java index 6919fab00..9fd0405f2 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; import com.fr.log.FineLoggerFactory; @@ -38,21 +39,7 @@ public class VideoAction extends UpdateAction } else { url = CloudCenter.getInstance().acquireUrlByKind("bbs.video"); } - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser_Duplicate")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } + BrowseUtils.browser(url); } public static final MenuKeySet VIDEO = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java b/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java new file mode 100644 index 000000000..f9078107f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java @@ -0,0 +1,52 @@ +package com.fr.design.utils; + +import com.fr.base.FRContext; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.OperatingSystem; +import com.fr.stable.StringUtils; + +import javax.swing.JOptionPane; +import java.awt.Desktop; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +/** + * Created by XINZAI on 2018/8/23. + */ +public class BrowseUtils { + public static void startBrowserFromCommand(String uri, IOException e) { + + if (OperatingSystem.isWindows()) { + try { + // win10 内存用到到80%左右的时候, Desktop.browser经常提示"存储空间不足, 无法处理改命令", 用rundll32可以打开. + Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + uri); + } catch (IOException ee) { + JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser_Duplicate")); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } else { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + public static void browser(String url) { + + if (StringUtils.isEmpty(url)) { + FRContext.getLogger().info("The URL is empty!"); + return; + } + try { + Desktop.getDesktop().browse(new URI(url)); + } catch (IOException exp) { + startBrowserFromCommand(url, exp); + } catch (URISyntaxException exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + } catch (Exception exp) { + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); + } + } + + +} diff --git a/designer-base/src/main/java/com/fr/start/ServerStarter.java b/designer-base/src/main/java/com/fr/start/ServerStarter.java index b916bd679..2141870b1 100644 --- a/designer-base/src/main/java/com/fr/start/ServerStarter.java +++ b/designer-base/src/main/java/com/fr/start/ServerStarter.java @@ -1,25 +1,15 @@ package com.fr.start; -import com.fr.base.FRContext; import com.fr.base.ServerConfig; import com.fr.design.DesignerEnvManager; +import com.fr.design.utils.BrowseUtils; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; - -import com.fr.log.FineLoggerFactory; -import com.fr.stable.OperatingSystem; import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; import com.fr.start.server.FineEmbedServer; import com.fr.workspace.WorkContext; -import javax.swing.*; -import java.awt.*; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - public class ServerStarter { /** @@ -30,7 +20,7 @@ public class ServerStarter { if (!WorkContext.getCurrent().isLocal()) { //有问题,这里拿不到远程的http端口 - browser(WorkContext.getCurrent().getPath()); + BrowseUtils.browser(WorkContext.getCurrent().getPath()); } else if (ComparatorUtils.equals(StableUtils.getInstallHome(), ".")) {//august:供代码使用 String web = GeneralContext.getCurrentAppNameOfEnv(); @@ -48,7 +38,7 @@ public class ServerStarter { FineEmbedServer.start(); } finally { //先访问Demo, 后访问报表, 不需要重置服务器. - browser("http://localhost:" + DesignerEnvManager.getEnvManager().getEmbedServerPort() + "/" + GeneralContext.getCurrentAppNameOfEnv() + "/" + ServerConfig.getInstance().getServletName()); + BrowseUtils.browser("http://localhost:" + DesignerEnvManager.getEnvManager().getEmbedServerPort() + "/" + GeneralContext.getCurrentAppNameOfEnv() + "/" + ServerConfig.getInstance().getServletName()); } } @@ -60,42 +50,6 @@ public class ServerStarter { public static void browserURLWithLocalEnv(String url) { FineEmbedServer.start(); - browser(url); + BrowseUtils.browser(url); } - - private static void browser(String uri) { - - if (StringUtils.isEmpty(uri)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(uri)); - - } catch (IOException e) { - startBrowserFromCommand(uri, e); - } catch (URISyntaxException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + uri); - } - } - - private static void startBrowserFromCommand(String uri, IOException e) { - - if (OperatingSystem.isWindows()) { - try { - // win10 内存用到到80%左右的时候, Desktop.browser经常提示"存储空间不足, 无法处理改命令", 用rundll32可以打开. - Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + uri); - } catch (IOException ee) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser_Duplicate")); - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } else { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - } From cda92e48916e9e03083b7c99cb2f6503d39289eb Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Thu, 23 Aug 2018 11:29:28 +0800 Subject: [PATCH 19/29] REPORT-10171 --- .../com/fr/design/actions/community/BBSAction.java | 8 +------- .../com/fr/design/actions/community/BugAction.java | 9 +-------- .../com/fr/design/actions/community/CenterAction.java | 8 -------- .../fr/design/actions/community/CusDemandAction.java | 11 ++--------- .../com/fr/design/actions/community/NeedAction.java | 9 +-------- .../fr/design/actions/community/QuestionAction.java | 9 +-------- .../com/fr/design/actions/community/SignAction.java | 8 +------- .../design/actions/community/TechSolutionAction.java | 11 +++-------- .../com/fr/design/actions/community/VideoAction.java | 7 ------- .../main/java/com/fr/design/utils/BrowseUtils.java | 10 ++++++++++ 10 files changed, 20 insertions(+), 70 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java index 3964ac151..98ad28c9c 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java @@ -1,21 +1,15 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; import javax.swing.*; -import java.awt.*; + import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; public class BBSAction extends UpdateAction { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java index 9dd9f2ae6..d9c75321d 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java @@ -1,21 +1,14 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; - import javax.swing.*; -import java.awt.*; + import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; public class BugAction extends UpdateAction { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java index f16862191..3ba97c0fc 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java @@ -1,20 +1,12 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import javax.swing.JOptionPane; import javax.swing.KeyStroke; -import java.awt.Desktop; import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; /** * Created by XINZAI on 2018/8/23. diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java index c3dd646dd..9e294d859 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java @@ -1,20 +1,13 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; + import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; - -import javax.swing.JOptionPane; import javax.swing.KeyStroke; -import java.awt.Desktop; + import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; /** * Created by XINZAI on 2018/8/23. diff --git a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java index 74c862a76..c604e51d0 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java @@ -1,21 +1,14 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; - import javax.swing.*; -import java.awt.*; + import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; public class NeedAction extends UpdateAction { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java index 42cf1130d..717537df6 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java @@ -1,21 +1,14 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; - import javax.swing.*; -import java.awt.*; + import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; public class QuestionAction extends UpdateAction { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java index 986e9d40e..c08619b23 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java @@ -1,21 +1,15 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; import javax.swing.*; -import java.awt.*; + import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; public class SignAction extends UpdateAction { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java index a67c3d554..fce0dbda8 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java @@ -1,21 +1,16 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import javax.swing.JOptionPane; + import javax.swing.KeyStroke; -import java.awt.Desktop; + import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; + /** * Created by XINZAI on 2018/8/23. diff --git a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java index 9fd0405f2..8e9fd5b32 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java @@ -1,21 +1,14 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; import javax.swing.*; -import java.awt.*; import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; import java.util.Locale; public class VideoAction extends UpdateAction diff --git a/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java b/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java index f9078107f..4ea403558 100644 --- a/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java @@ -15,6 +15,12 @@ import java.net.URISyntaxException; * Created by XINZAI on 2018/8/23. */ public class BrowseUtils { + + /** + * 处理内存异常,win10下用rundll32打开 + * @param uri 网址 + * @param e + */ public static void startBrowserFromCommand(String uri, IOException e) { if (OperatingSystem.isWindows()) { @@ -30,6 +36,10 @@ public class BrowseUtils { } } + /** + * 打开网页,用默认浏览器 + * @param url 网址 + */ public static void browser(String url) { if (StringUtils.isEmpty(url)) { From 024188f04f8f022b725fb0345d31699cc239c32f Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Thu, 23 Aug 2018 11:31:07 +0800 Subject: [PATCH 20/29] REPORT-10171 --- .../src/main/java/com/fr/design/utils/BrowseUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java b/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java index 4ea403558..4de270571 100644 --- a/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/BrowseUtils.java @@ -21,7 +21,7 @@ public class BrowseUtils { * @param uri 网址 * @param e */ - public static void startBrowserFromCommand(String uri, IOException e) { + private static void startBrowserFromCommand(String uri, IOException e) { if (OperatingSystem.isWindows()) { try { From 200e3372ce930ac356aa78bee8feb725a51fdd5b Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Thu, 23 Aug 2018 19:29:52 +0800 Subject: [PATCH 21/29] REPORT-10541 --- .../data/datapane/connect/DatabaseConnectionPane.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java index aa56e76b0..b796ab2d7 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java @@ -34,6 +34,8 @@ public abstract class DatabaseConnectionPane Date: Thu, 23 Aug 2018 19:40:16 +0800 Subject: [PATCH 22/29] REPORT-10541 --- .../com/fr/design/onlineupdate/domain/UpdateConstants.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java index 5bd360542..c132dcc03 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java @@ -39,7 +39,8 @@ public interface UpdateConstants { "fine-swift-log-adaptor-10.0.jar", "fine-webui-10.0.jar", "fine-datasource-10.0.jar", - "fine-third-10.0.jar" + "fine-third-10.0.jar", + "fine-accumulator-10.0.jar" }; String[] JARS_FOR_DESIGNER_X = new String[]{ From 8794a3282bfb99cef37c148c5222bc28c4c1a166 Mon Sep 17 00:00:00 2001 From: Harrison Date: Thu, 23 Aug 2018 22:13:39 +0800 Subject: [PATCH 23/29] =?UTF-8?q?REPORT-10785=20report=E5=8C=85=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E7=99=BE=E5=A4=9A=E4=B8=AA=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E8=A7=84=E8=8C=83=E4=B8=8B=20=E5=88=86=E5=87=BA=20cor?= =?UTF-8?q?e-server=20/=20core-web?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/extra/PluginUtils.java | 2 +- .../java/com/fr/design/webattr/ReportWebWidgetConstants.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java b/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java index 50f81d574..ba8fdc408 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginUtils.java @@ -177,7 +177,7 @@ public class PluginUtils { private static String getInterKeyByErrorCode(PluginErrorCode errorCode) { - return ERROR_CODE_I18N_PREFIX + errorCode.getDescription(); + return errorCode.getDescription(); } public static PluginMarker getInstalledPluginMarkerByID(String pluginID) { diff --git a/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java b/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java index 9cc57ce50..6c70d6843 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java @@ -101,7 +101,7 @@ public class ReportWebWidgetConstants { // 导出成Word public static final WidgetOption WORD = WidgetOptionFactory.createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Word"), BaseUtils.readIcon("/com/fr/web/images/word.png"), Word.class); // 页面设置 - public static final WidgetOption PAGESETUP = WidgetOptionFactory.createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Page_Setup"), BaseUtils.readIcon("/com/fr/web/images/pageSetup.png"), PageSetup.class); + public static final WidgetOption PAGESETUP = WidgetOptionFactory.createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Engine_Report_PageSetup_Page_Setup"), BaseUtils.readIcon("/com/fr/web/images/pageSetup.png"), PageSetup.class); // 导出 public static final WidgetOption EXPORT = WidgetOptionFactory .createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Export"), BaseUtils.readIcon("/com/fr/web/images/export.png"), Export.class); From 2a3080183965dac1bce5f61d07f01d3387440e2f Mon Sep 17 00:00:00 2001 From: Harrison Date: Thu, 23 Aug 2018 22:54:09 +0800 Subject: [PATCH 24/29] =?UTF-8?q?REPORT-10785=20report=E5=8C=85=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E7=99=BE=E5=A4=9A=E4=B8=AA=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E8=A7=84=E8=8C=83=E4=B8=8B=20=E6=94=B9=E9=94=99?= =?UTF-8?q?=E4=BA=86=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/webattr/ReportWebWidgetConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java b/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java index 6c70d6843..9cc57ce50 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/ReportWebWidgetConstants.java @@ -101,7 +101,7 @@ public class ReportWebWidgetConstants { // 导出成Word public static final WidgetOption WORD = WidgetOptionFactory.createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Word"), BaseUtils.readIcon("/com/fr/web/images/word.png"), Word.class); // 页面设置 - public static final WidgetOption PAGESETUP = WidgetOptionFactory.createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Engine_Report_PageSetup_Page_Setup"), BaseUtils.readIcon("/com/fr/web/images/pageSetup.png"), PageSetup.class); + public static final WidgetOption PAGESETUP = WidgetOptionFactory.createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Page_Setup"), BaseUtils.readIcon("/com/fr/web/images/pageSetup.png"), PageSetup.class); // 导出 public static final WidgetOption EXPORT = WidgetOptionFactory .createByWidgetClass(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Export"), BaseUtils.readIcon("/com/fr/web/images/export.png"), Export.class); From 8c595308481f7e3e852d78d1f90f01a456dd9930 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 24 Aug 2018 10:41:40 +0800 Subject: [PATCH 25/29] =?UTF-8?q?REPORT-10490=20=E3=80=90=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E5=8D=87=E7=BA=A710.0=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=96=AD=E5=BC=80=E5=90=8E=EF=BC=8C=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=A1=86=E6=98=BE=E7=A4=BA=E7=A9=BA=E7=99=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/socketio/DesignerSocketIO.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java index 33f1558b9..6318d0e05 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java @@ -23,6 +23,7 @@ import io.socket.emitter.Emitter; import javax.swing.*; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.net.URL; @@ -80,9 +81,17 @@ public class DesignerSocketIO { @Override public void call(Object... objects) { if (status != Status.Disconnecting) { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Remote_Disconnected"), - null, 0, UIManager.getIcon("OptionPane.errorIcon")); - TemplatePane.getInstance().editItems(); + try { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Remote_Disconnected"), + null, 0, UIManager.getIcon("OptionPane.errorIcon")); + TemplatePane.getInstance().editItems(); + } + }); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } } status = Status.Disconnected; } From c51d7d034c27e0a5ca5153b39c745cee7d62172a Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 24 Aug 2018 10:42:38 +0800 Subject: [PATCH 26/29] =?UTF-8?q?REPORT-10490=20=E3=80=90=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E5=8D=87=E7=BA=A710.0=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=96=AD=E5=BC=80=E5=90=8E=EF=BC=8C=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=A1=86=E6=98=BE=E7=A4=BA=E7=A9=BA=E7=99=BD=3D>?= =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/socketio/DesignerSocketIO.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java index 6318d0e05..e9b12e7b1 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java @@ -6,7 +6,6 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.TemplatePane; import com.fr.design.mainframe.loghandler.DesignerLogHandler; import com.fr.event.EventDispatcher; - import com.fr.log.FineLoggerFactory; import com.fr.serialization.SerializerHelper; import com.fr.stable.ArrayUtils; @@ -21,9 +20,10 @@ import io.socket.client.IO; import io.socket.client.Socket; import io.socket.emitter.Emitter; -import javax.swing.*; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.net.URL; From 906961c8b5815c71eed70a37ddb7d7f43c4fe18c Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Fri, 24 Aug 2018 16:03:46 +0800 Subject: [PATCH 27/29] =?UTF-8?q?=E6=97=A0JRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=86=85=E7=BD=AE=E5=9C=A8release=E5=8F=96?= =?UTF-8?q?=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/toolbar/ToolBarMenuDock.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 7abe673a0..4f7920d1e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -474,9 +474,9 @@ public abstract class ToolBarMenuDock { shortCuts.add(new TutorialAction()); } //远程不使用更新升级 - if(WorkContext.getCurrent().isLocal()) { - shortCuts.add(new SoftwareUpdateAction()); - } +// if(WorkContext.getCurrent().isLocal()) { +// shortCuts.add(new SoftwareUpdateAction()); +// } if (AlphaFineConfigManager.isALPHALicAvailable()) { shortCuts.add(new AlphaFineAction()); } From 81c0c3336911a651b087bf7cbc49b0165ea2f471 Mon Sep 17 00:00:00 2001 From: Harrison Date: Fri, 24 Aug 2018 16:18:04 +0800 Subject: [PATCH 28/29] =?UTF-8?q?REPORT-10785=20report=E5=8C=85=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E7=99=BE=E5=A4=9A=E4=B8=AA=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E8=A7=84=E8=8C=83=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../icontainer/UIModeControlContainer.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIModeControlContainer.java b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIModeControlContainer.java index 51bdba985..eadb94109 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icontainer/UIModeControlContainer.java +++ b/designer-base/src/main/java/com/fr/design/gui/icontainer/UIModeControlContainer.java @@ -1,16 +1,28 @@ package com.fr.design.gui.icontainer; -import com.fr.base.BaseUtils; import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.DesignerContext; - import com.fr.design.utils.gui.GUICoreUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLayeredPane; +import javax.swing.JPanel; +import java.awt.AlphaComposite; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Composite; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.LayoutManager; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; @@ -263,7 +275,7 @@ public class UIModeControlContainer extends JLayeredPane { public HidePane() { setLayout(new FlowLayout(FlowLayout.CENTER, 10, -3)); setBackground(UIConstants.NORMAL_BACKGROUND); - add(new UILabel("" + com.fr.design.i18n.Toolkit.i18nText("Parameter Panel") + "")); + add(new UILabel("" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Parameter_Panel") + "")); UIButton viewButton = new UIButton(UIConstants.VIEW_NORMAL_ICON, UIConstants.VIEW_PRESSED_ICON, UIConstants.VIEW_PRESSED_ICON) { @Override public Dimension getPreferredSize() { From 338137ced4f268807ba53c16823266ef9bbe1a55 Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Fri, 24 Aug 2018 17:31:54 +0800 Subject: [PATCH 29/29] REPORT-10847 --- .../fr/design/mainframe/loghandler/DesignerLogHandler.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index a2bd7018b..877a322cb 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -38,6 +38,7 @@ public class DesignerLogHandler { protected static final int INFO_INT = Level.INFO.toInt(); protected static final int ERROR_INT = Level.ERROR.toInt(); protected static final int WARN_INT = Level.WARN.toInt(); + protected static final int DEBUG_INT = Level.DEBUG.toInt(); private static final int GAP_X = -150; private static final int INFO_GAP_Y = -60; private static final int ERRO_GAP_Y = -40; @@ -209,12 +210,15 @@ public class DesignerLogHandler { public void printStackTrace(String message, Level level, Date date) { int intLevel = level.toInt(); + int logLevel = Log4jConfig.getInstance().getRootLevel().toInt(); if (intLevel == INFO_INT && showInfo.isSelected()) { printMessage(message, intLevel, date); } else if (intLevel == ERROR_INT && showError.isSelected()) { printMessage(message, intLevel, date); } else if (intLevel == WARN_INT && showServer.isSelected()) { printMessage(message, intLevel, date); + } else if (intLevel == DEBUG_INT && logLevel == DEBUG_INT){ + printMessage(message, intLevel, date); } }