Skip to content

Commit 8ab84a2

Browse files
committed
Changed server to identify sessions based on a UUID instead of the index on the array. This will affect the handling of incoming requests for a central system implementation.
1 parent f5d9b03 commit 8ab84a2

File tree

15 files changed

+95
-66
lines changed

15 files changed

+95
-66
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Java-OCA-OCPP uses the following libraries:
2828
* [org.hamcrest:hamcrest-all:1.3](http://hamcrest.org)
2929
* [org.mockito:mockito-core:1.10.19](http://mockito.org)
3030
* [spock-core-0.7-groovy-2.0](http://spockframework.org)
31+
* [com.google.guava](https://github.com/google/guava)
3132

3233
To use version 1.6 you need the following libraries:
3334

ocpp-common/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@
5353
<version>1.3</version>
5454
<scope>test</scope>
5555
</dependency>
56+
<dependency>
57+
<groupId>com.google.guava</groupId>
58+
<artifactId>guava</artifactId>
59+
<version>21.0</version>
60+
<scope>compile</scope>
61+
</dependency>
5662
</dependencies>
5763

5864
<build>

ocpp-common/src/main/java/eu/chargetime/ocpp/Client.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public void handleConfirmation(String uniqueId, Confirmation confirmation) {
8383
@Override
8484
public Confirmation handleRequest(Request request) {
8585
Feature feature = findFeatureByRequest(request);
86-
return feature.handleRequest(0, request);
86+
return feature.handleRequest(null, request);
8787
}
8888

8989
@Override

ocpp-common/src/main/java/eu/chargetime/ocpp/Server.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package eu.chargetime.ocpp;
22

3+
import com.google.common.collect.HashBiMap;
34
import eu.chargetime.ocpp.feature.Feature;
45
import eu.chargetime.ocpp.model.Confirmation;
56
import eu.chargetime.ocpp.model.Request;
67

7-
import java.util.ArrayList;
8+
import java.util.UUID;
89
import java.util.concurrent.CompletableFuture;
910
/*
1011
ChargeTime.eu - Java-OCA-OCPP
@@ -40,7 +41,7 @@ of this software and associated documentation files (the "Software"), to deal
4041
*/
4142
public abstract class Server extends FeatureHandler {
4243

43-
private ArrayList<Session> sessions;
44+
private HashBiMap<UUID, Session> sessions;
4445
private Listener listener;
4546

4647
/**
@@ -50,7 +51,7 @@ public abstract class Server extends FeatureHandler {
5051
*/
5152
public Server(Listener listener) {
5253
this.listener = listener;
53-
this.sessions = new ArrayList<>();
54+
this.sessions = HashBiMap.create();
5455
}
5556

5657
/**
@@ -82,7 +83,7 @@ public void handleConfirmation(String uniqueId, Confirmation confirmation) {
8283
@Override
8384
public Confirmation handleRequest(Request request) {
8485
Feature feature = findFeatureByRequest(request);
85-
return feature.handleRequest(sessions.indexOf(session), request);
86+
return feature.handleRequest(sessions.inverse().get(session), request);
8687
}
8788

8889
@Override
@@ -93,7 +94,7 @@ public void handleError(String uniqueId, String errorCode, String errorDescripti
9394

9495
@Override
9596
public void handleConnectionClosed() {
96-
serverEvents.lostSession(sessions.indexOf(session));
97+
serverEvents.lostSession(sessions.inverse().get(session));
9798
sessions.remove(session);
9899
}
99100

@@ -102,8 +103,8 @@ public void handleConnectionOpened() {
102103

103104
}
104105
});
105-
sessions.add(session);
106-
serverEvents.newSession(sessions.indexOf(session));
106+
sessions.put(UUID.randomUUID(), session);
107+
serverEvents.newSession(sessions.inverse().get(session));
107108
});
108109
}
109110

@@ -123,7 +124,7 @@ public void close() {
123124
* @throws UnsupportedFeatureException Thrown if the feature isn't among the list of supported featured.
124125
* @throws OccurenceConstraintException Thrown if the request isn't valid.
125126
*/
126-
public CompletableFuture<Confirmation> send(int sessionIndex, Request request) throws UnsupportedFeatureException, OccurenceConstraintException {
127+
public CompletableFuture<Confirmation> send(UUID sessionIndex, Request request) throws UnsupportedFeatureException, OccurenceConstraintException {
127128
Feature feature = findFeature(request);
128129
if (feature == null)
129130
throw new UnsupportedFeatureException();

ocpp-common/src/main/java/eu/chargetime/ocpp/ServerEvents.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ of this software and associated documentation files (the "Software"), to deal
2424
SOFTWARE.
2525
*/
2626

27+
import java.util.UUID;
28+
2729
public interface ServerEvents {
28-
void newSession(int sessionIndex);
30+
void newSession(UUID sessionIndex);
2931

30-
void lostSession(int sessionIndex);
32+
void lostSession(UUID sessionIndex);
3133
}

ocpp-common/src/main/java/eu/chargetime/ocpp/feature/Feature.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import eu.chargetime.ocpp.model.Confirmation;
55
import eu.chargetime.ocpp.model.Request;
66

7+
import java.util.UUID;
8+
79
/*
810
ChargeTime.eu - Java-OCA-OCPP
911
Copyright (C) 2015-2016 Thomas Volden <[email protected]>
@@ -54,7 +56,7 @@ public Feature(Profile ownerProfile) {
5456
* @param request the {@link Request} to be handled.
5557
* @return the {@link Confirmation} to be send back.
5658
*/
57-
public Confirmation handleRequest(int sessionIndex, Request request) {
59+
public Confirmation handleRequest(UUID sessionIndex, Request request) {
5860
return profile.handleRequest(sessionIndex, request);
5961
}
6062

ocpp-common/src/main/java/eu/chargetime/ocpp/feature/profile/Profile.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import eu.chargetime.ocpp.model.Confirmation;
55
import eu.chargetime.ocpp.model.Request;
66

7+
import java.util.UUID;
8+
79
/*
810
ChargeTime.eu - Java-OCA-OCPP
911
Copyright (C) 2015-2016 Thomas Volden <[email protected]>
@@ -50,5 +52,5 @@ public interface Profile {
5052
* @param request the {@link Request} to be handled.
5153
* @return the {@link Confirmation} to be send.
5254
*/
53-
Confirmation handleRequest(int sessionIndex, Request request);
55+
Confirmation handleRequest(UUID sessionIndex, Request request);
5456
}

ocpp-common/src/test/java/eu/chargetime/ocpp/test/ClientTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public void responseReceived_aMessageWasSend_PromiseIsCompleted() throws Excepti
114114
public void handleRequest_returnsConfirmation() {
115115
// Given
116116
client.connect(null);
117-
when(feature.handleRequest(0, request)).thenReturn(new TestConfirmation());
117+
when(feature.handleRequest(null, request)).thenReturn(new TestConfirmation());
118118

119119
// When
120120
Confirmation conf = eventHandler.handleRequest(request);
@@ -132,7 +132,7 @@ public void handleRequest_callsFeatureHandleRequest() {
132132
eventHandler.handleRequest(request);
133133

134134
// Then
135-
verify(feature, times(1)).handleRequest(eq(0), eq(request));
135+
verify(feature, times(1)).handleRequest(any(), eq(request));
136136
}
137137

138138
@Test

ocpp-common/src/test/java/eu/chargetime/ocpp/test/ServerTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.junit.Test;
1111
import org.mockito.Mock;
1212

13+
import java.util.UUID;
14+
1315
import static org.mockito.Mockito.*;
1416

1517
/*
@@ -45,6 +47,7 @@ public class ServerTest extends TestUtilities {
4547
private Server server;
4648
private SessionEvents sessionEvents;
4749
private ListenerEvents listenerEvents;
50+
private UUID sessionIndex;
4851

4952
@Mock
5053
private Session session = mock(Session.class);
@@ -68,6 +71,7 @@ public void setup() {
6871
when(feature.getAction()).thenReturn(null);
6972
doAnswer(invocation -> listenerEvents = invocation.getArgumentAt(2, ListenerEvents.class)).when(listener).open(anyString(), anyInt(), any());
7073
doAnswer(invocation -> sessionEvents = invocation.getArgumentAt(0, SessionEvents.class)).when(session).accept(any());
74+
doAnswer(invocation -> sessionIndex = invocation.getArgumentAt(0, UUID.class)).when(serverEvents).newSession(any());
7175

7276
server = new Server(listener) {
7377
};
@@ -97,14 +101,13 @@ public void newSession_serverIsListening_callbackWithIndex0() {
97101
listenerEvents.newSession(session);
98102

99103
// Then
100-
verify(serverEvents, times(1)).newSession(eq(0));
104+
verify(serverEvents, times(1)).newSession(any(UUID.class));
101105
}
102106

103107
@Test
104108
public void send_aMessage_isCommunicated() throws Exception {
105109
// Given
106110
String someUniqueId = "some id";
107-
int sessionIndex = 0;
108111

109112
when(session.sendRequest(any(), any())).thenReturn(someUniqueId);
110113
server.open(LOCALHOST, PORT, serverEvents);
@@ -127,14 +130,12 @@ public void handleRequest_callsFeatureHandleRequest() {
127130
sessionEvents.handleRequest(request);
128131

129132
// Then
130-
verify(feature, times(1)).handleRequest(eq(0), eq(request));
133+
verify(feature, times(1)).handleRequest(any(UUID.class), eq(request));
131134
}
132135

133136
@Test
134137
public void send_aMessage_validatesMessage() throws Exception {
135138
// Given
136-
int sessionIndex = 0;
137-
138139
server.open(LOCALHOST, PORT, serverEvents);
139140
listenerEvents.newSession(session);
140141

ocpp-v1_6-test/src/main/java/eu/chargetime/ocpp/test/FakeCentralSystem.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import eu.chargetime.ocpp.model.core.*;
1212

1313
import java.util.Calendar;
14+
import java.util.UUID;
1415

1516
/*
1617
ChargeTime.eu - Java-OCA-OCPP
@@ -44,7 +45,7 @@ public class FakeCentralSystem
4445
private Confirmation receivedConfirmation;
4546
private Server server;
4647

47-
private int currentSessionIndex;
48+
private UUID currentSessionIndex;
4849

4950
private static FakeCentralSystem instance;
5051
private boolean isRigged;
@@ -98,7 +99,7 @@ public void started(serverType type) throws Exception
9899

99100
ServerCoreProfile serverCoreProfile = new ServerCoreProfile(new ServerCoreEventHandler() {
100101
@Override
101-
public AuthorizeConfirmation handleAuthorizeRequest(int sessionIndex, AuthorizeRequest request) {
102+
public AuthorizeConfirmation handleAuthorizeRequest(UUID sessionIndex, AuthorizeRequest request) {
102103
receivedRequest = request;
103104
AuthorizeConfirmation confirmation = new AuthorizeConfirmation();
104105
IdTagInfo tagInfo = new IdTagInfo();
@@ -111,7 +112,7 @@ public AuthorizeConfirmation handleAuthorizeRequest(int sessionIndex, AuthorizeR
111112
}
112113

113114
@Override
114-
public BootNotificationConfirmation handleBootNotificationRequest(int sessionIndex, BootNotificationRequest request) {
115+
public BootNotificationConfirmation handleBootNotificationRequest(UUID sessionIndex, BootNotificationRequest request) {
115116
receivedRequest = request;
116117
BootNotificationConfirmation confirmation = new BootNotificationConfirmation();
117118
try {
@@ -125,29 +126,29 @@ public BootNotificationConfirmation handleBootNotificationRequest(int sessionInd
125126
}
126127

127128
@Override
128-
public DataTransferConfirmation handleDataTransferRequest(int sessionIndex, DataTransferRequest request) {
129+
public DataTransferConfirmation handleDataTransferRequest(UUID sessionIndex, DataTransferRequest request) {
129130
receivedRequest = request;
130131
DataTransferConfirmation confirmation = new DataTransferConfirmation();
131132
confirmation.setStatus(DataTransferStatus.Accepted);
132133
return failurePoint(confirmation);
133134
}
134135

135136
@Override
136-
public HeartbeatConfirmation handleHeartbeatRequest(int sessionIndex, HeartbeatRequest request) {
137+
public HeartbeatConfirmation handleHeartbeatRequest(UUID sessionIndex, HeartbeatRequest request) {
137138
receivedRequest = request;
138139
HeartbeatConfirmation confirmation = new HeartbeatConfirmation();
139140
confirmation.setCurrentTime(Calendar.getInstance());
140141
return failurePoint(confirmation);
141142
}
142143

143144
@Override
144-
public MeterValuesConfirmation handleMeterValuesRequest(int sessionIndex, MeterValuesRequest request) {
145+
public MeterValuesConfirmation handleMeterValuesRequest(UUID sessionIndex, MeterValuesRequest request) {
145146
receivedRequest = request;
146147
return failurePoint(new MeterValuesConfirmation());
147148
}
148149

149150
@Override
150-
public StartTransactionConfirmation handleStartTransactionRequest(int sessionIndex, StartTransactionRequest request) {
151+
public StartTransactionConfirmation handleStartTransactionRequest(UUID sessionIndex, StartTransactionRequest request) {
151152
receivedRequest = request;
152153
IdTagInfo tagInfo = new IdTagInfo();
153154
tagInfo.setStatus(AuthorizationStatus.Accepted);
@@ -158,14 +159,14 @@ public StartTransactionConfirmation handleStartTransactionRequest(int sessionInd
158159
}
159160

160161
@Override
161-
public StatusNotificationConfirmation handleStatusNotificationRequest(int sessionIndex, StatusNotificationRequest request) {
162+
public StatusNotificationConfirmation handleStatusNotificationRequest(UUID sessionIndex, StatusNotificationRequest request) {
162163
receivedRequest = request;
163164
StatusNotificationConfirmation confirmation = new StatusNotificationConfirmation();
164165
return failurePoint(confirmation);
165166
}
166167

167168
@Override
168-
public StopTransactionConfirmation handleStopTransactionRequest(int sessionIndex, StopTransactionRequest request) {
169+
public StopTransactionConfirmation handleStopTransactionRequest(UUID sessionIndex, StopTransactionRequest request) {
169170
receivedRequest = request;
170171
StopTransactionConfirmation confirmation = new StopTransactionConfirmation();
171172
return failurePoint(confirmation);
@@ -186,13 +187,13 @@ public StopTransactionConfirmation handleStopTransactionRequest(int sessionIndex
186187

187188
server.open("localhost", port, new ServerEvents() {
188189
@Override
189-
public void newSession(int sessionIndex) {
190+
public void newSession(UUID sessionIndex) {
190191
currentSessionIndex = sessionIndex;
191192
}
192193

193194
@Override
194-
public void lostSession(int identity) {
195-
currentSessionIndex = -1;
195+
public void lostSession(UUID identity) {
196+
currentSessionIndex = null;
196197
// clear
197198
receivedConfirmation = null;
198199
receivedRequest = null;

0 commit comments

Comments
 (0)