From 5d264469f7b650b061a6e3cd82b8c0c9f86c8928 Mon Sep 17 00:00:00 2001 From: juhaoyu <2335173323@qq.com> Date: Mon, 22 May 2017 11:00:37 +0800 Subject: [PATCH] fix --- .../fr/design/ExtraDesignClassManager.java | 174 ++++---- .../fr/design/ChartTypeInterfaceManager.java | 374 ++++++++---------- 2 files changed, 248 insertions(+), 300 deletions(-) diff --git a/designer_base/src/com/fr/design/ExtraDesignClassManager.java b/designer_base/src/com/fr/design/ExtraDesignClassManager.java index 72c902821..429e0ce45 100644 --- a/designer_base/src/com/fr/design/ExtraDesignClassManager.java +++ b/designer_base/src/com/fr/design/ExtraDesignClassManager.java @@ -9,18 +9,18 @@ import com.fr.design.data.datapane.TableDataNameObjectCreator; import com.fr.design.fun.*; import com.fr.design.gui.core.WidgetOption; import com.fr.design.gui.core.WidgetOptionFactory; +import com.fr.design.menu.ShortCut; import com.fr.design.widget.Appearance; import com.fr.form.ui.Widget; import com.fr.general.FRLogger; -import com.fr.general.GeneralContext; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; -import com.fr.plugin.ExtraXMLFileManager; -import com.fr.stable.EnvChangedListener; +import com.fr.plugin.AbstractExtraClassManager; +import com.fr.plugin.injectable.CompatibleInjectionContainer; +import com.fr.plugin.injectable.PluginModule; +import com.fr.plugin.injectable.PluginSingleInjection; +import com.fr.stable.bridge.StableFactory; import com.fr.stable.plugin.ExtraDesignClassManagerProvider; -import com.fr.stable.plugin.PluginSimplify; -import com.fr.stable.xml.XMLPrintWriter; -import com.fr.stable.xml.XMLableReader; import java.util.*; @@ -29,42 +29,25 @@ import java.util.*; * @since : 8.0 * 用于设计器扩展的管理类 */ -public class ExtraDesignClassManager extends ExtraXMLFileManager implements ExtraDesignClassManagerProvider { - - private static final String XML_TAG = "ExtraDesignClassManager"; - - private static ExtraDesignClassManager classManager; - +public class ExtraDesignClassManager extends AbstractExtraClassManager implements ExtraDesignClassManagerProvider { + + private static ExtraDesignClassManager classManager = new ExtraDesignClassManager(); + + private CompatibleInjectionContainer shortCuts = new CompatibleInjectionContainer<>(); + public synchronized static ExtraDesignClassManager getInstance() { - if (classManager == null) { - classManager = new ExtraDesignClassManager(); - classManager.readXMLFile(); - } - return classManager; } - + static { - GeneralContext.addEnvChangedListener(new EnvChangedListener() { - public void envChanged() { - ExtraDesignClassManager.envChanged(); - } - }); + StableFactory.registerMarkedObject(PluginModule.EXTRA_DESIGN.getAgentName(), classManager); } - - - private synchronized static void envChanged() { - classManager = null; - } - - - - + public TableDataNameObjectCreator[] getReportTableDataCreators() { return getKindsOfTableDataCreators(TableDataDefineProvider.XML_TAG); } - - + + /** * 添加serverTDCreators * @@ -73,7 +56,7 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr public TableDataNameObjectCreator[] getServerTableDataCreators() { return getKindsOfTableDataCreators(ServerTableDataDefineProvider.XML_TAG); } - + private TableDataNameObjectCreator[] getKindsOfTableDataCreators(String tag) { Set set = getArray(tag); if (set.isEmpty()) { @@ -82,19 +65,19 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr List creators = new ArrayList<>(); for (TableDataDefineProvider provider : set) { TableDataNameObjectCreator creator = new TableDataNameObjectCreator( - provider.nameForTableData(), - provider.prefixForTableData(), - provider.iconPathForTableData(), - provider.classForTableData(), - provider.classForInitTableData(), - provider.appearanceForTableData() + provider.nameForTableData(), + provider.prefixForTableData(), + provider.iconPathForTableData(), + provider.classForTableData(), + provider.classForInitTableData(), + provider.appearanceForTableData() ); creators.add(creator); } return creators.toArray(new TableDataNameObjectCreator[creators.size()]); } - - + + public Map, Class> getParameterWidgetOptionsMap() { Map, Class> map = new HashMap<>(); Set set = getArray(ParameterWidgetOptionProvider.XML_TAG); @@ -103,7 +86,7 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr } return map; } - + public WidgetOption[] getParameterWidgetOptions() { Set set = getArray(ParameterWidgetOptionProvider.XML_TAG); if (set.isEmpty()) { @@ -112,16 +95,16 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr Set result = new HashSet<>(); for (ParameterWidgetOptionProvider provider : set) { WidgetOption option = WidgetOptionFactory.createByWidgetClass( - provider.nameForWidget(), - IOUtils.readIcon(provider.iconPathForWidget()), - provider.classForWidget() + provider.nameForWidget(), + IOUtils.readIcon(provider.iconPathForWidget()), + provider.classForWidget() ); result.add(option); } return result.toArray(new WidgetOption[result.size()]); } - - + + public WidgetOption[] getWebWidgetOptions() { Set set = getArray(ToolbarItemProvider.XML_TAG); if (set.isEmpty()) { @@ -130,17 +113,17 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr List list = new ArrayList<>(); for (ToolbarItemProvider provider : set) { WidgetOption option = WidgetOptionFactory.createByWidgetClass( - provider.nameForWidget(), - IOUtils.readIcon(provider.iconPathForWidget()), - provider.classForWidget() + provider.nameForWidget(), + IOUtils.readIcon(provider.iconPathForWidget()), + provider.classForWidget() ); list.add(option); } return list.toArray(new WidgetOption[list.size()]); } - - - + + + public Map, Class> getFormWidgetOptionsMap() { Set set = getArray(FormWidgetOptionProvider.XML_TAG); Map, Class> map = new HashMap<>(); @@ -149,15 +132,15 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr } return map; } - + public WidgetOption[] getFormWidgetOptions() { return getFormUnits(false); } - + public WidgetOption[] getFormWidgetContainerOptions() { return getFormUnits(true); } - + private WidgetOption[] getFormUnits(boolean isContainer) { Set set = getArray(FormWidgetOptionProvider.XML_TAG); if (set.isEmpty()) { @@ -167,18 +150,18 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr for (FormWidgetOptionProvider provider : set) { if (provider.isContainer() == isContainer) { WidgetOption option = WidgetOptionFactory.createByWidgetClass( - provider.nameForWidget(), - BaseUtils.readIcon(provider.iconPathForWidget()), - provider.classForWidget() + provider.nameForWidget(), + BaseUtils.readIcon(provider.iconPathForWidget()), + provider.classForWidget() ); result.add(option); } } return result.toArray(new WidgetOption[result.size()]); } - - - + + + public WidgetOption[] getCellWidgetOptions() { Set set = getArray(CellWidgetOptionProvider.XML_TAG); if (set.isEmpty()) { @@ -187,16 +170,16 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr Set result = new HashSet<>(); for (CellWidgetOptionProvider provider : set) { WidgetOption option = WidgetOptionFactory.createByWidgetClass( - provider.nameForWidget(), - IOUtils.readIcon(provider.iconPathForWidget()), - provider.classForWidget() + provider.nameForWidget(), + IOUtils.readIcon(provider.iconPathForWidget()), + provider.classForWidget() ); - result.add(option); + result.add(option); } return result.toArray(new WidgetOption[result.size()]); - + } - + public Map, Appearance> getCellWidgetOptionsMap() { Set set = getArray(CellWidgetOptionProvider.XML_TAG); Map, Appearance> map = new HashMap<>(); @@ -205,8 +188,8 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr } return map; } - - + + public Feedback getFeedback() { try { Class clazz = GeneralUtils.classForName("com.fr.design.feedback.CurrentFeedback"); @@ -218,34 +201,29 @@ public class ExtraDesignClassManager extends ExtraXMLFileManager implements Extr } return Feedback.EMPTY; } - - /** - * 文件名 - * - * @return 文件名 - */ + @Override - public String fileName() { - return "designer.xml"; + protected boolean demountSpecific(PluginSingleInjection injection) { + + if (ShortCut.TEMPLATE_TREE.equals(injection.getName()) && injection.getOriginalObject() instanceof ShortCut) { + shortCuts.remove(injection.getObject()); + return true; + } + return false; } - - /** - * 读xml - * - * @param reader xml对象 - */ - public void readXML(XMLableReader reader) { - readXML(reader, null, PluginSimplify.NULL); + + @Override + protected boolean mountSpecific(PluginSingleInjection injection) { + + if (ShortCut.TEMPLATE_TREE.equals(injection.getName()) && injection.getOriginalObject() instanceof ShortCut) { + shortCuts.put(injection.getObject(), (ShortCut) injection.getOriginalObject()); + return true; + } + return false; } - - - /** - * 写xml - * - * @param writer xml对象 - */ - public void writeXML(XMLPrintWriter writer) { - writer.startTAG(XML_TAG); - writer.end(); + + public Set getExtraShortCuts() { + + return shortCuts.getSet(); } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index c67a6aea5..689471f5b 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -19,128 +19,113 @@ import com.fr.design.mainframe.chart.gui.ChartStylePane; import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane; import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; import com.fr.design.module.DesignModuleFactory; -import com.fr.file.XMLFileManager; import com.fr.form.ui.ChartEditor; -import com.fr.general.*; -import com.fr.plugin.PluginCollector; -import com.fr.plugin.PluginLicenseManager; -import com.fr.plugin.PluginMessage; -import com.fr.design.extra.ChartTypeInterfaceCloseableHandler; -import com.fr.plugin.proxy.PluginInstanceProxyFactory; -import com.fr.plugin.proxy.PluginInvocationHandler; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.plugin.injectable.PluginSingleInjection; import com.fr.stable.ArrayUtils; -import com.fr.stable.EnvChangedListener; import com.fr.stable.StringUtils; +import com.fr.stable.bridge.StableFactory; import com.fr.stable.collections.map.CloseableContainedMap; -import com.fr.stable.fun.Authorize; import com.fr.stable.plugin.ExtraChartDesignClassManagerProvider; import com.fr.stable.plugin.PluginReadListener; -import com.fr.stable.plugin.PluginSimplify; -import com.fr.stable.plugin.closeable.Closeable; -import com.fr.stable.xml.XMLPrintWriter; -import com.fr.stable.xml.XMLableReader; import javax.swing.*; import java.util.*; /** - * Created by eason on 14/12/29. + * Created by eason on 14/12/29. */ -public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraChartDesignClassManagerProvider { - - private static ClassLoader loader = Thread.currentThread().getContextClassLoader(); - - private static ChartTypeInterfaceManager classManager = null; - +public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerProvider { + + + private static ChartTypeInterfaceManager classManager = new ChartTypeInterfaceManager(); + private static LinkedHashMap> chartTypeInterfaces = - new LinkedHashMap<>(); - + new LinkedHashMap>(); + public synchronized static ChartTypeInterfaceManager getInstance() { - if (classManager == null) { - classManager = new ChartTypeInterfaceManager(); - chartTypeInterfaces.clear(); - classManager.readDefault(); - } + return classManager; } - + static { - GeneralContext.addEnvChangedListener(new EnvChangedListener() { - public void envChanged() { - ChartTypeInterfaceManager.envChanged(); - } - }); + readDefault(); + StableFactory.registerMarkedObject(XML_TAG, classManager); } - + + // TODO: 2017/3/8 static { GeneralContext.addPluginReadListener(new PluginReadListener() { + @Override - public void success(Status status) { + public void success() { //重新注册designModuleFactory DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption()); } }); } - - public static WidgetOption[] initWidgetOption(){ - + + private static WidgetOption[] initWidgetOption() { + ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames(); ChartWidgetOption[] child = new ChartWidgetOption[typeName.length]; final Chart[][] allCharts = new Chart[typeName.length][]; for (int i = 0; i < typeName.length; i++) { String plotID = typeName[i].getPlotID(); Chart[] rowChart = ChartTypeManager.getInstance().getChartTypes(plotID); - if(ArrayUtils.isEmpty(rowChart)) { + if (ArrayUtils.isEmpty(rowChart)) { continue; } String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(plotID); Icon icon = IOUtils.readIcon(iconPath); child[i] = new ChartWidgetOption(Inter.getLocText(typeName[i].getName()), icon, ChartEditor.class, rowChart[0]); - + allCharts[i] = rowChart; } - + //异步加载图片 new Thread(new Runnable() { + @Override public void run() { + initAllChartsDemoImage(allCharts); } }).start(); - + return child; } - + //加载所有图表图片 - private static void initAllChartsDemoImage(Chart[][] allCharts){ - for (int i = 0; i < allCharts.length; i++) { - Chart[] rowChart = allCharts[i]; - if(rowChart == null) { + private static void initAllChartsDemoImage(Chart[][] allCharts) { + + for (Chart[] rowChart : allCharts) { + if (rowChart == null) { continue; } //加载初始化图表模型图片 initChartsDemoImage(rowChart); } } - + private static void initChartsDemoImage(Chart[] rowChart) { - int rowChartsCount = rowChart.length; - for (int j = 0; j < rowChartsCount; j++) { + + for (Chart aRowChart : rowChart) { //此时,为图片生成模型数据 - rowChart[j].createSlotImage(); + aRowChart.createSlotImage(); } } - - private synchronized static void envChanged() { - classManager = null; - } - + + private static void readDefault() { - if (chartTypeInterfaces.containsKey(ChartTypeManager.CHART_PRIORITY)){ + + if (chartTypeInterfaces.containsKey(ChartTypeManager.CHART_PRIORITY)) { return; } CloseableContainedMap chartUIList = - new CloseableContainedMap<>(LinkedHashMap.class); + new CloseableContainedMap(LinkedHashMap.class); chartUIList.put(ChartConstants.COLUMN_CHART, new ColumnIndependentChartInterface()); chartUIList.put(ChartConstants.LINE_CHART, new LineIndependentChartInterface()); chartUIList.put(ChartConstants.BAR_CHART, new BarIndependentChartInterface()); @@ -158,16 +143,16 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh chartUIList.put(ChartConstants.MAP_CHART, new MapIndependentChartInterface()); chartUIList.put(ChartConstants.GIS_CHAER, new GisMapIndependentChartInterface()); chartUIList.put(ChartConstants.FUNNEL_CHART, new FunnelIndependentChartInterface()); - + chartTypeInterfaces.put(ChartTypeManager.CHART_PRIORITY, chartUIList); } - + + public String getIconPath(String plotID) { + if (chartTypeInterfaces != null) { - Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = (Map.Entry) iterator.next(); - String priority = (String) entry.getKey(); + for (Map.Entry> entry : chartTypeInterfaces.entrySet()) { + String priority = entry.getKey(); String imagePath = getIconPath(priority, plotID); if (StringUtils.isNotEmpty(imagePath)) { return imagePath; @@ -176,25 +161,26 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return StringUtils.EMPTY; } - + private String getIconPath(String priority, String plotID) { - + if (chartTypeInterfaces.get(priority) != null && chartTypeInterfaces.get(priority).get(plotID) != null) { return chartTypeInterfaces.get(priority).get(plotID).getIconPath(); - }else { + } else { return StringUtils.EMPTY; } } - - public static void addChartTypeInterface(IndependentChartUIProvider provider, String priority, String plotID) { - if (chartTypeInterfaces != null){ - if (!chartTypeInterfaces.containsKey(priority)){ + + private static void addChartTypeInterface(IndependentChartUIProvider provider, String priority, String plotID) { + + if (chartTypeInterfaces != null) { + if (!chartTypeInterfaces.containsKey(priority)) { //新建一个具体图表列表 CloseableContainedMap chartUIList - = new CloseableContainedMap<>(LinkedHashMap.class); + = new CloseableContainedMap(LinkedHashMap.class); chartUIList.put(plotID, provider); chartTypeInterfaces.put(priority, chartUIList); - }else { + } else { Map chartUIList = chartTypeInterfaces.get(priority); if (!chartUIList.containsKey(plotID)) { chartUIList.put(plotID, provider); @@ -202,54 +188,18 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } } } - - /** - * 增加界面接口定义 - * - * @param className 类名 - * @param plotID 标志ID - */ - public void addChartInterface(String className, String priority, String plotID, PluginSimplify simplify) { - if (StringUtils.isNotBlank(className)) { - try { - Class clazz = Class.forName(className); - Authorize authorize = clazz.getAnnotation(Authorize.class); - if (authorize != null) { - PluginLicenseManager.getInstance().registerPaid(authorize, simplify); - } - IndependentChartUIProvider provider = getProxyObj(plotID, simplify, clazz); - if (PluginCollector.getCollector().isError(provider, IndependentChartUIProvider.CURRENT_API_LEVEL, simplify.getPluginName())) { - PluginMessage.remindUpdate(className); - } else { - addChartTypeInterface(provider, priority, plotID); - } - } catch (ClassNotFoundException e) { - FRLogger.getLogger().error("class not found:" + e.getMessage()); - } catch (IllegalAccessException | InstantiationException e) { - FRLogger.getLogger().error("object create error:" + e.getMessage()); - } catch (NoSuchMethodException e) { - FRLogger.getLogger().error(e.getMessage()); - } - } - } - - private IndependentChartUIProvider getProxyObj(String plotID, PluginSimplify simplify, Class clazz) throws IllegalAccessException, InstantiationException, NoSuchMethodException { - - PluginInstanceProxyFactory factory = new PluginInstanceProxyFactory(clazz, simplify); - PluginInvocationHandler handler = new ChartTypeInterfaceCloseableHandler(plotID); - return (IndependentChartUIProvider) factory.addProxy(Closeable.class, handler).getProxyObj(); - } - - + + /** * 把所有的pane加到list里 * * @param paneList pane容器 */ public void addPlotTypePaneList(List> paneList) { + List priorityList = getPriorityInOrder(); - for (int i = 0; i < priorityList.size(); i++){ - String priority = String.valueOf(priorityList.get(i)); + for (Integer aPriorityList : priorityList) { + String priority = String.valueOf(aPriorityList); Iterator chartUIIterator = chartTypeInterfaces.get(priority).entrySet().iterator(); while (chartUIIterator.hasNext()) { Map.Entry chartUIEntry = (Map.Entry) chartUIIterator.next(); @@ -258,9 +208,10 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } } } - - public String[] getTitle4PopupWindow(String priority){ - if (priority.isEmpty()){ + + public String[] getTitle4PopupWindow(String priority) { + + if (priority.isEmpty()) { return getTitle4PopupWindow(); } String[] names = new String[getChartSize(priority)]; @@ -268,7 +219,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh Map chartUIList = chartTypeInterfaces.get(priority); Iterator iterator = chartUIList.entrySet().iterator(); int i = 0; - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); IndependentChartUIProvider provider = (IndependentChartUIProvider) entry.getValue(); names[i++] = provider.getPlotTypeTitle4PopupWindow(); @@ -277,19 +228,17 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return new String[0]; } - + /** * 获取指定图表的标题 - * @param priority - * @return */ - public String getTitle4PopupWindow(String priority, String plotID){ - + public String getTitle4PopupWindow(String priority, String plotID) { + if (chartTypeInterfaces != null && chartTypeInterfaces.containsKey(priority) && chartTypeInterfaces.get(priority).containsKey(plotID)) { IndependentChartUIProvider provider = chartTypeInterfaces.get(priority).get(plotID); return provider.getPlotTypeTitle4PopupWindow(); } - + //兼容老的插件 if (chartTypeInterfaces != null) { Iterator iterator = chartTypeInterfaces.entrySet().iterator(); @@ -301,34 +250,36 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } } } - return new String(); + return StringUtils.EMPTY; } - - private String[] getTitle4PopupWindow(){ + + private String[] getTitle4PopupWindow() { + List priorityList = getPriorityInOrder(); - - if (priorityList.size() == 0){ + + if (priorityList.size() == 0) { return new String[0]; } - + int size = 0; //获取总得图表格式 - for (int i = 0; i < priorityList.size(); i++) { - size += getChartSize(String.valueOf(priorityList.get(i))); + for (Integer aPriorityList : priorityList) { + size += getChartSize(String.valueOf(aPriorityList)); } String[] names = new String[size]; - + int index = 0; - for (int i = 0; i < priorityList.size(); i++){ - String priority = String.valueOf(priorityList.get(i)); + for (Integer aPriorityList : priorityList) { + String priority = String.valueOf(aPriorityList); Iterator chartUI = chartTypeInterfaces.get(priority).entrySet().iterator(); index = fetchNames(chartUI, names, index); } - + return names; } - + private List getPriorityInOrder() { + List priorityList = new ArrayList(); if (chartTypeInterfaces != null) { Iterator iterator = chartTypeInterfaces.entrySet().iterator(); @@ -340,8 +291,9 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return ChartTypeManager.orderInPriority(priorityList); } - + private int fetchNames(Iterator chartUI, String[] names, int index) { + while (chartUI.hasNext()) { Map.Entry chartUIEntry = (Map.Entry) chartUI.next(); IndependentChartUIProvider provider = (IndependentChartUIProvider) chartUIEntry.getValue(); @@ -349,10 +301,11 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return index; } - + public ChartDataPane getChartDataPane(String plotID, AttributeChangeListener listener) { + Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String priority = (String) entry.getKey(); if (plotInChart(plotID, priority)) { @@ -361,26 +314,28 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return getChartDataPane(ChartTypeManager.CHART_PRIORITY, plotID, listener); } - + private ChartDataPane getChartDataPane(String priority, String plotID, AttributeChangeListener listener) { + return chartTypeInterfaces.get(priority).get(plotID).getChartDataPane(listener); } - + /** * 获取对应ID的图表数量 - * @param key - * @return + * */ - private int getChartSize(String key){ - if (chartTypeInterfaces != null && chartTypeInterfaces.containsKey(key)){ + private int getChartSize(String key) { + + if (chartTypeInterfaces != null && chartTypeInterfaces.containsKey(key)) { return chartTypeInterfaces.get(key).size(); } return 0; } - + public AbstractChartAttrPane[] getAttrPaneArray(String plotID, AttributeChangeListener listener) { + Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String priority = (String) entry.getKey(); if (plotInChart(plotID, priority)) { @@ -389,14 +344,16 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return getAttrPaneArray(ChartTypeManager.CHART_PRIORITY, plotID, listener); } - + private AbstractChartAttrPane[] getAttrPaneArray(String priority, String plotID, AttributeChangeListener listener) { + return chartTypeInterfaces.get(priority).get(plotID).getAttrPaneArray(listener); } - + public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent) { + Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String priority = (String) entry.getKey(); if (plotInChart(plot.getPlotID(), priority)) { @@ -405,15 +362,17 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return getTableDataSourcePane(ChartTypeManager.CHART_PRIORITY, plot, parent); } - + private AbstractTableDataContentPane getTableDataSourcePane(String priority, Plot plot, ChartDataPane parent) { + return chartTypeInterfaces.get(priority).get(plot.getPlotID()).getTableDataSourcePane(plot, parent); } - - + + public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) { + Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String priority = (String) entry.getKey(); String plotID = plot.getPlotID(); @@ -423,21 +382,24 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return getReportDataSourcePane(ChartTypeManager.CHART_PRIORITY, plot, parent); } - + private boolean plotInChart(String plotID, String priority) { + return chartTypeInterfaces != null - && chartTypeInterfaces.containsKey(priority) + && chartTypeInterfaces.containsKey(priority) && chartTypeInterfaces.get(priority).containsKey(plotID); } - + private AbstractReportDataContentPane getReportDataSourcePane(String priority, Plot plot, ChartDataPane parent) { + return chartTypeInterfaces.get(priority).get(plot.getPlotID()).getReportDataSourcePane(plot, parent); } - - + + public ConditionAttributesPane getPlotConditionPane(Plot plot) { + Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String priority = (String) entry.getKey(); if (plotInChart(plot.getPlotID(), priority)) { @@ -446,15 +408,17 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return getPlotConditionPane(ChartTypeManager.CHART_PRIORITY, plot); } - + private ConditionAttributesPane getPlotConditionPane(String priority, Plot plot) { + return chartTypeInterfaces.get(priority).get(plot.getPlotID()).getPlotConditionPane(plot); } - - + + public BasicBeanPane getPlotSeriesPane(ChartStylePane parent, Plot plot) { + Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String priority = (String) entry.getKey(); if (plotInChart(plot.getPlotID(), priority)) { @@ -463,11 +427,12 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } return getPlotSeriesPane(ChartTypeManager.CHART_PRIORITY, parent, plot); } - + private BasicBeanPane getPlotSeriesPane(String priority, ChartStylePane parent, Plot plot) { + return chartTypeInterfaces.get(priority).get(plot.getPlotID()).getPlotSeriesPane(parent, plot); } - + /** * 是否使用默认的界面,为了避免界面来回切换 * @@ -475,55 +440,60 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh * @return 是否使用默认的界面 */ public boolean isUseDefaultPane(String plotID) { + Iterator iterator = chartTypeInterfaces.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String priority = (String) entry.getKey(); if (chartTypeInterfaces.get(priority).containsKey(plotID)) { return isUseDefaultPane(priority, plotID); } } - + return true; } - + private boolean isUseDefaultPane(String priority, String plotID) { - - if (chartTypeInterfaces.containsKey(priority) && chartTypeInterfaces.get(priority).containsKey(plotID)) { - return chartTypeInterfaces.get(priority).get(plotID).isUseDefaultPane(); - } - - return true; + + return !(chartTypeInterfaces.containsKey(priority) && chartTypeInterfaces.get(priority).containsKey(plotID)) || chartTypeInterfaces.get(priority).get(plotID).isUseDefaultPane(); + } - - public void readXML(XMLableReader reader) { - readXML(reader, null, PluginSimplify.NULL); + + @Override + public void mount(PluginSingleInjection injection) { + + if (isIndependentChartUIProvider(injection)) { + String priority = injection.getAttribute("priority"); + String plotID = injection.getAttribute("plotID"); + IndependentChartUIProvider instance = (IndependentChartUIProvider) injection.getObject(); + addChartTypeInterface(instance, priority, plotID); + } } - + + @Override - public void readXML(XMLableReader reader, List extraChartDesignInterfaceList, PluginSimplify simplify) { - if (reader.isChildNode()) { - String tagName = reader.getTagName(); - if (extraChartDesignInterfaceList != null) { - extraChartDesignInterfaceList.add(tagName); - } - if (IndependentChartUIProvider.XML_TAG.equals(tagName)) { - addChartInterface(reader.getAttrAsString("class", ""), reader.getAttrAsString("priority", ChartTypeManager.CHART_PRIORITY),reader.getAttrAsString("plotID", ""), simplify); - } + public void demount(PluginSingleInjection injection) { + + if (isIndependentChartUIProvider(injection)) { + String priority = injection.getAttribute("priority"); + String plotID = injection.getAttribute("plotID"); + removeChartTypeInterface(priority, plotID); } } - - /** - * 文件名 - * - * @return 文件名 - */ - public String fileName() { - return "chart.xml"; + + private void removeChartTypeInterface(String priority, String plotID) { + + if (chartTypeInterfaces != null) { + if (chartTypeInterfaces.containsKey(priority)) { + Map chartUIList = chartTypeInterfaces.get(priority); + chartUIList.remove(plotID); + } + } } - - @Override - public void writeXML(XMLPrintWriter writer) { - + + + private boolean isIndependentChartUIProvider(PluginSingleInjection injection) { + + return !(injection == null || injection.getObject() == null) && IndependentChartUIProvider.XML_TAG.equals(injection.getName()) && injection.getObject() instanceof IndependentChartUIProvider; } } \ No newline at end of file