package _VisualDVM.ProjectData.Files; import Common.Utils.CommonUtils; import _VisualDVM.Constants; import Common.Database.Objects.DBObject; import _VisualDVM.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.isIntegerValue(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); } }