автоматический поиск версии сапфора для установки на сервере.

This commit is contained in:
2024-05-21 17:36:03 +03:00
parent fb53a4133a
commit 0ae5327fb4
9 changed files with 65 additions and 319 deletions

13
.idea/workspace.xml generated
View File

@@ -7,16 +7,13 @@
</component>
<component name="ChangeListManager">
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/ShowSapforCompilationErr.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/ShowSapforCompilationOut.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/ShowTestingServerFile.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Repository/Component/Visualiser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Repository/Component/Visualiser.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/SapforTestingPlanner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/SapforTestingPlanner.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/ServerSapfor/ServerSapfor.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/ServerSapfor/ServerSapfor.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/ServerSapfor/ServerSapforState.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/ServerSapfor/ServerSapforState.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/ServerSapfor/ServerSapforsBar.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/ServerSapfor/ServerSapforsBar.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/properties" beforeDir="false" afterPath="$PROJECT_DIR$/properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/InstallServerSapfor.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/PassCode_2021.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/PassCode_2021.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/UI/Main/CallbackForm.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/UI/Main/CallbackForm.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />

View File

@@ -2,9 +2,9 @@
"Mode": "Normal",
"ServerAddress": "alex-freenas.ddns.net",
"ServerUserName": "testuser",
"ServerUserSHHPort": 2000,
"ServerUserSHHPort": 23,
"ComponentsServerPort": 7995,
"TestingServerPort": 7998,
"TestingServerPort": 7996,
"SocketTimeout": 5000,
"OldServer": false,
"SMTPHost": "smtp.mail.ru",

View File

@@ -76,7 +76,6 @@ public enum ServerCode {
DownloadDVMPackage,
DownloadDVMPackages,
DownloadSapforPackage,
InstallServerSapfor,
ReplaceTestCode,
ReplaceTestsCodes,
GetDVMPackagesJson,

View File

@@ -6,7 +6,6 @@ import Common.Utils.Utils;
import GlobalData.Account.Account;
import ProjectData.LanguageName;
import Repository.Component.Sapfor.Sapfor;
import Repository.EmailMessage;
import Repository.RepositoryRefuseException;
import Repository.RepositoryServer;
import Repository.Server.ServerCode;
@@ -26,6 +25,7 @@ import TestingSystem.SAPFOR.SapforConfigurationCommand.SapforConfigurationComman
import TestingSystem.SAPFOR.SapforPackage.SapforPackage;
import TestingSystem.SAPFOR.SapforTestingPlanner;
import TestingSystem.SAPFOR.ServerSapfor.ServerSapfor;
import TestingSystem.SAPFOR.ServerSapfor.ServerSapforState;
import Visual_DVM_2021.Passes.All.DownloadRepository;
import Visual_DVM_2021.Passes.All.ZipFolderPass;
import Visual_DVM_2021.Passes.PassCode_2021;
@@ -33,10 +33,13 @@ import Visual_DVM_2021.Passes.Pass_2021;
import javafx.util.Pair;
import org.apache.commons.io.FileUtils;
import javax.swing.Timer;
import javax.swing.*;
import java.io.File;
import java.nio.file.Paths;
import java.util.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Vector;
public class TestingServer extends RepositoryServer<TestsDatabase> {
public String name = "?";
public static MachineProcessSet machinesProcesses = new MachineProcessSet();
@@ -111,20 +114,7 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
@Override
protected void beforePublishAction(DBObject object) throws Exception {
if (object instanceof ServerSapfor) {
File versionFile = new File(Global.TempDirectory,"version.h");
if (versionFile.exists())
FileUtils.forceDelete(versionFile);
//1. Получить версию из репозитория.
Utils.startScript(Global.TempDirectory,
Global.TempDirectory,
"get_version",
"wget --user dvmhuser --password dvmh2013 -P " +
Utils.DQuotes(Global.TempDirectory.getAbsolutePath()) +
" http://svn.dvm-system.org/svn/dvmhrepo/sapfor/experts/Sapfor_2017/_src/Utils/version.h"
).waitFor();
if (!versionFile.exists())
throw new RepositoryRefuseException("Не удалось загрузить текущую версию SAPFOR из репозитория!");
int current_version = Sapfor.readVersionFromCode(versionFile);
int current_version = getSapforActualVersion();
int max_installed_version = db.getInstalledSapforMaxVersion();
if (max_installed_version == current_version)
throw new RepositoryRefuseException("Актуальная версия SAPFOR " + max_installed_version + " уже установлена");
@@ -230,10 +220,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
Print("Загрузить пакет SAPFOR");
DownloadSapforPackage();
break;
case InstallServerSapfor:
Print("Установить текущую версию SAPFOR для тестирования");
InstallServerSapfor();
break;
case ReplaceTestCode:
Print("Заменить код теста");
ReplaceTestCode();
@@ -355,11 +341,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = db.getFirstActiveSapforPackagesCopies();
}
//---
void GetSapforForCompilation() throws Exception {
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = db.getSapforCopyForCompilation();
}
void GetSapforMaxVersion() throws Exception {
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = db.getInstalledSapforMaxVersion();
@@ -455,122 +436,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
else
throw new RepositoryRefuseException("Не удалось заархивировать пакет тестирования SAPFOR с ключом " + sapforPackage_id);
}
private void InstallServerSapfor() throws Exception {
int max_version = Constants.Nan;
int current_version = Constants.Nan;
//--
for (ServerSapfor sapfor : db.serverSapfors.Data.values()) {
int version = -1;
try {
version = Integer.parseInt(sapfor.version);
} catch (Exception ex) {
ex.printStackTrace();
}
if (version > max_version) max_version = version;
}
System.out.println("max Sapfor version is " + max_version);
//--
File testingSystemHome = new File(Global.Home);
File repo = new File(testingSystemHome, "Repo");
File repoSapforHome = Paths.get(repo.getAbsolutePath(), Constants.SAPFOR_REPOSITORY_BIN).toFile();
File repo_bin = new File(repoSapforHome, "Sapfor_F");
File repo_out = new File(repoSapforHome, Constants.out_file);
File repo_err = new File(repoSapforHome, Constants.err_file);
//--
System.out.println("Синхронизация ветви DVM...");
Utils.startScript(repo, repo, "dvm_checkout",
"svn checkout " +
Constants.REPOSITORY_AUTHENTICATION +
" " + Constants.DVM_REPOSITORY + " 1>dvm_out.txt 2>dvm_err.txt\n").waitFor();
System.out.println("Синхронизация ветви SAPFOR...");
Utils.startScript(repo, repo, "spf_checkout",
"svn checkout " +
Constants.REPOSITORY_AUTHENTICATION +
" " + Constants.SAPFOR_REPOSITORY + " 1>spf_out.txt 2>spf_err.txt\n").waitFor();
//--
if (repo_bin.exists())
FileUtils.forceDelete(repo_bin);
//-
File versionFile = Paths.get(repo.getAbsolutePath(), "/sapfor/experts/Sapfor_2017/_src/Utils/version.h").toFile();
if (versionFile.exists()) {
List<String> data = FileUtils.readLines(versionFile);
for (String s : data) {
if (s.startsWith("#define VERSION_SPF ")) {
String[] version_data = s.split("\"");
if (version_data.length > 0) {
String version_s = version_data[1];
//-
try {
current_version = Integer.parseInt(version_s);
} catch (Exception ex) {
ex.printStackTrace();
}
//-
if (current_version == max_version) {
throw new RepositoryRefuseException("Версия SAPFOR " + max_version + " уже собрана!");
}
}
}
}
}
//--
System.out.println("Сборка SAPFOR...");
Utils.startScript(repoSapforHome, repoSapforHome, "build_sapfor",
"cmake ../ 1>" +
Constants.out_file +
" 2>" +
Constants.err_file +
"\nmake -j 14 1>>" +
Constants.out_file +
" 2>>" +
Constants.err_file +
"\n").waitFor();
//--
System.out.println("DONE");
File repoSapfor = new File(repoSapforHome, "Sapfor_F");
System.out.println("Result file is " + Utils.Brackets(repoSapfor.getAbsolutePath()));
//---
File sapforsDirectory = new File(testingSystemHome, "Sapfors");
File sapforHome = new File(sapforsDirectory, Utils.getDateName("sapfor"));
sapforHome.mkdir();
File sapforOut = new File(sapforHome, Constants.out_file);
File sapforErr = new File(sapforHome, Constants.err_file);
//--
System.out.println(repoSapfor.getAbsolutePath());
System.out.println(repo_out.getAbsolutePath());
System.out.println(repo_err.getAbsolutePath());
System.out.println("====================");
//--
if (repo_out.exists())
FileUtils.copyFile(repo_out, sapforOut);
if (repo_err.exists())
FileUtils.copyFile(repo_err, sapforErr);
//--
if (repoSapfor.exists()) {
System.out.println("assembly found!");
response = new ServerExchangeUnit_2021(ServerCode.OK);
//создать папку. Для того чтобы скопировать из репозитория.
File sapforBin = new File(sapforHome, "Sapfor_F");
FileUtils.copyFile(repo_bin, sapforBin);
sapforBin.setExecutable(true, false);
// //-->>>
ServerSapfor serverSapfor = new ServerSapfor();
serverSapfor.home_path = sapforHome.getAbsolutePath();
serverSapfor.call_command = sapforBin.getAbsolutePath();
serverSapfor.languageName = LanguageName.fortran;
serverSapfor.buildDate = new Date().getTime();
response.object = serverSapfor;
serverSapfor.version = String.valueOf(current_version);
//---
// EmailSapforAssembly(current_version, true);
//---
} else {
//---
EmailSapforAssembly(current_version, false);
//---
throw new RepositoryRefuseException("Бинарный файл SAPFOR не найден!");
}
}
private void ReplaceTestCode() throws Exception {
Test test = (Test) request.object;
response = new ServerExchangeUnit_2021(ServerCode.OK);
@@ -596,21 +461,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
} else db.Update(test); //обновить список файлов и размерность.
}
}
private void EmailSapforAssembly(int version, boolean done) throws Exception {
String version_s = (version == Constants.Nan) ? "?" : String.valueOf(version);
String status = done ? "Успешно" : "С ошибками";
//-
File out = Paths.get(Global.RepoDirectory.getAbsolutePath(), Constants.SAPFOR_REPOSITORY_BIN, Constants.out_file).toFile();
File err = Paths.get(Global.RepoDirectory.getAbsolutePath(), Constants.SAPFOR_REPOSITORY_BIN, Constants.err_file).toFile();
Vector<String> targets = new Vector<>(Arrays.asList(Global.admins_mails));
EmailMessage message = new EmailMessage(
"Выполнена сборка системы SAPFOR",
"Версия: " + version_s + "\n" + "Статус: " + status,
targets
);
//-
Email(message, out, err);
}
private void GetDVMPackagesJson() throws Exception {
Vector<Integer> packages_ids = (Vector<Integer>) request.object;
Vector<DVMPackage_json> jsons = new Vector<>();
@@ -705,5 +555,40 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
if (max_installed_version == current_version)
throw new RepositoryRefuseException("Версия " + max_installed_version + " уже установлена");
}
//---
int getSapforActualVersion() throws Exception {
File versionFile = new File(Global.TempDirectory, "version.h");
if (versionFile.exists())
FileUtils.forceDelete(versionFile);
//1. Получить версию из репозитория.
Utils.startScript(Global.TempDirectory,
Global.TempDirectory,
"get_version",
"wget --user dvmhuser --password dvmh2013 -P " +
Utils.DQuotes(Global.TempDirectory.getAbsolutePath()) +
" http://svn.dvm-system.org/svn/dvmhrepo/sapfor/experts/Sapfor_2017/_src/Utils/version.h"
).waitFor();
if (!versionFile.exists())
throw new RepositoryRefuseException("Не удалось загрузить текущую версию SAPFOR из репозитория!");
return Sapfor.readVersionFromCode(versionFile);
}
void GetSapforForCompilation() throws Exception {
//1. Проверить наличие заказов от пользователя
ServerSapfor serverSapfor = db.getSapforCopyForCompilation();
if (serverSapfor == null) {
//2 если нет. проверить есть ли свежие версии.
int max_version = db.getInstalledSapforMaxVersion();
int current_version = getSapforActualVersion();
if (current_version > max_version) {
serverSapfor = new ServerSapfor();
serverSapfor.sender_name = "server";
serverSapfor.sender_address = Constants.MailAddress;
serverSapfor.state = ServerSapforState.Queued;
db.Insert(serverSapfor);
}
}
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = serverSapfor;
}
}

View File

@@ -22,7 +22,7 @@ public class ServerSapforsDBTable extends iDBTable<ServerSapfor> {
}
@Override
public String[] getUIColumnNames() {
return new String[]{"версия", "дата сборки", "сборка"};
return new String[]{"версия","автор", "дата сборки", "сборка"};
}
@Override
public Object getFieldAt(ServerSapfor object, int columnIndex) {
@@ -30,8 +30,10 @@ public class ServerSapforsDBTable extends iDBTable<ServerSapfor> {
case 1:
return object.version;
case 2:
return object.getBuildDate();
return object.sender_name;
case 3:
return object.getBuildDate();
case 4:
return object.state;
}
return null;
@@ -42,8 +44,8 @@ public class ServerSapforsDBTable extends iDBTable<ServerSapfor> {
@Override
protected void AdditionalInitColumns() {
// columns.get(0).setVisible(false);
columns.get(2).setRenderer(TableRenderers.RendererDate);
columns.get(3).setRenderer(TableRenderers.RendererStatusEnum);
columns.get(3).setRenderer(TableRenderers.RendererDate);
columns.get(4).setRenderer(TableRenderers.RendererStatusEnum);
}
@Override
public void ShowCurrentObject() throws Exception {

View File

@@ -1,134 +0,0 @@
package Visual_DVM_2021.Passes.All;
import Repository.Server.ServerCode;
import Repository.Server.ServerExchangeUnit_2021;
import TestingSystem.SAPFOR.ServerSapfor.ServerSapfor;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Server.TestingSystemPass;
/*
public class InstallServerSapfor extends ConnectionPass<Object> {
boolean result;
ServerSapfor serverSapfor;
String version_text;
@Override
public String getIconPath() {
return "/icons/DownloadAll.png";
}
@Override
public String getButtonText() {
return "";
}
@Override
protected boolean needsAnimation() {
return true;
}
@Override
public void Connect() throws Exception {
machine = new Machine("Ubuntu", Global.properties.ServerAddress, Global.properties.ServerUserSHHPort, MachineType.Server);
user = new User(Global.properties.ServerUserName, "mprit_2011", "");
super.Connect();
}
@Override
protected boolean canStart(Object... args) {
result = false;
version_text = "";
serverSapfor = null;
return true;
}
@Override
protected void ServerAction() throws Exception {
RemoteFile testingSystemHome = new RemoteFile(user.connection.sftpChannel.pwd(), "_testing_system", true);
RemoteFile repo = new RemoteFile(testingSystemHome.full_name, "Repo", true);
RemoteFile repoSapforHome = new RemoteFile(repo.full_name + Constants.SAPFOR_REPOSITORY_BIN, true);
//--
ShowMessage1("Синхронизация ветви DVM...");
user.connection.performScript(repo,
"svn checkout " + Constants.REPOSITORY_AUTHENTICATION + " " + Constants.DVM_REPOSITORY + "\n"
);
ShowMessage1("Синхронизация ветви SAPFOR...");
user.connection.performScript(repo,
"svn checkout " + Constants.REPOSITORY_AUTHENTICATION + " " + Constants.SAPFOR_REPOSITORY + "\n"
);
ShowMessage1("Сборка SAPFOR...");
//-
RemoteFile repo_bin = new RemoteFile(repoSapforHome.full_name, "Sapfor_F");
if (user.connection.Exists(repo_bin))
user.connection.sftpChannel.rm(repo_bin.full_name);
//--
user.connection.performScript(repoSapforHome, "cmake ../", "make -j 4");
RemoteFile repoSapfor = new RemoteFile(repoSapforHome, "Sapfor_F");
result = user.connection.Exists(repoSapfor);
if (result) {
RemoteFile sapforsDirectory = new RemoteFile(testingSystemHome.full_name, "Sapfors", true);
//создать папку. Для того чтобы скопировать из репозитория.
RemoteFile sapforHome = new RemoteFile(sapforsDirectory.full_name, Utils.getDateName("sapfor"));
user.connection.MKDIR(sapforHome);
RemoteFile sapforBin = new RemoteFile(sapforHome, "Sapfor_F");
user.connection.copy(repo_bin, sapforBin);
//-->>>
serverSapfor = new ServerSapfor();
serverSapfor.home_path = sapforHome.full_name;
serverSapfor.call_command = sapforBin.full_name;
serverSapfor.languageName = LanguageName.fortran;
serverSapfor.buildDate = new Date().getTime();
///--->>
RemoteFile version =new RemoteFile(sapforHome, "version.txt");
user.connection.ShellCommand(serverSapfor.getVersionCommand()+" 1>"+Utils.DQuotes(version.full_name));
if (user.connection.Exists(version)){
String raw = user.connection.readFromFile(version);
String[] data = raw.split(" ");
if (data.length >= 4) serverSapfor.version = data[3].replace(",", "");
}
//---
}
}
}
*/
public class InstallServerSapfor extends TestingSystemPass {
boolean result;
ServerSapfor serverSapfor;
String version_text;
//--
@Override
protected boolean canStart(Object... args) {
result = false;
version_text = "";
serverSapfor = null;
return true;
}
//--
@Override
public String getIconPath() {
return "/icons/DownloadAll.png";
}
@Override
public String getButtonText() {
return "";
}
@Override
protected boolean needsAnimation() {
return true;
}
@Override
protected int getTimeout() {
return 0;
}
@Override
protected void ServerAction() throws Exception {
Command(new ServerExchangeUnit_2021(ServerCode.InstallServerSapfor));
if (response.object != null) {
result = true;
serverSapfor = (ServerSapfor) response.object;
}
}
@Override
protected boolean validate() {
return result;
}
@Override
protected void performDone() throws Exception {
passes.get(PassCode_2021.PublishServerSapfor).Do(serverSapfor);
}
}

View File

@@ -116,7 +116,7 @@ public class PublishComponent extends ComponentsRepositoryPass<Component> {
if (target.getComponentType().equals(ComponentType.Sapfor_F) && f.fields.cbAssemblyOnServer.isSelected()) {
UI.getMainWindow().FocusTesting();
UI.getMainWindow().getTestingWindow().FocusSapforTesting();
passes.get(PassCode_2021.InstallServerSapfor).Do();
passes.get(PassCode_2021.CompileServerSapfor).Do();
}
}
}

View File

@@ -7,7 +7,6 @@ public enum PassCode_2021 {
ShowParallelVariantsCoverage,
//-
DeleteServerSapfor,
InstallServerSapfor,
SaveProfile,
ApplyProfile,
EditProfile,
@@ -466,8 +465,6 @@ public enum PassCode_2021 {
return "Отобразить минимальное покрытие параллельных вариантов";
case DeleteServerSapfor:
return "Удалить версию SAPFOR";
case InstallServerSapfor:
return "Собрать актуальную версию SAPFOR";
case EditProfile:
return "Редактировать профиль";
case DeleteProfile:

View File

@@ -378,7 +378,7 @@ public class CallbackForm implements FormWithSplitters, CallbackWindow {
Pass_2021.passes.get(PassCode_2021.DeleteSubscriber).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.DownloadAllBugReportsArchives).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.DeleteSubscriberWorkspace).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.InstallServerSapfor).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.CompileServerSapfor).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.DeleteServerSapfor).setControlsVisible(false);
//
Pass_2021.passes.get(PassCode_2021.ShutdownComponentsServer).setControlsVisible(false);
@@ -398,7 +398,7 @@ public class CallbackForm implements FormWithSplitters, CallbackWindow {
Pass_2021.passes.get(PassCode_2021.DeleteSubscriber).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.DownloadAllBugReportsArchives).setControlsVisible(true);
Pass_2021.passes.get(PassCode_2021.DeleteSubscriberWorkspace).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.InstallServerSapfor).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.CompileServerSapfor).setControlsVisible(false);
Pass_2021.passes.get(PassCode_2021.DeleteServerSapfor).setControlsVisible(false);
//
Pass_2021.passes.get(PassCode_2021.ShutdownComponentsServer).setControlsVisible(false);
@@ -419,7 +419,7 @@ public class CallbackForm implements FormWithSplitters, CallbackWindow {
Pass_2021.passes.get(PassCode_2021.DeleteSubscriber).setControlsVisible(true);
Pass_2021.passes.get(PassCode_2021.DownloadAllBugReportsArchives).setControlsVisible(true);
Pass_2021.passes.get(PassCode_2021.DeleteSubscriberWorkspace).setControlsVisible(true);
Pass_2021.passes.get(PassCode_2021.InstallServerSapfor).setControlsVisible(true);
Pass_2021.passes.get(PassCode_2021.CompileServerSapfor).setControlsVisible(true);
Pass_2021.passes.get(PassCode_2021.DeleteServerSapfor).setControlsVisible(true);
//
Pass_2021.passes.get(PassCode_2021.ShutdownComponentsServer).setControlsVisible(true);