рефакторинг кода сервера компонент

This commit is contained in:
2025-02-13 22:25:54 +03:00
parent 0bdc870a72
commit 5e6719412d
4 changed files with 114 additions and 122 deletions

4
.idea/workspace.xml generated
View File

@@ -8,9 +8,9 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment=""> <list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/Passes/Server/RepositoryPass.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Passes/Server/RepositoryPass.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/_VisualDVM/Constants.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Constants.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/Repository/Server/ComponentsServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Repository/Server/ComponentsServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/Repository/Server/ServerCode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Repository/Server/ServerCode.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/_VisualDVM/Repository/Server/ServerCode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Repository/Server/ServerCode.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/Common/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/Common/TestingServer.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />

View File

@@ -94,6 +94,7 @@ public class Constants {
"bad termination" "bad termination"
}; };
public final static String separator = "----------------------------------"; public final static String separator = "----------------------------------";
public static final String server_dvm_drv = "/home/DVM/dvm_current/dvm_sys/bin/dvm_drv"; //зависимость от путей. в настройки?
//------------------------------------------------------- //-------------------------------------------------------
public static String[] resourses_names = new String[]{ public static String[] resourses_names = new String[]{
//-- //--

View File

@@ -37,17 +37,16 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Vector; import java.util.Vector;
public class ComponentsServer extends RepositoryServer<BugReportsDatabase> { public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
public static final String server_dvm_drv = "/home/DVM/dvm_current/dvm_sys/bin/dvm_drv";
public static ZipFolderPass zip = new ZipFolderPass(); public static ZipFolderPass zip = new ZipFolderPass();
public static UnzipFolderPass unzip = new UnzipFolderPass(); public static UnzipFolderPass unzip = new UnzipFolderPass();
public static ArchivesBackupPass backupSession = new ArchivesBackupPass(); public static ArchivesBackupPass backupSession = new ArchivesBackupPass();
//- //-
public static Vector<Pair<Machine, User>> storages = new Vector<>(Arrays.asList(new Pair<>(new Machine("titan", "dvmh.keldysh.ru", 22, MachineType.Server), new User("dvmuser1", "mprit_2011")) public static Vector<Pair<Machine, User>> storages = new Vector<>(
/* Arrays.asList(new Pair<>(new Machine("titan",
new Pair<>( "dvmh.keldysh.ru",
new Machine("k100", "k100.kiam.ru", 22, MachineType.Server), 22, MachineType.Server),
new User("dvmuser1", "mprit_2011")) new User("dvmuser1", "mprit_2011"))
*/)); ));
//- //-
protected Thread backUp = new Thread(() -> { protected Thread backUp = new Thread(() -> {
while (true) { while (true) {
@@ -140,7 +139,12 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
} }
} }
} }
private void DVMConvertProject() throws Exception { @Override
protected void startAdditionalThreads() {
backUp.start();
}
//-
void DVMConvertProject() throws Exception {
String[] args = request.arg.split("\n"); String[] args = request.arg.split("\n");
//- //-
String projectName = args[0]; String projectName = args[0];
@@ -160,7 +164,7 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
File program = Paths.get(project.getAbsolutePath(), fileName).toFile(); File program = Paths.get(project.getAbsolutePath(), fileName).toFile();
//-- //--
File convertedProgram = Paths.get(program.getParent(), Utils_.getFileNameWithoutExtension(program) + ".DVMH." + (projectLanguage.equals(LanguageName.fortran) ? "f" : "c")).toFile(); File convertedProgram = Paths.get(program.getParent(), Utils_.getFileNameWithoutExtension(program) + ".DVMH." + (projectLanguage.equals(LanguageName.fortran) ? "f" : "c")).toFile();
String command = Utils_.DQuotes(server_dvm_drv) + " " + projectLanguage.getDVMCompile() + "dv " + options + " " + Utils_.DQuotes(program.getName()); String command = Utils_.DQuotes(Constants.server_dvm_drv) + " " + projectLanguage.getDVMCompile() + "dv " + options + " " + Utils_.DQuotes(program.getName());
//-- //--
File fileWorkspace = program.getParentFile(); File fileWorkspace = program.getParentFile();
Process process = Utils.startScript(workspace, fileWorkspace, Utils_.getDateName("convert_script"), command); Process process = Utils.startScript(workspace, fileWorkspace, Utils_.getDateName("convert_script"), command);
@@ -186,8 +190,7 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
//-- //--
} else throw new RepositoryRefuseException("Внутренняя ошибка. Не удалось распаковать проект"); } else throw new RepositoryRefuseException("Внутренняя ошибка. Не удалось распаковать проект");
} }
private void GetComponentsVersionsInfo() throws Exception { void GetComponentsVersionsInfo() throws Exception {
Print("Получить информацию о версиях компонент");
Vector<String> types = (Vector<String>) request.object; Vector<String> types = (Vector<String>) request.object;
Vector<ComponentVersionsInfoJson> res = new Vector<>(); Vector<ComponentVersionsInfoJson> res = new Vector<>();
for (String sType : types) { for (String sType : types) {
@@ -199,30 +202,21 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
info.minimal_version = Utils_.removeCharacters(Utils.ReadAllText(minimalVersionFile), "\n", "\r"); info.minimal_version = Utils_.removeCharacters(Utils.ReadAllText(minimalVersionFile), "\n", "\r");
res.add(info); res.add(info);
} }
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = res; response.object = res;
} }
private void AppendBugReportField() throws Exception { void AppendBugReportField() throws Exception {
BugReportAdditionJson transport = (BugReportAdditionJson) request.object; BugReportAdditionJson transport = (BugReportAdditionJson) request.object;
Print("Дополнить поле " + request.arg + " баг репорта " + transport.id);
if (db.bugReports.containsKey(transport.id)) { if (db.bugReports.containsKey(transport.id)) {
BugReport actual = db.bugReports.get(transport.id); BugReport actual = db.bugReports.get(transport.id);
Field field = BugReport.class.getField(transport.fieldName); Field field = BugReport.class.getField(transport.fieldName);
field.set(actual, field.get(actual) + "\n" + transport.textAddition); field.set(actual, field.get(actual) + "\n" + transport.textAddition);
actual.change_date = new Date().getTime(); actual.change_date = new Date().getTime();
db.Update(actual); db.Update(actual);
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = actual; response.object = actual;
} else throw new RepositoryRefuseException("Баг репорт с ключом " + transport.id + " не существует."); } else throw new RepositoryRefuseException("Баг репорт с ключом " + transport.id + " не существует.");
} }
@Override void PublishComponent() throws Exception {
protected void startAdditionalThreads() {
backUp.start();
}
//-
private void UpdateComponent() throws Exception {
ComponentPublicationInfoJson info = (ComponentPublicationInfoJson) request.object; ComponentPublicationInfoJson info = (ComponentPublicationInfoJson) request.object;
Print("Опубликовать компонент " + info.componentType);
File componentHome = Utils_.getFile(Utils_.getHomePath(), "Components", info.componentType.toString()); File componentHome = Utils_.getFile(Utils_.getHomePath(), "Components", info.componentType.toString());
File componentFile = new File(componentHome, info.fileName); File componentFile = new File(componentHome, info.fileName);
File versionFile = new File(componentHome, "version.txt"); File versionFile = new File(componentHome, "version.txt");
@@ -261,10 +255,8 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
bufferWriter_.write("Минимальная версия поднята до " + info.versionText + "\n"); bufferWriter_.write("Минимальная версия поднята до " + info.versionText + "\n");
bufferWriter_.close(); bufferWriter_.close();
} }
//-
response = new ServerExchangeUnit_2021(ServerCode.OK);
} }
private void CheckSubscriberRole() throws Exception { void CheckSubscriberRole() throws Exception {
Account account = (Account) request.object; Account account = (Account) request.object;
Subscriber subscriber = null; Subscriber subscriber = null;
if (db.subscribers.containsKey(account.email)) { if (db.subscribers.containsKey(account.email)) {
@@ -278,102 +270,55 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
} }
response.object = subscriber; //возвращаем информацию о подписчике. response.object = subscriber; //возвращаем информацию о подписчике.
} }
//-- void ReceiveAllArchives() throws Exception {
@Override ZipFolderPass zip = new ZipFolderPass();
protected void Session() throws Exception { File archives = new File(Utils_.getDateName("Bugs"));
switch (code) { if (zip.Do("Bugs", archives.getAbsolutePath())) {
//<editor-fold desc="Регистрация"> response.object = Utils_.fileToBytes(archives);
case CheckSubscriberRole: } else throw new RepositoryRefuseException("Не удалось запаковать архивы");
Print("Проверить роль пользователя"); }
CheckSubscriberRole(); void GetComponentsBackUps() throws Exception {
break; File backupsDirectory = Paths.get(Utils_.getHomePath(), "Components", request.arg, "Backups").toFile();
//</editor-fold> //--
//<editor-fold desc="БАГ РЕПОРТЫ"> if (backupsDirectory.exists()) {
case ReceiveAllArchives: File[] files = backupsDirectory.listFiles(File::isFile);
Print("Отправить клиенту архив всех архивов баг репортов"); if (files != null) {
ZipFolderPass zip = new ZipFolderPass(); Vector<RemoteFile> res = new Vector<>();
File archives = new File(Utils_.getDateName("Bugs")); for (File file : files)
if (zip.Do("Bugs", archives.getAbsolutePath())) { res.add(new RemoteFile(file.getAbsolutePath(), false)); //тут всегда линух.
response.object = Utils_.fileToBytes(archives); response.object = res;
Print("Архив успешно запакован"); } else throw new RepositoryRefuseException("Не удалось получить список предыдущих версий");
} else throw new RepositoryRefuseException("Не удалось запаковать архивы"); } else {
break; //баги еще не создавались. штатная ситуация.
case UpdateBugReport: response.object = new Vector<>();
UpdateBugReport();
break;
//--
case AppendBugReportTextField:
AppendBugReportField();
break;
//--
case ReceiveBugReportsDatabase:
Print("Получить базу данных баг репортов");
response.object = Utils_.fileToBytes(db.getFile());
break;
case ReceiveBugReport:
Print("Скачать баг репорт по ключу " + request.arg);
File bugArchive = Utils_.getFile(Utils_.getHomePath(), "Bugs", request.arg);
response.object = Utils_.fileToBytes(bugArchive);
break;
case SendBugReport: //todo устарело
Print("Отправить баг репорт " + request.arg);
File bugArchive1 = Utils_.getFile(Utils_.getHomePath(), "Bugs", request.arg);
Utils_.bytesToFile((byte[]) request.object, bugArchive1);
break;
//</editor-fold>
case GetComponentsBackups:
Print("Получить список сохраненных версий компонента " + request.arg);
File backupsDirectory = Paths.get(Utils_.getHomePath(), "Components", request.arg, "Backups").toFile();
//--
if (backupsDirectory.exists()) {
File[] files = backupsDirectory.listFiles(File::isFile);
if (files != null) {
Vector<RemoteFile> res = new Vector<>();
for (File file : files)
res.add(new RemoteFile(file.getAbsolutePath(), false)); //тут всегда линух.
response.object = res;
} else throw new RepositoryRefuseException("Не удалось получить список предыдущих версий");
} else {
//баги еще не создавались. штатная ситуация.
response.object = new Vector<>();
}
break;
case UpdateComponent:
UpdateComponent();
break;
case ReceiveComponent:
String[] packed1 = request.arg.split("\n");
//тип/имя файла
File componentFile1 = Paths.get(Utils_.getHomePath(), "Components", packed1[0], packed1[1]).toFile();
Print("Получить компонент " + packed1[0]);
response.object = Utils_.fileToBytes(componentFile1);
break;
default:
throw new RepositoryRefuseException("Неподдерживаемый код: " + code);
case GetComponentsVersionsInfo:
GetComponentsVersionsInfo();
break;
case GetComponentChangesLog:
Print("Получить журнал изменений компонента " + request.arg);
response.object = Utils_.fileToBytes(Paths.get(Utils_.getHomePath(), "Components", request.arg, "changes.txt").toFile());
break;
case CheckURLRegistered:
Print("Проверить учетную запись на машине");
String[] data = request.arg.split("\n");
String email = data[0];
String machineURL = data[1];
String login = data[2];
response.object = db.workspaces.findWorkspace(email, machineURL, login);
break;
case DVMConvertProject:
Print("Сконвертировать проект в DVM код");
DVMConvertProject();
break;
} }
} }
void ReceiveBugReportsDatabase() throws Exception{
response.object = Utils_.fileToBytes(db.getFile());
}
void ReceiveBugReport() throws Exception {
File bugArchive = Utils_.getFile(Utils_.getHomePath(), "Bugs", request.arg);
response.object = Utils_.fileToBytes(bugArchive);
}
void ReceiveComponent() throws Exception {
String[] packed1 = request.arg.split("\n");
//тип/имя файла
File componentFile1 = Paths.get(Utils_.getHomePath(), "Components", packed1[0], packed1[1]).toFile();
Print("Получить компонент " + packed1[0]);
response.object = Utils_.fileToBytes(componentFile1);
}
void CheckURLRegistered() throws Exception {
String[] data = request.arg.split("\n");
String email = data[0];
String machineURL = data[1];
String login = data[2];
response.object = db.workspaces.findWorkspace(email, machineURL, login);
}
void GetComponentChangesLog() throws Exception {
response.object = Utils_.fileToBytes(Paths.get(Utils_.getHomePath(), "Components", request.arg, "changes.txt").toFile());
}
void UpdateBugReport() throws Exception { void UpdateBugReport() throws Exception {
BugReport oldBugReport = (BugReport) request.object; BugReport oldBugReport = (BugReport) request.object;
Print("Обновить баг репорт " + oldBugReport.id);
if (db.bugReports.containsKey(oldBugReport.id)) { if (db.bugReports.containsKey(oldBugReport.id)) {
BugReport bugReport = db.bugReports.get(oldBugReport.id); BugReport bugReport = db.bugReports.get(oldBugReport.id);
bugReport.SynchronizeFields(oldBugReport); bugReport.SynchronizeFields(oldBugReport);
@@ -382,4 +327,53 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
} else } else
throw new RepositoryRefuseException("Баг репорт с ключом " + oldBugReport.id + " не существует."); throw new RepositoryRefuseException("Баг репорт с ключом " + oldBugReport.id + " не существует.");
} }
//--
@Override
protected void Session() throws Exception {
switch (code) {
// ПРОХОДЫ НЕЗАВИСИМЫЕ ОТ ВЕРСИИ
case CheckSubscriberRole:
CheckSubscriberRole();
break;
case GetComponentsBackups:
GetComponentsBackUps();
break;
case UpdateComponent:
PublishComponent();
break;
case ReceiveComponent:
ReceiveComponent();
break;
case CheckURLRegistered:
CheckURLRegistered();
break;
case GetComponentsVersionsInfo:
GetComponentsVersionsInfo();
break;
case GetComponentChangesLog:
GetComponentChangesLog();
break;
//------------------------------------------------------------------------>>>>
case ReceiveAllArchives:
ReceiveAllArchives();
break;
case UpdateBugReport:
UpdateBugReport();
break;
case AppendBugReportTextField:
AppendBugReportField();
break;
case ReceiveBugReportsDatabase:
ReceiveBugReportsDatabase();
break;
case ReceiveBugReport:
ReceiveBugReport();
break;
case DVMConvertProject:
DVMConvertProject();
break;
default:
throw new RepositoryRefuseException("Неподдерживаемый код: " + code);
}
}
} }

View File

@@ -37,7 +37,6 @@ public enum ServerCode {
UpdateComponent, UpdateComponent,
ReceiveComponent, ReceiveComponent,
ReceiveBugReport, ReceiveBugReport,
SendBugReport,
GetComponentsVersionsInfo, GetComponentsVersionsInfo,
GetComponentChangesLog, GetComponentChangesLog,
//-- //--
@@ -81,8 +80,6 @@ public enum ServerCode {
return "Публикация компонента на сервере"; return "Публикация компонента на сервере";
case PublishObject: case PublishObject:
return "Публикация объекта на сервере"; return "Публикация объекта на сервере";
case SendBugReport:
return "Отправка отчета об ошибке на сервер";
case AppendBugReportTextField: case AppendBugReportTextField:
return "Дополнение описание или комментария отчета об ошибке на сервере"; return "Дополнение описание или комментария отчета об ошибке на сервере";
case ReceiveBugReportsDatabase: case ReceiveBugReportsDatabase: