From aedfbf6394b792f90cd8f365cde3bc293b513b0d Mon Sep 17 00:00:00 2001 From: richie Date: Mon, 6 Aug 2018 20:03:17 +0800 Subject: [PATCH] =?UTF-8?q?CORE-116=20=E6=96=B0=E6=8E=A7=E4=BB=B6=E7=BB=93?= =?UTF-8?q?=E6=9E=84+=E8=80=81=E7=9A=84=E5=8F=8D=E5=B0=84=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/XCreatorUtils.java | 214 +++++++++++------- .../FormWidgetDefinePaneFactoryBase.java | 78 +++++-- 2 files changed, 191 insertions(+), 101 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java index 3d289a009..dc7e48773 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java @@ -3,25 +3,70 @@ */ package com.fr.design.designer.creator; -import com.fr.base.FRContext; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.designer.creator.cardlayout.*; +import com.fr.design.designer.creator.cardlayout.XCardAddButton; +import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; +import com.fr.design.designer.creator.cardlayout.XWCardLayout; +import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; +import com.fr.design.designer.creator.cardlayout.XWCardTagLayout; +import com.fr.design.designer.creator.cardlayout.XWCardTitleLayout; +import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.fun.FormWidgetOptionProvider; import com.fr.design.fun.ParameterWidgetOptionProvider; import com.fr.design.module.DesignModuleFactory; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.parameter.FormSubmitButton; import com.fr.form.ui.Button; -import com.fr.form.ui.*; +import com.fr.form.ui.CardAddButton; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.CheckBox; +import com.fr.form.ui.CheckBoxGroup; +import com.fr.form.ui.ComboBox; +import com.fr.form.ui.ComboCheckBox; +import com.fr.form.ui.DataTable; +import com.fr.form.ui.DateEditor; +import com.fr.form.ui.EditorHolder; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.ErrorMarker; +import com.fr.form.ui.FileEditor; +import com.fr.form.ui.FreeButton; +import com.fr.form.ui.IframeEditor; import com.fr.form.ui.Label; +import com.fr.form.ui.ListEditor; +import com.fr.form.ui.MultiFileEditor; +import com.fr.form.ui.NameWidget; +import com.fr.form.ui.NumberEditor; +import com.fr.form.ui.Password; +import com.fr.form.ui.Radio; +import com.fr.form.ui.RadioGroup; +import com.fr.form.ui.Table; +import com.fr.form.ui.TableTree; import com.fr.form.ui.TextArea; -import com.fr.form.ui.container.*; +import com.fr.form.ui.TextEditor; +import com.fr.form.ui.TreeComboBoxEditor; +import com.fr.form.ui.TreeEditor; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteBodyLayout; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WBorderLayout; +import com.fr.form.ui.container.WCardLayout; +import com.fr.form.ui.container.WFitLayout; +import com.fr.form.ui.container.WGridLayout; +import com.fr.form.ui.container.WHorizontalBoxLayout; +import com.fr.form.ui.container.WHorizontalSplitLayout; +import com.fr.form.ui.container.WParameterLayout; +import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.container.WTitleLayout; +import com.fr.form.ui.container.WVerticalBoxLayout; +import com.fr.form.ui.container.WVerticalSplitLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; +import com.fr.invoke.Reflect; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.manage.PluginFilter; @@ -31,7 +76,6 @@ import com.fr.stable.StringUtils; import javax.swing.*; import java.awt.*; -import java.lang.reflect.Constructor; /** * XCreator的相关处理 @@ -40,47 +84,46 @@ import java.lang.reflect.Constructor; * @since 6.5.3 */ public class XCreatorUtils { - + public static java.util.Map, Class> objectMap = new java.util.HashMap, Class>(); - + private static java.util.Map, Class> extraObjectMap = new java.util.HashMap, Class>(); - + public static java.util.Map, Class> xLayoutMap = new java.util.HashMap, Class>(); - + static { init(); GeneralContext.listenPluginRunningChanged(new PluginEventListener() { - + @Override public void on(PluginEvent event) { - + reInitExtra(); } }, new PluginFilter() { - + @Override public boolean accept(PluginContext context) { - + return context.contain(PluginModule.ExtraDesign, ParameterWidgetOptionProvider.XML_TAG) - || context.contain(PluginModule.ExtraDesign, FormWidgetOptionProvider.XML_TAG); + || context.contain(PluginModule.ExtraDesign, FormWidgetOptionProvider.XML_TAG); } }); } - + private static void init() { - + putDefault(); putExtraEditor(); putDefaultLayouts(); reInitExtra(); } - + private static void putDefaultLayouts() { - + xLayoutMap.put(WAbsoluteLayout.class, XWAbsoluteLayout.class); xLayoutMap.put(WParameterLayout.class, XWParameterLayout.class); xLayoutMap.put(WAbsoluteBodyLayout.class, XWAbsoluteBodyLayout.class); - xLayoutMap.put(WAbsoluteLayout.class, XWAbsoluteLayout.class); xLayoutMap.put(WHorizontalBoxLayout.class, XWHorizontalBoxLayout.class); xLayoutMap.put(WBorderLayout.class, XWBorderLayout.class); xLayoutMap.put(WCardLayout.class, XWCardLayout.class); @@ -88,7 +131,7 @@ public class XCreatorUtils { xLayoutMap.put(WHorizontalSplitLayout.class, XWHorizontalSplitLayout.class); xLayoutMap.put(WVerticalSplitLayout.class, XWVerticalSplitLayout.class); xLayoutMap.put(WGridLayout.class, XWGridLayout.class); - + xLayoutMap.put(WFitLayout.class, XWFitLayout.class); xLayoutMap.put(WScaleLayout.class, XWScaleLayout.class); xLayoutMap.put(WTitleLayout.class, XWTitleLayout.class); @@ -97,9 +140,9 @@ public class XCreatorUtils { xLayoutMap.put(WTabFitLayout.class, XWTabFitLayout.class); xLayoutMap.put(WCardMainBorderLayout.class, XWCardMainBorderLayout.class); } - + private static void putDefault() { - + objectMap.put(TextEditor.class, XTextEditor.class); objectMap.put(TextArea.class, XTextArea.class); objectMap.put(NumberEditor.class, XNumberEditor.class); @@ -112,7 +155,6 @@ public class XCreatorUtils { objectMap.put(FileEditor.class, XFileUploader.class); objectMap.put(Table.class, XTableEditor.class); objectMap.put(IframeEditor.class, XIframeEditor.class); - objectMap.put(FreeButton.class, XButton.class); objectMap.put(FormSubmitButton.class, XButton.class); objectMap.put(Button.class, XButton.class); objectMap.put(Label.class, XLabel.class); @@ -132,23 +174,23 @@ public class XCreatorUtils { objectMap.put(CardAddButton.class, XCardAddButton.class); objectMap.put(ErrorMarker.class, ErrorCreator.class); } - + private static void reInitExtra() { - + extraObjectMap.clear(); extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getParameterWidgetOptionsMap()); extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getFormWidgetOptionsMap()); } - + private static void putExtraEditor() { if (DesignModuleFactory.getChartEditorClass() != null) { objectMap.put(DesignModuleFactory.getChartEditorClass(), XChartEditor.class); } } - + @SuppressWarnings("unchecked") private static Class searchXCreatorClass(Class clazz) { - + Class xClazz = (Class) objectMap.get(clazz); if (xClazz == null) { xClazz = (Class) extraObjectMap.get(clazz); @@ -160,7 +202,8 @@ public class XCreatorUtils { } /** - *创建creator + * 创建creator + * * @param widget 控件 * @return 返回控件的creator */ @@ -170,8 +213,9 @@ public class XCreatorUtils { /** * 带初始大小的Widget转化为XCreator当然XCreator也需要把大小赋值上 + * * @param widget 控件 - * @param d 大小 + * @param d 大小 * @return 返回控件的xcreator */ public static XCreator createXCreator(Widget widget, Dimension d) { @@ -184,23 +228,18 @@ public class XCreatorUtils { widgetClass = widget.getClass(); clazz = XCreatorUtils.searchXCreatorClass(widgetClass); if (clazz == null) { - FRContext.getLogger().error(widget + "'s" + " xcreator doesn't exsit!"); + FineLoggerFactory.getLogger().error(widget + "'s" + " xcreator doesn't exsit!"); clazz = NullCreator.class; } } XCreator creator = null; - Constructor[] constructors = clazz.getConstructors(); - for (Constructor c : constructors) { - try { - creator = (XCreator) c.newInstance(widget, d); - break; - } catch (Exception ignore) { - // richie:这里的错误可以忽略 -// FRContext.getLogger().error(ignore.getMessage()); - } + try { + creator = Reflect.on(clazz).create(widget, d).get(); + } catch (Exception ignore) { + } if (creator == null) { - FRContext.getLogger().error("Error to create xcreator!"); + FineLoggerFactory.getLogger().error("Error to create xcreator!"); creator = new NullCreator(widget, d); } creator.setXDescrption(widget);//设置描述信息 @@ -208,7 +247,8 @@ public class XCreatorUtils { } /** - *刷新所有名字控件 + * 刷新所有名字控件 + * * @param container 布局容器 */ public static void refreshAllNameWidgets(XLayoutContainer container) { @@ -228,52 +268,52 @@ public class XCreatorUtils { } /** - * 获取焦点组件所在的顶层容器,不包括目标本身 - * - * @param creator 组件 - * @return 返回父容器 - */ - public static XLayoutContainer getParentXLayoutContainer(XCreator creator) { - Container c = creator.getParent(); - while (c != null) { - XCreator crea = (XCreator) c; - if(crea.acceptType(XWCardTitleLayout.class)){ - return (XLayoutContainer) c.getParent(); + * 获取焦点组件所在的顶层容器,不包括目标本身 + * + * @param creator 组件 + * @return 返回父容器 + */ + public static XLayoutContainer getParentXLayoutContainer(XCreator creator) { + Container c = creator.getParent(); + while (c != null) { + XCreator crea = (XCreator) c; + if (crea.acceptType(XWCardTitleLayout.class)) { + return (XLayoutContainer) c.getParent(); } - if (crea.isDedicateContainer()) { - return (XLayoutContainer) c.getParent(); - } - if (c instanceof XLayoutContainer) { - return (XLayoutContainer) c; - } - c = c.getParent(); - } - - return null; - } - - /** - * 获取焦点组件所在的顶层容器,可能是目标本身 - * - * @param creator 组件 - * @return 返回顶层容器 - */ - public static XLayoutContainer getHotspotContainer(XCreator creator) { - if (creator.isDedicateContainer()) { - return (XLayoutContainer) creator.getParent(); - } - if (creator instanceof XLayoutContainer) { - return (XLayoutContainer) creator; - } - return getParentXLayoutContainer(creator); - } - - /** - * 返回组件的图标 - * - * @param creator 组件 - * @return 组件icon - */ + if (crea.isDedicateContainer()) { + return (XLayoutContainer) c.getParent(); + } + if (c instanceof XLayoutContainer) { + return (XLayoutContainer) c; + } + c = c.getParent(); + } + + return null; + } + + /** + * 获取焦点组件所在的顶层容器,可能是目标本身 + * + * @param creator 组件 + * @return 返回顶层容器 + */ + public static XLayoutContainer getHotspotContainer(XCreator creator) { + if (creator.isDedicateContainer()) { + return (XLayoutContainer) creator.getParent(); + } + if (creator instanceof XLayoutContainer) { + return (XLayoutContainer) creator; + } + return getParentXLayoutContainer(creator); + } + + /** + * 返回组件的图标 + * + * @param creator 组件 + * @return 组件icon + */ public static Icon getCreatorIcon(XCreator creator) { String iconPath = creator.getIconPath(); if (StringUtils.isEmpty(iconPath)) { diff --git a/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java b/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java index 0de1e2bda..8d43e08e2 100644 --- a/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java +++ b/designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java @@ -1,23 +1,75 @@ package com.fr.design.widget; -import com.fr.base.FRContext; import com.fr.design.designer.creator.XCreator; import com.fr.design.gui.core.WidgetConstants; import com.fr.design.mainframe.FormDesigner; -import com.fr.design.widget.ui.designer.WidgetDefinePane; import com.fr.design.parameter.RootDesignDefinePane; -import com.fr.design.widget.ui.designer.*; -import com.fr.design.widget.ui.designer.layout.*; +import com.fr.design.widget.ui.designer.CheckBoxDefinePane; +import com.fr.design.widget.ui.designer.CheckBoxGroupDefinePane; +import com.fr.design.widget.ui.designer.ComboBoxDefinePane; +import com.fr.design.widget.ui.designer.ComboCheckBoxDefinePane; +import com.fr.design.widget.ui.designer.DateEditorDefinePane; +import com.fr.design.widget.ui.designer.FreeButtonDefinePane; +import com.fr.design.widget.ui.designer.IframeEditorDefinePane; +import com.fr.design.widget.ui.designer.LabelDefinePane; +import com.fr.design.widget.ui.designer.MultiFileEditorPane; +import com.fr.design.widget.ui.designer.NoneWidgetDefinePane; +import com.fr.design.widget.ui.designer.NumberEditorDefinePane; +import com.fr.design.widget.ui.designer.PasswordDefinePane; +import com.fr.design.widget.ui.designer.RadioDefinePane; +import com.fr.design.widget.ui.designer.RadioGroupDefinePane; +import com.fr.design.widget.ui.designer.TextAreaDefinePane; +import com.fr.design.widget.ui.designer.TextFieldEditorDefinePane; +import com.fr.design.widget.ui.designer.TreeComboBoxEditorDefinePane; +import com.fr.design.widget.ui.designer.TreeEditorDefinePane; +import com.fr.design.widget.ui.designer.UserEditorDefinePane; +import com.fr.design.widget.ui.designer.WidgetDefinePane; +import com.fr.design.widget.ui.designer.layout.BorderStyleWidgetDefinePane; +import com.fr.design.widget.ui.designer.layout.ElementEditorDefinePane; +import com.fr.design.widget.ui.designer.layout.FRAbsoluteBodyLayoutDefinePane; +import com.fr.design.widget.ui.designer.layout.FRAbsoluteLayoutDefinePane; +import com.fr.design.widget.ui.designer.layout.FRFitLayoutDefinePane; +import com.fr.design.widget.ui.designer.layout.WCardLayoutDefinePane; +import com.fr.design.widget.ui.designer.layout.WCardMainLayoutDefinePane; +import com.fr.design.widget.ui.designer.layout.WCardTagLayoutDefinePane; +import com.fr.design.widget.ui.designer.layout.WTabFitLayoutDefinePane; import com.fr.form.parameter.FormSubmitButton; -import com.fr.form.ui.*; -import com.fr.form.ui.container.*; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Button; +import com.fr.form.ui.CheckBox; +import com.fr.form.ui.CheckBoxGroup; +import com.fr.form.ui.ComboBox; +import com.fr.form.ui.ComboCheckBox; +import com.fr.form.ui.DateEditor; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.FreeButton; +import com.fr.form.ui.IframeEditor; +import com.fr.form.ui.Label; +import com.fr.form.ui.MultiFileEditor; +import com.fr.form.ui.NameWidget; +import com.fr.form.ui.NoneWidget; +import com.fr.form.ui.NumberEditor; +import com.fr.form.ui.Password; +import com.fr.form.ui.Radio; +import com.fr.form.ui.RadioGroup; +import com.fr.form.ui.TextArea; +import com.fr.form.ui.TextEditor; +import com.fr.form.ui.TreeComboBoxEditor; +import com.fr.form.ui.TreeEditor; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteBodyLayout; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WCardLayout; +import com.fr.form.ui.container.WFitLayout; +import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.invoke.Reflect; +import com.fr.log.FineLoggerFactory; import com.fr.stable.bridge.BridgeMark; import com.fr.stable.bridge.StableFactory; -import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.Map; @@ -45,7 +97,6 @@ public class FormWidgetDefinePaneFactoryBase { defineMap.put(IframeEditor.class, new Appearance(IframeEditorDefinePane.class, WidgetConstants.IFRAME + "")); defineMap.put(TextEditor.class, new Appearance(TextFieldEditorDefinePane.class, WidgetConstants.TEXT + "")); defineMap.put(NameWidget.class, new Appearance(UserEditorDefinePane.class, "UserDefine")); - defineMap.put(ComboCheckBox.class, new Appearance(ComboCheckBoxDefinePane.class, WidgetConstants.COMBOCHECKBOX + "")); defineMap.put(ComboBox.class, new Appearance(ComboBoxDefinePane.class, WidgetConstants.COMBOBOX + "")); defineMap.put(RadioGroup.class, new Appearance(RadioGroupDefinePane.class, WidgetConstants.RADIOGROUP + "")); defineMap.put(CheckBoxGroup.class, new Appearance(CheckBoxGroupDefinePane.class, WidgetConstants.CHECKBOXGROUP + "")); @@ -78,24 +129,23 @@ public class FormWidgetDefinePaneFactoryBase { } public static RN createWidgetDefinePane(XCreator creator, FormDesigner designer, Widget widget, Operator operator) { - if(isExtraXWidget(widget)){ + if (isExtraXWidget(widget)) { WidgetDefinePane widgetDefinePane = new WidgetDefinePane(creator, designer); return new RN(widgetDefinePane, widgetDefinePane.title4PopupWindow()); } Appearance dn = defineMap.get(widget.getClass()); DataModify definePane = null; try { - Constructor con = dn.getDefineClass().getConstructor(XCreator.class); - definePane = (DataModify)con.newInstance(creator); + definePane = Reflect.on(dn.getDefineClass()).create(creator).get(); operator.did(definePane.dataUI(), dn.getDisplayName()); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return new RN(definePane, dn.getDisplayName()); } - public static boolean isExtraXWidget(Widget widget){ - return defineMap.get(widget.getClass()) == null; + public static boolean isExtraXWidget(Widget widget) { + return defineMap.get(widget.getClass()) == null; } public static class RN {