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

102 lines
4.7 KiB
Java
Raw Normal View History

2024-10-14 12:14:01 +03:00
package _VisualDVM.Passes.All;
2024-10-11 00:00:30 +03:00
import Common.Utils.Utils_;
2024-10-08 22:33:49 +03:00
import Common.Visual.Windows.Dialog.Text.ComboTextDialog;
2025-02-18 16:21:20 +03:00
import _VisualDVM.ComponentsServer.Component.Sapfor.Sapfor;
import _VisualDVM.ComponentsServer.Component.Sapfor.TransformationPermission;
2024-10-14 12:14:01 +03:00
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Passes.Sapfor.Transformation;
2024-10-14 15:19:13 +03:00
import _VisualDVM.ProjectData.Files.DBProjectFile;
import _VisualDVM.Utils;
2024-10-09 22:15:56 +03:00
import _VisualDVM.Visual.Windows.CombineFilesDialog;
2023-09-17 22:13:42 +03:00
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Vector;
public class CombineFiles extends Transformation {
protected File result = null;
2024-10-14 15:19:13 +03:00
ComboTextDialog fd = null;
2023-09-17 22:13:42 +03:00
@Override
2024-10-09 23:37:58 +03:00
protected PassCode necessary() {
return PassCode.SPF_GetIncludeDependencies;
2023-09-17 22:13:42 +03:00
}
@Override
protected boolean canStart(Object... args) throws Exception {
2024-10-15 15:30:26 +03:00
switch (Sapfor.transformationPermission) {
2023-09-17 22:13:42 +03:00
case All:
return super.canStart(args) && target.CheckSameStyle(Log) &&
(fd = new CombineFilesDialog()).ShowDialog("Выберите имя итогового файла", target.files_order);
case VariantsOnly:
if (getPermission().equals(TransformationPermission.VariantsOnly)) {
return super.canStart(args) && target.CheckSameStyle(Log) && (
(fd = new CombineFilesDialog()).ShowDialog("Выберите имя итогового файла", target.files_order)
);
} else {
Log.Writeln_("Разрешено только построение параллельных вариантов!");
return false;
}
case None:
Log.Writeln_("Нет разрешения на выполнение преобразований");
return false;
}
return false;
}
//правила инклудов https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vna1/index.html
@Override
protected void body() throws Exception {
result = Paths.get(target.last_version.Home.getAbsolutePath(),
2024-10-11 00:00:30 +03:00
Utils_.isWindows() ? fd.Result : Utils_.toU(fd.Result)).toFile();
2023-09-17 22:13:42 +03:00
//-----------------------
//получить список хедеров.
//-----------------------
Vector<String> result_lines = new Vector<>();
Vector<String> all_includes = new Vector<>();
//-----------------------------
result_lines.add("!-Found " + target.allIncludes.size() + " headers");
for (String name : target.allIncludes.keySet()) {
2024-10-11 00:00:30 +03:00
all_includes.add(" include " + Utils_.Quotes(Utils_.toU(name)));
result_lines.add("! include " + Utils_.Quotes(Utils_.toU(name)));
2023-09-17 22:13:42 +03:00
}
result_lines.add("!-Collapse-" + target.files_order.size() + " files");
int i = 1;
for (String name : target.files_order) {
2024-10-11 00:00:30 +03:00
result_lines.add("! -- " + i + ". " + Utils_.Brackets(name));
2023-09-17 22:13:42 +03:00
++i;
}
result_lines.add("!--------------------");
for (String name : target.files_order) {
//если есть инклуды начинаем мучиться.
if (target.addictedFiles.containsKey(name)) {
DBProjectFile file = target.db.files.Data.get(name);
//---------------------------------------------------->>>
List<String> file_lines = FileUtils.readLines(file.file);
for (String line : file_lines) {
String header = Utils.extractHeaderName(line);
if (header != null) {
if (file.dependencies.contains(header))
2024-10-11 00:00:30 +03:00
result_lines.add(" include " + Utils_.Quotes(
Utils_.toU(header)));
2023-09-17 22:13:42 +03:00
} else
result_lines.add(line);
}
} else {
//инклудов нет. добавляем все подряд.
result_lines.addAll(FileUtils.readLines(target.db.files.Data.get(name).file));
}
}
FileUtils.writeLines(result, result_lines, false);
//-------------------------------
//теперь скопировать остальные файлы
for (String name : target.db.files.Data.keySet()) {
if (!target.files_order.contains(name)) {
Files.copy(
target.db.files.Data.get(name).file.toPath(),
Paths.get(target.last_version.Home.getAbsolutePath(), name)
);
}
}
}
}