1 package de.dlr.shepard.context.semantic.services;
2
3 import de.dlr.shepard.context.semantic.daos.AnnotatableTimeseriesDAO;
4 import de.dlr.shepard.context.semantic.entities.AnnotatableTimeseries;
5 import de.dlr.shepard.context.semantic.entities.SemanticAnnotation;
6 import de.dlr.shepard.context.semantic.io.SemanticAnnotationIO;
7 import de.dlr.shepard.data.timeseries.services.TimeseriesContainerService;
8 import de.dlr.shepard.data.timeseries.services.TimeseriesService;
9 import jakarta.enterprise.context.RequestScoped;
10 import jakarta.inject.Inject;
11 import java.util.ArrayList;
12 import java.util.List;
13 import java.util.Optional;
14
15 @RequestScoped
16 public class AnnotatableTimeseriesService {
17
18 @Inject
19 AnnotatableTimeseriesDAO dao;
20
21 @Inject
22 SemanticAnnotationService semanticAnnotationService;
23
24 @Inject
25 TimeseriesService timeseriesService;
26
27 @Inject
28 TimeseriesContainerService timeseriesContainerService;
29
30 public SemanticAnnotation createAnnotation(long containerId, int timeseriesId, SemanticAnnotationIO annotationIO) {
31 timeseriesService.getTimeseriesById(containerId, timeseriesId);
32 timeseriesContainerService.assertIsAllowedToEditContainer(containerId);
33
34 var annotatableTimeseries = dao
35 .findByTimeseries(containerId, timeseriesId)
36 .orElse(new AnnotatableTimeseries(containerId, timeseriesId, new ArrayList<>()));
37
38 var propertyRepository = dao.getSemanticRepositoryById(annotationIO.getPropertyRepositoryId());
39 var valueRepository = dao.getSemanticRepositoryById(annotationIO.getValueRepositoryId());
40
41 var annotation = new SemanticAnnotation();
42 var propertyName = semanticAnnotationService.validateTerm(propertyRepository, annotationIO.getPropertyIRI());
43 var valueName = semanticAnnotationService.validateTerm(valueRepository, annotationIO.getValueIRI());
44 annotation.setPropertyRepository(propertyRepository);
45 annotation.setPropertyIRI(annotationIO.getPropertyIRI());
46 annotation.setValueRepository(valueRepository);
47 annotation.setValueIRI(annotationIO.getValueIRI());
48 annotation.setPropertyName(propertyName);
49 annotation.setValueName(valueName);
50
51 annotatableTimeseries.getAnnotations().add(annotation);
52 dao.createOrUpdate(annotatableTimeseries);
53
54 return annotation;
55 }
56
57 public void deleteAnnotation(long containerId, int timeseriesId, long annotationId) {
58 timeseriesService.getTimeseriesById(containerId, timeseriesId);
59 timeseriesContainerService.assertIsAllowedToEditContainer(containerId);
60
61 dao.deleteAnnotation(annotationId);
62 }
63
64 public List<SemanticAnnotation> getAnnotations(long containerId, int timeseriesId) {
65 timeseriesService.getTimeseriesById(containerId, timeseriesId);
66
67 Optional<AnnotatableTimeseries> annotatableTimeseries = dao.findByTimeseries(containerId, timeseriesId);
68 if (annotatableTimeseries.isPresent()) {
69 return annotatableTimeseries.get().getAnnotations();
70 } else {
71 return new ArrayList<>();
72 }
73 }
74
75 public SemanticAnnotation getAnnotationById(long containerId, int timeseriesId, long annotationId) {
76 timeseriesService.getTimeseriesById(containerId, timeseriesId);
77
78 return dao.getAnnotationById(annotationId);
79 }
80
81 public void clearSession() {
82 dao.clearSession();
83 }
84 }