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

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

View File

@@ -37,17 +37,16 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
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 UnzipFolderPass unzip = new UnzipFolderPass();
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"))
/*
new Pair<>(
new Machine("k100", "k100.kiam.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",
"dvmh.keldysh.ru",
22, MachineType.Server),
new User("dvmuser1", "mprit_2011"))
));
//-
protected Thread backUp = new Thread(() -> {
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 projectName = args[0];
@@ -160,7 +164,7 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
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();
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();
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("Внутренняя ошибка. Не удалось распаковать проект");
}
private void GetComponentsVersionsInfo() throws Exception {
Print("Получить информацию о версиях компонент");
void GetComponentsVersionsInfo() throws Exception {
Vector<String> types = (Vector<String>) request.object;
Vector<ComponentVersionsInfoJson> res = new Vector<>();
for (String sType : types) {
@@ -199,30 +202,21 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
info.minimal_version = Utils_.removeCharacters(Utils.ReadAllText(minimalVersionFile), "\n", "\r");
res.add(info);
}
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = res;
}
private void AppendBugReportField() throws Exception {
void AppendBugReportField() throws Exception {
BugReportAdditionJson transport = (BugReportAdditionJson) request.object;
Print("Дополнить поле " + request.arg + " баг репорта " + transport.id);
if (db.bugReports.containsKey(transport.id)) {
BugReport actual = db.bugReports.get(transport.id);
Field field = BugReport.class.getField(transport.fieldName);
field.set(actual, field.get(actual) + "\n" + transport.textAddition);
actual.change_date = new Date().getTime();
db.Update(actual);
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = actual;
} else throw new RepositoryRefuseException("Баг репорт с ключом " + transport.id + " не существует.");
}
@Override
protected void startAdditionalThreads() {
backUp.start();
}
//-
private void UpdateComponent() throws Exception {
void PublishComponent() throws Exception {
ComponentPublicationInfoJson info = (ComponentPublicationInfoJson) request.object;
Print("Опубликовать компонент " + info.componentType);
File componentHome = Utils_.getFile(Utils_.getHomePath(), "Components", info.componentType.toString());
File componentFile = new File(componentHome, info.fileName);
File versionFile = new File(componentHome, "version.txt");
@@ -261,10 +255,8 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
bufferWriter_.write("Минимальная версия поднята до " + info.versionText + "\n");
bufferWriter_.close();
}
//-
response = new ServerExchangeUnit_2021(ServerCode.OK);
}
private void CheckSubscriberRole() throws Exception {
void CheckSubscriberRole() throws Exception {
Account account = (Account) request.object;
Subscriber subscriber = null;
if (db.subscribers.containsKey(account.email)) {
@@ -278,102 +270,55 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
}
response.object = subscriber; //возвращаем информацию о подписчике.
}
//--
@Override
protected void Session() throws Exception {
switch (code) {
//<editor-fold desc="Регистрация">
case CheckSubscriberRole:
Print("Проверить роль пользователя");
CheckSubscriberRole();
break;
//</editor-fold>
//<editor-fold desc="БАГ РЕПОРТЫ">
case ReceiveAllArchives:
Print("Отправить клиенту архив всех архивов баг репортов");
ZipFolderPass zip = new ZipFolderPass();
File archives = new File(Utils_.getDateName("Bugs"));
if (zip.Do("Bugs", archives.getAbsolutePath())) {
response.object = Utils_.fileToBytes(archives);
Print("Архив успешно запакован");
} else throw new RepositoryRefuseException("Не удалось запаковать архивы");
break;
case UpdateBugReport:
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 ReceiveAllArchives() throws Exception {
ZipFolderPass zip = new ZipFolderPass();
File archives = new File(Utils_.getDateName("Bugs"));
if (zip.Do("Bugs", archives.getAbsolutePath())) {
response.object = Utils_.fileToBytes(archives);
} else throw new RepositoryRefuseException("Не удалось запаковать архивы");
}
void GetComponentsBackUps() throws Exception {
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<>();
}
}
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 {
BugReport oldBugReport = (BugReport) request.object;
Print("Обновить баг репорт " + oldBugReport.id);
if (db.bugReports.containsKey(oldBugReport.id)) {
BugReport bugReport = db.bugReports.get(oldBugReport.id);
bugReport.SynchronizeFields(oldBugReport);
@@ -382,4 +327,53 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
} else
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);
}
}
}