|
|
|
@ -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<String, CloseableContainedMap<String, IndependentChartUIProvider, LinkedHashMap>> chartTypeInterfaces = |
|
|
|
|
new LinkedHashMap<>(); |
|
|
|
|
|
|
|
|
|
new LinkedHashMap<String, CloseableContainedMap<String, IndependentChartUIProvider, 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<String, IndependentChartUIProvider, LinkedHashMap> chartUIList = |
|
|
|
|
new CloseableContainedMap<>(LinkedHashMap.class); |
|
|
|
|
new CloseableContainedMap<String, IndependentChartUIProvider, LinkedHashMap>(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<String, CloseableContainedMap<String, IndependentChartUIProvider, LinkedHashMap>> 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<String, IndependentChartUIProvider, LinkedHashMap> chartUIList |
|
|
|
|
= new CloseableContainedMap<>(LinkedHashMap.class); |
|
|
|
|
= new CloseableContainedMap<String, IndependentChartUIProvider, LinkedHashMap>(LinkedHashMap.class); |
|
|
|
|
chartUIList.put(plotID, provider); |
|
|
|
|
chartTypeInterfaces.put(priority, chartUIList); |
|
|
|
|
}else { |
|
|
|
|
} else { |
|
|
|
|
Map<String, IndependentChartUIProvider> 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<FurtherBasicBeanPane<? extends Chart>> paneList) { |
|
|
|
|
|
|
|
|
|
List<Integer> 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<String, IndependentChartUIProvider> 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<Integer> 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<Integer> getPriorityInOrder() { |
|
|
|
|
|
|
|
|
|
List<Integer> priorityList = new ArrayList<Integer>(); |
|
|
|
|
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<Plot> 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<Plot> 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<String> 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<String, IndependentChartUIProvider> 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; |
|
|
|
|
} |
|
|
|
|
} |