Skip to content

Commit c5947d3

Browse files
authored
Merge pull request #52 from doubleSlashde/feature/delete_work_item
added delete functionality
2 parents 4367658 + 7fe4432 commit c5947d3

File tree

3 files changed

+86
-11
lines changed

3 files changed

+86
-11
lines changed

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,24 @@ public void editWork(final Work workToBeEdited, final Work newValuedWork) {
208208

209209
}
210210

211+
public void deleteWork(final Work workToBeDeleted) {
212+
LOG.info("Deleting work '{}'.", workToBeDeleted);
213+
214+
model.getPastWorkItems().removeIf(w -> (w.getId() == workToBeDeleted.getId()));
215+
model.getWorkRepository().delete(workToBeDeleted);
216+
}
217+
211218
/**
212219
* Changes the indexes of the originalList parameter to have a consistent order.
213220
*
214221
* @param originalList
215-
* list of all projects to adapt the indexes for
222+
* list of all projects to adapt the indexes for
216223
* @param changedProject
217-
* the project which has changed which already has the new index
224+
* the project which has changed which already has the new index
218225
* @param oldIndex
219-
* the old index of the changed project
226+
* the old index of the changed project
220227
* @param newIndex
221-
* the new index of the changed project (which the projects also already has)
228+
* the new index of the changed project (which the projects also already has)
222229
* @return all projects whose index has been adapted
223230
*/
224231
List<Project> resortProjectIndexes(final List<Project> originalList, final Project changedProject,
@@ -255,9 +262,9 @@ List<Project> resortProjectIndexes(final List<Project> originalList, final Proje
255262
* Decreases all indexes by one, after the removed index
256263
*
257264
* @param originalList
258-
* list of all projects to adapt the indexes for
265+
* list of all projects to adapt the indexes for
259266
* @param removedIndex
260-
* the index which has been removed
267+
* the index which has been removed
261268
* @return all projects whose index has been adapted
262269
*/
263270
List<Project> adaptProjectIndexesAfterRemoving(final List<Project> originalList, final int removedIndex) {

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

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,17 @@
4343
import de.doubleslash.keeptime.view.worktable.ProjectTableRow;
4444
import de.doubleslash.keeptime.view.worktable.TableRow;
4545
import de.doubleslash.keeptime.view.worktable.WorkTableRow;
46+
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
47+
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
4648
import javafx.beans.property.ReadOnlyObjectWrapper;
4749
import javafx.event.ActionEvent;
4850
import javafx.event.EventHandler;
4951
import javafx.fxml.FXML;
5052
import javafx.fxml.FXMLLoader;
5153
import javafx.scene.Node;
5254
import javafx.scene.canvas.Canvas;
55+
import javafx.scene.control.Alert;
56+
import javafx.scene.control.Alert.AlertType;
5357
import javafx.scene.control.Button;
5458
import javafx.scene.control.ButtonType;
5559
import javafx.scene.control.DateCell;
@@ -222,8 +226,9 @@ private void updateReport(final LocalDate dateToShow) {
222226
new ProjectTableRow(project, projectWorkSeconds, projectButtonBox), circle);
223227

224228
for (final Work w : onlyCurrentProjectWork) {
225-
final HBox workButtonBox = new HBox();
229+
final HBox workButtonBox = new HBox(5.0);
226230
workButtonBox.getChildren().add(createEditWorkButton(w));
231+
workButtonBox.getChildren().add(createDeleteWorkButton(w));
227232
final TreeItem<TableRow> workRow = new TreeItem<>(new WorkTableRow(w, workButtonBox));
228233
projectRow.getChildren().add(workRow);
229234
}
@@ -268,9 +273,31 @@ public void updateItem(final LocalDate item, final boolean empty) {
268273

269274
}
270275

276+
private Button createDeleteWorkButton(final Work w) {
277+
final Button deleteButton = new Button("", new FontAwesomeIconView(FontAwesomeIcon.TRASH));
278+
deleteButton.setOnAction(e -> {
279+
LOG.info("Delete work clicked.");
280+
final Alert alert = new Alert(AlertType.CONFIRMATION);
281+
alert.setTitle("Delete Work");
282+
alert.setHeaderText("Delete work item");
283+
alert.setContentText(w.toString());
284+
alert.initOwner(stage);
285+
286+
final Optional<ButtonType> result = alert.showAndWait();
287+
288+
result.ifPresent(buType -> {
289+
if (buType.equals(ButtonType.OK)) {
290+
controller.deleteWork(w);
291+
this.update();
292+
}
293+
});
294+
});
295+
return deleteButton;
296+
}
297+
271298
private Button createEditWorkButton(final Work work) {
272-
final Button bProjectReport = new Button("edit");
273-
bProjectReport.setOnAction(e -> {
299+
final Button editButton = new Button("", new FontAwesomeIconView(FontAwesomeIcon.PENCIL));
300+
editButton.setOnAction(e -> {
274301
LOG.info("Edit work clicked.");
275302
final Dialog<Work> dialog = setupEditWorkDialog(work);
276303

@@ -282,7 +309,7 @@ private Button createEditWorkButton(final Work work) {
282309
this.update();
283310
});
284311
});
285-
return bProjectReport;
312+
return editButton;
286313
}
287314

288315
private Dialog<Work> setupEditWorkDialog(final Work work) {
@@ -321,7 +348,7 @@ private GridPane setUpEditWorkGridPane(final Work work, final Dialog<Work> dialo
321348
}
322349

323350
private Button createProjectReportButton(final List<Work> projectWork) {
324-
final Button bProjectReport = new Button("Copy to clipboard");
351+
final Button bProjectReport = new Button("", new FontAwesomeIconView(FontAwesomeIcon.CLIPBOARD));
325352
final EventHandler<ActionEvent> eventListener = actionEvent -> {
326353
LOG.debug("Copy to Clipboard clicked.");
327354
final ProjectReport pr = new ProjectReport(projectWork.size());

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static org.hamcrest.Matchers.not;
2323
import static org.junit.Assert.assertEquals;
2424
import static org.junit.Assert.assertThat;
25+
import static org.junit.Assert.assertTrue;
2526

2627
import java.time.LocalDate;
2728
import java.time.LocalDateTime;
@@ -405,4 +406,44 @@ public void shouldNotUpdateOthersWhenWorkItemIsEdited() {
405406

406407
}
407408

409+
@Test
410+
public void shouldDeleteWorkPersistentlyWhenWorkIsDeleted() {
411+
412+
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
413+
model.getAllProjects().add(project1);
414+
415+
final LocalDate localDateNow = LocalDate.now();
416+
final LocalDateTime localDateTimeMorning = LocalDateTime.now().withHour(4);
417+
418+
final Work work = new Work(localDateNow, localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1),
419+
project1, "originalWork");
420+
model.getPastWorkItems().add(work);
421+
422+
testee.deleteWork(work);
423+
424+
final ArgumentCaptor<Work> argument = ArgumentCaptor.forClass(Work.class);
425+
Mockito.verify(mockedWorkRepository, Mockito.times(1)).delete(argument.capture());
426+
assertThat("Edited work was not deleted persistently", argument.getValue(), is(work));
427+
428+
}
429+
430+
@Test
431+
public void shouldRemoveWorkFromPastWorkItemsWhenWorkIsDeleted() {
432+
433+
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
434+
model.getAllProjects().add(project1);
435+
436+
final LocalDate localDateNow = LocalDate.now();
437+
final LocalDateTime localDateTimeMorning = LocalDateTime.now().withHour(4);
438+
439+
final Work work = new Work(localDateNow, localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1),
440+
project1, "originalWork");
441+
model.getPastWorkItems().add(work);
442+
443+
testee.deleteWork(work);
444+
445+
assertTrue("work Items contain work when it should have been deleted", model.getPastWorkItems().isEmpty());
446+
447+
}
448+
408449
}

0 commit comments

Comments
 (0)