diff --git a/designer-base/src/main/java/com/fr/design/actions/server/ConnectionListAction.java b/designer-base/src/main/java/com/fr/design/actions/server/ConnectionListAction.java index 13050da33..2b4b13745 100644 --- a/designer-base/src/main/java/com/fr/design/actions/server/ConnectionListAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/server/ConnectionListAction.java @@ -1,26 +1,17 @@ package com.fr.design.actions.server; - -import com.fr.config.ServerPreferenceConfig; import com.fr.data.impl.Connection; import com.fr.design.actions.UpdateAction; -import com.fr.design.data.datapane.connect.ConnectionManagerPane; import com.fr.design.data.datapane.connect.ConnectionShowPane; import com.fr.design.data.datapane.connect.DatabaseConnectionPane; import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.NameInspector; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrame; import com.fr.design.menu.MenuKeySet; -import com.fr.design.dcm.UniversalDatabaseOpener; +import com.fr.design.os.impl.DatabaseDialogAction; import com.fr.file.ConnectionConfig; import com.fr.general.IOUtils; -import com.fr.stable.os.OperatingSystem; -import com.fr.transaction.CallBackAdaptor; -import com.fr.transaction.Configurations; -import com.fr.transaction.WorkerFacade; - +import com.fr.general.os.OSBasedAction; +import com.fr.general.os.OSSupportCenter; import javax.swing.*; import java.awt.event.ActionEvent; import java.util.Map; @@ -61,14 +52,16 @@ public class ConnectionListAction extends UpdateAction { * @param evt 事件 */ public void actionPerformed(ActionEvent evt) { - if (ServerPreferenceConfig.getInstance().isUseUniverseDBM() && !OperatingSystem.isLinux()) { + /* if (ServerPreferenceConfig.getInstance().isUseUniverseDBM() && !OperatingSystem.isLinux()) { UniversalDatabaseOpener.showUniverseDatabaseDialog(); } else { openDesignDatabaseManager(); - } + }*/ + OSBasedAction osBasedAction = OSSupportCenter.getAction(DatabaseDialogAction.class); + osBasedAction.execute(); } - private void openDesignDatabaseManager() { + /* private void openDesignDatabaseManager() { DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); final ConnectionConfig datasourceManager = ConnectionConfig.getInstance(); final ConnectionManagerPane databaseManagerPane = new ConnectionManagerPane() { @@ -109,7 +102,7 @@ public class ConnectionListAction extends UpdateAction { }); databaseListDialog.setVisible(true); } - +*/ /** * 更新datasourceManager diff --git a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java index 6739bbef2..17ab3bdb2 100644 --- a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java @@ -1,15 +1,11 @@ package com.fr.design.actions.server; -import com.fr.config.ServerPreferenceConfig; import com.fr.design.actions.UpdateAction; -import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.menu.MenuKeySet; -import com.fr.design.upm.UpmFinder; -import com.fr.design.utils.DesignUtils; +import com.fr.design.os.impl.PMDialogAction; import com.fr.general.IOUtils; -import com.fr.stable.os.Arch; -import com.fr.stable.os.OperatingSystem; - +import com.fr.general.os.OSBasedAction; +import com.fr.general.os.OSSupportCenter; import javax.swing.*; import java.awt.event.ActionEvent; @@ -29,15 +25,8 @@ public class PluginManagerAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { // 可以启用新版本的插件商店(使用JxBrowser作为容器) - if(Arch.getArch() == Arch.ARM){ - DesignUtils.visitEnvServerByParameters( PLUGIN_MANAGER_ROUTE,null,null); - return; - } - if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && !OperatingSystem.isLinux()) { - UpmFinder.showUPMDialog(); - } else { - WebViewDlgHelper.createPluginDialog(); - } + OSBasedAction osBasedAction = OSSupportCenter.getAction(PMDialogAction.class); + osBasedAction.execute(); } public static final MenuKeySet PLUGIN_MANAGER = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java index 74b79bb17..f091bccc0 100644 --- a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java +++ b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java @@ -3,8 +3,12 @@ package com.fr.design.gui.iprogressbar; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.UIDialog; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.os.impl.SupportOSImpl; +import com.fr.design.upm.UpmFinder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.FRFont; +import com.fr.general.os.OSBasedAction; +import com.fr.general.os.OSSupportCenter; import com.fr.stable.os.OperatingSystem; import javax.swing.JDialog; @@ -29,9 +33,12 @@ public class ProgressDialog extends UIDialog { setUndecorated(true); setSize(parent.getSize()); setLocationRelativeTo(null); - if(!OperatingSystem.isLinux()) { - setOpacity(0.5f); - } + OSSupportCenter.buildAction(new OSBasedAction() { + @Override + public void execute() { + setOpacity(0.5f); + } + }, SupportOSImpl.OPACITY); initComponent(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 6bd26479f..17cb23273 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -40,6 +40,7 @@ import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.MenuManager; import com.fr.design.menu.ShortCut; +import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.event.EventDispatcher; import com.fr.exception.DecryptTemplateException; @@ -48,6 +49,8 @@ import com.fr.file.FILEFactory; import com.fr.file.FileFILE; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; +import com.fr.general.os.OSBasedAction; +import com.fr.general.os.OSSupportCenter; import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; @@ -58,7 +61,6 @@ import com.fr.stable.OperatingSystem; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.image4j.codec.ico.ICODecoder; -import com.fr.stable.os.Arch; import com.fr.stable.project.ProjectConstants; import com.fr.start.OemHandler; import com.fr.workspace.WorkContext; @@ -84,6 +86,7 @@ import java.awt.Graphics; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; +import java.awt.Component; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; @@ -450,27 +453,36 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta return northEastPane; } - private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) { + private void refreshNorthEastPane(final JPanel northEastPane, final ToolBarMenuDock ad) { northEastPane.removeAll(); northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); northEastPane.add(LogMessageBar.getInstance()); TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING); if (processor != null) { - if(Arch.getArch() != Arch.ARM) { - processor.hold(northEastPane, LogMessageBar.getInstance(), ad.createBBSLoginPane()); - }else{ - //暂时不知道具体插件,先传null - processor.hold(northEastPane, LogMessageBar.getInstance(), null); - } + final Component[] bbsLoginPane = {null}; + OSSupportCenter.buildAction(new OSBasedAction() { + @Override + public void execute() { + bbsLoginPane[0] = ad.createBBSLoginPane(); + } + }, SupportOSImpl.USERINFOPANE); + processor.hold(northEastPane, LogMessageBar.getInstance(), bbsLoginPane[0]); } northEastPane.add(ad.createAlphaFinePane()); if (!DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) { ad.createAlphaFinePane().setVisible(false); } - if(Arch.getArch() != Arch.ARM) { - northEastPane.add(ad.createBBSLoginPane()); - } + /*if(Arch.getArch() != Arch.ARM) { + + }*/ + OSSupportCenter.buildAction(new OSBasedAction() { + @Override + public void execute() { + northEastPane.add(ad.createBBSLoginPane()); + } + }, SupportOSImpl.USERINFOPANE); + } public void initTitleIcon() { 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 43acd1f82..18b248ffd 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 @@ -54,6 +54,7 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; +import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.remote.action.RemoteDesignAuthManagerAction; import com.fr.design.update.actions.SoftwareUpdateAction; import com.fr.design.utils.ThemeUtils; @@ -61,6 +62,8 @@ import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.locale.LocaleAction; import com.fr.general.locale.LocaleCenter; +import com.fr.general.os.OSBasedAction; +import com.fr.general.os.OSSupportCenter; import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginRuntime; @@ -525,7 +528,7 @@ public abstract class ToolBarMenuDock { * @return 帮组菜单的子菜单 */ public ShortCut[] createHelpShortCuts() { - java.util.List shortCuts = new ArrayList(); + final java.util.List shortCuts = new ArrayList(); shortCuts.add(new WebDemoAction()); // 英文,把 video 和帮助文档放到 Help 下面 if (GeneralContext.getLocale().equals(Locale.US)) { @@ -541,8 +544,14 @@ public abstract class ToolBarMenuDock { } shortCuts.add(SeparatorDef.DEFAULT); - if (DesignerEnvManager.getEnvManager().isOpenDebug() && !OperatingSystem.isLinux()) { - shortCuts.add(new FineUIAction()); + if (DesignerEnvManager.getEnvManager().isOpenDebug()) { + OSSupportCenter.buildAction(new OSBasedAction() { + @Override + public void execute() { + shortCuts.add(new FineUIAction()); + } + }, SupportOSImpl.FINEUI); + } shortCuts.add(new AboutAction()); diff --git a/designer-base/src/main/java/com/fr/design/os/impl/DatabaseDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/DatabaseDialogAction.java new file mode 100644 index 000000000..aede9edd9 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/os/impl/DatabaseDialogAction.java @@ -0,0 +1,73 @@ +package com.fr.design.os.impl; + +import com.fr.config.ServerPreferenceConfig; +import com.fr.design.data.datapane.connect.ConnectionManagerPane; +import com.fr.design.dcm.UniversalDatabaseOpener; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.file.ConnectionConfig; +import com.fr.general.os.OSBasedAction; +import com.fr.stable.os.OperatingSystem; +import com.fr.transaction.CallBackAdaptor; +import com.fr.transaction.Configurations; +import com.fr.transaction.WorkerFacade; +import static com.fr.design.actions.server.ConnectionListAction.doWithDatasourceManager; + +//数据连接窗口 +public class DatabaseDialogAction implements OSBasedAction { + + @Override + public void execute() { + if (ServerPreferenceConfig.getInstance().isUseUniverseDBM() && !OperatingSystem.isLinux()) { + UniversalDatabaseOpener.showUniverseDatabaseDialog(); + } else { + openDesignDatabaseManager(); + } + } + + private void openDesignDatabaseManager() { + DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + final ConnectionConfig datasourceManager = ConnectionConfig.getInstance(); + final ConnectionManagerPane databaseManagerPane = new ConnectionManagerPane() { + public void complete() { + ConnectionConfig connectionConfig = datasourceManager.mirror(); + populate(connectionConfig); + } + + protected void renameConnection(String oldName, String newName) { + datasourceManager.renameConnection(oldName, newName); + } + }; + final BasicDialog databaseListDialog = databaseManagerPane.showLargeWindow(designerFrame, null); + databaseListDialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + if (!databaseManagerPane.isNamePermitted()) { + databaseListDialog.setDoOKSucceed(false); + return; + } + Configurations.modify(new WorkerFacade(ConnectionConfig.class) { + @Override + public void run() { + databaseManagerPane.update(datasourceManager); + } + }.addCallBack(new CallBackAdaptor() { + @Override + public boolean beforeCommit() { + //如果更新失败,则不关闭对话框,也不写xml文件,并且将对话框定位在请重命名的那个对象页面 + return doWithDatasourceManager(datasourceManager, databaseManagerPane, databaseListDialog); + } + + @Override + public void afterCommit() { + DesignerContext.getDesignerBean("databasename").refreshBeanElement(); + } + })); + } + }); + databaseListDialog.setVisible(true); + } + + +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java new file mode 100644 index 000000000..03a111c3d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java @@ -0,0 +1,26 @@ +package com.fr.design.os.impl; + +import com.fr.config.ServerPreferenceConfig; +import com.fr.design.extra.WebViewDlgHelper; +import com.fr.design.upm.UpmFinder; +import com.fr.design.utils.DesignUtils; +import com.fr.general.os.OSBasedAction; +import com.fr.stable.os.Arch; +import com.fr.stable.os.OperatingSystem; + +//插件管理窗口 +public class PMDialogAction implements OSBasedAction { + private static String PLUGIN_MANAGER_ROUTE = "#management/plugin"; + @Override + public void execute() { + if(Arch.getArch() == Arch.ARM){ + DesignUtils.visitEnvServerByParameters( PLUGIN_MANAGER_ROUTE,null,null); + return; + } + if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && !OperatingSystem.isLinux()) { + UpmFinder.showUPMDialog(); + } else { + WebViewDlgHelper.createPluginDialog(); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java new file mode 100644 index 000000000..f65ad71eb --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java @@ -0,0 +1,27 @@ +package com.fr.design.os.impl; + +import com.fr.general.os.SupportOS; +import com.fr.stable.os.Arch; +import com.fr.stable.os.OperatingSystem; + +public enum SupportOSImpl implements SupportOS { + //登录 + USERINFOPANE{ + public boolean support(){ + return Arch.getArch() != Arch.ARM; + } + }, + //透明度 + OPACITY{ + public boolean support(){ + return !OperatingSystem.isLinux(); + } + }, + //FineUI选项 + FINEUI{ + public boolean support(){ + return !OperatingSystem.isLinux(); + } + } + +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/UpdateDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/UpdateDialogAction.java new file mode 100644 index 000000000..ff437e858 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/os/impl/UpdateDialogAction.java @@ -0,0 +1,22 @@ +package com.fr.design.os.impl; + +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.update.ui.dialog.UpdateMainDialog; +import com.fr.design.utils.DesignUtils; +import com.fr.general.os.OSBasedAction; +import com.fr.stable.os.OperatingSystem; + +//更新升级窗口 +public class UpdateDialogAction implements OSBasedAction { + private static String UPDATE_ROUTE = "#management/backup"; + @Override + public void execute() { + if(!OperatingSystem.isLinux()) { + UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); + dialog.showDialog(); + }else{ + DesignUtils.visitEnvServerByParameters( UPDATE_ROUTE,null,null); + } + } + +} diff --git a/designer-base/src/main/java/com/fr/design/update/actions/SoftwareUpdateAction.java b/designer-base/src/main/java/com/fr/design/update/actions/SoftwareUpdateAction.java index 28eb2217d..9e21afefb 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/SoftwareUpdateAction.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/SoftwareUpdateAction.java @@ -2,11 +2,9 @@ package com.fr.design.update.actions; import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.update.ui.dialog.UpdateMainDialog; -import com.fr.design.utils.DesignUtils; -import com.fr.stable.os.OperatingSystem; - +import com.fr.design.os.impl.UpdateDialogAction; +import com.fr.general.os.OSBasedAction; +import com.fr.general.os.OSSupportCenter; import java.awt.event.ActionEvent; /** @@ -14,7 +12,6 @@ import java.awt.event.ActionEvent; */ public class SoftwareUpdateAction extends UpdateAction { - private static String UPDATE_ROUTE = "#management/backup"; public SoftwareUpdateAction() { setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_UpdateAndUpgrade")); setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/update/update_new.png")); @@ -29,12 +26,8 @@ public class SoftwareUpdateAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { //说之后更新升级要用jxbrowser,Linux下进平台 - if(!OperatingSystem.isLinux()) { - UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); - dialog.showDialog(); - }else{ - DesignUtils.visitEnvServerByParameters( UPDATE_ROUTE,null,null); - } + OSBasedAction osBasedAction = OSSupportCenter.getAction(UpdateDialogAction.class); + osBasedAction.execute(); } } diff --git a/designer-base/src/test/java/com/fr/design/OSBasedAction.java b/designer-base/src/test/java/com/fr/design/OSBasedAction.java new file mode 100644 index 000000000..4e31afab6 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/OSBasedAction.java @@ -0,0 +1,6 @@ +package com.fr.design; + +public interface OSBasedAction { + void execute(); +} + diff --git a/designer-base/src/test/java/com/fr/design/OSSupportCenter.java b/designer-base/src/test/java/com/fr/design/OSSupportCenter.java new file mode 100644 index 000000000..dc031c723 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/OSSupportCenter.java @@ -0,0 +1,25 @@ +package com.fr.design; + +import com.fr.invoke.Reflect; + +import java.util.HashMap; +import java.util.Map; + +public class OSSupportCenter { + + private static Map osBasedActionMap = new HashMap(); + public static void buildAction(OSBasedAction action, SupportOS supportOS){ + if(supportOS.support()){ + action.execute(); + } + } + + public static T getAction(Class clazz) { + OSBasedAction action = osBasedActionMap.get(clazz); + if(action == null){ + action = Reflect.on(clazz).create().get(); + osBasedActionMap.put(clazz,action); + } + return (T) action; + } +} diff --git a/designer-base/src/test/java/com/fr/design/SupportOS.java b/designer-base/src/test/java/com/fr/design/SupportOS.java new file mode 100644 index 000000000..a50688341 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/SupportOS.java @@ -0,0 +1,6 @@ +package com.fr.design; + +public interface SupportOS { + //判断是否支持 + boolean support(); +} \ No newline at end of file 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 ddb268ade..70dae1f02 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 @@ -54,11 +54,14 @@ import com.fr.design.mainframe.form.FormReportComponentComposite; import com.fr.design.mainframe.loghandler.DesignerLogAppender; import com.fr.design.mainframe.socketio.DesignerSocketIO; import com.fr.design.module.DesignModuleFactory; +import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; import com.fr.design.widget.ui.btn.FormSubmitButtonDetailPane; import com.fr.form.stable.ElementCaseThumbnailProcessor; +import com.fr.general.os.OSBasedAction; +import com.fr.general.os.OSSupportCenter; import com.fr.general.xml.GeneralXMLTools; import com.fr.js.EmailJavaScript; import com.fr.js.JavaScriptImpl; @@ -126,9 +129,13 @@ public class DesignerActivator extends Activator { designerModuleStart(); loadLogAppender(); DesignerSocketIO.update(); - if(Arch.getArch() != Arch.ARM) { - UserInfoPane.getInstance().updateBBSUserInfo(); - } + OSSupportCenter.buildAction(new OSBasedAction() { + @Override + public void execute() { + UserInfoPane.getInstance().updateBBSUserInfo(); + } + }, SupportOSImpl.USERINFOPANE); + storePassport(); AlphaFineHelper.switchConfig4Locale(); }