2023-10-31 01:02:11 +03:00
|
|
|
|
package ProjectData.Files;
|
2024-10-07 14:22:52 +03:00
|
|
|
|
import Common.Utils.CommonUtils;
|
2024-10-09 22:01:19 +03:00
|
|
|
|
import _VisualDVM.Constants;
|
2024-10-07 00:58:29 +03:00
|
|
|
|
import Common.Database.Objects.DBObject;
|
2023-10-31 01:02:11 +03:00
|
|
|
|
import ProjectData.LanguageName;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.swing.*;
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
|
//возможно, в дальнейшем унаследовать от него DBProjectFile, но пока лучше не трогать то что работает.
|
|
|
|
|
|
public class ProjectFile extends DBObject {
|
|
|
|
|
|
public File file = null; //собственно, файл на который ссылаемся.
|
|
|
|
|
|
public FileType fileType = FileType.none;
|
|
|
|
|
|
public LanguageName languageName = LanguageName.n;
|
|
|
|
|
|
public LanguageStyle style = LanguageStyle.none;
|
|
|
|
|
|
public FileState state = FileState.Undefined; //состояние файла.
|
|
|
|
|
|
public ProjectFile() {
|
|
|
|
|
|
}
|
2023-12-14 18:45:41 +03:00
|
|
|
|
public ProjectFile(File file_in) {
|
2023-10-31 01:02:11 +03:00
|
|
|
|
file = file_in;
|
|
|
|
|
|
AutoDetectProperties();
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public Object getPK() {
|
|
|
|
|
|
return file.getName();
|
|
|
|
|
|
}
|
2023-12-14 18:45:41 +03:00
|
|
|
|
public void AutoDetectProperties() {
|
2023-11-26 00:30:43 +03:00
|
|
|
|
AutoDetectProperties(file.getName());
|
|
|
|
|
|
}
|
|
|
|
|
|
public void AutoDetectProperties(String name_in) {
|
2023-10-31 01:02:11 +03:00
|
|
|
|
//проверка запретных имен.
|
|
|
|
|
|
String[] forbiddenNames = new String[]{
|
|
|
|
|
|
Constants.INTERRUPT,
|
|
|
|
|
|
Constants.launch_script_name,
|
|
|
|
|
|
Constants.default_binary_name,
|
|
|
|
|
|
//--
|
|
|
|
|
|
Constants.DONE,
|
|
|
|
|
|
Constants.TIMEOUT,
|
|
|
|
|
|
Constants.out_file,
|
|
|
|
|
|
Constants.err_file,
|
|
|
|
|
|
Constants.time_file,
|
|
|
|
|
|
"Makefile"
|
|
|
|
|
|
};
|
|
|
|
|
|
for (String forbidden : forbiddenNames) {
|
2023-11-26 00:30:43 +03:00
|
|
|
|
if (name_in.equalsIgnoreCase(forbidden)) {
|
2023-10-31 01:02:11 +03:00
|
|
|
|
fileType = FileType.forbidden;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//-
|
2024-10-07 14:22:52 +03:00
|
|
|
|
switch (CommonUtils.getExtensionFromName(name_in)) {
|
2023-10-31 01:02:11 +03:00
|
|
|
|
case "f":
|
|
|
|
|
|
case "fdv":
|
|
|
|
|
|
case "for":
|
|
|
|
|
|
case "f77":
|
|
|
|
|
|
fileType = FileType.program;
|
|
|
|
|
|
languageName = LanguageName.fortran;
|
|
|
|
|
|
style = LanguageStyle.fixed;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "f90":
|
|
|
|
|
|
fileType = FileType.program;
|
|
|
|
|
|
languageName = LanguageName.fortran;
|
|
|
|
|
|
style = LanguageStyle.free;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "c":
|
|
|
|
|
|
case "cdv":
|
|
|
|
|
|
fileType = FileType.program;
|
|
|
|
|
|
languageName = LanguageName.c;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "cpp":
|
|
|
|
|
|
fileType = FileType.program;
|
|
|
|
|
|
languageName = LanguageName.cpp;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "h":
|
|
|
|
|
|
fileType = FileType.header;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "fh":
|
|
|
|
|
|
fileType = FileType.header;
|
|
|
|
|
|
languageName = LanguageName.fortran;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "o":
|
|
|
|
|
|
case "gcda":
|
|
|
|
|
|
case "gcno":
|
|
|
|
|
|
case "gcov":
|
|
|
|
|
|
case "exe":
|
|
|
|
|
|
case "pdf":
|
|
|
|
|
|
fileType = FileType.forbidden;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "":
|
2024-10-08 00:39:13 +03:00
|
|
|
|
if (CommonUtils.isIntegerValue(name_in)) {
|
2023-10-31 01:02:11 +03:00
|
|
|
|
fileType = FileType.forbidden;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
state = FileState.Excluded;
|
|
|
|
|
|
fileType = FileType.none;
|
|
|
|
|
|
languageName = LanguageName.n;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
//все остальное считаем исключенными из рассмотрения.
|
|
|
|
|
|
//если юзеру надо сам их разблочит.
|
|
|
|
|
|
state = FileState.Excluded;
|
|
|
|
|
|
fileType = FileType.none;
|
|
|
|
|
|
languageName = LanguageName.n;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public String ImageKey() {
|
|
|
|
|
|
//icons/files/Excludeddata.png
|
|
|
|
|
|
String pref = "/icons/files/";
|
|
|
|
|
|
String body;
|
|
|
|
|
|
switch (fileType) {
|
|
|
|
|
|
case program:
|
|
|
|
|
|
body = state.toString() + languageName.toString();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case data:
|
|
|
|
|
|
body = "Undefined"; // иных состояний у данных не бывает. ситуация возникает если по ошибке поменяли тип
|
|
|
|
|
|
//нормальных файлов с сообщениями на дату.
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
body = state.toString();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return pref + body + fileType + ".png";
|
|
|
|
|
|
}
|
|
|
|
|
|
public ImageIcon GetIcon() {
|
|
|
|
|
|
URL imageUrl = getClass().getResource(ImageKey());
|
|
|
|
|
|
if (imageUrl == null) {
|
|
|
|
|
|
System.out.println(ImageKey() + "not found");
|
|
|
|
|
|
}
|
|
|
|
|
|
return new ImageIcon(imageUrl);
|
|
|
|
|
|
}
|
|
|
|
|
|
public String getUnixName() {
|
2024-10-07 14:22:52 +03:00
|
|
|
|
return CommonUtils.toU(file.getName());
|
2023-10-31 01:02:11 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public String toString() {
|
|
|
|
|
|
return file.getName();
|
|
|
|
|
|
}
|
2023-11-26 00:30:43 +03:00
|
|
|
|
public String getQSourceName() {
|
2024-10-07 14:22:52 +03:00
|
|
|
|
return CommonUtils.DQuotes(getUnixName());
|
2023-11-26 00:30:43 +03:00
|
|
|
|
}
|
|
|
|
|
|
public String getStyleOptions() {
|
|
|
|
|
|
if (languageName == LanguageName.fortran) {
|
|
|
|
|
|
switch (style) {
|
|
|
|
|
|
case fixed:
|
|
|
|
|
|
case extended:
|
|
|
|
|
|
return "-FI";
|
|
|
|
|
|
case free:
|
|
|
|
|
|
return "-f90";
|
|
|
|
|
|
case none:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
2023-12-14 18:45:41 +03:00
|
|
|
|
public boolean isNotExcludedProgram() {
|
|
|
|
|
|
return fileType.equals(FileType.program) && !languageName.equals(LanguageName.n) && !state.equals(FileState.Excluded);
|
|
|
|
|
|
}
|
2023-10-31 01:02:11 +03:00
|
|
|
|
}
|