1 package de.dlr.shepard.context.semantic.services;
2
3 import de.dlr.shepard.auth.users.entities.User;
4 import de.dlr.shepard.auth.users.services.UserService;
5 import de.dlr.shepard.common.exceptions.InvalidBodyException;
6 import de.dlr.shepard.common.exceptions.InvalidPathException;
7 import de.dlr.shepard.common.util.DateHelper;
8 import de.dlr.shepard.common.util.QueryParamHelper;
9 import de.dlr.shepard.context.semantic.SemanticRepositoryConnectorFactory;
10 import de.dlr.shepard.context.semantic.daos.SemanticRepositoryDAO;
11 import de.dlr.shepard.context.semantic.entities.SemanticRepository;
12 import de.dlr.shepard.context.semantic.io.SemanticRepositoryIO;
13 import io.quarkus.logging.Log;
14 import jakarta.enterprise.context.RequestScoped;
15 import jakarta.inject.Inject;
16 import java.net.MalformedURLException;
17 import java.net.URL;
18 import java.util.List;
19
20 @RequestScoped
21 public class SemanticRepositoryService {
22
23 @Inject
24 SemanticRepositoryDAO semanticRepositoryDAO;
25
26 @Inject
27 UserService userService;
28
29 @Inject
30 DateHelper dateHelper;
31
32 @Inject
33 SemanticRepositoryConnectorFactory semanticRepositoryConnectorFactory;
34
35 public List<SemanticRepository> getAllRepositories(QueryParamHelper params) {
36 var repositories = semanticRepositoryDAO.findAllSemanticRepositories(params);
37 return repositories;
38 }
39
40
41
42
43
44
45
46 public SemanticRepository getRepository(long id) {
47 var repository = semanticRepositoryDAO.findByNeo4jId(id);
48 if (repository == null || repository.isDeleted()) {
49 String errorMsg = String.format("ID ERROR - Semantic Repository with id %s is null or deleted", id);
50 Log.error(errorMsg);
51 throw new InvalidPathException(errorMsg);
52 }
53
54 return repository;
55 }
56
57 public SemanticRepository createRepository(SemanticRepositoryIO repositoryIO) {
58 User user = userService.getCurrentUser();
59 var toCreate = new SemanticRepository();
60 validateRepository(repositoryIO);
61
62 toCreate.setCreatedAt(dateHelper.getDate());
63 toCreate.setCreatedBy(user);
64 toCreate.setName(repositoryIO.getName());
65 toCreate.setType(repositoryIO.getType());
66 toCreate.setEndpoint(repositoryIO.getEndpoint());
67
68 var created = semanticRepositoryDAO.createOrUpdate(toCreate);
69 return created;
70 }
71
72
73
74
75
76
77
78 public void deleteRepository(long repositoryId) {
79 SemanticRepository repository = getRepository(repositoryId);
80
81 User user = userService.getCurrentUser();
82 repository.setDeleted(true);
83 repository.setUpdatedAt(dateHelper.getDate());
84 repository.setUpdatedBy(user);
85 semanticRepositoryDAO.createOrUpdate(repository);
86 }
87
88 private void validateRepository(SemanticRepositoryIO repository) {
89 try {
90 new URL(repository.getEndpoint());
91 } catch (MalformedURLException e) {
92 Log.errorf("Malformed URL: %s", repository.getEndpoint());
93 throw new InvalidBodyException("Invalid endpoint");
94 }
95 var src = semanticRepositoryConnectorFactory.getRepositoryService(repository.getType(), repository.getEndpoint());
96 var alive = src.healthCheck();
97 if (!alive) {
98 Log.errorf("Endpoint not alive: %s", repository.getEndpoint());
99 throw new InvalidBodyException("Invalid endpoint");
100 }
101 }
102 }