From 1838b4fff53cc93cdd74cbf172ecef1fb187c4f4 Mon Sep 17 00:00:00 2001 From: "shengzu.xue" Date: Tue, 20 May 2025 17:02:35 +0800 Subject: [PATCH 1/2] =?UTF-8?q?REPORT-153292=20=E5=BC=80=E5=8F=91=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=20=E6=9C=AC=E5=9C=B0=E6=9C=8D=E5=8A=A1=E7=AB=AFjar?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E5=90=8C=E6=AD=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/actions/SyncFileProcess.java | 7 +- .../processor/AbstractSyncProcessor.java | 44 ++++++ .../processor/SyncProcessorExecutor.java | 142 ++++++++++++++++++ .../java/com/fr/env/CheckServiceDialog.java | 5 +- 4 files changed, 192 insertions(+), 6 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java create mode 100644 designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java diff --git a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java index 304cae1ba1..d49c33f3a3 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java @@ -1,13 +1,14 @@ package com.fr.design.update.actions; -import com.fr.decision.update.SyncExecutor; import com.fr.decision.update.info.UpdateCallBack; import com.fr.decision.update.info.UpdateProgressCallBack; import com.fr.design.i18n.Toolkit; +import com.fr.design.update.processor.SyncProcessorExecutor; import com.fr.design.versioncheck.VersionCheckUtils; import com.fr.env.SyncFailedPluginsDialog; import com.fr.json.JSONArray; import com.fr.log.FineLoggerFactory; + import java.util.concurrent.ExecutionException; import javax.swing.JProgressBar; import javax.swing.SwingWorker; @@ -28,7 +29,7 @@ public abstract class SyncFileProcess extends SwingWorker { UpdateCallBack callBack = new UpdateProgressCallBack(bar); bar.setValue(0); bar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); - JSONArray syncFailedPlugins = VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); + JSONArray syncFailedPlugins = SyncProcessorExecutor.getInstance().executePluginSync(VersionCheckUtils.checkLocalAndRemotePlugin()); if (syncFailedPlugins.size() > 0) { syncFailedPluginsDialog.showSyncFailedPluginsInfo(syncFailedPlugins); } @@ -36,7 +37,7 @@ public abstract class SyncFileProcess extends SwingWorker { if (!recoverForDesigner.backup()) { return false; } - boolean result = SyncExecutor.getInstance().execute(callBack, buildNo); + boolean result = SyncProcessorExecutor.getInstance().executeJarSync(callBack, buildNo); if (!result) { recoverForDesigner.recover(); } diff --git a/designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java b/designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java new file mode 100644 index 0000000000..13260b1ea6 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java @@ -0,0 +1,44 @@ +package com.fr.design.update.processor; + +import com.fr.decision.update.SyncProcessor; +import com.fr.decision.update.info.UpdateCallBack; +import com.fr.plugin.context.PluginMarker; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * @author shengzu.xue + * @since 11.0 + * Created on 2025/5/15 15:27 + * jar更新接口默认实现 + */ +public class AbstractSyncProcessor implements SyncProcessor { + + @Override + public int currentAPILevel() { + return SyncProcessor.CURRENT_LEVEL; + } + + @Override + public int layerIndex() { + return 0; + } + + @Override + public boolean executeJarSync (UpdateCallBack callBack, String fullBuildNo, String designerJarsPath, String commonJarsPath){ + return true; + } + + @Override + public List executePluginSync(List differentPlugins) { + return Collections.emptyList(); + } + + @Override + public Set supportedSyncType() { + //所有类型都不支持 + return Collections.emptySet(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java b/designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java new file mode 100644 index 0000000000..96ac4047d2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java @@ -0,0 +1,142 @@ + +package com.fr.design.update.processor; + +import com.fr.decision.update.SyncExecutor; +import com.fr.decision.update.SyncProcessor; +import com.fr.decision.update.backup.Recover; +import com.fr.decision.update.backup.RecoverForSync; +import com.fr.decision.update.command.Command; +import com.fr.decision.update.command.CommandGroup; +import com.fr.decision.update.data.UpdateConstants; +import com.fr.decision.update.impl.RemoveCommand; +import com.fr.decision.update.info.UpdateCallBack; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.versioncheck.VersionCheckUtils; +import com.fr.general.CommonIOUtils; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginMarker; +import com.fr.stable.ProjectLibrary; +import com.fr.stable.StableUtils; +import com.fr.stable.project.ProjectConstants; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * @author shengzu.xue + * @since 11.0 + * Created on 2025/5/15 + * 设计器服务器远程同步执行器 + */ +public class SyncProcessorExecutor { + + private static final String ID = "id"; + private static final String VERSION = "version"; + + // 单例实例 + private static final SyncProcessorExecutor INSTANCE = new SyncProcessorExecutor(); + + private SyncProcessorExecutor() { + } // 私有构造 + + public static SyncProcessorExecutor getInstance() { + return INSTANCE; + } + + /** + * 获取执行器实例 + */ + public SyncProcessor getExecutor() { + return ExtraDesignClassManager.getInstance().getSingle(SyncProcessor.XML_TAG, new AbstractSyncProcessor()); + } + + + /** + * 执行jar同步 + */ + public boolean executeJarSync(UpdateCallBack callBack, String fullBuildNo) { + SyncProcessor processor = getExecutor(); + if (processor.supportedSyncType().contains(SyncProcessor.SyncType.JAR_SYNC)) { + String dir = StableUtils.pathJoin(ProjectLibrary.getInstance().getLibHome(), ProjectConstants.ASSIST_NAME, UpdateConstants.ENV_LIB); + try { + // 备份jar + Recover recoverForSync = RecoverForSync.getInstance(); + if (fullBuildNo != null) { + if (recoverForSync.backup()) { + if (processor.executeJarSync(callBack, fullBuildNo, processor.DESIGNER_JARS_PATH, processor.COMMON_JARS_PATH)) { + CommandGroup commands = getCommandGroup(processor.DESIGNER_JARS_PATH, processor.COMMON_JARS_PATH); + return commands.execute(callBack); + } + // 同步失败,恢复 + recoverForSync.recover(); + } + } + return false; + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; + } finally { + CommonIOUtils.deleteFile(new File(dir)); + } + } else { + return SyncExecutor.getInstance().execute(callBack, fullBuildNo); + } + } + + + /** + * 执行插件同步 + */ + public JSONArray executePluginSync(JSONArray differentPlugins) { + SyncProcessor processor = getExecutor(); + if (processor.supportedSyncType().contains(SyncProcessor.SyncType.PLUGIN_SYNC)) { + return getPluginJsonArray(processor.executePluginSync(getPluginMaker(differentPlugins))); + } + return VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); + } + + private static @NotNull CommandGroup getCommandGroup(String designerJarsPath, String commonJarsPath) { + // 获取换jar的命令 + List commandList = new ArrayList<>(); + CommandGroup commands = new CommandGroup(commandList); + Command designCommand = new RemoveCommand(designerJarsPath, StableUtils.pathJoin(StableUtils.getInstallHome(), ProjectConstants.LIB_NAME)); + Command commonCommand = new RemoveCommand(commonJarsPath, StableUtils.pathJoin(ProjectLibrary.getInstance().getLibHome(), ProjectConstants.LIB_NAME)); + commands.addCommands(designCommand); + commands.addCommands(commonCommand); + return commands; + } + + private static List getPluginMaker(JSONArray differentPlugins) { + JSONObject differentPlugin; + String id; + String version; + List plugins = new ArrayList<>(); + if (differentPlugins != null) { + for (int i = 0; i < differentPlugins.size(); i++) { + differentPlugin = differentPlugins.getJSONObject(i); + id = differentPlugin.getString(ID); + version = differentPlugin.getString(VERSION); + plugins.add(PluginMarker.create(id, version)); + } + } + return plugins; + } + + private static JSONArray getPluginJsonArray(List differentPlugins) { + JSONObject differentPlugin; + JSONArray differentPluginsJsonArray = new JSONArray(); + if (differentPlugins != null) { + for (PluginMarker pluginMarker : differentPlugins) { + differentPlugin = new JSONObject(); + differentPlugin.put(ID, pluginMarker.getPluginID()); + differentPlugin.put(VERSION, pluginMarker.getVersion()); + } + } + return differentPluginsJsonArray; + } + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index 6931fa6636..69831fc2dd 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -12,13 +12,13 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.update.actions.SyncFileProcess; +import com.fr.design.update.processor.SyncProcessorExecutor; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.versioncheck.VersionCheckUtils; import com.fr.general.CloudCenter; import com.fr.general.CloudCenterConfig; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; -import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.http.HttpToolbox; @@ -55,7 +55,6 @@ import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.Locale; import javax.swing.ScrollPaneConstants; import javax.swing.SwingWorker; import javax.swing.UIManager; @@ -376,7 +375,7 @@ public class CheckServiceDialog extends JDialog implements ActionListener { progressBar.setVisible(true); progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); progressBar.setValue(0); - return VersionCheckUtils.syncPlugins(differentPlugins); + return SyncProcessorExecutor.getInstance().executePluginSync(differentPlugins); } @Override From dbd16f680d1e5b0865a8979aee6f21f8f66316be Mon Sep 17 00:00:00 2001 From: "shengzu.xue" Date: Wed, 21 May 2025 09:37:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?REPORT-153292=20=E4=BC=98=E5=8C=96=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processor/AbstractSyncProcessor.java | 2 +- .../processor/SyncProcessorExecutor.java | 48 ++++++++++--------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java b/designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java index 13260b1ea6..fac8665a79 100644 --- a/designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java +++ b/designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java @@ -14,7 +14,7 @@ import java.util.Set; * Created on 2025/5/15 15:27 * jar更新接口默认实现 */ -public class AbstractSyncProcessor implements SyncProcessor { +public abstract class AbstractSyncProcessor implements SyncProcessor { @Override public int currentAPILevel() { diff --git a/designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java b/designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java index 96ac4047d2..9329b5cd8f 100644 --- a/designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java +++ b/designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java @@ -51,7 +51,7 @@ public class SyncProcessorExecutor { * 获取执行器实例 */ public SyncProcessor getExecutor() { - return ExtraDesignClassManager.getInstance().getSingle(SyncProcessor.XML_TAG, new AbstractSyncProcessor()); + return ExtraDesignClassManager.getInstance().getSingle(SyncProcessor.XML_TAG, new AbstractSyncProcessor(){}); } @@ -60,30 +60,33 @@ public class SyncProcessorExecutor { */ public boolean executeJarSync(UpdateCallBack callBack, String fullBuildNo) { SyncProcessor processor = getExecutor(); - if (processor.supportedSyncType().contains(SyncProcessor.SyncType.JAR_SYNC)) { - String dir = StableUtils.pathJoin(ProjectLibrary.getInstance().getLibHome(), ProjectConstants.ASSIST_NAME, UpdateConstants.ENV_LIB); - try { - // 备份jar - Recover recoverForSync = RecoverForSync.getInstance(); - if (fullBuildNo != null) { - if (recoverForSync.backup()) { - if (processor.executeJarSync(callBack, fullBuildNo, processor.DESIGNER_JARS_PATH, processor.COMMON_JARS_PATH)) { - CommandGroup commands = getCommandGroup(processor.DESIGNER_JARS_PATH, processor.COMMON_JARS_PATH); - return commands.execute(callBack); - } - // 同步失败,恢复 - recoverForSync.recover(); - } - } + // 提前检查不支持的同步类型 + if (!processor.supportedSyncType().contains(SyncProcessor.SyncType.JAR_SYNC)) { + return SyncExecutor.getInstance().execute(callBack, fullBuildNo); + } + Recover recoverForSync = RecoverForSync.getInstance(); + // 备份失败直接返回 + if (!recoverForSync.backup()) { + return false; + } + String dir = StableUtils.pathJoin(ProjectLibrary.getInstance().getLibHome(), + ProjectConstants.ASSIST_NAME, UpdateConstants.ENV_LIB); + try { + if (fullBuildNo == null) { return false; - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + if (!processor.executeJarSync(callBack, fullBuildNo, processor.DESIGNER_JARS_PATH, processor.COMMON_JARS_PATH)) { + recoverForSync.recover(); return false; - } finally { - CommonIOUtils.deleteFile(new File(dir)); } - } else { - return SyncExecutor.getInstance().execute(callBack, fullBuildNo); + CommandGroup commands = getCommandGroup(processor.DESIGNER_JARS_PATH, processor.COMMON_JARS_PATH); + return commands.execute(callBack); + } catch (Exception e) { + recoverForSync.recover(); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; + } finally { + CommonIOUtils.deleteFile(new File(dir)); } } @@ -134,6 +137,7 @@ public class SyncProcessorExecutor { differentPlugin = new JSONObject(); differentPlugin.put(ID, pluginMarker.getPluginID()); differentPlugin.put(VERSION, pluginMarker.getVersion()); + differentPluginsJsonArray.add(differentPlugin); } } return differentPluginsJsonArray;