Browse Source

Pull request #17469: REPORT-153292 开发插件 本地服务端jar不一致同步接口

Merge in DESIGN/design from ~SHENGZU.XUE/design:feature/x to feature/x

* commit 'dbd16f680d1e5b0865a8979aee6f21f8f66316be':
  REPORT-153292 优化实现逻辑
  REPORT-153292 开发插件 本地服务端jar不一致同步接口
feature/x
Shengzu.Xue-薛胜祖 3 days ago
parent
commit
4eab4307c5
  1. 7
      designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java
  2. 44
      designer-base/src/main/java/com/fr/design/update/processor/AbstractSyncProcessor.java
  3. 146
      designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java
  4. 5
      designer-base/src/main/java/com/fr/env/CheckServiceDialog.java

7
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<Boolean, Void> {
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<Boolean, Void> {
if (!recoverForDesigner.backup()) {
return false;
}
boolean result = SyncExecutor.getInstance().execute(callBack, buildNo);
boolean result = SyncProcessorExecutor.getInstance().executeJarSync(callBack, buildNo);
if (!result) {
recoverForDesigner.recover();
}

44
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 abstract 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<PluginMarker> executePluginSync(List<PluginMarker> differentPlugins) {
return Collections.emptyList();
}
@Override
public Set<SyncType> supportedSyncType() {
//所有类型都不支持
return Collections.emptySet();
}
}

146
designer-base/src/main/java/com/fr/design/update/processor/SyncProcessorExecutor.java

@ -0,0 +1,146 @@
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)) {
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;
}
if (!processor.executeJarSync(callBack, fullBuildNo, processor.DESIGNER_JARS_PATH, processor.COMMON_JARS_PATH)) {
recoverForSync.recover();
return false;
}
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));
}
}
/**
* 执行插件同步
*/
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<Command> 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<PluginMarker> getPluginMaker(JSONArray differentPlugins) {
JSONObject differentPlugin;
String id;
String version;
List<PluginMarker> 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<PluginMarker> 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());
differentPluginsJsonArray.add(differentPlugin);
}
}
return differentPluginsJsonArray;
}
}

5
designer-base/src/main/java/com/fr/env/CheckServiceDialog.java vendored

@ -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

Loading…
Cancel
Save