Skip to content

Commit b8e7552

Browse files
authored
Merge pull request #47 from doubleSlashde/feature/dependency_injection
Feature/dependency injection
2 parents cd1c5fa + be82031 commit b8e7552

File tree

9 files changed

+86
-74
lines changed

9 files changed

+86
-74
lines changed

src/main/java/de/doubleslash/keeptime/Main.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import de.doubleslash.keeptime.common.FontProvider;
3434
import de.doubleslash.keeptime.common.Resources;
3535
import de.doubleslash.keeptime.common.Resources.RESOURCE;
36-
import de.doubleslash.keeptime.controller.Controller;
3736
import de.doubleslash.keeptime.model.Model;
3837
import de.doubleslash.keeptime.model.Project;
3938
import de.doubleslash.keeptime.model.Settings;
@@ -74,7 +73,6 @@ public class Main extends Application {
7473
private Stage popupViewStage;
7574

7675
private Model model;
77-
private Controller controller;
7876

7977
private ViewController viewController;
8078

@@ -89,7 +87,7 @@ public void init() throws Exception {
8987
springContext = SpringApplication.run(Main.class);
9088
// TODO test if everywhere is used the same model
9189
model = springContext.getBean(Model.class);
92-
controller = springContext.getBean(Controller.class);
90+
model.setSpringContext(springContext);
9391
}
9492

9593
@Override
@@ -216,6 +214,7 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
216214
// Load root layout from fxml file.
217215
final FXMLLoader loader = new FXMLLoader();
218216
loader.setLocation(Resources.getResource(RESOURCE.FXML_VIEW_POPUP_LAYOUT));
217+
loader.setControllerFactory(springContext::getBean);
219218
final Parent popupLayout = loader.load();
220219
popupViewStage.initStyle(StageStyle.TRANSPARENT);
221220
// Show the scene containing the root layout.
@@ -227,8 +226,6 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
227226
popupViewStage.setAlwaysOnTop(true);
228227
final ViewControllerPopup viewControllerPopupController = loader.getController();
229228
viewControllerPopupController.setStage(popupViewStage);
230-
viewControllerPopupController.setControllerAndModel(controller, model);
231-
viewControllerPopupController.secondInitialize();
232229

233230
globalScreenListener.setViewController(viewControllerPopupController);
234231
}
@@ -264,8 +261,6 @@ public void handle(final WindowEvent event) {
264261
viewController = loader.getController();
265262
// Give the controller access to the main app.
266263
viewController.setStage(primaryStage);
267-
viewController.setController(controller, model);
268-
viewController.secondInitialize();
269264

270265
}
271266

src/main/java/de/doubleslash/keeptime/model/Model.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,5 @@ public ConfigurableApplicationContext getSpringContext() {
146146
public SortedList<Work> getSortedPastWorkItems() {
147147
return sortedPastWorkItems;
148148
}
149+
149150
}

src/main/java/de/doubleslash/keeptime/view/AboutController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.slf4j.Logger;
2222
import org.slf4j.LoggerFactory;
23+
import org.springframework.stereotype.Component;
2324

2425
import de.doubleslash.keeptime.Main;
2526
import de.doubleslash.keeptime.common.BrowserHelper;
@@ -42,6 +43,7 @@
4243
import javafx.scene.layout.Region;
4344
import javafx.scene.paint.Color;
4445

46+
@Component
4547
public class AboutController {
4648

4749
private static final String GITHUB_PAGE = "https://www.github.com/doubleSlashde/KeepTime";

src/main/java/de/doubleslash/keeptime/view/ManageProjectController.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import org.slf4j.Logger;
2020
import org.slf4j.LoggerFactory;
21+
import org.springframework.beans.factory.annotation.Autowired;
22+
import org.springframework.stereotype.Component;
2123

2224
import de.doubleslash.keeptime.model.Model;
2325
import de.doubleslash.keeptime.model.Project;
@@ -30,11 +32,12 @@
3032
import javafx.scene.control.TextField;
3133
import javafx.scene.layout.GridPane;
3234

35+
@Component
3336
public class ManageProjectController {
3437

3538
private static final Logger LOG = LoggerFactory.getLogger(ManageProjectController.class);
3639

37-
private Model model;
40+
private final Model model;
3841

3942
@FXML
4043
private GridPane grid;
@@ -54,17 +57,17 @@ public class ManageProjectController {
5457
@FXML
5558
private Spinner<Integer> sortIndexSpinner;
5659

57-
public void setModel(final Model model) {
60+
@Autowired
61+
public ManageProjectController(final Model model) {
5862
this.model = model;
5963
}
6064

61-
public void secondInitialize() {
62-
if (model != null) {
63-
final int availableProjectAmount = model.getAllProjects().size();
64-
sortIndexSpinner
65-
.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount, availableProjectAmount));
66-
sortIndexSpinner.getValueFactory().setValue(model.getAvailableProjects().size());
67-
}
65+
@FXML
66+
private void initialize() {
67+
final int availableProjectAmount = model.getAllProjects().size();
68+
sortIndexSpinner
69+
.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount, availableProjectAmount));
70+
sortIndexSpinner.getValueFactory().setValue(model.getAvailableProjects().size());
6871
}
6972

7073
public void initializeWith(final Project project) {

src/main/java/de/doubleslash/keeptime/view/ProjectsListViewController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ private Node createListEntryForProject(final Project p) {
187187

188188
final FXMLLoader loader = new FXMLLoader();
189189
loader.setLocation(Resources.getResource(RESOURCE.FXML_PROJECT_LAYOUT));
190+
loader.setControllerFactory(model.getSpringContext()::getBean);
190191
Pane projectElement;
191192
try {
192193
projectElement = loader.load();
@@ -332,14 +333,13 @@ private Dialog<Project> setupEditProjectDialog(final String title, final String
332333
private GridPane setUpEditProjectGridPane(final Project p, final Dialog<Project> dialog) {
333334
GridPane grid;
334335
final FXMLLoader loader = new FXMLLoader(Resources.getResource(RESOURCE.FXML_MANAGE_PROJECT));
336+
loader.setControllerFactory(model.getSpringContext()::getBean);
335337
try {
336338
grid = loader.load();
337339
} catch (final IOException e) {
338340
throw new FXMLLoaderException("Error while loading '" + Resources.RESOURCE.FXML_MANAGE_PROJECT + "'.", e);
339341
}
340342
final ManageProjectController manageProjectController = loader.getController();
341-
manageProjectController.setModel(model);
342-
manageProjectController.secondInitialize();
343343
manageProjectController.initializeWith(p);
344344

345345
dialog.setResultConverter(dialogButton -> {

src/main/java/de/doubleslash/keeptime/view/ReportController.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
import org.slf4j.Logger;
2929
import org.slf4j.LoggerFactory;
30+
import org.springframework.beans.factory.annotation.Autowired;
31+
import org.springframework.stereotype.Component;
3032

3133
import com.sun.javafx.scene.control.skin.DatePickerSkin;
3234

@@ -70,6 +72,7 @@
7072
import javafx.stage.Stage;
7173
import javafx.util.Callback;
7274

75+
@Component
7376
public class ReportController {
7477

7578
public static final String NOTE_DELIMETER = "; ";
@@ -101,22 +104,31 @@ public class ReportController {
101104

102105
private static final Logger LOG = LoggerFactory.getLogger(ReportController.class);
103106

104-
private Model model;
107+
private final Model model;
105108

106-
private Controller controller;
109+
private final Controller controller;
107110

108111
private Stage stage;
109112

110113
private ColorTimeLine colorTimeLine;
111114

112115
private LocalDate currentReportDate;
113116

117+
@Autowired
118+
public ReportController(final Model model, final Controller controller) {
119+
this.model = model;
120+
this.controller = controller;
121+
}
122+
114123
@FXML
115124
private void initialize() {
116125
LOG.info("Init reportController");
117126
currentReportDate = LocalDate.now();
118-
initTableView();
119127
colorTimeLine = new ColorTimeLine(colorTimeLineCanvas);
128+
129+
loadCalenderWidget();
130+
initTableView();
131+
120132
}
121133

122134
private void initTableView() {
@@ -174,7 +186,7 @@ protected void updateItem(final TableRow item, final boolean empty) {
174186

175187
private void updateReport(final LocalDate dateToShow) {
176188
this.currentReportDate = dateToShow;
177-
this.loadCalenderWidget();
189+
178190
reportRoot.requestFocus();
179191

180192
this.currentDayLabel.setText(DateFormatter.toDayDateString(this.currentReportDate));
@@ -330,18 +342,10 @@ private Button createProjectReportButton(final List<Work> projectWork) {
330342

331343
}
332344

333-
public void setModel(final Model model) {
334-
this.model = model;
335-
}
336-
337345
public void update() {
338346
updateReport(this.currentReportDate);
339347
}
340348

341-
public void setController(final Controller controller) {
342-
this.controller = controller;
343-
}
344-
345349
public void setStage(final Stage stage) {
346350
this.stage = stage;
347351
}

src/main/java/de/doubleslash/keeptime/view/SettingsController.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
import org.slf4j.Logger;
2222
import org.slf4j.LoggerFactory;
23+
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.stereotype.Component;
2325

2426
import de.doubleslash.keeptime.common.OS;
2527
import de.doubleslash.keeptime.common.Resources;
@@ -43,6 +45,7 @@
4345
import javafx.stage.Modality;
4446
import javafx.stage.Stage;
4547

48+
@Component
4649
public class SettingsController {
4750

4851
@FXML
@@ -95,13 +98,19 @@ public class SettingsController {
9598

9699
private static final Logger LOG = LoggerFactory.getLogger(SettingsController.class);
97100

98-
private Controller controller;
99-
private Model model;
101+
private final Controller controller;
102+
private final Model model;
100103

101104
private Stage thisStage;
102105

103106
private Stage aboutStage;
104107

108+
@Autowired
109+
public SettingsController(final Model model, final Controller controller) {
110+
this.model = model;
111+
this.controller = controller;
112+
}
113+
105114
@FXML
106115
private void initialize() {
107116
LOG.debug("start init");
@@ -191,12 +200,6 @@ private void initialize() {
191200
});
192201
}
193202

194-
public void setControllerAndModel(final Controller controller, final Model model) {
195-
this.controller = controller;
196-
this.model = model;
197-
update();
198-
}
199-
200203
void update() {
201204
// needed to close stage on esc
202205
settingsRoot.requestFocus();
@@ -223,6 +226,7 @@ private void loadAboutStage() {
223226
// About stage
224227
LOG.debug("load about.fxml");
225228
final FXMLLoader fxmlLoader3 = createFXMLLoader(RESOURCE.FXML_ABOUT);
229+
fxmlLoader3.setControllerFactory(model.getSpringContext()::getBean);
226230
LOG.debug("load root");
227231
final Parent rootAbout = fxmlLoader3.load();
228232
LOG.debug("set stage");

src/main/java/de/doubleslash/keeptime/view/ViewController.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.slf4j.Logger;
2626
import org.slf4j.LoggerFactory;
27+
import org.springframework.beans.factory.annotation.Autowired;
2728
import org.springframework.stereotype.Component;
2829

2930
import de.doubleslash.keeptime.common.ColorHelper;
@@ -147,17 +148,10 @@ private class Delta {
147148
private final Delta dragDelta = new Delta();
148149

149150
private Stage mainStage;
150-
private Controller controller;
151-
private Model model;
152151

153-
public void setController(final Controller controller, final Model model) {
154-
this.controller = controller;
155-
this.model = model;
156-
157-
controller.changeProject(model.getIdleProject(), 0);
152+
private final Controller controller;
158153

159-
updateProjectView();
160-
}
154+
private final Model model;
161155

162156
private final Canvas taskbarCanvas = new Canvas(32, 32);
163157

@@ -173,6 +167,12 @@ public void setController(final Controller controller, final Model model) {
173167

174168
private ProjectsListViewController projectsListViewController;
175169

170+
@Autowired
171+
public ViewController(final Model model, final Controller controller) {
172+
this.model = model;
173+
this.controller = controller;
174+
}
175+
176176
@FXML
177177
private void initialize() {
178178

@@ -306,6 +306,11 @@ private void initialize() {
306306
});
307307

308308
mainColorTimeLine = new ColorTimeLine(canvas);
309+
310+
controller.changeProject(model.getIdleProject(), 0);
311+
312+
updateProjectView();
313+
309314
}
310315

311316
private Dialog<Project> dialogResultConverter(final Dialog<Project> dialog,
@@ -380,13 +385,11 @@ private void loadSubStages() {
380385
try {
381386
// Report stage
382387
final FXMLLoader fxmlLoader = createFXMLLoader(RESOURCE.FXML_REPORT);
388+
fxmlLoader.setControllerFactory(model.getSpringContext()::getBean);
383389
final Parent root = fxmlLoader.load();
384390
root.setFocusTraversable(true);
385391
root.requestFocus();
386392
reportController = fxmlLoader.getController();
387-
reportController.setModel(model);
388-
reportController.setController(controller);
389-
390393
reportStage = new Stage();
391394
reportStage.initModality(Modality.APPLICATION_MODAL);
392395
reportController.setStage(reportStage);
@@ -408,9 +411,9 @@ private void loadSubStages() {
408411

409412
// Settings stage
410413
final FXMLLoader fxmlLoader2 = createFXMLLoader(RESOURCE.FXML_SETTINGS);
414+
fxmlLoader2.setControllerFactory(model.getSpringContext()::getBean);
411415
final Parent settingsRoot = fxmlLoader2.load();
412416
settingsController = fxmlLoader2.getController();
413-
settingsController.setControllerAndModel(controller, model);
414417
settingsStage = new Stage();
415418
settingsController.setStage(settingsStage);
416419
settingsStage.initModality(Modality.APPLICATION_MODAL);
@@ -451,6 +454,7 @@ private Dialog<Project> setUpDialogProject(final String title, final String head
451454
private GridPane setUpAddNewProjectGridPane(final Dialog<Project> dialog) {
452455
GridPane grid;
453456
final FXMLLoader loader = new FXMLLoader(Resources.getResource(RESOURCE.FXML_MANAGE_PROJECT));
457+
loader.setControllerFactory(model.getSpringContext()::getBean);
454458
try {
455459
grid = loader.load();
456460
} catch (final IOException e) {
@@ -460,8 +464,6 @@ private GridPane setUpAddNewProjectGridPane(final Dialog<Project> dialog) {
460464
dialog.getDialogPane().setContent(grid);
461465

462466
final ManageProjectController manageProjectController = loader.getController();
463-
manageProjectController.setModel(model);
464-
manageProjectController.secondInitialize();
465467

466468
dialogResultConverter(dialog, manageProjectController);
467469

@@ -508,6 +510,8 @@ private void updateProjectView() {
508510

509511
public void setStage(final Stage primaryStage) {
510512
this.mainStage = primaryStage;
513+
this.projectsListViewController = new ProjectsListViewController(model, controller, mainStage,
514+
availableProjectsListView, searchTextField, false);
511515
}
512516

513517
@FXML
@@ -523,8 +527,4 @@ public void addNewProject(final ActionEvent ae) {
523527
result.ifPresent(project -> controller.addNewProject(project));
524528
}
525529

526-
public void secondInitialize() {
527-
this.projectsListViewController = new ProjectsListViewController(model, controller, mainStage,
528-
availableProjectsListView, searchTextField, false);
529-
}
530530
}

0 commit comments

Comments
 (0)