2024-10-09 22:01:19 +03:00
|
|
|
package _VisualDVM.Validators;
|
2023-09-17 22:13:42 +03:00
|
|
|
import Common.Utils.TextLog;
|
2024-10-14 15:19:13 +03:00
|
|
|
import Common.Utils.Utils_;
|
2023-09-17 22:13:42 +03:00
|
|
|
import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities;
|
|
|
|
|
public class PathValidator extends Validator {
|
|
|
|
|
PathValidatorState state;
|
|
|
|
|
StringBuilder name;
|
|
|
|
|
int spaces_count;
|
|
|
|
|
public PathValidator(String string, String string_name_in, TextLog log_in) {
|
|
|
|
|
super(string, string_name_in, log_in);
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
protected void reset() {
|
|
|
|
|
state = PathValidatorState.Start;
|
|
|
|
|
name = new StringBuilder();
|
|
|
|
|
spaces_count = 0;
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
protected boolean continueCondition() {
|
|
|
|
|
return (state == PathValidatorState.Name) || state == PathValidatorState.Start;
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
protected void Body() {
|
|
|
|
|
switch (state) {
|
|
|
|
|
case Start:
|
|
|
|
|
if (RSyntaxUtilities.isLetter(c) || RSyntaxUtilities.isDigit(c) || c == '_') {
|
|
|
|
|
name.append(c);
|
|
|
|
|
state = PathValidatorState.Name;
|
|
|
|
|
} else state = PathValidatorState.WrongNameFormat;
|
|
|
|
|
break;
|
|
|
|
|
case Name:
|
|
|
|
|
switch (c) {
|
|
|
|
|
case '/':
|
|
|
|
|
reset();
|
|
|
|
|
break;
|
|
|
|
|
case ' ':
|
|
|
|
|
spaces_count++;
|
|
|
|
|
name.append(c);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
2024-10-11 00:00:30 +03:00
|
|
|
if (Utils_.isForbiddenCharacter(c))
|
2023-09-17 22:13:42 +03:00
|
|
|
state = PathValidatorState.Forbidden;
|
|
|
|
|
else name.append(c);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
protected void PerformFinish() {
|
|
|
|
|
switch (state) {
|
|
|
|
|
case WrongNameFormat:
|
|
|
|
|
Log.Writeln(string_name + ": имя файла или каталога в пути имеет неверный формат");
|
|
|
|
|
break;
|
|
|
|
|
case Forbidden:
|
2024-10-14 15:19:13 +03:00
|
|
|
Log.Writeln(string_name + ": Составляющие путь имена содержат запрещённые символы \n" + Utils_.printAllForbiddenCharacters());
|
2023-09-17 22:13:42 +03:00
|
|
|
break;
|
|
|
|
|
case Name:
|
|
|
|
|
if (spaces_count > 0)
|
|
|
|
|
Log.Writeln(string_name + ": Пробелы в окончании пути к файлу запрещены.");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
protected int getStartIndex() {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|