108 lines
4.7 KiB
Java
108 lines
4.7 KiB
Java
package GlobalData.Module.UI;
|
||
import Common.Constants.Constants;
|
||
import Common.Current;
|
||
import Common.UI.UI;
|
||
import Common.UI.Windows.Dialog.DBObjectDialog;
|
||
import GlobalData.Compiler.Compiler;
|
||
import GlobalData.Compiler.CompilerType;
|
||
import GlobalData.Makefile.Makefile;
|
||
import GlobalData.Module.Module;
|
||
import GlobalData.Module.ModuleAnchestor;
|
||
import ProjectData.LanguageName;
|
||
public class ModuleAnchestorForm<T extends ModuleAnchestor> extends DBObjectDialog<T, ModuleAnchestorFields> {
|
||
public static String[] banned_flags = new String[]{
|
||
"-c", "-o",
|
||
"-ffree-form", "-ffixed-line-length-132", "-ffixed-form",
|
||
"-FI", "-f90",
|
||
"-fixed", "-free"
|
||
};
|
||
String command;
|
||
String flags;
|
||
public ModuleAnchestorForm() {
|
||
super(ModuleAnchestorFields.class);
|
||
}
|
||
@Override
|
||
public int getDefaultHeight() {
|
||
return 250;
|
||
}
|
||
@Override
|
||
public void validateFields() {
|
||
Compiler compiler = (Compiler) fields.cbCompilers.getSelectedItem();
|
||
command = (String) fields.cbCommands.getSelectedItem();
|
||
if (command == null) {
|
||
Log.Writeln("команда компиляции не выбрана");
|
||
} else {
|
||
if ((compiler != null) && compiler.type.equals(CompilerType.dvm)) {
|
||
//проверим команду.
|
||
if (Result instanceof Makefile) {
|
||
//могут быть только flink/clink
|
||
if (!command.equals("flink") && !command.equals("clink")) {
|
||
Log.Writeln("При линковке DVM системой допустимы\n" +
|
||
"только команды flink или clink");
|
||
}
|
||
} else if (Result instanceof Module) {
|
||
//могут быть только f/c
|
||
LanguageName languageName = ((Module) Result).language;
|
||
switch (languageName) {
|
||
case fortran:
|
||
case c:
|
||
if (!command.equals(languageName.getDVMCompile()))
|
||
Log.Writeln("компиляция " + languageName.getDescription() +
|
||
" программ DVM системой осуществляется только командой " +
|
||
languageName.getDVMCompile()
|
||
);
|
||
break;
|
||
default:
|
||
Log.Writeln("язык " + languageName + " не поддерживается DVM системой");
|
||
break;
|
||
}
|
||
}
|
||
} else {
|
||
if (!command.isEmpty())
|
||
Log.Writeln("Для всех компиляторов, кроме DVM системы, команда компиляции/линковки должна быть пуста.");
|
||
}
|
||
}
|
||
flags = (String) fields.cbFlags.getSelectedItem();
|
||
if (flags == null) Log.Writeln("флаги компиляции не выбраны");
|
||
else {
|
||
//проверка на служебные флаги
|
||
String[] data = flags.split(" ");
|
||
for (String flag : data) {
|
||
if (!flag.isEmpty()) {
|
||
/*
|
||
if (!flag.startsWith("-")) {
|
||
Log.Writeln("неверный формат флага " + Utils.Brackets(flag));
|
||
} else {
|
||
*/
|
||
for (String banned_flag : banned_flags) {
|
||
if (flag.equalsIgnoreCase(banned_flag)) {
|
||
Log.Writeln("флаги:\n" +
|
||
String.join(",", banned_flags) +
|
||
"\nзарезервированы системой.");
|
||
return;
|
||
}
|
||
// }
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//проврка команды
|
||
}
|
||
@Override
|
||
public void fillFields() {
|
||
UI.TrySelect(fields.cbFlags, Result.flags);
|
||
UI.TrySelect(fields.cbCommands, Result.command);
|
||
UI.TrySelect(fields.cbCompilers, Result.getCompiler());
|
||
//--------------------------------------------
|
||
fields.setListeners(Result);
|
||
}
|
||
@Override
|
||
public void ProcessResult() {
|
||
Result.machine_id = Current.getMachine().id;
|
||
Compiler compiler = (Compiler) fields.cbCompilers.getSelectedItem();
|
||
Result.compiler_id = (compiler != null) ? compiler.id : Constants.Nan;
|
||
Result.command = command;
|
||
Result.flags = flags;
|
||
}
|
||
}
|