Skip to content

Commit 097a9b2

Browse files
committed
refactor: introduce ChargePointService
and encapsulate ChargePointRepository calls
1 parent 00968c1 commit 097a9b2

File tree

11 files changed

+131
-43
lines changed

11 files changed

+131
-43
lines changed

src/main/java/de/rwth/idsg/steve/ocpp/soap/MessageHeaderInterceptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
* 2. Intercepts incoming OCPP messages to update the endpoint address ("From" field of the WS-A header) in DB.
5151
* And the absence of the field is not a deal breaker anymore. But, as a side effect, the user will not be able
5252
* to send commands to the charging station, since the DB call to list the charge points will filter it out. See
53-
* {@link ChargePointRepositoryImpl#getChargePointSelect(OcppProtocol, java.util.List)}.
53+
* {@link ChargePointRepositoryImpl#getChargePointSelect(OcppProtocol, java.util.List, java.util.List)}.
5454
*
5555
* @author Sevket Goekay <[email protected]>
5656
* @since 15.06.2015

src/main/java/de/rwth/idsg/steve/repository/ChargePointRepository.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,12 @@ public interface ChargePointRepository {
4141

4242
List<ChargePointSelect> getChargePointSelect(OcppProtocol protocol, List<String> inStatusFilter, List<String> chargeBoxIdFilter);
4343

44-
default List<ChargePointSelect> getChargePointSelect(OcppProtocol protocol, List<String> inStatusFilter) {
45-
return getChargePointSelect(protocol, inStatusFilter, Collections.emptyList());
46-
}
47-
4844
List<String> getChargeBoxIds();
4945
Map<String, Integer> getChargeBoxIdPkPair(List<String> chargeBoxIdList);
5046

5147
List<ChargePoint.Overview> getOverview(ChargePointQueryForm form);
5248
ChargePoint.Details getDetails(int chargeBoxPk);
5349

54-
default List<ConnectorStatus> getChargePointConnectorStatus() {
55-
return getChargePointConnectorStatus(null);
56-
}
57-
5850
List<ConnectorStatus> getChargePointConnectorStatus(@Nullable ConnectorStatusForm form);
5951

6052
List<Integer> getNonZeroConnectorIds(String chargeBoxId);

src/main/java/de/rwth/idsg/steve/service/ChargePointHelperService.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import de.rwth.idsg.steve.ocpp.ws.ocpp12.Ocpp12WebSocketEndpoint;
2727
import de.rwth.idsg.steve.ocpp.ws.ocpp15.Ocpp15WebSocketEndpoint;
2828
import de.rwth.idsg.steve.ocpp.ws.ocpp16.Ocpp16WebSocketEndpoint;
29-
import de.rwth.idsg.steve.repository.ChargePointRepository;
3029
import de.rwth.idsg.steve.repository.GenericRepository;
3130
import de.rwth.idsg.steve.repository.dto.ChargePointSelect;
3231
import de.rwth.idsg.steve.repository.dto.ConnectorStatus;
@@ -65,7 +64,7 @@ public class ChargePointHelperService {
6564
private final GenericRepository genericRepository;
6665

6766
// SOAP-based charge points are stored in DB with an endpoint address
68-
private final ChargePointRepository chargePointRepository;
67+
private final ChargePointService chargePointService;
6968

7069
// For WebSocket-based charge points, the active sessions are stored in memory
7170
private final Ocpp12WebSocketEndpoint ocpp12WebSocketEndpoint;
@@ -78,7 +77,7 @@ public Statistics getStats() {
7877
stats.setNumOcpp15JChargeBoxes(ocpp15WebSocketEndpoint.getNumberOfChargeBoxes());
7978
stats.setNumOcpp16JChargeBoxes(ocpp16WebSocketEndpoint.getNumberOfChargeBoxes());
8079

81-
List<ConnectorStatus> latestList = chargePointRepository.getChargePointConnectorStatus();
80+
List<ConnectorStatus> latestList = chargePointService.getChargePointConnectorStatus();
8281
stats.setStatusCountMap(ConnectorStatusCountFilter.getStatusCountMap(latestList));
8382

8483
return stats;
@@ -91,7 +90,7 @@ public List<ConnectorStatus> getChargePointConnectorStatus(ConnectorStatusForm p
9190

9291
Set<String> connectedJsonChargeBoxIds = new HashSet<>(extractIds(Arrays.asList(ocpp12Map, ocpp15Map, ocpp16Map)));
9392

94-
List<ConnectorStatus> latestList = chargePointRepository.getChargePointConnectorStatus(params);
93+
List<ConnectorStatus> latestList = chargePointService.getChargePointConnectorStatus(params);
9594

9695
// iterate over JSON stations and mark disconnected ones
9796
// https://github.com/steve-community/steve/issues/355
@@ -112,7 +111,7 @@ public List<OcppJsonStatus> getOcppJsonStatus() {
112111
Map<String, Deque<SessionContext>> ocpp16Map = ocpp16WebSocketEndpoint.getACopy();
113112

114113
List<String> idList = extractIds(Arrays.asList(ocpp12Map, ocpp15Map, ocpp16Map));
115-
Map<String, Integer> primaryKeyLookup = chargePointRepository.getChargeBoxIdPkPair(idList);
114+
Map<String, Integer> primaryKeyLookup = chargePointService.getChargeBoxIdPkPair(idList);
116115

117116
DateTime now = DateTime.now();
118117
List<OcppJsonStatus> returnList = new ArrayList<>();
@@ -160,7 +159,7 @@ private List<ChargePointSelect> getChargePoints(OcppProtocol protocol, List<Regi
160159
.map(RegistrationStatus::value)
161160
.collect(Collectors.toList());
162161

163-
List<ChargePointSelect> returnList = chargePointRepository.getChargePointSelect(protocol, statusFilter, chargeBoxIdFilter);
162+
List<ChargePointSelect> returnList = chargePointService.getChargePointSelect(protocol, statusFilter, chargeBoxIdFilter);
164163

165164
// json stations
166165
//

src/main/java/de/rwth/idsg/steve/service/ChargePointRegistrationService.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import com.google.common.util.concurrent.Striped;
2222
import de.rwth.idsg.steve.config.SteveProperties;
23-
import de.rwth.idsg.steve.repository.ChargePointRepository;
2423
import de.rwth.idsg.steve.service.dto.UnidentifiedIncomingObject;
2524
import lombok.RequiredArgsConstructor;
2625
import lombok.extern.slf4j.Slf4j;
@@ -45,7 +44,7 @@ public class ChargePointRegistrationService {
4544
private final SteveProperties steveProperties;
4645
private final Striped<Lock> isRegisteredLocks = Striped.lock(16);
4746

48-
private final ChargePointRepository chargePointRepository;
47+
private final ChargePointService chargePointService;
4948

5049
public List<UnidentifiedIncomingObject> getUnknownChargePoints() {
5150
return unknownChargePointService.getObjects();
@@ -71,7 +70,7 @@ public Optional<RegistrationStatus> getRegistrationStatus(String chargeBoxId) {
7170

7271
private Optional<RegistrationStatus> getRegistrationStatusInternal(String chargeBoxId) {
7372
// 1. exit if already registered
74-
Optional<String> status = chargePointRepository.getRegistrationStatus(chargeBoxId);
73+
Optional<String> status = chargePointService.getRegistrationStatus(chargeBoxId);
7574
if (status.isPresent()) {
7675
try {
7776
return Optional.ofNullable(RegistrationStatus.fromValue(status.get()));
@@ -89,7 +88,7 @@ private Optional<RegistrationStatus> getRegistrationStatusInternal(String charge
8988

9089
// 3. chargeBoxId is unknown and auto-register is enabled. insert chargeBoxId
9190
try {
92-
chargePointRepository.addChargePointList(Collections.singletonList(chargeBoxId));
91+
chargePointService.addChargePointList(Collections.singletonList(chargeBoxId));
9392
log.warn("Auto-registered unknown chargebox '{}'", chargeBoxId);
9493
return Optional.of(RegistrationStatus.ACCEPTED); // default db value is accepted
9594
} catch (Exception e) {
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
* SteVe - SteckdosenVerwaltung - https://github.com/steve-community/steve
3+
* Copyright (C) 2013-2025 SteVe Community Team
4+
* All Rights Reserved.
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
18+
*/
19+
package de.rwth.idsg.steve.service;
20+
21+
import de.rwth.idsg.steve.ocpp.OcppProtocol;
22+
import de.rwth.idsg.steve.repository.ChargePointRepository;
23+
import de.rwth.idsg.steve.repository.dto.ChargePoint;
24+
import de.rwth.idsg.steve.repository.dto.ChargePointSelect;
25+
import de.rwth.idsg.steve.repository.dto.ConnectorStatus;
26+
import de.rwth.idsg.steve.web.dto.ChargePointForm;
27+
import de.rwth.idsg.steve.web.dto.ChargePointQueryForm;
28+
import de.rwth.idsg.steve.web.dto.ConnectorStatusForm;
29+
import lombok.RequiredArgsConstructor;
30+
import lombok.extern.slf4j.Slf4j;
31+
import org.jetbrains.annotations.Nullable;
32+
import org.springframework.stereotype.Service;
33+
34+
import java.util.List;
35+
import java.util.Map;
36+
import java.util.Optional;
37+
38+
/**
39+
* @author Sevket Goekay <[email protected]>
40+
* @since 29.10.2025
41+
*/
42+
@Slf4j
43+
@Service
44+
@RequiredArgsConstructor
45+
public class ChargePointService {
46+
47+
private final ChargePointRepository chargePointRepository;
48+
49+
public Optional<String> getRegistrationStatus(String chargeBoxId) {
50+
return chargePointRepository.getRegistrationStatus(chargeBoxId);
51+
}
52+
53+
public List<ChargePointSelect> getChargePointSelect(OcppProtocol protocol, List<String> inStatusFilter, List<String> chargeBoxIdFilter) {
54+
return chargePointRepository.getChargePointSelect(protocol, inStatusFilter, chargeBoxIdFilter);
55+
}
56+
57+
public List<String> getChargeBoxIds() {
58+
return chargePointRepository.getChargeBoxIds();
59+
}
60+
61+
public Map<String, Integer> getChargeBoxIdPkPair(List<String> chargeBoxIdList) {
62+
return chargePointRepository.getChargeBoxIdPkPair(chargeBoxIdList);
63+
}
64+
65+
public List<ChargePoint.Overview> getOverview(ChargePointQueryForm form) {
66+
return chargePointRepository.getOverview(form);
67+
}
68+
69+
public ChargePoint.Details getDetails(int chargeBoxPk) {
70+
return chargePointRepository.getDetails(chargeBoxPk);
71+
}
72+
73+
public List<ConnectorStatus> getChargePointConnectorStatus() {
74+
return getChargePointConnectorStatus(null);
75+
}
76+
77+
public List<ConnectorStatus> getChargePointConnectorStatus(@Nullable ConnectorStatusForm form) {
78+
return chargePointRepository.getChargePointConnectorStatus(form);
79+
}
80+
81+
public List<Integer> getNonZeroConnectorIds(String chargeBoxId) {
82+
return chargePointRepository.getNonZeroConnectorIds(chargeBoxId);
83+
}
84+
85+
public void addChargePointList(List<String> chargeBoxIdList) {
86+
chargePointRepository.addChargePointList(chargeBoxIdList);
87+
}
88+
89+
public int addChargePoint(ChargePointForm form) {
90+
return chargePointRepository.addChargePoint(form);
91+
}
92+
93+
public void updateChargePoint(ChargePointForm form) {
94+
chargePointRepository.updateChargePoint(form);
95+
}
96+
97+
public void deleteChargePoint(int chargeBoxPk) {
98+
chargePointRepository.deleteChargePoint(chargeBoxPk);
99+
}
100+
101+
}

src/main/java/de/rwth/idsg/steve/web/controller/AjaxCallController.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import com.fasterxml.jackson.annotation.JsonInclude;
2222
import com.fasterxml.jackson.core.JsonProcessingException;
2323
import com.fasterxml.jackson.databind.ObjectMapper;
24-
import de.rwth.idsg.steve.repository.ChargePointRepository;
2524
import de.rwth.idsg.steve.repository.ReservationRepository;
25+
import de.rwth.idsg.steve.service.ChargePointService;
2626
import de.rwth.idsg.steve.service.TransactionService;
2727
import lombok.RequiredArgsConstructor;
2828
import lombok.extern.slf4j.Slf4j;
@@ -34,7 +34,6 @@
3434
import org.springframework.web.bind.annotation.ResponseBody;
3535

3636
import jakarta.servlet.http.HttpServletResponse;
37-
3837
import java.io.IOException;
3938
import java.util.List;
4039

@@ -54,7 +53,7 @@ public class AjaxCallController {
5453

5554
private final ObjectMapper objectMapper = createMapper();
5655

57-
private final ChargePointRepository chargePointRepository;
56+
private final ChargePointService chargePointService;
5857
private final TransactionService transactionService;
5958
private final ReservationRepository reservationRepository;
6059

@@ -73,7 +72,7 @@ public class AjaxCallController {
7372
@RequestMapping(value = CONNECTOR_IDS_PATH)
7473
public void getConnectorIds(@PathVariable("chargeBoxId") String chargeBoxId,
7574
HttpServletResponse response) throws IOException {
76-
String s = serializeArray(chargePointRepository.getNonZeroConnectorIds(chargeBoxId));
75+
String s = serializeArray(chargePointService.getNonZeroConnectorIds(chargeBoxId));
7776
writeOutput(response, s);
7877
}
7978

src/main/java/de/rwth/idsg/steve/web/controller/ChargePointsController.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
package de.rwth.idsg.steve.web.controller;
2020

2121
import de.rwth.idsg.steve.ocpp.OcppProtocol;
22-
import de.rwth.idsg.steve.repository.ChargePointRepository;
2322
import de.rwth.idsg.steve.repository.dto.ChargePoint;
2423
import de.rwth.idsg.steve.service.ChargePointRegistrationService;
24+
import de.rwth.idsg.steve.service.ChargePointService;
2525
import de.rwth.idsg.steve.utils.ControllerHelper;
2626
import de.rwth.idsg.steve.utils.mapper.ChargePointDetailsMapper;
2727
import de.rwth.idsg.steve.web.dto.ChargePointBatchInsertForm;
@@ -38,7 +38,6 @@
3838
import org.springframework.web.bind.annotation.RequestMethod;
3939

4040
import jakarta.validation.Valid;
41-
4241
import java.util.Arrays;
4342
import java.util.Collections;
4443
import java.util.List;
@@ -54,7 +53,7 @@
5453
@RequestMapping(value = "/manager/chargepoints")
5554
public class ChargePointsController {
5655

57-
protected final ChargePointRepository chargePointRepository;
56+
protected final ChargePointService chargePointService;
5857
protected final ChargePointRegistrationService chargePointRegistrationService;
5958

6059
protected static final String PARAMS = "params";
@@ -105,13 +104,13 @@ public String getQuery(@ModelAttribute(PARAMS) ChargePointQueryForm params, Mode
105104

106105
private void initList(Model model, ChargePointQueryForm params) {
107106
model.addAttribute(PARAMS, params);
108-
model.addAttribute("cpList", chargePointRepository.getOverview(params));
107+
model.addAttribute("cpList", chargePointService.getOverview(params));
109108
model.addAttribute("unknownList", chargePointRegistrationService.getUnknownChargePoints());
110109
}
111110

112111
@RequestMapping(value = DETAILS_PATH, method = RequestMethod.GET)
113112
public String getDetails(@PathVariable("chargeBoxPk") int chargeBoxPk, Model model) {
114-
ChargePoint.Details cp = chargePointRepository.getDetails(chargeBoxPk);
113+
ChargePoint.Details cp = chargePointService.getDetails(chargeBoxPk);
115114
ChargePointForm form = ChargePointDetailsMapper.mapToForm(cp);
116115

117116
model.addAttribute("chargePointForm", form);
@@ -179,13 +178,13 @@ public String update(@Valid @ModelAttribute("chargePointForm") ChargePointForm c
179178
return "data-man/chargepointDetails";
180179
}
181180

182-
chargePointRepository.updateChargePoint(chargePointForm);
181+
chargePointService.updateChargePoint(chargePointForm);
183182
return toOverview();
184183
}
185184

186185
@RequestMapping(value = DELETE_PATH, method = RequestMethod.POST)
187186
public String delete(@PathVariable("chargeBoxPk") int chargeBoxPk) {
188-
chargePointRepository.deleteChargePoint(chargeBoxPk);
187+
chargePointService.deleteChargePoint(chargeBoxPk);
189188
return toOverview();
190189
}
191190

@@ -235,12 +234,12 @@ private void setCommonAttributesForSingleAdd(Model model) {
235234
}
236235

237236
private void add(ChargePointForm form) {
238-
chargePointRepository.addChargePoint(form);
237+
chargePointService.addChargePoint(form);
239238
chargePointRegistrationService.removeUnknown(Collections.singletonList(form.getChargeBoxId()));
240239
}
241240

242241
private void add(List<String> idList) {
243-
chargePointRepository.addChargePointList(idList);
242+
chargePointService.addChargePointList(idList);
244243
chargePointRegistrationService.removeUnknown(idList);
245244
}
246245
}

src/main/java/de/rwth/idsg/steve/web/controller/ChargingProfilesController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
*/
1919
package de.rwth.idsg.steve.web.controller;
2020

21-
import de.rwth.idsg.steve.repository.ChargePointRepository;
2221
import de.rwth.idsg.steve.repository.ChargingProfileRepository;
2322
import de.rwth.idsg.steve.repository.dto.ChargingProfile;
23+
import de.rwth.idsg.steve.service.ChargePointService;
2424
import de.rwth.idsg.steve.utils.mapper.ChargingProfileDetailsMapper;
2525
import de.rwth.idsg.steve.web.dto.ChargingProfileAssignmentQueryForm;
2626
import de.rwth.idsg.steve.web.dto.ChargingProfileForm;
@@ -45,7 +45,7 @@
4545
@RequestMapping(value = "/manager/chargingProfiles")
4646
public class ChargingProfilesController {
4747

48-
private final ChargePointRepository chargePointRepository;
48+
private final ChargePointService chargePointService;
4949
private final ChargingProfileRepository repository;
5050

5151
private static final String PARAMS = "params";
@@ -138,7 +138,7 @@ public String getDetails(@PathVariable("chargingProfilePk") int chargingProfileP
138138
public String getAssignments(@ModelAttribute(PARAMS) ChargingProfileAssignmentQueryForm form, Model model) {
139139
model.addAttribute(PARAMS, form);
140140
model.addAttribute("profileList", repository.getBasicInfo());
141-
model.addAttribute("cpList", chargePointRepository.getChargeBoxIds());
141+
model.addAttribute("cpList", chargePointService.getChargeBoxIds());
142142
model.addAttribute("assignments", repository.getAssignments(form));
143143
return "data-man/chargingProfileAssignments";
144144
}

src/main/java/de/rwth/idsg/steve/web/controller/HomeController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
*/
1919
package de.rwth.idsg.steve.web.controller;
2020

21-
import de.rwth.idsg.steve.repository.ChargePointRepository;
2221
import de.rwth.idsg.steve.repository.dto.ConnectorStatus;
2322
import de.rwth.idsg.steve.service.ChargePointHelperService;
23+
import de.rwth.idsg.steve.service.ChargePointService;
2424
import de.rwth.idsg.steve.utils.ConnectorStatusCountFilter;
2525
import de.rwth.idsg.steve.utils.ConnectorStatusFilter;
2626
import de.rwth.idsg.steve.web.dto.ConnectorStatusForm;
@@ -43,7 +43,7 @@
4343
@RequestMapping(value = "/manager", method = RequestMethod.GET)
4444
public class HomeController {
4545

46-
private final ChargePointRepository chargePointRepository;
46+
private final ChargePointService chargePointService;
4747
private final ChargePointHelperService chargePointHelperService;
4848

4949
private static final String PARAMS = "params";
@@ -74,7 +74,7 @@ public String getConnectorStatus(Model model) {
7474

7575
@RequestMapping(value = CONNECTOR_STATUS_QUERY_PATH)
7676
public String getConnectorStatusQuery(@ModelAttribute(PARAMS) ConnectorStatusForm params, Model model) {
77-
model.addAttribute("cpList", chargePointRepository.getChargeBoxIds());
77+
model.addAttribute("cpList", chargePointService.getChargeBoxIds());
7878
model.addAttribute("statusValues", ConnectorStatusCountFilter.ALL_STATUS_VALUES);
7979
model.addAttribute(PARAMS, params);
8080

0 commit comments

Comments
 (0)