View Javadoc
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  }