Skip to content

Commit d28d20c

Browse files
committed
refactor: merge ChargePointRegistrationService into ChargePointService
1 parent 097a9b2 commit d28d20c

File tree

7 files changed

+86
-122
lines changed

7 files changed

+86
-122
lines changed

src/main/java/de/rwth/idsg/steve/config/WebSocketConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import de.rwth.idsg.steve.ocpp.ws.ocpp12.Ocpp12WebSocketEndpoint;
2424
import de.rwth.idsg.steve.ocpp.ws.ocpp15.Ocpp15WebSocketEndpoint;
2525
import de.rwth.idsg.steve.ocpp.ws.ocpp16.Ocpp16WebSocketEndpoint;
26-
import de.rwth.idsg.steve.service.ChargePointRegistrationService;
26+
import de.rwth.idsg.steve.service.ChargePointService;
2727
import de.rwth.idsg.steve.web.validation.ChargeBoxIdValidator;
2828
import lombok.RequiredArgsConstructor;
2929
import lombok.extern.slf4j.Slf4j;
@@ -48,7 +48,7 @@
4848
@Slf4j
4949
public class WebSocketConfiguration implements WebSocketConfigurer {
5050

51-
private final ChargePointRegistrationService chargePointRegistrationService;
51+
private final ChargePointService chargePointService;
5252
private final ChargeBoxIdValidator chargeBoxIdValidator;
5353
private final Ocpp12WebSocketEndpoint ocpp12WebSocketEndpoint;
5454
private final Ocpp15WebSocketEndpoint ocpp15WebSocketEndpoint;
@@ -65,7 +65,7 @@ public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
6565
chargeBoxIdValidator,
6666
handshakeHandler(),
6767
Lists.newArrayList(ocpp16WebSocketEndpoint, ocpp15WebSocketEndpoint, ocpp12WebSocketEndpoint),
68-
chargePointRegistrationService
68+
chargePointService
6969
);
7070

7171
registry.addHandler(handshakeHandler.getDummyWebSocketHandler(), PATH_INFIX + "*")

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import de.rwth.idsg.steve.ocpp.OcppProtocol;
2222
import de.rwth.idsg.steve.repository.OcppServerRepository;
2323
import de.rwth.idsg.steve.repository.impl.ChargePointRepositoryImpl;
24-
import de.rwth.idsg.steve.service.ChargePointRegistrationService;
24+
import de.rwth.idsg.steve.service.ChargePointService;
2525
import lombok.extern.slf4j.Slf4j;
2626
import ocpp.cs._2015._10.RegistrationStatus;
2727
import org.apache.cxf.binding.soap.Soap12;
@@ -60,18 +60,18 @@
6060
public class MessageHeaderInterceptor extends AbstractPhaseInterceptor<Message> {
6161

6262
private final OcppServerRepository ocppServerRepository;
63-
private final ChargePointRegistrationService chargePointRegistrationService;
63+
private final ChargePointService chargePointService;
6464
private final TaskExecutor taskExecutor;
6565

6666
private static final String BOOT_OPERATION_NAME = "BootNotification";
6767
private static final String CHARGEBOX_ID_HEADER = "ChargeBoxIdentity";
6868

6969
public MessageHeaderInterceptor(OcppServerRepository ocppServerRepository,
70-
ChargePointRegistrationService chargePointRegistrationService,
70+
ChargePointService chargePointService,
7171
TaskExecutor taskExecutor) {
7272
super(Phase.PRE_INVOKE);
7373
this.ocppServerRepository = ocppServerRepository;
74-
this.chargePointRegistrationService = chargePointRegistrationService;
74+
this.chargePointService = chargePointService;
7575
this.taskExecutor = taskExecutor;
7676
}
7777

@@ -86,7 +86,7 @@ public void handleMessage(Message message) throws Fault {
8686
QName opName = message.getExchange().getBindingOperationInfo().getOperationInfo().getName();
8787

8888
if (!BOOT_OPERATION_NAME.equals(opName.getLocalPart())) {
89-
Optional<RegistrationStatus> status = chargePointRegistrationService.getRegistrationStatus(chargeBoxId);
89+
Optional<RegistrationStatus> status = chargePointService.getRegistrationStatus(chargeBoxId);
9090
boolean allow = status.isPresent() && status.get() != RegistrationStatus.REJECTED;
9191
if (!allow) {
9292
throw createAuthFault(opName);

src/main/java/de/rwth/idsg/steve/ocpp/ws/OcppWebSocketHandshakeHandler.java

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

21-
import de.rwth.idsg.steve.service.ChargePointRegistrationService;
21+
import de.rwth.idsg.steve.service.ChargePointService;
2222
import de.rwth.idsg.steve.web.validation.ChargeBoxIdValidator;
2323
import lombok.RequiredArgsConstructor;
2424
import lombok.extern.slf4j.Slf4j;
@@ -51,7 +51,7 @@ public class OcppWebSocketHandshakeHandler implements HandshakeHandler {
5151
private final ChargeBoxIdValidator chargeBoxIdValidator;
5252
private final DefaultHandshakeHandler delegate;
5353
private final List<AbstractWebSocketEndpoint> endpoints;
54-
private final ChargePointRegistrationService chargePointRegistrationService;
54+
private final ChargePointService chargePointService;
5555

5656
/**
5757
* We need some WebSocketHandler just for Spring to register it for the path. We will not use it for the actual
@@ -78,7 +78,7 @@ public boolean doHandshake(ServerHttpRequest request, ServerHttpResponse respons
7878
return false;
7979
}
8080

81-
Optional<RegistrationStatus> status = chargePointRegistrationService.getRegistrationStatus(chargeBoxId);
81+
Optional<RegistrationStatus> status = chargePointService.getRegistrationStatus(chargeBoxId);
8282

8383
// Allow connections, if station is in db (registration_status field from db does not matter)
8484
boolean allowConnection = status.isPresent();

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,12 @@ public class CentralSystemService16_Service {
7777
private final SettingsRepository settingsRepository;
7878
private final OcppTagService ocppTagService;
7979
private final ApplicationEventPublisher applicationEventPublisher;
80-
private final ChargePointRegistrationService chargePointRegistrationService;
80+
private final ChargePointService chargePointService;
8181

8282
public BootNotificationResponse bootNotification(BootNotificationRequest parameters, String chargeBoxIdentity,
8383
OcppProtocol ocppProtocol) {
8484

85-
Optional<RegistrationStatus> status = chargePointRegistrationService.getRegistrationStatus(chargeBoxIdentity);
85+
Optional<RegistrationStatus> status = chargePointService.getRegistrationStatus(chargeBoxIdentity);
8686
applicationEventPublisher.publishEvent(new OccpStationBooted(chargeBoxIdentity, status));
8787
DateTime now = DateTime.now();
8888

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

Lines changed: 0 additions & 99 deletions
This file was deleted.

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

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,28 @@
1818
*/
1919
package de.rwth.idsg.steve.service;
2020

21+
import com.google.common.util.concurrent.Striped;
22+
import de.rwth.idsg.steve.config.SteveProperties;
2123
import de.rwth.idsg.steve.ocpp.OcppProtocol;
2224
import de.rwth.idsg.steve.repository.ChargePointRepository;
2325
import de.rwth.idsg.steve.repository.dto.ChargePoint;
2426
import de.rwth.idsg.steve.repository.dto.ChargePointSelect;
2527
import de.rwth.idsg.steve.repository.dto.ConnectorStatus;
28+
import de.rwth.idsg.steve.service.dto.UnidentifiedIncomingObject;
2629
import de.rwth.idsg.steve.web.dto.ChargePointForm;
2730
import de.rwth.idsg.steve.web.dto.ChargePointQueryForm;
2831
import de.rwth.idsg.steve.web.dto.ConnectorStatusForm;
2932
import lombok.RequiredArgsConstructor;
3033
import lombok.extern.slf4j.Slf4j;
34+
import ocpp.cs._2015._10.RegistrationStatus;
3135
import org.jetbrains.annotations.Nullable;
3236
import org.springframework.stereotype.Service;
3337

38+
import java.util.Collections;
3439
import java.util.List;
3540
import java.util.Map;
3641
import java.util.Optional;
42+
import java.util.concurrent.locks.Lock;
3743

3844
/**
3945
* @author Sevket Goekay <[email protected]>
@@ -44,11 +50,11 @@
4450
@RequiredArgsConstructor
4551
public class ChargePointService {
4652

47-
private final ChargePointRepository chargePointRepository;
53+
private final UnidentifiedIncomingObjectService unknownChargePointService = new UnidentifiedIncomingObjectService(100);
54+
private final Striped<Lock> isRegisteredLocks = Striped.lock(16);
4855

49-
public Optional<String> getRegistrationStatus(String chargeBoxId) {
50-
return chargePointRepository.getRegistrationStatus(chargeBoxId);
51-
}
56+
private final ChargePointRepository chargePointRepository;
57+
private final SteveProperties steveProperties;
5258

5359
public List<ChargePointSelect> getChargePointSelect(OcppProtocol protocol, List<String> inStatusFilter, List<String> chargeBoxIdFilter) {
5460
return chargePointRepository.getChargePointSelect(protocol, inStatusFilter, chargeBoxIdFilter);
@@ -98,4 +104,63 @@ public void deleteChargePoint(int chargeBoxPk) {
98104
chargePointRepository.deleteChargePoint(chargeBoxPk);
99105
}
100106

107+
// -------------------------------------------------------------------------
108+
// Unknown
109+
// -------------------------------------------------------------------------
110+
111+
public List<UnidentifiedIncomingObject> getUnknownChargePoints() {
112+
return unknownChargePointService.getObjects();
113+
}
114+
115+
public void removeUnknown(List<String> chargeBoxIdList) {
116+
unknownChargePointService.removeAll(chargeBoxIdList);
117+
}
118+
119+
// -------------------------------------------------------------------------
120+
// Registration status
121+
// -------------------------------------------------------------------------
122+
123+
public Optional<RegistrationStatus> getRegistrationStatus(String chargeBoxId) {
124+
Lock l = isRegisteredLocks.get(chargeBoxId);
125+
l.lock();
126+
try {
127+
Optional<RegistrationStatus> status = getRegistrationStatusInternal(chargeBoxId);
128+
if (status.isEmpty()) {
129+
unknownChargePointService.processNewUnidentified(chargeBoxId);
130+
}
131+
return status;
132+
} finally {
133+
l.unlock();
134+
}
135+
}
136+
137+
private Optional<RegistrationStatus> getRegistrationStatusInternal(String chargeBoxId) {
138+
// 1. exit if already registered
139+
Optional<String> status = chargePointRepository.getRegistrationStatus(chargeBoxId);
140+
if (status.isPresent()) {
141+
try {
142+
return Optional.ofNullable(RegistrationStatus.fromValue(status.get()));
143+
} catch (Exception e) {
144+
// in cases where the database entry (string) is altered, and therefore cannot be converted to enum
145+
log.error("Exception happened", e);
146+
return Optional.empty();
147+
}
148+
}
149+
150+
// 2. ok, this chargeBoxId is unknown. exit if auto-register is disabled
151+
if (!steveProperties.getOcpp().isAutoRegisterUnknownStations()) {
152+
return Optional.empty();
153+
}
154+
155+
// 3. chargeBoxId is unknown and auto-register is enabled. insert chargeBoxId
156+
try {
157+
this.addChargePointList(Collections.singletonList(chargeBoxId));
158+
log.warn("Auto-registered unknown chargebox '{}'", chargeBoxId);
159+
return Optional.of(RegistrationStatus.ACCEPTED); // default db value is accepted
160+
} catch (Exception e) {
161+
log.error("Failed to auto-register unknown chargebox '{}'", chargeBoxId, e);
162+
return Optional.empty();
163+
}
164+
}
165+
101166
}

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

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

2121
import de.rwth.idsg.steve.ocpp.OcppProtocol;
2222
import de.rwth.idsg.steve.repository.dto.ChargePoint;
23-
import de.rwth.idsg.steve.service.ChargePointRegistrationService;
2423
import de.rwth.idsg.steve.service.ChargePointService;
2524
import de.rwth.idsg.steve.utils.ControllerHelper;
2625
import de.rwth.idsg.steve.utils.mapper.ChargePointDetailsMapper;
@@ -54,7 +53,6 @@
5453
public class ChargePointsController {
5554

5655
protected final ChargePointService chargePointService;
57-
protected final ChargePointRegistrationService chargePointRegistrationService;
5856

5957
protected static final String PARAMS = "params";
6058

@@ -105,7 +103,7 @@ public String getQuery(@ModelAttribute(PARAMS) ChargePointQueryForm params, Mode
105103
private void initList(Model model, ChargePointQueryForm params) {
106104
model.addAttribute(PARAMS, params);
107105
model.addAttribute("cpList", chargePointService.getOverview(params));
108-
model.addAttribute("unknownList", chargePointRegistrationService.getUnknownChargePoints());
106+
model.addAttribute("unknownList", chargePointService.getUnknownChargePoints());
109107
}
110108

111109
@RequestMapping(value = DETAILS_PATH, method = RequestMethod.GET)
@@ -196,7 +194,7 @@ public String addUnknownChargeBoxId(@PathVariable("chargeBoxId") String chargeBo
196194

197195
@RequestMapping(value = UNKNOWN_REMOVE_PATH, method = RequestMethod.POST)
198196
public String removeUnknownChargeBoxId(@PathVariable("chargeBoxId") String chargeBoxId) {
199-
chargePointRegistrationService.removeUnknown(Collections.singletonList(chargeBoxId));
197+
chargePointService.removeUnknown(Collections.singletonList(chargeBoxId));
200198
return toOverview();
201199
}
202200

@@ -235,11 +233,11 @@ private void setCommonAttributesForSingleAdd(Model model) {
235233

236234
private void add(ChargePointForm form) {
237235
chargePointService.addChargePoint(form);
238-
chargePointRegistrationService.removeUnknown(Collections.singletonList(form.getChargeBoxId()));
236+
chargePointService.removeUnknown(Collections.singletonList(form.getChargeBoxId()));
239237
}
240238

241239
private void add(List<String> idList) {
242240
chargePointService.addChargePointList(idList);
243-
chargePointRegistrationService.removeUnknown(idList);
241+
chargePointService.removeUnknown(idList);
244242
}
245243
}

0 commit comments

Comments
 (0)