Files
VisualSapfor/src/ProjectData/Files/ProjectFile.java

160 lines
5.5 KiB
Java
Raw Normal View History

package ProjectData.Files;
import Common_old.Constants;
import Common.Database.Objects.DBObject;
import Common_old.Utils.Utils;
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 (Utils.getExtensionByName(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 (Utils.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 Utils.toU(file.getName());
}
@Override
public String toString() {
return file.getName();
}
public String getQSourceName() {
return Utils.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);
}
}