рефакторинг публикации компонентов

This commit is contained in:
2025-02-03 23:04:40 +03:00
parent 458e250b5c
commit 26434b21ab
11 changed files with 192 additions and 85 deletions

View File

@@ -520,10 +520,10 @@ public class Utils_ {
}
//--
public static <T extends Properties> T SynschronizeProperties(File propertiesFile, Class<T> properties_class) {
T res= null;
T res = null;
try {
res= properties_class.newInstance();
if (propertiesFile.exists()){
res = properties_class.newInstance();
if (propertiesFile.exists()) {
//файл существует. нужно его ссчитать.
res = (T) Utils_.jsonFromFile(propertiesFile, properties_class);
}
@@ -535,8 +535,8 @@ public class Utils_ {
}
return res;
}
public static <T extends Properties> T ReadProperties(File propertiesFile, Class<T>properties_class){
T res= null;
public static <T extends Properties> T ReadProperties(File propertiesFile, Class<T> properties_class) {
T res = null;
try {
res = (T) Utils_.jsonFromFile(propertiesFile, properties_class);
res.setFile(propertiesFile);
@@ -546,4 +546,12 @@ public class Utils_ {
}
return res;
}
public static File getFile(String... paths) {
if (paths.length == 0)
return null;
File res = new File(paths[0]);
for (int i = 1; i < paths.length; ++i)
res = new File(res, paths[i]);
return res;
}
}

View File

@@ -15,6 +15,7 @@ public class AppendBugReportField extends ClientPass<ComponentsServer, BugReport
String oldValue;
String addition;
String newValue;
BugReport actual;
@Override
public String getIconPath() {
return "/icons/Append.png";
@@ -23,15 +24,13 @@ public class AppendBugReportField extends ClientPass<ComponentsServer, BugReport
public String getButtonText() {
return "";
}
protected boolean canUpdate() {
return target.canModify(Global.mainModule.getAccount(), Log);
}
@Override
protected ComponentsServer getServer() {
return Global.componentsServer;
}
@Override
protected boolean canStart(Object... args) throws Exception {
actual = null;
if (getServer().db.getTable(BugReport.class).getUI().CheckCurrent(Log)) {
target = getServer().db.getTable(BugReport.class).getUI().getCurrent();
if (!target.CheckNotDraft(Log))
@@ -45,13 +44,18 @@ public class AppendBugReportField extends ClientPass<ComponentsServer, BugReport
addition = Utils_.Brackets(Utils_.print_date(
new Date())) + " " + Global.mainModule.getAccount().name
+ " : " + addition;
return canUpdate();
if (canUpdate() && (SendRequest(ServerCode.AppendBugReportTextField, "", new BugReportAdditionJson(target, fieldName, addition)))) {
actual = (BugReport) request.target;
return true;
}
}
return false;
}
protected boolean canUpdate() {
return target.canModify(Global.mainModule.getAccount(), Log);
}
@Override
protected void body() throws Exception {
BugReport actual = (BugReport) getServer().ClientRequest(ServerCode.AppendBugReportTextField, "", new BugReportAdditionJson(target, fieldName, addition));
target.SynchronizeFields(actual);
Global.componentsServer.db.Update(target);
}

View File

@@ -8,7 +8,8 @@ import _VisualDVM.Repository.Server.ComponentsServer;
import _VisualDVM.Repository.Server.ServerCode;
import java.util.Vector;
public class GetComponentsActualVersions extends ClientPass<ComponentsServer,Object> {
public class GetComponentsActualVersions extends ClientPass<ComponentsServer, Object> {
Vector<ComponentVersionsInfoJson> versions;
@Override
public String getIconPath() {
return "/icons/Components.png";
@@ -18,12 +19,20 @@ public class GetComponentsActualVersions extends ClientPass<ComponentsServer,Obj
return Global.componentsServer;
}
@Override
protected void body() throws Exception {
protected boolean canStart(Object... args) throws Exception {
versions = null;
Vector<String> types = new Vector<>();
for (ComponentType key: Global.components.Data.keySet())
for (ComponentType key : Global.components.Data.keySet())
types.add(key.toString());
Vector<ComponentVersionsInfoJson> versions = (Vector<ComponentVersionsInfoJson>) getServer().ClientRequest(ServerCode.GetComponentsVersionsInfo, "", types);
for (ComponentVersionsInfoJson info: versions){
if (SendRequest(ServerCode.GetComponentsVersionsInfo, "", types)) {
versions = (Vector<ComponentVersionsInfoJson>) request.target;
return true;
}
return false;
}
@Override
protected void body() throws Exception {
for (ComponentVersionsInfoJson info : versions) {
Global.components.get(info.componentType).unpackActualVersion(info.actual_version);
Global.components.get(info.componentType).unpackMinimalVersion(info.minimal_version);
}

View File

@@ -3,17 +3,18 @@ import Common.Utils.Utils_;
import _VisualDVM.Global;
import _VisualDVM.GlobalData.Account.AccountRole;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Passes.Server.ComponentsRepositoryPass;
import _VisualDVM.Passes.Server.ClientPass;
import _VisualDVM.Repository.Component.Component;
import _VisualDVM.Repository.Component.ComponentType;
import _VisualDVM.Repository.Component.Json.ComponentPublicationInfoJson;
import _VisualDVM.Repository.Component.UI.PublishForm;
import _VisualDVM.Repository.EmailMessage;
import _VisualDVM.Repository.RepositoryServer;
import _VisualDVM.Repository.Server.ComponentsServer;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.Repository.Server.ServerExchangeUnit_2021;
import java.util.Date;
public class PublishComponent extends ComponentsRepositoryPass<Component> {
public class PublishComponent extends ClientPass<ComponentsServer, Component> {
String version_mail_header = "";
String version_text = "";
PublishForm f = new PublishForm();
@@ -22,8 +23,8 @@ public class PublishComponent extends ComponentsRepositoryPass<Component> {
return "/Common/icons/Publish.png";
}
@Override
public String getButtonText() {
return "";
protected ComponentsServer getServer() {
return Global.componentsServer;
}
@Override
protected boolean canStart(Object... args) throws Exception {
@@ -41,7 +42,6 @@ public class PublishComponent extends ComponentsRepositoryPass<Component> {
;
if (Global.components.getUI().CheckCurrent(Log)) {
target = Global.components.getUI().getCurrent();
target.needs_update_minimal_version = false;
f.fields.cbUpdateMinimalVersion.setSelected(false);
f.fields.lMinimalVersion.setText(String.valueOf(target.minimal_version));
f.fields.lPublishingVersion.setText(String.valueOf(target.version));
@@ -56,42 +56,27 @@ public class PublishComponent extends ComponentsRepositoryPass<Component> {
f.fields.cbAssemblyOnServer.setSelected(false);
}
if (f.ShowDialog(getDescription())) {
target.needs_update_minimal_version = f.fields.cbUpdateMinimalVersion.isSelected();
return true;
String change_description = (f.Result == null) ? "не указаны" : f.Result;
String change_record_header = String.join(" ",
Utils_.Brackets(Utils_.print_date(new Date())) + ":",
Global.mainModule.getAccount().name + Utils_.RBrackets(Global.mainModule.getAccount().email),
"публикует версию", Utils_.DQuotes(target.version)
);
String change_record = String.join("\n", change_record_header, "Изменения:",
change_description,
RepositoryServer.separator, ""
);
//--
ComponentPublicationInfoJson info=new ComponentPublicationInfoJson(target);
info.changeRecord = change_record;
info.needsUpdateMinimalVersion = f.fields.cbUpdateMinimalVersion.isSelected();
//--
return SendRequest(ServerCode.UpdateComponent, "",info);
}
}
return false;
}
@Override
protected void ServerAction() throws Exception {
String change_description = (f.Result == null) ? "не указаны" : f.Result;
String change_record_header = String.join(" ",
Utils_.Brackets(Utils_.print_date(new Date())) + ":",
Global.mainModule.getAccount().name + Utils_.RBrackets(Global.mainModule.getAccount().email),
"публикует версию", Utils_.DQuotes(target.version)
);
String change_record = String.join("\n", change_record_header, "Изменения:",
change_description,
RepositoryServer.separator, ""
);
String packed =
target.getComponentType().toString() + "\n" +
target.getFileName() + "\n" +
target.getVersionText() + "\n" +
change_record;
Command(new ServerExchangeUnit_2021(ServerCode.PublishComponent,
packed, Utils_.fileToBytes(target.getFile())
));
if (target.needs_update_minimal_version) {
packed = target.getComponentType().toString() + "\n" +
target.getVersionText() + "\n";
//--
Command(new ServerExchangeUnit_2021(ServerCode.UpdateComponentMinimalVersion,
packed, Utils_.fileToBytes(target.getFile())
));
}
}
@Override
protected void performDone() throws Exception {
target.actual_version = target.version;
target.CheckIfNeedsUpdateOrPublish();

View File

@@ -1,7 +1,13 @@
package _VisualDVM.Passes.Server;
import Common.Passes.Pass;
import _VisualDVM.Global;
import _VisualDVM.Repository.RepositoryServer;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.Repository.Server.ServerExchangeUnit_2021;
import java.io.Serializable;
public abstract class ClientPass <S extends RepositoryServer,T> extends Pass<T> {
protected RepositoryPass request;
@Override
protected boolean needsAnimation() {
return true;
@@ -11,4 +17,30 @@ public abstract class ClientPass <S extends RepositoryServer,T> extends Pass<T>
return "";
}
protected abstract S getServer();
protected boolean SendRequest(ServerCode code_in, String arg_in, Serializable object_in, int delay){
request = null;
request = new RepositoryPass(getServer()) {
@Override
public String getDescription() {
return code_in.getDescription();
}
@Override
protected int getTimeout() {
return delay;
}
@Override
protected void ServerAction() throws Exception {
Command(new ServerExchangeUnit_2021(code_in, arg_in,object_in));
target = server_response.object;
}
@Override
protected boolean validate() {
return Log.isEmpty();
}
};
return request.Do();
}
protected boolean SendRequest(ServerCode code_in,String arg_in, Serializable object_in){
return SendRequest(code_in,arg_in, object_in, Global.properties.SocketTimeout);
}
}

View File

@@ -21,7 +21,6 @@ public abstract class Component extends DBObject implements Loggable {
//--
public String code = "";
public String actual_code = "";
public boolean needs_update_minimal_version = false;
VFileChooser fileChooser = null; ///для ручной установки.
private ComponentState state;
public abstract ComponentType getComponentType();

View File

@@ -0,0 +1,27 @@
package _VisualDVM.Repository.Component.Json;
import Common.Utils.Utils_;
import _VisualDVM.Repository.Component.Component;
import _VisualDVM.Repository.Component.ComponentType;
import com.google.gson.annotations.Expose;
import java.io.Serializable;
public class ComponentPublicationInfoJson implements Serializable {
@Expose
public ComponentType componentType = ComponentType.Undefined;
@Expose
public String fileName = "";
@Expose
public byte[] packedFile = null;
@Expose
public String versionText = "";
@Expose
public String changeRecord = "";
@Expose
public boolean needsUpdateMinimalVersion = false;
public ComponentPublicationInfoJson(Component component) throws Exception{
componentType = component.getComponentType();
fileName = component.getFileName();
packedFile = Utils_.fileToBytes(component.getFile());
versionText = component.getVersionText();
}
}

View File

@@ -370,37 +370,12 @@ public abstract class RepositoryServer<D extends Database> {
public void Ping() {
response = new ServerExchangeUnit_2021(ServerCode.OK);
}
//---команды со стороны клиента.
public Object ClientRequest(ServerCode code_in, String arg_in, Serializable object_in, int delay) throws Exception {
RepositoryPass pass = new RepositoryPass(this) {
@Override
public String getDescription() {
return code_in.getDescription();
}
@Override
protected int getTimeout() {
return delay;
}
@Override
protected void ServerAction() throws Exception {
Command(new ServerExchangeUnit_2021(code_in, arg_in,object_in));
target = server_response.object;
}
@Override
protected boolean validate() {
return Log.isEmpty();
}
};
if (pass.Do())
return pass.target;
throw new PassException(Utils_.Brackets(new Date().toString()) + " Ошибка взаимодействия с сервером " + code_in);
}
public Object ClientRequest(ServerCode code_in,String arg_in, Serializable object_in)throws Exception {
return ClientRequest(code_in,arg_in,object_in, Global.properties.SocketTimeout);
}
//---
/*
public <T extends DBObject> T getActual(T object_in, Class<T> object_class)throws Exception{
return (T) ClientRequest(ServerCode.GetObjectCopyByPK, "",
new Pair<>(object_class, object_in.getPK()));
}
*/
}

View File

@@ -17,6 +17,7 @@ import _VisualDVM.Repository.BugReport.BugReport;
import _VisualDVM.Repository.BugReport.Json.BugReportAdditionJson;
import _VisualDVM.Repository.BugReportsDatabase;
import _VisualDVM.Repository.Component.ComponentType;
import _VisualDVM.Repository.Component.Json.ComponentPublicationInfoJson;
import _VisualDVM.Repository.Component.Json.ComponentVersionsInfoJson;
import _VisualDVM.Repository.EmailMessage;
import _VisualDVM.Repository.RepositoryServer;
@@ -238,7 +239,10 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
response.object = new Vector<>();
}
break;
case PublishComponent:
case UpdateComponent:
UpdateComponent();
break;
case PublishComponent: //todo устарело.
String[] packed = request.arg.split("\n");
String sComponentType = packed[0];
String componentFileName = packed[1];
@@ -280,7 +284,7 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
//-
response = new ServerExchangeUnit_2021(ServerCode.OK);
break;
case UpdateComponentMinimalVersion:
case UpdateComponentMinimalVersion: //todo устарело
String[] packed_ = request.arg.split("\n");
String sComponentType_ = packed_[0];
String sComponentMinimalVersion = packed_[1];
@@ -452,4 +456,51 @@ public class ComponentsServer extends RepositoryServer<BugReportsDatabase> {
protected void startAdditionalThreads() {
backUp.start();
}
//-
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 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);
//---->>
Utils_.CheckDirectory(backupsFolder);
Utils.keepNewFiles(backupsFolder, Global.componentsServerProperties.ComponentsBackUpsCount);
//-->>
File backupFile = new File(backupsFolder, info.componentType + "_" + versionText);
if (backupFile.exists())
Utils_.forceDeleteWithCheck(backupFile);
FileUtils.moveFile(componentFile, backupFile);
}
//1 распаковка компонента
Utils_.bytesToFile((byte[]) info.packedFile, componentFile);
//2 запись версии компонента
FileUtils.writeStringToFile(versionFile, info.versionText);
//3 запись в журнал компонента
File changesLog = new File(componentHome, "changes.txt");
FileWriter writer = new FileWriter(changesLog.getAbsolutePath(), true);
BufferedWriter bufferWriter = new BufferedWriter(writer);
bufferWriter.write(info.changeRecord);
bufferWriter.close();
//-
if (info.needsUpdateMinimalVersion){
Print("Поднять минимальную версию компонента " + info.componentType);
File minimal_versionFile = new File(componentHome, "minimal_version.txt");
FileUtils.writeStringToFile(minimal_versionFile, info.versionText);
//-
//3 запись в журнал компонента
FileWriter writer_ = new FileWriter(changesLog, true);
BufferedWriter bufferWriter_ = new BufferedWriter(writer_);
bufferWriter_.write("Минимальная версия поднята до " + info.versionText + "\n");
bufferWriter_.close();
}
//-
response = new ServerExchangeUnit_2021(ServerCode.OK);
}
}

View File

@@ -41,7 +41,8 @@ public enum ServerCode {
ReceiveBugReportsDatabase,
ReceiveTestsDatabase,
ReceiveTestsTasksDatabase,
PublishComponent,
PublishComponent, //todo удалить устарел
UpdateComponent,
UpdateComponentMinimalVersion, //возможно потом, слить воедино с публикацией?
ReceiveComponent,
ReceiveBugReport,
@@ -96,6 +97,10 @@ public enum ServerCode {
switch (this){
case GetComponentsVersionsInfo:
return "Получить версии компонент";
case UpdateComponent:
return "Опубликовать компонент";
case UpdateComponentMinimalVersion:
return "Поднять минимальную версию компонента";
default:
return this.toString();
}