Files
VisualSapfor/src/ProjectData/Files/ProjectFile.java
2024-10-07 14:22:52 +03:00

160 lines
5.5 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 ProjectData.Files;
import Common.Utils.CommonUtils;
import Common_old.Constants;
import Common.Database.Objects.DBObject;
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() {
}
public ProjectFile(File file_in) {
file = file_in;
AutoDetectProperties();
}
@Override
public Object getPK() {
return file.getName();
}
public void AutoDetectProperties() {
AutoDetectProperties(file.getName());
}
public void AutoDetectProperties(String name_in) {
//проверка запретных имен.
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) {
if (name_in.equalsIgnoreCase(forbidden)) {
fileType = FileType.forbidden;
return;
}
}
//-
switch (CommonUtils.getExtensionFromName(name_in)) {
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 "":
if (CommonUtils.isDigit(name_in)) {
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() {
return CommonUtils.toU(file.getName());
}
@Override
public String toString() {
return file.getName();
}
public String getQSourceName() {
return CommonUtils.DQuotes(getUnixName());
}
public String getStyleOptions() {
if (languageName == LanguageName.fortran) {
switch (style) {
case fixed:
case extended:
return "-FI";
case free:
return "-f90";
case none:
break;
}
}
return "";
}
public boolean isNotExcludedProgram() {
return fileType.equals(FileType.program) && !languageName.equals(LanguageName.n) && !state.equals(FileState.Excluded);
}
}