Files
VisualSapfor/src/_VisualDVM/Passes/All/UpdateBugReportField.java

135 lines
5.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package _VisualDVM.Passes.All;
import Common.Utils.Utils_;
import _VisualDVM.Global;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Passes.Server.ComponentsRepositoryPass;
import _VisualDVM.Repository.BugReport.BugReport;
import _VisualDVM.Repository.BugReport.BugReportState;
import _VisualDVM.Repository.EmailMessage;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.Repository.Server.ServerExchangeUnit_2021;
import _VisualDVM.Utils;
import javafx.util.Pair;
import java.io.Serializable;
import java.util.Date;
import java.util.Vector;
public class UpdateBugReportField extends ComponentsRepositoryPass<BugReport> {
Vector<String> fieldNames = new Vector<>();
Vector<Serializable> fieldValues = new Vector<>();
String old_description = "";
String old_comment = "";
protected boolean canUpdate() {
return Global.mainModule.getAccount().CheckAccessRights(target.sender_address, Log);
}
@Override
protected boolean canStart(Object... args) throws Exception {
if (!Global.componentsServer.db.bugReports.getUI().CheckCurrent(Log))
return false;
old_description = "";
old_comment = "";
//--
target = Global.componentsServer.db.bugReports.getUI().getCurrent();
fieldNames.clear();
fieldValues.clear();
for (int i = 0; i < args.length; ++i) {
if (i % 2 == 0) {
fieldNames.add((String) args[i]);
} else {
fieldValues.add((Serializable) args[i]);
}
}
if (fieldNames.size() != fieldValues.size()) {
Log.Writeln("Неверный формат аргументов");
return false;
}
if (target.state.equals(BugReportState.draft)) {
//если черновик, сразу меняем и не заморачиваемся, если нужно.
//тут проход все равно сугубо интерфейсный.
for (int i = 0; i < fieldNames.size(); ++i)
BugReport.class.getField(fieldNames.get(i)).set(target, fieldValues.get(i));
target.change_date = new Date().getTime();
server.db.Update(target);
server.db.bugReports.getUI().RedrawControl();
Global.mainModule.getUI().getMainWindow().getCallbackWindow().ShowCurrentBugReport();
} else
return canUpdate();
return false;
}
@Override
protected void ServerAction() throws Exception {
//1. прежде чем дополнять поле(комментарий или описание) следует скачать с сервера
//последнюю версию этого баг репорта.
//все это должно быть в рамках одной транзакции с сервером!
Command(new ServerExchangeUnit_2021(ServerCode.GetObjectCopyByPK, "", new Pair<>(BugReport.class, target.id)));
target.SynchronizeFields((BugReport) response.object);
for (int i = 0; i < fieldNames.size(); ++i) {
String fieldName = fieldNames.get(i);
switch (fieldName) {
case "comment":
old_comment = (String) BugReport.class.getField(fieldName).get(target);
break;
case "description":
old_description = (String) BugReport.class.getField(fieldName).get(target);
break;
}
BugReport.class.getField(fieldNames.get(i)).set(target, fieldValues.get(i));
}
target.change_date = new Date().getTime();
//3. отправляем на сервер
Command(new ServerExchangeUnit_2021(ServerCode.UpdateBugReport, "", target));
server.db.Update(target);
}
@Override
protected void showFinish() throws Exception {
Global.componentsServer.db.bugReports.getUI().RedrawControl();
Global.mainModule.getUI().getMainWindow().getCallbackWindow().ShowCurrentBugReport();
}
@Override
protected void performDone() throws Exception {
String message_header = target.getMailTitlePrefix();
/*
String message_text = "DUMMY TEXT: ";
Random random = new Random();
for (int k = 0; k < random.nextInt(200); ++k)
message_text += random.nextDouble();
*/
String message_text = String.join("\n",
target.description,
target.comment);
if (fieldNames.size() >= 1) {
switch (fieldNames.get(0)) {
case "sender_address":
case "sender_name":
case "targets":
case "percentage":
return;
case "description":
message_header += "описание изменено";
message_text = Utils.compareTexts(old_description, target.description);
break;
case "comment":
message_header += "комментарий изменён";
message_text = Utils.compareTexts(old_comment, target.comment);
break;
case "executor":
message_header += target.executor + " назначается исполнителем";
break;
case "state":
message_header += "состояние изменилось на " + Utils_.Brackets(target.state.getDescription());
break;
}
EmailMessage message = new EmailMessage(
message_header + " " + Utils_.Brackets(Global.mainModule.getAccount().name),
message_text
);
Global.mainModule.getPass(PassCode.Email).Do(
message,
server.db.subscribers.checkRecipients(target.getRecipients())
);
}
}
}