-
Notifications
You must be signed in to change notification settings - Fork 38
/
MongoAlertEventRepository.java
138 lines (114 loc) · 5.17 KB
/
MongoAlertEventRepository.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* Copyright © 2015 The Gravitee team (http://gravitee.io)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.gravitee.repository.mongodb.management;
import io.gravitee.common.data.domain.Page;
import io.gravitee.repository.exceptions.TechnicalException;
import io.gravitee.repository.management.api.AlertEventRepository;
import io.gravitee.repository.management.api.search.AlertEventCriteria;
import io.gravitee.repository.management.api.search.Pageable;
import io.gravitee.repository.management.model.AlertEvent;
import io.gravitee.repository.mongodb.management.internal.api.AlertEventMongoRepository;
import io.gravitee.repository.mongodb.management.internal.model.AlertEventMongo;
import io.gravitee.repository.mongodb.management.mapper.GraviteeMapper;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author David BRASSELY (david.brassely at graviteesource.com)
* @author GraviteeSource Team
*/
@Component
public class MongoAlertEventRepository implements AlertEventRepository {
private final Logger LOGGER = LoggerFactory.getLogger(MongoAlertEventRepository.class);
@Autowired
private AlertEventMongoRepository internalAlertEventRepo;
@Autowired
private GraviteeMapper mapper;
@Override
public Optional<AlertEvent> findById(String eventId) throws TechnicalException {
LOGGER.debug("Find an alert event by ID [{}]", eventId);
final AlertEventMongo alertEvent = internalAlertEventRepo.findById(eventId).orElse(null);
LOGGER.debug("Find an alert event by ID [{}] - Done", eventId);
return Optional.ofNullable(mapper.map(alertEvent));
}
@Override
public AlertEvent create(AlertEvent event) throws TechnicalException {
LOGGER.debug("Create alert event [{}]", event.getId());
AlertEventMongo alertEventMongo = mapper.map(event);
AlertEventMongo createdAlertEventMongo = internalAlertEventRepo.insert(alertEventMongo);
AlertEvent res = mapper.map(createdAlertEventMongo);
LOGGER.debug("Create alert event [{}] - Done", event.getId());
return res;
}
@Override
public AlertEvent update(AlertEvent event) throws TechnicalException {
if (event == null || event.getId() == null) {
throw new IllegalStateException("Alert event to update must have an ID");
}
final AlertEventMongo alertEventMongo = internalAlertEventRepo.findById(event.getId()).orElse(null);
if (alertEventMongo == null) {
throw new IllegalStateException(String.format("No alert event found with id [%s]", event.getId()));
}
try {
//Update
alertEventMongo.setMessage(event.getMessage());
alertEventMongo.setCreatedAt(event.getCreatedAt());
alertEventMongo.setUpdatedAt(event.getUpdatedAt());
AlertEventMongo alertEventMongoUpdated = internalAlertEventRepo.save(alertEventMongo);
return mapper.map(alertEventMongoUpdated);
} catch (Exception e) {
LOGGER.error("An error occurs when updating alert event", e);
throw new TechnicalException("An error occurs when updating alert event");
}
}
@Override
public void delete(String eventId) throws TechnicalException {
try {
internalAlertEventRepo.deleteById(eventId);
} catch (Exception e) {
LOGGER.error("An error occurs when deleting alert event [{}]", eventId, e);
throw new TechnicalException("An error occurs when deleting alert event");
}
}
@Override
public void deleteAll(String alertId) {
internalAlertEventRepo.deleteAll(alertId);
}
@Override
public Page<AlertEvent> search(AlertEventCriteria criteria, Pageable pageable) {
Page<AlertEventMongo> alertEventsMongo = internalAlertEventRepo.search(criteria, pageable);
List<AlertEvent> content = mapper.mapAlertEvents(alertEventsMongo.getContent());
return new Page<>(
content,
alertEventsMongo.getPageNumber(),
(int) alertEventsMongo.getPageElements(),
alertEventsMongo.getTotalElements()
);
}
@Override
public long count(AlertEventCriteria criteria) {
return internalAlertEventRepo.count(criteria);
}
@Override
public Set<AlertEvent> findAll() throws TechnicalException {
return internalAlertEventRepo.findAll().stream().map(alertEventMongo -> mapper.map(alertEventMongo)).collect(Collectors.toSet());
}
}