Skip to content

Commit 88ef989

Browse files
committed
fixed some code smells
1 parent b1ba554 commit 88ef989

File tree

9 files changed

+164
-125
lines changed

9 files changed

+164
-125
lines changed

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

Lines changed: 113 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package de.doubleslash.keeptime;
22

33
import java.io.IOException;
4+
import java.io.PrintWriter;
5+
import java.io.StringWriter;
46
import java.time.LocalDate;
57
import java.util.List;
68
import java.util.Optional;
@@ -27,7 +29,13 @@
2729
import javafx.fxml.FXMLLoader;
2830
import javafx.scene.Parent;
2931
import javafx.scene.Scene;
32+
import javafx.scene.control.Alert;
33+
import javafx.scene.control.Alert.AlertType;
34+
import javafx.scene.control.Label;
35+
import javafx.scene.control.TextArea;
36+
import javafx.scene.layout.GridPane;
3037
import javafx.scene.layout.Pane;
38+
import javafx.scene.layout.Priority;
3139
import javafx.scene.paint.Color;
3240
import javafx.stage.Stage;
3341
import javafx.stage.StageStyle;
@@ -64,37 +72,49 @@ public void init() throws Exception {
6472
}
6573

6674
@Override
67-
public void start(final Stage primaryStage) throws Exception {
75+
public void start(final Stage primaryStage) {
76+
LOG.info("Initialising the UI");
77+
try {
78+
initUI(primaryStage);
79+
LOG.info("UI successfully initialised.");
80+
} catch (final Exception e) {
81+
LOG.error("There was an error while initialising the UI", e);
6882

69-
LOG.debug("Reading configuration");
83+
final Alert alert = new Alert(AlertType.ERROR);
84+
alert.setTitle("Error");
85+
alert.setHeaderText("Could not start application");
86+
alert.setContentText("Please send the error with your logs folder to a developer");
7087

71-
final List<Settings> settingsList = model.settingsRepository.findAll();
72-
final Settings settings;
73-
if (settingsList.isEmpty()) {
74-
settings = new Settings();
75-
settings.setTaskBarColor(model.taskBarColor.get());
88+
final StringWriter sw = new StringWriter();
89+
final PrintWriter pw = new PrintWriter(sw);
90+
e.printStackTrace(pw);
91+
final String exceptionText = sw.toString();
7692

77-
settings.setDefaultBackgroundColor(model.defaultBackgroundColor.get());
78-
settings.setDefaultFontColor(model.defaultFontColor.get());
93+
final Label label = new Label("The exception stacktrace was:");
7994

80-
settings.setHoverBackgroundColor(model.hoverBackgroundColor.get());
81-
settings.setHoverFontColor(model.hoverFontColor.get());
82-
settings.setUseHotkey(false);
83-
settings.setDisplayProjectsRight(false);
84-
settings.setHideProjectsOnMouseExit(true);
85-
model.settingsRepository.save(settings);
86-
} else {
87-
settings = settingsList.get(0);
95+
final TextArea textArea = new TextArea(exceptionText);
96+
textArea.setEditable(false);
97+
textArea.setWrapText(true);
98+
99+
textArea.setMaxWidth(Double.MAX_VALUE);
100+
textArea.setMaxHeight(Double.MAX_VALUE);
101+
GridPane.setVgrow(textArea, Priority.ALWAYS);
102+
GridPane.setHgrow(textArea, Priority.ALWAYS);
103+
104+
final GridPane expContent = new GridPane();
105+
expContent.setMaxWidth(Double.MAX_VALUE);
106+
expContent.add(label, 0, 0);
107+
expContent.add(textArea, 0, 1);
108+
109+
alert.getDialogPane().setExpandableContent(expContent);
110+
alert.showAndWait();
111+
System.exit(1);
88112
}
113+
}
89114

90-
model.defaultBackgroundColor.set(settings.getDefaultBackgroundColor());
91-
model.defaultFontColor.set(settings.getDefaultFontColor());
92-
model.hoverBackgroundColor.set(settings.getHoverBackgroundColor());
93-
model.hoverFontColor.set(settings.getHoverFontColor());
94-
model.taskBarColor.set(settings.getTaskBarColor());
95-
model.useHotkey.set(settings.isUseHotkey());
96-
model.displayProjectsRight.set(settings.isDisplayProjectsRight());
97-
model.hideProjectsOnMouseExit.set(settings.isHideProjectsOnMouseExit());
115+
private void initUI(final Stage primaryStage) throws Exception {
116+
117+
readSettings();
98118

99119
final List<Work> todaysWorkItems = model.workRepository.findByCreationDate(LocalDate.now());
100120
LOG.info("Found {} past work items", todaysWorkItems.size());
@@ -114,7 +134,7 @@ public void start(final Stage primaryStage) throws Exception {
114134
.addAll(model.allProjects.stream().filter(Project::isEnabled).collect(Collectors.toList()));
115135

116136
// set default project
117-
final Optional<Project> findAny = projects.stream().filter(p -> p.isDefault()).findAny();
137+
final Optional<Project> findAny = projects.stream().filter(Project::isDefault).findAny();
118138
if (findAny.isPresent()) {
119139
model.idleProject = findAny.get();
120140
LOG.debug("Using project '{}' as default project.", model.idleProject);
@@ -125,29 +145,52 @@ public void start(final Stage primaryStage) throws Exception {
125145
globalScreenListener.shutdown(); // deregister, as this will keep app running
126146
});
127147

128-
try {
129-
initialiseUI(primaryStage);
130-
} catch (final Exception e) {
131-
e.printStackTrace();
132-
}
148+
initialiseUI(primaryStage);
149+
initialisePopupUI(primaryStage);
150+
}
133151

134-
try {
135-
initialisePopupUI(primaryStage);
136-
} catch (final Exception e) {
137-
e.printStackTrace();
152+
private void readSettings() {
153+
LOG.debug("Reading configuration");
154+
155+
final List<Settings> settingsList = model.settingsRepository.findAll();
156+
final Settings settings;
157+
if (settingsList.isEmpty()) {
158+
settings = new Settings();
159+
settings.setTaskBarColor(model.taskBarColor.get());
160+
161+
settings.setDefaultBackgroundColor(model.defaultBackgroundColor.get());
162+
settings.setDefaultFontColor(model.defaultFontColor.get());
163+
164+
settings.setHoverBackgroundColor(model.hoverBackgroundColor.get());
165+
settings.setHoverFontColor(model.hoverFontColor.get());
166+
settings.setUseHotkey(false);
167+
settings.setDisplayProjectsRight(false);
168+
settings.setHideProjectsOnMouseExit(true);
169+
model.settingsRepository.save(settings);
170+
} else {
171+
settings = settingsList.get(0);
138172
}
173+
174+
model.defaultBackgroundColor.set(settings.getDefaultBackgroundColor());
175+
model.defaultFontColor.set(settings.getDefaultFontColor());
176+
model.hoverBackgroundColor.set(settings.getHoverBackgroundColor());
177+
model.hoverFontColor.set(settings.getHoverFontColor());
178+
model.taskBarColor.set(settings.getTaskBarColor());
179+
model.useHotkey.set(settings.isUseHotkey());
180+
model.displayProjectsRight.set(settings.isDisplayProjectsRight());
181+
model.hideProjectsOnMouseExit.set(settings.isHideProjectsOnMouseExit());
139182
}
140183

141184
private void initialisePopupUI(final Stage primaryStage) throws IOException {
142-
// TODO register only if it is enabled
185+
LOG.debug("Initialising popup UI.");
186+
143187
globalScreenListener = new GlobalScreenListener();
144-
// TODO stop and close stage when main stage is shutdown
188+
// stop and close stage when main stage is shutdown
145189
model.useHotkey.addListener((a, b, newValue) -> {
146190
globalScreenListener.register(newValue);
147191
});
148192
globalScreenListener.register(model.useHotkey.get());
149193

150-
// Platform.setImplicitExit(false); // TODO maybe not needed as other view will be available
151194
popupViewStage = new Stage();
152195
popupViewStage.initOwner(primaryStage);
153196
// Load root layout from fxml file.
@@ -168,44 +211,39 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
168211
globalScreenListener.setViewController(viewControllerPopupController);
169212
}
170213

171-
private void initialiseUI(final Stage primaryStage) {
172-
try {
173-
Pane mainPane;
174-
175-
// Load root layout from fxml file.
176-
final FXMLLoader loader = new FXMLLoader();
177-
loader.setLocation(Resources.getResource(RESOURCE.FXML_VIEW_LAYOUT));
178-
loader.setControllerFactory(springContext::getBean);
179-
mainPane = loader.load();
180-
primaryStage.initStyle(StageStyle.TRANSPARENT);
181-
// Show the scene containing the root layout.
182-
final Scene mainScene = new Scene(mainPane, Color.TRANSPARENT);
183-
184-
// Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
185-
186-
primaryStage.setTitle("KeepTime");
187-
primaryStage.setScene(mainScene);
188-
primaryStage.setAlwaysOnTop(true);
189-
primaryStage.setResizable(false);
190-
191-
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
192-
@Override
193-
public void handle(final WindowEvent event) {
194-
LOG.info("On close request");
195-
}
196-
});
197-
198-
viewController = loader.getController();
199-
// Give the controller access to the main app.
200-
viewController.setStage(primaryStage);
201-
viewController.setController(controller, model);
202-
203-
primaryStage.show();
214+
private void initialiseUI(final Stage primaryStage) throws IOException {
215+
LOG.debug("Initialising main UI.");
216+
Pane mainPane;
204217

205-
} catch (final Exception e) {
206-
LOG.error("Error: " + e.toString(), e);
207-
e.printStackTrace();
208-
}
218+
// Load root layout from fxml file.
219+
final FXMLLoader loader = new FXMLLoader();
220+
loader.setLocation(Resources.getResource(RESOURCE.FXML_VIEW_LAYOUT));
221+
loader.setControllerFactory(springContext::getBean);
222+
mainPane = loader.load();
223+
primaryStage.initStyle(StageStyle.TRANSPARENT);
224+
// Show the scene containing the root layout.
225+
final Scene mainScene = new Scene(mainPane, Color.TRANSPARENT);
226+
227+
// Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
228+
229+
primaryStage.setTitle("KeepTime");
230+
primaryStage.setScene(mainScene);
231+
primaryStage.setAlwaysOnTop(true);
232+
primaryStage.setResizable(false);
233+
234+
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
235+
@Override
236+
public void handle(final WindowEvent event) {
237+
LOG.info("On close request");
238+
}
239+
});
240+
241+
viewController = loader.getController();
242+
// Give the controller access to the main app.
243+
viewController.setStage(primaryStage);
244+
viewController.setController(controller, model);
245+
246+
primaryStage.show();
209247
}
210248

211249
@Override

src/main/java/de/doubleslash/keeptime/common/ColorHelper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
public class ColorHelper {
66

7+
private ColorHelper() {
8+
throw new IllegalStateException("Utility class");
9+
}
10+
711
public static Color randomColor() {
812
return Color.BLACK;
913
}

src/main/java/de/doubleslash/keeptime/common/DateFormatter.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,22 @@ public class DateFormatter {
99
private static DateTimeFormatter dayDateFormatter = DateTimeFormatter.ofPattern("eeee dd.MM.yyyy");
1010
private static DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
1111

12+
private DateFormatter() {
13+
throw new IllegalStateException("Utility class");
14+
}
15+
1216
public static String secondsToHHMMSS(final long currentWorkSeconds) {
1317
final int hours = (int) (currentWorkSeconds / 3600);
1418
final int minutes = (int) ((currentWorkSeconds % 3600) / 60);
1519

1620
final int sec = (int) (((currentWorkSeconds % 3600) % 60));
1721

18-
final String a = (hours > 9 ? hours : "0" + hours) + ":" + (minutes > 9 ? minutes : "0" + minutes) + ":"
19-
+ (sec > 9 ? sec : "0" + sec);
20-
return a;
22+
final Object hoursString = hours > 9 ? hours : "0" + hours;
23+
final Object minutesString = minutes > 9 ? minutes : "0" + minutes;
24+
final Object secondsString = sec > 9 ? sec : "0" + sec;
25+
26+
final String timeString = hoursString + ":" + minutesString + ":" + secondsString;
27+
return timeString;
2128
}
2229

2330
public static long getSecondsBewtween(final LocalDateTime startDate, final LocalDateTime endDate) {

src/main/java/de/doubleslash/keeptime/common/Resources.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
public class Resources {
66

7+
private Resources() {
8+
throw new IllegalStateException("Utility class");
9+
}
10+
711
public enum RESOURCE {
812
/** LAYOUTS **/
913
// main
@@ -30,6 +34,5 @@ public String getResourceLocation() {
3034

3135
public static URL getResource(final RESOURCE resource) {
3236
return Resources.class.getResource(resource.getResourceLocation());
33-
// return ClassLoader.getSystemResource(resource.getResourceLocation());
3437
}
3538
}

0 commit comments

Comments
 (0)