Files
aston-team-project/app/src/main/java/ru/project/ui/creation/CreateCollectionMenu.java
T

118 lines
3.9 KiB
Java
Raw Normal View History

package ru.project.ui.creation;
import com.googlecode.lanterna.gui2.Button;
import com.googlecode.lanterna.gui2.Label;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import ru.project.model.AppState;
import ru.project.ui.base.BaseModalWindow;
import ru.project.ui.common.MessageWindow;
import ru.project.ui.creation.file.FileDataSettingsWindow;
import ru.project.ui.creation.file.FileFillSettings;
import ru.project.ui.creation.file.FileFillStrategy;
import ru.project.ui.creation.manual.ManualDataSettingsWindow;
import ru.project.ui.creation.manual.ManualFillSettings;
import ru.project.ui.creation.manual.ManualFillStrategy;
public class CreateCollectionMenu extends BaseModalWindow {
private final AppState state;
private FillMethod selectedFillMethod;
private FillStrategy fillStrategy;
private final Label fillMethodLabel;
private final ManualDataSettingsWindow manualDataSettingsWindow;
private final FileDataSettingsWindow fileDataSettingsWindow;
2026-08-28 19:51:47 +04:00
public CreateCollectionMenu(WindowBasedTextGUI gui, AppState state) {
super("Создание новой коллекции", gui);
this.state = state;
this.selectedFillMethod = FillMethod.CUSTOM;
this.fillStrategy = null;
this.manualDataSettingsWindow = new ManualDataSettingsWindow(gui, this::setManualFillStrategy);
this.fileDataSettingsWindow = new FileDataSettingsWindow(gui, this::setFileFillStrategy);
Panel panel = new Panel();
panel.setLayoutManager(new LinearLayout());
fillMethodLabel = new Label("Способ заполнения: " + getFillMethodName(selectedFillMethod));
panel.addComponent(fillMethodLabel);
2026-08-28 19:51:47 +04:00
panel.addComponent(new Button("Выбрать способ заполнения", this::selectFillMethod));
panel.addComponent(
new Button("Настроить текущий способ заполнения", this::setupCurrentFillMethod));
panel.addComponent(new Button("Создать новую коллекцию", this::updateMainCollection));
panel.addComponent(new Button("Выйти", this::close));
setComponent(panel);
}
private void setManualFillStrategy(ManualFillSettings settings) {
fillStrategy = new ManualFillStrategy(settings);
}
private void setFileFillStrategy(FileFillSettings settings) {
fillStrategy = new FileFillStrategy(settings);
2026-08-28 19:51:47 +04:00
}
// private void setRandomFillStrategy(RandomFillSettings settings) {
// fillStrategy = new RandomFillStrategy(settings);
// }
2026-08-28 19:51:47 +04:00
private void setupCurrentFillMethod() {
switch (selectedFillMethod) {
case CUSTOM -> manualDataSettingsWindow.showModal();
2026-08-28 19:51:47 +04:00
case FILE -> fileDataSettingsWindow.showModal();
2026-08-28 19:51:47 +04:00
case RANDOM ->
MessageWindow.showModal(
gui, "Для случайных данных дополнительные настройки не требуются.");
2026-08-28 19:51:47 +04:00
}
}
private void selectFillMethod() {
BaseModalWindow menu =
new FillMethodSelectionWindow(
gui,
fillMethod -> {
selectedFillMethod = fillMethod;
fillMethodLabel.setText(
"Способ заполнения: " + getFillMethodName(selectedFillMethod));
});
menu.showModal();
}
private void updateMainCollection() {
if (fillStrategy == null) {
MessageWindow.showModal(gui, "Сначала настройте способ заполнения.");
return;
}
state.setMainCollection(fillStrategy.create());
MessageWindow.showModal(gui, "Коллекция успешно создана.");
}
private String getFillMethodName(FillMethod fillMethod) {
return switch (fillMethod) {
case CUSTOM -> "Пользовательские данные";
case RANDOM -> "Случайные данные";
case FILE -> "Данные из файла";
};
}
}