Skip to content

Commit 01557cf

Browse files
committed
#178: remove mappings of deleted keeptime projects. add tests. move update mappings to heimatController
1 parent 44366e2 commit 01557cf

File tree

3 files changed

+219
-74
lines changed

3 files changed

+219
-74
lines changed

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

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import de.doubleslash.keeptime.rest.integration.heimat.HeimatAPI;
1010
import de.doubleslash.keeptime.rest.integration.heimat.model.HeimatTask;
1111
import de.doubleslash.keeptime.rest.integration.heimat.model.HeimatTime;
12+
import de.doubleslash.keeptime.view.MapExternalProjectsController;
1213
import de.doubleslash.keeptime.view.ProjectReport;
14+
import javafx.collections.ObservableList;
1315
import org.slf4j.Logger;
1416
import org.slf4j.LoggerFactory;
1517
import org.springframework.beans.factory.annotation.Autowired;
@@ -273,6 +275,72 @@ public List<HeimatTask> getTasks(final LocalDate forDate) {
273275
.toList();
274276
}
275277

278+
public void updateMappings(final List<MapExternalProjectsController.ProjectMapping> newMappings,
279+
final List<ExternalProjectMapping> existingMappings) {
280+
final List<ExternalProjectMapping> mappingsToCreateOrUpdate = newMappings.stream()
281+
.filter(pm -> pm.getHeimatTask()
282+
!= null)
283+
.map(projectMapping -> {
284+
final Optional<ExternalProjectMapping> any = existingMappings.stream()
285+
.filter(
286+
pm -> pm.getProject()
287+
.getId()
288+
== projectMapping.getProject()
289+
.getId())
290+
.findAny();
291+
final HeimatTask heimatTask = projectMapping.getHeimatTask();
292+
if (any.isPresent()) {
293+
final ExternalProjectMapping projectMapping1 = any.get();
294+
if (projectMapping1.getExternalTaskId()
295+
== heimatTask.id()) {
296+
// mapping did not change
297+
return null;
298+
}
299+
projectMapping1.setExternalProjectName(
300+
heimatTask.taskHolderName());
301+
projectMapping1.setExternalTaskId(
302+
heimatTask.id());
303+
projectMapping1.setExternalTaskName(
304+
heimatTask.name());
305+
projectMapping1.setExternalTaskMetadata(
306+
heimatTask.toString()); // TODO to json
307+
308+
return projectMapping1;
309+
}
310+
return new ExternalProjectMapping(
311+
ExternalSystem.Heimat,
312+
heimatTask.taskHolderName(),
313+
heimatTask.id(),
314+
heimatTask.name(),
315+
heimatTask.toString()
316+
// TODO to json
317+
,
318+
projectMapping.getProject());
319+
})
320+
.filter(Objects::nonNull)
321+
.toList();
322+
externalProjectsMappingsRepository.saveAll(mappingsToCreateOrUpdate);
323+
324+
// remove mappings which were removed also from database
325+
final ArrayList<ExternalProjectMapping> mappingsToRemove = existingMappings.stream()
326+
.filter(
327+
em -> newMappings.stream()
328+
.anyMatch(
329+
wantedMapping ->
330+
wantedMapping.getProject()
331+
.getId()
332+
== em.getProject()
333+
.getId()
334+
&&
335+
wantedMapping.getHeimatTask()
336+
== null))
337+
.collect(Collectors.toCollection(
338+
ArrayList::new));
339+
// remove mappings of projects which were 'deleted'
340+
existingMappings.stream().filter(em -> !em.getProject().isEnabled()).forEach(mappingsToRemove::add);
341+
externalProjectsMappingsRepository.deleteAll(mappingsToRemove);
342+
}
343+
276344
public record UserMapping(Mapping mapping, boolean shouldSync, String userNotes, int userMinutes) {}
277345

278346
public record Mapping(long heimatTaskId, boolean canBeSynced, String syncMessage, List<HeimatTime> existingTimes,

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

Lines changed: 3 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -233,66 +233,7 @@ protected void updateItem(HeimatTask item, boolean empty) {
233233

234234
saveButton.setOnAction(ae -> {
235235
LOG.debug("New mappings to be saved '{}'.", observableMappings);
236-
237-
final List<ExternalProjectMapping> mappingsToCreateOrUpdate = observableMappings.stream()
238-
.filter(
239-
pm -> pm.getHeimatTask()
240-
!= null)
241-
.map(projectMapping -> {
242-
final Optional<ExternalProjectMapping> any = alreadyMappedProjects.stream()
243-
.filter(
244-
pm -> pm.getProject()
245-
.getId()
246-
== projectMapping.project.getId())
247-
.findAny();
248-
final HeimatTask heimatTask = projectMapping.getHeimatTask();
249-
if (any.isPresent()) {
250-
final ExternalProjectMapping projectMapping1 = any.get();
251-
if (projectMapping1.getExternalTaskId()
252-
== heimatTask.id()) {
253-
// mapping did not change
254-
return null;
255-
}
256-
projectMapping1.setExternalProjectName(
257-
heimatTask.taskHolderName());
258-
projectMapping1.setExternalTaskId(
259-
heimatTask.id());
260-
projectMapping1.setExternalTaskName(
261-
heimatTask.name());
262-
projectMapping1.setExternalTaskMetadata(
263-
heimatTask.toString()); // TODO to json
264-
265-
return projectMapping1;
266-
}
267-
return new ExternalProjectMapping(
268-
ExternalSystem.Heimat,
269-
heimatTask.taskHolderName(),
270-
heimatTask.id(),
271-
heimatTask.name(),
272-
heimatTask.toString()
273-
// TODO to json
274-
,
275-
projectMapping.project);
276-
})
277-
.filter(Objects::nonNull)
278-
.toList();
279-
externalProjectsMappingsRepository.saveAll(mappingsToCreateOrUpdate);
280-
281-
// remove mappings which were removed also from database
282-
final List<ExternalProjectMapping> mappingsToRemove = alreadyMappedProjects.stream()
283-
.filter(
284-
em -> observableMappings.stream()
285-
.anyMatch(
286-
wantedMapping ->
287-
wantedMapping.project.getId()
288-
== em.getProject()
289-
.getId()
290-
&&
291-
wantedMapping.heimatTask
292-
== null))
293-
.toList();
294-
externalProjectsMappingsRepository.deleteAll(mappingsToRemove);
295-
236+
heimatController.updateMappings(observableMappings, alreadyMappedProjects);
296237
thisStage.close();
297238
});
298239

@@ -346,8 +287,8 @@ private void showInvalidMappingsDialog(final List<String> warnings) {
346287
}
347288

348289
public static class ProjectMapping {
349-
Project project;
350-
HeimatTask heimatTask;
290+
private Project project;
291+
private HeimatTask heimatTask;
351292

352293
public ProjectMapping(final Project project, final HeimatTask heimatTask) {
353294
this.project = project;

0 commit comments

Comments
 (0)