Skip to content
Snippets Groups Projects
Commit a6a61ec7 authored by Arnaud LABOUREL's avatar Arnaud LABOUREL
Browse files

small refactoring of formFactory to intriduce interface

parent 26e31eaa
No related branches found
No related tags found
No related merge requests found
Pipeline #44811 passed
...@@ -38,7 +38,7 @@ public class SimpleCalendarServiceDAO implements CalendarServiceDAO { ...@@ -38,7 +38,7 @@ public class SimpleCalendarServiceDAO implements CalendarServiceDAO {
} }
} }
catch (IOException | InterruptedException | URISyntaxException e){ catch (IOException | InterruptedException | URISyntaxException e){
logger.error(e.getStackTrace()); logger.error("Exception thrown", e);
} }
return null; return null;
} }
......
...@@ -3,9 +3,9 @@ package fr.univ_amu.m1info.viewer; ...@@ -3,9 +3,9 @@ package fr.univ_amu.m1info.viewer;
import fr.univ_amu.m1info.model.Calendar; import fr.univ_amu.m1info.model.Calendar;
import fr.univ_amu.m1info.model.SimpleCalendar; import fr.univ_amu.m1info.model.SimpleCalendar;
import fr.univ_amu.m1info.service.dao.SimpleCalendarServiceDAO; import fr.univ_amu.m1info.service.dao.SimpleCalendarServiceDAO;
import fr.univ_amu.m1info.viewer.controller.CalendarController; import fr.univ_amu.m1info.viewer.controller.CalendarViewController;
import fr.univ_amu.m1info.viewer.controller.CalendarWeekViewConfiguration; import fr.univ_amu.m1info.viewer.controller.CalendarWeekViewConfiguration;
import fr.univ_amu.m1info.viewer.controller.PeriodCalendarController; import fr.univ_amu.m1info.viewer.controller.PeriodCalendarViewController;
import javafx.application.Application; import javafx.application.Application;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.stage.Stage; import javafx.stage.Stage;
...@@ -18,10 +18,10 @@ public class CalendarApp extends Application { ...@@ -18,10 +18,10 @@ public class CalendarApp extends Application {
@Override @Override
public void start(Stage primaryStage) { public void start(Stage primaryStage) {
Calendar calendar = new SimpleCalendar(new SimpleCalendarServiceDAO()); Calendar calendar = new SimpleCalendar(new SimpleCalendarServiceDAO());
CalendarController calendarController = new PeriodCalendarController(calendar, CalendarViewController calendarController = new PeriodCalendarViewController(calendar,
new CalendarWeekViewConfiguration(LocalTime.of(8,0), LocalTime.of(19,0), new CalendarWeekViewConfiguration(LocalTime.of(8,0), LocalTime.of(19,0),
Duration.ofMinutes(15), Duration.ofHours(4), Duration.ofHours(1), Color.AQUA)); Duration.ofMinutes(15), Duration.ofHours(4), Duration.ofHours(1), Color.AQUA));
primaryStage.setScene(calendarController.constructScene()); primaryStage.setScene(calendarController.getScene());
primaryStage.setResizable(false); primaryStage.setResizable(false);
primaryStage.show(); primaryStage.show();
} }
......
...@@ -2,10 +2,10 @@ package fr.univ_amu.m1info.viewer.controller; ...@@ -2,10 +2,10 @@ package fr.univ_amu.m1info.viewer.controller;
import javafx.scene.Scene; import javafx.scene.Scene;
public interface CalendarController { public interface CalendarViewController {
void handleNext(); void handleNext();
void handlePrevious(); void handlePrevious();
void handleSlotEdition(int idSlot); void handleSlotEdition(int idSlot);
void handleSlotCreation(); void handleSlotCreation();
Scene constructScene(); Scene getScene();
} }
...@@ -18,6 +18,7 @@ public class CalendarWeekViewConfiguration implements CalendarViewConfiguration ...@@ -18,6 +18,7 @@ public class CalendarWeekViewConfiguration implements CalendarViewConfiguration
private final DurationGenerator possibleDurations; private final DurationGenerator possibleDurations;
private final Duration defaultDuration; private final Duration defaultDuration;
private final Color colorOfSlots; private final Color colorOfSlots;
public CalendarWeekViewConfiguration(LocalTime dayStartTime, LocalTime dayEndTime, public CalendarWeekViewConfiguration(LocalTime dayStartTime, LocalTime dayEndTime,
Duration timeUnit, Duration maximalDuration, Duration defaultDuration, Color colorOfSlots) { Duration timeUnit, Duration maximalDuration, Duration defaultDuration, Color colorOfSlots) {
this.defaultDuration = defaultDuration; this.defaultDuration = defaultDuration;
......
...@@ -7,6 +7,7 @@ import fr.univ_amu.m1info.util.DateInterval; ...@@ -7,6 +7,7 @@ import fr.univ_amu.m1info.util.DateInterval;
import fr.univ_amu.m1info.util.DayGenerator; import fr.univ_amu.m1info.util.DayGenerator;
import fr.univ_amu.m1info.viewer.presenter.CalendarPresenter; import fr.univ_amu.m1info.viewer.presenter.CalendarPresenter;
import fr.univ_amu.m1info.viewer.presenter.PeriodCalendarPresenter; import fr.univ_amu.m1info.viewer.presenter.PeriodCalendarPresenter;
import fr.univ_amu.m1info.viewer.presenter.dialog.SimpleSlotFormFactory;
import fr.univ_amu.m1info.viewer.presenter.dialog.SlotFormAction; import fr.univ_amu.m1info.viewer.presenter.dialog.SlotFormAction;
import fr.univ_amu.m1info.viewer.presenter.dialog.SlotFormFactory; import fr.univ_amu.m1info.viewer.presenter.dialog.SlotFormFactory;
import fr.univ_amu.m1info.viewer.presenter.dialog.SlotFormResult; import fr.univ_amu.m1info.viewer.presenter.dialog.SlotFormResult;
...@@ -22,7 +23,7 @@ import java.util.HashMap; ...@@ -22,7 +23,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class PeriodCalendarController implements CalendarController { public class PeriodCalendarViewController implements CalendarViewController {
private final CalendarPresenter calendarPresenter; private final CalendarPresenter calendarPresenter;
private final CalendarViewConfiguration calendarViewConfiguration; private final CalendarViewConfiguration calendarViewConfiguration;
private DayGenerator dayGenerator; private DayGenerator dayGenerator;
...@@ -30,7 +31,7 @@ public class PeriodCalendarController implements CalendarController { ...@@ -30,7 +31,7 @@ public class PeriodCalendarController implements CalendarController {
private final SlotFormFactory slotFormFactory; private final SlotFormFactory slotFormFactory;
private final Map<Integer, Slot> slotsById = new HashMap<>(); private final Map<Integer, Slot> slotsById = new HashMap<>();
public PeriodCalendarController(Calendar calendar, CalendarViewConfiguration calendarViewConfiguration) { public PeriodCalendarViewController(Calendar calendar, CalendarViewConfiguration calendarViewConfiguration) {
this.calendarViewConfiguration = calendarViewConfiguration; this.calendarViewConfiguration = calendarViewConfiguration;
this.calendar = calendar; this.calendar = calendar;
LocalDate today = LocalDate.now(); LocalDate today = LocalDate.now();
...@@ -38,7 +39,7 @@ public class PeriodCalendarController implements CalendarController { ...@@ -38,7 +39,7 @@ public class PeriodCalendarController implements CalendarController {
List<Duration> possiblesDurations = calendarViewConfiguration.getPossibleDurations().getDurations(); List<Duration> possiblesDurations = calendarViewConfiguration.getPossibleDurations().getDurations();
List<LocalTime> possibleTimes = calendarViewConfiguration.getTimeIntervalGenerator().getStartTimesOfIntervals(); List<LocalTime> possibleTimes = calendarViewConfiguration.getTimeIntervalGenerator().getStartTimesOfIntervals();
possibleTimes.add(calendarViewConfiguration.getTimeIntervalGenerator().getEndTime()); possibleTimes.add(calendarViewConfiguration.getTimeIntervalGenerator().getEndTime());
this.slotFormFactory = new SlotFormFactory(possibleTimes, possiblesDurations); this.slotFormFactory = new SimpleSlotFormFactory(possibleTimes, possiblesDurations);
this.calendarPresenter = new PeriodCalendarPresenter(this, dayGenerator, this.calendarPresenter = new PeriodCalendarPresenter(this, dayGenerator,
calendarViewConfiguration.getTimeIntervalGenerator()); calendarViewConfiguration.getTimeIntervalGenerator());
refreshSlots(); refreshSlots();
...@@ -63,7 +64,6 @@ public class PeriodCalendarController implements CalendarController { ...@@ -63,7 +64,6 @@ public class PeriodCalendarController implements CalendarController {
calendarPresenter.updateDays(dayGenerator); calendarPresenter.updateDays(dayGenerator);
} }
private void setStartDate(LocalDate newStartDate) { private void setStartDate(LocalDate newStartDate) {
LocalDate newEndDate = newStartDate.plus(calendarViewConfiguration.getPrintablePeriod()); LocalDate newEndDate = newStartDate.plus(calendarViewConfiguration.getPrintablePeriod());
dayGenerator = new DayGenerator(new DateInterval(newStartDate, newEndDate)); dayGenerator = new DayGenerator(new DateInterval(newStartDate, newEndDate));
...@@ -120,7 +120,7 @@ public class PeriodCalendarController implements CalendarController { ...@@ -120,7 +120,7 @@ public class PeriodCalendarController implements CalendarController {
} }
@Override @Override
public Scene constructScene() { public Scene getScene() {
calendarPresenter.updateDays(dayGenerator); calendarPresenter.updateDays(dayGenerator);
calendarPresenter.updateTimeIntervals(calendarViewConfiguration.getTimeIntervalGenerator()); calendarPresenter.updateTimeIntervals(calendarViewConfiguration.getTimeIntervalGenerator());
return calendarPresenter.constructScene(); return calendarPresenter.constructScene();
...@@ -136,8 +136,8 @@ public class PeriodCalendarController implements CalendarController { ...@@ -136,8 +136,8 @@ public class PeriodCalendarController implements CalendarController {
} }
private void createSlot(Slot slot) { private void createSlot(Slot slot) {
boolean isAdded = calendar.create(slot); boolean isCreated = calendar.create(slot);
if(!isAdded) if(!isCreated)
return; return;
addSlotToView(slot); addSlotToView(slot);
} }
......
package fr.univ_amu.m1info.viewer.presenter; package fr.univ_amu.m1info.viewer.presenter;
import fr.univ_amu.m1info.model.Slot; import fr.univ_amu.m1info.model.Slot;
import fr.univ_amu.m1info.viewer.controller.CalendarController; import fr.univ_amu.m1info.viewer.controller.CalendarViewController;
import fr.univ_amu.m1info.util.DayGenerator; import fr.univ_amu.m1info.util.DayGenerator;
import fr.univ_amu.m1info.util.TimeInterval; import fr.univ_amu.m1info.util.TimeInterval;
import fr.univ_amu.m1info.util.TimeIntervalGenerator; import fr.univ_amu.m1info.util.TimeIntervalGenerator;
...@@ -22,7 +22,7 @@ public class PeriodCalendarPresenter implements CalendarPresenter { ...@@ -22,7 +22,7 @@ public class PeriodCalendarPresenter implements CalendarPresenter {
private TimeIntervalGenerator timeIntervals; private TimeIntervalGenerator timeIntervals;
private final ViewElementFactory viewElementFactory = new SimpleViewElementFactory(); private final ViewElementFactory viewElementFactory = new SimpleViewElementFactory();
public PeriodCalendarPresenter(CalendarController calendarController, public PeriodCalendarPresenter(CalendarViewController calendarController,
DayGenerator days, DayGenerator days,
TimeIntervalGenerator timeIntervals) { TimeIntervalGenerator timeIntervals) {
this.view = viewElementFactory.createGrid(days.getNumberOfDays()+1, timeIntervals.getNumberOfIntervals()+1, this.view = viewElementFactory.createGrid(days.getNumberOfDays()+1, timeIntervals.getNumberOfIntervals()+1,
......
package fr.univ_amu.m1info.viewer.presenter.dialog;
import fr.univ_amu.m1info.model.Slot;
import javafx.scene.control.*;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
public class SimpleSlotFormFactory implements SlotFormFactory {
private final SlotFormBuilder slotFormBuilder = new SlotFormBuilder();
private final List<LocalTime> possibleTimes;
private final List<Duration> possibleDurations;
public SimpleSlotFormFactory(List<LocalTime> possibleTimes, List<Duration> possibleDurations) {
this.possibleTimes = possibleTimes;
this.possibleDurations = possibleDurations;
}
@Override
public Dialog<SlotFormResult> createCalendarEventDialog(Slot slotInfo) {
int indexOfSlotTime = possibleTimes.indexOf(slotInfo.startDateTime().toLocalTime());
if (indexOfSlotTime == -1) {
throw new IllegalArgumentException("Slot is outside range");
}
int indexOfSlotDuration = possibleDurations.indexOf(slotInfo.duration());
return slotFormBuilder.reset()
.buildTitle("Édition de créneau")
.buildHeader("Édition d'un créneau du calendrier")
.buildTextFieldWithDefaultText("Description :", slotInfo.description())
.buildDatePicker("Date :", slotInfo.startDateTime().toLocalDate())
.buildTimePicker("Heure :", possibleTimes, indexOfSlotTime)
.buildDurationPicker("Durée :", possibleDurations, indexOfSlotDuration)
.buildCancelButton()
.buildDeleteButton("Supprimer créneau")
.buildConfirmButton("Modifier créneau")
.getDialog();
}
@Override
public Dialog<SlotFormResult> createCalendarEventDialog(LocalDateTime defaultLocalDateTime,
int defaultPossibleDurationIndex) {
int defaultTimeIndex = possibleTimes.indexOf(defaultLocalDateTime.toLocalTime());
if(defaultTimeIndex == -1) {
defaultTimeIndex = 0;
}
return slotFormBuilder.reset()
.buildTitle("Création de créneau")
.buildHeader("Création d'un créneau du calendrier")
.buildTextFieldWithPrompt("Description :", "description du créneau")
.buildDatePicker("Date :", defaultLocalDateTime.toLocalDate())
.buildTimePicker("Heure :", possibleTimes, defaultTimeIndex)
.buildDurationPicker("Durée :", possibleDurations, defaultPossibleDurationIndex)
.buildCancelButton()
.buildConfirmButton("Créer créneau")
.getDialog();
}
}
package fr.univ_amu.m1info.viewer.presenter.dialog; package fr.univ_amu.m1info.viewer.presenter.dialog;
import fr.univ_amu.m1info.model.Slot; import fr.univ_amu.m1info.model.Slot;
import javafx.scene.control.*; import javafx.scene.control.Dialog;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
public class SlotFormFactory {
private final SlotFormBuilder slotFormBuilder = new SlotFormBuilder();
private final List<LocalTime> possibleTimes;
private final List<Duration> possibleDurations;
public SlotFormFactory(List<LocalTime> possibleTimes, List<Duration> possibleDurations) { import java.time.LocalDateTime;
this.possibleTimes = possibleTimes;
this.possibleDurations = possibleDurations;
}
public Dialog<SlotFormResult> createCalendarEventDialog(Slot slotInfo) {
int indexOfSlotTime = possibleTimes.indexOf(slotInfo.startDateTime().toLocalTime());
if (indexOfSlotTime == -1) {
throw new IllegalArgumentException("Slot is outside range");
}
int indexOfSlotDuration = possibleDurations.indexOf(slotInfo.duration());
return slotFormBuilder.reset() public interface SlotFormFactory {
.buildTitle("Édition de créneau")
.buildHeader("Édition d'un créneau du calendrier")
.buildTextFieldWithDefaultText("Description :", slotInfo.description())
.buildDatePicker("Date :", slotInfo.startDateTime().toLocalDate())
.buildTimePicker("Heure :", possibleTimes, indexOfSlotTime)
.buildDurationPicker("Durée :", possibleDurations, indexOfSlotDuration)
.buildCancelButton()
.buildDeleteButton("Supprimer créneau")
.buildConfirmButton("Modifier créneau")
.getDialog();
}
Dialog<SlotFormResult> createCalendarEventDialog(Slot slotInfo);
public Dialog<SlotFormResult> createCalendarEventDialog(LocalDateTime defaultLocalDateTime, Dialog<SlotFormResult> createCalendarEventDialog(LocalDateTime defaultLocalDateTime,
int defaultPossibleDurationIndex) { int defaultPossibleDurationIndex);
int defaultTimeIndex = possibleTimes.indexOf(defaultLocalDateTime.toLocalTime());
if(defaultTimeIndex == -1) {
defaultTimeIndex = 0;
}
return slotFormBuilder.reset()
.buildTitle("Création de créneau")
.buildHeader("Création d'un créneau du calendrier")
.buildTextFieldWithPrompt("Description :", "description du créneau")
.buildDatePicker("Date :", defaultLocalDateTime.toLocalDate())
.buildTimePicker("Heure :", possibleTimes, defaultTimeIndex)
.buildDurationPicker("Durée :", possibleDurations, defaultPossibleDurationIndex)
.buildCancelButton()
.buildConfirmButton("Créer créneau")
.getDialog();
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment