Skip to content

Commit dd5a755

Browse files
committed
replaced manual sorting with sortedList
1 parent 794c0e7 commit dd5a755

File tree

4 files changed

+46
-17
lines changed

4 files changed

+46
-17
lines changed

src/main/java/de/doubleslash/keeptime/controller/Controller.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -186,32 +186,22 @@ public void editProject(final Project projectToBeUpdated, final Project newValue
186186

187187
public void editWork(final Work workToBeEdited, final Work newValuedWork) {
188188
LOG.info("Changing work '{}' to '{}'.", workToBeEdited, newValuedWork);
189-
int index = model.getPastWorkItems().size() - 1;
190-
for (int i = 0; i < model.getPastWorkItems().size(); i++) {
191-
final Work work = model.getPastWorkItems().get(i);
192-
if (work.getId() == workToBeEdited.getId()) {
193-
model.getPastWorkItems().remove(work);
194-
continue;
195-
}
196-
if (work.getStartTime().isAfter(newValuedWork.getStartTime())) {
197-
index = i;
198-
break;
199-
}
200-
}
189+
190+
model.getPastWorkItems().removeIf(w -> (w.getId() == workToBeEdited.getId()));
201191

202192
workToBeEdited.setCreationDate(newValuedWork.getCreationDate());
203193
workToBeEdited.setStartTime(newValuedWork.getStartTime());
204194
workToBeEdited.setEndTime(newValuedWork.getEndTime());
205195
workToBeEdited.setNotes(newValuedWork.getNotes());
206196
workToBeEdited.setProject(newValuedWork.getProject());
207197

198+
final Work editedWork = model.getWorkRepository().save(workToBeEdited);
199+
208200
final LocalDate dateNow = dateProvider.dateTimeNow().toLocalDate();
209-
if (dateNow.equals(workToBeEdited.getCreationDate())) {
210-
model.getPastWorkItems().add(index, workToBeEdited);
201+
if (dateNow.equals(editedWork.getCreationDate())) {
202+
model.getPastWorkItems().add(editedWork);
211203
}
212204

213-
model.getWorkRepository().save(workToBeEdited);
214-
215205
}
216206

217207
/**

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Comparator;
2020

2121
import org.springframework.beans.factory.annotation.Autowired;
22+
import org.springframework.context.ConfigurableApplicationContext;
2223
import org.springframework.stereotype.Component;
2324

2425
import de.doubleslash.keeptime.model.repos.ProjectRepository;
@@ -63,6 +64,8 @@ public Model(final ProjectRepository projectRepository, final WorkRepository wor
6364
private ObservableList<Project> allProjects = FXCollections.observableArrayList();
6465

6566
protected final ObservableList<Work> pastWorkItems = FXCollections.observableArrayList();
67+
private final SortedList<Work> sortedPastWorkItems = new SortedList<>(pastWorkItems,
68+
Comparator.comparing(Work::getStartTime));
6669
public final ObjectProperty<Work> activeWorkItem = new SimpleObjectProperty<>();
6770

6871
public final ObjectProperty<Color> taskBarColor = new SimpleObjectProperty<>(ORIGINAL_TASK_BAR_FONT_COLOR);
@@ -76,6 +79,9 @@ public Model(final ProjectRepository projectRepository, final WorkRepository wor
7679
public final ObjectProperty<Boolean> useHotkey = new SimpleObjectProperty<>(false);
7780
public final ObjectProperty<Boolean> displayProjectsRight = new SimpleObjectProperty<>(false);
7881
public final ObjectProperty<Boolean> hideProjectsOnMouseExit = new SimpleObjectProperty<>(true);
82+
public final ObjectProperty<Boolean> emptyNoteReminder = new SimpleObjectProperty<>(false);
83+
84+
private ConfigurableApplicationContext springContext;
7985

8086
public void setWorkRepository(final WorkRepository workRepository) {
8187
this.workRepository = workRepository;
@@ -128,4 +134,16 @@ public ObservableList<Project> getAvailableProjects() {
128134
public ObservableList<Project> getAllProjects() {
129135
return allProjects;
130136
}
137+
138+
public void setSpringContext(final ConfigurableApplicationContext springContext) {
139+
this.springContext = springContext;
140+
}
141+
142+
public ConfigurableApplicationContext getSpringContext() {
143+
return this.springContext;
144+
}
145+
146+
public SortedList<Work> getSortedPastWorkItems() {
147+
return sortedPastWorkItems;
148+
}
131149
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ private void initialize() {
295295

296296
projectsListViewController.tick();
297297

298-
mainColorTimeLine.update(model.getPastWorkItems(), controller.calcTodaysSeconds());
298+
mainColorTimeLine.update(model.getSortedPastWorkItems(), controller.calcTodaysSeconds());
299299
updateTaskbarIcon(currentWorkSeconds);
300300
});
301301

src/test/java/de/doubleslash/keeptime/controller/ControllerTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
import org.junit.Test;
3636
import org.mockito.ArgumentCaptor;
3737
import org.mockito.Mockito;
38+
import org.mockito.invocation.InvocationOnMock;
39+
import org.mockito.stubbing.Answer;
40+
import org.springframework.test.util.ReflectionTestUtils;
3841

3942
import de.doubleslash.keeptime.common.DateProvider;
4043
import de.doubleslash.keeptime.model.Model;
@@ -334,6 +337,14 @@ public void shouldCalculateSecondsCorrectlyWhenWorkItemsAreGiven() {
334337
@Test
335338
public void shouldUpdateWorkItemPersistentlyWhenWorkItemIsEdited() {
336339
Mockito.when(mockedDateProvider.dateTimeNow()).thenReturn(LocalDateTime.now());
340+
Mockito.when(mockedWorkRepository.save(Mockito.any(Work.class))).thenAnswer(new Answer<Work>() {
341+
342+
@Override
343+
public Work answer(final InvocationOnMock invocation) {
344+
final Object[] args = invocation.getArguments();
345+
return (Work) args[0];
346+
}
347+
});
337348

338349
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
339350
model.getAllProjects().add(project1);
@@ -366,6 +377,13 @@ public void shouldUpdateWorkItemPersistentlyWhenWorkItemIsEdited() {
366377
@Test
367378
public void shouldNotUpdateOthersWhenWorkItemIsEdited() {
368379
Mockito.when(mockedDateProvider.dateTimeNow()).thenReturn(LocalDateTime.now());
380+
Mockito.when(mockedWorkRepository.save(Mockito.any(Work.class))).thenAnswer(new Answer<Work>() {
381+
@Override
382+
public Work answer(final InvocationOnMock invocation) {
383+
final Object[] args = invocation.getArguments();
384+
return (Work) args[0];
385+
}
386+
});
369387

370388
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
371389
model.getAllProjects().add(project1);
@@ -375,14 +393,17 @@ public void shouldNotUpdateOthersWhenWorkItemIsEdited() {
375393

376394
final Work notToBeUpdatedWork = new Work(localDateNow, localDateTimeMorning.plusHours(0),
377395
localDateTimeMorning.plusHours(1), project1, "originalWork");
396+
ReflectionTestUtils.setField(notToBeUpdatedWork, "id", 1);
378397
model.getPastWorkItems().add(notToBeUpdatedWork);
379398

380399
final Work originalWork = new Work(localDateNow, localDateTimeMorning.plusHours(1),
381400
localDateTimeMorning.plusHours(2), project1, "originalWork");
401+
ReflectionTestUtils.setField(originalWork, "id", 2);
382402
model.getPastWorkItems().add(originalWork);
383403

384404
final Work newWork = new Work(localDateNow, localDateTimeMorning.plusHours(3), localDateTimeMorning.plusHours(4),
385405
project1, "updated");
406+
ReflectionTestUtils.setField(newWork, "id", 3);
386407

387408
testee.editWork(originalWork, newWork);
388409

0 commit comments

Comments
 (0)