From 844fd9e1d806db168a5647e708159a31a72ee81b Mon Sep 17 00:00:00 2001 From: zheng Date: Fri, 6 Sep 2019 10:15:32 +0800 Subject: [PATCH] =?UTF-8?q?CHART-10225=20=E5=85=BC=E5=AE=B9=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E5=9B=BE=E8=A1=A8=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/ChartTypeInterfaceManager.java | 71 +++++++++++++++---- .../chart/fun/IndependentChartUIProvider.java | 11 +++ .../mainframe/chart/ChartsEditPane.java | 8 ++- .../chart/gui/type/AbstractChartTypePane.java | 25 ++++--- 4 files changed, 84 insertions(+), 31 deletions(-) create mode 100644 designer-chart/src/main/java/com/fr/design/chart/fun/IndependentChartUIProvider.java diff --git a/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java b/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java index 7a945995e..f0d012544 100644 --- a/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java @@ -5,10 +5,10 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.ChartTypeManager; import com.fr.chartx.attr.ChartProvider; +import com.fr.common.annotations.Compatible; import com.fr.design.beans.BasicBeanPane; import com.fr.design.beans.FurtherBasicBeanPane; import com.fr.design.chart.fun.ChartTypeUIProvider; -import com.fr.design.chart.fun.impl.AbstractIndependentChartsUI; import com.fr.design.chart.gui.ChartWidgetOption; import com.fr.design.chartinterface.AreaIndependentChartInterface; import com.fr.design.chartinterface.BarIndependentChartInterface; @@ -39,10 +39,10 @@ import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPa import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; import com.fr.design.module.DesignModuleFactory; -import com.fr.extended.chart.AbstractExtendedChartUIProvider; import com.fr.form.ui.ChartEditor; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; +import com.fr.invoke.Reflect; import com.fr.log.FineLoggerFactory; import com.fr.plugin.chart.PiePlot4VanChart; import com.fr.plugin.chart.area.VanChartAreaPlot; @@ -281,19 +281,24 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr if (AssistUtils.equals(pane.title4PopupWindow(), TYPE_PANE_DEFAULT_TITLE)) { continue; } - pane.setPlotID(plotID); + pane.reLayout(plotID); paneList.add(pane); if (allChartTypePane.get(priority) == null) { allChartTypePane.put(priority, new LinkedHashMap>()); } allChartTypePane.get(priority).put(plotID, pane); - } catch (Exception e) { + } catch (Throwable e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } } } } + + @Compatible + public String getTitle4PopupWindow(String plotID) { + return getName(plotID); + } private List getPriorityInOrder() { @@ -324,18 +329,45 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr if (chartTypeInterfaces != null) { ChartTypeUIProvider provider = getChartTypeInterface(id); if (provider != null) { - String[] subNames = provider.getSubName(); - return ArrayUtils.isEmpty(subNames) ? new String[]{getName(id)} : subNames; + String[] subNames = null; + try { + subNames = provider.getSubName(); + } catch (Throwable throwable) { + //do nothing + } + return ArrayUtils.isEmpty(subNames) ? getCompatibleSubName(id, provider) : subNames; } } return new String[0]; } + //兼容 + private String[] getCompatibleSubName(String id, ChartTypeUIProvider provider) { + ChartProvider[] chartProviders = ChartTypeManager.getInstanceWithCheck().getChartTypes(id); + + if (chartProviders.length == 1) { + return new String[]{getName(id)}; + } + String[] result = new String[chartProviders.length]; + for (int i = 0; i < chartProviders.length; i++) { + if (chartProviders[i] instanceof Chart) { + result[i] = ((Chart) chartProviders[i]).getChartName(); + } + } + return result; + } + public String getName(String id) { if (chartTypeInterfaces != null) { ChartTypeUIProvider provider = getChartTypeInterface(id); if (provider != null) { - String name = provider.getName(); + String name = null; + try { + name = provider.getName(); + } catch (Throwable throwable) { + //do nothing + } + return StringUtils.isEmpty(name) ? getCompatibleName(id, provider) : name; } } @@ -344,17 +376,26 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr //兼容 private static String getCompatibleName(String id, ChartTypeUIProvider provider) { - if (provider instanceof AbstractIndependentChartsUI) { - return provider.getPlotTypePane().title4PopupWindow(); + + String result = null; + try { + result = Reflect.on(provider).call("getPlotTypeTitle4PopupWindow").get(); + } catch (Exception e) { + //do nothing } - if (provider instanceof AbstractExtendedChartUIProvider) { - ChartProvider chartProvider = ChartTypeManager.getInstanceWithCheck().getChartTypes(id)[0]; - if (chartProvider instanceof Chart) { - return ((Chart) chartProvider).getChartName(); - } + if (StringUtils.isNotEmpty(result)) { + return result; } - return StringUtils.EMPTY; + ChartProvider chartProvider = ChartTypeManager.getInstanceWithCheck().getChartTypes(id)[0]; + if (chartProvider instanceof Chart) { + result = ((Chart) chartProvider).getChartName(); + } + if (StringUtils.isNotEmpty(result)) { + return result; + } + + return provider.getPlotTypePane().title4PopupWindow(); } public ChartDataPane getChartDataPane(String plotID, AttributeChangeListener listener) { diff --git a/designer-chart/src/main/java/com/fr/design/chart/fun/IndependentChartUIProvider.java b/designer-chart/src/main/java/com/fr/design/chart/fun/IndependentChartUIProvider.java new file mode 100644 index 000000000..88a14c090 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/design/chart/fun/IndependentChartUIProvider.java @@ -0,0 +1,11 @@ +package com.fr.design.chart.fun; + +import com.fr.common.annotations.Compatible; + +/** + * Created by shine on 2019/09/05. + */ +@Compatible +public interface IndependentChartUIProvider extends ChartTypeUIProvider { + +} diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartsEditPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartsEditPane.java index b9f5a2fbd..ff6844d8b 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartsEditPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/ChartsEditPane.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.chart; import com.fr.chart.chartattr.Chart; +import com.fr.chartx.attr.ChartProvider; import com.fr.design.ChartTypeInterfaceManager; import com.fr.design.mainframe.chart.gui.ChartDataPane; @@ -30,15 +31,16 @@ public class ChartsEditPane extends ChartEditPane { * 重新构造面板 * @param currentChart 图表 */ - public void reLayout(Chart currentChart) { + public void reLayout(ChartProvider currentChart) { if (currentChart != null) { + Chart chart = (Chart) currentChart; this.removeAll(); this.setLayout(new BorderLayout()); paneList = new ArrayList(); String plotID = ""; - if (currentChart.getPlot() != null) { - plotID = currentChart.getPlot().getPlotID(); + if (chart.getPlot() != null) { + plotID = chart.getPlot().getPlotID(); } dataPane4SupportCell = createChartDataPane(plotID); diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java index 263424762..fa80f19d8 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java @@ -60,6 +60,11 @@ public abstract class AbstractChartTypePane extends Fur } public AbstractChartTypePane() { + } + + public void reLayout(String chartID) { + this.plotID = chartID; + double vs = 4; double p = TableLayout.PREFERRED; double f = TableLayout.FILL; @@ -156,9 +161,11 @@ public abstract class AbstractChartTypePane extends Fur } } - for(int i = 0; i < typeDemo.size(); i++) { - typeDemo.get(i).checkBorder(); - typeDemo.get(i).repaint(); + if (this.typeDemo != null && !typeDemo.isEmpty()) { + for (int i = 0; i < typeDemo.size(); i++) { + typeDemo.get(i).checkBorder(); + typeDemo.get(i).repaint(); + } } } @@ -197,22 +204,14 @@ public abstract class AbstractChartTypePane extends Fur return plotID; } - public void setPlotID(String plotID) { - this.plotID = plotID; - } - /** * * @param ob 对象 * @return */ public boolean accept(Object ob) { - if(ob instanceof Chart){ - Chart chart = (Chart)ob; - Plot plot = chart.getPlot(); - if(plot != null && ComparatorUtils.equals(plot.getPlotID(), getPlotID())){ - return true; - } + if (ob instanceof ChartProvider) { + return ComparatorUtils.equals(((ChartProvider) ob).getID(), getPlotID()); } return false; }