промежуточный. рефакторинг объекта сервера.
This commit is contained in:
@@ -32,25 +32,22 @@ import java.io.FileWriter;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
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"))
|
||||
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"))
|
||||
*/
|
||||
)
|
||||
);
|
||||
*/));
|
||||
//-
|
||||
protected Thread backUp = new Thread(() -> {
|
||||
while (true) {
|
||||
@@ -82,17 +79,12 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
|
||||
Utils_.forceDeleteWithCheck(todayBackUp);
|
||||
//-
|
||||
for (Pair<Machine, User> cred : storages) {
|
||||
backupSession.Do(cred.getKey(), cred.getValue(),
|
||||
todayBackUpArchive
|
||||
);
|
||||
backupSession.Do(cred.getKey(), cred.getValue(), todayBackUpArchive);
|
||||
}
|
||||
//bonus backup
|
||||
//todo оформить как у планировщика, так как это нить, напрямую сервер трогать нельзя.
|
||||
if (rightNow.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
|
||||
EmailMessage message = new EmailMessage(
|
||||
"db backup",
|
||||
"копия баз данных журнала ошибок"
|
||||
);
|
||||
EmailMessage message = new EmailMessage("db backup", "копия баз данных журнала ошибок");
|
||||
message.addAttachement(db.getFile());
|
||||
for (String address : Constants.admins_mails) {
|
||||
Email(message, address);
|
||||
@@ -111,327 +103,89 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
|
||||
super(BugReportsDatabase.class);
|
||||
}
|
||||
@Override
|
||||
public String getServerFileName() {
|
||||
return "VisualSapfor.jar";
|
||||
}
|
||||
@Override
|
||||
public String getServerHomeName() {
|
||||
return "_sapfor_x64";
|
||||
}
|
||||
@Override
|
||||
public int getPort() {
|
||||
return Constants.ComponentsServerPort;
|
||||
}
|
||||
@Override
|
||||
protected void beforePublishAction(DBObject object) throws Exception {
|
||||
if (object instanceof BugReport){
|
||||
BugReport bugReport = (BugReport) object;
|
||||
if (bugReport.packed_archive!=null) {
|
||||
File bugArchive = Utils_.getFile(Utils_.getHomePath(), "Bugs", bugReport.id);
|
||||
Utils_.bytesToFile(bugReport.packed_archive, bugArchive);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void afterDeleteAction(DBObject object) throws Exception {
|
||||
if (object instanceof BugReport) {
|
||||
BugReport bugReport = (BugReport) object;
|
||||
if (!bugReport.project_version.isEmpty())
|
||||
Utils_.forceDeleteWithCheck(bugReport.getArchiveFile());
|
||||
if (bugReport.packed_archive != null) {
|
||||
File bugArchive = Utils_.getFile(Utils_.getHomePath(), "Bugs", bugReport.id);
|
||||
Utils_.bytesToFile(bugReport.packed_archive, bugArchive);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
protected void afterDeleteAction(DBObject object) throws Exception {
|
||||
if (object instanceof BugReport) {
|
||||
BugReport bugReport = (BugReport) object;
|
||||
if (!bugReport.project_version.isEmpty()) Utils_.forceDeleteWithCheck(bugReport.getArchiveFile());
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void StartAction() throws Exception {
|
||||
if (Global.componentsServerProperties.EmailAdminsOnStart) {
|
||||
EmailMessage message = new EmailMessage(
|
||||
"Сервер Sapfor запущен",
|
||||
new Date().toString()
|
||||
);
|
||||
EmailMessage message = new EmailMessage("Сервер Sapfor запущен", new Date().toString());
|
||||
for (String address : Constants.admins_mails) {
|
||||
Email(message, address);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
protected void Session() throws Exception {
|
||||
BugReport bugReport = null;
|
||||
Subscriber subscriber = null;
|
||||
Account account = null;
|
||||
switch (code) {
|
||||
//<editor-fold desc="Регистрация">
|
||||
case CheckSubscriberRole:
|
||||
Print("Проверить роль пользователя");
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
account = (Account) request.object;
|
||||
if (db.subscribers.containsKey(account.email)) {
|
||||
subscriber = db.subscribers.get(account.email);
|
||||
} else {
|
||||
subscriber = new Subscriber();
|
||||
subscriber.name = account.name;
|
||||
subscriber.address = account.email;
|
||||
subscriber.mailOn = 1;
|
||||
db.Insert(subscriber);
|
||||
}
|
||||
response.object = subscriber; //возвращаем информацию о подписчике.
|
||||
break;
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="БАГ РЕПОРТЫ">
|
||||
case ReceiveAllArchives:
|
||||
Print("Отправить клиенту архив всех архивов баг репортов");
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
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:
|
||||
//-
|
||||
BugReport oldBugReport = (BugReport) request.object;
|
||||
Print("Обновить баг репорт " + oldBugReport.id);
|
||||
if (db.bugReports.containsKey(oldBugReport.id)) {
|
||||
bugReport = db.bugReports.get(oldBugReport.id);
|
||||
bugReport.SynchronizeFields(oldBugReport);
|
||||
bugReport.change_date = new Date().getTime();
|
||||
db.Update(bugReport);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
} else
|
||||
throw new RepositoryRefuseException("Баг репорт с ключом " + oldBugReport.id + " не существует.");
|
||||
break;
|
||||
//todo вывести устарело
|
||||
case UpdateBugReportField:
|
||||
//-
|
||||
BugReport oldBugReport_ = (BugReport) request.object;
|
||||
Print("Обновить поле " + request.arg + " баг репорта " + oldBugReport_.id);
|
||||
if (db.bugReports.containsKey(oldBugReport_.id)) {
|
||||
bugReport = db.bugReports.get(oldBugReport_.id);
|
||||
Object newValue = BugReport.class.getField(request.arg).get(oldBugReport_);
|
||||
BugReport.class.getField(request.arg).set(bugReport, newValue);
|
||||
bugReport.change_date = oldBugReport_.change_date;
|
||||
db.Update(bugReport);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
} else
|
||||
throw new RepositoryRefuseException("Баг репорт с ключом " + oldBugReport_.id + " не существует.");
|
||||
break;
|
||||
//--
|
||||
case AppendBugReportTextField:
|
||||
AppendBugReportField();
|
||||
break;
|
||||
//--
|
||||
case ReceiveBugReportsDatabase:
|
||||
Print("Получить базу данных баг репортов");
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = Utils_.fileToBytes(db.getFile());
|
||||
break;
|
||||
case ReceiveBugReport:
|
||||
Print("Скачать баг репорт по ключу " + request.arg);
|
||||
File bugArchive = Utils_.getFile(Utils_.getHomePath(), "Bugs", request.arg);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
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);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
break;
|
||||
//</editor-fold>
|
||||
case GetComponentsBackups:
|
||||
Print("Получить список сохраненных версий компонента " + request.arg);
|
||||
File backupsDirectory = Paths.get(Utils_.getHomePath(), "Components", request.arg, "Backups").toFile();
|
||||
private void DVMConvertProject() throws Exception {
|
||||
String[] args = request.arg.split("\n");
|
||||
//-
|
||||
String projectName = args[0];
|
||||
LanguageName projectLanguage = LanguageName.valueOf(args[1]);
|
||||
String options = args[2];
|
||||
Vector<String> filesNames = new Vector<>(Arrays.asList(args).subList(3, args.length));
|
||||
//-
|
||||
File workspace = Utils.getTempFileName("convertation");
|
||||
FileUtils.forceMkdir(workspace);
|
||||
File archive = new File(workspace, projectName + ".zip");
|
||||
request.Unpack(archive);
|
||||
File project = new File(workspace, projectName);
|
||||
Vector<String> badFiles = new Vector<>();
|
||||
if (unzip.Do(archive.getAbsolutePath(), workspace.getAbsolutePath()) && project.exists()) {
|
||||
String output = "";
|
||||
for (String fileName : filesNames) {
|
||||
File program = Paths.get(project.getAbsolutePath(), fileName).toFile();
|
||||
//--
|
||||
if (backupsDirectory.exists()) {
|
||||
File[] files = backupsDirectory.listFiles(File::isFile);
|
||||
if (files != null) {
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
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 = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = new Vector<>();
|
||||
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());
|
||||
//--
|
||||
File fileWorkspace = program.getParentFile();
|
||||
Process process = Utils.startScript(workspace, fileWorkspace, Utils_.getDateName("convert_script"), command);
|
||||
process.waitFor();
|
||||
String convertationOut = Utils.readAllOutput(process);
|
||||
convertationOut = convertationOut.replace(program.getName(), fileName); //для учета пути.
|
||||
if (!convertationOut.isEmpty()) output += convertationOut + "\n";
|
||||
try {
|
||||
if (convertedProgram.exists()) {
|
||||
FileUtils.forceDelete(program);
|
||||
convertedProgram.renameTo(program);
|
||||
} else badFiles.add(program.getName());
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
break;
|
||||
case UpdateComponent:
|
||||
UpdateComponent();
|
||||
break;
|
||||
case PublishComponent: //todo устарело.
|
||||
String[] packed = request.arg.split("\n");
|
||||
String sComponentType = packed[0];
|
||||
String componentFileName = packed[1];
|
||||
String sComponentVersion = packed[2];
|
||||
String componentChangeRecord = request.arg.substring(
|
||||
sComponentType.length() +
|
||||
componentFileName.length() +
|
||||
sComponentVersion.length() +
|
||||
3
|
||||
);
|
||||
Print("Опубликовать компонент " + sComponentType);
|
||||
File componentFile = Paths.get(Utils_.getHomePath(), "Components", sComponentType, componentFileName).toFile();
|
||||
File versionFile = Paths.get(Utils_.getHomePath(), "Components", sComponentType, "version.txt").toFile();
|
||||
File backupsFolder = Paths.get(Utils_.getHomePath(), "Components", sComponentType, "Backups").toFile();
|
||||
//0 архивация старой версии, если она есть.
|
||||
if (componentFile.exists()) {
|
||||
String versionText = "";
|
||||
if (versionFile.exists())
|
||||
versionText = Utils.ReadAllText(versionFile);
|
||||
//---->>
|
||||
Utils_.CheckDirectory(backupsFolder);
|
||||
Utils.keepNewFiles(backupsFolder, Global.componentsServerProperties.ComponentsBackUpsCount);
|
||||
//-->>
|
||||
File backupFile = new File(backupsFolder, sComponentType + "_" + versionText);
|
||||
if (backupFile.exists())
|
||||
Utils_.forceDeleteWithCheck(backupFile);
|
||||
FileUtils.moveFile(componentFile, backupFile);
|
||||
}
|
||||
//1 распаковка компонента
|
||||
Utils_.bytesToFile((byte[]) request.object, componentFile);
|
||||
//2 запись версии компонента
|
||||
FileUtils.writeStringToFile(versionFile, sComponentVersion);
|
||||
//3 запись в журнал компонента
|
||||
File changesLog = Paths.get(Utils_.getHomePath(), "Components", sComponentType, "changes.txt").toFile();
|
||||
FileWriter writer = new FileWriter(changesLog.getAbsolutePath(), true);
|
||||
BufferedWriter bufferWriter = new BufferedWriter(writer);
|
||||
bufferWriter.write(componentChangeRecord);
|
||||
bufferWriter.close();
|
||||
//-
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
break;
|
||||
case UpdateComponentMinimalVersion: //todo устарело
|
||||
String[] packed_ = request.arg.split("\n");
|
||||
String sComponentType_ = packed_[0];
|
||||
String sComponentMinimalVersion = packed_[1];
|
||||
Print("Поднять минимальную версию компонента " + sComponentType_);
|
||||
File minimal_versionFile = Paths.get(Utils_.getHomePath(), "Components", sComponentType_, "minimal_version.txt").toFile();
|
||||
FileUtils.writeStringToFile(minimal_versionFile, sComponentMinimalVersion);
|
||||
//-
|
||||
//3 запись в журнал компонента
|
||||
File changesLog_ = Paths.get(Utils_.getHomePath(), "Components", sComponentType_, "changes.txt").toFile();
|
||||
FileWriter writer_ = new FileWriter(changesLog_.getAbsolutePath(), true);
|
||||
BufferedWriter bufferWriter_ = new BufferedWriter(writer_);
|
||||
bufferWriter_.write("Минимальная версия поднята до " + sComponentMinimalVersion + "\n");
|
||||
bufferWriter_.close();
|
||||
//-
|
||||
//-
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
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 = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = Utils_.fileToBytes(componentFile1);
|
||||
break;
|
||||
default:
|
||||
throw new RepositoryRefuseException("Неподдерживаемый код: " + code);
|
||||
case GetComponentsVersions:
|
||||
Print("Получить актуальные версии компонентов (NEW)");
|
||||
String[] types = request.arg.split("\n");
|
||||
LinkedHashMap<ComponentType, String> response_actual_versions_ = new LinkedHashMap<>();
|
||||
for (String sType : types) {
|
||||
ComponentType componentType = ComponentType.valueOf(sType);
|
||||
File vFile = Paths.get(Utils_.getHomePath(), "Components", sType, "version.txt").toFile();
|
||||
String v_string = Utils_.removeCharacters(
|
||||
Utils.ReadAllText(vFile),
|
||||
"\n", "\r"
|
||||
);
|
||||
response_actual_versions_.put(componentType, v_string);
|
||||
}
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = response_actual_versions_;
|
||||
break;
|
||||
case GetComponentsMinimalVersions:
|
||||
Print("Получить минимальные версии компонентов (NEW)");
|
||||
String[] types_ = request.arg.split("\n");
|
||||
LinkedHashMap<ComponentType, String> response_minimal_versions_ = new LinkedHashMap<>();
|
||||
for (String sType : types_) {
|
||||
ComponentType componentType = ComponentType.valueOf(sType);
|
||||
File vFile = Paths.get(Utils_.getHomePath(), "Components", sType, "minimal_version.txt").toFile();
|
||||
String mv_string = Utils_.removeCharacters(
|
||||
Utils.ReadAllText(vFile),
|
||||
"\n", "\r"
|
||||
);
|
||||
response_minimal_versions_.put(componentType, mv_string);
|
||||
}
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = response_minimal_versions_;
|
||||
break;
|
||||
case GetComponentsVersionsInfo:
|
||||
GetComponentsVersionsInfo();
|
||||
break;
|
||||
case GetComponentChangesLog:
|
||||
Print("Получить журнал изменений компонента " + request.arg);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
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 = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = db.workspaces.findWorkspace(email, machineURL, login);
|
||||
break;
|
||||
case DVMConvertProject:
|
||||
Print("Сконвертировать проект в DVM код");
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
String[] args = request.arg.split("\n");
|
||||
//-
|
||||
String projectName = args[0];
|
||||
LanguageName projectLanguage = LanguageName.valueOf(args[1]);
|
||||
String options = args[2];
|
||||
Vector<String> filesNames = new Vector<>(Arrays.asList(args).subList(3, args.length));
|
||||
//-
|
||||
File workspace = Utils.getTempFileName("convertation");
|
||||
FileUtils.forceMkdir(workspace);
|
||||
File archive = new File(workspace, projectName + ".zip");
|
||||
request.Unpack(archive);
|
||||
File project = new File(workspace, projectName);
|
||||
Vector<String> badFiles = new Vector<>();
|
||||
if (unzip.Do(archive.getAbsolutePath(), workspace.getAbsolutePath()) && project.exists()) {
|
||||
String output = "";
|
||||
for (String fileName : filesNames) {
|
||||
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());
|
||||
//--
|
||||
File fileWorkspace = program.getParentFile();
|
||||
Process process = Utils.startScript(workspace, fileWorkspace, Utils_.getDateName("convert_script"), command);
|
||||
process.waitFor();
|
||||
String convertationOut = Utils.readAllOutput(process);
|
||||
convertationOut = convertationOut.replace(program.getName(), fileName); //для учета пути.
|
||||
if (!convertationOut.isEmpty())
|
||||
output += convertationOut + "\n";
|
||||
try {
|
||||
if (convertedProgram.exists()) {
|
||||
FileUtils.forceDelete(program);
|
||||
convertedProgram.renameTo(program);
|
||||
} else badFiles.add(program.getName());
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
//--
|
||||
}
|
||||
response.arg = String.join("\n", badFiles) + "|" + output;
|
||||
File resultArchive = new File(workspace, projectName + "_result.zip");
|
||||
if (ComponentsServer.zip.Do(project.getAbsolutePath(), resultArchive.getAbsolutePath())) {
|
||||
response.object = Utils_.fileToBytes(resultArchive);
|
||||
} else
|
||||
throw new RepositoryRefuseException("Внутренняя ошибка. Не удалось запаковать версию");
|
||||
//--
|
||||
} else
|
||||
throw new RepositoryRefuseException("Внутренняя ошибка. Не удалось распаковать проект");
|
||||
break;
|
||||
}
|
||||
//--
|
||||
}
|
||||
response.arg = String.join("\n", badFiles) + "|" + output;
|
||||
File resultArchive = new File(workspace, projectName + "_result.zip");
|
||||
if (ComponentsServer.zip.Do(project.getAbsolutePath(), resultArchive.getAbsolutePath())) {
|
||||
response.object = Utils_.fileToBytes(resultArchive);
|
||||
} else throw new RepositoryRefuseException("Внутренняя ошибка. Не удалось запаковать версию");
|
||||
//--
|
||||
} else throw new RepositoryRefuseException("Внутренняя ошибка. Не удалось распаковать проект");
|
||||
}
|
||||
//---------------
|
||||
private void GetComponentsVersionsInfo() throws Exception {
|
||||
Print("Получить информацию о версиях компонент");
|
||||
Vector<String> types = (Vector<String>) request.object;
|
||||
@@ -459,8 +213,7 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
|
||||
db.Update(actual);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = actual;
|
||||
} else
|
||||
throw new RepositoryRefuseException("Баг репорт с ключом " + transport.id + " не существует.");
|
||||
} else throw new RepositoryRefuseException("Баг репорт с ключом " + transport.id + " не существует.");
|
||||
}
|
||||
@Override
|
||||
protected void startAdditionalThreads() {
|
||||
@@ -470,22 +223,20 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
|
||||
private void UpdateComponent() 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 componentHome = Utils_.getFile(Utils_.getHomePath(), "Components", info.componentType.toString());
|
||||
File componentFile = new File(componentHome, info.fileName);
|
||||
File versionFile = new File(componentHome, "version.txt");
|
||||
File backupsFolder = new File(componentHome, "Backups");
|
||||
//0 архивация старой версии, если она есть.
|
||||
if (componentFile.exists()) {
|
||||
String versionText = "";
|
||||
if (versionFile.exists())
|
||||
versionText = Utils.ReadAllText(versionFile);
|
||||
if (versionFile.exists()) versionText = Utils.ReadAllText(versionFile);
|
||||
//---->>
|
||||
Utils_.CheckDirectory(backupsFolder);
|
||||
Utils.keepNewFiles(backupsFolder, Global.componentsServerProperties.ComponentsBackUpsCount);
|
||||
//-->>
|
||||
File backupFile = new File(backupsFolder, info.componentType + "_" + versionText);
|
||||
if (backupFile.exists())
|
||||
Utils_.forceDeleteWithCheck(backupFile);
|
||||
if (backupFile.exists()) Utils_.forceDeleteWithCheck(backupFile);
|
||||
FileUtils.moveFile(componentFile, backupFile);
|
||||
}
|
||||
//1 распаковка компонента
|
||||
@@ -499,7 +250,7 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
|
||||
bufferWriter.write(info.changeRecord);
|
||||
bufferWriter.close();
|
||||
//-
|
||||
if (info.needsUpdateMinimalVersion){
|
||||
if (info.needsUpdateMinimalVersion) {
|
||||
Print("Поднять минимальную версию компонента " + info.componentType);
|
||||
File minimal_versionFile = new File(componentHome, "minimal_version.txt");
|
||||
FileUtils.writeStringToFile(minimal_versionFile, info.versionText);
|
||||
@@ -513,12 +264,122 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
|
||||
//-
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
}
|
||||
@Override
|
||||
public String getServerFileName() {
|
||||
return "VisualSapfor.jar";
|
||||
private void CheckSubscriberRole() throws Exception {
|
||||
Account account = (Account) request.object;
|
||||
Subscriber subscriber = null;
|
||||
if (db.subscribers.containsKey(account.email)) {
|
||||
subscriber = db.subscribers.get(account.email);
|
||||
} else {
|
||||
subscriber = new Subscriber();
|
||||
subscriber.name = account.name;
|
||||
subscriber.address = account.email;
|
||||
subscriber.mailOn = 1;
|
||||
db.Insert(subscriber);
|
||||
}
|
||||
response.object = subscriber; //возвращаем информацию о подписчике.
|
||||
}
|
||||
//--
|
||||
@Override
|
||||
public String getServerHomeName() {
|
||||
return "_sapfor_x64";
|
||||
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 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);
|
||||
bugReport.change_date = new Date().getTime();
|
||||
db.Update(bugReport);
|
||||
} else
|
||||
throw new RepositoryRefuseException("Баг репорт с ключом " + oldBugReport.id + " не существует.");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user