no message

This commit is contained in:
2024-10-14 12:14:01 +03:00
parent 3a29898d5f
commit 452c4c7268
466 changed files with 1255 additions and 1100 deletions

View File

@@ -0,0 +1,60 @@
package _VisualDVM.Passes.Sapfor;
import Common.Passes.Pass;
import Common.Utils.Utils_;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Current;
import _VisualDVM.Global;
import _VisualDVM.GlobalData.Settings.SettingName;
import _VisualDVM.TestingSystem.SAPFOR.Json.SapforVersion_json;
import _VisualDVM.TestingSystem.SAPFOR.SapforTask.SapforTask;
import java.io.File;
import java.nio.file.Paths;
public abstract class OpenSapforVersionPass extends Pass<SapforVersion_json> {
@Override
public String getIconPath() {
return "/icons/OpenProject.png";
}
@Override
public String getButtonText() {
return "";
}
public abstract Current getCurrentName();
@Override
protected boolean needsAnimation() {
return true;
}
@Override
protected boolean canStart(Object... args) throws Exception {
if (Global.mainModule.Check(Log, getCurrentName())) {
target = (SapforVersion_json) Global.mainModule.get(getCurrentName());
return true;
}
return false;
}
@Override
protected void body() throws Exception {
SapforTask task = target.task;
ShowMessage1("Построение дерева версий и создание баз данных...");
File rootHome = Paths.get((Global.mainModule.getDb()).settings.get(SettingName.Workspace).Value,
Utils_.getDateName(task.test_description)).toFile();
for (SapforVersion_json version_json : task.versions) {
ShowMessage2(version_json.version);
version_json.createProject(rootHome);
}
for (SapforVersion_json version_json : task.variants) {
ShowMessage2(version_json.version);
version_json.createProject(rootHome);
}
//-второй проход это запись логов и сообщений. у вариантов их быть не может.
ShowMessage1("Прочтение журналов и сообщений..."); //без версий нельзя, иначе лишние файлы захватит.
for (SapforVersion_json version_json : task.versions) {
ShowMessage2(version_json.version);
version_json.ReadMessages();
}
}
@Override
protected void performDone() throws Exception {
Global.mainModule.getPass(PassCode.OpenCurrentProject).Do(target.project.Home);
}
}

View File

@@ -0,0 +1,176 @@
package _VisualDVM.Passes.Sapfor;
import Common.Passes.PassState;
import Common.Utils.Utils_;
import Common.Visual.UI_;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Global;
import _VisualDVM.Visual.Controls.PassControl;
import _VisualDVM.Visual.Menus.PassMenuItem;
import _VisualDVM.Visual.UI;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.Vector;
public class SapforAnalysis extends SapforPass {
boolean asDonePhase = false;
protected Vector<String> getForbiddenPhases() {
return new Vector<>();
}
@Override
protected boolean needsAnimation() {
return super.needsAnimation() && !asDonePhase;
}
@Override
protected boolean canStart(Object... args) throws Exception {
asDonePhase = false;
if (super.canStart(args)) {
asDonePhase = ((args.length >= 1) && ((boolean) args[0]));
return true;
}
return false;
}
public String phase() {
return "";
}
@Override
protected PassCode necessary() {
return PassCode.SPF_ParseFilesWithOrder;
}
@Override
public String getIconPath() {
return "/icons/NotPick.png";
}
protected String getDoneIconPath() {
return "/icons/Pick.png";
}
@Override
protected boolean isGoodCode() {
return sapfor.getErrorCode() > 0;
}
@Override
protected void PerformPreparation() throws Exception {
//-
if (UI_.isActive())
showPreparation(); // отображение пустых данных
//-
performPreparation(); //в данном случае удаление данных
//-
//особенность отрисовки местных контролов.
//если сначала удалить данные, то контролы могут обновиться и сослаться на несуществующие
//поэтому сначала блокируем контролы, потом удаляем.
}
@Override
protected void body() throws Exception {
sapfor.RunAnalysis(
getSapforPassName(),
-Global.messagesServer.getPort(),
Global.packSapforSettings(),
target.getProjFile().getAbsolutePath());
}
protected void unpack(String packed) throws Exception {
}
//---------------------------------------------
//всегда обновлять фазу, даже если она уже выполнена.
protected boolean alwaysCheck() {
return false;
}
protected boolean isAtomic() {
return true;
}
//атомарность означает что анализ не ищет фаз.
@Override
protected void performDone() throws Exception {
if (!sapfor.getResult().isEmpty()) {
unpack(sapfor.getResult());
}
if (!isAtomic() && !asDonePhase) {
Utils_.MainLog.Print("Поиск выполненных фаз..");
sapfor.RunAnalysis(
"SPF_GetPassesStateStr",
-Global.messagesServer.getPort(),
"",
"");
if (sapfor.getErrorCode() >= 0) {
String[] arrayPasses = sapfor.getResult().split("\\|");
// "FILL_PAR_REGIONS_LINES" всегда брать последним, чтобы информация была актуальна.
Vector<String> sortedPasses = new Vector<>();
boolean needsRegions = false;
for (String p : arrayPasses) {
if (p.equals("FILL_PAR_REGIONS_LINES"))
needsRegions = true;
else
sortedPasses.add(p);
}
if (needsRegions)
sortedPasses.add("FILL_PAR_REGIONS_LINES");
for (String p : sortedPasses) {
if (!p.isEmpty() && !phase().equals(p)) {
SapforAnalysis analysis =
sapfor.getAnalysisByPhase(p);
if ((analysis != null) && (!analysis.getName().equals(getName())) && (analysis.alwaysCheck() || !analysis.isDone())) {
if (getForbiddenPhases().contains(analysis.getName())) {
analysis.setDone();
analysis.MarkAsDone();
} else
analysis.start(true);
}
}
}
}
Utils_.MainLog.Print("Фазы получены.");
}
}
//---------------------------------------------
@Override
public void Reset() {
if (state == PassState.Done) {
state = PassState.Inactive;
for (PassControl control: controls)
control.setIcon(getIconPath());
}
}
public void MarkAsDone() {
for (PassControl control: controls)
control.setIcon(getDoneIconPath());
}
@Override
protected void showDone() throws Exception {
MarkAsDone();
}
@Override
public AbstractAction getControlAction() {
return new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (isDone()) FocusResult();
else {
UpdateStatsIfNeed();
Do();
}
}
};
}
@Override
public boolean hasStats() {
return true;
}
@Override
protected void FocusResult() {
UI.getMainWindow().FocusProject();
}
@Override
protected void unpackMessages() throws Exception {
if (!asDonePhase) super.unpackMessages();
}
@Override
protected void showFinish() throws Exception {
if (!asDonePhase)
super.showFinish();
}
@Override
public JMenuItem createMenuItem() {
if (menuItem == null)
menuItem = new PassMenuItem(this);
return menuItem;
}
}

View File

@@ -0,0 +1,21 @@
package _VisualDVM.Passes.Sapfor;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Global;
import _VisualDVM.GlobalData.Settings.SettingName;
public class SapforFilesModification extends SapforModification {
@Override
protected PassCode necessary() {
return PassCode.SPF_ParseFilesWithOrder;
}
@Override
protected void performPreparation() throws Exception {
super.performPreparation();
if ((Global.mainModule.getDb()).settings.get(SettingName.SaveModifications).toBoolean()) {
Global.mainModule.getProject().createModification();
}
}
@Override
protected void performDone() throws Exception {
Global.mainModule.getSapfor().UpdateProjectFiles(true);
}
}

View File

@@ -0,0 +1,21 @@
package _VisualDVM.Passes.Sapfor;
import _VisualDVM.Global;
public class SapforModification extends SapforPass {
public String addOpt1 = "";
public String addOpt2 = "";
@Override
protected boolean isGoodCode() {
return sapfor.getErrorCode() >= 0;
}
@Override
protected void body() throws Exception {
sapfor.RunModification(
getSapforPassName(),
-Global.messagesServer.getPort(),
Global.packSapforSettings(),
target.getProjFile().getAbsolutePath(),
"",
addOpt1,
addOpt2);
}
}

View File

@@ -0,0 +1,30 @@
package _VisualDVM.Passes.Sapfor;
import Common.Passes.PassException;
import _VisualDVM.Global;
import _VisualDVM.Visual.UI;
public class SapforPass extends SilentSapforPass {
//отличается наличием журнала и сообщений
@Override
protected void performFinish() throws Exception {
target.db.BeginTransaction();
try {
unpackMessages();
} catch (PassException ex) {
Log.Writeln_(ex.getMessage());
}
target.db.Commit();
}
protected void unpackMessages() throws Exception {
target.unpackMessagesAndLog(sapfor.getOutputMessage(), sapfor.getOutput());
}
@Override
protected void showFinish() throws Exception {
UI.getMainWindow().getProjectWindow().RefreshProjectTreeAndMessages();
UI.getMainWindow().getProjectWindow().ShowProjectSapforLog();
}
@Override
public void Interrupt() throws Exception {
// target.CreateInterruptFile();
Global.mainModule.getSapfor().Interrupt();
}
}

View File

@@ -0,0 +1,108 @@
package _VisualDVM.Passes.Sapfor;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Current;
import _VisualDVM.Global;
import _VisualDVM.Visual.Menus.PassMenuItem;
import _VisualDVM.Visual.UI;
import _VisualDVM.ProjectData.Project.db_project_info;
import _VisualDVM.ProjectData.ProjectView;
import _VisualDVM.Repository.Component.Sapfor.TransformationPermission;
import javax.swing.*;
public class SapforTransformation extends SapforPass {
protected String Options = ""; //дополнительный аргумент для преобразований.
protected TransformationPermission getPermission() {
return TransformationPermission.All;
}
@Override
public String getIconPath() {
return "/icons/Transformations/" + getName() + ".png";
}
protected String getVersionLetter() {
return "v";
}
protected String getVersionDescription() {
return getDescription();
}
//-
@Override
protected PassCode necessary() {
return PassCode.SPF_ParseFilesWithOrder;
}
protected boolean resetAnalysesAfter() {
return true;
}
@Override
protected boolean isGoodCode() {
return sapfor.getErrorCode() >= 0;
}
@Override
protected void performPreparation() throws Exception {
super.performPreparation();
db_project_info.ResetNewVersions();
target.createEmptyVersion(getVersionLetter(), getVersionDescription());
//уже добавлена. отображена и выбрана!
}
@Override
protected void body() throws Exception {
sapfor.RunTransformation(
getName(),
-Global.messagesServer.getPort(),
Global.packSapforSettings(),
target.getProjFile().getAbsolutePath(),
target.last_version.Home.getAbsolutePath(),
Options
);
}
@Override
protected void performDone() throws Exception {
//миграция типов файлов.
target.migrateFilesSettings(target.last_version, true , true);
if (resetAnalysesAfter())
sapfor.ResetAllAnalyses();
}
@Override
public boolean hasStats() {
return true;
}
@Override
protected void FocusResult() {
UI.getMainWindow().getProjectWindow().FocusVersions();
}
@Override
protected void performFail() throws Exception {
super.performFail();
target.undoLastTransformation();
}
@Override
protected void showFinish() throws Exception {
super.showFinish();
Global.mainModule.set(Current.ProjectView, ProjectView.Files);
UI.getMainWindow().getProjectWindow().ShowProjectView();
}
@Override
protected boolean canStart(Object... args) throws Exception {
switch (Global.transformationPermission) {
case All:
return super.canStart(args);
case VariantsOnly:
if (getPermission().equals(TransformationPermission.VariantsOnly)) {
return super.canStart(args);
} else {
Log.Writeln_("Разрешено только построение параллельных вариантов!");
return false;
}
case None:
Log.Writeln_("Нет разрешения на выполнение преобразований");
return false;
}
return false;
}
@Override
public JMenuItem createMenuItem() {
if (menuItem == null)
menuItem = new PassMenuItem(this);
return menuItem;
}
}

View File

@@ -0,0 +1,44 @@
package _VisualDVM.Passes.Sapfor;
import _VisualDVM.Passes.Project.CurrentProjectPass;
import _VisualDVM.Global;
import _VisualDVM.Repository.Component.Sapfor.Sapfor;
public class SilentSapforPass extends CurrentProjectPass {
protected Sapfor sapfor;
@Override
protected boolean needsAnimation() {
return true;
}
@Override
public boolean needsConfirmations() {
return true;
}
protected String getSapforPassName() {
return getName();
}
@Override
protected boolean canStart(Object... args) throws Exception {
return super.canStart(args) && ((sapfor = Global.mainModule.getSapfor()) != null);
}
@Override
protected void performPreparation() throws Exception {
target.CleanInterruptFile();
}
@Override
protected boolean validate() {
switch (sapfor.getErrorCode()) {
case Sapfor.empty_code:
case Sapfor.canceled_code:
return false;
default:
return isGoodCode();
}
}
@Override
protected void performFail() throws Exception {
Log.Writeln_("Код возврата " + sapfor.getErrorCode());
sapfor.ResetAllAnalyses();
}
protected boolean isGoodCode() {
return true;
}
}

View File

@@ -0,0 +1,63 @@
package _VisualDVM.Passes.Sapfor;
import _VisualDVM.Passes.Project.CurrentProjectPass;
import _VisualDVM.Current;
import _VisualDVM.Global;
import _VisualDVM.Visual.Menus.PassMenuItem;
import _VisualDVM.Visual.UI;
import _VisualDVM.ProjectData.Project.db_project_info;
import _VisualDVM.ProjectData.ProjectView;
import _VisualDVM.Repository.Component.Sapfor.TransformationPermission;
import javax.swing.*;
public class Transformation extends CurrentProjectPass {
protected TransformationPermission getPermission() {
return TransformationPermission.All;
}
//todo - возможно сделать все же интерфейс для преобразований. чтобы наконец обобщить сапфоровские и несапфоровские? хз
@Override
protected void performPreparation() throws Exception {
db_project_info.ResetNewVersions();
target.createEmptyVersion(getVersionLetter(), getVersionDescription());
}
protected String getVersionDescription() {
return getDescription();
}
@Override
public String getIconPath() {
return "/icons/Transformations/" + getName() + ".png";
}
protected String getVersionLetter() {
return "v";
}
@Override
public boolean hasStats() {
return true;
}
@Override
protected void FocusResult() {
UI.getMainWindow().getProjectWindow().FocusVersions();
}
@Override
protected void showFinish() throws Exception {
super.showFinish();
Global.mainModule.set(Current.ProjectView, ProjectView.Files);
UI.getMainWindow().getProjectWindow().ShowProjectView();
}
@Override
protected void performDone() throws Exception {
//миграция типов файлов.
//это несапфоровские дела.тут копируем хедеры сами.
target.migrateFilesSettings(target.last_version, true, false);
}
@Override
protected void performFail() throws Exception {
super.performFail();
target.undoLastTransformation();
}
@Override
public JMenuItem createMenuItem() {
if (menuItem == null)
menuItem = new PassMenuItem(this);
return menuItem;
}
}

View File

@@ -0,0 +1,67 @@
package _VisualDVM.Passes.Sapfor;
import _VisualDVM.Passes.Project.CurrentProjectPass;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Global;
import _VisualDVM.Visual.UI;
import _VisualDVM.ProjectData.Files.DBProjectFile;
import _VisualDVM.ProjectData.SapforData.Variants.ParallelVariant;
import _VisualDVM.Repository.Component.Sapfor.Sapfor;
public abstract class VariantsMassPass extends CurrentProjectPass {
public abstract PassCode getSubPassCode();
int count;
@Override
protected boolean needsAnimation() {
return true;
}
@Override
public void Interrupt() throws Exception {
Global.mainModule.getSapfor().Interrupt();
}
@Override
protected boolean canStart(Object... args) throws Exception {
count =0;
if (super.canStart(args)) {
count = target.parallelVariants.getCheckedCount();
if (count== 0) {
Log.Writeln_("Не выбрано ни одного параллельного варианта");
return false;
} else if (! Global.mainModule.getPass(PassCode.SPF_GetArrayDistribution).isDone()) {
Log.Writeln_("Варианты неактуальны. Сначала перестройте распределение данных.");
return false;
}
return true;
}
return false;
}
protected void body() throws Exception {
ShowProgress(count, 0, true);
int i = 0;
for (ParallelVariant p : target.parallelVariants.Data.values())
if (p.isSelected()) {
if (! Global.mainModule.getPass(getSubPassCode()).Do(p)) break;
ShowProgress(count, ++i, true);
}
}
@Override
protected void performFinish() throws Exception {
//распаковку соо делаем только 1 раз. после всей массы вариантов.
Sapfor sapfor = Global.mainModule.getSapfor();
target.unpackMessagesAndLog(sapfor.getOutputMessage(), sapfor.getOutput());
}
@Override
protected void showFinish() throws Exception {
UI.getVersionsWindow().getVariantsWindow().RefreshVariants();
UI.getMainWindow().getProjectWindow().RefreshProjectFiles();
UI.getMainWindow().getProjectWindow().ShowProjectSapforLog();
//-
DBProjectFile badFile = target.getFirstBadFile();
if (badFile != null) {
Global.mainModule.getPass(PassCode.OpenCurrentFile).Do(badFile);
UI.getMainWindow().FocusProject();
UI.getMainWindow().getProjectWindow().FocusFile();
}
//-
if (Global.mainModule.HasFile())
Global.mainModule.getFile().form.ShowMessages();
}
}