Skip to content

Commit 5c51621

Browse files
committed
Merge branch 'feature/dayChange' into feature/#2_dbMigrations
2 parents 1ade8bc + bf2e4f3 commit 5c51621

File tree

19 files changed

+650
-136
lines changed

19 files changed

+650
-136
lines changed

pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@
5353
<artifactId>jnativehook</artifactId>
5454
<version>2.1.0</version>
5555
</dependency>
56+
<dependency>
57+
<groupId>org.w3c</groupId>
58+
<artifactId>dom</artifactId>
59+
<version>2.3.0-jaxb-1.0.6</version>
60+
</dependency>
61+
<dependency>
62+
<groupId>org.mockito</groupId>
63+
<artifactId>mockito-core</artifactId>
64+
<version>2.21.0</version>
65+
</dependency>
66+
<dependency>
67+
<groupId>org.apache.commons</groupId>
68+
<artifactId>commons-lang3</artifactId>
69+
<version>3.8</version>
70+
</dependency>
71+
5672
</dependencies>
5773

5874
<build>

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

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@
1919
import de.doubleslash.keeptime.model.Project;
2020
import de.doubleslash.keeptime.model.Settings;
2121
import de.doubleslash.keeptime.model.Work;
22-
import de.doubleslash.keeptime.model.repos.ProjectRepository;
23-
import de.doubleslash.keeptime.model.repos.SettingsRepository;
24-
import de.doubleslash.keeptime.model.repos.WorkRepository;
2522
import de.doubleslash.keeptime.view.ViewController;
2623
import de.doubleslash.keeptime.viewPopup.GlobalScreenListener;
2724
import de.doubleslash.keeptime.viewPopup.ViewControllerPopup;
@@ -44,35 +41,28 @@ public class Main extends Application {
4441
public static Stage stage;
4542
Stage popupViewStage;
4643

47-
private final Logger Log = LoggerFactory.getLogger(this.getClass());
44+
private final Logger LOG = LoggerFactory.getLogger(this.getClass());
4845

49-
public static Model model;
46+
private Model model;
5047
private Controller controller;
5148

52-
public static ProjectRepository projectRepository;
53-
54-
public static WorkRepository workRepository;
55-
public static SettingsRepository settingsRepository;
56-
5749
@Override
5850
public void init() throws Exception {
5951
springContext = SpringApplication.run(Main.class);
52+
// TODO test if everywhere is used the same model
53+
model = springContext.getBean(Model.class);
54+
controller = springContext.getBean(Controller.class);
6055
}
6156

6257
@Override
6358
public void start(final Stage primaryStage) throws Exception {
64-
stage = primaryStage;
6559

66-
Log.debug("Reading configuration");
67-
model = springContext.getBean(Model.class);
60+
stage = primaryStage;
6861

69-
projectRepository = springContext.getBean(ProjectRepository.class);
70-
workRepository = springContext.getBean(WorkRepository.class);
71-
settingsRepository = springContext.getBean(SettingsRepository.class);
72-
// TODO how to do data migration for updates??
62+
LOG.debug("Reading configuration");
7363

7464
// TODO there should just be one instance of settings in the repo
75-
final List<Settings> settingsList = settingsRepository.findAll();
65+
final List<Settings> settingsList = model.settingsRepository.findAll();
7666
final Settings settings;
7767
if (settingsList.isEmpty()) {
7868
settings = new Settings();
@@ -85,7 +75,7 @@ public void start(final Stage primaryStage) throws Exception {
8575
settings.setHoverFontColor(model.hoverFontColor.get());
8676
settings.setUseHotkey(false);
8777
settings.setDisplayProjectsRight(false);
88-
settingsRepository.save(settings);
78+
model.settingsRepository.save(settings);
8979
} else {
9080
settings = settingsList.get(0);
9181
}
@@ -98,19 +88,19 @@ public void start(final Stage primaryStage) throws Exception {
9888
model.useHotkey.set(settings.isUseHotkey());
9989
model.displayProjectsRight.set(settings.isDisplayProjectsRight());
10090

101-
final List<Work> todaysWorkItems = workRepository.findByCreationDate(LocalDate.now());
102-
Log.info("Found {} past work items", todaysWorkItems.size());
91+
final List<Work> todaysWorkItems = model.workRepository.findByCreationDate(LocalDate.now());
92+
LOG.info("Found {} past work items", todaysWorkItems.size());
10393
model.pastWorkItems.addAll(todaysWorkItems);
10494

10595
// createProjects();
10696

107-
final List<Project> projects = projectRepository.findAll();
97+
final List<Project> projects = model.projectRepository.findAll();
10898

109-
Log.debug("Found '{}' projects", projects.size());
99+
LOG.debug("Found '{}' projects", projects.size());
110100
if (projects.isEmpty()) {
111-
Log.info("Adding default project");
101+
LOG.info("Adding default project");
112102
projects.add(model.DEFAULT_PROJECT);
113-
projectRepository.save(model.DEFAULT_PROJECT);
103+
model.projectRepository.save(model.DEFAULT_PROJECT);
114104
}
115105

116106
model.allProjects.addAll(projects);
@@ -121,7 +111,7 @@ public void start(final Stage primaryStage) throws Exception {
121111
final Optional<Project> findAny = projects.stream().filter(p -> p.isDefault()).findAny();
122112
if (findAny.isPresent()) {
123113
model.idleProject = findAny.get();
124-
Log.debug("Using project '{}' as default project.", model.idleProject);
114+
LOG.debug("Using project '{}' as default project.", model.idleProject);
125115
}
126116

127117
primaryStage.setOnHiding((we) -> {
@@ -185,7 +175,7 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
185175
}
186176

187177
private void shutdown() {
188-
Log.info("Shutting down");
178+
LOG.info("Shutting down");
189179
// viewController.changeProject(model.idleProject, 0); // TODO not so nice (view has the comments for the current
190180
// // job)
191181
controller.shutdown();
@@ -216,7 +206,7 @@ private void initialiseUI(final Stage primaryStage) {
216206
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
217207
@Override
218208
public void handle(final WindowEvent event) {
219-
Log.info("On close request");
209+
LOG.info("On close request");
220210
// shutdown();
221211
// Platform.exit();
222212
}
@@ -226,14 +216,14 @@ public void handle(final WindowEvent event) {
226216
// Give the controller access to the main app.
227217
viewController.setStage(primaryStage);
228218

229-
controller = springContext.getBean(Controller.class, model);
219+
// controller = springContext.getBean(Controller.class, model, new RealDateProvider());
230220

231221
viewController.setController(controller, model);
232222

233223
primaryStage.show();
234224

235225
} catch (final Exception e) {
236-
Log.error("Error: " + e.toString(), e);
226+
LOG.error("Error: " + e.toString(), e);
237227
e.printStackTrace();
238228
}
239229
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package de.doubleslash.keeptime.common;
2+
3+
import java.io.File;
4+
5+
import javax.xml.parsers.DocumentBuilder;
6+
import javax.xml.parsers.DocumentBuilderFactory;
7+
8+
import org.w3c.dom.Document;
9+
import org.w3c.dom.Element;
10+
import org.w3c.dom.Node;
11+
import org.w3c.dom.NodeList;
12+
13+
import de.doubleslash.keeptime.controller.Controller;
14+
import de.doubleslash.keeptime.model.Model;
15+
import de.doubleslash.keeptime.model.Project;
16+
import javafx.scene.paint.Color;
17+
18+
public class ConfigParser {
19+
20+
Controller controller;
21+
Model model;
22+
23+
public ConfigParser(final Model model, final Controller controller) {
24+
this.model = model;
25+
this.controller = controller;
26+
}
27+
28+
public static boolean hasConfigFile(final String fileName) {
29+
final File f = new File(fileName);
30+
return f.exists();
31+
}
32+
33+
public void parserConfig(final File inputFile) {
34+
try {
35+
final DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
36+
final DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
37+
final Document doc = dBuilder.parse(inputFile);
38+
doc.getDocumentElement().normalize();
39+
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
40+
final NodeList nList = doc.getElementsByTagName("project");
41+
System.out.println("----------------------------");
42+
43+
// index makes sure to add new projects at the end
44+
int index = controller.getAvailableProjects().size();
45+
for (int temp = 0; temp < nList.getLength(); temp++) {
46+
final Node nNode = nList.item(temp);
47+
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
48+
final Element eElement = (Element) nNode;
49+
// get element
50+
final String name = eElement.getElementsByTagName("name").item(0).getTextContent();
51+
final String isWork = eElement.getElementsByTagName("isWork").item(0).getTextContent();
52+
final String color = eElement.getElementsByTagName("color").item(0).getTextContent();
53+
54+
System.out.println("checking for: " + name);
55+
boolean exists = false;
56+
57+
for (final Project p : controller.getAvailableProjects()) {
58+
if (name.equals(p.getName())) {
59+
System.out.println(name + " " + Boolean.toString(exists));
60+
exists = true;
61+
}
62+
}
63+
if (!exists) {
64+
final Color colorTemp = Color.valueOf(color);
65+
controller.addNewProject(name, Boolean.parseBoolean(isWork), colorTemp, index);
66+
index++;
67+
}
68+
69+
}
70+
}
71+
72+
} catch (final Exception e) {
73+
e.printStackTrace();
74+
}
75+
}
76+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package de.doubleslash.keeptime.common;
2+
3+
import java.time.LocalDate;
4+
import java.time.LocalDateTime;
5+
6+
public interface DateProvider {
7+
8+
LocalDateTime dateTimeNow();
9+
10+
LocalDate dateNow();
11+
12+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package de.doubleslash.keeptime.common;
2+
3+
import java.time.LocalDate;
4+
import java.time.LocalDateTime;
5+
6+
import org.springframework.stereotype.Component;
7+
8+
@Component
9+
public class RealDateProvider implements DateProvider {
10+
@Override
11+
public LocalDateTime dateTimeNow() {
12+
return LocalDateTime.now();
13+
}
14+
15+
@Override
16+
public LocalDate dateNow() {
17+
return LocalDate.now();
18+
}
19+
}

0 commit comments

Comments
 (0)